Observed since 20 Oct, 18:22 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
acp-evals
Production-grade evaluation framework for Agent Communication Protocol (ACP) agents
ACP Evals is an open framework for evaluating AI agents across accuracy, performance, and reliability dimensions.
Modern AI agents need comprehensive testing before deployment. ACP Evals provides production-grade evaluation using LLM-as-judge methodology, designed to integrate seamlessly with the BeeAI ecosystem and any ACP-compliant agent.
ACP Evals enables you to:
| Concept | Description |
|---|---|
| Accuracy | Evaluates response quality against expected outputs using LLM-as-judge methodology. Supports custom rubrics for domain-specific evaluation. |
| Performance | Measures latency, memory usage, and token efficiency. Essential for production deployments where speed and resource constraints matter. |
| Reliability | Validates tool usage patterns, error handling, and consistency across runs. Critical for agents that interact with external systems. |
Evaluate agent accuracy with just a few lines:
from acp_evals import AccuracyEval
evaluation = AccuracyEval(
agent="http://localhost:8001/agents/my-agent",
rubric="factual"
)
result = await evaluation.run(
input="What is 10*5 then to the power of 2? do it step by step",
expected="2500",
print_results=True
)
assert result is not None and result.score >= 0.7
pip install acp-evals
1. Configure your LLM provider
echo "OPENAI_API_KEY=your-key-here" > .env
acp-evals check
2. Run your first evaluation
# Test accuracy
acp-evals run accuracy http://localhost:8001/agents/my-agent \
-i "What is 2+2?" -e "4"
3. Run comprehensive evaluation
acp-evals comprehensive http://localhost:8001/agents/my-agent \
-i "Calculate compound interest" -e "Detailed calculation"
from acp_evals import PerformanceEval
evaluation = PerformanceEval(
agent="http://localhost:8001/agents/my-agent",
num_iterations=5,
track_memory=True
)
result = await evaluation.run(
input_text="What is the capital of France?",
print_results=True
)
from acp_evals import ReliabilityEval
evaluation = ReliabilityEval(
agent="http://localhost:8001/agents/my-agent",
tool_definitions=["search", "calculator"]
)
result = await evaluation.run(
input="Search for AAPL price and calculate P/E ratio",
expected_tools=["search", "calculator"],
print_results=True
)
assert result.passed
ACP Evals works with any agent implementation:
http://localhost:8001/agents/my-agentagent.py:function_namemymodule.agent_function# Check setup
acp-evals check
# Run evaluations
acp-evals run accuracy <agent> -i <input> -e <expected>
acp-evals run performance <agent> -i <input>
acp-evals run reliability <agent> -i <input> --expected-tools <tool>
# Comprehensive testing
acp-evals comprehensive <agent> -i <input> -e <expected>
# Batch testing
acp-evals run accuracy <agent> --test-file tests.jsonl
Apache 2.0 - see LICENSE
Developed by contributors to the BeeAI project, this initiative is part of the Linux Foundation AI & Data program. Its development follows open, collaborative, and community-driven practices.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
acp-sdkEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | acp-sdk>=0.1.0 | runtime |
asyncioEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | asyncio>=3.4.3 | runtime |
clickEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | click>=8.0.0 | runtime |
httpxEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | httpx>=0.24.0 | runtime |
numpyEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | numpy>=1.24.0 | runtime |
opentelemetry-apiEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | opentelemetry-api>=1.20.0 | runtime |
opentelemetry-exporter-otlp-proto-httpEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | opentelemetry-exporter-otlp-proto-http>=1.20.0 | runtime |
opentelemetry-sdkEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | opentelemetry-sdk>=1.20.0 | runtime |
pandasEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pandas>=2.0.0 | runtime |
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2.0.0 | runtime |
python-dotenvEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | python-dotenv>=1.0.0 | runtime |
richEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | rich>=13.0.0 | runtime |
tiktokenEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | tiktoken>=0.5.0 | runtime |
anthropicEnvironment{
"extras": "",
"marker": "extra == \"all-providers\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | anthropic>=0.21.0; extra == "all-providers" | runtime |
openaiEnvironment{
"extras": "",
"marker": "extra == \"all-providers\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | openai>=1.0.0; extra == "all-providers" | runtime |
anthropicEnvironment{
"extras": "",
"marker": "extra == \"anthropic\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | anthropic>=0.21.0; extra == "anthropic" | runtime |
pyrightEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pyright>=1.1.0; extra == "dev" | runtime |
pytest-asyncioEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pytest-asyncio>=0.21.0; extra == "dev" | runtime |
pytest-covEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pytest-cov>=4.1.0; extra == "dev" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pytest>=7.4.0; extra == "dev" | runtime |
ruffEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | ruff>=0.1.0; extra == "dev" | runtime |
openaiEnvironment{
"extras": "",
"marker": "extra == \"openai\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | openai>=1.0.0; extra == "openai" | runtime |
bdist_wheel · 80.59 KB · Python py3
sdist · 96.24 KB · Python source
Observed since 20 Oct, 18:22 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:8d6c4f59a14760cda7ca85c2f2bf5df4ece6adb441f975d4bf045428ebabe751