Agent Langchain¶
Agent LangChain — mvp.agent_langchain
Cluster: Agents & LLM | Type: component | MCP Tools: 30
Overview¶
LangChain multi-provider chat agent that routes requests to OpenAI-compatible, OpenRouter, Anthropic, or Ollama backends through a unified interface. Supports multi-turn sessions via in-block state keyed by session_id, and integrates LifecycleMixin with resource guardrails for production use.
When to use:
- Running LLM-backed conversations across OpenAI-compatible, OpenRouter, Anthropic, or local Ollama models without changing calling code
- Maintaining persistent multi-turn conversation sessions within a single block instance
- Embedding LangChain chains into the G6 pipeline alongside other AIBlock components
Example:
from mvp.agent_langchain import AgentLangChainBlock, LangChainInput, LangChainMessage
block = AgentLangChainBlock(name="langchain")
result = block.infer(LangChainInput(
messages=[LangChainMessage(role="user", content="Summarise quantum entanglement.")],
provider="ollama",
model="gpt-oss:20b",
session_id="sess-001",
))
# result.ok → True; result.value → LangChainOutput with response, provider, session_id
Works well with: agent_openai, agent_autogen, llm_router
Launch Readiness Notes¶
This component is suitable for Phase 0 pilot workflows where the goal is to let a non-technical user install the MCP package, call a chat/chain/RAG workflow, and receive a useful result quickly.
Known caveats before treating it as hardened paid-customer infrastructure:
- The skill-level MCP delegate is thin; authoritative tool registration lives in
langchain_mcp/server.py. - Provider capability discovery is explicit via
provider_capabilities/langchain_provider_capabilitiesand reports booleans only; it must not expose API key values. - The MCP RAG path uses lightweight local TF-IDF retrieval and prompt assembly over caller/stored documents. It is useful for demos and small document sets, but it is not semantic/vector retrieval and is not robust enough for large corpora, citations, permissions, or compliance-sensitive retrieval.
- The component relies on surrounding platform controls for authentication, rate limits, billing enforcement, tenant isolation, and production observability. Do not expose it as a standalone public endpoint without those layers.
- Streaming responses are not implemented in this component path.
Public API¶
AgentLangChainBlock(LifecycleMixin, AIBlock[LangChainInput, LangChainOutput, dict])¶
LangChain multi-provider agent (anthropic / openrouter / ollama).
| Field | Type | Default |
|---|---|---|
name | str | 'agent_langchain' |
state | dict | field(default_factory=dict) |
resource_bounds | ResourceBounds \| None | None |
usage | ResourceUsage | field(default_factory=ResourceUsage) |
Methods:
infer(data: LangChainInput) -> Result[LangChainOutput]¶
LangChainMessage(BaseModel)¶
| Field | Type | Default |
|---|---|---|
role | str | required |
content | str | required |
LangChainInput(BaseModel)¶
| Field | Type | Default |
|---|---|---|
messages | list[LangChainMessage] | required |
system_prompt | str | '' |
model | str | 'gpt-4o-mini' |
max_tokens | int | 1024 |
temperature | float | 0.7 |
api_key | str | '' |
base_url | str | '' |
provider | str | 'openai' |
session_id | str | '' |
allow_paid_api | bool | False |
LangChainOutput(BaseModel)¶
| Field | Type | Default |
|---|---|---|
response | str | required |
model | str | '' |
metadata | dict[str, Any] | Field(default_factory=dict) |
n_messages | int | 0 |
provider | str | '' |
session_id | str | '' |
chain_steps | list[dict[str, Any]] | Field(default_factory=list) |
degraded | bool | False |
degradation_reason | str | '' |
completion_state | str | 'qualified-draft' |
warning_card | dict[str, Any] | Field(default_factory=dict) |
evidence | dict[str, Any] | Field(default_factory=dict) |
request_id | str | '' |
task_id | str | '' |
run_id | str | '' |
AdaptLangChainMCPBlock(AIBlock[MCPLangChainInput, MCPLangChainOutput, None])¶
SQLite-backed LangChain MCP block with 27 ops.
| Field | Type | Default |
|---|---|---|
name | str | 'AdaptLangChainMCPBlock' |
db_path | str | ':memory:' |
agentic_planner | object | None |
Methods:
infer(data: MCPLangChainInput) -> Result[MCPLangChainOutput]¶
MCPLangChainInput(BaseModel)¶
| Field | Type | Default |
|---|---|---|
op | Literal['chat', 'chain', 'tools', 'rag', 'status', 'ops', 'help', 'save_session', 'load_session', 'list_sessions', 'delete_session', 'store_chain', 'retrieve_chain', 'list_chains', 'delete_chain', 'add_documents', 'search_documents', 'list_documents', 'delete_documents', 'register_tool', 'list_tools', 'remove_tool', 'record_interaction', 'query_interactions', 'summarize_interactions', 'search', 'info', 'provider_capabilities', 'recommend_provider', 'list_patterns'] | required |
messages | list[dict] | Field(default_factory=list) |
system_prompt | str | '' |
prompt_template | str | '' |
variables | dict[str, Any] | Field(default_factory=dict) |
tools | list[dict] | Field(default_factory=list) |
query | str | '' |
documents | list[str] | Field(default_factory=list) |
top_k | int | 3 |
model | str | 'gpt-4o-mini' |
max_tokens | int | 1024 |
temperature | float | 0.7 |
api_key | str | '' |
base_url | str | '' |
provider | str | '' |
allow_paid_api | bool | False |
session_id | str | '' |
session_name | str | '' |
metadata | dict[str, Any] | Field(default_factory=dict) |
chain_id | str | '' |
chain_name | str | '' |
parser | str | 'str' |
config | dict[str, Any] | Field(default_factory=dict) |
doc_id | str | '' |
content | str | '' |
source | str | '' |
tool_name | str | '' |
description | str | '' |
tool_schema | dict[str, Any] | Field(default_factory=dict, alias='schema') |
input_data | dict[str, Any] | Field(default_factory=dict) |
response | str | '' |
limit | int | 20 |
MCPLangChainOutput(BaseModel)¶
| Field | Type | Default |
|---|---|---|
op | str | '' |
error | str | '' |
key | str | '' |
value | Any | None |
found | bool | False |
count | int | 0 |
records | list[dict] | Field(default_factory=list) |
retrieved | list[Any] | Field(default_factory=list) |
summary | str | '' |
message | str | '' |
metadata | dict[str, Any] | Field(default_factory=dict) |
degraded | bool | False |
degradation_reason | str | '' |
completion_state | str | 'qualified-draft' |
warning_card | dict[str, Any] | Field(default_factory=dict) |
evidence | dict[str, Any] | Field(default_factory=dict) |
request_id | str | '' |
task_id | str | '' |
run_id | str | '' |
LangChainStore¶
Constructor:
| Parameter | Type | Default |
|---|---|---|
db_path | str | ':memory:' |
Methods:
save_session(session_id: str, session_name: str, messages: list, model: str, metadata: dict) -> dict¶
load_session(session_id: str) -> dict | None¶
list_sessions() -> list[dict]¶
delete_session(session_id: str) -> int¶
store_chain(chain_id: str, chain_name: str, prompt_template: str, model: str, parser: str, config: dict) -> dict¶
retrieve_chain(chain_id: str) -> dict | None¶
list_chains() -> list[dict]¶
delete_chain(chain_id: str) -> int¶
add_documents(doc_id: str, content: str, source: str, metadata: dict) -> dict¶
list_documents() -> list[dict]¶
delete_documents(doc_id: str) -> int¶
search_documents(query: str, top_k: int = 3) -> list[dict]¶
register_tool(tool_name: str, description: str, schema: dict) -> dict¶
list_tools() -> list[dict]¶
remove_tool(tool_name: str) -> int¶
record_interaction(session_id: str, input_data: dict, response: str, model: str, metadata: dict) -> dict¶
query_interactions(session_id: str = '', limit: int = 20) -> list[dict]¶
summarize_interactions(session_id: str = '') -> dict¶
search(query: str, top_k: int = 5) -> list[dict]¶
count_all() -> dict¶
info() -> dict¶
MCP Tools¶
| Operation | Source |
|---|---|
chat | langchain_mcp |
chain | langchain_mcp |
tools | langchain_mcp |
rag | langchain_mcp |
status | langchain_mcp |
ops | langchain_mcp |
help | langchain_mcp |
save_session | langchain_mcp |
load_session | langchain_mcp |
list_sessions | langchain_mcp |
delete_session | langchain_mcp |
store_chain | langchain_mcp |
retrieve_chain | langchain_mcp |
list_chains | langchain_mcp |
delete_chain | langchain_mcp |
add_documents | langchain_mcp |
search_documents | langchain_mcp |
list_documents | langchain_mcp |
delete_documents | langchain_mcp |
register_tool | langchain_mcp |
list_tools | langchain_mcp |
remove_tool | langchain_mcp |
record_interaction | langchain_mcp |
query_interactions | langchain_mcp |
summarize_interactions | langchain_mcp |
search | langchain_mcp |
info | langchain_mcp |
provider_capabilities | langchain_mcp |
recommend_provider | langchain_mcp |
list_patterns | langchain_mcp |