Skip to content

sontianye/nexus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸŒ€ Nexus

Multi-Agent Orchestration Framework for Python

3 orchestration modes Β· 100+ LLM providers Β· Built-in tool calling & MCP

PyPI Python 3.11+ License: MIT CI

English | δΈ­ζ–‡ | Examples


Why Nexus?

Most agent frameworks force you to choose: simple API (Swarm) or powerful workflows (LangGraph). Nexus gives you both β€” start with 5 lines of code, scale to complex DAG workflows, LLM-based routing, and self-organizing agent teams.

import asyncio
from nexus import Team

async def main():
    async with Team(model="gpt-4o", api_key="sk-...") as team:
        team.add_agent("coder", instructions="You write clean Python code.")
        team.add_agent("writer", instructions="You write engaging articles.")
        result = await team.run("Implement a binary search in Python")
        print(result)  # β†’ Automatically routed to 'coder'

asyncio.run(main())

✨ Highlights

Feature Description
πŸ”€ 3 Orchestration Modes Static Graph (DAG) Β· Dynamic Router (LLM triage) Β· Adaptive (embedding matching)
🌍 100+ LLM Providers OpenAI, Anthropic, Groq, Deepseek, Mistral, Qwen, Ollama, Azure, Bedrock, Vertex AI… via LiteLLM
πŸ”§ Tool Calling ReAct loop (Think β†’ Act β†’ Observe β†’ Repeat) with auto schema extraction from Python type hints
πŸ”Œ Protocol-Native MCP for tool servers Β· A2A for agent discovery
πŸ’¬ Multi-turn & Streaming Conversation memory with chat() and real-time token streaming with stream()
πŸ›‘οΈ Production-Grade Token budgets Β· Checkpoint/resume Β· Retry/fallback policies Β· Tracing Β· Metrics

Installation

# Recommended β€” unlocks 100+ LLM providers
pip install nexus-agents[litellm]

# Or pick a specific provider
pip install nexus-agents[openai]       # OpenAI only
pip install nexus-agents[anthropic]    # Anthropic only

# Everything (all providers + MCP + observability)
pip install nexus-agents[all]

Quick Start

Multi-Agent with Auto-Routing

import asyncio
from nexus import Team

async def main():
    async with Team(model="gpt-4o", api_key="sk-...") as team:
        team.add_agent("coder", instructions="You write Python code.")
        team.add_agent("writer", instructions="You write articles.")
        team.add_agent("analyst", instructions="You analyze data.")

        # The router examines each task and picks the best agent
        await team.run("Implement quicksort in Python")    # β†’ coder
        await team.run("Write a blog post about AI agents") # β†’ writer

asyncio.run(main())

Tool Calling (ReAct Loop)

Define tools as plain Python functions β€” Nexus extracts the JSON schema automatically:

def calculate(expression: str) -> str:
    """Evaluate a math expression. Example: '2**32 - 1'"""
    return str(eval(expression))

def get_current_time() -> str:
    """Get the current UTC time."""
    from datetime import datetime, timezone
    return datetime.now(timezone.utc).isoformat()

async with Team(model="gpt-4o", api_key="sk-...") as team:
    team.add_agent(
        "assistant",
        instructions="Use tools to answer questions accurately.",
        tools=[calculate, get_current_time],
    )
    result = await team.run("What is 2^32 - 1?")
    # πŸ”§ Agent calls calculate("2**32 - 1") β†’ "4294967295"
    # ✨ Agent responds: "2³² - 1 = 4,294,967,295"

Multi-turn Conversation

async with Team(model="gpt-4o", api_key="sk-...") as team:
    team.add_agent("assistant", instructions="You are helpful.")

    r1 = await team.chat("What is the Fibonacci sequence?")
    r2 = await team.chat("Show me the first 10 numbers")  # Remembers context
    team.reset_conversation()  # Clear history

Streaming Output

async with Team(model="gpt-4o", api_key="sk-...") as team:
    team.add_agent("storyteller", instructions="You tell captivating stories.")

    async for chunk in team.stream("Tell me a story about a time-traveling robot"):
        print(chunk, end="", flush=True)

πŸ“‚ More examples β†’ See the examples/ directory for runnable demos: tool calling, MCP integration, Graph/Router/Adaptive orchestration modes, and more.

# Clone and run
git clone https://github.com/sontianye/nexus.git && cd nexus
pip install -e '.[all]'
cp examples/.env.example examples/.env  # Add your API key
python examples/demo_tools.py simple    # Try tool calling
python examples/demo_modes.py graph     # Try graph orchestration

Three Orchestration Modes

πŸ”· Graph β€” Static DAG Workflows

For deterministic pipelines where you know the exact steps:

from nexus.orchestration.graph import GraphOrchestrator, START, END

graph = GraphOrchestrator()
graph.add_node("research", research_fn)
graph.add_node("write", write_fn)
graph.add_node("review", review_fn)

graph.add_edge(START, "research")
graph.add_edge("research", "write")
graph.add_edge("write", "review")
graph.add_conditional_edge(
    "review",
    lambda state: "write" if state.get("needs_revision") else END
)

result = await graph.execute({"topic": "AI Agents"})

πŸ”Ά Router β€” Dynamic LLM-Based Routing

A triage agent examines each request and picks the best specialist:

from nexus.orchestration.topology import TopologyMode

async with Team(model="gpt-4o", mode=TopologyMode.ROUTER) as team:
    team.add_agent("coder", instructions="You write code.")
    team.add_agent("writer", instructions="You write prose.")
    await team.run("Implement quicksort in Python")  # β†’ routes to coder

πŸ”΄ Adaptive β€” Embedding-Based Capability Matching

