The data-driven model-capability catalog: one FIRST-MATCH-WINS const table
replacing the model-name string gates that were scattered across the
adapters (anthropic thinking/temperature/effort tiers, gemini thinking
dispatch, ollama’s gpt-oss think-string, openai-compat reasoning-model and
vision markers) and the domain’s static context windows.
Correlation ids captured from a provider’s HTTP response headers.
Appended (one plain-text line) to the user-facing error message so bug
reports to the provider can quote them; deliberately NOT part of
Display, which feeds logs and try_extract_error_message.
One Meta Responses output item saved for stateless replay. Reasoning items
split their encrypted payload from the remaining JSON so the ciphertext can
be serialized as base64 bytes. This keeps generic persistence redaction from
mistaking a ciphertext for a credential and corrupting the replay state.
Opaque provider-owned state that must be replayed with a committed assistant
turn. The reducer carries this as inert data; only the matching provider
interprets it.
Built-in provider registry. Lookups are case-insensitive on name.
Add a provider here when its quirks fit the existing strategies; add
a new ReasoningStrategy variant when a provider needs something
the existing ones can’t express.