Skip to main content

AgentRubric: trajectory-level evaluation for LLM agents

Project description

AgentRubric

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

📦 Live on PyPI: pypi.org/project/agentrubricpip 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.

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

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.

Development

pip install -e ".[dev]"
pytest

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agentrubric-0.1.1.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agentrubric-0.1.1-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file agentrubric-0.1.1.tar.gz.

File metadata

  • Download URL: agentrubric-0.1.1.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for agentrubric-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c01206c111e46f9d8d230fadf8b9e77e2302b50e3f03dbaee27819ed42553515
MD5 04a39c010877ea0f9b333d018059eb23
BLAKE2b-256 220e9db275af68e4f6449138c5301c05defe5e81d4a0a06a729c13421ae6cfb0

See more details on using hashes here.

File details

Details for the file agentrubric-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: agentrubric-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for agentrubric-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 441567ca60cf0d9524090e202bf96af3c1d94004237ec71410a373ecdf95b43a
MD5 8a7844b33253d75089b6ccfeefd348e0
BLAKE2b-256 79165805127a489ac72c270b983fa595ac9998a16b9bb2895d7f71f404f88967

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page