@yanlinglabs/winter-provider-catalog 0.0.24 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -208,7 +208,14 @@
208
208
  "unsupportedParameters": [
209
209
  "thinking.type.adaptive"
210
210
  ],
211
- "status": "candidate"
211
+ "status": "candidate",
212
+ "deferredToolLoading": {
213
+ "value": true,
214
+ "source": "official-doc",
215
+ "confidence": "declared",
216
+ "observedAt": "2026-09-25T18:30:00Z",
217
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
218
+ }
212
219
  },
213
220
  {
214
221
  "key": "anthropic/claude-opus-5",
@@ -216,7 +223,7 @@
216
223
  "upstreamId": "claude-opus-5",
217
224
  "displayName": "Claude Opus 5",
218
225
  "aliases": [],
219
- "$comment": "ADDED by Lane X, beyond T2's seed. `opus` is one of the four PINNED aliases `packages/runtime/src/provider/selection.ts` routes to the `anthropic` provider (`PINNED_ANTHROPIC_ALIASES`), and with no row carrying it the alias resolved to a typed `unknown-model` refusal — a hole the seed's `sonnet`/`haiku` rows hid. The capability facts are upstream's at the pin; the prices are the vendor's own page. — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-5/overview — actual Claude API wire model ID claude-opus-5. https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, xhigh, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — thinking defaults on; disabled allowed only at low/medium/high, rejected at xhigh/max. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor July 24, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. ",
226
+ "$comment": "ADDED by Lane X, beyond T2's seed. `opus` is one of the four PINNED aliases `packages/runtime/src/provider/selection.ts` routes to the `anthropic` provider (`PINNED_ANTHROPIC_ALIASES`), and with no row carrying it the alias resolved to a typed `unknown-model` refusal — a hole the seed's `sonnet`/`haiku` rows hid. The capability facts are upstream's at the pin; the prices are the vendor's own page. — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-5/overview — actual Claude API wire model ID claude-opus-5. https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, xhigh, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — thinking defaults on; disabled allowed only at low/medium/high, rejected at xhigh/max. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor July 24, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. WS-23 (2026-09-25): `thinking.type.disabled+output_config.effort.xhigh` / `.max` -- a CONJUNCTION token (`+` joins two ordinary tokens): disabled thinking is rejected only together with those efforts (https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting; the model page's 'disabled allowed only at low/medium/high'). The Anthropic adapter's `buildThinking` rewrites such a request to adaptive thinking rather than sending a documented 400. ",
220
227
  "endpoints": [
221
228
  "chat"
222
229
  ],
@@ -356,6 +363,15 @@
356
363
  "confidence": "declared",
357
364
  "observedAt": "2026-09-25T12:30:00Z",
358
365
  "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/effort — the effort page's supportedModels list names claude-fable-5-1, claude-fable-5, claude-opus-5-5, claude-opus-5, claude-opus-4-8, claude-opus-4-7, claude-opus-4-6, claude-opus-4-5-20251101, claude-sonnet-5 and claude-sonnet-4-6: effort is requested through `output_config.effort` (Claude 4.7 and later reject a manual `thinking.budget_tokens`, https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting#rejected-configurations)."
366
+ },
367
+ "perMessageEffort": {
368
+ "value": {
369
+ "beta": "mid-conversation-output-config-2026-07-01"
370
+ },
371
+ "source": "official-doc",
372
+ "confidence": "declared",
373
+ "observedAt": "2026-09-25T18:00:00Z",
374
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/effort#change-effort-mid-conversation-beta — \"On Claude Fable 5.1, Claude Mythos 5.1, Claude Opus 5.5, and Claude Opus 5, use a per-message effort change, which keeps the prompt cache\": a role:\"system\" message with empty content and output_config.effort, beta header mid-conversation-output-config-2026-07-01; \"Models without per-message effort, including Claude Fable 5, return a 400 error\". claude 2.1.282 sends the older alias per-turn-control-2026-07-01, which the page does not document."
359
375
  }
360
376
  },
361
377
  "pricing": {
@@ -374,9 +390,50 @@
374
390
  "temperature",
375
391
  "top_p",
376
392
  "top_k",
377
- "thinking.type.enabled"
393
+ "thinking.type.enabled",
394
+ "thinking.type.disabled+output_config.effort.xhigh",
395
+ "thinking.type.disabled+output_config.effort.max"
378
396
  ],
379
- "status": "candidate"
397
+ "status": "candidate",
398
+ "deferredToolLoading": {
399
+ "value": true,
400
+ "source": "official-doc",
401
+ "confidence": "declared",
402
+ "observedAt": "2026-09-25T18:30:00Z",
403
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
404
+ },
405
+ "midConversationSystem": {
406
+ "value": true,
407
+ "source": "official-doc",
408
+ "confidence": "declared",
409
+ "observedAt": "2026-09-25T19:00:00Z",
410
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — \"This feature is available on Claude Fable 5.1, Claude Mythos 5.1, Claude Fable 5, Claude Mythos 5, Claude Opus 5.5, Claude Opus 4.8, and Claude Opus 5. No beta header is required for mid-conversation system messages. This feature is not available on Claude Sonnet 5.\""
411
+ },
412
+ "midConversationToolChanges": {
413
+ "value": {
414
+ "beta": "mid-conversation-tool-changes-2026-07-01"
415
+ },
416
+ "source": "official-doc",
417
+ "confidence": "declared",
418
+ "observedAt": "2026-09-26T00:00:00Z",
419
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition / tool_removal blocks in a role:\"system\" message, by reference (\"Add/remove by reference: mid-conversation-tool-changes-2026-07-01 — Claude API, Amazon Bedrock, Google Cloud\"); available on Claude Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 4.8 and Opus 5, \"Not available on Claude Sonnet 5\". Retrieved 2026-09-26; release note 2026-07-24 (https://platform.claude.com/docs/en/release-notes/overview)."
420
+ },
421
+ "inlineToolDefinitions": {
422
+ "value": {
423
+ "beta": "inline-tools-2026-09-15"
424
+ },
425
+ "source": "official-doc",
426
+ "confidence": "declared",
427
+ "observedAt": "2026-09-26T00:00:00Z",
428
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition with a tool_definition (\"Add/remove by reference + define by value: inline-tools-2026-09-15 — Claude API\"); \"The inline-tools-2026-09-15 header covers all reference-based changes\"; redefinition: \"send a different definition under the same name ... The new definition replaces the earlier one from that position onward\" (no removal first, a tool declared in tools included); a definition reusing the name of a different type of tool is a 400 tool_name_conflict. Same model list as midConversationToolChanges. Claude API only, so set on the anthropic and console providers (both api.anthropic.com), never on a cloud reseller. Retrieved 2026-09-26; release note 2026-09-22."
429
+ },
430
+ "assistantPrefill": {
431
+ "value": false,
432
+ "source": "official-doc",
433
+ "confidence": "declared",
434
+ "observedAt": "2026-09-26T00:00:00Z",
435
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
436
+ }
380
437
  },
381
438
  {
382
439
  "key": "anthropic/claude-sonnet-5",
@@ -546,7 +603,21 @@
546
603
  "top_k",
547
604
  "thinking.type.enabled"
548
605
  ],
549
- "status": "candidate"
606
+ "status": "candidate",
607
+ "assistantPrefill": {
608
+ "value": false,
609
+ "source": "official-doc",
610
+ "confidence": "declared",
611
+ "observedAt": "2026-09-26T00:00:00Z",
612
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
613
+ },
614
+ "undeclaredToolCalls": {
615
+ "value": true,
616
+ "source": "live-probe",
617
+ "sourceRef": "scripts/probe-fork-undeclared-tool.ts (WS-24), run live 2026-09-26: A -- a call to a tool absent from `tools` and its result in the history -> 200; B -- a ToolSearch result carrying the definition as text -> the model called the undeclared tool; C -- that call and its result fed back -> 200",
618
+ "confidence": "verified",
619
+ "observedAt": "2026-09-26T00:00:00Z"
620
+ }
550
621
  },
551
622
  {
552
623
  "key": "anthropic/claude-fable-5",
@@ -672,7 +743,46 @@
672
743
  "thinking.type.enabled",
673
744
  "thinking.type.disabled"
674
745
  ],
675
- "status": "candidate"
746
+ "status": "candidate",
747
+ "deferredToolLoading": {
748
+ "value": true,
749
+ "source": "official-doc",
750
+ "confidence": "declared",
751
+ "observedAt": "2026-09-25T18:30:00Z",
752
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
753
+ },
754
+ "midConversationSystem": {
755
+ "value": true,
756
+ "source": "official-doc",
757
+ "confidence": "declared",
758
+ "observedAt": "2026-09-25T19:00:00Z",
759
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — \"This feature is available on Claude Fable 5.1, Claude Mythos 5.1, Claude Fable 5, Claude Mythos 5, Claude Opus 5.5, Claude Opus 4.8, and Claude Opus 5. No beta header is required for mid-conversation system messages. This feature is not available on Claude Sonnet 5.\""
760
+ },
761
+ "midConversationToolChanges": {
762
+ "value": {
763
+ "beta": "mid-conversation-tool-changes-2026-07-01"
764
+ },
765
+ "source": "official-doc",
766
+ "confidence": "declared",
767
+ "observedAt": "2026-09-26T00:00:00Z",
768
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition / tool_removal blocks in a role:\"system\" message, by reference (\"Add/remove by reference: mid-conversation-tool-changes-2026-07-01 — Claude API, Amazon Bedrock, Google Cloud\"); available on Claude Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 4.8 and Opus 5, \"Not available on Claude Sonnet 5\". Retrieved 2026-09-26; release note 2026-07-24 (https://platform.claude.com/docs/en/release-notes/overview)."
769
+ },
770
+ "inlineToolDefinitions": {
771
+ "value": {
772
+ "beta": "inline-tools-2026-09-15"
773
+ },
774
+ "source": "official-doc",
775
+ "confidence": "declared",
776
+ "observedAt": "2026-09-26T00:00:00Z",
777
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition with a tool_definition (\"Add/remove by reference + define by value: inline-tools-2026-09-15 — Claude API\"); \"The inline-tools-2026-09-15 header covers all reference-based changes\"; redefinition: \"send a different definition under the same name ... The new definition replaces the earlier one from that position onward\" (no removal first, a tool declared in tools included); a definition reusing the name of a different type of tool is a 400 tool_name_conflict. Same model list as midConversationToolChanges. Claude API only, so set on the anthropic and console providers (both api.anthropic.com), never on a cloud reseller. Retrieved 2026-09-26; release note 2026-09-22."
778
+ },
779
+ "assistantPrefill": {
780
+ "value": false,
781
+ "source": "official-doc",
782
+ "confidence": "declared",
783
+ "observedAt": "2026-09-26T00:00:00Z",
784
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
785
+ }
676
786
  },
677
787
  {
678
788
  "key": "anthropic/claude-haiku-4.5",
@@ -769,7 +879,14 @@
769
879
  "unsupportedParameters": [
770
880
  "thinking.type.adaptive"
771
881
  ],
772
- "status": "candidate"
882
+ "status": "candidate",
883
+ "deferredToolLoading": {
884
+ "value": true,
885
+ "source": "official-doc",
886
+ "confidence": "declared",
887
+ "observedAt": "2026-09-25T18:30:00Z",
888
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
889
+ }
773
890
  },
774
891
  {
775
892
  "key": "anthropic/claude-opus-4.5",
@@ -892,15 +1009,24 @@
892
1009
  "unsupportedParameters": [
893
1010
  "thinking.type.adaptive"
894
1011
  ],
895
- "status": "candidate"
1012
+ "status": "candidate",
1013
+ "deferredToolLoading": {
1014
+ "value": true,
1015
+ "source": "official-doc",
1016
+ "confidence": "declared",
1017
+ "observedAt": "2026-09-25T18:30:00Z",
1018
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
1019
+ }
896
1020
  },
897
1021
  {
898
1022
  "key": "anthropic/claude-opus-4.6",
899
1023
  "providerId": "anthropic",
900
1024
  "upstreamId": "claude-opus-4.6",
901
1025
  "displayName": "Claude Opus 4.6",
902
- "aliases": [],
903
- "$comment": "Fix wave (scoped re-review, item 3, 2026-09-17): this row is added to the overlay SOLELY to carry `promptCaching` -- I3 tightened provider-runtime's `promptCachingLayout` (packages/provider-runtime/src/adapters/anthropic/messages.ts) to require an explicit per-row `promptCaching.value === true`, and this key had none: it was pure upstream extraction, which cannot see a capability upstream's own registry never states. Every OTHER field below is that SAME upstream extraction, copied verbatim (identical source/sourceRef/confidence/observedAt to what open-sse/config/providers/registry/anthropic/index.ts#claude-opus-4.6 already produced) -- nothing here re-verifies context window, modalities or tool calling, and because mergeLayers merges at the ROW level (its own header: \"the overlay wins intentionally; a re-sync MUST NEVER overwrite it\"), a future upstream re-sync will no longer refresh ANY field of this key, not just `promptCaching`. `promptCaching` itself is `official-doc`/`declared`, reusing `anthropic/claude-fable-5-1`'s own already-admitted citation under its own precedent for this class of fact ('...Messages API mechanics... architectural facts of the wire protocol, shared by every current Claude model...'): prompt caching (`cache_control` marking on a Messages API request) is exactly such a wire-level mechanic, not a per-model measurement, so the SAME citation applies without a fresh per-row pricing-page confirmation like the sibling rows (haiku-4-5-20251001/opus-5/sonnet-5/fable-5-1) each cite for themselves. — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-4-6/overview — actual Claude API wire model ID claude-opus-4-6 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; enabled/budget_tokens remains accepted but deprecated; disabled turns off. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor February 5, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. ",
1026
+ "aliases": [
1027
+ "claude-opus-4-6"
1028
+ ],
1029
+ "$comment": "Fix wave (scoped re-review, item 3, 2026-09-17): this row is added to the overlay SOLELY to carry `promptCaching` -- I3 tightened provider-runtime's `promptCachingLayout` (packages/provider-runtime/src/adapters/anthropic/messages.ts) to require an explicit per-row `promptCaching.value === true`, and this key had none: it was pure upstream extraction, which cannot see a capability upstream's own registry never states. Every OTHER field below is that SAME upstream extraction, copied verbatim (identical source/sourceRef/confidence/observedAt to what open-sse/config/providers/registry/anthropic/index.ts#claude-opus-4.6 already produced) -- nothing here re-verifies context window, modalities or tool calling, and because mergeLayers merges at the ROW level (its own header: \"the overlay wins intentionally; a re-sync MUST NEVER overwrite it\"), a future upstream re-sync will no longer refresh ANY field of this key, not just `promptCaching`. `promptCaching` itself is `official-doc`/`declared`, reusing `anthropic/claude-fable-5-1`'s own already-admitted citation under its own precedent for this class of fact ('...Messages API mechanics... architectural facts of the wire protocol, shared by every current Claude model...'): prompt caching (`cache_control` marking on a Messages API request) is exactly such a wire-level mechanic, not a per-model measurement, so the SAME citation applies without a fresh per-row pricing-page confirmation like the sibling rows (haiku-4-5-20251001/opus-5/sonnet-5/fable-5-1) each cite for themselves. — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-4-6/overview — actual Claude API wire model ID claude-opus-4-6 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; enabled/budget_tokens remains accepted but deprecated; disabled turns off. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor February 5, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. WS-23 (2026-09-25): alias `claude-opus-4-6` is the vendor's own API id for this model (its model overview page); a transcript the claude binary wrote records that dashed id, and without the alias it resolved to no row, so an old session's thinking was stripped into `<recovered_reasoning>` text on resume. The key and upstream id stay dotted (a stored-tag migration is out of scope); the adapter already sends the dashed id on the wire. ",
904
1030
  "endpoints": [
905
1031
  "chat"
906
1032
  ],
@@ -1011,15 +1137,31 @@
1011
1137
  "observedAt": "2026-09-19T00:00:00Z"
1012
1138
  },
1013
1139
  "unsupportedParameters": [],
1014
- "status": "candidate"
1140
+ "status": "candidate",
1141
+ "deferredToolLoading": {
1142
+ "value": true,
1143
+ "source": "official-doc",
1144
+ "confidence": "declared",
1145
+ "observedAt": "2026-09-25T18:30:00Z",
1146
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
1147
+ },
1148
+ "assistantPrefill": {
1149
+ "value": false,
1150
+ "source": "official-doc",
1151
+ "confidence": "declared",
1152
+ "observedAt": "2026-09-26T00:00:00Z",
1153
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
1154
+ }
1015
1155
  },
1016
1156
  {
1017
1157
  "key": "anthropic/claude-opus-4.7",
1018
1158
  "providerId": "anthropic",
1019
1159
  "upstreamId": "claude-opus-4.7",
1020
1160
  "displayName": "Claude Opus 4.7",
1021
- "aliases": [],
1022
- "$comment": "Fix wave (scoped re-review, item 3, 2026-09-17): this row is added to the overlay SOLELY to carry `promptCaching` -- I3 tightened provider-runtime's `promptCachingLayout` (packages/provider-runtime/src/adapters/anthropic/messages.ts) to require an explicit per-row `promptCaching.value === true`, and this key had none: it was pure upstream extraction, which cannot see a capability upstream's own registry never states. Every OTHER field below is that SAME upstream extraction, copied verbatim (identical source/sourceRef/confidence/observedAt to what open-sse/config/providers/registry/anthropic/index.ts#claude-opus-4.7 already produced) -- nothing here re-verifies context window, modalities or tool calling, and because mergeLayers merges at the ROW level (its own header: \"the overlay wins intentionally; a re-sync MUST NEVER overwrite it\"), a future upstream re-sync will no longer refresh ANY field of this key, not just `promptCaching`. `promptCaching` itself is `official-doc`/`declared`, reusing `anthropic/claude-fable-5-1`'s own already-admitted citation under its own precedent for this class of fact ('...Messages API mechanics... architectural facts of the wire protocol, shared by every current Claude model...'): prompt caching (`cache_control` marking on a Messages API request) is exactly such a wire-level mechanic, not a per-model measurement, so the SAME citation applies without a fresh per-row pricing-page confirmation like the sibling rows (haiku-4-5-20251001/opus-5/sonnet-5/fable-5-1) each cite for themselves. — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-4-7/overview — actual Claude API wire model ID claude-opus-4-7 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, xhigh, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; can set thinking.type adaptive or disabled. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor April 16, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. ",
1161
+ "aliases": [
1162
+ "claude-opus-4-7"
1163
+ ],
1164
+ "$comment": "Fix wave (scoped re-review, item 3, 2026-09-17): this row is added to the overlay SOLELY to carry `promptCaching` -- I3 tightened provider-runtime's `promptCachingLayout` (packages/provider-runtime/src/adapters/anthropic/messages.ts) to require an explicit per-row `promptCaching.value === true`, and this key had none: it was pure upstream extraction, which cannot see a capability upstream's own registry never states. Every OTHER field below is that SAME upstream extraction, copied verbatim (identical source/sourceRef/confidence/observedAt to what open-sse/config/providers/registry/anthropic/index.ts#claude-opus-4.7 already produced) -- nothing here re-verifies context window, modalities or tool calling, and because mergeLayers merges at the ROW level (its own header: \"the overlay wins intentionally; a re-sync MUST NEVER overwrite it\"), a future upstream re-sync will no longer refresh ANY field of this key, not just `promptCaching`. `promptCaching` itself is `official-doc`/`declared`, reusing `anthropic/claude-fable-5-1`'s own already-admitted citation under its own precedent for this class of fact ('...Messages API mechanics... architectural facts of the wire protocol, shared by every current Claude model...'): prompt caching (`cache_control` marking on a Messages API request) is exactly such a wire-level mechanic, not a per-model measurement, so the SAME citation applies without a fresh per-row pricing-page confirmation like the sibling rows (haiku-4-5-20251001/opus-5/sonnet-5/fable-5-1) each cite for themselves. — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-4-7/overview — actual Claude API wire model ID claude-opus-4-7 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, xhigh, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; can set thinking.type adaptive or disabled. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor April 16, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. WS-23 (2026-09-25): alias `claude-opus-4-7` is the vendor's own API id for this model (its model overview page); a transcript the claude binary wrote records that dashed id, and without the alias it resolved to no row, so an old session's thinking was stripped into `<recovered_reasoning>` text on resume. The key and upstream id stay dotted (a stored-tag migration is out of scope); the adapter already sends the dashed id on the wire. ",
1023
1165
  "endpoints": [
1024
1166
  "chat"
1025
1167
  ],
@@ -1136,15 +1278,31 @@
1136
1278
  "top_k",
1137
1279
  "thinking.type.enabled"
1138
1280
  ],
1139
- "status": "candidate"
1281
+ "status": "candidate",
1282
+ "deferredToolLoading": {
1283
+ "value": true,
1284
+ "source": "official-doc",
1285
+ "confidence": "declared",
1286
+ "observedAt": "2026-09-25T18:30:00Z",
1287
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
1288
+ },
1289
+ "assistantPrefill": {
1290
+ "value": false,
1291
+ "source": "official-doc",
1292
+ "confidence": "declared",
1293
+ "observedAt": "2026-09-26T00:00:00Z",
1294
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
1295
+ }
1140
1296
  },
