feat: per-episode caps, graceful stream errors, multi-model cached runs, Electronics hybrid judge, multi-stage Docker build (repo e4b5ac6)
bae32d1 verified | """Registry of models approved for recorded cached runs, in dropdown order.""" | |
| from __future__ import annotations | |
| from dataclasses import dataclass | |
| class CachedModel: | |
| slug: str | |
| provider_model_id: str | |
| label: str | |
| # Order matters: newest models first, the original baseline last. The UI dropdown | |
| # and the scenario ordering both follow this sequence. | |
| CACHED_MODEL_ORDER: tuple[CachedModel, ...] = ( | |
| CachedModel("gpt-5.6-sol", "openai/gpt-5.6-sol", "GPT-5.6 Sol"), | |
| CachedModel("gpt-5.6-terra", "openai/gpt-5.6-terra", "GPT-5.6 Terra"), | |
| CachedModel("gpt-5.6-luna", "openai/gpt-5.6-luna", "GPT-5.6 Luna"), | |
| CachedModel("claude-fable-5", "anthropic/claude-fable-5", "Claude Fable 5"), | |
| CachedModel("claude-sonnet-5", "anthropic/claude-sonnet-5", "Claude Sonnet 5"), | |
| CachedModel("qwen3-32b", "qwen/qwen3-32b", "Qwen3 32B"), | |
| ) | |
| BASELINE_MODEL_SLUG = "qwen3-32b" | |
| CACHED_MODEL_BY_SLUG: dict[str, CachedModel] = { | |
| model.slug: model for model in CACHED_MODEL_ORDER | |
| } | |
| def ordered_slugs(available: set[str]) -> list[str]: | |
| """Return the registry-ordered subset of available slugs, fail-closed.""" | |
| return [model.slug for model in CACHED_MODEL_ORDER if model.slug in available] | |