Agents are matched to tasks via cosine similarity on capability vectors β€” unique to Nexus:

from nexus import AgentCapability
from nexus.orchestration.topology import TopologyMode

async with Team(
    model="gpt-4o",
    mode=TopologyMode.ADAPTIVE,
    embedding_model="text-embedding-3-small",
) as team:
    team.add_agent("coder", capabilities=AgentCapability(coding=1.0, reasoning=0.8))
    team.add_agent("writer", capabilities=AgentCapability(creativity=1.0, language=0.9))
    await team.run("Write a poem about recursion")  # β†’ capability match β†’ writer

100+ LLM Providers

Switch models by changing one string. Zero code changes:

Team(model="gpt-4o")                                    # OpenAI
Team(model="anthropic/claude-sonnet-4-20250514")      # Anthropic
Team(model="groq/llama-3.1-70b-versatile")              # Groq (ultra-fast)
Team(model="deepseek/deepseek-chat")                     # Deepseek
Team(model="vertex_ai/gemini-1.5-pro")                   # Google Vertex AI
Team(model="bedrock/anthropic.claude-3-sonnet")          # AWS Bedrock
Team(model="ollama/llama3.1")                            # Local (Ollama)

# Any OpenAI-compatible endpoint
Team(model="openai/my-model", api_base="https://my-api.com/v1", api_key="sk-...")

# Mix models per agent
async with Team(model="gpt-4o") as team:
    team.add_agent("fast", model="groq/llama-3.1-70b-versatile")   # Speed
    team.add_agent("smart", model="anthropic/claude-sonnet-4-20250514") # Quality

Full list β†’ LiteLLM Providers


MCP Protocol Integration

Connect agents to any MCP tool server:

from nexus.protocol.mcp import MCPToolProvider

# Local MCP server via stdio
async with MCPToolProvider("npx", ["-y", "@modelcontextprotocol/server-filesystem", "."]) as mcp:
    tools = await mcp.get_tools()
    team.add_agent("file_agent", tools=tools)

# Remote MCP server via HTTP/SSE
async with MCPToolProvider(url="https://mcp-server.example.com/sse") as mcp:
    tools = await mcp.get_tools()
    team.add_agent("web_agent", tools=tools)

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Developer API                                       β”‚
β”‚  Team Β· CLI Β· @tool decorator Β· YAML config          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Observability                                       β”‚
β”‚  Distributed Tracing Β· Metrics Β· Token Accounting    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Orchestration                                       β”‚
β”‚  πŸ”· Graph  Β·  πŸ”Ά Router  Β·  πŸ”΄ Adaptive             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Runtime                                             β”‚
β”‚  Execution Engine Β· Checkpoint Β· Retry / Fallback    β”‚
β”‚  Token Budget Β· Auto-Degradation Strategies          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Protocol + Core                                     β”‚
β”‚  Agent Β· Task Β· Handoff Β· Message                    β”‚
β”‚  A2A Protocol Β· MCP Protocol Β· Discovery Service     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Model Providers                                     β”‚
β”‚  OpenAI Β· Anthropic Β· Ollama Β· LiteLLM (100+)       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Project Structure

nexus/
β”œβ”€β”€ api.py                  # Team β€” high-level API
β”œβ”€β”€ cli.py                  # CLI: init / run / chat / inspect
β”œβ”€β”€ core/                   # Agent, Task, Handoff, Message, State
β”œβ”€β”€ models/                 # OpenAI, Anthropic, Ollama, LiteLLM providers
β”œβ”€β”€ orchestration/          # Graph, Router, Adaptive, TopologyEngine
β”œβ”€β”€ protocol/               # A2A, MCP, MessageBus, Discovery
β”œβ”€β”€ runtime/                # Engine, Checkpoint, Budget, Policies
└── observability/          # Tracing, Metrics

How Nexus Compares

Feature Nexus LangGraph CrewAI Swarm
Graph Workflows βœ… βœ… β€” β€”
Dynamic LLM Routing βœ… β€” ⚠️ βœ…
Adaptive Matching βœ… β€” β€” β€”
100+ Providers (LiteLLM) βœ… β€” β€” β€”
MCP Protocol βœ… β€” β€” β€”
A2A Protocol βœ… β€” β€” β€”
Tool Calling βœ… βœ… βœ… βœ…
Streaming βœ… βœ… β€” β€”
Token Budgets βœ… β€” β€” β€”
Checkpoint / Resume βœ… βœ… β€” β€”
Minimal API (5 lines) βœ… β€” βœ… βœ…

Note: "β€”" means not built-in. Some features may be available via plugins or custom code.


Roadmap

  • Core primitives (Agent + Task + Handoff)
  • 3 orchestration modes (Graph / Router / Adaptive)
  • LiteLLM integration (100+ providers)
  • Tool calling with ReAct loop
  • MCP protocol integration
  • A2A protocol support
  • Streaming responses
  • Multi-turn conversation
  • Token budget management
  • Checkpoint / resume
  • Observability (tracing + metrics)
  • CLI (init / run / chat / inspect)
  • Agent memory (long-term RAG)
  • OpenTelemetry export
  • Web UI dashboard
  • Multi-modal (vision, audio)
  • Distributed execution

Contributing

Contributions are welcome! See CONTRIBUTING.md for guidelines.

git clone https://github.com/sontianye/nexus.git
cd nexus
uv venv --python 3.12 .venv && uv pip install --python .venv/bin/python -e ".[all,dev]"
.venv/bin/python tests/test_smoke.py  # Verify everything works

License

MIT Β© 2025–2026 Nexus Contributors


⭐ If Nexus is useful to you, please star this repo β€” it helps others discover it!

Examples Β· Issues Β· Discussions

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages