Agent Reliability Arena (ara) — production readiness benchmarking for AI agents.
PyPI package: agent-reliability-arena. CLI entry point: arena.
make install # pip install -e ".[dev]"
make run # arena run configs/example_agent.yaml
make dashboard # streamlit run dashboard/app.py
make lint # ruff check arena/ dashboard/
make test # pytest tests/ -v
make clean # remove reports/ and cacheDirect CLI:
arena run configs/example_agent.yaml --output-dir reportsArenaRunner (runner.py)
└─ loads ArenaConfig (config.py + models.py)
└─ builds BaseAgentAdapter (agent_adapter.py)
├─ LangChainReActAdapter
├─ OpenAIAssistantsAdapter
└─ CustomAgentAdapter
└─ runs each BaseTrack (tracks/__init__.py)
├─ ConsistencyTrack → SemanticSimilarityScorer
├─ RobustnessTrack → ParaphraseInjector + SemanticSimilarityScorer
├─ ToolFailureTrack → ToolFailureInjector + ToolRecoveryScorer
├─ MemoryDriftTrack → LLMJudgeScorer
└─ EnterpriseRealismTrack → all injectors + EnterpriseReadinessScorer (ERI)
└─ assembles ArenaReport (models.py)
└─ saves reports (reporter.py)
| File | Purpose |
|---|---|
arena/models.py |
All Pydantic data models — edit here for schema changes |
arena/tracks/__init__.py |
Track logic + TRACK_MAP registry |
arena/scorers/__init__.py |
Scoring implementations |
arena/injectors/__init__.py |
Chaos injection (failure, paraphrase, schema drift) |
arena/agent_adapter.py |
Agent framework adapters |
arena/runner.py |
Orchestration + Rich progress display |
arena/reporter.py |
Markdown + JSON report generation |
configs/task_suites/ |
YAML task suite definitions |
dashboard/app.py |
Streamlit UI |
ANTHROPIC_API_KEY # Required for Robustness, Memory Drift, Enterprise Realism tracks
OPENAI_API_KEY # Required for langchain_react / openai_assistants agent types- All scorers return
floatin[0.0, 1.0] - All tracks return
TrackResult; all adapters returnAgentRun - Async throughout; sync wrapper
run()inrunner.pyis for CLI use only - Use
asyncio.get_running_loop()(notget_event_loop()) for thread executors - Task suites live in
configs/task_suites/<name>.yaml;load_task_suite()inconfig.pyresolves both built-in names and file paths
- Implement
BaseTrackinarena/tracks/__init__.py - Add the new
TrackNameenum value toarena/models.py - Register in
TRACK_MAPat the bottom oftracks/__init__.py
- Subclass
BaseAgentAdapterinarena/agent_adapter.py - Implement
async def run(self, prompt: str, track: TrackName) -> AgentRun - Add new
AgentTypeenum value toarena/models.py - Register in
build_adapter()mapping
Core: langchain, langchain-openai, langchain-anthropic, openai, anthropic, pydantic, pyyaml, sentence-transformers, rich, httpx, tenacity
Dashboard: streamlit, plotly, pandas
Dev: pytest, pytest-asyncio, ruff