1141
1297
  {
1142
1298
  "key": "anthropic/claude-opus-4.8",
1143
1299
  "providerId": "anthropic",
1144
1300
  "upstreamId": "claude-opus-4.8",
1145
1301
  "displayName": "Claude Opus 4.8",
1146
- "aliases": [],
1147
- "$comment": "Fix wave (scoped re-review, item 3, 2026-09-17): this row is added to the overlay SOLELY to carry `promptCaching` -- I3 tightened provider-runtime's `promptCachingLayout` (packages/provider-runtime/src/adapters/anthropic/messages.ts) to require an explicit per-row `promptCaching.value === true`, and this key had none: it was pure upstream extraction, which cannot see a capability upstream's own registry never states. Every OTHER field below is that SAME upstream extraction, copied verbatim (identical source/sourceRef/confidence/observedAt to what open-sse/config/providers/registry/anthropic/index.ts#claude-opus-4.8 already produced) -- nothing here re-verifies context window, modalities or tool calling, and because mergeLayers merges at the ROW level (its own header: \"the overlay wins intentionally; a re-sync MUST NEVER overwrite it\"), a future upstream re-sync will no longer refresh ANY field of this key, not just `promptCaching`. `promptCaching` itself is `official-doc`/`declared`, reusing `anthropic/claude-fable-5-1`'s own already-admitted citation under its own precedent for this class of fact ('...Messages API mechanics... architectural facts of the wire protocol, shared by every current Claude model...'): prompt caching (`cache_control` marking on a Messages API request) is exactly such a wire-level mechanic, not a per-model measurement, so the SAME citation applies without a fresh per-row pricing-page confirmation like the sibling rows (haiku-4-5-20251001/opus-5/sonnet-5/fable-5-1) each cite for themselves. — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-4-8/overview — actual Claude API wire model ID claude-opus-4-8 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, xhigh, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; can set thinking.type adaptive or disabled. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor May 28, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. ",
1302
+ "aliases": [
1303
+ "claude-opus-4-8"
1304
+ ],
1305
+ "$comment": "Fix wave (scoped re-review, item 3, 2026-09-17): this row is added to the overlay SOLELY to carry `promptCaching` -- I3 tightened provider-runtime's `promptCachingLayout` (packages/provider-runtime/src/adapters/anthropic/messages.ts) to require an explicit per-row `promptCaching.value === true`, and this key had none: it was pure upstream extraction, which cannot see a capability upstream's own registry never states. Every OTHER field below is that SAME upstream extraction, copied verbatim (identical source/sourceRef/confidence/observedAt to what open-sse/config/providers/registry/anthropic/index.ts#claude-opus-4.8 already produced) -- nothing here re-verifies context window, modalities or tool calling, and because mergeLayers merges at the ROW level (its own header: \"the overlay wins intentionally; a re-sync MUST NEVER overwrite it\"), a future upstream re-sync will no longer refresh ANY field of this key, not just `promptCaching`. `promptCaching` itself is `official-doc`/`declared`, reusing `anthropic/claude-fable-5-1`'s own already-admitted citation under its own precedent for this class of fact ('...Messages API mechanics... architectural facts of the wire protocol, shared by every current Claude model...'): prompt caching (`cache_control` marking on a Messages API request) is exactly such a wire-level mechanic, not a per-model measurement, so the SAME citation applies without a fresh per-row pricing-page confirmation like the sibling rows (haiku-4-5-20251001/opus-5/sonnet-5/fable-5-1) each cite for themselves. — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-4-8/overview — actual Claude API wire model ID claude-opus-4-8 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, xhigh, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; can set thinking.type adaptive or disabled. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor May 28, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. WS-23 (2026-09-25): alias `claude-opus-4-8` is the vendor's own API id for this model (its model overview page); a transcript the claude binary wrote records that dashed id, and without the alias it resolved to no row, so an old session's thinking was stripped into `<recovered_reasoning>` text on resume. The key and upstream id stay dotted (a stored-tag migration is out of scope); the adapter already sends the dashed id on the wire. ",
1148
1306
  "endpoints": [
1149
1307
  "chat"
1150
1308
  ],
@@ -1261,7 +1419,46 @@
1261
1419
  "top_k",
1262
1420
  "thinking.type.enabled"
1263
1421
  ],
1264
- "status": "candidate"
1422
+ "status": "candidate",
1423
+ "deferredToolLoading": {
1424
+ "value": true,
1425
+ "source": "official-doc",
1426
+ "confidence": "declared",
1427
+ "observedAt": "2026-09-25T18:30:00Z",
1428
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
1429
+ },
1430
+ "midConversationSystem": {
1431
+ "value": true,
1432
+ "source": "official-doc",
1433
+ "confidence": "declared",
1434
+ "observedAt": "2026-09-25T19:00:00Z",
1435
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — \"This feature is available on Claude Fable 5.1, Claude Mythos 5.1, Claude Fable 5, Claude Mythos 5, Claude Opus 5.5, Claude Opus 4.8, and Claude Opus 5. No beta header is required for mid-conversation system messages. This feature is not available on Claude Sonnet 5.\""
1436
+ },
1437
+ "midConversationToolChanges": {
1438
+ "value": {
1439
+ "beta": "mid-conversation-tool-changes-2026-07-01"
1440
+ },
1441
+ "source": "official-doc",
1442
+ "confidence": "declared",
1443
+ "observedAt": "2026-09-26T00:00:00Z",
1444
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition / tool_removal blocks in a role:\"system\" message, by reference (\"Add/remove by reference: mid-conversation-tool-changes-2026-07-01 — Claude API, Amazon Bedrock, Google Cloud\"); available on Claude Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 4.8 and Opus 5, \"Not available on Claude Sonnet 5\". Retrieved 2026-09-26; release note 2026-07-24 (https://platform.claude.com/docs/en/release-notes/overview)."
1445
+ },
1446
+ "inlineToolDefinitions": {
1447
+ "value": {
1448
+ "beta": "inline-tools-2026-09-15"
1449
+ },
1450
+ "source": "official-doc",
1451
+ "confidence": "declared",
1452
+ "observedAt": "2026-09-26T00:00:00Z",
1453
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition with a tool_definition (\"Add/remove by reference + define by value: inline-tools-2026-09-15 — Claude API\"); \"The inline-tools-2026-09-15 header covers all reference-based changes\"; redefinition: \"send a different definition under the same name ... The new definition replaces the earlier one from that position onward\" (no removal first, a tool declared in tools included); a definition reusing the name of a different type of tool is a 400 tool_name_conflict. Same model list as midConversationToolChanges. Claude API only, so set on the anthropic and console providers (both api.anthropic.com), never on a cloud reseller. Retrieved 2026-09-26; release note 2026-09-22."
1454
+ },
1455
+ "assistantPrefill": {
1456
+ "value": false,
1457
+ "source": "official-doc",
1458
+ "confidence": "declared",
1459
+ "observedAt": "2026-09-26T00:00:00Z",
1460
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
1461
+ }
1265
1462
  },
1266
1463
  {
1267
1464
  "key": "anthropic/claude-sonnet-4.5",
@@ -1375,15 +1572,24 @@
1375
1572
  "unsupportedParameters": [
1376
1573
  "thinking.type.adaptive"
1377
1574
  ],
1378
- "status": "candidate"
1575
+ "status": "candidate",
1576
+ "deferredToolLoading": {
1577
+ "value": true,
1578
+ "source": "official-doc",
1579
+ "confidence": "declared",
1580
+ "observedAt": "2026-09-25T18:30:00Z",
1581
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
1582
+ }
1379
1583
  },
1380
1584
  {
1381
1585
  "key": "anthropic/claude-sonnet-4.6",
1382
1586
  "providerId": "anthropic",
1383
1587
  "upstreamId": "claude-sonnet-4.6",
1384
1588
  "displayName": "Claude Sonnet 4.6",
1385
- "aliases": [],
1386
- "$comment": "Fix wave (scoped re-review, item 3, 2026-09-17): this row is added to the overlay SOLELY to carry `promptCaching` -- I3 tightened provider-runtime's `promptCachingLayout` (packages/provider-runtime/src/adapters/anthropic/messages.ts) to require an explicit per-row `promptCaching.value === true`, and this key had none: it was pure upstream extraction, which cannot see a capability upstream's own registry never states. Every OTHER field below is that SAME upstream extraction, copied verbatim (identical source/sourceRef/confidence/observedAt to what open-sse/config/providers/registry/anthropic/index.ts#claude-sonnet-4.6 already produced) -- nothing here re-verifies context window, modalities or tool calling, and because mergeLayers merges at the ROW level (its own header: \"the overlay wins intentionally; a re-sync MUST NEVER overwrite it\"), a future upstream re-sync will no longer refresh ANY field of this key, not just `promptCaching`. `promptCaching` itself is `official-doc`/`declared`, reusing `anthropic/claude-fable-5-1`'s own already-admitted citation under its own precedent for this class of fact ('...Messages API mechanics... architectural facts of the wire protocol, shared by every current Claude model...'): prompt caching (`cache_control` marking on a Messages API request) is exactly such a wire-level mechanic, not a per-model measurement, so the SAME citation applies without a fresh per-row pricing-page confirmation like the sibling rows (haiku-4-5-20251001/opus-5/sonnet-5/fable-5-1) each cite for themselves. — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/sonnet-4-6/overview — actual Claude API wire model ID claude-sonnet-4-6 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; enabled/budget_tokens remains accepted but deprecated; disabled turns off. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor February 17, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. ",
1589
+ "aliases": [
1590
+ "claude-sonnet-4-6"
1591
+ ],
1592
+ "$comment": "Fix wave (scoped re-review, item 3, 2026-09-17): this row is added to the overlay SOLELY to carry `promptCaching` -- I3 tightened provider-runtime's `promptCachingLayout` (packages/provider-runtime/src/adapters/anthropic/messages.ts) to require an explicit per-row `promptCaching.value === true`, and this key had none: it was pure upstream extraction, which cannot see a capability upstream's own registry never states. Every OTHER field below is that SAME upstream extraction, copied verbatim (identical source/sourceRef/confidence/observedAt to what open-sse/config/providers/registry/anthropic/index.ts#claude-sonnet-4.6 already produced) -- nothing here re-verifies context window, modalities or tool calling, and because mergeLayers merges at the ROW level (its own header: \"the overlay wins intentionally; a re-sync MUST NEVER overwrite it\"), a future upstream re-sync will no longer refresh ANY field of this key, not just `promptCaching`. `promptCaching` itself is `official-doc`/`declared`, reusing `anthropic/claude-fable-5-1`'s own already-admitted citation under its own precedent for this class of fact ('...Messages API mechanics... architectural facts of the wire protocol, shared by every current Claude model...'): prompt caching (`cache_control` marking on a Messages API request) is exactly such a wire-level mechanic, not a per-model measurement, so the SAME citation applies without a fresh per-row pricing-page confirmation like the sibling rows (haiku-4-5-20251001/opus-5/sonnet-5/fable-5-1) each cite for themselves. — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/sonnet-4-6/overview — actual Claude API wire model ID claude-sonnet-4-6 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; enabled/budget_tokens remains accepted but deprecated; disabled turns off. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor February 17, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. WS-23 (2026-09-25): alias `claude-sonnet-4-6` is the vendor's own API id for this model (its model overview page); a transcript the claude binary wrote records that dashed id, and without the alias it resolved to no row, so an old session's thinking was stripped into `<recovered_reasoning>` text on resume. The key and upstream id stay dotted (a stored-tag migration is out of scope); the adapter already sends the dashed id on the wire. ",
1387
1593
  "endpoints": [
1388
1594
  "chat"
1389
1595
  ],
@@ -1494,7 +1700,14 @@
1494
1700
  "observedAt": "2026-09-19T00:00:00Z"
1495
1701
  },
1496
1702
  "unsupportedParameters": [],
1497
- "status": "candidate"
1703
+ "status": "candidate",
1704
+ "deferredToolLoading": {
1705
+ "value": true,
1706
+ "source": "official-doc",
1707
+ "confidence": "declared",
1708
+ "observedAt": "2026-09-25T18:30:00Z",
1709
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
1710
+ }
1498
1711
  },
1499
1712
  {
1500
1713
  "key": "arcee-ai/trinity-large-thinking",
@@ -2005,7 +2218,21 @@
2005
2218
  }
2006
2219
  },
2007
2220
  "unsupportedParameters": [],
2008
- "status": "candidate"
2221
+ "status": "candidate",
2222
+ "promptCacheKey": {
2223
+ "value": true,
2224
+ "source": "official-doc",
2225
+ "confidence": "declared",
2226
+ "observedAt": "2026-09-25T19:30:00Z",
2227
+ "sourceRef": "https://github.com/openai/codex/blob/main/codex-rs/core/src/client.rs — Codex (the vendor's own client for this backend) sets prompt_cache_key on every Responses request, to the session id (or source:parent_thread_id for internal sessions); https://developers.openai.com/api/docs/guides/prompt-caching documents the field."
2228
+ },
2229
+ "clientToolSearch": {
2230
+ "value": true,
2231
+ "source": "upstream-static",
2232
+ "confidence": "declared",
2233
+ "observedAt": "2026-09-26T00:00:00Z",
2234
+ "sourceRef": "codex-rs models-manager/models.json (cloned 25270df, 2026-09-26): supports_search_tool is true on every bundled model; core/src/tools/spec_plan.rs:653-666 turns on the client tool_search (tools/src/tool_search.rs:84-110, core/src/tools/handlers/tool_search_spec.rs:98) when the provider's namespace capability is on (default true) -- the vendor's own client sends it to chatgpt.com/backend-api/codex."
2235
+ }
2009
2236
  },
2010
2237
  {
2011
2238
  "key": "codex-oauth/gpt-5.6-terra",
@@ -2111,7 +2338,21 @@
2111
2338
  }
2112
2339
  },
2113
2340
  "unsupportedParameters": [],
2114
- "status": "candidate"
2341
+ "status": "candidate",
2342
+ "promptCacheKey": {
2343
+ "value": true,
2344
+ "source": "official-doc",
2345
+ "confidence": "declared",
2346
+ "observedAt": "2026-09-25T19:30:00Z",
2347
+ "sourceRef": "https://github.com/openai/codex/blob/main/codex-rs/core/src/client.rs — Codex (the vendor's own client for this backend) sets prompt_cache_key on every Responses request, to the session id (or source:parent_thread_id for internal sessions); https://developers.openai.com/api/docs/guides/prompt-caching documents the field."
2348
+ },
2349
+ "clientToolSearch": {
2350
+ "value": true,
2351
+ "source": "upstream-static",
2352
+ "confidence": "declared",
2353
+ "observedAt": "2026-09-26T00:00:00Z",
2354
+ "sourceRef": "codex-rs models-manager/models.json (cloned 25270df, 2026-09-26): supports_search_tool is true on every bundled model; core/src/tools/spec_plan.rs:653-666 turns on the client tool_search (tools/src/tool_search.rs:84-110, core/src/tools/handlers/tool_search_spec.rs:98) when the provider's namespace capability is on (default true) -- the vendor's own client sends it to chatgpt.com/backend-api/codex."
2355
+ }
2115
2356
  },
2116
2357
  {
2117
2358
  "key": "codex-oauth/gpt-5.6-luna",
@@ -2217,7 +2458,21 @@
2217
2458
  }
2218
2459
  },
2219
2460
  "unsupportedParameters": [],
2220
- "status": "candidate"
2461
+ "status": "candidate",
2462
+ "promptCacheKey": {
2463
+ "value": true,
2464
+ "source": "official-doc",
2465
+ "confidence": "declared",
2466
+ "observedAt": "2026-09-25T19:30:00Z",
2467
+ "sourceRef": "https://github.com/openai/codex/blob/main/codex-rs/core/src/client.rs — Codex (the vendor's own client for this backend) sets prompt_cache_key on every Responses request, to the session id (or source:parent_thread_id for internal sessions); https://developers.openai.com/api/docs/guides/prompt-caching documents the field."
2468
+ },
2469
+ "clientToolSearch": {
2470
+ "value": true,
2471
+ "source": "upstream-static",
2472
+ "confidence": "declared",
2473
+ "observedAt": "2026-09-26T00:00:00Z",
2474
+ "sourceRef": "codex-rs models-manager/models.json (cloned 25270df, 2026-09-26): supports_search_tool is true on every bundled model; core/src/tools/spec_plan.rs:653-666 turns on the client tool_search (tools/src/tool_search.rs:84-110, core/src/tools/handlers/tool_search_spec.rs:98) when the provider's namespace capability is on (default true) -- the vendor's own client sends it to chatgpt.com/backend-api/codex."
2475
+ }
2221
2476
  },
2222
2477
  {
2223
2478
  "key": "deepseek-anthropic/deepseek-flash",
@@ -2559,7 +2814,14 @@
2559
2814
  "observedAt": "2026-09-19T00:00:00Z"
2560
2815
  },
2561
2816
  "unsupportedParameters": [],
2562
- "status": "candidate"
2817
+ "status": "candidate",
2818
+ "undeclaredToolCalls": {
2819
+ "value": true,
2820
+ "source": "live-probe",
2821
+ "sourceRef": "scripts/probe-fork-undeclared-tool.ts (WS-24), run live 2026-09-26: A -- a call to a tool absent from `tools` and its result in the history -> 200; B -- a ToolSearch result carrying the definition as text -> the model called the undeclared tool; C -- that call and its result fed back -> 200",
2822
+ "confidence": "verified",
2823
+ "observedAt": "2026-09-26T00:00:00Z"
2824
+ }
2563
2825
  },
2564
2826
  {
2565
2827
  "key": "deepseek/deepseek-v4-pro",
@@ -4169,7 +4431,14 @@
4169
4431
  "observedAt": "2026-09-05T00:00:00Z"
4170
4432
  },
4171
4433
  "unsupportedParameters": [],
4172
- "status": "candidate"
4434
+ "status": "candidate",
4435
+ "promptCacheKey": {
4436
+ "value": true,
4437
+ "source": "official-doc",
4438
+ "confidence": "declared",
4439
+ "observedAt": "2026-09-25T19:30:00Z",
4440
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
4441
+ }
4173
4442
  },
4174
4443
  {
4175
4444
  "key": "openai/o4-mini",
@@ -4315,7 +4584,14 @@
4315
4584
  "observedAt": "2026-09-05T00:00:00Z"
4316
4585
  },
4317
4586
  "unsupportedParameters": [],
4318
- "status": "candidate"
4587
+ "status": "candidate",
4588
+ "promptCacheKey": {
4589
+ "value": true,
4590
+ "source": "official-doc",
4591
+ "confidence": "declared",
4592
+ "observedAt": "2026-09-25T19:30:00Z",
4593
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
4594
+ }
4319
4595
  },
4320
4596
  {
4321
4597
  "key": "opencode/big-pickle",
@@ -5041,9 +5317,10 @@
5041
5317
  "grok-4.20-beta-0309-non-reasoning",
5042
5318
  "grok-4.20-non-reasoning-gv2"
5043
5319
  ],
5044
- "$comment": "Read from the pinned entry's own accepted literals — only the provider's `executor` is unrepresentable. The two `targetFormat: \"openai-responses\"` siblings are omitted rather than reshaped; see the provider row's comment. — 2026-09-25 refresh: Model and aliases documented at https://docs.x.ai/developers/models/grok-4.20-non-reasoning. The catalog's xai provider currently declares Chat Completions; xAI also offers Responses. No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. Its templated detail page displays a generic Reasoning capability, conflicting with the explicit non-reasoning model name; reasoning block omitted pending probe. — The vendor also serves this model on its OpenAI Responses endpoint (same host and key); `endpoints` lists only what this row's Chat Completions adapter routes, so `responses` is omitted until adapter-level Responses support lands (tracked follow-up, 2026-09-25).",
5320
+ "$comment": "Read from the pinned entry's own accepted literals — only the provider's `executor` is unrepresentable. Upstream's two `targetFormat: \"openai-responses\"` siblings are now representable (WS-23): `grok-4.6` is its own overlay row and `grok-4.20-multi-agent-0309` is a Responses-only row; see the provider row's comment. — 2026-09-25 refresh: Model and aliases documented at https://docs.x.ai/developers/models/grok-4.20-non-reasoning. The catalog's xai provider declared Chat Completions until WS-23 and now speaks Responses (same host and key). No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. Its templated detail page displays a generic Reasoning capability, conflicting with the explicit non-reasoning model name; reasoning block omitted pending probe. — WS-23 (2026-09-25): the `xai` provider now routes through `winter.openai-responses`, so `endpoints` lists both surfaces the family routes (the `openai/*` convention) rather than only Chat Completions.",
5045
5321
  "endpoints": [
5046
- "chat"
5322
+ "chat",
5323
+ "responses"
5047
5324
  ],
5048
5325
  "contextWindow": {
5049
5326
  "value": 1000000,
@@ -5135,9 +5412,10 @@
5135
5412
  "grok-4.20-experimental-beta-latest",
5136
5413
  "grok-4.20-reasoning-gv2"
5137
5414
  ],
