Observed since 20 Oct, 22:12 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
agenticassure
Test and benchmark LLM-powered AI agents before deployment
Test and benchmark your AI agents before they go live.
AgenticAssure is an open-source SDK for testing, benchmarking, and validating LLM-powered AI agents. Define test scenarios in YAML, run them against your agent via a simple adapter, and get structured reports on quality and performance.
pip install agenticassure
For optional extras:
pip install agenticassure[similarity] # cosine similarity scorer
pip install agenticassure[openai] # OpenAI adapter
pip install agenticassure[langchain] # LangChain adapter
pip install agenticassure[all] # everything
# scenarios/support_agent.yaml
suite:
name: support-agent-tests
description: Validate our customer support agent
config:
default_timeout: 30
retries: 1
scenarios:
- name: greeting
input: "Hello, who are you?"
expected_output: "hello"
scorers:
- passfail
- name: order_lookup
input: "Look up order ORD-123"
expected_tools:
- get_order
expected_tool_args:
get_order:
order_id: "ORD-123"
scorers:
- passfail
- name: email_in_response
input: "What is your contact email?"
scorers:
- regex
metadata:
regex_pattern: "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}"
from agenticassure import AgentResult
class MyAgent:
"""Wrap your agent so AgenticAssure can call it."""
def run(self, input: str, context=None) -> AgentResult:
response = your_agent.invoke(input) # call your agent here
return AgentResult(
output=response.text,
tool_calls=[],
latency_ms=response.latency,
)
from agenticassure.loader import load_scenarios
from agenticassure.runner import Runner
from agenticassure.reports.cli_report import CLIReporter
suite = load_scenarios("scenarios/support_agent.yaml")
runner = Runner(adapter=MyAgent())
result = runner.run_suite(suite)
CLIReporter().report(result)
print(f"Pass rate: {result.pass_rate:.0%}")
print(f"Aggregate score: {result.aggregate_score:.2f}")
# Run scenarios with a custom adapter
agenticassure run scenarios/ --adapter mymodule.MyAgent
# Dry-run (validate without executing)
agenticassure run scenarios/ --dry-run
# Output as HTML or JSON
agenticassure run scenarios/ --adapter mymodule.MyAgent -o html
agenticassure run scenarios/ --adapter mymodule.MyAgent -o json
# Validate YAML without running
agenticassure validate scenarios/
# List all scenarios
agenticassure list scenarios/
Scenarios can use one or more scorers. A scenario passes only if all scorers pass.
| Scorer | Key | What It Checks |
|---|---|---|
| Pass/Fail | passfail | Output exists, expected tools called, tool args match, expected output found |
| Exact Match | exact | Exact string match against expected_output |
| Regex | regex | Pattern from metadata.regex_pattern matches output |
| Similarity | similarity | Cosine similarity via sentence-transformers (requires [similarity] extra) |
agenticassure/
core/ # Open-source agenticassure package (MIT)
pro/ # Commercial agenticassure-pro package
examples/ # Example scenarios and adapters
# Clone the repo
git clone https://github.com/agenticassure/agenticassure.git
cd agenticassure
# Install core in dev mode
pip install -e "core[dev]"
# Run tests
pytest core/tests/
# Lint and format
ruff check .
black --check .
Full documentation is available at docs.agenticassure.com.
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
The core package is released under the MIT License.
The pro package is available under a commercial license -- see pro/ for details.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
clickEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | click>=8.0 | runtime |
jsonschemaEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | jsonschema>=4.0 | runtime |
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pydantic<3.0,>=2.0 | runtime |
pyyamlEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pyyaml>=6.0 | runtime |
richEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | rich>=13.0 | runtime |
langchainEnvironment{
"extras": "",
"marker": "extra == \"all\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | langchain>=0.1; extra == "all" | runtime |
openaiEnvironment{
"extras": "",
"marker": "extra == \"all\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | openai>=1.0; extra == "all" | runtime |
sentence-transformersEnvironment{
"extras": "",
"marker": "extra == \"all\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | sentence-transformers>=2.0; extra == "all" | runtime |
blackEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | black>=23.0; extra == "dev" | runtime |
pytest-covEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest-cov>=4.0; extra == "dev" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest>=7.0; extra == "dev" | runtime |
ruffEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | ruff>=0.1; extra == "dev" | runtime |
langchainEnvironment{
"extras": "",
"marker": "extra == \"langchain\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | langchain>=0.1; extra == "langchain" | runtime |
openaiEnvironment{
"extras": "",
"marker": "extra == \"openai\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | openai>=1.0; extra == "openai" | runtime |
sentence-transformersEnvironment{
"extras": "",
"marker": "extra == \"similarity\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | sentence-transformers>=2.0; extra == "similarity" | runtime |
bdist_wheel · 24.52 KB · Python py3
sdist · 20.1 KB · Python source
Shared repository data · GitHub
Observed since 20 Oct, 22:12 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:bd4036619d6d10b690b0d5d9792f4ef4cef6fa4a3d03c2ee55d006e461b0f290