Offline Evaluation

    Deterministic, in-process scoring — no LLM cost, no network round trip.

    Score an output locally against expected tool calls and constraints; the result is pushed as an evaluation span next to your trace, and also shown in the trace’s Evaluation tab.

    scores = evalkit.evaluate(
        output=agent_reply,
        expected_tools=["search", "summarize"],
        tool_calls=[{"name": "search"}, {"name": "summarize"}],
        constraints={"required_terms": ["citation"], "has_citations": True},
    )   # → {"tool_trajectory": 1.0, "tool_f1": 1.0, "response_match": 1.0, ...}

    This is the same scorer simulate_user calls automatically after each scenario turn — see Scenario Simulation for the multi-turn version, and Selecting a judge model for when to reach for LLM-as-judge instead.

    EvalKit is built by Syntropylabs. Published on PyPI and npm.