Skip to main content

FastAPI AgentRouter

CI PyPI version Python versions Docker Hub License: MIT

Simplified AI Agent integration for FastAPI with Slack support.

Features

  • 🚀 Simple Integration - Just 2 lines to add agent to your FastAPI app
  • 🤖 Vertex AI Support - Native support for Google's Vertex AI Agent Builder
  • 💬 Slack Integration - Built-in Slack Bolt integration
  • 🎯 Protocol-Based - Works with any agent implementing the AgentProtocol
  • Async & Streaming - Full async support with streaming responses
  • 🧩 Dependency Injection - Leverage FastAPI's DI system
  • 📁 Modular Architecture - Clean separation of concerns

Installation

# Basic installation
pip install fastapi-agentrouter

# With Slack support
pip install "fastapi-agentrouter[slack]"

# With Vertex AI ADK support
pip install "fastapi-agentrouter[vertexai]"

# All extras
pip install "fastapi-agentrouter[all]"

Quick Start

With Vertex AI Agent Builder

from fastapi import FastAPI
import fastapi_agentrouter

app = FastAPI()

# Two-line integration!
app.dependency_overrides[fastapi_agentrouter.get_agent] = (
    fastapi_agentrouter.get_vertex_ai_agent_engine
)
app.include_router(fastapi_agentrouter.router)

With Custom Agent Implementation

from fastapi import FastAPI
from fastapi_agentrouter import router, get_agent, AgentProtocol

# Your agent implementation
class MyAgent:
    def create_session(self, *, user_id=None, **kwargs):
        return {"id": "session-123"}

    def list_sessions(self, *, user_id=None, **kwargs):
        return {"sessions": []}

    def stream_query(self, *, message: str, user_id=None, session_id=None, **kwargs):
        # Process the message and yield responses
        yield {"content": f"Response to: {message}"}

app = FastAPI()

# Two-line integration!
app.dependency_overrides[get_agent] = lambda: MyAgent()
app.include_router(router)

That's it! Your agent is now available at:

  • /agent/slack/events - Handle all Slack events and interactions (when Slack is configured)

Configuration

Vertex AI Configuration

When using Vertex AI Agent Builder, configure these environment variables:

# Required for Vertex AI
export VERTEXAI__PROJECT_ID="your-project-id"
export VERTEXAI__LOCATION="us-central1"
export VERTEXAI__STAGING_BUCKET="your-staging-bucket"
export VERTEXAI__AGENT_NAME="your-agent-name"

The library automatically warms up the agent engine during router initialization to ensure fast response times.

Slack Configuration

To enable Slack integration, set these environment variables:

# Required for Slack integration
export SLACK__BOT_TOKEN="xoxb-your-bot-token"
export SLACK__SIGNING_SECRET="your-signing-secret"

Note: Slack integration is only enabled when both SLACK__BOT_TOKEN and SLACK__SIGNING_SECRET are configured. If not set, Slack endpoints will return 404.

Slack Setup

  1. Create a Slack App at https://api.slack.com/apps
  2. Get your Bot Token and Signing Secret from Basic Information
  3. Set environment variables:
    export SLACK__BOT_TOKEN="xoxb-your-bot-token"
    export SLACK__SIGNING_SECRET="your-signing-secret"
    
  4. Configure Event Subscriptions URL: https://your-domain.com/agent/slack/events
  5. Subscribe to bot events:
    • app_mention - When your bot is mentioned
    • message.im - Direct messages to your bot (optional)
  6. For interactive components and slash commands, use the same URL: https://your-domain.com/agent/slack/events

Agent Protocol

Your agent must implement the AgentProtocol interface with these methods:

from typing import Any, Generator

class AgentProtocol:
    def create_session(
        self,
        *,
        user_id: str | None = None,
        **kwargs: Any,
    ) -> dict[str, Any]:
        """Create a new session for the agent.

        Returns a dictionary containing at least the session 'id'.
        """
        ...

    def list_sessions(
        self,
        *,
        user_id: str | None = None,
        **kwargs: Any,
    ) -> dict[str, Any]:
        """List sessions for a given user.

        Returns a dictionary with a 'sessions' key containing a list of
        session dictionaries.
        """
        ...

    def stream_query(
        self,
        *,
        message: str,
        user_id: str | None = None,
        session_id: str | None = None,
        **kwargs: Any
    ) -> Generator[dict[str, Any], Any, None]:
        """Stream responses from the agent."""
        ...