5138
- "$comment": "Read from the pinned entry's own accepted literals — only the provider's `executor` is unrepresentable. The two `targetFormat: \"openai-responses\"` siblings are omitted rather than reshaped; see the provider row's comment. — 2026-09-25 refresh: Model and aliases documented at https://docs.x.ai/developers/models/grok-4.20. The catalog's xai provider currently declares Chat Completions; xAI also offers Responses. No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. Model page does not document an effort vocabulary for this exact model, so efforts is empty. — The vendor also serves this model on its OpenAI Responses endpoint (same host and key); `endpoints` lists only what this row's Chat Completions adapter routes, so `responses` is omitted until adapter-level Responses support lands (tracked follow-up, 2026-09-25).",
5415
+ "$comment": "Read from the pinned entry's own accepted literals — only the provider's `executor` is unrepresentable. Upstream's two `targetFormat: \"openai-responses\"` siblings are now representable (WS-23): `grok-4.6` is its own overlay row and `grok-4.20-multi-agent-0309` is a Responses-only row; see the provider row's comment. — 2026-09-25 refresh: Model and aliases documented at https://docs.x.ai/developers/models/grok-4.20. The catalog's xai provider declared Chat Completions until WS-23 and now speaks Responses (same host and key). No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. — WS-23 (2026-09-25): the `xai` provider now routes through `winter.openai-responses`, so `endpoints` lists both surfaces the family routes (the `openai/*` convention) rather than only Chat Completions. Continuation (WS-23): `opaque-provider-state` — on Responses the reasoning item carries `encrypted_content` when `include: [\"reasoning.encrypted_content\"]` is sent and is replayed unchanged in the next `input` (https://docs.x.ai/developers/model-capabilities/text/reasoning, \"Encrypted Reasoning Content\"). Effort (WS-23 fix of the \"supported, no efforts, continuation none\" incoherence): the model page says \"Reasoning: Yes\", but https://docs.x.ai/developers/model-capabilities/text/reasoning names `reasoning_effort` only for `grok-4.7`, `grok-4.6`, `grok-4.5` (and the multi-agent model's agent count), so this model reasons with NO documented effort knob and `efforts` stays empty — an effort or `thinking` request is refused before the request rather than guessed. What was incoherent was `continuation: \"none\"`, now `opaque-provider-state` per the note above. Since WS-23 fix round 1 the adapter asks for `include` on EVERY turn of an opaque-continuation row, effort or not, so the item is requested here although no effort can be named. LIVE-GATE ITEM: that xAI returns it for this model (WS-23 probe step 5b/5c); if it does not, `continuation` goes back to `none`.",
5139
5416
  "endpoints": [
5140
- "chat"
5417
+ "chat",
5418
+ "responses"
5141
5419
  ],
5142
5420
  "contextWindow": {
5143
5421
  "value": 1000000,
@@ -5202,7 +5480,7 @@
5202
5480
  "observedAt": "2026-09-25T08:40:00Z"
5203
5481
  },
5204
5482
  "efforts": [],
5205
- "continuation": "none"
5483
+ "continuation": "opaque-provider-state"
5206
5484
  },
5207
5485
  "pricing": {
5208
5486
  "value": {
@@ -5218,6 +5496,110 @@
5218
5496
  "unsupportedParameters": [],
5219
5497
  "status": "candidate"
5220
5498
  },
5499
+ {
5500
+ "key": "xai/grok-4.20-multi-agent-0309",
5501
+ "providerId": "xai",
5502
+ "upstreamId": "grok-4.20-multi-agent-0309",
5503
+ "displayName": "Grok 4.20 Multi-Agent Beta",
5504
+ "aliases": [
5505
+ "grok-4.20-multi-agent",
5506
+ "grok-4.20-multi-agent-latest",
5507
+ "grok-4.20-multi-agent-beta-latest",
5508
+ "grok-4.20-multi-agent-experimental-beta-0304",
5509
+ "grok-4.20-multi-agent-experimental-beta-latest",
5510
+ "grok-4.20-multi-agent-beta-0309"
5511
+ ],
5512
+ "$comment": "WS-23 (2026-09-25), authored from the catalog-owning session's refresh row with its `notes` folded in here. Model page: https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — \"Model name: `grok-4.20-multi-agent-0309`\" with `grok-4.20-multi-agent` as its first alias, which is the spelling the multi-agent guide tells callers to use (https://docs.x.ai/developers/model-capabilities/text/multi-agent). The dated model name is the wire id and the undated spelling resolves through `aliases`. RESPONSES-ONLY: \"The multi-agent model does **not** work with the OpenAI Chat Completions API\" (guide, Limitations), so `endpoints` is `[\"responses\"]` and the row is legal only because the `xai` provider now routes through `winter.openai-responses` (catalog-integrity I2). TOOLS: \"Client-side tools (function calling) and custom tools are not currently supported by the multi-agent model variant\" — the model page's generic \"Function calling: Yes\" is overridden by that specific limitation, so `toolCalling` is `none` and `tools` is in `unsupportedParameters`, which the Responses adapter checks BEFORE sending (a typed `capability` refusal, never a vendor 400). OUTPUT LIMIT: \"The `max_tokens` parameter is not currently supported by the multi-agent model variant\"; on Responses that field is `max_output_tokens`, the name the adapter checks. EFFORT: `reasoning.effort` selects the AGENT COUNT (\"low\"/\"medium\" = 4 agents, \"high\"/\"xhigh\" = 16), not reasoning depth; no default is documented, so none is recorded. CONTINUATION: the guide's multi-turn path is `previous_response_id`, which Winter never uses (stateless, `store: false`); sub-agent state \"is encrypted and included in the response only when `use_encrypted_content` is set\" (the xAI SDK's name for `include: [\"reasoning.encrypted_content\"]`), so the row records `opaque-provider-state`. UNVERIFIED LIVE: whether the encrypted items come back and are accepted on a `store: false` replay is what the WS-23 probe steps 4a/4b check; if they do not, this becomes `none`. Beta: \"The API interface and behavior may change\". xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models).",
5513
+ "endpoints": [
5514
+ "responses"
5515
+ ],
5516
+ "contextWindow": {
5517
+ "value": 1000000,
5518
+ "source": "official-doc",
5519
+ "sourceRef": "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page context window 1,000,000 tokens",
5520
+ "confidence": "declared",
5521
+ "observedAt": "2026-09-25T08:40:00Z"
5522
+ },
5523
+ "inputModalities": {
5524
+ "value": [
5525
+ "text",
5526
+ "image"
5527
+ ],
5528
+ "source": "official-doc",
5529
+ "sourceRef": "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page Modalities: Text, Image input",
5530
+ "confidence": "declared",
5531
+ "observedAt": "2026-09-25T08:40:00Z"
5532
+ },
5533
+ "outputModalities": {
5534
+ "value": [
5535
+ "text"
5536
+ ],
5537
+ "source": "official-doc",
5538
+ "sourceRef": "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page Modalities: Text output",
5539
+ "confidence": "declared",
5540
+ "observedAt": "2026-09-25T08:40:00Z"
5541
+ },
5542
+ "toolCalling": {
5543
+ "value": "none",
5544
+ "source": "official-doc",
5545
+ "sourceRef": "https://docs.x.ai/developers/model-capabilities/text/multi-agent — multi-agent limitations: client-side/custom function calling unsupported; built-in server tools only",
5546
+ "confidence": "declared",
5547
+ "observedAt": "2026-09-25T08:40:00Z"
5548
+ },
5549
+ "nativeTools": {
5550
+ "value": false,
5551
+ "source": "official-doc",
5552
+ "sourceRef": "https://docs.x.ai/developers/model-capabilities/text/multi-agent — client-side/custom function tools unsupported",
5553
+ "confidence": "declared",
5554
+ "observedAt": "2026-09-25T08:40:00Z"
5555
+ },
5556
+ "structuredOutput": {
5557
+ "value": true,
5558
+ "source": "official-doc",
5559
+ "sourceRef": "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page Structured outputs capability",
5560
+ "confidence": "declared",
5561
+ "observedAt": "2026-09-25T08:40:00Z"
5562
+ },
5563
+ "promptCaching": {
5564
+ "value": true,
5565
+ "source": "official-doc",
5566
+ "sourceRef": "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page lists Cached tokens input rate; prompt caching available",
5567
+ "confidence": "declared",
5568
+ "observedAt": "2026-09-25T08:40:00Z"
5569
+ },
5570
+ "reasoning": {
5571
+ "supported": {
5572
+ "value": true,
5573
+ "source": "official-doc",
5574
+ "sourceRef": "https://docs.x.ai/developers/model-capabilities/text/multi-agent — reasoning.effort low/medium selects 4 agents, high/xhigh selects 16; previous_response_id supports multi-turn",
5575
+ "confidence": "declared",
5576
+ "observedAt": "2026-09-25T08:40:00Z"
5577
+ },
5578
+ "efforts": [
5579
+ "low",
5580
+ "medium",
5581
+ "high",
5582
+ "xhigh"
5583
+ ],
5584
+ "continuation": "opaque-provider-state"
5585
+ },
5586
+ "pricing": {
5587
+ "value": {
5588
+ "inputPerMTokUsd": 1.25,
5589
+ "outputPerMTokUsd": 2.5,
5590
+ "cacheReadPerMTokUsd": 0.2
5591
+ },
5592
+ "source": "official-doc",
5593
+ "sourceRef": "https://docs.x.ai/developers/pricing — grok-4.20-multi-agent-0309 Standard global short-context rate (<200k prompt tokens): $1.25 input, $0.20 cached input, $2.50 output per 1M; >=200k the entire request is charged $2.50/$0.40/$5.00. US-regional 1.1x applies only to models currently on that endpoint, listed as grok-4.7 and grok-4.6; not this model (re-read 2026-09-25, WS-23).",
5594
+ "confidence": "declared",
5595
+ "observedAt": "2026-09-25T17:09:48Z"
5596
+ },
5597
+ "unsupportedParameters": [
5598
+ "max_output_tokens",
5599
+ "tools"
5600
+ ],
5601
+ "status": "candidate"
5602
+ },
5221
5603
  {
5222
5604
  "key": "xai/grok-4.3",
5223
5605
  "providerId": "xai",
@@ -5226,9 +5608,10 @@
5226
5608
  "aliases": [
5227
5609
  "grok-4.3-latest"
5228
5610
  ],
5229
- "$comment": "Read from the pinned entry's own accepted literals — only the provider's `executor` is unrepresentable. The two `targetFormat: \"openai-responses\"` siblings are omitted rather than reshaped; see the provider row's comment. — 2026-09-25 refresh: Model and aliases documented at https://docs.x.ai/developers/models/grok-4.3. The catalog's xai provider currently declares Chat Completions; xAI also offers Responses. No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. Detail page lists none/low/medium/high/xhigh, default low. Its prose only names none/low/medium/high; xhigh appears in the detailed effort list. — The vendor also serves this model on its OpenAI Responses endpoint (same host and key); `endpoints` lists only what this row's Chat Completions adapter routes, so `responses` is omitted until adapter-level Responses support lands (tracked follow-up, 2026-09-25). — 2026-09-25 audit fix (0.0.24): https://docs.x.ai/developers/pricing — US regional availability currently only grok-4.7 and grok-4.6",
5611
+ "$comment": "Read from the pinned entry's own accepted literals — only the provider's `executor` is unrepresentable. Upstream's two `targetFormat: \"openai-responses\"` siblings are now representable (WS-23): `grok-4.6` is its own overlay row and `grok-4.20-multi-agent-0309` is a Responses-only row; see the provider row's comment. — 2026-09-25 refresh: Model and aliases documented at https://docs.x.ai/developers/models/grok-4.3. The catalog's xai provider declared Chat Completions until WS-23 and now speaks Responses (same host and key). No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. Detail page lists none/low/medium/high/xhigh, default low. Its prose only names none/low/medium/high; xhigh appears in the detailed effort list. — WS-23 (2026-09-25): the `xai` provider now routes through `winter.openai-responses`, so `endpoints` lists both surfaces the family routes (the `openai/*` convention) rather than only Chat Completions. — 2026-09-25 audit fix (0.0.24): https://docs.x.ai/developers/pricing — US regional availability currently only grok-4.7 and grok-4.6 Continuation (WS-23): `opaque-provider-state` — on Responses the reasoning item carries `encrypted_content` when `include: [\"reasoning.encrypted_content\"]` is sent and is replayed unchanged in the next `input` (https://docs.x.ai/developers/model-capabilities/text/reasoning, \"Encrypted Reasoning Content\").",
5230
5612
  "endpoints": [
5231
- "chat"
5613
+ "chat",
5614
+ "responses"
5232
5615
  ],
5233
5616
  "contextWindow": {
5234
5617
  "value": 1000000,
@@ -5299,7 +5682,7 @@
5299
5682
  "high",
5300
5683
  "xhigh"
5301
5684
  ],
5302
- "continuation": "plaintext",
5685
+ "continuation": "opaque-provider-state",
5303
5686
  "defaultEffort": "low"
5304
5687
  },
5305
5688
  "pricing": {
@@ -5326,9 +5709,10 @@
5326
5709
  "grok-code-fast",
5327
5710
  "grok-code-fast-1-0825"
5328
5711
  ],
5329
- "$comment": "Read from the pinned entry's own accepted literals — only the provider's `executor` is unrepresentable. The two `targetFormat: \"openai-responses\"` siblings are omitted rather than reshaped; see the provider row's comment. — 2026-09-25 refresh: Model and aliases documented at https://docs.x.ai/developers/models/grok-build-0.1. The catalog's xai provider currently declares Chat Completions; xAI also offers Responses. No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. xAI's May 15 retirement page says grok-code-fast-1 redirects to grok-4.3, whereas this model page lists it as a grok-build-0.1 alias; live resolution of that alias needs checking (https://docs.x.ai/developers/migration/may-15-retirement). Model page does not document an effort vocabulary for this exact model, so efforts is empty. — The vendor also serves this model on its OpenAI Responses endpoint (same host and key); `endpoints` lists only what this row's Chat Completions adapter routes, so `responses` is omitted until adapter-level Responses support lands (tracked follow-up, 2026-09-25). — 2026-09-25 audit fix (0.0.24): https://docs.x.ai/developers/pricing — US regional availability currently only grok-4.7 and grok-4.6",
5712
+ "$comment": "Read from the pinned entry's own accepted literals — only the provider's `executor` is unrepresentable. Upstream's two `targetFormat: \"openai-responses\"` siblings are now representable (WS-23): `grok-4.6` is its own overlay row and `grok-4.20-multi-agent-0309` is a Responses-only row; see the provider row's comment. — 2026-09-25 refresh: Model and aliases documented at https://docs.x.ai/developers/models/grok-build-0.1. The catalog's xai provider declared Chat Completions until WS-23 and now speaks Responses (same host and key). No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. xAI's May 15 retirement page says grok-code-fast-1 redirects to grok-4.3, whereas this model page lists it as a grok-build-0.1 alias; live resolution of that alias needs checking (https://docs.x.ai/developers/migration/may-15-retirement). — WS-23 (2026-09-25): the `xai` provider now routes through `winter.openai-responses`, so `endpoints` lists both surfaces the family routes (the `openai/*` convention) rather than only Chat Completions. — 2026-09-25 audit fix (0.0.24): https://docs.x.ai/developers/pricing — US regional availability currently only grok-4.7 and grok-4.6 Continuation (WS-23): `opaque-provider-state` — on Responses the reasoning item carries `encrypted_content` when `include: [\"reasoning.encrypted_content\"]` is sent and is replayed unchanged in the next `input` (https://docs.x.ai/developers/model-capabilities/text/reasoning, \"Encrypted Reasoning Content\"). Effort (WS-23 fix of the \"supported, no efforts, continuation none\" incoherence): the model page says \"Reasoning: Yes\", but https://docs.x.ai/developers/model-capabilities/text/reasoning names `reasoning_effort` only for `grok-4.7`, `grok-4.6`, `grok-4.5` (and the multi-agent model's agent count), so this model reasons with NO documented effort knob and `efforts` stays empty — an effort or `thinking` request is refused before the request rather than guessed. What was incoherent was `continuation: \"none\"`, now `opaque-provider-state` per the note above. Since WS-23 fix round 1 the adapter asks for `include` on EVERY turn of an opaque-continuation row, effort or not, so the item is requested here although no effort can be named. LIVE-GATE ITEM: that xAI returns it for this model (WS-23 probe step 5b/5c); if it does not, `continuation` goes back to `none`.",
5330
5713
  "endpoints": [
5331
- "chat"
5714
+ "chat",
5715
+ "responses"
5332
5716
  ],
5333
5717
  "contextWindow": {
5334
5718
  "value": 256000,
@@ -5393,7 +5777,7 @@
5393
5777
  "observedAt": "2026-09-25T08:40:00Z"
5394
5778
  },
5395
5779
  "efforts": [],
5396
- "continuation": "none"
5780
+ "continuation": "opaque-provider-state"
5397
5781
  },
5398
5782
  "pricing": {
5399
5783
  "value": {
@@ -6425,6 +6809,15 @@
6425
6809
  "sourceRef": "continuity report §5.1/§5.3 for own-state acceptance — the Responses surface replays its own completed `reasoning.encrypted_content` items to the same model. WS-13 §8.2: \"OpenAI-compatible\" is never the capability test, so this key shares NO domain with any other row.",
6426
6810
  "confidence": "declared",
6427
6811
  "observedAt": "2026-09-06T00:00:00Z"
6812
+ },
6813
+ "perMessageEffort": {
6814
+ "value": {
6815
+ "item": "configuration_update"
6816
+ },
6817
+ "source": "official-doc",
6818
+ "confidence": "declared",
6819
+ "observedAt": "2026-09-26T00:00:00Z",
6820
+ "sourceRef": "https://developers.openai.com/api/docs/guides/reasoning — \"Configuration updates are supported by the GPT-6 model family in standard, single-agent mode. They change only reasoning effort.\" Shape {\"type\":\"configuration_update\",\"reasoning\":{\"effort\":…}}, placed \"before the next user message in the input array\"; \"the API rejects adjacent updates\"; \"The response's reasoning.effort continues to report the request-level setting\"; with store:false, replay updates \"in their original positions\". Retrieved 2026-09-26. NOT set on codex-oauth/gpt-6-* (codex-rs enables it only behind an off-by-default feature, backend acceptance unprobed — scripts/probe-openai-midconv.ts decides) nor on azure-openai (undocumented there)."
6428
6821
  }
6429
6822
  },
6430
6823
  "pricing": {
@@ -6440,7 +6833,35 @@
6440
6833
  "observedAt": "2026-09-06T00:00:00Z"
6441
6834
  },
6442
6835
  "unsupportedParameters": [],
6443
- "status": "candidate"
6836
+ "status": "candidate",
6837
+ "promptCacheKey": {
6838
+ "value": true,
6839
+ "source": "official-doc",
6840
+ "confidence": "declared",
6841
+ "observedAt": "2026-09-25T19:30:00Z",
6842
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
6843
+ },
6844
+ "clientToolSearch": {
6845
+ "value": true,
6846
+ "source": "official-doc",
6847
+ "confidence": "declared",
6848
+ "observedAt": "2026-09-26T00:00:00Z",
6849
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — \"Only gpt-5.4 and later models support tool_search\" in the Responses API; client execution: {\"type\":\"tool_search\",\"execution\":\"client\",description,parameters}, tool_search_call -> tool_search_output {call_id, execution:\"client\", status, tools}, deferred functions keep defer_loading:true, optionally inside {\"type\":\"namespace\",name,description,tools}. Retrieved 2026-09-26."
6850
+ },
6851
+ "additionalToolsItem": {
6852
+ "value": true,
6853
+ "source": "official-doc",
6854
+ "confidence": "declared",
6855
+ "observedAt": "2026-09-26T00:00:00Z",
6856
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — {\"type\":\"additional_tools\",\"role\":\"developer\",\"tools\":[...]}: \"Tools in an additional_tools item become available only after that item appears in the input\"; its position is kept on replay. The page names no model list, so it is set only on the rows the same page documents tool_search for (GPT-5.4 and later). NOT on codex-oauth: codex-rs sends one only at input[0] (core/src/client.rs:910-941), never mid-conversation -- the live probe decides. Retrieved 2026-09-26."
6857
+ },
6858
+ "allowedToolsChoice": {
6859
+ "value": true,
6860
+ "source": "official-doc",
6861
+ "confidence": "declared",
6862
+ "observedAt": "2026-09-26T00:00:00Z",
6863
+ "sourceRef": "https://developers.openai.com/api/docs/guides/function-calling — tool_choice {\"type\":\"allowed_tools\",\"mode\":\"auto\"|\"required\",\"tools\":[{\"type\":\"function\",\"name\":…}]}: \"make only a subset of tools available across model requests, but not modify the list of tools you pass in, so you can maximize savings from prompt caching\"; \"When you use tool search, tool_choice still applies to the tools that are currently callable in the turn.\" No model list on the page; set on the same GPT-5.4+ rows. NOT on codex-oauth: codex-rs always sends tool_choice \"auto\" (core/src/client.rs:1004) and its allowed_tools is a client-side filter (ext/extension-api/src/tool_policy.rs:14-36) -- the live probe decides. Retrieved 2026-09-26."
6864
+ }
6444
6865
  },
6445
6866
  {
6446
6867
  "key": "codex-oauth/gpt-6-astra",
@@ -6548,7 +6969,21 @@
6548
6969
  }
6549
6970
  },
6550
6971
  "unsupportedParameters": [],
