Skip to main content

Multi-Agent Base Framework

A reusable Python foundation for building multi-agent AI systems with comprehensive observability, cost tracking, and A2A protocol support.

Features

  • 🤖 Multi-Provider LLM Support: Ollama, OpenAI, Anthropic via Microsoft Agent Framework
  • 📊 Full Observability: Agent conversations, tool usage, inputs/outputs via Arize Phoenix
  • 💰 Cost Tracking: Token usage and cost calculation per model/provider
  • 🏗️ Parametric Architectures: SingleAgent, Supervisor, Swarm patterns
  • 🎴 A2A Agent Cards: Agent metadata and capability declaration
  • 🔍 Skill Auto-Discovery: Automatic skill extraction from tool functions
  • 📝 Structured Logging: OpenTelemetry-based tracing
  • 🧠 Conversation Memory: Multiple backends including buffer, sliding window, vector, and Redis
  • 🔄 Resilience Patterns: Retry strategies, circuit breaker, timeout handling, fallbacks
  • ⏱️ Rate Limiting: Token bucket, sliding window, and composite limiters
  • 🗄️ Response Caching: LRU, TTL, and semantic caching strategies
  • 📡 Event System: Pub/sub event bus for inter-agent communication
  • 🔒 Security: Input validation, injection detection, permission management

Installation

# Basic installation
pip install multi-agent-base

# With specific provider support
pip install multi-agent-base[ollama]
pip install multi-agent-base[openai]
pip install multi-agent-base[anthropic]

# All providers
pip install multi-agent-base[all]

# Development
pip install multi-agent-base[dev]

Quick Start

Single Agent

from multi_agent_base import SystemConfig, SingleAgentPattern
from multi_agent_base.providers import ModelClientFactory

# Configure system
config = SystemConfig(
    provider="openai",
    model="gpt-4o-mini",
    observability_enabled=True,
)

# Create agent
pattern = SingleAgentPattern(config)
agent = pattern.create_agent(
    name="assistant",
    system_prompt="You are a helpful assistant.",
)

# Run
response = await agent.run("Hello, how are you?")
print(response)

Supervisor Team

from multi_agent_base import SystemConfig, SupervisorPattern

config = SystemConfig(
    provider="ollama",
    model="llama3.2",
    observability_enabled=True,
)

pattern = SupervisorPattern(config)
team = pattern.create_team(
    supervisor_name="manager",
    worker_configs=[
        {"name": "researcher", "system_prompt": "You research topics."},
        {"name": "writer", "system_prompt": "You write content."},
    ]
)

response = await team.run("Write a blog post about AI agents.")

Agent Cards

from multi_agent_base.a2a import AgentCard, SkillDiscoverer

# Auto-discover skills from tools
discoverer = SkillDiscoverer()
skills = discoverer.discover_from_tools([my_tool_function])

# Create agent card
card = AgentCard(
    name="research-agent",
    description="An agent that researches topics",
    skills=skills,
    capabilities=["text-generation", "web-search"],
)

# Export as JSON
card.to_json("agent_card.json")

Memory System

from multi_agent_base.memory import BufferMemory, MemoryConfig

# Create memory with configuration
memory = BufferMemory(MemoryConfig(max_entries=100))

# Store conversation
await memory.store(role="user", content="Hello!")
await memory.store(role="assistant", content="Hi there!")

# Retrieve history
history = await memory.retrieve(limit=10)

Rate Limiting

from multi_agent_base.ratelimit import RateLimiter, RateLimitConfig

# Create rate limiter
limiter = RateLimiter(RateLimitConfig(
    requests_per_minute=60,
    tokens_per_minute=10000,
))

# Check before making API calls
if await limiter.can_acquire():
    await limiter.acquire(tokens=100)
    # Make API call

Resilience

from multi_agent_base.resilience import retry_with_backoff, CircuitBreaker

# Retry with exponential backoff
@retry_with_backoff(max_attempts=3, delay=1.0)
async def call_api():
    return await risky_operation()