The stream_query method should yield response events as dictionaries.

API Reference

Core Components

fastapi_agentrouter.router

Pre-configured APIRouter with automatic agent integration:

  • /agent/slack/events - Slack event handler (when Slack is configured)

fastapi_agentrouter.get_agent

Dependency function that should be overridden with your agent:

app.dependency_overrides[fastapi_agentrouter.get_agent] = your_get_agent_function

fastapi_agentrouter.get_vertex_ai_agent_engine

Pre-configured function to get Vertex AI Agent Engine:

app.dependency_overrides[fastapi_agentrouter.get_agent] = (
    fastapi_agentrouter.get_vertex_ai_agent_engine
)

fastapi_agentrouter.AgentProtocol

Protocol class that defines the interface for agents.

fastapi_agentrouter.Settings

Pydantic settings class for configuration management.

Environment Variables

The library uses pydantic-settings for configuration management:

Slack Configuration:

  • SLACK__BOT_TOKEN - Slack Bot User OAuth Token
  • SLACK__SIGNING_SECRET - Slack Signing Secret

Vertex AI Configuration:

  • VERTEXAI__PROJECT_ID - GCP Project ID
  • VERTEXAI__LOCATION - GCP Location (e.g., us-central1)
  • VERTEXAI__STAGING_BUCKET - GCS Bucket for staging
  • VERTEXAI__AGENT_NAME - Display name of the Vertex AI Agent

Examples

See the examples directory for complete examples:

Docker

Docker images are available on Docker Hub:

# Pull the latest image
docker pull chanyou0311/fastapi-agentrouter:latest

# Run with environment variables
docker run -p 8000:8000 \
  -e VERTEXAI__PROJECT_ID=your-project-id \
  -e VERTEXAI__LOCATION=us-central1 \
  -e VERTEXAI__STAGING_BUCKET=your-bucket \
  -e VERTEXAI__AGENT_NAME=your-agent-name \
  chanyou0311/fastapi-agentrouter:latest

Development

Setup Development Environment

# Clone the repository
git clone https://github.com/chanyou0311/fastapi-agentrouter.git
cd fastapi-agentrouter

# Install with uv (recommended)
uv sync --all-extras --dev

# Or with pip
pip install -e ".[all,dev,docs]"

# Install pre-commit hooks
pre-commit install

Run Tests

# Run all tests
pytest

# Run with coverage
pytest --cov=src --cov-report=html

# Run specific tests
pytest tests/test_router.py

Build Documentation

# Serve docs locally
mkdocs serve

# Build docs
mkdocs build

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Links

Release files for fastapi-agentrouter 0.6.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 fastapi-agentrouter 0.6.4
File Size Uploaded
fastapi_agentrouter-0.6.4.tar.gz 19.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fastapi-agentrouter 0.6.4
File Interpreter ABI Platform
fastapi_agentrouter-0.6.4-py3-none-any.whl Python 3 none any Details

Total release size: 34.8 kB

Release files / fastapi_agentrouter-0.6.4.tar.gz

Download URL fastapi_agentrouter-0.6.4.tar.gz
Size 19.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ea7561cf43f141b1344c2d80849b1682ff1bed598f5488bb4a8469a6353831fc
BLAKE2b-256 checksum
How to use checksums
98d94bde244fb457587485e016c2fac53292ae80fad3645d55a1802fe372fe50
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2025.

Transparency log

Release files / fastapi_agentrouter-0.6.4-py3-none-any.whl

Download URL fastapi_agentrouter-0.6.4-py3-none-any.whl
Size 15.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
20cbb2e35533a48bdcc100aa1ac7fdaf02875ea86ca71f3913db47ed07db4185
BLAKE2b-256 checksum
How to use checksums
b761cd3558577da533862bc834563c6e30c7fa8f03a0e369bba297d868a873a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.6.4 This release

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

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