6551
- "status": "candidate"
6972
+ "status": "candidate",
6973
+ "promptCacheKey": {
6974
+ "value": true,
6975
+ "source": "official-doc",
6976
+ "confidence": "declared",
6977
+ "observedAt": "2026-09-25T19:30:00Z",
6978
+ "sourceRef": "https://github.com/openai/codex/blob/main/codex-rs/core/src/client.rs — Codex (the vendor's own client for this backend) sets prompt_cache_key on every Responses request, to the session id (or source:parent_thread_id for internal sessions); https://developers.openai.com/api/docs/guides/prompt-caching documents the field."
6979
+ },
6980
+ "clientToolSearch": {
6981
+ "value": true,
6982
+ "source": "upstream-static",
6983
+ "confidence": "declared",
6984
+ "observedAt": "2026-09-26T00:00:00Z",
6985
+ "sourceRef": "codex-rs models-manager/models.json (cloned 25270df, 2026-09-26): supports_search_tool is true on every bundled model; core/src/tools/spec_plan.rs:653-666 turns on the client tool_search (tools/src/tool_search.rs:84-110, core/src/tools/handlers/tool_search_spec.rs:98) when the provider's namespace capability is on (default true) -- the vendor's own client sends it to chatgpt.com/backend-api/codex."
6986
+ }
6552
6987
  },
6553
6988
  {
6554
6989
  "key": "anthropic/claude-fable-5-1",
@@ -6698,6 +7133,15 @@
6698
7133
  "confidence": "declared",
6699
7134
  "observedAt": "2026-09-25T13:00:00Z",
6700
7135
  "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — \"A 400 error says a thinking block signature is invalid\": on Claude Fable 5.1 and Opus 5.5 a replayed thinking block is bound to the conversation (system, tools and earlier messages) and is rejected once that prefix changes (enforced for accounts created on or after 2026-08-31); the documented escape is the `thinking-binding-controls-2026-08-01` beta with `thinking.block_binding.prefix_mismatch_behavior: \"drop_block\"`. See also https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5 (\"Thinking blocks are tied to the model and the conversation\")."
7136
+ },
7137
+ "perMessageEffort": {
7138
+ "value": {
7139
+ "beta": "mid-conversation-output-config-2026-07-01"
7140
+ },
7141
+ "source": "official-doc",
7142
+ "confidence": "declared",
7143
+ "observedAt": "2026-09-25T18:00:00Z",
7144
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/effort#change-effort-mid-conversation-beta — \"On Claude Fable 5.1, Claude Mythos 5.1, Claude Opus 5.5, and Claude Opus 5, use a per-message effort change, which keeps the prompt cache\": a role:\"system\" message with empty content and output_config.effort, beta header mid-conversation-output-config-2026-07-01; \"Models without per-message effort, including Claude Fable 5, return a 400 error\". claude 2.1.282 sends the older alias per-turn-control-2026-07-01, which the page does not document."
6701
7145
  }
6702
7146
  },
6703
7147
  "pricing": {
@@ -6718,7 +7162,46 @@
6718
7162
  "tool_choice.any",
6719
7163
  "tool_choice.tool"
6720
7164
  ],
6721
- "status": "candidate"
7165
+ "status": "candidate",
7166
+ "deferredToolLoading": {
7167
+ "value": true,
7168
+ "source": "official-doc",
7169
+ "confidence": "declared",
7170
+ "observedAt": "2026-09-25T18:30:00Z",
7171
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
7172
+ },
7173
+ "midConversationSystem": {
7174
+ "value": true,
7175
+ "source": "official-doc",
7176
+ "confidence": "declared",
7177
+ "observedAt": "2026-09-25T19:00:00Z",
7178
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — \"This feature is available on Claude Fable 5.1, Claude Mythos 5.1, Claude Fable 5, Claude Mythos 5, Claude Opus 5.5, Claude Opus 4.8, and Claude Opus 5. No beta header is required for mid-conversation system messages. This feature is not available on Claude Sonnet 5.\""
7179
+ },
7180
+ "midConversationToolChanges": {
7181
+ "value": {
7182
+ "beta": "mid-conversation-tool-changes-2026-07-01"
7183
+ },
7184
+ "source": "official-doc",
7185
+ "confidence": "declared",
7186
+ "observedAt": "2026-09-26T00:00:00Z",
7187
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition / tool_removal blocks in a role:\"system\" message, by reference (\"Add/remove by reference: mid-conversation-tool-changes-2026-07-01 — Claude API, Amazon Bedrock, Google Cloud\"); available on Claude Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 4.8 and Opus 5, \"Not available on Claude Sonnet 5\". Retrieved 2026-09-26; release note 2026-07-24 (https://platform.claude.com/docs/en/release-notes/overview)."
7188
+ },
7189
+ "inlineToolDefinitions": {
7190
+ "value": {
7191
+ "beta": "inline-tools-2026-09-15"
7192
+ },
7193
+ "source": "official-doc",
7194
+ "confidence": "declared",
7195
+ "observedAt": "2026-09-26T00:00:00Z",
7196
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition with a tool_definition (\"Add/remove by reference + define by value: inline-tools-2026-09-15 — Claude API\"); \"The inline-tools-2026-09-15 header covers all reference-based changes\"; redefinition: \"send a different definition under the same name ... The new definition replaces the earlier one from that position onward\" (no removal first, a tool declared in tools included); a definition reusing the name of a different type of tool is a 400 tool_name_conflict. Same model list as midConversationToolChanges. Claude API only, so set on the anthropic and console providers (both api.anthropic.com), never on a cloud reseller. Retrieved 2026-09-26; release note 2026-09-22."
7197
+ },
7198
+ "assistantPrefill": {
7199
+ "value": false,
7200
+ "source": "official-doc",
7201
+ "confidence": "declared",
7202
+ "observedAt": "2026-09-26T00:00:00Z",
7203
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
7204
+ }
6722
7205
  },
6723
7206
  {
6724
7207
  "key": "google/gemini-3.8-flash",
@@ -6951,9 +7434,10 @@
6951
7434
  "upstreamId": "grok-4.6",
6952
7435
  "displayName": "Grok 4.6",
6953
7436
  "aliases": [],
6954
- "$comment": "P6.6 Task 1b (WS-13c owed row): the `grok` family's `grok-4.6` slot already resolves canonicalModelId `grok-4.6` through the existing `xai-oauth/grok-4.6` (subscription) row; this row makes the SAME canonical model servable on the plain token-priced `xai` provider too, so families.json needs no canonicalModelId change here — only the slot's citation prose is updated to record that the owed row is now verified. FOUND on https://docs.x.ai/docs/models (retrieved 2026-09-07): the Text API pricing table lists `grok-4.6` at $2.00/$6.00 per 1M input/output tokens (<200k prompt tokens) and $4.00/$12.00 (>=200k), a 500k context window, beside \"For everything else, including code, use Grok 4.6. It is the most intelligent and fastest model we've built.\" No subscription/OAuth gating language sets `grok-4.6` apart from the other rows in the same plain pricing table (grok-4.5, grok-4.3, grok-4.20-*, grok-build-0.1 — the last of which the `xai` provider already carries as `xai/grok-build-0.1`), so this is the plain API-key surface, distinct from the `xai-oauth` sibling's Grok Build subscription entitlement. `reasoning.supported` mirrors `xai-oauth/grok-4.6`'s own already-admitted evidence (xAI Grok Build's own model catalogue at the pinned commit, `derived-shapes-p6b-xai.md` §6) since both rows describe the identical vendor model. `toolCalling`/`nativeTools`/`inputModalities` are ALSO inherited from that sibling row, each at `confidence: \"inferred\"` rather than the sibling's `\"declared\"` — fix r1 (I-2, I-3) found that the sibling's own citations for these three fields do not check out against a direct re-read of `https://docs.x.ai/docs/models` (no tool-calling statement anywhere on it) and `derived-shapes-p6b-xai.md` §6 (no modality data at all, and its own text hints at image input via \"web search / image description\"). Values are carried forward rather than dropped (general-API grounds for tool-calling; the sibling's admission for modalities), with the gap disclosed in each field's own `sourceRef`; the same two downgrades were applied to the `xai-oauth/grok-4.6` and `xai-oauth/grok-4.5` sibling rows in the same fix round, since the overlay is this lane's to correct during the phase. `contextWindow` and `pricing` (now including the published `cacheReadPerMTokUsd`, fix r1 I-1) are independently confirmed on this task's own fetch of the same allowed page, so they carry a fresh `sourceRef` rather than inheriting the sibling's. — 2026-09-25 refresh: Model and aliases documented at https://docs.x.ai/developers/models/grok-4.6. The catalog's xai provider currently declares Chat Completions; xAI also offers Responses. No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. https://docs.x.ai/developers/model-capabilities/text/reasoning says presencePenalty, frequencyPenalty, and stop return an error on reasoning models (snake_case names recorded for the Chat Completions wire). Chat Completions does not carry encrypted reasoning ciphertext; Grok 4.7 Responses does, so continuation is 'none' for this chat provider. — The vendor also serves this model on its OpenAI Responses endpoint (same host and key); `endpoints` lists only what this row's Chat Completions adapter routes, so `responses` is omitted until adapter-level Responses support lands (tracked follow-up, 2026-09-25).",
7437
+ "$comment": "P6.6 Task 1b (WS-13c owed row): the `grok` family's `grok-4.6` slot already resolves canonicalModelId `grok-4.6` through the existing `xai-oauth/grok-4.6` (subscription) row; this row makes the SAME canonical model servable on the plain token-priced `xai` provider too, so families.json needs no canonicalModelId change here — only the slot's citation prose is updated to record that the owed row is now verified. FOUND on https://docs.x.ai/docs/models (retrieved 2026-09-07): the Text API pricing table lists `grok-4.6` at $2.00/$6.00 per 1M input/output tokens (<200k prompt tokens) and $4.00/$12.00 (>=200k), a 500k context window, beside \"For everything else, including code, use Grok 4.6. It is the most intelligent and fastest model we've built.\" No subscription/OAuth gating language sets `grok-4.6` apart from the other rows in the same plain pricing table (grok-4.5, grok-4.3, grok-4.20-*, grok-build-0.1 — the last of which the `xai` provider already carries as `xai/grok-build-0.1`), so this is the plain API-key surface, distinct from the `xai-oauth` sibling's Grok Build subscription entitlement. `reasoning.supported` mirrors `xai-oauth/grok-4.6`'s own already-admitted evidence (xAI Grok Build's own model catalogue at the pinned commit, `derived-shapes-p6b-xai.md` §6) since both rows describe the identical vendor model. `toolCalling`/`nativeTools`/`inputModalities` are ALSO inherited from that sibling row, each at `confidence: \"inferred\"` rather than the sibling's `\"declared\"` — fix r1 (I-2, I-3) found that the sibling's own citations for these three fields do not check out against a direct re-read of `https://docs.x.ai/docs/models` (no tool-calling statement anywhere on it) and `derived-shapes-p6b-xai.md` §6 (no modality data at all, and its own text hints at image input via \"web search / image description\"). Values are carried forward rather than dropped (general-API grounds for tool-calling; the sibling's admission for modalities), with the gap disclosed in each field's own `sourceRef`; the same two downgrades were applied to the `xai-oauth/grok-4.6` and `xai-oauth/grok-4.5` sibling rows in the same fix round, since the overlay is this lane's to correct during the phase. `contextWindow` and `pricing` (now including the published `cacheReadPerMTokUsd`, fix r1 I-1) are independently confirmed on this task's own fetch of the same allowed page, so they carry a fresh `sourceRef` rather than inheriting the sibling's. — 2026-09-25 refresh: Model and aliases documented at https://docs.x.ai/developers/models/grok-4.6. The catalog's xai provider declared Chat Completions until WS-23 and now speaks Responses (same host and key). No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. https://docs.x.ai/developers/model-capabilities/text/reasoning says presencePenalty, frequencyPenalty, and stop return an error on reasoning models (snake_case names recorded for the Chat Completions wire). Continuation (WS-23): on Responses the reasoning item comes back with `encrypted_content` when `include: [\"reasoning.encrypted_content\"]` is sent, and is passed back unchanged in the next request's `input` (https://docs.x.ai/developers/model-capabilities/text/reasoning, \"Encrypted Reasoning Content\"), so `continuation` is `opaque-provider-state`; Chat Completions \"has no field for the ciphertext\" (same page). The penalty/stop names stay recorded but are moot on Responses, which Winter never sends them on. — WS-23 (2026-09-25): the `xai` provider now routes through `winter.openai-responses`, so `endpoints` lists both surfaces the family routes (the `openai/*` convention) rather than only Chat Completions.",
6955
7438
  "endpoints": [
6956
- "chat"
7439
+ "chat",
7440
+ "responses"
6957
7441
  ],
6958
7442
  "contextWindow": {
6959
7443
  "value": 500000,
@@ -7023,7 +7507,7 @@
7023
7507
  "high",
7024
7508
  "xhigh"
7025
7509
  ],
7026
- "continuation": "plaintext",
7510
+ "continuation": "opaque-provider-state",
7027
7511
  "defaultEffort": "high"
7028
7512
  },
7029
7513
  "pricing": {
@@ -7155,7 +7639,35 @@
7155
7639
  "observedAt": "2026-09-25T10:21:48Z"
7156
7640
  },
7157
7641
  "unsupportedParameters": [],
7158
- "status": "candidate"
7642
+ "status": "candidate",
7643
+ "promptCacheKey": {
7644
+ "value": true,
7645
+ "source": "official-doc",
7646
+ "confidence": "declared",
7647
+ "observedAt": "2026-09-25T19:30:00Z",
7648
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
7649
+ },
7650
+ "clientToolSearch": {
7651
+ "value": true,
7652
+ "source": "official-doc",
7653
+ "confidence": "declared",
7654
+ "observedAt": "2026-09-26T00:00:00Z",
7655
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — \"Only gpt-5.4 and later models support tool_search\" in the Responses API; client execution: {\"type\":\"tool_search\",\"execution\":\"client\",description,parameters}, tool_search_call -> tool_search_output {call_id, execution:\"client\", status, tools}, deferred functions keep defer_loading:true, optionally inside {\"type\":\"namespace\",name,description,tools}. Retrieved 2026-09-26."
7656
+ },
7657
+ "additionalToolsItem": {
7658
+ "value": true,
7659
+ "source": "official-doc",
7660
+ "confidence": "declared",
7661
+ "observedAt": "2026-09-26T00:00:00Z",
7662
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — {\"type\":\"additional_tools\",\"role\":\"developer\",\"tools\":[...]}: \"Tools in an additional_tools item become available only after that item appears in the input\"; its position is kept on replay. The page names no model list, so it is set only on the rows the same page documents tool_search for (GPT-5.4 and later). NOT on codex-oauth: codex-rs sends one only at input[0] (core/src/client.rs:910-941), never mid-conversation -- the live probe decides. Retrieved 2026-09-26."
7663
+ },
7664
+ "allowedToolsChoice": {
7665
+ "value": true,
7666
+ "source": "official-doc",
7667
+ "confidence": "declared",
7668
+ "observedAt": "2026-09-26T00:00:00Z",
7669
+ "sourceRef": "https://developers.openai.com/api/docs/guides/function-calling — tool_choice {\"type\":\"allowed_tools\",\"mode\":\"auto\"|\"required\",\"tools\":[{\"type\":\"function\",\"name\":…}]}: \"make only a subset of tools available across model requests, but not modify the list of tools you pass in, so you can maximize savings from prompt caching\"; \"When you use tool search, tool_choice still applies to the tools that are currently callable in the turn.\" No model list on the page; set on the same GPT-5.4+ rows. NOT on codex-oauth: codex-rs always sends tool_choice \"auto\" (core/src/client.rs:1004) and its allowed_tools is a client-side filter (ext/extension-api/src/tool_policy.rs:14-36) -- the live probe decides. Retrieved 2026-09-26."
7670
+ }
7159
7671
  },
7160
7672
  {
7161
7673
  "key": "openai/gpt-5.6-terra",
@@ -7268,7 +7780,35 @@
7268
7780
  "observedAt": "2026-09-25T10:21:48Z"
7269
7781
  },
7270
7782
  "unsupportedParameters": [],
7271
- "status": "candidate"
7783
+ "status": "candidate",
7784
+ "promptCacheKey": {
7785
+ "value": true,
7786
+ "source": "official-doc",
7787
+ "confidence": "declared",
7788
+ "observedAt": "2026-09-25T19:30:00Z",
7789
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
7790
+ },
7791
+ "clientToolSearch": {
7792
+ "value": true,
7793
+ "source": "official-doc",
7794
+ "confidence": "declared",
7795
+ "observedAt": "2026-09-26T00:00:00Z",
7796
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — \"Only gpt-5.4 and later models support tool_search\" in the Responses API; client execution: {\"type\":\"tool_search\",\"execution\":\"client\",description,parameters}, tool_search_call -> tool_search_output {call_id, execution:\"client\", status, tools}, deferred functions keep defer_loading:true, optionally inside {\"type\":\"namespace\",name,description,tools}. Retrieved 2026-09-26."
7797
+ },
7798
+ "additionalToolsItem": {
7799
+ "value": true,
7800
+ "source": "official-doc",
7801
+ "confidence": "declared",
7802
+ "observedAt": "2026-09-26T00:00:00Z",
7803
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — {\"type\":\"additional_tools\",\"role\":\"developer\",\"tools\":[...]}: \"Tools in an additional_tools item become available only after that item appears in the input\"; its position is kept on replay. The page names no model list, so it is set only on the rows the same page documents tool_search for (GPT-5.4 and later). NOT on codex-oauth: codex-rs sends one only at input[0] (core/src/client.rs:910-941), never mid-conversation -- the live probe decides. Retrieved 2026-09-26."
7804
+ },
7805
+ "allowedToolsChoice": {
7806
+ "value": true,
7807
+ "source": "official-doc",
7808
+ "confidence": "declared",
7809
+ "observedAt": "2026-09-26T00:00:00Z",
7810
+ "sourceRef": "https://developers.openai.com/api/docs/guides/function-calling — tool_choice {\"type\":\"allowed_tools\",\"mode\":\"auto\"|\"required\",\"tools\":[{\"type\":\"function\",\"name\":…}]}: \"make only a subset of tools available across model requests, but not modify the list of tools you pass in, so you can maximize savings from prompt caching\"; \"When you use tool search, tool_choice still applies to the tools that are currently callable in the turn.\" No model list on the page; set on the same GPT-5.4+ rows. NOT on codex-oauth: codex-rs always sends tool_choice \"auto\" (core/src/client.rs:1004) and its allowed_tools is a client-side filter (ext/extension-api/src/tool_policy.rs:14-36) -- the live probe decides. Retrieved 2026-09-26."
7811
+ }
7272
7812
  },
7273
7813
  {
7274
7814
  "key": "openai/gpt-5.6-luna",
@@ -7381,7 +7921,35 @@
7381
7921
  "observedAt": "2026-09-25T10:21:48Z"
7382
7922
  },
7383
7923
  "unsupportedParameters": [],
7384
- "status": "candidate"
7924
+ "status": "candidate",
7925
+ "promptCacheKey": {
7926
+ "value": true,
7927
+ "source": "official-doc",
7928
+ "confidence": "declared",
7929
+ "observedAt": "2026-09-25T19:30:00Z",
7930
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
7931
+ },
7932
+ "clientToolSearch": {
7933
+ "value": true,
7934
+ "source": "official-doc",
7935
+ "confidence": "declared",
7936
+ "observedAt": "2026-09-26T00:00:00Z",
7937
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — \"Only gpt-5.4 and later models support tool_search\" in the Responses API; client execution: {\"type\":\"tool_search\",\"execution\":\"client\",description,parameters}, tool_search_call -> tool_search_output {call_id, execution:\"client\", status, tools}, deferred functions keep defer_loading:true, optionally inside {\"type\":\"namespace\",name,description,tools}. Retrieved 2026-09-26."
7938
+ },
7939
+ "additionalToolsItem": {
7940
+ "value": true,
7941
+ "source": "official-doc",
7942
+ "confidence": "declared",
7943
+ "observedAt": "2026-09-26T00:00:00Z",
7944
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — {\"type\":\"additional_tools\",\"role\":\"developer\",\"tools\":[...]}: \"Tools in an additional_tools item become available only after that item appears in the input\"; its position is kept on replay. The page names no model list, so it is set only on the rows the same page documents tool_search for (GPT-5.4 and later). NOT on codex-oauth: codex-rs sends one only at input[0] (core/src/client.rs:910-941), never mid-conversation -- the live probe decides. Retrieved 2026-09-26."
7945
+ },
7946
+ "allowedToolsChoice": {
7947
+ "value": true,
7948
+ "source": "official-doc",
7949
+ "confidence": "declared",
7950
+ "observedAt": "2026-09-26T00:00:00Z",
7951
+ "sourceRef": "https://developers.openai.com/api/docs/guides/function-calling — tool_choice {\"type\":\"allowed_tools\",\"mode\":\"auto\"|\"required\",\"tools\":[{\"type\":\"function\",\"name\":…}]}: \"make only a subset of tools available across model requests, but not modify the list of tools you pass in, so you can maximize savings from prompt caching\"; \"When you use tool search, tool_choice still applies to the tools that are currently callable in the turn.\" No model list on the page; set on the same GPT-5.4+ rows. NOT on codex-oauth: codex-rs always sends tool_choice \"auto\" (core/src/client.rs:1004) and its allowed_tools is a client-side filter (ext/extension-api/src/tool_policy.rs:14-36) -- the live probe decides. Retrieved 2026-09-26."
7952
+ }
7385
7953
  },
