A multi-agent ecosystem for large language models (LLMs) and autonomous systems.
Project description
๐ LangSwarm
Multi-Agent AI Orchestration Framework
Build intelligent systems where multiple AI agents collaborate to solve complex tasks. LangSwarm makes it easy to create, orchestrate, and scale AI agent workflows with support for all major LLM providers and a rich ecosystem of tools.
๐ Key Features (v0.1.0)
- ๐ค Multi-Agent Governance: Built-in approval workflows (
ApprovalQueue) for human-in-the-loop control. - ๐
Autonomous Scheduling: Schedule recurring tasks and reliable background jobs (
JobManager). - ๐ง MemoryPro: Advanced hybrid memory with priority tiers and automatic fading.
- ๐ฐ Token Budgeting: Real-time cost estimation and strict budget enforcement.
- ๐ Unified Provider: One interface for OpenAI, Anthropic, Gemini, Mistral, and local models.
๐ฏ What is LangSwarm?
LangSwarm is a framework for multi-agent AI orchestration. Unlike simple chatbot libraries, LangSwarm enables you to:
- Orchestrate multiple specialized agents working together on complex tasks
- Build workflows where agents collaborate, hand off work, and combine their outputs
- Integrate tools through the Model Context Protocol (MCP) for real-world capabilities
- Support any LLM provider (OpenAI, Anthropic, Google, Mistral, local models, and more)
- Scale from prototypes to production with enterprise-grade memory, observability, and deployment options
Why Multi-Agent?
Single AI agents hit limits quickly. Multi-agent systems unlock:
- Specialization: Each agent excels at specific tasks (research, writing, analysis, coding)
- Collaboration: Agents work together, combining strengths and compensating for weaknesses
- Scalability: Distribute workload across multiple agents and providers
- Reliability: Redundancy and validation through multiple perspectives
- Modularity: Build, test, and deploy agents independently
โก Quick Start
Installation
pip install langswarm openai
export OPENAI_API_KEY="your-api-key-here"
Simple Agent (30 seconds)
import asyncio
from langswarm import create_agent
async def main():
# Create an agent
agent = create_agent(model="gpt-3.5-turbo")
# Chat with it
response = await agent.chat("What's the capital of France?")
print(response)
asyncio.run(main())
Multi-Agent Orchestration (Real Power)
from langswarm import create_agent
from langswarm.core.agents import register_agent
from langswarm.core.workflows import create_simple_workflow, get_workflow_engine
# Create specialized agents
researcher = create_agent(
name="researcher",
model="gpt-4",
system_prompt="You are a research specialist. Gather comprehensive information."
)
writer = create_agent(
name="writer",
model="gpt-4",
system_prompt="You are a writing specialist. Create clear, engaging content."
)
# Register for orchestration
register_agent(researcher)
register_agent(writer)
# Create workflow: researcher โ writer
workflow = create_simple_workflow(
workflow_id="content_creation",
name="Research and Write",
agent_chain=["researcher", "writer"]
)
# Execute orchestrated workflow
engine = get_workflow_engine()
result = await engine.execute_workflow(
workflow=workflow,
input_data={"input": "Write an article about AI agents"}
)
print(result.output) # Final result from both agents working together
๐ง Core Concepts
1. Agents
Agents are AI-powered entities with specific roles and capabilities. LangSwarm supports:
- Multiple providers: OpenAI, Anthropic (Claude), Google (Gemini), Mistral, Cohere, local models
- Flexible configuration: System prompts, temperature, tools, memory
- Built-in capabilities: Streaming, structured outputs, cost tracking
# Simple agent creation
agent = create_agent(model="gpt-4", memory=True)
# Advanced agent with tools
agent = create_agent(
name="assistant",
model="gpt-4",
system_prompt="You are a helpful assistant",
tools=["filesystem", "web_search"]
)
2. Workflows
Workflows define how agents collaborate:
- Sequential: Agent A โ Agent B โ Agent C
- Parallel: Multiple agents work simultaneously
- Conditional: Route based on results or criteria
- Nested: Complex multi-stage pipelines
# Simple sequential workflow
workflow = create_simple_workflow("task", "My Task", ["agent1", "agent2"])
# Execute
engine = get_workflow_engine()
result = await engine.execute_workflow(workflow, {"input": "task data"})
3. Tools (MCP)
LangSwarm implements the Model Context Protocol (MCP) for tool integration:
Built-in Tools:
filesystem- File operations (read, write, list)web_search- Web search capabilitiesgithub- GitHub repository operationssql_database- SQL database accessbigquery_vector_search- Semantic search in BigQuerycodebase_indexer- Code analysis and understandingworkflow_executor- Dynamic workflow executiontasklist- Task managementmessage_queue- Pub/sub message handling
# Agent with tools
agent = create_agent(
model="gpt-4",
tools=["filesystem", "web_search"]
)
# Tools are automatically injected
response = await agent.chat("Find the latest Python news and save it to a file")
4. Memory
Conversation history and context management with multiple backends:
- SQLite: Zero-config, local development
- Redis: Fast, distributed caching
- ChromaDB: Vector embeddings and semantic search
- BigQuery: Analytics-ready, enterprise scale
- Elasticsearch: Full-text search and analytics
- Qdrant: High-performance vector search
- Pinecone: Managed vector database
# Simple memory (in-memory, no persistence)
agent = create_agent(model="gpt-4", memory=True)
# Persistent memory with SQLite
from langswarm.core.memory import create_memory_manager
memory = create_memory_manager(
backend="sqlite",
db_path="./conversations.db"
)
agent = create_agent(
model="gpt-4",
memory=True,
memory_manager=memory
)
๐๏ธ Architecture
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ LangSwarm Framework โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ Agents โ โ Workflows โ โ Tools โ โ
โ โ โ โ โ โ โ โ
โ โ โข OpenAI โ โ โข Sequential โ โ โข MCP Local โ โ
โ โ โข Anthropic โ โ โข Parallel โ โ โข MCP Remote โ โ
โ โ โข Google โ โ โข Conditionalโ โ โข Built-in โ โ
โ โ โข Mistral โ โ โข Nested โ โ โข Custom โ โ
โ โ โข Local โ โ โ โ โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Infrastructure Layer โ โ
โ โ โ โ
โ โ Memory Session Observability โ โ
โ โ โข SQLite โข Storage โข OpenTelemetry โ โ
โ โ โข Redis โข Providers โข Tracing โ โ
โ โ โข ChromaDB โข Lifecycle โข Metrics โ โ
โ โ โข BigQuery โข Management โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Use Cases
Content Creation Pipeline
from langswarm import create_agent
from langswarm.core.agents import register_agent
from langswarm.core.workflows import create_simple_workflow, get_workflow_engine
# Specialized agents
researcher = create_agent(
name="researcher",
model="gpt-4",
system_prompt="Research topics thoroughly"
)
writer = create_agent(
name="writer",
model="gpt-4",
system_prompt="Write engaging content"
)
editor = create_agent(
name="editor",
model="gpt-4",
system_prompt="Edit and polish"
)
# Register all
for agent in [researcher, writer, editor]:
register_agent(agent)
# Workflow: research โ write โ edit
workflow = create_simple_workflow(
workflow_id="content",
name="Content Pipeline",
agent_chain=["researcher", "writer", "editor"]
)
# Execute
result = await get_workflow_engine().execute_workflow(
workflow, {"input": "AI in Healthcare"}
)
Code Analysis & Documentation
# Agent with code analysis tools
coder = create_agent(
model="gpt-4",
tools=["codebase_indexer", "filesystem", "github"]
)
# Analyze and document
result = await coder.chat(
"Analyze the repository, find all API endpoints, and create documentation"
)
Customer Support System
# Multiple agents for different tasks
classifier = create_agent(system_prompt="Classify customer inquiries")
support = create_agent(system_prompt="Provide support answers", tools=["bigquery_vector_search"])
escalation = create_agent(system_prompt="Handle escalations")
# Conditional workflow based on classification
# (See docs for advanced workflow patterns)
๐ง Configuration
LangSwarm uses code-first configuration for maximum flexibility and type safety. Configure everything programmatically in Python:
Simple Configuration
from langswarm import create_agent
# Quick start - minimal config
agent = create_agent(model="gpt-4")
# Common configuration options
agent = create_agent(
name="assistant",
model="gpt-4",
system_prompt="You are a helpful assistant",
memory=True,
tools=["filesystem", "web_search"],
temperature=0.7,
max_tokens=2000,
stream=False
)
Advanced Configuration with Builder Pattern
from langswarm.core.agents import AgentBuilder
# Full control with builder pattern (Unified Provider)
agent = await (
AgentBuilder()
.name("advanced-assistant")
.litellm() # Unified provider (supports OpenAI, Anthropic, etc.)
.model("gpt-4")
.system_prompt("You are a helpful assistant")
.tools(["filesystem", "web_search", "github"])
.memory_enabled(True)
.streaming(True)
.temperature(0.7)
.max_tokens(4000)
.timeout(60)
.build()
)
Automatic Observability with LangFuse
LangSwarm automatically enables LangFuse tracing and prompt management when environment variables are set:
# Set these environment variables
export LANGFUSE_PUBLIC_KEY="pk-lf-..."
export LANGFUSE_SECRET_KEY="sk-lf-..."
export LANGFUSE_HOST="https://cloud.langfuse.com" # Optional
export OBSERVABILITY_DISABLE_TRACING="true" # Optional: Disable tracing but keep client active (e.g. for prompts)
Zero configuration needed! Just set the env vars and all LiteLLM calls are automatically traced:
# LangFuse is automatically enabled!
agent = await (
AgentBuilder()
.litellm()
.model("gpt-4")
.build()
)
# All interactions are now traced in LangFuse
response = await agent.chat("Hello!")
Manual override (if you need explicit configuration):
# Explicitly configure LangFuse (overrides environment variables)
agent = await (
AgentBuilder()
.litellm()
.model("gpt-4")
.observability(
provider="langfuse",
public_key="pk-lf-...",
secret_key="sk-lf-...",
host="https://cloud.langfuse.com"
)
.build()
)
What you get with LangFuse:
- ๐ Full trace of all LLM calls with timing and costs
- ๐ฏ Prompt versioning and management
- ๐ฐ Automatic cost tracking per trace
- ๐ Performance monitoring (latency, tokens, errors)
- ๐ฅ User analytics and session tracking
- ๐ Complete debugging with conversation history
Installation:
pip install langswarm[observability]
# or separately
pip install langfuse
Provider-Specific Configuration
# OpenAI
agent = create_agent(
model="gpt-4",
api_key="your-key-here", # or use OPENAI_API_KEY env var
temperature=0.7
)
# Anthropic (Claude)
from langswarm.core.agents import AgentBuilder
agent = await (
AgentBuilder()
.anthropic(api_key="your-key-here") # or use ANTHROPIC_API_KEY
.model("claude-3-5-sonnet-20241022")
.build()
)
# Google (Gemini)
agent = await (
AgentBuilder()
.gemini(api_key="your-key-here") # or use GOOGLE_API_KEY
.model("gemini-pro")
.build()
)
Memory Configuration
# Simple in-memory (default)
agent = create_agent(model="gpt-4", memory=True)
# Advanced memory with custom settings
from langswarm.core.memory import create_memory_manager
memory_manager = create_memory_manager(
backend="sqlite",
db_path="./conversations.db"
)
agent = create_agent(
model="gpt-4",
memory=True,
memory_manager=memory_manager
)
๐ Advanced Features
Streaming Responses
agent = create_agent(model="gpt-4")
async for chunk in agent.chat_stream("Tell me a story"):
print(chunk, end="", flush=True)
Cost Tracking
agent = create_agent(model="gpt-4", track_costs=True)
await agent.chat("Hello!")
stats = agent.get_usage_stats()
print(f"Tokens used: {stats['total_tokens']}")
print(f"Estimated cost: ${stats['estimated_cost']}")
Structured Outputs
from pydantic import BaseModel
class UserInfo(BaseModel):
name: str
age: int
email: str
agent = create_agent(model="gpt-4")
result = await agent.chat(
"Extract: John Doe, 30 years old, john@example.com",
response_format=UserInfo
)
# result is a UserInfo instance
Observability (OpenTelemetry)
from langswarm.observability import enable_instrumentation
# Enable tracing
enable_instrumentation(
service_name="my-agents",
exporter="jaeger", # or "otlp", "prometheus"
endpoint="http://localhost:14268/api/traces"
)
# All agent/workflow operations now traced
๐ ๏ธ MCP Tool Development
Create custom tools using the Model Context Protocol:
from langswarm.tools import UnifiedTool
from langswarm.core.errors import ErrorContext
class MyCustomTool(UnifiedTool):
"""Custom tool for specific operations"""
metadata = {
"name": "My Custom Tool",
"description": "Does something specific",
"version": "1.0.0"
}
async def execute(self, input_data: dict, context: ErrorContext = None) -> dict:
"""Main execution method"""
operation = input_data.get("operation")
if operation == "do_something":
result = await self._do_something(input_data)
return {"success": True, "result": result}
else:
return {"success": False, "error": f"Unknown operation: {operation}"}
async def _do_something(self, data: dict):
# Your tool logic here
return {"message": "Operation completed"}
# Register and use
from langswarm.tools import ToolRegistry
registry = ToolRegistry()
registry.register_tool(MyCustomTool())
# Now available to agents
agent = create_agent(model="gpt-4", tools=["my_custom_tool"])
๐ Documentation
๐ Main Resources
- Quick Start Guide - Get up and running in 5 minutes
- Documentation - Complete user guides
๐ Core Features
- Hierarchical Planning - Advanced orchestration system with retro-validation
- Organizational Patterns - Manager/Worker architectures
- Intent-Based Tools - Hybrid MCP calling (Natural Language + Direct)
๐ง Developer Guides
- Debugging & Observability - Zero-overhead tracing and metrics
- Tool Development - Create custom MCP tools
๐ฏ Production Deployment
Docker
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Environment Variables
# Required
export OPENAI_API_KEY="sk-..."
# Optional providers
export ANTHROPIC_API_KEY="sk-ant-..."
export GOOGLE_API_KEY="..."
# Observability & Tracing
export LANGFUSE_PUBLIC_KEY="pk-lf-..." # Auto-enables LangFuse tracing
export LANGFUSE_SECRET_KEY="sk-lf-..." # Required with public key
export LANGFUSE_HOST="https://cloud.langfuse.com" # Optional
export LANGSMITH_API_KEY="..." # Alternative observability
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318"
# Memory backends
export REDIS_URL="redis://localhost:6379"
export BIGQUERY_PROJECT="my-project"
export CHROMADB_PATH="./data/chromadb"
Cloud Deployment
LangSwarm supports deployment to:
- Google Cloud Platform (Cloud Run, Cloud Functions, GKE)
- AWS (Lambda, ECS, EKS)
- Azure (Functions, Container Apps, AKS)
See deployment documentation for platform-specific guides.
๐งช Testing
# Install dev dependencies
pip install -e .[dev]
# Run tests
pytest tests/
# Run specific test suite
pytest tests/unit/
pytest tests/integration/
pytest tests/e2e/
# Run examples
cd examples/simple
python 01_basic_chat.py
๐ค Contributing
We welcome contributions! See CONTRIBUTING.md for guidelines.
Development Setup
# Clone repository
git clone https://github.com/aekdahl/langswarm.git
cd langswarm
# Install in development mode
pip install -e .[dev]
# Run tests
pytest
# Run examples
cd examples/simple && python test_all_examples.py
๐ Supported Providers
| Provider | Status | Models | Notes |
|---|---|---|---|
| Unified (LiteLLM) | โ Stable | All Providers | Universal adapter, failover, observability |
| OpenAI | โ ๏ธ Legacy | GPT-4, GPT-3.5, etc. | Use Unified provider |
| Anthropic | โ ๏ธ Legacy | Claude 3.5, Claude 3 | Use Unified provider |
| โ ๏ธ Legacy | Gemini Pro, Gemini Pro Vision | Use Unified provider | |
| Mistral | โ ๏ธ Legacy | Mixtral, Mistral Large | Use Unified provider |
| Cohere | โ ๏ธ Legacy | Command R+, Command R | Use Unified provider |
| Hugging Face | โ ๏ธ Legacy | Open source models | Use Unified provider |
| Local | โ ๏ธ Legacy | Ollama, LocalAI, etc. | Use Unified provider |
| Custom | โ Beta | Any OpenAI-compatible API | Community template |
๐ ๏ธ Built-in MCP Tools
| Tool | Description | Status |
|---|---|---|
filesystem |
File operations (read, write, list) | โ Stable |
web_search |
Web search capabilities | โ Stable |
github |
GitHub repository operations | โ Stable |
sql_database |
SQL database access | โ Stable |
bigquery_vector_search |
Semantic search in BigQuery | โ Stable |
codebase_indexer |
Code analysis and search | โ Stable |
workflow_executor |
Dynamic workflow execution | โ Stable |
tasklist |
Task management | โ Stable |
message_queue_publisher |
Publish to message queues | โ Stable |
message_queue_consumer |
Consume from message queues | โ Stable |
realtime_voice |
OpenAI Realtime API integration | โ Beta |
daytona_environment |
Dev environment management | โ Beta |
gcp_environment |
GCP resource management | โ Beta |
dynamic_forms |
Dynamic form generation | โ Beta |
๐ License
LangSwarm is MIT licensed. See LICENSE for details.
๐ Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: alexander.ekdahl@gmail.com
๐ Examples
See the examples/simple/ directory for 10 working examples:
- Basic Chat - Simple agent conversation
- Memory Chat - Agent with conversation memory
- Two Agents - Multiple agents working together
- Different Models - Using different LLM providers
- With Tools - Agents using tools (filesystem, web search)
- Workflow - Sequential agent workflows
- Web Search - Agent with web search capabilities
- Streaming Response - Real-time streaming responses
- Cost Tracking - Tracking token usage and costs
- Advanced Configuration - Full builder pattern examples
Each example is 10-30 lines of code and fully working.
๐ Quick Links
Built with โค๏ธ by the LangSwarm community
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file langswarm-0.1.0.tar.gz.
File metadata
- Download URL: langswarm-0.1.0.tar.gz
- Upload date:
- Size: 808.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.11.14 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f7946e73b247ab2cfba7572e6d3899899bb215e4c2e7ca04066c663f3d113e0
|
|
| MD5 |
ee3c1bc6962169c8459cbad7afd5e52e
|
|
| BLAKE2b-256 |
45f8f0743c4e58d601206962632808b6c7b721f3a9ca889a7a6e3e551f08899d
|
File details
Details for the file langswarm-0.1.0-py3-none-any.whl.
File metadata
- Download URL: langswarm-0.1.0-py3-none-any.whl
- Upload date:
- Size: 1.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.11.14 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
246cb0d512a96160e5247efa37fe6bf311f8d5c9f8165de2123cb35e29cb4fc7
|
|
| MD5 |
c5e0e37d33caae1ab866f70973b3533f
|
|
| BLAKE2b-256 |
bfd24ebb24b4d5447f020c1309722c642c15a1c74a0f50ad039e7509a2d4e511
|