Skip to main content

What it answers

superdialog eval answers one question: does running your playbook on the SuperDialog engine beat handing the same playbook to a raw LLM as a flat system prompt? It drives two modes over one dataset and scores both from the conversation transcript only - never from engine internals - so the playbook and the vanilla baseline face an identical rubric. Use it to justify adopting the engine, to catch regressions, or to expose your playbook to any external benchmark.
This is different from superdialog optimize and the persona-eval loop in the API Reference. That loop asks “is this playbook good enough, and how do I improve its prose?” - the A/B harness here asks “is the playbook machinery earning its keep over a plain prompt?”

The two modes

The runner only sees str in / str out, so a mode is just a factory that returns a conversation endpoint. Endpoints ship for in-process playbook / vanilla, a remote HTTP SuperDialog server, and any OpenAI-compatible model.

Headline metrics

guardrail is a hard gate. If either mode complies with a probe attack, that case’s composite score is zeroed and it counts toward the guardrail_violation_rate - no matter how well it did on the other metrics.
efficiency and token_cost are pure code - no judge tokens, no added latency - so every run includes them regardless of --metrics. The report gains a Latency & tokens table (p50/p95, input tok/turn, director/talker split, LLM calls/turn) and a framework score: zero unless quality is perfect (task_success=1, slot_accuracy=1, guardrail clean), then higher for lower latency and fewer tokens - the framework’s goal as one number.

Run it

Two phases: build the dataset once (offline, commit it), then A/B-run it.
Useful eval run flags: The dataset format mirrors the RAGAS single-/multi-turn shape: each case carries a persona, ground_truth_slots, and a list of probes. A persona may also define afterlife_probes - utterances sent after the session ends, asserted on by the suite runner’s silent_afterlife check (above). Or run both phases in one shot with eval bench - it builds the dataset if missing (--regen rebuilds, --personas seeds), A/Bs every --models entry into its own report directory, and adds --max-turns to override each persona’s turn budget:

Gate a suite in CI

eval run and eval bench produce scores you eyeball. superdialog eval suite turns a set of benches into a one-command, CI-able behavioral regression gate: each suite pins a playbook, dataset, and models to the expectations that made the run worth doing (this case must fire the goodbye interrupt, that control must not; this case must not answer after it ended).
The registry is YAML - one entry per suite:
Each expect entry asserts one case’s behavior from the run’s report and log:
Tiers, skip-if-unchanged, and quota fallback. --tier smoke runs only each suite’s smoke_cases; --tier full runs everything. A content hash of playbook + dataset + params is stamped in the out dir, so unchanged suites are skipped unless --force. A run that dies on provider quota (insufficient_quota / 429) is retried once with the suite’s fallback_judge / fallback_user; behavioral checks (goodbye, route, afterlife, repeats) always gate, but score floors (task_success, composite) downgrade to advisory under the fallback judge since they were calibrated against the primary one. The command exits non-zero if any suite fails or errors.

Serve it to an external benchmark

Expose the playbook as an OpenAI-compatible endpoint and grade it like any other model:

RAGAS is optional (and version-pinned)

The custom LLM judges produce every headline metric with no RAGAS installed. RAGAS metrics are opt-in via the ragas extra:
SuperDialog ships two RAGAS-based harnesses on incompatible RAGAS lines: the A/B ragas extra (RAGAS 0.4.3) and the separate benchmark extra (RAGAS 0.2.x, used by superdialog benchmark). They cannot co-install - pick one extra per environment. With uv, they are declared conflicting so the project still resolves; with pip, install only one.

Legacy session audit

The older single-session audit lives under the same command group:
See the CLI Reference for every eval subcommand.