A decorator-first LLM evaluation library for testing AI agents
Project description
fasteval
A decorator-first LLM evaluation library for testing AI agents and LLMs. Stack decorators to define evaluation criteria, run with pytest.
Features
- Decorator-based metrics -- stack
@fe.correctness,@fe.relevance,@fe.hallucination, and 30+ more - pytest native -- run evaluations with
pytest, get familiar pass/fail output - LLM-as-judge + deterministic -- semantic LLM metrics alongside ROUGE, exact match, JSON schema, regex
- Multi-modal -- evaluate vision, audio, and image generation models
- Conversation metrics -- context retention, topic drift, consistency for multi-turn agents
- RAG metrics -- faithfulness, contextual precision, contextual recall, answer correctness
- Tool trajectory -- verify agent tool calls, argument matching, call sequences
- Pluggable providers -- OpenAI (default), Anthropic, Azure OpenAI, Ollama
Quick Start
pip install fasteval-core
Set your LLM provider key:
export OPENAI_API_KEY=sk-your-key-here
Write your first evaluation test:
import fasteval as fe
@fe.correctness(threshold=0.8)
@fe.relevance(threshold=0.7)
def test_qa_agent():
response = my_agent("What is the capital of France?")
fe.score(response, expected_output="Paris", input="What is the capital of France?")
Run it:
pytest test_qa_agent.py -v
Installation
# pip
pip install fasteval-core
# uv
uv add fasteval-core
Optional Extras
# Anthropic provider
pip install fasteval-core[anthropic]
# Vision-language evaluation (GPT-4V, Claude Vision)
pip install fasteval-core[vision]
# Audio/speech evaluation (Whisper, ASR)
pip install fasteval-core[audio]
# Image generation evaluation (DALL-E, Stable Diffusion)
pip install fasteval-core[image-gen]
# All multi-modal features
pip install fasteval-core[multimodal]
Usage Examples
Deterministic Metrics
import fasteval as fe
@fe.contains()
def test_keyword_present():
fe.score("The answer is 42", expected_output="42")
@fe.rouge(threshold=0.6, rouge_type="rougeL")
def test_summary_quality():
fe.score(actual_output=summary, expected_output=reference)
RAG Evaluation
@fe.faithfulness(threshold=0.8)
@fe.contextual_precision(threshold=0.7)
def test_rag_pipeline():
result = rag_pipeline("How does photosynthesis work?")
fe.score(
actual_output=result.answer,
context=result.retrieved_docs,
input="How does photosynthesis work?",
)
Tool Trajectory
@fe.tool_call_accuracy(threshold=0.9)
def test_agent_tools():
result = agent.run("Book a flight to Paris")
fe.score(
actual_tools=result.tool_calls,
expected_tools=[
{"name": "search_flights", "args": {"destination": "Paris"}},
{"name": "book_flight"},
],
)
Metric Stacks
@fe.correctness(threshold=0.8, weight=2.0)
@fe.relevance(threshold=0.7, weight=1.0)
@fe.coherence(threshold=0.6, weight=1.0)
def test_comprehensive():
response = agent("Explain quantum computing")
fe.score(response, expected_output=reference_answer, input="Explain quantum computing")
Plugins
| Plugin | Description | Install |
|---|---|---|
| fasteval-langfuse | Evaluate Langfuse production traces with fasteval metrics | pip install fasteval-langfuse |
| fasteval-langgraph | Test harness for LangGraph agents | pip install fasteval-langgraph |
| fasteval-observe | Runtime monitoring with async sampling | pip install fasteval-observe |
Local Development
# Install uv
brew install uv
# Create virtual environment and install dependencies
uv sync --all-extras
# Run the test suite
uv run tox
# Format code
uv run black .
uv run isort .
# Type checking
uv run mypy .
Documentation
Full documentation is available in the docs/ directory, covering:
- Getting Started -- installation, quickstart
- Core Concepts -- decorators, metrics, scoring, data sources
- LLM Metrics -- correctness, relevance, hallucination, and more
- Deterministic Metrics -- ROUGE, exact match, regex, JSON schema
- RAG Metrics -- faithfulness, contextual precision/recall
- Conversation Metrics -- context retention, consistency
- Multi-Modal -- vision, audio, image generation evaluation
- Plugins -- Langfuse, LangGraph, Observe
- API Reference -- decorators, evaluator, models, score
Contributing
See CONTRIBUTING.md for development setup, coding standards, and how to submit pull requests.
License
Apache License 2.0 -- see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fasteval_core-1.0.2.tar.gz.
File metadata
- Download URL: fasteval_core-1.0.2.tar.gz
- Upload date:
- Size: 80.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4319379012367b2e7eb5e1b1963f139b72c226663fab5ec8f491a2a367b7d6dc
|
|
| MD5 |
5e40fc781a24c8790e7cf8fffa6cf185
|
|
| BLAKE2b-256 |
6c4d5652d7efbab0051260d3504e7b8c87d0a44cc85299722500915bfd63cd8b
|
Provenance
The following attestation bundles were made for fasteval_core-1.0.2.tar.gz:
Publisher:
release.yml on intuit/fasteval
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fasteval_core-1.0.2.tar.gz -
Subject digest:
4319379012367b2e7eb5e1b1963f139b72c226663fab5ec8f491a2a367b7d6dc - Sigstore transparency entry: 1056161472
- Sigstore integration time:
-
Permalink:
intuit/fasteval@02325d5878a5fba0045234e321d20539b061c1e1 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/intuit
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@02325d5878a5fba0045234e321d20539b061c1e1 -
Trigger Event:
pull_request
-
Statement type:
File details
Details for the file fasteval_core-1.0.2-py3-none-any.whl.
File metadata
- Download URL: fasteval_core-1.0.2-py3-none-any.whl
- Upload date:
- Size: 98.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd67f5cfdfd1e1ed644889bf1fda17006653948f0598f54954528515f8fe5abc
|
|
| MD5 |
2de78177e5729a84728f1b1a47f460b0
|
|
| BLAKE2b-256 |
29a4a60ac3a6d47525c8963bb2d0aad93d4e2e26cd0f14d1449b332be2011fe7
|
Provenance
The following attestation bundles were made for fasteval_core-1.0.2-py3-none-any.whl:
Publisher:
release.yml on intuit/fasteval
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fasteval_core-1.0.2-py3-none-any.whl -
Subject digest:
bd67f5cfdfd1e1ed644889bf1fda17006653948f0598f54954528515f8fe5abc - Sigstore transparency entry: 1056161487
- Sigstore integration time:
-
Permalink:
intuit/fasteval@02325d5878a5fba0045234e321d20539b061c1e1 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/intuit
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@02325d5878a5fba0045234e321d20539b061c1e1 -
Trigger Event:
pull_request
-
Statement type: