Open-source, provider-agnostic AI evaluation framework for testing LLM applications locally and in production.
- Provider Agnostic: Works with Claude, GPT, Gemini, Ollama via Pydantic-AI
- Multiple Workflows: OneShot, Conversational (v2+), Autotune (v3+)
- Built-in Judges: DeepEval integration + custom GEval support
- Local First: All data stays on your machine
- OpenTelemetry: Native observability instrumentation
- Git-Friendly: Human-readable JSON/JSONL artifacts
pip install -e .Create a .env file with your API keys:
cp .env.example .env
# Edit .env and add your keysGavel automatically loads .env on startup. See SETUP.md for complete configuration guide.
gavel oneshot create --eval my_first_eval
cd .gavel/evaluations/my_first_evalEdit the config files:
config/agents.json- Define models and agentsdata/scenarios.json- Add test scenariosconfig/eval_config.json- Configure judges
gavel oneshot run --eval my_first_evalResults are saved in .gavel/evaluations/my_first_eval/runs/<timestamp>/
gavel-ai/
├── src/gavel_ai/ # Source code
│ ├── cli/ # CLI commands
│ ├── core/ # Core abstractions
│ ├── processors/ # Execution processors
│ ├── judges/ # Evaluation judges
│ ├── storage/ # Artifact storage
│ └── reporters/ # Report generation
├── tests/ # Unit and integration tests
├── docs/ # Documentation
├── .env.example # Environment variable template
└── SETUP.md # Complete setup guide
- SETUP.md - Complete API key configuration and setup
- docs/quickstart/ - Step-by-step tutorials
- docs/cli-reference/ - CLI command reference
- docs/examples/ - Example evaluations
pytest # Run all tests
pytest tests/unit # Unit tests only
pytest tests/integration # Integration tests onlyblack src/ # Format code
ruff check src/ # Lint code
mypy src/ # Type checkpre-commit install # Install hooks
pre-commit run --all-files # Run all hooksGavel follows a clean architecture pattern:
- Workflows: OneShot, Conversational, Autotune
- Processors: PromptInputProcessor, ClosedBoxInputProcessor, ScenarioProcessor
- Judges: DeepEval judges + custom GEval
- Storage: Filesystem-based (database/S3 future)
- Reporters: Jinja2 templates (HTML, Markdown)
See architecture.md for details.
Gavel automatically loads .env files using python-dotenv. Configuration files support {{VAR_NAME}} substitution:
{
"provider_auth": {
"api_key": "{{ANTHROPIC_API_KEY}}"
}
}Supported Variables:
ANTHROPIC_API_KEY- Claude modelsOPENAI_API_KEY- GPT modelsGOOGLE_API_KEY- Gemini modelsOLLAMA_BASE_URL- Local Ollama instance
[Add license information]
[Add contributing guidelines]
- Issues: GitHub Issues
- Documentation: docs/