7386
7954
  {
7387
7955
  "key": "console/claude-fable-5",
@@ -7507,7 +8075,46 @@
7507
8075
  "thinking.type.enabled",
7508
8076
  "thinking.type.disabled"
7509
8077
  ],
7510
- "status": "candidate"
8078
+ "status": "candidate",
8079
+ "deferredToolLoading": {
8080
+ "value": true,
8081
+ "source": "official-doc",
8082
+ "confidence": "declared",
8083
+ "observedAt": "2026-09-25T18:30:00Z",
8084
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
8085
+ },
8086
+ "midConversationSystem": {
8087
+ "value": true,
8088
+ "source": "official-doc",
8089
+ "confidence": "declared",
8090
+ "observedAt": "2026-09-25T19:00:00Z",
8091
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — \"This feature is available on Claude Fable 5.1, Claude Mythos 5.1, Claude Fable 5, Claude Mythos 5, Claude Opus 5.5, Claude Opus 4.8, and Claude Opus 5. No beta header is required for mid-conversation system messages. This feature is not available on Claude Sonnet 5.\""
8092
+ },
8093
+ "midConversationToolChanges": {
8094
+ "value": {
8095
+ "beta": "mid-conversation-tool-changes-2026-07-01"
8096
+ },
8097
+ "source": "official-doc",
8098
+ "confidence": "declared",
8099
+ "observedAt": "2026-09-26T00:00:00Z",
8100
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition / tool_removal blocks in a role:\"system\" message, by reference (\"Add/remove by reference: mid-conversation-tool-changes-2026-07-01 — Claude API, Amazon Bedrock, Google Cloud\"); available on Claude Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 4.8 and Opus 5, \"Not available on Claude Sonnet 5\". Retrieved 2026-09-26; release note 2026-07-24 (https://platform.claude.com/docs/en/release-notes/overview)."
8101
+ },
8102
+ "inlineToolDefinitions": {
8103
+ "value": {
8104
+ "beta": "inline-tools-2026-09-15"
8105
+ },
8106
+ "source": "official-doc",
8107
+ "confidence": "declared",
8108
+ "observedAt": "2026-09-26T00:00:00Z",
8109
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition with a tool_definition (\"Add/remove by reference + define by value: inline-tools-2026-09-15 — Claude API\"); \"The inline-tools-2026-09-15 header covers all reference-based changes\"; redefinition: \"send a different definition under the same name ... The new definition replaces the earlier one from that position onward\" (no removal first, a tool declared in tools included); a definition reusing the name of a different type of tool is a 400 tool_name_conflict. Same model list as midConversationToolChanges. Claude API only, so set on the anthropic and console providers (both api.anthropic.com), never on a cloud reseller. Retrieved 2026-09-26; release note 2026-09-22."
8110
+ },
8111
+ "assistantPrefill": {
8112
+ "value": false,
8113
+ "source": "official-doc",
8114
+ "confidence": "declared",
8115
+ "observedAt": "2026-09-26T00:00:00Z",
8116
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
8117
+ }
7511
8118
  },
7512
8119
  {
7513
8120
  "key": "console/claude-fable-5-1",
@@ -7657,6 +8264,15 @@
7657
8264
  "confidence": "declared",
7658
8265
  "observedAt": "2026-09-25T13:00:00Z",
7659
8266
  "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — \"A 400 error says a thinking block signature is invalid\": on Claude Fable 5.1 and Opus 5.5 a replayed thinking block is bound to the conversation (system, tools and earlier messages) and is rejected once that prefix changes (enforced for accounts created on or after 2026-08-31); the documented escape is the `thinking-binding-controls-2026-08-01` beta with `thinking.block_binding.prefix_mismatch_behavior: \"drop_block\"`. See also https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5 (\"Thinking blocks are tied to the model and the conversation\")."
8267
+ },
8268
+ "perMessageEffort": {
8269
+ "value": {
8270
+ "beta": "mid-conversation-output-config-2026-07-01"
8271
+ },
8272
+ "source": "official-doc",
8273
+ "confidence": "declared",
8274
+ "observedAt": "2026-09-25T18:00:00Z",
8275
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/effort#change-effort-mid-conversation-beta — \"On Claude Fable 5.1, Claude Mythos 5.1, Claude Opus 5.5, and Claude Opus 5, use a per-message effort change, which keeps the prompt cache\": a role:\"system\" message with empty content and output_config.effort, beta header mid-conversation-output-config-2026-07-01; \"Models without per-message effort, including Claude Fable 5, return a 400 error\". claude 2.1.282 sends the older alias per-turn-control-2026-07-01, which the page does not document."
7660
8276
  }
7661
8277
  },
7662
8278
  "pricing": {
@@ -7677,7 +8293,46 @@
7677
8293
  "tool_choice.any",
7678
8294
  "tool_choice.tool"
7679
8295
  ],
7680
- "status": "candidate"
8296
+ "status": "candidate",
8297
+ "deferredToolLoading": {
8298
+ "value": true,
8299
+ "source": "official-doc",
8300
+ "confidence": "declared",
8301
+ "observedAt": "2026-09-25T18:30:00Z",
8302
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
8303
+ },
8304
+ "midConversationSystem": {
8305
+ "value": true,
8306
+ "source": "official-doc",
8307
+ "confidence": "declared",
8308
+ "observedAt": "2026-09-25T19:00:00Z",
8309
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — \"This feature is available on Claude Fable 5.1, Claude Mythos 5.1, Claude Fable 5, Claude Mythos 5, Claude Opus 5.5, Claude Opus 4.8, and Claude Opus 5. No beta header is required for mid-conversation system messages. This feature is not available on Claude Sonnet 5.\""
8310
+ },
8311
+ "midConversationToolChanges": {
8312
+ "value": {
8313
+ "beta": "mid-conversation-tool-changes-2026-07-01"
8314
+ },
8315
+ "source": "official-doc",
8316
+ "confidence": "declared",
8317
+ "observedAt": "2026-09-26T00:00:00Z",
8318
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition / tool_removal blocks in a role:\"system\" message, by reference (\"Add/remove by reference: mid-conversation-tool-changes-2026-07-01 — Claude API, Amazon Bedrock, Google Cloud\"); available on Claude Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 4.8 and Opus 5, \"Not available on Claude Sonnet 5\". Retrieved 2026-09-26; release note 2026-07-24 (https://platform.claude.com/docs/en/release-notes/overview)."
8319
+ },
8320
+ "inlineToolDefinitions": {
8321
+ "value": {
8322
+ "beta": "inline-tools-2026-09-15"
8323
+ },
8324
+ "source": "official-doc",
8325
+ "confidence": "declared",
8326
+ "observedAt": "2026-09-26T00:00:00Z",
8327
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition with a tool_definition (\"Add/remove by reference + define by value: inline-tools-2026-09-15 — Claude API\"); \"The inline-tools-2026-09-15 header covers all reference-based changes\"; redefinition: \"send a different definition under the same name ... The new definition replaces the earlier one from that position onward\" (no removal first, a tool declared in tools included); a definition reusing the name of a different type of tool is a 400 tool_name_conflict. Same model list as midConversationToolChanges. Claude API only, so set on the anthropic and console providers (both api.anthropic.com), never on a cloud reseller. Retrieved 2026-09-26; release note 2026-09-22."
8328
+ },
8329
+ "assistantPrefill": {
8330
+ "value": false,
8331
+ "source": "official-doc",
8332
+ "confidence": "declared",
8333
+ "observedAt": "2026-09-26T00:00:00Z",
8334
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
8335
+ }
7681
8336
  },
7682
8337
  {
7683
8338
  "key": "console/claude-haiku-4-5-20251001",
@@ -7774,7 +8429,14 @@
7774
8429
  "unsupportedParameters": [
7775
8430
  "thinking.type.adaptive"
7776
8431
  ],
7777
- "status": "candidate"
8432
+ "status": "candidate",
8433
+ "deferredToolLoading": {
8434
+ "value": true,
8435
+ "source": "official-doc",
8436
+ "confidence": "declared",
8437
+ "observedAt": "2026-09-25T18:30:00Z",
8438
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
8439
+ }
7778
8440
  },
7779
8441
  {
7780
8442
  "key": "console/claude-haiku-4.5",
@@ -7871,7 +8533,14 @@
7871
8533
  "unsupportedParameters": [
7872
8534
  "thinking.type.adaptive"
7873
8535
  ],
7874
- "status": "candidate"
8536
+ "status": "candidate",
8537
+ "deferredToolLoading": {
8538
+ "value": true,
8539
+ "source": "official-doc",
8540
+ "confidence": "declared",
8541
+ "observedAt": "2026-09-25T18:30:00Z",
8542
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
8543
+ }
7875
8544
  },
7876
8545
  {
7877
8546
  "key": "console/claude-opus-4.5",
@@ -7994,15 +8663,24 @@
7994
8663
  "unsupportedParameters": [
7995
8664
  "thinking.type.adaptive"
7996
8665
  ],
7997
- "status": "candidate"
8666
+ "status": "candidate",
8667
+ "deferredToolLoading": {
8668
+ "value": true,
8669
+ "source": "official-doc",
8670
+ "confidence": "declared",
8671
+ "observedAt": "2026-09-25T18:30:00Z",
8672
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
8673
+ }
7998
8674
  },
7999
8675
  {
8000
8676
  "key": "console/claude-opus-4.6",
8001
8677
  "providerId": "console",
8002
8678
  "upstreamId": "claude-opus-4.6",
8003
8679
  "displayName": "Claude Opus 4.6",
8004
- "aliases": [],
8005
- "$comment": "WS-20 (2026-09-16): Console-arm twin of anthropic/<id>; copied structurally, identity fields differ (see catalog-integrity 'console twin' test). Fix wave (scoped re-review, item 3, 2026-09-17): `promptCaching` backfilled here too -- see the sibling `anthropic/<id>` overlay row's own comment for the evidence tier and rationale (I3 tightened the adapter gate to require this declaration per row). — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-4-6/overview — actual Claude API wire model ID claude-opus-4-6 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; enabled/budget_tokens remains accepted but deprecated; disabled turns off. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor February 5, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. ",
8680
+ "aliases": [
8681
+ "claude-opus-4-6"
8682
+ ],
8683
+ "$comment": "WS-20 (2026-09-16): Console-arm twin of anthropic/<id>; copied structurally, identity fields differ (see catalog-integrity 'console twin' test). Fix wave (scoped re-review, item 3, 2026-09-17): `promptCaching` backfilled here too -- see the sibling `anthropic/<id>` overlay row's own comment for the evidence tier and rationale (I3 tightened the adapter gate to require this declaration per row). — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-4-6/overview — actual Claude API wire model ID claude-opus-4-6 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; enabled/budget_tokens remains accepted but deprecated; disabled turns off. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor February 5, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. WS-23 (2026-09-25): alias `claude-opus-4-6` is the vendor's own API id for this model (its model overview page); a transcript the claude binary wrote records that dashed id, and without the alias it resolved to no row, so an old session's thinking was stripped into `<recovered_reasoning>` text on resume. The key and upstream id stay dotted (a stored-tag migration is out of scope); the adapter already sends the dashed id on the wire. ",
8006
8684
  "endpoints": [
8007
8685
  "chat"
8008
8686
  ],
@@ -8113,15 +8791,31 @@
8113
8791
  "observedAt": "2026-09-19T00:00:00Z"
8114
8792
  },
8115
8793
  "unsupportedParameters": [],
8116
- "status": "candidate"
8794
+ "status": "candidate",
8795
+ "deferredToolLoading": {
8796
+ "value": true,
8797
+ "source": "official-doc",
8798
+ "confidence": "declared",
8799
+ "observedAt": "2026-09-25T18:30:00Z",
8800
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
8801
+ },
8802
+ "assistantPrefill": {
8803
+ "value": false,
8804
+ "source": "official-doc",
8805
+ "confidence": "declared",
8806
+ "observedAt": "2026-09-26T00:00:00Z",
8807
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
8808
+ }
8117
8809
  },
8118
8810
  {
8119
8811
  "key": "console/claude-opus-4.7",
8120
8812
  "providerId": "console",
8121
8813
  "upstreamId": "claude-opus-4.7",
8122
8814
  "displayName": "Claude Opus 4.7",
8123
- "aliases": [],
8124
- "$comment": "WS-20 (2026-09-16): Console-arm twin of anthropic/<id>; copied structurally, identity fields differ (see catalog-integrity 'console twin' test). Fix wave (scoped re-review, item 3, 2026-09-17): `promptCaching` backfilled here too -- see the sibling `anthropic/<id>` overlay row's own comment for the evidence tier and rationale (I3 tightened the adapter gate to require this declaration per row). — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-4-7/overview — actual Claude API wire model ID claude-opus-4-7 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, xhigh, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; can set thinking.type adaptive or disabled. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor April 16, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. ",
8815
+ "aliases": [
8816
+ "claude-opus-4-7"
8817
+ ],
8818
+ "$comment": "WS-20 (2026-09-16): Console-arm twin of anthropic/<id>; copied structurally, identity fields differ (see catalog-integrity 'console twin' test). Fix wave (scoped re-review, item 3, 2026-09-17): `promptCaching` backfilled here too -- see the sibling `anthropic/<id>` overlay row's own comment for the evidence tier and rationale (I3 tightened the adapter gate to require this declaration per row). — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-4-7/overview — actual Claude API wire model ID claude-opus-4-7 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, xhigh, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; can set thinking.type adaptive or disabled. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor April 16, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. WS-23 (2026-09-25): alias `claude-opus-4-7` is the vendor's own API id for this model (its model overview page); a transcript the claude binary wrote records that dashed id, and without the alias it resolved to no row, so an old session's thinking was stripped into `<recovered_reasoning>` text on resume. The key and upstream id stay dotted (a stored-tag migration is out of scope); the adapter already sends the dashed id on the wire. ",
8125
8819
  "endpoints": [
8126
8820
  "chat"
8127
8821
  ],
@@ -8238,15 +8932,31 @@
8238
8932
  "top_k",
8239
8933
  "thinking.type.enabled"
8240
8934
  ],
8241
- "status": "candidate"
8935
+ "status": "candidate",
8936
+ "deferredToolLoading": {
8937
+ "value": true,
8938
+ "source": "official-doc",
8939
+ "confidence": "declared",
8940
+ "observedAt": "2026-09-25T18:30:00Z",
8941
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
8942
+ },
8943
+ "assistantPrefill": {
8944
+ "value": false,
8945
+ "source": "official-doc",
8946
+ "confidence": "declared",
8947
+ "observedAt": "2026-09-26T00:00:00Z",
8948
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
8949
+ }
8242
8950
  },
8243
8951
  {
8244
8952
  "key": "console/claude-opus-4.8",
8245
8953
  "providerId": "console",
8246
8954
  "upstreamId": "claude-opus-4.8",
8247
8955
  "displayName": "Claude Opus 4.8",
8248
- "aliases": [],
8249
- "$comment": "WS-20 (2026-09-16): Console-arm twin of anthropic/<id>; copied structurally, identity fields differ (see catalog-integrity 'console twin' test). Fix wave (scoped re-review, item 3, 2026-09-17): `promptCaching` backfilled here too -- see the sibling `anthropic/<id>` overlay row's own comment for the evidence tier and rationale (I3 tightened the adapter gate to require this declaration per row). — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-4-8/overview — actual Claude API wire model ID claude-opus-4-8 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, xhigh, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; can set thinking.type adaptive or disabled. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor May 28, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. ",
8956
+ "aliases": [
8957
+ "claude-opus-4-8"
8958
+ ],
8959
+ "$comment": "WS-20 (2026-09-16): Console-arm twin of anthropic/<id>; copied structurally, identity fields differ (see catalog-integrity 'console twin' test). Fix wave (scoped re-review, item 3, 2026-09-17): `promptCaching` backfilled here too -- see the sibling `anthropic/<id>` overlay row's own comment for the evidence tier and rationale (I3 tightened the adapter gate to require this declaration per row). — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-4-8/overview — actual Claude API wire model ID claude-opus-4-8 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, xhigh, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; can set thinking.type adaptive or disabled. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor May 28, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. WS-23 (2026-09-25): alias `claude-opus-4-8` is the vendor's own API id for this model (its model overview page); a transcript the claude binary wrote records that dashed id, and without the alias it resolved to no row, so an old session's thinking was stripped into `<recovered_reasoning>` text on resume. The key and upstream id stay dotted (a stored-tag migration is out of scope); the adapter already sends the dashed id on the wire. ",
8250
8960
  "endpoints": [
8251
8961
  "chat"
8252
8962
  ],
@@ -8363,7 +9073,46 @@
8363
9073
  "top_k",
8364
9074
  "thinking.type.enabled"
8365
9075
  ],
8366
- "status": "candidate"
9076
+ "status": "candidate",
9077
+ "deferredToolLoading": {
9078
+ "value": true,
9079
+ "source": "official-doc",
9080
+ "confidence": "declared",
9081
+ "observedAt": "2026-09-25T18:30:00Z",
9082
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
9083
+ },
9084
+ "midConversationSystem": {
9085
+ "value": true,
9086
+ "source": "official-doc",
9087
+ "confidence": "declared",
9088
+ "observedAt": "2026-09-25T19:00:00Z",
9089
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — \"This feature is available on Claude Fable 5.1, Claude Mythos 5.1, Claude Fable 5, Claude Mythos 5, Claude Opus 5.5, Claude Opus 4.8, and Claude Opus 5. No beta header is required for mid-conversation system messages. This feature is not available on Claude Sonnet 5.\""
9090
+ },
9091
+ "midConversationToolChanges": {
9092
+ "value": {
9093
+ "beta": "mid-conversation-tool-changes-2026-07-01"
9094
+ },
9095
+ "source": "official-doc",
9096
+ "confidence": "declared",
9097
+ "observedAt": "2026-09-26T00:00:00Z",
9098
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition / tool_removal blocks in a role:\"system\" message, by reference (\"Add/remove by reference: mid-conversation-tool-changes-2026-07-01 — Claude API, Amazon Bedrock, Google Cloud\"); available on Claude Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 4.8 and Opus 5, \"Not available on Claude Sonnet 5\". Retrieved 2026-09-26; release note 2026-07-24 (https://platform.claude.com/docs/en/release-notes/overview)."
9099
+ },
9100
+ "inlineToolDefinitions": {
9101
+ "value": {
9102
+ "beta": "inline-tools-2026-09-15"
9103
+ },
9104
+ "source": "official-doc",
9105
+ "confidence": "declared",
9106
+ "observedAt": "2026-09-26T00:00:00Z",
9107
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition with a tool_definition (\"Add/remove by reference + define by value: inline-tools-2026-09-15 — Claude API\"); \"The inline-tools-2026-09-15 header covers all reference-based changes\"; redefinition: \"send a different definition under the same name ... The new definition replaces the earlier one from that position onward\" (no removal first, a tool declared in tools included); a definition reusing the name of a different type of tool is a 400 tool_name_conflict. Same model list as midConversationToolChanges. Claude API only, so set on the anthropic and console providers (both api.anthropic.com), never on a cloud reseller. Retrieved 2026-09-26; release note 2026-09-22."
9108
+ },
9109
+ "assistantPrefill": {
9110
+ "value": false,
9111
+ "source": "official-doc",
9112
+ "confidence": "declared",
9113
+ "observedAt": "2026-09-26T00:00:00Z",
9114
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
9115
+ }
8367
9116
  },
8368
9117
  {
8369
9118
  "key": "console/claude-opus-5",
@@ -8371,7 +9120,7 @@
8371
9120
  "upstreamId": "claude-opus-5",
8372
9121
  "displayName": "Claude Opus 5",
8373
9122
  "aliases": [],
8374
- "$comment": "WS-20 (2026-09-16): Console-arm twin of anthropic/<id>; copied structurally, identity fields differ (see catalog-integrity 'console twin' test). — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-5/overview — actual Claude API wire model ID claude-opus-5. https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, xhigh, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — thinking defaults on; disabled allowed only at low/medium/high, rejected at xhigh/max. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor July 24, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. ",
9123
+ "$comment": "WS-20 (2026-09-16): Console-arm twin of anthropic/<id>; copied structurally, identity fields differ (see catalog-integrity 'console twin' test). — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/opus-5/overview — actual Claude API wire model ID claude-opus-5. https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, xhigh, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — thinking defaults on; disabled allowed only at low/medium/high, rejected at xhigh/max. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor July 24, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. WS-23 (2026-09-25): `thinking.type.disabled+output_config.effort.xhigh` / `.max` -- a CONJUNCTION token (`+` joins two ordinary tokens): disabled thinking is rejected only together with those efforts (https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting; the model page's 'disabled allowed only at low/medium/high'). The Anthropic adapter's `buildThinking` rewrites such a request to adaptive thinking rather than sending a documented 400. ",
8375
9124
  "endpoints": [
8376
9125
  "chat"
8377
9126
  ],
@@ -8511,6 +9260,15 @@
8511
9260
  "confidence": "declared",
8512
9261
  "observedAt": "2026-09-25T12:30:00Z",
8513
9262
  "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/effort — the effort page's supportedModels list names claude-fable-5-1, claude-fable-5, claude-opus-5-5, claude-opus-5, claude-opus-4-8, claude-opus-4-7, claude-opus-4-6, claude-opus-4-5-20251101, claude-sonnet-5 and claude-sonnet-4-6: effort is requested through `output_config.effort` (Claude 4.7 and later reject a manual `thinking.budget_tokens`, https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting#rejected-configurations)."
9263
+ },
9264
+ "perMessageEffort": {
9265
+ "value": {
9266
+ "beta": "mid-conversation-output-config-2026-07-01"
9267
+ },
9268
+ "source": "official-doc",
9269
+ "confidence": "declared",
9270
+ "observedAt": "2026-09-25T18:00:00Z",
9271
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/effort#change-effort-mid-conversation-beta — \"On Claude Fable 5.1, Claude Mythos 5.1, Claude Opus 5.5, and Claude Opus 5, use a per-message effort change, which keeps the prompt cache\": a role:\"system\" message with empty content and output_config.effort, beta header mid-conversation-output-config-2026-07-01; \"Models without per-message effort, including Claude Fable 5, return a 400 error\". claude 2.1.282 sends the older alias per-turn-control-2026-07-01, which the page does not document."
8514
9272
  }
