Skip to main content

AgentRubric

Trajectory-level evaluation for LLM agents. Zero dependencies, five metrics, one score.

📦 Live on PyPI: pypi.org/project/agentrubric — pip install agentrubric

Current tools (LangSmith, Langfuse, etc.) give you logging. AgentRubric gives you scores .

When an LLM agent runs, it produces a trajectory — a sequence of thoughts, tool calls, observations, and a final answer. Knowing whether that trajectory was actually correct is hard: Did it call the right tools? With the right arguments? Did it wander in loops? Did it finish the task at all? AgentRubric answers all of that with a single evaluate() call.

image
trajectory (list of steps)
        │
        ▼
   AgentRubric.evaluate()
        │
        ▼
EvaluationReport
  ├─ tool_accuracy_score      — did it call the right tools?
  ├─ argument_fidelity_score  — did it call them with the right arguments?
  ├─ trajectory_length_score  — did it solve the task efficiently?
  ├─ completion_score         — did it actually finish the task?
  └─ failure_taxonomy         — what went wrong, categorised

Install

pip install agentrubric

Zero required dependencies. Optional extras for framework integrations:

pip install agentrubric[langchain]   # LangChain agent parsing
pip install agentrubric[openai]      # OpenAI function-calling parsing

Then say hello:

agentrubric

Quickstart

from agentrubric import Trajectory, Step, evaluate

trajectory = Trajectory(
    task="Find the latest JAX release and summarize the changelog",
    steps=[
        Step(step_type="thought", content="I need to search for JAX releases"),
        Step(step_type="tool_call", content="", tool_name="search",
             tool_args={"query": "JAX latest release"}),
        Step(step_type="observation", content="JAX 0.4.30 released on July 2026..."),
        Step(step_type="final_answer",
             content="The latest JAX release is 0.4.30, released July 2026."),
    ],
    final_answer="The latest JAX release is 0.4.30, released July 2026.",
)

report = evaluate(
    trajectory=trajectory,
    expected_tools=["search"],
    expected_calls=[{"tool_name": "search", "expected_args": {"query": "JAX latest release"}}],
    optimal_steps=4,
    completion_keywords=["JAX", "release"],
)

print(report)
print(report.overall_score)   # 0.9-ish
print(report.failures)        # []
AgentRubric Evaluation Report
========================================
  Overall Score         : 0.93
  Tool Accuracy         : 1.00
  Argument Fidelity     : 0.70
  Trajectory Efficiency : 1.00
  Completion            : 1.00

  No failures detected.
========================================

Export to JSON for dashboards, CI gates, or logging pipelines:

report.to_json()

Run it yourself: python examples/basic_evaluation.py


The five metrics

Metric Question it answers Signal
Tool Accuracy Did the agent call the tools it was supposed to? expected_tools matched against tools actually called
Argument Fidelity Were those tools called with the right arguments? exact + fuzzy match against expected_calls
Trajectory Length Did it solve the task efficiently? optimal_steps / actual_steps, capped at 1.0
Completion Did it actually finish? binary, or keyword coverage of the final answer
Failure Taxonomy When it broke, why? WRONG_TOOL, MISSING_TOOL, BAD_ARGS, LOOP, NO_COMPLETION, HALLUCINATED_TOOL

overall_score is a weighted average: 0.3 × tool_accuracy + 0.3 × argument_fidelity + 0.2 × trajectory_length + 0.2 × completion.


Framework integrations

Already using LangChain or OpenAI function calling? Don't hand-build trajectories — parse them straight out of the agent's own output.

LangChain

from agentrubric.integrations.langchain import from_langchain

result = agent_executor.invoke({"input": task})
trajectory = from_langchain(result, task=task)
report = evaluate(trajectory, expected_tools=["search"])

OpenAI function calling

from agentrubric.integrations.openai import from_openai_messages

trajectory = from_openai_messages(messages, task=task)
report = evaluate(trajectory, expected_tools=["search"])

Design principles

  • Zero required dependencies. A library that requires nothing to install is a library people actually install. LangChain/OpenAI support is opt-in via extras.
  • Framework-agnostic core. Trajectory and Step are plain dataclasses — build them from any agent framework, or by hand.
  • Scores, not logs. AgentRubric doesn't replace your tracing tool; it turns a trajectory you already captured into a number you can gate CI on.

Roadmap

  • YAML/JSON case files so expectations don't have to live inline in Python
  • Configurable metric weights instead of the fixed 30/30/20/20 split
  • More framework integrations beyond LangChain and OpenAI

Development

pip install -e ".[dev]"
pytest

License

MIT

Metadata

Release files for agentrubric 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agentrubric 0.1.2
File Size Uploaded Provenance Actions
agentrubric-0.1.2.tar.gz 12.0 kB Without provenance Details for agentrubric-0.1.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for agentrubric 0.1.2
File Interpreter ABI Platform Actions
agentrubric-0.1.2-py3-none-any.whl Python 3 none any Details for agentrubric-0.1.2-py3-none-any.whl

Total release size: 24.7 kB

Release files / agentrubric-0.1.2.tar.gz

Download URL agentrubric-0.1.2.tar.gz
Size 12.0 kB
Tags Source
SHA-256 checksum
How to use checksums
a3cd276e92432f94262dee9cbbca25745a6d0155e240fa864ec4a3f741cc5e2e
BLAKE2b-256 checksum
How to use checksums
9d65437c7600363d54e2a75fa799e98e38c0252001819d9c5ed61cf89728b120
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.14

Release files / agentrubric-0.1.2-py3-none-any.whl

Download URL agentrubric-0.1.2-py3-none-any.whl
Size 12.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
01c161f0287e4e9c263f82d54c9590f55830bc0ace69c3e6ffb486829fb215e6
BLAKE2b-256 checksum
How to use checksums
9cc1178d6187a311ae68d5b5215ff288639895fdbcc6b03293ba0768274c032e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.14

Security for agentrubric 0.1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page