Skip to content

Model Registry

models

Model registry: the one place to bump model ids and effort levels.

Every harness reads its default model, its default reasoning effort, its low/medium/high routing tiers, the reasoning-effort values its CLI accepts, and the effort used for the difficulty classifier from :data:MODEL_REGISTRY. The harness classes only know how to turn an effort value into a CLI flag. To move a harness to a new model or effort set, edit its :class:HarnessModels entry here and the matching table in README.md; nothing else needs to change.

Keys are the --harness names accepted by create_harness().

ModelTier(model, effort=None) dataclass

One routing tier: a model id plus the default reasoning effort for it.

effort is harness-specific (see :attr:HarnessModels.efforts). None means "resolve normally": the effort env var, else the registry default_effort. Only the literal override value none (via --effort or the env var) disables the effort flag.

HarnessModels(default, tiers=dict(), efforts=frozenset(), default_effort='high', subagent_effort=None, classifier_effort=None) dataclass

Model ids and effort levels for one harness.

default is used when no --model flag or model env var is set and is also the classifier model for routed runs. tiers maps low, medium and high to a :class:ModelTier; high should reuse default so routed runs never regress hard tasks. efforts is the set of effort values the harness CLI accepts; default_effort, every tier effort, subagent_effort and classifier_effort must be in it (or None).

default_effort is the reasoning effort passed on every run when no --effort flag, effort env var, or tier effort says otherwise. A None effort anywhere (tier, classifier) means "use the default". subagent_effort applies to agents the harness spawns, where the CLI has a separate knob (Codex); None follows the main effort.

harness_models(name)

Return the registry entry for harness name.

Raises ValueError for a harness that has no entry.

Source code in src/agentic_ci/models.py
def harness_models(name: str) -> HarnessModels:
    """Return the registry entry for harness *name*.

    Raises ``ValueError`` for a harness that has no entry.
    """
    try:
        return MODEL_REGISTRY[name]
    except KeyError:
        raise ValueError(
            f"No model registry entry for harness {name!r}; known: {sorted(MODEL_REGISTRY)}"
        ) from None