8515
9273
  },
8516
9274
  "pricing": {
@@ -8529,9 +9287,50 @@
8529
9287
  "temperature",
8530
9288
  "top_p",
8531
9289
  "top_k",
8532
- "thinking.type.enabled"
9290
+ "thinking.type.enabled",
9291
+ "thinking.type.disabled+output_config.effort.xhigh",
9292
+ "thinking.type.disabled+output_config.effort.max"
8533
9293
  ],
8534
- "status": "candidate"
9294
+ "status": "candidate",
9295
+ "deferredToolLoading": {
9296
+ "value": true,
9297
+ "source": "official-doc",
9298
+ "confidence": "declared",
9299
+ "observedAt": "2026-09-25T18:30:00Z",
9300
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
9301
+ },
9302
+ "midConversationSystem": {
9303
+ "value": true,
9304
+ "source": "official-doc",
9305
+ "confidence": "declared",
9306
+ "observedAt": "2026-09-25T19:00:00Z",
9307
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — \"This feature is available on Claude Fable 5.1, Claude Mythos 5.1, Claude Fable 5, Claude Mythos 5, Claude Opus 5.5, Claude Opus 4.8, and Claude Opus 5. No beta header is required for mid-conversation system messages. This feature is not available on Claude Sonnet 5.\""
9308
+ },
9309
+ "midConversationToolChanges": {
9310
+ "value": {
9311
+ "beta": "mid-conversation-tool-changes-2026-07-01"
9312
+ },
9313
+ "source": "official-doc",
9314
+ "confidence": "declared",
9315
+ "observedAt": "2026-09-26T00:00:00Z",
9316
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition / tool_removal blocks in a role:\"system\" message, by reference (\"Add/remove by reference: mid-conversation-tool-changes-2026-07-01 — Claude API, Amazon Bedrock, Google Cloud\"); available on Claude Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 4.8 and Opus 5, \"Not available on Claude Sonnet 5\". Retrieved 2026-09-26; release note 2026-07-24 (https://platform.claude.com/docs/en/release-notes/overview)."
9317
+ },
9318
+ "inlineToolDefinitions": {
9319
+ "value": {
9320
+ "beta": "inline-tools-2026-09-15"
9321
+ },
9322
+ "source": "official-doc",
9323
+ "confidence": "declared",
9324
+ "observedAt": "2026-09-26T00:00:00Z",
9325
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition with a tool_definition (\"Add/remove by reference + define by value: inline-tools-2026-09-15 — Claude API\"); \"The inline-tools-2026-09-15 header covers all reference-based changes\"; redefinition: \"send a different definition under the same name ... The new definition replaces the earlier one from that position onward\" (no removal first, a tool declared in tools included); a definition reusing the name of a different type of tool is a 400 tool_name_conflict. Same model list as midConversationToolChanges. Claude API only, so set on the anthropic and console providers (both api.anthropic.com), never on a cloud reseller. Retrieved 2026-09-26; release note 2026-09-22."
9326
+ },
9327
+ "assistantPrefill": {
9328
+ "value": false,
9329
+ "source": "official-doc",
9330
+ "confidence": "declared",
9331
+ "observedAt": "2026-09-26T00:00:00Z",
9332
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
9333
+ }
8535
9334
  },
8536
9335
  {
8537
9336
  "key": "console/claude-sonnet-4.5",
@@ -8645,15 +9444,24 @@
8645
9444
  "unsupportedParameters": [
8646
9445
  "thinking.type.adaptive"
8647
9446
  ],
8648
- "status": "candidate"
9447
+ "status": "candidate",
9448
+ "deferredToolLoading": {
9449
+ "value": true,
9450
+ "source": "official-doc",
9451
+ "confidence": "declared",
9452
+ "observedAt": "2026-09-25T18:30:00Z",
9453
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
9454
+ }
8649
9455
  },
8650
9456
  {
8651
9457
  "key": "console/claude-sonnet-4.6",
8652
9458
  "providerId": "console",
8653
9459
  "upstreamId": "claude-sonnet-4.6",
8654
9460
  "displayName": "Claude Sonnet 4.6",
8655
- "aliases": [],
8656
- "$comment": "WS-20 (2026-09-16): Console-arm twin of anthropic/<id>; copied structurally, identity fields differ (see catalog-integrity 'console twin' test). Fix wave (scoped re-review, item 3, 2026-09-17): `promptCaching` backfilled here too -- see the sibling `anthropic/<id>` overlay row's own comment for the evidence tier and rationale (I3 tightened the adapter gate to require this declaration per row). — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/sonnet-4-6/overview — actual Claude API wire model ID claude-sonnet-4-6 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; enabled/budget_tokens remains accepted but deprecated; disabled turns off. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor February 17, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. ",
9461
+ "aliases": [
9462
+ "claude-sonnet-4-6"
9463
+ ],
9464
+ "$comment": "WS-20 (2026-09-16): Console-arm twin of anthropic/<id>; copied structurally, identity fields differ (see catalog-integrity 'console twin' test). Fix wave (scoped re-review, item 3, 2026-09-17): `promptCaching` backfilled here too -- see the sibling `anthropic/<id>` overlay row's own comment for the evidence tier and rationale (I3 tightened the adapter gate to require this declaration per row). — 2026-09-25 refresh: https://platform.claude.com/docs/en/models/sonnet-4-6/overview — actual Claude API wire model ID claude-sonnet-4-6 (catalog dotted family-first key is intentionally mapped by daemon). https://platform.claude.com/docs/en/build-with-claude/effort — output_config.effort values low, medium, high, max, default high. https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — adaptive thinking defaults off; enabled/budget_tokens remains accepted but deprecated; disabled turns off. https://platform.claude.com/docs/en/about-claude/model-deprecations — retirement floor February 17, 2027; a floor is not a scheduled deprecation. Thinking blocks carry opaque signatures and must be replayed unchanged; Fable 5.1 and Opus 5.5 additionally bind them to the preceding system/tools/messages prefix. WS-23 (2026-09-25): alias `claude-sonnet-4-6` is the vendor's own API id for this model (its model overview page); a transcript the claude binary wrote records that dashed id, and without the alias it resolved to no row, so an old session's thinking was stripped into `<recovered_reasoning>` text on resume. The key and upstream id stay dotted (a stored-tag migration is out of scope); the adapter already sends the dashed id on the wire. ",
8657
9465
  "endpoints": [
8658
9466
  "chat"
8659
9467
  ],
@@ -8764,7 +9572,14 @@
8764
9572
  "observedAt": "2026-09-19T00:00:00Z"
8765
9573
  },
8766
9574
  "unsupportedParameters": [],
8767
- "status": "candidate"
9575
+ "status": "candidate",
9576
+ "deferredToolLoading": {
9577
+ "value": true,
9578
+ "source": "official-doc",
9579
+ "confidence": "declared",
9580
+ "observedAt": "2026-09-25T18:30:00Z",
9581
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
9582
+ }
8768
9583
  },
8769
9584
  {
8770
9585
  "key": "console/claude-sonnet-5",
@@ -8934,7 +9749,14 @@
8934
9749
  "top_k",
8935
9750
  "thinking.type.enabled"
8936
9751
  ],
8937
- "status": "candidate"
9752
+ "status": "candidate",
9753
+ "assistantPrefill": {
9754
+ "value": false,
9755
+ "source": "official-doc",
9756
+ "confidence": "declared",
9757
+ "observedAt": "2026-09-26T00:00:00Z",
9758
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
9759
+ }
8938
9760
  },
8939
9761
  {
8940
9762
  "key": "openai/gpt-5.6",
@@ -9047,7 +9869,35 @@
9047
9869
  "observedAt": "2026-09-25T10:21:48Z"
9048
9870
  },
9049
9871
  "unsupportedParameters": [],
9050
- "status": "candidate"
9872
+ "status": "candidate",
9873
+ "promptCacheKey": {
9874
+ "value": true,
9875
+ "source": "official-doc",
9876
+ "confidence": "declared",
9877
+ "observedAt": "2026-09-25T19:30:00Z",
9878
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
9879
+ },
9880
+ "clientToolSearch": {
9881
+ "value": true,
9882
+ "source": "official-doc",
9883
+ "confidence": "declared",
9884
+ "observedAt": "2026-09-26T00:00:00Z",
9885
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — \"Only gpt-5.4 and later models support tool_search\" in the Responses API; client execution: {\"type\":\"tool_search\",\"execution\":\"client\",description,parameters}, tool_search_call -> tool_search_output {call_id, execution:\"client\", status, tools}, deferred functions keep defer_loading:true, optionally inside {\"type\":\"namespace\",name,description,tools}. Retrieved 2026-09-26."
9886
+ },
9887
+ "additionalToolsItem": {
9888
+ "value": true,
9889
+ "source": "official-doc",
9890
+ "confidence": "declared",
9891
+ "observedAt": "2026-09-26T00:00:00Z",
9892
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — {\"type\":\"additional_tools\",\"role\":\"developer\",\"tools\":[...]}: \"Tools in an additional_tools item become available only after that item appears in the input\"; its position is kept on replay. The page names no model list, so it is set only on the rows the same page documents tool_search for (GPT-5.4 and later). NOT on codex-oauth: codex-rs sends one only at input[0] (core/src/client.rs:910-941), never mid-conversation -- the live probe decides. Retrieved 2026-09-26."
9893
+ },
9894
+ "allowedToolsChoice": {
9895
+ "value": true,
9896
+ "source": "official-doc",
9897
+ "confidence": "declared",
9898
+ "observedAt": "2026-09-26T00:00:00Z",
9899
+ "sourceRef": "https://developers.openai.com/api/docs/guides/function-calling — tool_choice {\"type\":\"allowed_tools\",\"mode\":\"auto\"|\"required\",\"tools\":[{\"type\":\"function\",\"name\":…}]}: \"make only a subset of tools available across model requests, but not modify the list of tools you pass in, so you can maximize savings from prompt caching\"; \"When you use tool search, tool_choice still applies to the tools that are currently callable in the turn.\" No model list on the page; set on the same GPT-5.4+ rows. NOT on codex-oauth: codex-rs always sends tool_choice \"auto\" (core/src/client.rs:1004) and its allowed_tools is a client-side filter (ext/extension-api/src/tool_policy.rs:14-36) -- the live probe decides. Retrieved 2026-09-26."
9900
+ }
9051
9901
  },
9052
9902
  {
9053
9903
  "key": "openai/gpt-4.1-mini",
@@ -9126,7 +9976,14 @@
9126
9976
  "observedAt": "2026-09-19T00:00:00Z"
9127
9977
  },
9128
9978
  "unsupportedParameters": [],
9129
- "status": "candidate"
9979
+ "status": "candidate",
9980
+ "promptCacheKey": {
9981
+ "value": true,
9982
+ "source": "official-doc",
9983
+ "confidence": "declared",
9984
+ "observedAt": "2026-09-25T19:30:00Z",
9985
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
9986
+ }
9130
9987
  },
9131
9988
  {
9132
9989
  "key": "openai/gpt-4.1-nano",
@@ -9212,7 +10069,14 @@
9212
10069
  "observedAt": "2026-09-19T00:00:00Z"
9213
10070
  },
9214
10071
  "unsupportedParameters": [],
9215
- "status": "candidate"
10072
+ "status": "candidate",
10073
+ "promptCacheKey": {
10074
+ "value": true,
10075
+ "source": "official-doc",
10076
+ "confidence": "declared",
10077
+ "observedAt": "2026-09-25T19:30:00Z",
10078
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
10079
+ }
9216
10080
  },
9217
10081
  {
9218
10082
  "key": "openai/gpt-4o",
@@ -9291,7 +10155,14 @@
9291
10155
  "observedAt": "2026-09-19T00:00:00Z"
9292
10156
  },
9293
10157
  "unsupportedParameters": [],
9294
- "status": "candidate"
10158
+ "status": "candidate",
10159
+ "promptCacheKey": {
10160
+ "value": true,
10161
+ "source": "official-doc",
10162
+ "confidence": "declared",
10163
+ "observedAt": "2026-09-25T19:30:00Z",
10164
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
10165
+ }
9295
10166
  },
9296
10167
  {
9297
10168
  "key": "openai/gpt-4o-2024-11-20",
@@ -9370,7 +10241,14 @@
9370
10241
  "observedAt": "2026-09-19T00:00:00Z"
9371
10242
  },
9372
10243
  "unsupportedParameters": [],
9373
- "status": "candidate"
10244
+ "status": "candidate",
10245
+ "promptCacheKey": {
10246
+ "value": true,
10247
+ "source": "official-doc",
10248
+ "confidence": "declared",
10249
+ "observedAt": "2026-09-25T19:30:00Z",
10250
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
10251
+ }
9374
10252
  },
9375
10253
  {
9376
10254
  "key": "openai/gpt-4o-mini",
@@ -9449,7 +10327,14 @@
9449
10327
  "observedAt": "2026-09-19T00:00:00Z"
9450
10328
  },
9451
10329
  "unsupportedParameters": [],
9452
- "status": "candidate"
10330
+ "status": "candidate",
10331
+ "promptCacheKey": {
10332
+ "value": true,
10333
+ "source": "official-doc",
10334
+ "confidence": "declared",
10335
+ "observedAt": "2026-09-25T19:30:00Z",
10336
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
10337
+ }
9453
10338
  },
9454
10339
  {
9455
10340
  "key": "openai/gpt-5.4",
@@ -9553,7 +10438,35 @@
9553
10438
  "observedAt": "2026-09-19T00:00:00Z"
9554
10439
  },
9555
10440
  "unsupportedParameters": [],
9556
- "status": "candidate"
10441
+ "status": "candidate",
10442
+ "promptCacheKey": {
10443
+ "value": true,
10444
+ "source": "official-doc",
10445
+ "confidence": "declared",
10446
+ "observedAt": "2026-09-25T19:30:00Z",
10447
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
10448
+ },
10449
+ "clientToolSearch": {
10450
+ "value": true,
10451
+ "source": "official-doc",
10452
+ "confidence": "declared",
10453
+ "observedAt": "2026-09-26T00:00:00Z",
10454
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — \"Only gpt-5.4 and later models support tool_search\" in the Responses API; client execution: {\"type\":\"tool_search\",\"execution\":\"client\",description,parameters}, tool_search_call -> tool_search_output {call_id, execution:\"client\", status, tools}, deferred functions keep defer_loading:true, optionally inside {\"type\":\"namespace\",name,description,tools}. Retrieved 2026-09-26."
10455
+ },
10456
+ "additionalToolsItem": {
10457
+ "value": true,
10458
+ "source": "official-doc",
10459
+ "confidence": "declared",
10460
+ "observedAt": "2026-09-26T00:00:00Z",
10461
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — {\"type\":\"additional_tools\",\"role\":\"developer\",\"tools\":[...]}: \"Tools in an additional_tools item become available only after that item appears in the input\"; its position is kept on replay. The page names no model list, so it is set only on the rows the same page documents tool_search for (GPT-5.4 and later). NOT on codex-oauth: codex-rs sends one only at input[0] (core/src/client.rs:910-941), never mid-conversation -- the live probe decides. Retrieved 2026-09-26."
10462
+ },
10463
+ "allowedToolsChoice": {
10464
+ "value": true,
10465
+ "source": "official-doc",
10466
+ "confidence": "declared",
10467
+ "observedAt": "2026-09-26T00:00:00Z",
10468
+ "sourceRef": "https://developers.openai.com/api/docs/guides/function-calling — tool_choice {\"type\":\"allowed_tools\",\"mode\":\"auto\"|\"required\",\"tools\":[{\"type\":\"function\",\"name\":…}]}: \"make only a subset of tools available across model requests, but not modify the list of tools you pass in, so you can maximize savings from prompt caching\"; \"When you use tool search, tool_choice still applies to the tools that are currently callable in the turn.\" No model list on the page; set on the same GPT-5.4+ rows. NOT on codex-oauth: codex-rs always sends tool_choice \"auto\" (core/src/client.rs:1004) and its allowed_tools is a client-side filter (ext/extension-api/src/tool_policy.rs:14-36) -- the live probe decides. Retrieved 2026-09-26."
10469
+ }
9557
10470
  },
9558
10471
  {
9559
10472
  "key": "openai/gpt-5.4-mini",
@@ -9664,7 +10577,35 @@
9664
10577
  "observedAt": "2026-09-19T00:00:00Z"
9665
10578
  },
9666
10579
  "unsupportedParameters": [],
9667
- "status": "candidate"
10580
+ "status": "candidate",
10581
+ "promptCacheKey": {
10582
+ "value": true,
10583
+ "source": "official-doc",
10584
+ "confidence": "declared",
10585
+ "observedAt": "2026-09-25T19:30:00Z",
10586
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
10587
+ },
10588
+ "clientToolSearch": {
10589
+ "value": true,
10590
+ "source": "official-doc",
10591
+ "confidence": "declared",
10592
+ "observedAt": "2026-09-26T00:00:00Z",
10593
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — \"Only gpt-5.4 and later models support tool_search\" in the Responses API; client execution: {\"type\":\"tool_search\",\"execution\":\"client\",description,parameters}, tool_search_call -> tool_search_output {call_id, execution:\"client\", status, tools}, deferred functions keep defer_loading:true, optionally inside {\"type\":\"namespace\",name,description,tools}. Retrieved 2026-09-26."
10594
+ },
10595
+ "additionalToolsItem": {
10596
+ "value": true,
10597
+ "source": "official-doc",
10598
+ "confidence": "declared",
10599
+ "observedAt": "2026-09-26T00:00:00Z",
10600
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — {\"type\":\"additional_tools\",\"role\":\"developer\",\"tools\":[...]}: \"Tools in an additional_tools item become available only after that item appears in the input\"; its position is kept on replay. The page names no model list, so it is set only on the rows the same page documents tool_search for (GPT-5.4 and later). NOT on codex-oauth: codex-rs sends one only at input[0] (core/src/client.rs:910-941), never mid-conversation -- the live probe decides. Retrieved 2026-09-26."
10601
+ },
10602
+ "allowedToolsChoice": {
10603
+ "value": true,
10604
+ "source": "official-doc",
10605
+ "confidence": "declared",
10606
+ "observedAt": "2026-09-26T00:00:00Z",
10607
+ "sourceRef": "https://developers.openai.com/api/docs/guides/function-calling — tool_choice {\"type\":\"allowed_tools\",\"mode\":\"auto\"|\"required\",\"tools\":[{\"type\":\"function\",\"name\":…}]}: \"make only a subset of tools available across model requests, but not modify the list of tools you pass in, so you can maximize savings from prompt caching\"; \"When you use tool search, tool_choice still applies to the tools that are currently callable in the turn.\" No model list on the page; set on the same GPT-5.4+ rows. NOT on codex-oauth: codex-rs always sends tool_choice \"auto\" (core/src/client.rs:1004) and its allowed_tools is a client-side filter (ext/extension-api/src/tool_policy.rs:14-36) -- the live probe decides. Retrieved 2026-09-26."
10608
+ }
9668
10609
  },
9669
10610
  {
9670
10611
  "key": "openai/gpt-5.4-nano",
@@ -9775,7 +10716,35 @@
9775
10716
  "observedAt": "2026-09-19T00:00:00Z"
9776
10717
  },
9777
10718
  "unsupportedParameters": [],
