Evaluation Plane
The Evaluation Plane measures whether a frozen routing recipe, logical model pool, binding, workload, and runtime environment improve the system outcome. It does not reduce evaluation to “did the router name the expected model?” A useful decision must also be feasible, execute the intended arm, preserve safety and privacy, stay within cost and latency budgets, and improve the final task or trajectory outcome.
The implementation is a greenfield control-plane subsystem with one current run contract, one executor registry, one durable bundle layout, one report shape, and one server-attestation revision. CLI, Dashboard, comparison, and Campaign workflows consume the same evidence model.
Live evaluation is subject-bound. The catalog publishes one target for each request-reachable Mixture-of-Models Recipe, never a generic runtime target. A run freezes that Mixture's Entrypoint aliases, Recipe and decision boundaries, logical model arms, provider fallback, support models, prices, and recipe/pool/binding/topology digests before any request is sent.
System boundary
Evaluation observes the complete path while preserving runtime ownership:
workload + session/tool/media state + policy constraints
|
v
signals -> projections -> decision
|
v
logical action: model(s), budget, selector/looper, fallback
|
v
serving execution: endpoint, queue, retry, physical replica
|
v
quality + success + cost + latency + safety + privacy + preference
- The Router owns logical Entrypoint resolution, Recipe execution, logical model selection, selector/looper policy, generation budget, and logical fallback constraints.
- Agent and product control planes own tools, roles, workspace mutation, and external side effects.
- Envoy and the serving/fleet layer own transport, physical placement, replicas, queues, and capacity.
- The Evaluation Plane correlates these facts without moving their ownership into the Router request path.
“Fleet” in this ownership description is conceptual. The retired Fleet
Dashboard is not part of Evaluation: the /fleet-sim routes, navigation, API
surface, and startup sidecar dependency have been removed. The standalone
src/fleet-sim research package, its documentation, and release tooling remain
independent and are not started by the Dashboard stack.
Eight evaluation tracks
Every selected track has its own evidence level, coverage, metrics, and gates. The run-level evidence level is the weakest selected track, so one strong track cannot promote another track that lacks evidence.
| Track | Question | Current metric surface |
|---|---|---|
| Routing | Did the Recipe choose a useful eligible logical arm? | coverage, accuracy, abstention, fallback, execution success, selected-arm count and entropy, route latency p50/p95 |
| Model pool | Does the pool contain useful, learnable, and dependable complementarity? | arm count, best single, pool oracle, oracle gain, unique wins, selection coverage/entropy, quality dominance, quality-cost Pareto dominance, per-arm and worst-arm reliability, pairwise failure overlap, all-arm failure rate |
| Routing + pool | How much of the pool ceiling did routing realize? | realized quality, oracle regret, normalized regret, oracle-capture ratio, reliability, complete runtime cost per success, latency p95 |
| Agentic | Does routing remain useful over a trajectory? | terminal success, task score, invalid-tool rate, trajectory length, privacy exposures per trajectory, complete runtime cost per successful trajectory |
| Multimodal | Were media capability, routing, execution, grounding, and privacy correct? | overall and per-modality support/quality, privacy violations |
| Preference | Does qualified feedback favor the candidate? | agreement, propensity coverage, effective sample size and ratio, self-normalized IPS agreement |
| Safety | Were hard policy and blocking decisions correct? | violations/case, violated-case rate and one-sided 95% upper bound, block accuracy, false-negative and false-positive rates |
| Capacity | Where is the observed stable envelope? | per-level and aggregate throughput, p95/p99, success/error, scaling efficiency, observed saturation, stable concurrency upper bound, cost per success, and frozen-SLO headroom |
Cost reducers fail closed on incomplete ledgers. For example, a missing arm or trajectory cost does not produce an artificially low cost-per-success number. A live run that selects Capacity must declare a versioned SLO before it can be created and must request concurrency of at least two, so adjacent-level scaling is measured rather than implicitly accepted. The manifest freezes required concurrency, maximum p95 latency, maximum error rate, minimum throughput, and minimum adjacent-level throughput scaling. The worker reduces real load observations into a monotonic qualified envelope; the server recomputes the profile and rejects altered level decisions, saturation, headroom, or verdicts. Replay capacity remains diagnostic and carries no SLO.
Runnable execution sources
The catalog separates “understands this question” from “can answer it for this
target.” Every target declares accepted_executors for each of its modes. The
planner admits only a suite whose mode, tracks, and executor are accepted by
that target, and every run contains exactly one executor cohort.
| Source | Current capability | Scientific boundary |
|---|---|---|
evaluation-smoke | deterministic four-case replay across all eight track schemas through fixture-replay.v1 | E0 vertical-slice diagnostics only |
live-mom-core | the same immutable 64-case hidden-label cohort through mom-cohort-replay.v1 or live-runtime.v1, with routing, a dense case-by-frozen-arm matrix, and routed outcomes | replay is E0; a complete server-attested live run can seal routing E3, model-pool E4, and joint E5 (run-level E3). Those levels do not by themselves satisfy G3, which requires a server-controlled pair |
live-agent-tasks | complete evaluation-agent-task-ledger.v1 evidence with evaluation-agent-task-attempt.v1 repeated-task trajectories observed by an external production agent runtime, including grading, privacy, cost, and real-tool execution receipts bound to the exact Mixture | agentic E5 task-quality evidence after server validation and reduction; the evaluation worker does not execute tools, benchmark_parity_claim remains none, and this method has no Campaign gate and never qualifies G6 |
live-fault-recovery | complete brokered exact-step fault ledger with paired baseline/treatment receipts, repeated seeds, state, side effects, retry, and latency | E5 only after the server re-reduces at least 20 pairs across at least 5 seeds; Continuity labeled failover is diagnostic only |
live-multimodal | bounded eligible non-text requests through the active runtime | E0 media transport and response diagnostics |
live-hard-policy | Router-owned policy/config proof plus dynamic attack/block observations that exactly cover required rule/enforcement-point pairs | G2 is data-dependent until the explicit endpoint supplies one complete sealed live window |
live-production-experiment | consumes an explicitly configured external ledger of sealed randomized policy-arm assignments/exposures, rollout controls, and optional preference outcomes | G8 uses operational safety receipts and risk UCB; G9 additionally requires complete propensity-qualified target/reference outcomes; vLLM-SR does not create or operate the experiment |
live-capacity | short repeated closed-loop load levels through the active Entrypoint for checking load execution, telemetry, and report generation | E0 diagnostic only; it does not qualify G7 or support a release capacity decision |
| Installed normalized suite, replay | exact pinned source export normalized into typed private artifacts and replayed by normalized-suite-replay.v1 | per-track source-bound evidence only when the trusted installer re-derives it |
| Installed normalized suite, live | visible cases executed against the active runtime by normalized-suite-live.v1 | live execution receives no replay qualification; it must earn server-owned live evidence |
Executor compatibility is registry data, not a target-ID branch. A target provider declares accepted executor identities per mode; the run manifest freezes the selected identity for every suite, and staging resolves that exact identity before it admits work. Multiple executor implementations may share a suite class without changing or ambiguating an existing run.
Track availability is likewise derived from each Mixture target's advertised
features and per-track requirements. Routing requires its frozen Recipe,
topology, Router evaluation API, and Envoy. Model-pool and joint require Envoy,
topology, and at least two executable frozen arms; they do not depend on the
Router diagnostics API. Multimodal additionally requires a non-text arm.
Agentic task quality and fault recovery use separate explicit ledgers and a
suite cannot substitute one for the other. Preference
requires a production experiment ledger, safety requires a hard-policy ledger,
and capacity requires Envoy. The state model is intentionally precise:
unsupported suite/target/executor combinations are rejected during planning;
malformed or missing required artifacts fail execution or sealing; an executed
cell with no observation is recorded as unavailable; a valid report without
the typed proof for a gate leaves that gate unavailable; an observed eligible
regression is fail; and a gate excluded by the selected change profile is
not_applicable. Catalog methods report only configured or data_required;
qualification comes from sealed run evidence, never from catalog presence.
Configure production evidence services
vllm-sr serve forwards Evaluation configuration to the Dashboard container
from the host environment. Configuration contains only canonical origins,
bounded timeouts, and environment-variable names. Credential values are passed
as inherited container environment entries and never rendered into Docker
arguments, run manifests, catalog responses, reports, or logs.
| Dashboard environment variable | Contract |
|---|---|
EVALUATION_ROUTER_API_KEY_ENV | Name of a dedicated Router bearer-token environment variable. The token must be declared under global.services.management_api.auth.tokens, its role must include classify.invoke, and it must not be the Dashboard Recipe-management credential. |
EVALUATION_ENVOY_API_KEY_ENV | Name of the credential used only for brokered Envoy model discovery and chat calls. |
EVALUATION_AGENT_TASK_LEDGER_URL, _API_KEY_ENV, _TIMEOUT | Exact canonical origin, independent credential reference, and Go duration for the sealed provider-observed agent-task ledger. |
EVALUATION_FAULT_RECOVERY_LEDGER_URL, _API_KEY_ENV, _TIMEOUT | Exact canonical origin, independent credential reference, and Go duration for the sealed recovery ledger. |
EVALUATION_HARD_POLICY_LEDGER_URL, _API_KEY_ENV, _TIMEOUT | Exact canonical origin, independent credential reference, and Go duration for the sealed policy ledger. |
EVALUATION_PRODUCTION_EXPERIMENT_LEDGER_URL, _API_KEY_ENV, _TIMEOUT | Exact canonical origin, independent credential reference, and Go duration for the sealed assignment/exposure/outcome ledger. |
Each ledger is either entirely absent or configured with both an origin and an
API-key environment reference. Its timeout defaults to 30s when configured
and must be at most 10m. Router, Envoy, and ledger credential references are
pairwise distinct; every ledger origin is distinct from Router, Envoy, and the
other ledgers. Origins are exact http(s)://host[:port] values with no user
information, path, query, fragment, whitespace, or trailing slash. Invalid or
partial configuration fails closed before Evaluation routes become available.
With Router bearer authentication enabled, omitting
EVALUATION_ROUTER_API_KEY_ENV keeps model-pool, joint, multimodal, and
capacity work available through Envoy where their own requirements are met,
but removes routing evaluation from the target. Supplying the dedicated token
restores router.evaluate; the Go broker resolves its value server-side and
adds Authorization only to the exact frozen Router origin.
The Python worker carries only the SecretRef identity and never resolves its
environment value or constructs an authorization header. Consequently,
standalone vllm-sr eval run accepts unauthenticated targets but fails closed
when a manifest references credentials without the Dashboard broker.
Address baseline and candidate deployments together
Set EVALUATION_DEPLOYMENTS_DIR when one Dashboard Evaluation service must
address multiple simultaneously running Mixture-of-Models deployments. The
canonical local vllm-sr serve path mounts this host directory read-only at
/app/evaluation-deployments in the Dashboard container only. Router and Envoy
receive neither that mount nor the environment variable. With the variable
unset, the current single-runtime target and its existing zero-configuration
behavior are unchanged.
The directory contains a strict registry.json and the referenced Router YAML
files:
{
"schema_version": "evaluation-deployments.v1",
"deployments": [
{
"id": "baseline",
"name": "Baseline",
"description": "Current production deployment",
"config_file": "baseline/config.yaml",
"router_origin": "http://baseline-router:8080",
"envoy_origin": "http://baseline-envoy:8899"
},
{
"id": "candidate",
"name": "Candidate",
"description": "Candidate deployment",
"config_file": "candidate/config.yaml",
"router_origin": "http://candidate-router:8080",
"envoy_origin": "http://candidate-envoy:8899"
}
]
}
The schema rejects unknown fields, an empty deployment list, duplicate IDs or
resulting target IDs, non-canonical origins, absolute/traversing config paths,
and any symlink in the registry, config, or host mount path. Each config is
parsed through the same Mixture snapshot loader as the default runtime. The
server derives the config digest from its exact bytes and derives the Recipe,
selector, adaptation, binding, pool, and topology identities from the parsed
content. registry.json cannot contain credentials or ledger endpoints; the
existing global environment-only SecretRefs remain the only credential and
typed-ledger authority.
Catalog target IDs are deployment-scoped (<deployment>--<mixture-id>), while
the embedded Mixture ID and Recipe name remain the shared logical experiment
subject. Only the safe deployment name is projected into the authenticated
catalog. Origins, config paths, and SecretRefs remain private in the frozen run
manifest and broker. This lets a controlled pair bind one baseline target and
one candidate target without conflating their network address with the Recipe
treatment.