Evaluation API¶
Single-run cases¶
executionkit.evals.EvalCase
dataclass
¶
A single eval case with a runner and a result check.
executionkit.evals.EvalResult
dataclass
¶
EvalResult(name: str, passed: bool, reason: str = '', metadata: MappingProxyType[str, Any] = (lambda: MappingProxyType({}))())
Outcome of a single eval case.
executionkit.evals.EvalReport
dataclass
¶
Aggregate eval report.
Attributes:
| Name | Type | Description |
|---|---|---|
results |
tuple[EvalResult, ...]
|
Per-case outcomes. |
min_accuracy |
float | None
|
Optional accuracy threshold used by
:func: |
accuracy_passed
property
¶
True when accuracy >= min_accuracy (live-suite gate).
Falls back to :attr:passed when no min_accuracy was configured,
so callers can always use this property as the single gate regardless
of suite type.
passed
property
¶
True when every case passed (100% — required for deterministic suites).
summary ¶
executionkit.evals.run_eval_suite
async
¶
Run eval cases in order and return pass/fail results.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cases
|
Sequence[EvalCase]
|
Eval cases to run. |
required |
min_accuracy
|
float | None
|
When provided, the report is considered passing when
|
None
|
Returns:
| Type | Description |
|---|---|
EvalReport
|
class: |
EvalReport
|
|
EvalReport
|
|
Source code in executionkit/evals.py
Conversation scripts¶
executionkit.evals.Turn
dataclass
¶
One turn of a multi-turn :class:ConversationScript.
Attributes:
| Name | Type | Description |
|---|---|---|
user |
str
|
The user text sent to :meth: |
check |
EvalCheck
|
An :data: |
executionkit.evals.ConversationScript
dataclass
¶
A named, ordered sequence of conversational turns to evaluate.
Run via :func:run_conversation_script, which drives each turn through a
single :class:~executionkit.kit.Kit so conversation state carries across
turns.
Attributes:
| Name | Type | Description |
|---|---|---|
name |
str
|
Identifier used to label each turn's :class: |
turns |
tuple[Turn, ...]
|
The turns to run, in order. |
executionkit.evals.run_conversation_script
async
¶
Drive a multi-turn :class:ConversationScript through a single Kit.
Each turn is sent via kit.turn(turn.user); because the same kit
carries conversation state across calls, later turns see the transcript of
earlier ones. The :class:PatternResult returned by each turn is passed
to that turn's :data:EvalCheck, and the verdict is normalized exactly like
:func:run_eval_suite does (None/True/"" pass; False and
other strings fail). Any exception raised by kit.turn or the check is
captured as a failed :class:EvalResult rather than propagated, so one bad
turn does not abort the remaining turns.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
script
|
ConversationScript
|
The named sequence of turns to evaluate. |
required |
kit
|
Kit
|
A :class: |
required |
Returns:
| Name | Type | Description |
|---|---|---|
An |
EvalReport
|
class: |
EvalReport
|
|
|
EvalReport
|
gates on a 100% pass rate via :attr: |
Source code in executionkit/evals.py
Live-provider helper¶
executionkit.evals.live_provider_from_env ¶
Build an opt-in live eval provider from EXECUTIONKIT_* env vars.
Returns None unless EXECUTIONKIT_LIVE_EVAL=1. When enabled,
EXECUTIONKIT_BASE_URL and EXECUTIONKIT_MODEL are required;
EXECUTIONKIT_API_KEY is optional and defaults to an empty string.
Source code in executionkit/evals.py
live_provider_from_env() reads:
| Variable | Required when enabled |
|---|---|
EXECUTIONKIT_LIVE_EVAL=1 |
Enables construction. |
EXECUTIONKIT_BASE_URL |
Yes |
EXECUTIONKIT_MODEL |
Yes |
EXECUTIONKIT_API_KEY |
No |
It returns None when live evaluation is not enabled. It raises ValueError
when the flag is enabled but a required value is missing.
Read the Evaluation guide for examples and the difference between repeatable and live checks.