9778
- "status": "candidate"
10719
+ "status": "candidate",
10720
+ "promptCacheKey": {
10721
+ "value": true,
10722
+ "source": "official-doc",
10723
+ "confidence": "declared",
10724
+ "observedAt": "2026-09-25T19:30:00Z",
10725
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
10726
+ },
10727
+ "clientToolSearch": {
10728
+ "value": true,
10729
+ "source": "official-doc",
10730
+ "confidence": "declared",
10731
+ "observedAt": "2026-09-26T00:00:00Z",
10732
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — \"Only gpt-5.4 and later models support tool_search\" in the Responses API; client execution: {\"type\":\"tool_search\",\"execution\":\"client\",description,parameters}, tool_search_call -> tool_search_output {call_id, execution:\"client\", status, tools}, deferred functions keep defer_loading:true, optionally inside {\"type\":\"namespace\",name,description,tools}. Retrieved 2026-09-26."
10733
+ },
10734
+ "additionalToolsItem": {
10735
+ "value": true,
10736
+ "source": "official-doc",
10737
+ "confidence": "declared",
10738
+ "observedAt": "2026-09-26T00:00:00Z",
10739
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — {\"type\":\"additional_tools\",\"role\":\"developer\",\"tools\":[...]}: \"Tools in an additional_tools item become available only after that item appears in the input\"; its position is kept on replay. The page names no model list, so it is set only on the rows the same page documents tool_search for (GPT-5.4 and later). NOT on codex-oauth: codex-rs sends one only at input[0] (core/src/client.rs:910-941), never mid-conversation -- the live probe decides. Retrieved 2026-09-26."
10740
+ },
10741
+ "allowedToolsChoice": {
10742
+ "value": true,
10743
+ "source": "official-doc",
10744
+ "confidence": "declared",
10745
+ "observedAt": "2026-09-26T00:00:00Z",
10746
+ "sourceRef": "https://developers.openai.com/api/docs/guides/function-calling — tool_choice {\"type\":\"allowed_tools\",\"mode\":\"auto\"|\"required\",\"tools\":[{\"type\":\"function\",\"name\":…}]}: \"make only a subset of tools available across model requests, but not modify the list of tools you pass in, so you can maximize savings from prompt caching\"; \"When you use tool search, tool_choice still applies to the tools that are currently callable in the turn.\" No model list on the page; set on the same GPT-5.4+ rows. NOT on codex-oauth: codex-rs always sends tool_choice \"auto\" (core/src/client.rs:1004) and its allowed_tools is a client-side filter (ext/extension-api/src/tool_policy.rs:14-36) -- the live probe decides. Retrieved 2026-09-26."
10747
+ }
9779
10748
  },
9780
10749
  {
9781
10750
  "key": "openai/gpt-5.4-pro",
@@ -9861,7 +10830,35 @@
9861
10830
  "observedAt": "2026-09-19T00:00:00Z"
9862
10831
  },
9863
10832
  "unsupportedParameters": [],
9864
- "status": "candidate"
10833
+ "status": "candidate",
10834
+ "promptCacheKey": {
10835
+ "value": true,
10836
+ "source": "official-doc",
10837
+ "confidence": "declared",
10838
+ "observedAt": "2026-09-25T19:30:00Z",
10839
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
10840
+ },
10841
+ "clientToolSearch": {
10842
+ "value": true,
10843
+ "source": "official-doc",
10844
+ "confidence": "declared",
10845
+ "observedAt": "2026-09-26T00:00:00Z",
10846
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — \"Only gpt-5.4 and later models support tool_search\" in the Responses API; client execution: {\"type\":\"tool_search\",\"execution\":\"client\",description,parameters}, tool_search_call -> tool_search_output {call_id, execution:\"client\", status, tools}, deferred functions keep defer_loading:true, optionally inside {\"type\":\"namespace\",name,description,tools}. Retrieved 2026-09-26."
10847
+ },
10848
+ "additionalToolsItem": {
10849
+ "value": true,
10850
+ "source": "official-doc",
10851
+ "confidence": "declared",
10852
+ "observedAt": "2026-09-26T00:00:00Z",
10853
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — {\"type\":\"additional_tools\",\"role\":\"developer\",\"tools\":[...]}: \"Tools in an additional_tools item become available only after that item appears in the input\"; its position is kept on replay. The page names no model list, so it is set only on the rows the same page documents tool_search for (GPT-5.4 and later). NOT on codex-oauth: codex-rs sends one only at input[0] (core/src/client.rs:910-941), never mid-conversation -- the live probe decides. Retrieved 2026-09-26."
10854
+ },
10855
+ "allowedToolsChoice": {
10856
+ "value": true,
10857
+ "source": "official-doc",
10858
+ "confidence": "declared",
10859
+ "observedAt": "2026-09-26T00:00:00Z",
10860
+ "sourceRef": "https://developers.openai.com/api/docs/guides/function-calling — tool_choice {\"type\":\"allowed_tools\",\"mode\":\"auto\"|\"required\",\"tools\":[{\"type\":\"function\",\"name\":…}]}: \"make only a subset of tools available across model requests, but not modify the list of tools you pass in, so you can maximize savings from prompt caching\"; \"When you use tool search, tool_choice still applies to the tools that are currently callable in the turn.\" No model list on the page; set on the same GPT-5.4+ rows. NOT on codex-oauth: codex-rs always sends tool_choice \"auto\" (core/src/client.rs:1004) and its allowed_tools is a client-side filter (ext/extension-api/src/tool_policy.rs:14-36) -- the live probe decides. Retrieved 2026-09-26."
10861
+ }
9865
10862
  },
9866
10863
  {
9867
10864
  "key": "openai/gpt-5.5",
@@ -9965,7 +10962,35 @@
9965
10962
  "observedAt": "2026-09-19T00:00:00Z"
9966
10963
  },
9967
10964
  "unsupportedParameters": [],
9968
- "status": "candidate"
10965
+ "status": "candidate",
10966
+ "promptCacheKey": {
10967
+ "value": true,
10968
+ "source": "official-doc",
10969
+ "confidence": "declared",
10970
+ "observedAt": "2026-09-25T19:30:00Z",
10971
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
10972
+ },
10973
+ "clientToolSearch": {
10974
+ "value": true,
10975
+ "source": "official-doc",
10976
+ "confidence": "declared",
10977
+ "observedAt": "2026-09-26T00:00:00Z",
10978
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — \"Only gpt-5.4 and later models support tool_search\" in the Responses API; client execution: {\"type\":\"tool_search\",\"execution\":\"client\",description,parameters}, tool_search_call -> tool_search_output {call_id, execution:\"client\", status, tools}, deferred functions keep defer_loading:true, optionally inside {\"type\":\"namespace\",name,description,tools}. Retrieved 2026-09-26."
10979
+ },
10980
+ "additionalToolsItem": {
10981
+ "value": true,
10982
+ "source": "official-doc",
10983
+ "confidence": "declared",
10984
+ "observedAt": "2026-09-26T00:00:00Z",
10985
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — {\"type\":\"additional_tools\",\"role\":\"developer\",\"tools\":[...]}: \"Tools in an additional_tools item become available only after that item appears in the input\"; its position is kept on replay. The page names no model list, so it is set only on the rows the same page documents tool_search for (GPT-5.4 and later). NOT on codex-oauth: codex-rs sends one only at input[0] (core/src/client.rs:910-941), never mid-conversation -- the live probe decides. Retrieved 2026-09-26."
10986
+ },
10987
+ "allowedToolsChoice": {
10988
+ "value": true,
10989
+ "source": "official-doc",
10990
+ "confidence": "declared",
10991
+ "observedAt": "2026-09-26T00:00:00Z",
10992
+ "sourceRef": "https://developers.openai.com/api/docs/guides/function-calling — tool_choice {\"type\":\"allowed_tools\",\"mode\":\"auto\"|\"required\",\"tools\":[{\"type\":\"function\",\"name\":…}]}: \"make only a subset of tools available across model requests, but not modify the list of tools you pass in, so you can maximize savings from prompt caching\"; \"When you use tool search, tool_choice still applies to the tools that are currently callable in the turn.\" No model list on the page; set on the same GPT-5.4+ rows. NOT on codex-oauth: codex-rs always sends tool_choice \"auto\" (core/src/client.rs:1004) and its allowed_tools is a client-side filter (ext/extension-api/src/tool_policy.rs:14-36) -- the live probe decides. Retrieved 2026-09-26."
10993
+ }
9969
10994
  },
9970
10995
  {
9971
10996
  "key": "openai/gpt-5.5-pro",
@@ -10058,7 +11083,35 @@
10058
11083
  "observedAt": "2026-09-19T00:00:00Z"
10059
11084
  },
10060
11085
  "unsupportedParameters": [],
10061
- "status": "candidate"
11086
+ "status": "candidate",
11087
+ "promptCacheKey": {
11088
+ "value": true,
11089
+ "source": "official-doc",
11090
+ "confidence": "declared",
11091
+ "observedAt": "2026-09-25T19:30:00Z",
11092
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
11093
+ },
11094
+ "clientToolSearch": {
11095
+ "value": true,
11096
+ "source": "official-doc",
11097
+ "confidence": "declared",
11098
+ "observedAt": "2026-09-26T00:00:00Z",
11099
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — \"Only gpt-5.4 and later models support tool_search\" in the Responses API; client execution: {\"type\":\"tool_search\",\"execution\":\"client\",description,parameters}, tool_search_call -> tool_search_output {call_id, execution:\"client\", status, tools}, deferred functions keep defer_loading:true, optionally inside {\"type\":\"namespace\",name,description,tools}. Retrieved 2026-09-26."
11100
+ },
11101
+ "additionalToolsItem": {
11102
+ "value": true,
11103
+ "source": "official-doc",
11104
+ "confidence": "declared",
11105
+ "observedAt": "2026-09-26T00:00:00Z",
11106
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — {\"type\":\"additional_tools\",\"role\":\"developer\",\"tools\":[...]}: \"Tools in an additional_tools item become available only after that item appears in the input\"; its position is kept on replay. The page names no model list, so it is set only on the rows the same page documents tool_search for (GPT-5.4 and later). NOT on codex-oauth: codex-rs sends one only at input[0] (core/src/client.rs:910-941), never mid-conversation -- the live probe decides. Retrieved 2026-09-26."
11107
+ },
11108
+ "allowedToolsChoice": {
11109
+ "value": true,
11110
+ "source": "official-doc",
11111
+ "confidence": "declared",
11112
+ "observedAt": "2026-09-26T00:00:00Z",
11113
+ "sourceRef": "https://developers.openai.com/api/docs/guides/function-calling — tool_choice {\"type\":\"allowed_tools\",\"mode\":\"auto\"|\"required\",\"tools\":[{\"type\":\"function\",\"name\":…}]}: \"make only a subset of tools available across model requests, but not modify the list of tools you pass in, so you can maximize savings from prompt caching\"; \"When you use tool search, tool_choice still applies to the tools that are currently callable in the turn.\" No model list on the page; set on the same GPT-5.4+ rows. NOT on codex-oauth: codex-rs always sends tool_choice \"auto\" (core/src/client.rs:1004) and its allowed_tools is a client-side filter (ext/extension-api/src/tool_policy.rs:14-36) -- the live probe decides. Retrieved 2026-09-26."
11114
+ }
10062
11115
  },
10063
11116
  {
10064
11117
  "key": "openai/o3",
@@ -10159,7 +11212,14 @@
10159
11212
  "observedAt": "2026-09-19T00:00:00Z"
10160
11213
  },
10161
11214
  "unsupportedParameters": [],
10162
- "status": "candidate"
11215
+ "status": "candidate",
11216
+ "promptCacheKey": {
11217
+ "value": true,
11218
+ "source": "official-doc",
11219
+ "confidence": "declared",
11220
+ "observedAt": "2026-09-25T19:30:00Z",
11221
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
11222
+ }
10163
11223
  },
10164
11224
  {
10165
11225
  "key": "openai/o3-mini",
@@ -10252,7 +11312,14 @@
10252
11312
  "observedAt": "2026-09-19T00:00:00Z"
10253
11313
  },
10254
11314
  "unsupportedParameters": [],
10255
- "status": "candidate"
11315
+ "status": "candidate",
11316
+ "promptCacheKey": {
11317
+ "value": true,
11318
+ "source": "official-doc",
11319
+ "confidence": "declared",
11320
+ "observedAt": "2026-09-25T19:30:00Z",
11321
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
11322
+ }
10256
11323
  },
10257
11324
  {
10258
11325
  "key": "openrouter/openai/gpt-5.4",
@@ -20760,9 +21827,10 @@
20760
21827
  "upstreamId": "grok-4.7",
20761
21828
  "displayName": "Grok 4.7",
20762
21829
  "aliases": [],
20763
- "$comment": "Model and aliases documented at https://docs.x.ai/developers/models/grok-4.7. The catalog's xai provider currently declares Chat Completions; xAI also offers Responses. No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. https://docs.x.ai/developers/model-capabilities/text/reasoning says presencePenalty, frequencyPenalty, and stop return an error on reasoning models (snake_case names recorded for the Chat Completions wire). Chat Completions does not carry encrypted reasoning ciphertext; Grok 4.7 Responses does, so continuation is 'none' for this chat provider. — The vendor also serves this model on its OpenAI Responses endpoint (same host and key); `endpoints` lists only what this row's Chat Completions adapter routes, so `responses` is omitted until adapter-level Responses support lands (tracked follow-up, 2026-09-25).",
21830
+ "$comment": "Model and aliases documented at https://docs.x.ai/developers/models/grok-4.7. The catalog's xai provider declared Chat Completions until WS-23 and now speaks Responses (same host and key). No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. https://docs.x.ai/developers/model-capabilities/text/reasoning says presencePenalty, frequencyPenalty, and stop return an error on reasoning models (snake_case names recorded for the Chat Completions wire). Continuation (WS-23): on Responses the reasoning item comes back with `encrypted_content` when `include: [\"reasoning.encrypted_content\"]` is sent, and is passed back unchanged in the next request's `input` (https://docs.x.ai/developers/model-capabilities/text/reasoning, \"Encrypted Reasoning Content\"), so `continuation` is `opaque-provider-state`; Chat Completions \"has no field for the ciphertext\" (same page). The penalty/stop names stay recorded but are moot on Responses, which Winter never sends them on. — WS-23 (2026-09-25): the `xai` provider now routes through `winter.openai-responses`, so `endpoints` lists both surfaces the family routes (the `openai/*` convention) rather than only Chat Completions. Readable state (WS-23): `summary`, grok-4.7 only — xAI documents summarizations for this model and no other. `grok-4.7` also returns `encrypted_content` on every Responses response \"whether or not `include` lists it\" (reasoning page, \"Always returned for grok-4.7\"). Which SSE event carries the summary text is unconfirmed (xAI's own OpenAI-SDK example reads both `response.reasoning_text.delta` and `response.reasoning_summary_text.delta`); Winter's mapper surfaces both as this row's summary since WS-23 fix round 1, and the probe's event counts show which one xAI sends.",
20764
21831
  "endpoints": [
20765
- "chat"
21832
+ "chat",
21833
+ "responses"
20766
21834
  ],
20767
21835
  "contextWindow": {
20768
21836
  "value": 500000,
@@ -20832,8 +21900,29 @@
20832
21900
  "high",
20833
21901
  "xhigh"
20834
21902
  ],
20835
- "continuation": "plaintext",
20836
- "defaultEffort": "high"
21903
+ "continuation": "opaque-provider-state",
21904
+ "defaultEffort": "high",
21905
+ "readableState": {
21906
+ "value": "summary",
21907
+ "source": "official-doc",
21908
+ "sourceRef": "https://docs.x.ai/developers/model-capabilities/text/reasoning — \"For `grok-4.7`, we expose summarizations of the model's internal reasoning\" (Summarized Reasoning Content); https://docs.x.ai/developers/rest-api-reference/inference/responses — the example reasoning output item carries `summary: [{ type: \"summary_text\", … }]`",
21909
+ "confidence": "declared",
21910
+ "observedAt": "2026-09-25T17:09:48Z"
21911
+ },
21912
+ "summaryRequest": {
21913
+ "value": {
21914
+ "field": "reasoning.summary",
21915
+ "values": [
21916
+ "detailed",
21917
+ "auto",
21918
+ "concise"
21919
+ ]
21920
+ },
21921
+ "source": "official-doc",
21922
+ "sourceRef": "https://docs.x.ai/developers/rest-api-reference/inference/responses — `reasoning.summary`: \"Possible values are `auto`, `concise` and `detailed`. Only included for compatibility. The model shall always return `detailed`.\" `detailed` is listed FIRST because the adapter sends the first value, and it is the one the model returns regardless",
21923
+ "confidence": "declared",
21924
+ "observedAt": "2026-09-25T17:09:48Z"
21925
+ }
20837
21926
  },
20838
21927
  "pricing": {
20839
21928
  "value": {
@@ -20862,9 +21951,10 @@
20862
21951
  "grok-4.5-latest",
20863
21952
  "grok-build-latest"
20864
21953
  ],
20865
- "$comment": "Model and aliases documented at https://docs.x.ai/developers/models/grok-4.5. The catalog's xai provider currently declares Chat Completions; xAI also offers Responses. No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. https://docs.x.ai/developers/model-capabilities/text/reasoning says presencePenalty, frequencyPenalty, and stop return an error on reasoning models (snake_case names recorded for the Chat Completions wire). Chat Completions does not carry encrypted reasoning ciphertext; Grok 4.7 Responses does, so continuation is 'none' for this chat provider. Conflict: https://docs.x.ai/developers/models/grok-4.5 lists xhigh on its detail page, but https://docs.x.ai/developers/model-capabilities/text/reasoning says xhigh on 4.5 is treated as high; efforts omit xhigh because it is not a distinct behavior. — The vendor also serves this model on its OpenAI Responses endpoint (same host and key); `endpoints` lists only what this row's Chat Completions adapter routes, so `responses` is omitted until adapter-level Responses support lands (tracked follow-up, 2026-09-25).",
21954
+ "$comment": "Model and aliases documented at https://docs.x.ai/developers/models/grok-4.5. The catalog's xai provider declared Chat Completions until WS-23 and now speaks Responses (same host and key). No model-specific max output token cap was found. xAI's models page says logprobs/top_logprobs on grok-4.20 and newer are silently ignored, not rejected (https://docs.x.ai/developers/models). Legacy Anthropic-compatible POST /v1/messages remains documented but fully deprecated (https://docs.x.ai/developers/rest-api-reference/inference/legacy); unauthenticated POST today returned 401 after validating the request, so route exists but successful inference was not verified. POST /anthropic returned 404. https://docs.x.ai/developers/model-capabilities/text/reasoning says presencePenalty, frequencyPenalty, and stop return an error on reasoning models (snake_case names recorded for the Chat Completions wire). Continuation (WS-23): on Responses the reasoning item comes back with `encrypted_content` when `include: [\"reasoning.encrypted_content\"]` is sent, and is passed back unchanged in the next request's `input` (https://docs.x.ai/developers/model-capabilities/text/reasoning, \"Encrypted Reasoning Content\"), so `continuation` is `opaque-provider-state`; Chat Completions \"has no field for the ciphertext\" (same page). The penalty/stop names stay recorded but are moot on Responses, which Winter never sends them on. Conflict: https://docs.x.ai/developers/models/grok-4.5 lists xhigh on its detail page, but https://docs.x.ai/developers/model-capabilities/text/reasoning says xhigh on 4.5 is treated as high; efforts omit xhigh because it is not a distinct behavior. — WS-23 (2026-09-25): the `xai` provider now routes through `winter.openai-responses`, so `endpoints` lists both surfaces the family routes (the `openai/*` convention) rather than only Chat Completions.",
20866
21955
  "endpoints": [
20867
- "chat"
21956
+ "chat",
21957
+ "responses"
20868
21958
  ],
20869
21959
  "contextWindow": {
20870
21960
  "value": 500000,
@@ -20933,7 +22023,7 @@
20933
22023
  "medium",
20934
22024
  "high"
20935
22025
  ],
20936
- "continuation": "plaintext",
22026
+ "continuation": "opaque-provider-state",
20937
22027
  "defaultEffort": "high"
20938
22028
  },
20939
22029
  "pricing": {
@@ -47374,7 +48464,21 @@
47374
48464
  }
47375
48465
  },
47376
48466
  "unsupportedParameters": [],
47377
- "status": "candidate"
48467
+ "status": "candidate",
48468
+ "promptCacheKey": {
48469
+ "value": true,
48470
+ "source": "official-doc",
48471
+ "confidence": "declared",
48472
+ "observedAt": "2026-09-25T19:30:00Z",
48473
+ "sourceRef": "https://github.com/openai/codex/blob/main/codex-rs/core/src/client.rs — Codex (the vendor's own client for this backend) sets prompt_cache_key on every Responses request, to the session id (or source:parent_thread_id for internal sessions); https://developers.openai.com/api/docs/guides/prompt-caching documents the field."
48474
+ },
48475
+ "clientToolSearch": {
48476
+ "value": true,
48477
+ "source": "upstream-static",
48478
+ "confidence": "declared",
48479
+ "observedAt": "2026-09-26T00:00:00Z",
48480
+ "sourceRef": "codex-rs models-manager/models.json (cloned 25270df, 2026-09-26): supports_search_tool is true on every bundled model; core/src/tools/spec_plan.rs:653-666 turns on the client tool_search (tools/src/tool_search.rs:84-110, core/src/tools/handlers/tool_search_spec.rs:98) when the provider's namespace capability is on (default true) -- the vendor's own client sends it to chatgpt.com/backend-api/codex."
48481
+ }
47378
48482
  },
47379
48483
  {
47380
48484
  "key": "codex-oauth/gpt-6-luna",
@@ -47482,7 +48586,21 @@
47482
48586
  }
47483
48587
  },
47484
48588
  "unsupportedParameters": [],
