Metadata-Version: 2.4
Name: fastagentic
Version: 1.2.1
Summary: The deployment layer for agentic applications. Build agents with anything. Ship them with FastAgentic.
Project-URL: Homepage, https://github.com/fastagentic/fastagentic
Project-URL: Documentation, https://github.com/neul-labs/fastagentic
Project-URL: Repository, https://github.com/fastagentic/fastagentic
Author: Neul Labs
Author-email: Dipankar Sarkar <me@dipankar.name>
License: MIT
License-File: LICENSE
Keywords: a2a,agentic,agents,ai,autonomous,crewai,deployment,fastapi,framework,langchain,langgraph,llm,llmops,mcp,mcp-server,orchestration,pydantic,tool-calling
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Requires-Dist: aiofiles<24.0.0,>=23.2.0
Requires-Dist: anyio<5.0.0,>=4.7.0
Requires-Dist: fastapi<2.0.0,>=0.115.0
Requires-Dist: httpx<1.0.0,>=0.28.0
Requires-Dist: pydantic-settings<3.0.0,>=2.6.0
Requires-Dist: pydantic<3.0.0,>=2.10.0
Requires-Dist: rich<14.0.0,>=13.9.0
Requires-Dist: sse-starlette<3.0.0,>=2.2.0
Requires-Dist: structlog<25.0.0,>=24.4.0
Requires-Dist: typer<1.0.0,>=0.15.0
Requires-Dist: uvicorn[standard]<1.0.0,>=0.32.0
Provides-Extra: adapters
Requires-Dist: crewai>=0.86.0; extra == 'adapters'
Requires-Dist: langchain-core>=0.3.0; extra == 'adapters'
Requires-Dist: langchain>=0.3.0; extra == 'adapters'
Requires-Dist: langgraph>=0.2.0; extra == 'adapters'
Requires-Dist: pydantic-ai>=0.0.30; extra == 'adapters'
Provides-Extra: all
Requires-Dist: crewai>=0.86.0; extra == 'all'
Requires-Dist: httpx>=0.28.0; extra == 'all'
Requires-Dist: langchain-core>=0.3.0; extra == 'all'
Requires-Dist: langchain>=0.3.0; extra == 'all'
Requires-Dist: langfuse>=2.57.0; extra == 'all'
Requires-Dist: langgraph>=0.2.0; extra == 'all'
Requires-Dist: mem0ai>=0.1.0; extra == 'all'
Requires-Dist: opentelemetry-api>=1.29.0; extra == 'all'
Requires-Dist: opentelemetry-exporter-otlp>=1.29.0; extra == 'all'
Requires-Dist: opentelemetry-instrumentation-fastapi>=0.50b0; extra == 'all'
Requires-Dist: opentelemetry-sdk>=1.29.0; extra == 'all'
Requires-Dist: portkey-ai>=1.9.0; extra == 'all'
Requires-Dist: pydantic-ai>=0.0.30; extra == 'all'
Requires-Dist: redis>=5.2.0; extra == 'all'
Provides-Extra: braintrust
Requires-Dist: braintrust>=0.0.170; extra == 'braintrust'
Provides-Extra: crewai
Requires-Dist: crewai>=0.86.0; extra == 'crewai'
Provides-Extra: dev
Requires-Dist: httpx>=0.28.0; extra == 'dev'
Requires-Dist: mypy>=1.13.0; extra == 'dev'
Requires-Dist: pre-commit>=4.0.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
Requires-Dist: pytest-cov>=6.0.0; extra == 'dev'
Requires-Dist: pytest>=8.3.0; extra == 'dev'
Requires-Dist: ruff>=0.8.0; extra == 'dev'
Provides-Extra: docs
Requires-Dist: mike>=2.1.0; extra == 'docs'
Requires-Dist: mkdocs-material>=9.5.0; extra == 'docs'
Requires-Dist: mkdocs-minify-plugin>=0.8.0; extra == 'docs'
Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
Provides-Extra: integrations
Requires-Dist: httpx>=0.28.0; extra == 'integrations'
Requires-Dist: langfuse>=2.57.0; extra == 'integrations'
Requires-Dist: mem0ai>=0.1.0; extra == 'integrations'
Requires-Dist: portkey-ai>=1.9.0; extra == 'integrations'
Provides-Extra: lakera
Requires-Dist: httpx>=0.28.0; extra == 'lakera'
Provides-Extra: langchain
Requires-Dist: langchain-core>=0.3.0; extra == 'langchain'
Requires-Dist: langchain>=0.3.0; extra == 'langchain'
Provides-Extra: langfuse
Requires-Dist: langfuse>=2.57.0; extra == 'langfuse'
Provides-Extra: langgraph
Requires-Dist: langchain-core>=0.3.0; extra == 'langgraph'
Requires-Dist: langgraph>=0.2.0; extra == 'langgraph'
Provides-Extra: mem0
Requires-Dist: mem0ai>=0.1.0; extra == 'mem0'
Provides-Extra: otel
Requires-Dist: opentelemetry-api>=1.29.0; extra == 'otel'
Requires-Dist: opentelemetry-exporter-otlp>=1.29.0; extra == 'otel'
Requires-Dist: opentelemetry-instrumentation-fastapi>=0.50b0; extra == 'otel'
Requires-Dist: opentelemetry-sdk>=1.29.0; extra == 'otel'
Provides-Extra: portkey
Requires-Dist: portkey-ai>=1.9.0; extra == 'portkey'
Provides-Extra: postgres
Requires-Dist: asyncpg>=0.30.0; extra == 'postgres'
Requires-Dist: sqlalchemy>=2.0.0; extra == 'postgres'
Provides-Extra: pydanticai
Requires-Dist: pydantic-ai>=0.0.30; extra == 'pydanticai'
Provides-Extra: redis
Requires-Dist: redis>=5.2.0; extra == 'redis'
Provides-Extra: testing
Requires-Dist: faker>=24.0.0; extra == 'testing'
Requires-Dist: hypothesis-jsonschema>=0.23.0; extra == 'testing'
Requires-Dist: hypothesis>=6.100.0; extra == 'testing'
Requires-Dist: mutmut>=2.4.0; extra == 'testing'
Requires-Dist: pytest-asyncio>=0.24.0; extra == 'testing'
Requires-Dist: pytest-benchmark>=4.0.0; extra == 'testing'
Requires-Dist: pytest-timeout>=2.3.0; extra == 'testing'
Description-Content-Type: text/markdown

