Skip to main content

agensflow-langgraph

Decorator-based routing for LangGraph agents. Learn which model in your declared pool each node of your graph should use — automatically, per node, from feedback.

Status: v0.1.3 (alpha).

The free-tier bundle

Everything needed to run an adaptive MAS end-to-end, no hosted service, no external dependencies:

Piece What it is
agensflow-mcp The policy server. UCB1 bandits, tenant isolation, HTTP + MCP surfaces. Self-hostable (SQLite or Postgres) or hosted.
agensflow-langgraph This package. The @agensflow decorator wraps any LangGraph node and routes its LLM calls through the server.
Starter policies examples/starter_policies/ — two importable starters for the security-domain MAS: paper priors (model-agnostic) and paper priors + 120 modern-model runs.

Try it in Colab

Two notebooks, one warm-start path each. Both run the same 6-node security-domain MAS on the same paper task; only Section 4 (the starter import) differs.

Open In Colab

quickstart.ipynb — paper priors, model-agnostic. Bring your own model pool; watch the substrate adapt from a lightweight starter.

Open In Colab

quickstart_adapted.ipynb — paper priors + 120 real runs on modern Anthropic + ThinkingMachines models. Stronger starting policy if you use those specific tiers.

Both boot the policy server in-process (no separate uvicorn), issue an API key, import the chosen starter, build a real 6-node MAS with verifier gate + revision loop, and run against OpenRouter. Runtime ~5-8 min. Cost ~$1-2.

Install

pip install agensflow-langgraph
# For the notebook / examples:
pip install agensflow-mcp langchain-openai jupyter

60-second example

from langgraph.graph import StateGraph
from langchain_openai import ChatOpenAI
from agensflow_langgraph import agensflow, record_reward

# OpenRouter unifies every provider under one API key — one env var, many models
def or_model(model_id: str):
    return ChatOpenAI(
        base_url="https://openrouter.ai/api/v1",
        api_key=os.environ["OPENROUTER_API_KEY"],
        model=model_id,
    )

# Declare a per-node pool. The substrate learns which arm wins.
@agensflow(pool={
    "cheap":    or_model("openai/gpt-4o-mini"),
    "balanced": or_model("openai/gpt-4o"),
    "deep":     or_model("anthropic/claude-sonnet-4"),
})
async def classify_intent(state, model, config=None):
    return {"messages": [await model.ainvoke(state["messages"])]}

graph = StateGraph(State)
graph.add_node("classify_intent", classify_intent)
# ... rest of your graph unchanged

# Attach an explicit reward at the graph terminal
def terminal(state):
    record_reward(thread_id=state.get("thread_id"), quality=0.85)
    return {...}

Every model call inside a decorated node routes through the policy server; UCB1 over per-node signatures picks the pool arm. Cost + tokens are captured via LangChain's AIMessage.usage_metadata callback path.

Two topology examples

  • examples/evidence_heavy_mas/ — linear planner → memory → solver → verifier → evaluator with a verifier-gate revision loop. Exercises conditional edges + revision cycles.
  • examples/parallel_critic_mas/ — solver fans out to critic + verifier in parallel, evaluator merges both signals. Exercises parallel node execution + fan-in state reducers.

Both use real ChatOpenAI(base_url=openrouter) calls, structured Pydantic handoffs via .with_structured_output(method="function_calling"), and InMemorySaver checkpointing.

Configuration

export AGENSFLOW_SERVER_URL="https://mcp.agensflow.ai"   # or your self-hosted URL
export AGENSFLOW_API_KEY="agf_..."                        # bearer token
export OPENROUTER_API_KEY="sk-or-..."                     # for the examples

Or pass them per-decorator:

@agensflow(pool={...}, server_url="http://localhost:8000", tenant_key="agf_...")

Documentation

  • Integration guide — fail-open behavior, three reward paths (explicit / verifier / OpenRouter judge), signature derivation, idempotency, warm-start, streaming, checkpointer + thread_id, real-model cost capture
  • Starter policies — how to import a converged policy for warm-start
  • Individual example READMEs in examples/*/README.md

License

Apache-2.0

Metadata

Release files for agensflow-langgraph 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agensflow-langgraph 0.1.4
File Size Uploaded
agensflow_langgraph-0.1.4.tar.gz 256.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for agensflow-langgraph 0.1.4
File Interpreter ABI Platform
agensflow_langgraph-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 287.7 kB

Release files / agensflow_langgraph-0.1.4.tar.gz

Download URL agensflow_langgraph-0.1.4.tar.gz
Size 256.1 kB
Tags Source
SHA-256 checksum
How to use checksums
22b6c9ae211643c83d2934f902a71fe1abcd583b7d1facea2beadf7c8d71a168
BLAKE2b-256 checksum
How to use checksums
ba4ab5359a660061262256a9f3c47fae80580dfe869ff5f7b6462a479468a28a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via Hatch/1.17.1 {"ci":null,"cpu":"x86_64","distro":{"name":"macOS","version":"14.6.1"},"implementation":{"name":"CPython","version":"3.11.11"},"installer":{"name":"hatch","version":"1.17.1"},"openssl_version":"OpenSSL 3.6.2 7 Apr 2026","python":"3.11.11","system":{"name":"Darwin","release":"23.6.0"}} HTTPX2/2.5.0

Release files / agensflow_langgraph-0.1.4-py3-none-any.whl

Download URL agensflow_langgraph-0.1.4-py3-none-any.whl
Size 31.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
78e367958e363a26d66b25e6b86df7cf7a739f8b963d8ccb8218aee605e1202b
BLAKE2b-256 checksum
How to use checksums
42fec4e50a0bd2eb9638732be7f1eb8de57b09bf34d5ba9877efec26b2a2af23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via Hatch/1.17.1 {"ci":null,"cpu":"x86_64","distro":{"name":"macOS","version":"14.6.1"},"implementation":{"name":"CPython","version":"3.11.11"},"installer":{"name":"hatch","version":"1.17.1"},"openssl_version":"OpenSSL 3.6.2 7 Apr 2026","python":"3.11.11","system":{"name":"Darwin","release":"23.6.0"}} HTTPX2/2.5.0

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page