# Circuit breaker pattern
breaker = CircuitBreaker(failure_threshold=5, recovery_timeout=30)
async with breaker:
    result = await external_service()

Security

from multi_agent_base.security import (
    validate_input,
    check_injection,
    SecretManager,
)

# Input validation
validation = validate_input(user_input, max_length=1000)
if not validation.is_valid:
    raise ValueError(validation.errors)

# Injection detection
result = check_injection(user_input)
if not result.is_safe:
    log_security_event(result.threats)

# Secure secrets management
secrets = SecretManager()
api_key = secrets.get("OPENAI_API_KEY")

Architecture

┌─────────────────────────────────────────────────────────────────┐
│                     Multi-Agent Base                            │
├─────────────────────────────────────────────────────────────────┤
│  Patterns                                                       │
│  ┌──────────────┐ ┌──────────────┐ ┌──────────────┐            │
│  │ SingleAgent  │ │  Supervisor  │ │    Swarm     │            │
│  └──────────────┘ └──────────────┘ └──────────────┘            │
├─────────────────────────────────────────────────────────────────┤
│  Cross-Cutting Concerns                                         │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐  │
│  │ Memory  │ │Resilience│ │  Rate   │ │  Cache  │ │Security │  │
│  │         │ │         │ │ Limiting│ │         │ │         │  │
│  └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘  │
├─────────────────────────────────────────────────────────────────┤
│  Core Services                                                  │
│  ┌──────────────┐ ┌──────────────┐ ┌──────────────┐            │
│  │  A2A Cards   │ │    Cost      │ │ Observability│            │
│  │ & Discovery  │ │   Tracker    │ │   (Phoenix)  │            │
│  └──────────────┘ └──────────────┘ └──────────────┘            │
│  ┌──────────────┐                                               │
│  │ Event System │                                               │
│  └──────────────┘                                               │
├─────────────────────────────────────────────────────────────────┤
│  LLM Providers (via Microsoft Agent Framework)                  │
│  ┌──────────────┐ ┌──────────────┐ ┌──────────────┐            │
│  │   Ollama     │ │   OpenAI     │ │  Anthropic   │            │
│  └──────────────┘ └──────────────┘ └──────────────┘            │
└─────────────────────────────────────────────────────────────────┘

Documentation

Development

# Clone repository
git clone https://github.com/yourusername/multi-agent-base.git
cd multi-agent-base

# Create virtual environment
python -m venv .venv
source .venv/bin/activate

# Install with dev dependencies
pip install -e ".[dev,all]"

# Run tests
pytest

# Run linting
ruff check src tests
mypy src

License

MIT License - See LICENSE for details.

Metadata

Release files for multi-agent-base 0.1.0

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

Source distribution (sdist)

Source distribution for multi-agent-base 0.1.0
File Size Uploaded Provenance Actions
multi_agent_base-0.1.0.tar.gz 561.1 kB Without provenance Details for multi_agent_base-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for multi-agent-base 0.1.0
File Interpreter ABI Platform Actions
multi_agent_base-0.1.0-py3-none-any.whl Python 3 none any Details for multi_agent_base-0.1.0-py3-none-any.whl

Total release size: 884.8 kB

Release files / multi_agent_base-0.1.0.tar.gz

Download URL multi_agent_base-0.1.0.tar.gz
Size 561.1 kB
Tags Source
SHA-256 checksum
How to use checksums
1c3027bcfcdb26f73f78a1bd2bc99c11eb2a4afe61a7efcd4685b41569890291
BLAKE2b-256 checksum
How to use checksums
a8e971505b99158b8a32df4a2359a289b15779d0f3a2d9b7452a63149c3085a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.2

Release files / multi_agent_base-0.1.0-py3-none-any.whl

Download URL multi_agent_base-0.1.0-py3-none-any.whl
Size 323.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b990d8e902240eb79f48a8251143cbfbe4e983484d17737113da9ec09ae4ad00
BLAKE2b-256 checksum
How to use checksums
693812582be0b1c7c761e1eff24ce19ca87df127bf006b1754163ce8c10dccd5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.2

Security for multi-agent-base 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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