feat: drive reasoning variants from models.dev reasoning_options

Parse the curated reasoning_options field from models.dev api.json and use
its effort values to generate reasoning variants instead of the hardcoded
per-package tables, in both the v1 provider catalog and the v2 catalog plugin.

- core: ModelsDev.ReasoningOption discriminated union (toggle | effort |
  budget_tokens); effort values stay open strings and unknown option types
  are tolerated since api.json is cast, not decoded
- core: ReasoningVariants shared per-package effort encoder used by v1
  ProviderTransform.variants and the v2 ModelsDevPlugin
- core: v2 catalog generates effort variants from reasoning_options;
  curated experimental modes win id collisions; anthropic profile gains
  the effort semantic
- llm: anthropic protocol supports adaptive thinking, lowers effort to
  output_config.effort, and sends the effort-2025-11-24 beta header
- opencode: resolved Provider.Model carries capabilities.reasoningOptions
  (unknown types and null effort values dropped at the mapping boundary);
  config models accept reasoning_options; models without usable effort
  data fall back to the hardcoded tables unchanged

Catalog-wide audit vs live api.json: 2975 models byte-identical, 38 diffs,
all data correcting stale hardcoded effort lists.
This commit is contained in:
Aiden Cline 2026-06-09 17:21:11 -05:00
commit f7dcfc2680
15 changed files with 954 additions and 62 deletions

View file

@ -17917,6 +17917,58 @@
"reasoning": {
"type": "boolean"
},
"reasoning_options": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["toggle"]
}
},
"required": ["type"],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["effort"]
},
"values": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": ["type", "values"],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["budget_tokens"]
},
"min": {
"type": "number"
},
"max": {
"type": "number"
}
},
"required": ["type"],
"additionalProperties": false
}
]
}
},
"temperature": {
"type": "boolean"
},
@ -18652,6 +18704,58 @@
"reasoning": {
"type": "boolean"
},
"reasoningOptions": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["toggle"]
}
},
"required": ["type"],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["effort"]
},
"values": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": ["type", "values"],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["budget_tokens"]
},
"min": {
"type": "number"
},
"max": {
"type": "number"
}
},
"required": ["type"],
"additionalProperties": false
}
]
}
},
"attachment": {
"type": "boolean"
},