Skip to content

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_capabilities and 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