47485
- "status": "candidate"
48589
+ "status": "candidate",
48590
+ "promptCacheKey": {
48591
+ "value": true,
48592
+ "source": "official-doc",
48593
+ "confidence": "declared",
48594
+ "observedAt": "2026-09-25T19:30:00Z",
48595
+ "sourceRef": "https://github.com/openai/codex/blob/main/codex-rs/core/src/client.rs — Codex (the vendor's own client for this backend) sets prompt_cache_key on every Responses request, to the session id (or source:parent_thread_id for internal sessions); https://developers.openai.com/api/docs/guides/prompt-caching documents the field."
48596
+ },
48597
+ "clientToolSearch": {
48598
+ "value": true,
48599
+ "source": "upstream-static",
48600
+ "confidence": "declared",
48601
+ "observedAt": "2026-09-26T00:00:00Z",
48602
+ "sourceRef": "codex-rs models-manager/models.json (cloned 25270df, 2026-09-26): supports_search_tool is true on every bundled model; core/src/tools/spec_plan.rs:653-666 turns on the client tool_search (tools/src/tool_search.rs:84-110, core/src/tools/handlers/tool_search_spec.rs:98) when the provider's namespace capability is on (default true) -- the vendor's own client sends it to chatgpt.com/backend-api/codex."
48603
+ }
47486
48604
  },
47487
48605
  {
47488
48606
  "key": "openai/gpt-6-sol",
@@ -47617,6 +48735,15 @@
47617
48735
  "sourceRef": "continuity report §5.1/§5.3 for own-state acceptance — the Responses surface replays its own completed `reasoning.encrypted_content` items to the same model. WS-13 §8.2: \"OpenAI-compatible\" is never the capability test, so this key shares NO domain with any other row.",
47618
48736
  "confidence": "declared",
47619
48737
  "observedAt": "2026-09-06T00:00:00Z"
48738
+ },
48739
+ "perMessageEffort": {
48740
+ "value": {
48741
+ "item": "configuration_update"
48742
+ },
48743
+ "source": "official-doc",
48744
+ "confidence": "declared",
48745
+ "observedAt": "2026-09-26T00:00:00Z",
48746
+ "sourceRef": "https://developers.openai.com/api/docs/guides/reasoning — \"Configuration updates are supported by the GPT-6 model family in standard, single-agent mode. They change only reasoning effort.\" Shape {\"type\":\"configuration_update\",\"reasoning\":{\"effort\":…}}, placed \"before the next user message in the input array\"; \"the API rejects adjacent updates\"; \"The response's reasoning.effort continues to report the request-level setting\"; with store:false, replay updates \"in their original positions\". Retrieved 2026-09-26. NOT set on codex-oauth/gpt-6-* (codex-rs enables it only behind an off-by-default feature, backend acceptance unprobed — scripts/probe-openai-midconv.ts decides) nor on azure-openai (undocumented there)."
47620
48747
  }
47621
48748
  },
47622
48749
  "pricing": {
@@ -47632,7 +48759,35 @@
47632
48759
  "observedAt": "2026-09-25T10:21:48Z"
47633
48760
  },
47634
48761
  "unsupportedParameters": [],
47635
- "status": "candidate"
48762
+ "status": "candidate",
48763
+ "promptCacheKey": {
48764
+ "value": true,
48765
+ "source": "official-doc",
48766
+ "confidence": "declared",
48767
+ "observedAt": "2026-09-25T19:30:00Z",
48768
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
48769
+ },
48770
+ "clientToolSearch": {
48771
+ "value": true,
48772
+ "source": "official-doc",
48773
+ "confidence": "declared",
48774
+ "observedAt": "2026-09-26T00:00:00Z",
48775
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — \"Only gpt-5.4 and later models support tool_search\" in the Responses API; client execution: {\"type\":\"tool_search\",\"execution\":\"client\",description,parameters}, tool_search_call -> tool_search_output {call_id, execution:\"client\", status, tools}, deferred functions keep defer_loading:true, optionally inside {\"type\":\"namespace\",name,description,tools}. Retrieved 2026-09-26."
48776
+ },
48777
+ "additionalToolsItem": {
48778
+ "value": true,
48779
+ "source": "official-doc",
48780
+ "confidence": "declared",
48781
+ "observedAt": "2026-09-26T00:00:00Z",
48782
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — {\"type\":\"additional_tools\",\"role\":\"developer\",\"tools\":[...]}: \"Tools in an additional_tools item become available only after that item appears in the input\"; its position is kept on replay. The page names no model list, so it is set only on the rows the same page documents tool_search for (GPT-5.4 and later). NOT on codex-oauth: codex-rs sends one only at input[0] (core/src/client.rs:910-941), never mid-conversation -- the live probe decides. Retrieved 2026-09-26."
48783
+ },
48784
+ "allowedToolsChoice": {
48785
+ "value": true,
48786
+ "source": "official-doc",
48787
+ "confidence": "declared",
48788
+ "observedAt": "2026-09-26T00:00:00Z",
48789
+ "sourceRef": "https://developers.openai.com/api/docs/guides/function-calling — tool_choice {\"type\":\"allowed_tools\",\"mode\":\"auto\"|\"required\",\"tools\":[{\"type\":\"function\",\"name\":…}]}: \"make only a subset of tools available across model requests, but not modify the list of tools you pass in, so you can maximize savings from prompt caching\"; \"When you use tool search, tool_choice still applies to the tools that are currently callable in the turn.\" No model list on the page; set on the same GPT-5.4+ rows. NOT on codex-oauth: codex-rs always sends tool_choice \"auto\" (core/src/client.rs:1004) and its allowed_tools is a client-side filter (ext/extension-api/src/tool_policy.rs:14-36) -- the live probe decides. Retrieved 2026-09-26."
48790
+ }
47636
48791
  },
47637
48792
  {
47638
48793
  "key": "openai/gpt-6-luna",
@@ -47767,6 +48922,15 @@
47767
48922
  "sourceRef": "continuity report §5.1/§5.3 for own-state acceptance — the Responses surface replays its own completed `reasoning.encrypted_content` items to the same model. WS-13 §8.2: \"OpenAI-compatible\" is never the capability test, so this key shares NO domain with any other row.",
47768
48923
  "confidence": "declared",
47769
48924
  "observedAt": "2026-09-06T00:00:00Z"
48925
+ },
48926
+ "perMessageEffort": {
48927
+ "value": {
48928
+ "item": "configuration_update"
48929
+ },
48930
+ "source": "official-doc",
48931
+ "confidence": "declared",
48932
+ "observedAt": "2026-09-26T00:00:00Z",
48933
+ "sourceRef": "https://developers.openai.com/api/docs/guides/reasoning — \"Configuration updates are supported by the GPT-6 model family in standard, single-agent mode. They change only reasoning effort.\" Shape {\"type\":\"configuration_update\",\"reasoning\":{\"effort\":…}}, placed \"before the next user message in the input array\"; \"the API rejects adjacent updates\"; \"The response's reasoning.effort continues to report the request-level setting\"; with store:false, replay updates \"in their original positions\". Retrieved 2026-09-26. NOT set on codex-oauth/gpt-6-* (codex-rs enables it only behind an off-by-default feature, backend acceptance unprobed — scripts/probe-openai-midconv.ts decides) nor on azure-openai (undocumented there)."
47770
48934
  }
47771
48935
  },
47772
48936
  "pricing": {
@@ -47782,7 +48946,35 @@
47782
48946
  "observedAt": "2026-09-25T10:21:48Z"
47783
48947
  },
47784
48948
  "unsupportedParameters": [],
47785
- "status": "candidate"
48949
+ "status": "candidate",
48950
+ "promptCacheKey": {
48951
+ "value": true,
48952
+ "source": "official-doc",
48953
+ "confidence": "declared",
48954
+ "observedAt": "2026-09-25T19:30:00Z",
48955
+ "sourceRef": "https://developers.openai.com/api/docs/guides/prompt-caching — the Responses API takes prompt_cache_key: \"Use a stable prompt_cache_key to optimize cache routing for requests that share a reusable prefix\" (pre-GPT-5.6); on GPT-5.6+ routing is automatic and the key is \"optional for separate cache accounting\"."
48956
+ },
48957
+ "clientToolSearch": {
48958
+ "value": true,
48959
+ "source": "official-doc",
48960
+ "confidence": "declared",
48961
+ "observedAt": "2026-09-26T00:00:00Z",
48962
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — \"Only gpt-5.4 and later models support tool_search\" in the Responses API; client execution: {\"type\":\"tool_search\",\"execution\":\"client\",description,parameters}, tool_search_call -> tool_search_output {call_id, execution:\"client\", status, tools}, deferred functions keep defer_loading:true, optionally inside {\"type\":\"namespace\",name,description,tools}. Retrieved 2026-09-26."
48963
+ },
48964
+ "additionalToolsItem": {
48965
+ "value": true,
48966
+ "source": "official-doc",
48967
+ "confidence": "declared",
48968
+ "observedAt": "2026-09-26T00:00:00Z",
48969
+ "sourceRef": "https://developers.openai.com/api/docs/guides/tools-tool-search — {\"type\":\"additional_tools\",\"role\":\"developer\",\"tools\":[...]}: \"Tools in an additional_tools item become available only after that item appears in the input\"; its position is kept on replay. The page names no model list, so it is set only on the rows the same page documents tool_search for (GPT-5.4 and later). NOT on codex-oauth: codex-rs sends one only at input[0] (core/src/client.rs:910-941), never mid-conversation -- the live probe decides. Retrieved 2026-09-26."
48970
+ },
48971
+ "allowedToolsChoice": {
48972
+ "value": true,
48973
+ "source": "official-doc",
48974
+ "confidence": "declared",
48975
+ "observedAt": "2026-09-26T00:00:00Z",
48976
+ "sourceRef": "https://developers.openai.com/api/docs/guides/function-calling — tool_choice {\"type\":\"allowed_tools\",\"mode\":\"auto\"|\"required\",\"tools\":[{\"type\":\"function\",\"name\":…}]}: \"make only a subset of tools available across model requests, but not modify the list of tools you pass in, so you can maximize savings from prompt caching\"; \"When you use tool search, tool_choice still applies to the tools that are currently callable in the turn.\" No model list on the page; set on the same GPT-5.4+ rows. NOT on codex-oauth: codex-rs always sends tool_choice \"auto\" (core/src/client.rs:1004) and its allowed_tools is a client-side filter (ext/extension-api/src/tool_policy.rs:14-36) -- the live probe decides. Retrieved 2026-09-26."
48977
+ }
47786
48978
  },
47787
48979
  {
47788
48980
  "key": "anthropic/claude-opus-5-5",
@@ -47941,6 +49133,15 @@
47941
49133
  "confidence": "declared",
47942
49134
  "observedAt": "2026-09-25T13:00:00Z",
47943
49135
  "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — \"A 400 error says a thinking block signature is invalid\": on Claude Fable 5.1 and Opus 5.5 a replayed thinking block is bound to the conversation (system, tools and earlier messages) and is rejected once that prefix changes (enforced for accounts created on or after 2026-08-31); the documented escape is the `thinking-binding-controls-2026-08-01` beta with `thinking.block_binding.prefix_mismatch_behavior: \"drop_block\"`. See also https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5 (\"Thinking blocks are tied to the model and the conversation\")."
49136
+ },
49137
+ "perMessageEffort": {
49138
+ "value": {
49139
+ "beta": "mid-conversation-output-config-2026-07-01"
49140
+ },
49141
+ "source": "official-doc",
49142
+ "confidence": "declared",
49143
+ "observedAt": "2026-09-25T18:00:00Z",
49144
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/effort#change-effort-mid-conversation-beta — \"On Claude Fable 5.1, Claude Mythos 5.1, Claude Opus 5.5, and Claude Opus 5, use a per-message effort change, which keeps the prompt cache\": a role:\"system\" message with empty content and output_config.effort, beta header mid-conversation-output-config-2026-07-01; \"Models without per-message effort, including Claude Fable 5, return a 400 error\". claude 2.1.282 sends the older alias per-turn-control-2026-07-01, which the page does not document."
47944
49145
  }
47945
49146
  },
47946
49147
  "pricing": {
@@ -47961,7 +49162,53 @@
47961
49162
  "tool_choice.any",
47962
49163
  "tool_choice.tool"
47963
49164
  ],
47964
- "status": "candidate"
49165
+ "status": "candidate",
49166
+ "deferredToolLoading": {
49167
+ "value": true,
49168
+ "source": "official-doc",
49169
+ "confidence": "declared",
49170
+ "observedAt": "2026-09-25T18:30:00Z",
49171
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
49172
+ },
49173
+ "midConversationSystem": {
49174
+ "value": true,
49175
+ "source": "official-doc",
49176
+ "confidence": "declared",
49177
+ "observedAt": "2026-09-25T19:00:00Z",
49178
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — \"This feature is available on Claude Fable 5.1, Claude Mythos 5.1, Claude Fable 5, Claude Mythos 5, Claude Opus 5.5, Claude Opus 4.8, and Claude Opus 5. No beta header is required for mid-conversation system messages. This feature is not available on Claude Sonnet 5.\""
49179
+ },
49180
+ "midConversationToolChanges": {
49181
+ "value": {
49182
+ "beta": "mid-conversation-tool-changes-2026-07-01"
49183
+ },
49184
+ "source": "official-doc",
49185
+ "confidence": "declared",
49186
+ "observedAt": "2026-09-26T00:00:00Z",
49187
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition / tool_removal blocks in a role:\"system\" message, by reference (\"Add/remove by reference: mid-conversation-tool-changes-2026-07-01 — Claude API, Amazon Bedrock, Google Cloud\"); available on Claude Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 4.8 and Opus 5, \"Not available on Claude Sonnet 5\". Retrieved 2026-09-26; release note 2026-07-24 (https://platform.claude.com/docs/en/release-notes/overview)."
49188
+ },
49189
+ "inlineToolDefinitions": {
49190
+ "value": {
49191
+ "beta": "inline-tools-2026-09-15"
49192
+ },
49193
+ "source": "official-doc",
49194
+ "confidence": "declared",
49195
+ "observedAt": "2026-09-26T00:00:00Z",
49196
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition with a tool_definition (\"Add/remove by reference + define by value: inline-tools-2026-09-15 — Claude API\"); \"The inline-tools-2026-09-15 header covers all reference-based changes\"; redefinition: \"send a different definition under the same name ... The new definition replaces the earlier one from that position onward\" (no removal first, a tool declared in tools included); a definition reusing the name of a different type of tool is a 400 tool_name_conflict. Same model list as midConversationToolChanges. Claude API only, so set on the anthropic and console providers (both api.anthropic.com), never on a cloud reseller. Retrieved 2026-09-26; release note 2026-09-22."
49197
+ },
49198
+ "assistantPrefill": {
49199
+ "value": false,
49200
+ "source": "official-doc",
49201
+ "confidence": "declared",
49202
+ "observedAt": "2026-09-26T00:00:00Z",
49203
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
49204
+ },
49205
+ "undeclaredToolCalls": {
49206
+ "value": true,
49207
+ "source": "live-probe",
49208
+ "sourceRef": "scripts/probe-fork-undeclared-tool.ts (WS-24), run live 2026-09-26: A -- a call to a tool absent from `tools` and its result in the history -> 200; B -- a ToolSearch result carrying the definition as text -> the model called the undeclared tool; C -- that call and its result fed back -> 200",
49209
+ "confidence": "verified",
49210
+ "observedAt": "2026-09-26T00:00:00Z"
49211
+ }
47965
49212
  },
47966
49213
  {
47967
49214
  "key": "console/claude-opus-5-5",
@@ -48120,6 +49367,15 @@
48120
49367
  "confidence": "declared",
48121
49368
  "observedAt": "2026-09-25T13:00:00Z",
48122
49369
  "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/thinking-troubleshooting — \"A 400 error says a thinking block signature is invalid\": on Claude Fable 5.1 and Opus 5.5 a replayed thinking block is bound to the conversation (system, tools and earlier messages) and is rejected once that prefix changes (enforced for accounts created on or after 2026-08-31); the documented escape is the `thinking-binding-controls-2026-08-01` beta with `thinking.block_binding.prefix_mismatch_behavior: \"drop_block\"`. See also https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5 (\"Thinking blocks are tied to the model and the conversation\")."
49370
+ },
49371
+ "perMessageEffort": {
49372
+ "value": {
49373
+ "beta": "mid-conversation-output-config-2026-07-01"
49374
+ },
49375
+ "source": "official-doc",
49376
+ "confidence": "declared",
49377
+ "observedAt": "2026-09-25T18:00:00Z",
49378
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/effort#change-effort-mid-conversation-beta — \"On Claude Fable 5.1, Claude Mythos 5.1, Claude Opus 5.5, and Claude Opus 5, use a per-message effort change, which keeps the prompt cache\": a role:\"system\" message with empty content and output_config.effort, beta header mid-conversation-output-config-2026-07-01; \"Models without per-message effort, including Claude Fable 5, return a 400 error\". claude 2.1.282 sends the older alias per-turn-control-2026-07-01, which the page does not document."
48123
49379
  }
48124
49380
  },
48125
49381
  "pricing": {
@@ -48140,7 +49396,46 @@
48140
49396
  "tool_choice.any",
48141
49397
  "tool_choice.tool"
48142
49398
  ],
48143
- "status": "candidate"
49399
+ "status": "candidate",
49400
+ "deferredToolLoading": {
49401
+ "value": true,
49402
+ "source": "official-doc",
49403
+ "confidence": "declared",
49404
+ "observedAt": "2026-09-25T18:30:00Z",
49405
+ "sourceRef": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — the Model compatibility table lists Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 5, Opus 4.8, 4.7, 4.6, Sonnet 4.6, Opus 4.5, Sonnet 4.5 and Haiku 4.5 (not Sonnet 5); \"Custom tool search implementation\": a client tool returns a tool_result whose content carries {type:\"tool_reference\", tool_name} blocks, every referenced tool declared in tools with defer_loading: true, and the API expands them; \"The prefix is untouched, so prompt caching is preserved\" (https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching)."
49406
+ },
49407
+ "midConversationSystem": {
49408
+ "value": true,
49409
+ "source": "official-doc",
49410
+ "confidence": "declared",
49411
+ "observedAt": "2026-09-25T19:00:00Z",
49412
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — \"This feature is available on Claude Fable 5.1, Claude Mythos 5.1, Claude Fable 5, Claude Mythos 5, Claude Opus 5.5, Claude Opus 4.8, and Claude Opus 5. No beta header is required for mid-conversation system messages. This feature is not available on Claude Sonnet 5.\""
49413
+ },
49414
+ "midConversationToolChanges": {
49415
+ "value": {
49416
+ "beta": "mid-conversation-tool-changes-2026-07-01"
49417
+ },
49418
+ "source": "official-doc",
49419
+ "confidence": "declared",
49420
+ "observedAt": "2026-09-26T00:00:00Z",
49421
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition / tool_removal blocks in a role:\"system\" message, by reference (\"Add/remove by reference: mid-conversation-tool-changes-2026-07-01 — Claude API, Amazon Bedrock, Google Cloud\"); available on Claude Fable 5.1, Mythos 5.1, Fable 5, Mythos 5, Opus 5.5, Opus 4.8 and Opus 5, \"Not available on Claude Sonnet 5\". Retrieved 2026-09-26; release note 2026-07-24 (https://platform.claude.com/docs/en/release-notes/overview)."
49422
+ },
49423
+ "inlineToolDefinitions": {
49424
+ "value": {
49425
+ "beta": "inline-tools-2026-09-15"
49426
+ },
49427
+ "source": "official-doc",
49428
+ "confidence": "declared",
49429
+ "observedAt": "2026-09-26T00:00:00Z",
49430
+ "sourceRef": "https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages — tool_addition with a tool_definition (\"Add/remove by reference + define by value: inline-tools-2026-09-15 — Claude API\"); \"The inline-tools-2026-09-15 header covers all reference-based changes\"; redefinition: \"send a different definition under the same name ... The new definition replaces the earlier one from that position onward\" (no removal first, a tool declared in tools included); a definition reusing the name of a different type of tool is a 400 tool_name_conflict. Same model list as midConversationToolChanges. Claude API only, so set on the anthropic and console providers (both api.anthropic.com), never on a cloud reseller. Retrieved 2026-09-26; release note 2026-09-22."
49431
+ },
49432
+ "assistantPrefill": {
49433
+ "value": false,
49434
+ "source": "official-doc",
49435
+ "confidence": "declared",
49436
+ "observedAt": "2026-09-26T00:00:00Z",
49437
+ "sourceRef": "https://platform.claude.com/docs/en/models/opus-5-5/migration-guide — \"Don't end messages with a prefilled assistant turn: it is rejected\"; \"Prefilling assistant messages returns a 400 error on Claude Opus 4.6 and later Opus models, including Claude Opus 5.5\"; Sonnet 5 and Opus 5: \"Manual extended thinking, non-default sampling parameters, and assistant prefill return a 400 error on both models\"; the Fable 5.1 guide: prefill \"returns a 400 error, unchanged from Claude Fable 5\". Live gate 2026-09-26 on claude-opus-5-5: \"This model does not support assistant message prefill. The conversation must end with a user message.\""
49438
+ }
48144
49439
  },
48145
49440
  {
48146
49441
  "key": "mistral/mistral-large-2512",