<h1 align="center">FastAgentic</h1>

<p align="center">
  <strong>Build agents with anything. Ship them with FastAgentic.</strong>
</p>

<p align="center">
  <a href="https://pypi.org/project/fastagentic/"><img src="https://img.shields.io/pypi/v/fastagentic?color=blue&label=PyPI" alt="PyPI"></a>
  <a href="https://pypi.org/project/fastagentic/"><img src="https://img.shields.io/pypi/pyversions/fastagentic" alt="Python"></a>
  <a href="https://github.com/neullabs/fastagentic/actions"><img src="https://img.shields.io/badge/tests-899%20passed-brightgreen" alt="Tests"></a>
  <a href="https://docs.neullabs.com/fastagentic"><img src="https://img.shields.io/badge/docs-neullabs.com-blue" alt="Docs"></a>
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License"></a>
</p>

<p align="center">
  <a href="https://docs.neullabs.com/fastagentic">Documentation</a> •
  <a href="https://docs.neullabs.com/fastagentic/quickstart">Quickstart</a> •
  <a href="https://docs.neullabs.com/fastagentic/examples">Examples</a>
</p>

---

## The Deployment Layer for AI Agents

Your agent works locally. Now make it **production-ready in minutes, not weeks**.

FastAgentic wraps any agent framework—**PydanticAI, LangGraph, CrewAI, LangChain**—and adds everything you need for production:

| You Get | Without Rewriting Your Agent |
|---------|------------------------------|
| **Checkpointing** | Resume 90-minute research agents after crashes |
| **Observability** | See every step, token, and decision |
| **Cost Control** | Token budgets, rate limits, circuit breakers |
| **Security** | OAuth, RBAC, PII detection out of the box |
| **Protocols** | MCP + A2A support for tool sharing and collaboration |

```
Your Agent (any framework)  →  FastAgentic  →  Production-Ready API
```

## Install

```bash
pip install fastagentic
```

## 30-Second Example

Wrap any existing agent with **zero code changes**:

```python
from your_agent import research_agent  # Any agent, any framework
from fastagentic import run_opaque

# One line. That's it.
result = await run_opaque(
    research_agent,
    query="AI trends 2025",
    run_id="research-001",  # Enables resume on crash
)
```

Re-run with the same `run_id`? **Instant cached result.** No re-execution.

## Full Application

```python
from fastagentic import App, tool, agent_endpoint
from fastagentic.adapters import LangGraphAdapter

app = App(title="My Agent API")

@tool
async def search(query: str) -> list[str]:
    """Search the knowledge base."""
    return await kb.search(query)

@agent_endpoint("/chat", runnable=LangGraphAdapter(my_graph))
async def chat(message: str) -> str:
    ...
```

```bash
fastagentic run              # HTTP API server
fastagentic mcp serve        # MCP stdio server
fastagentic agent chat       # Interactive testing
```

## Framework Adapters

| Framework | Adapter | Install |
|-----------|---------|---------|
| PydanticAI | `PydanticAIAdapter` | `pip install fastagentic[pydanticai]` |
| LangGraph | `LangGraphAdapter` | `pip install fastagentic[langgraph]` |
| CrewAI | `CrewAIAdapter` | `pip install fastagentic[crewai]` |
| LangChain | `LangChainAdapter` | `pip install fastagentic[langchain]` |

## Why FastAgentic?

**The problem:** You've built an agent. It works. But shipping it means adding:
- Crash recovery for long-running tasks
- Monitoring and cost tracking
- Authentication and authorization
- Rate limiting and retries
- API endpoints and protocols

**The solution:** FastAgentic handles all of this. You keep your agent code unchanged.

## Documentation

**[docs.neullabs.com/fastagentic](https://docs.neullabs.com/fastagentic)**

- [Getting Started](https://docs.neullabs.com/fastagentic/quickstart) — Up and running in 5 minutes
- [Adapters](https://docs.neullabs.com/fastagentic/adapters) — Connect any framework
- [Checkpointing](https://docs.neullabs.com/fastagentic/checkpoint) — Resume long-running agents
- [MCP Protocol](https://docs.neullabs.com/fastagentic/protocols/mcp) — Tool sharing standard
- [Deployment](https://docs.neullabs.com/fastagentic/deployment) — Docker, Kubernetes, cloud

## Contributing

```bash
git clone https://github.com/neullabs/fastagentic
cd fastagentic
uv sync --extra dev
uv run pytest tests/ -v
```

## License

MIT
