@yanlinglabs/winter-provider-catalog 0.0.24 → 0.0.27

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,14 @@
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
+ }
550
614
  },
551
615
  {
552
616
  "key": "anthropic/claude-fable-5",
@@ -672,7 +736,46 @@
672
736
  "thinking.type.enabled",
673
737
  "thinking.type.disabled"
674
738
  ],
675
- "status": "candidate"
739
+ "status": "candidate",
740
+ "deferredToolLoading": {
741
+ "value": true,
742
+ "source": "official-doc",
743
+ "confidence": "declared",
744
+ "observedAt": "2026-09-25T18:30:00Z",
745
+ "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)."
746
+ },
747
+ "midConversationSystem": {
748
+ "value": true,
749
+ "source": "official-doc",
750
+ "confidence": "declared",
751
+ "observedAt": "2026-09-25T19:00:00Z",
752
+ "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.\""
753
+ },
754
+ "midConversationToolChanges": {
755
+ "value": {
756
+ "beta": "mid-conversation-tool-changes-2026-07-01"
757
+ },
758
+ "source": "official-doc",
759
+ "confidence": "declared",
760
+ "observedAt": "2026-09-26T00:00:00Z",
761
+ "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)."
762
+ },
763
+ "inlineToolDefinitions": {
764
+ "value": {
765
+ "beta": "inline-tools-2026-09-15"
766
+ },
767
+ "source": "official-doc",
768
+ "confidence": "declared",
769
+ "observedAt": "2026-09-26T00:00:00Z",
770
+ "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."
771
+ },
772
+ "assistantPrefill": {
773
+ "value": false,
774
+ "source": "official-doc",
775
+ "confidence": "declared",
776
+ "observedAt": "2026-09-26T00:00:00Z",
777
+ "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.\""
778
+ }
676
779
  },
677
780
  {
678
781
  "key": "anthropic/claude-haiku-4.5",
@@ -769,7 +872,14 @@
769
872
  "unsupportedParameters": [
770
873
  "thinking.type.adaptive"
771
874
  ],
772
- "status": "candidate"
875
+ "status": "candidate",
876
+ "deferredToolLoading": {
877
+ "value": true,
878
+ "source": "official-doc",
879
+ "confidence": "declared",
880
+ "observedAt": "2026-09-25T18:30:00Z",
881
+ "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)."
882
+ }
773
883
  },
774
884
  {
775
885
  "key": "anthropic/claude-opus-4.5",
@@ -892,15 +1002,24 @@
892
1002
  "unsupportedParameters": [
893
1003
  "thinking.type.adaptive"
894
1004
  ],
895
- "status": "candidate"
1005
+ "status": "candidate",
1006
+ "deferredToolLoading": {
1007
+ "value": true,
1008
+ "source": "official-doc",
1009
+ "confidence": "declared",
1010
+ "observedAt": "2026-09-25T18:30:00Z",
1011
+ "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)."
1012
+ }
896
1013
  },
897
1014
  {
898
1015
  "key": "anthropic/claude-opus-4.6",
899
1016
  "providerId": "anthropic",
900
1017
  "upstreamId": "claude-opus-4.6",
901
1018
  "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. ",
1019
+ "aliases": [
1020
+ "claude-opus-4-6"
1021
+ ],
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.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
1023
  "endpoints": [
905
1024
  "chat"
906
1025
  ],
@@ -1011,15 +1130,31 @@
1011
1130
  "observedAt": "2026-09-19T00:00:00Z"
1012
1131
  },
1013
1132
  "unsupportedParameters": [],
1014
- "status": "candidate"
1133
+ "status": "candidate",
1134
+ "deferredToolLoading": {
1135
+ "value": true,
1136
+ "source": "official-doc",
1137
+ "confidence": "declared",
1138
+ "observedAt": "2026-09-25T18:30:00Z",
1139
+ "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)."
1140
+ },
1141
+ "assistantPrefill": {
1142
+ "value": false,
1143
+ "source": "official-doc",
1144
+ "confidence": "declared",
1145
+ "observedAt": "2026-09-26T00:00:00Z",
1146
+ "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.\""
1147
+ }
1015
1148
  },
1016
1149
  {
1017
1150
  "key": "anthropic/claude-opus-4.7",
1018
1151
  "providerId": "anthropic",
1019
1152
  "upstreamId": "claude-opus-4.7",
1020
1153
  "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. ",
1154
+ "aliases": [
1155
+ "claude-opus-4-7"
1156
+ ],
1157
+ "$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
1158
  "endpoints": [
1024
1159
  "chat"
1025
1160
  ],
@@ -1136,15 +1271,31 @@
1136
1271
  "top_k",
1137
1272
  "thinking.type.enabled"
1138
1273
  ],
1139
- "status": "candidate"
1274
+ "status": "candidate",
1275
+ "deferredToolLoading": {
1276
+ "value": true,
1277
+ "source": "official-doc",
1278
+ "confidence": "declared",
1279
+ "observedAt": "2026-09-25T18:30:00Z",
1280
+ "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)."
1281
+ },
1282
+ "assistantPrefill": {
1283
+ "value": false,
1284
+ "source": "official-doc",
1285
+ "confidence": "declared",
1286
+ "observedAt": "2026-09-26T00:00:00Z",
1287
+ "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.\""
1288
+ }
1140
1289
  },
1141
1290
  {
1142
1291
  "key": "anthropic/claude-opus-4.8",
1143
1292
  "providerId": "anthropic",
1144
1293
  "upstreamId": "claude-opus-4.8",
1145
1294
  "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. ",
1295
+ "aliases": [
1296
+ "claude-opus-4-8"
1297
+ ],
1298
+ "$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
1299
  "endpoints": [
1149
1300
  "chat"
1150
1301
  ],
@@ -1261,7 +1412,46 @@
1261
1412
  "top_k",
1262
1413
  "thinking.type.enabled"
1263
1414
  ],
1264
- "status": "candidate"
1415
+ "status": "candidate",
1416
+ "deferredToolLoading": {
1417
+ "value": true,
1418
+ "source": "official-doc",
1419
+ "confidence": "declared",
1420
+ "observedAt": "2026-09-25T18:30:00Z",
1421
+ "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)."
1422
+ },
1423
+ "midConversationSystem": {
1424
+ "value": true,
1425
+ "source": "official-doc",
1426
+ "confidence": "declared",
1427
+ "observedAt": "2026-09-25T19:00:00Z",
1428
+ "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.\""
1429
+ },
1430
+ "midConversationToolChanges": {
1431
+ "value": {
1432
+ "beta": "mid-conversation-tool-changes-2026-07-01"
1433
+ },
1434
+ "source": "official-doc",
1435
+ "confidence": "declared",
1436
+ "observedAt": "2026-09-26T00:00:00Z",
1437
+ "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)."
1438
+ },
1439
+ "inlineToolDefinitions": {
1440
+ "value": {
1441
+ "beta": "inline-tools-2026-09-15"
1442
+ },
1443
+ "source": "official-doc",
1444
+ "confidence": "declared",
1445
+ "observedAt": "2026-09-26T00:00:00Z",
1446
+ "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."
1447
+ },
1448
+ "assistantPrefill": {
1449
+ "value": false,
1450
+ "source": "official-doc",
1451
+ "confidence": "declared",
1452
+ "observedAt": "2026-09-26T00:00:00Z",
1453
+ "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.\""
1454
+ }
1265
1455
  },
1266
1456
  {
1267
1457
  "key": "anthropic/claude-sonnet-4.5",
@@ -1375,15 +1565,24 @@
1375
1565
  "unsupportedParameters": [
1376
1566
  "thinking.type.adaptive"
1377
1567
  ],
1378
- "status": "candidate"
1568
+ "status": "candidate",
1569
+ "deferredToolLoading": {
1570
+ "value": true,
1571
+ "source": "official-doc",
1572
+ "confidence": "declared",
1573
+ "observedAt": "2026-09-25T18:30:00Z",
1574
+ "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)."
1575
+ }
1379
1576
  },
1380
1577
  {
1381
1578
  "key": "anthropic/claude-sonnet-4.6",
1382
1579
  "providerId": "anthropic",
1383
1580
  "upstreamId": "claude-sonnet-4.6",
1384
1581
  "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. ",
1582
+ "aliases": [
1583
+ "claude-sonnet-4-6"
1584
+ ],
1585
+ "$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
1586
  "endpoints": [
1388
1587
  "chat"
1389
1588
  ],
@@ -1494,7 +1693,14 @@
1494
1693
  "observedAt": "2026-09-19T00:00:00Z"
1495
1694
  },
1496
1695
  "unsupportedParameters": [],
1497
- "status": "candidate"
1696
+ "status": "candidate",
1697
+ "deferredToolLoading": {
1698
+ "value": true,
1699
+ "source": "official-doc",
1700
+ "confidence": "declared",
1701
+ "observedAt": "2026-09-25T18:30:00Z",
1702
+ "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)."
1703
+ }
1498
1704
  },
1499
1705
  {
1500
1706
  "key": "arcee-ai/trinity-large-thinking",
@@ -2005,7 +2211,21 @@
2005
2211
  }
2006
2212
  },
2007
2213
  "unsupportedParameters": [],
2008
- "status": "candidate"
2214
+ "status": "candidate",
2215
+ "promptCacheKey": {
2216
+ "value": true,
2217
+ "source": "official-doc",
2218
+ "confidence": "declared",
2219
+ "observedAt": "2026-09-25T19:30:00Z",
2220
+ "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."
2221
+ },
2222
+ "clientToolSearch": {
2223
+ "value": true,
2224
+ "source": "upstream-static",
2225
+ "confidence": "declared",
2226
+ "observedAt": "2026-09-26T00:00:00Z",
2227
+ "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."
2228
+ }
2009
2229
  },
2010
2230
  {
2011
2231
  "key": "codex-oauth/gpt-5.6-terra",
@@ -2111,7 +2331,21 @@
2111
2331
  }
2112
2332
  },
2113
2333
  "unsupportedParameters": [],
2114
- "status": "candidate"
2334
+ "status": "candidate",
2335
+ "promptCacheKey": {
2336
+ "value": true,
2337
+ "source": "official-doc",
2338
+ "confidence": "declared",
2339
+ "observedAt": "2026-09-25T19:30:00Z",
2340
+ "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."
2341
+ },
2342
+ "clientToolSearch": {
2343
+ "value": true,
2344
+ "source": "upstream-static",
2345
+ "confidence": "declared",
2346
+ "observedAt": "2026-09-26T00:00:00Z",
2347
+ "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."
2348
+ }
2115
2349
  },
2116
2350
  {
2117
2351
  "key": "codex-oauth/gpt-5.6-luna",
@@ -2217,7 +2451,21 @@
2217
2451
  }
2218
2452
  },
2219
2453
  "unsupportedParameters": [],
2220
- "status": "candidate"
2454
+ "status": "candidate",
2455
+ "promptCacheKey": {
2456
+ "value": true,
2457
+ "source": "official-doc",
2458
+ "confidence": "declared",
2459
+ "observedAt": "2026-09-25T19:30:00Z",
2460
+ "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."
2461
+ },
2462
+ "clientToolSearch": {
2463
+ "value": true,
2464
+ "source": "upstream-static",
2465
+ "confidence": "declared",
2466
+ "observedAt": "2026-09-26T00:00:00Z",
2467
+ "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."
2468
+ }
2221
2469
  },
2222
2470
  {
2223
2471
  "key": "deepseek-anthropic/deepseek-flash",
@@ -4169,7 +4417,14 @@
4169
4417
  "observedAt": "2026-09-05T00:00:00Z"
4170
4418
  },
4171
4419
  "unsupportedParameters": [],
4172
- "status": "candidate"
4420
+ "status": "candidate",
4421
+ "promptCacheKey": {
4422
+ "value": true,
4423
+ "source": "official-doc",
4424
+ "confidence": "declared",
4425
+ "observedAt": "2026-09-25T19:30:00Z",
4426
+ "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\"."
4427
+ }
4173
4428
  },
4174
4429
  {
4175
4430
  "key": "openai/o4-mini",
@@ -4315,7 +4570,14 @@
4315
4570
  "observedAt": "2026-09-05T00:00:00Z"
4316
4571
  },
4317
4572
  "unsupportedParameters": [],
4318
- "status": "candidate"
4573
+ "status": "candidate",
4574
+ "promptCacheKey": {
4575
+ "value": true,
4576
+ "source": "official-doc",
4577
+ "confidence": "declared",
4578
+ "observedAt": "2026-09-25T19:30:00Z",
4579
+ "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\"."
4580
+ }
4319
4581
  },
4320
4582
  {
4321
4583
  "key": "opencode/big-pickle",
@@ -5041,9 +5303,10 @@
5041
5303
  "grok-4.20-beta-0309-non-reasoning",
5042
5304
  "grok-4.20-non-reasoning-gv2"
5043
5305
  ],
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).",
5306
+ "$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
5307
  "endpoints": [
5046
- "chat"
5308
+ "chat",
5309
+ "responses"
5047
5310
  ],
5048
5311
  "contextWindow": {
5049
5312
  "value": 1000000,
@@ -5135,9 +5398,10 @@
5135
5398
  "grok-4.20-experimental-beta-latest",
5136
5399
  "grok-4.20-reasoning-gv2"
5137
5400
  ],
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).",
5401
+ "$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
5402
  "endpoints": [
5140
- "chat"
5403
+ "chat",
5404
+ "responses"
5141
5405
  ],
5142
5406
  "contextWindow": {
5143
5407
  "value": 1000000,
@@ -5202,7 +5466,7 @@
5202
5466
  "observedAt": "2026-09-25T08:40:00Z"
5203
5467
  },
5204
5468
  "efforts": [],
5205
- "continuation": "none"
5469
+ "continuation": "opaque-provider-state"
5206
5470
  },
5207
5471
  "pricing": {
5208
5472
  "value": {
@@ -5218,6 +5482,110 @@
5218
5482
  "unsupportedParameters": [],
5219
5483
  "status": "candidate"
5220
5484
  },
5485
+ {
5486
+ "key": "xai/grok-4.20-multi-agent-0309",
5487
+ "providerId": "xai",
5488
+ "upstreamId": "grok-4.20-multi-agent-0309",
5489
+ "displayName": "Grok 4.20 Multi-Agent Beta",
5490
+ "aliases": [
5491
+ "grok-4.20-multi-agent",
5492
+ "grok-4.20-multi-agent-latest",
5493
+ "grok-4.20-multi-agent-beta-latest",
5494
+ "grok-4.20-multi-agent-experimental-beta-0304",
5495
+ "grok-4.20-multi-agent-experimental-beta-latest",
5496
+ "grok-4.20-multi-agent-beta-0309"
5497
+ ],
5498
+ "$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).",
5499
+ "endpoints": [
5500
+ "responses"
5501
+ ],
5502
+ "contextWindow": {
5503
+ "value": 1000000,
5504
+ "source": "official-doc",
5505
+ "sourceRef": "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page context window 1,000,000 tokens",
5506
+ "confidence": "declared",
5507
+ "observedAt": "2026-09-25T08:40:00Z"
5508
+ },
5509
+ "inputModalities": {
5510
+ "value": [
5511
+ "text",
5512
+ "image"
5513
+ ],
5514
+ "source": "official-doc",
5515
+ "sourceRef": "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page Modalities: Text, Image input",
5516
+ "confidence": "declared",
5517
+ "observedAt": "2026-09-25T08:40:00Z"
5518
+ },
5519
+ "outputModalities": {
5520
+ "value": [
5521
+ "text"
5522
+ ],
5523
+ "source": "official-doc",
5524
+ "sourceRef": "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page Modalities: Text output",
5525
+ "confidence": "declared",
5526
+ "observedAt": "2026-09-25T08:40:00Z"
5527
+ },
5528
+ "toolCalling": {
5529
+ "value": "none",
5530
+ "source": "official-doc",
5531
+ "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",
5532
+ "confidence": "declared",
5533
+ "observedAt": "2026-09-25T08:40:00Z"
5534
+ },
5535
+ "nativeTools": {
5536
+ "value": false,
5537
+ "source": "official-doc",
5538
+ "sourceRef": "https://docs.x.ai/developers/model-capabilities/text/multi-agent — client-side/custom function tools unsupported",
5539
+ "confidence": "declared",
5540
+ "observedAt": "2026-09-25T08:40:00Z"
5541
+ },
5542
+ "structuredOutput": {
5543
+ "value": true,
5544
+ "source": "official-doc",
5545
+ "sourceRef": "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page Structured outputs capability",
5546
+ "confidence": "declared",
5547
+ "observedAt": "2026-09-25T08:40:00Z"
5548
+ },
5549
+ "promptCaching": {
5550
+ "value": true,
5551
+ "source": "official-doc",
5552
+ "sourceRef": "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page lists Cached tokens input rate; prompt caching available",
5553
+ "confidence": "declared",
5554
+ "observedAt": "2026-09-25T08:40:00Z"
5555
+ },
5556
+ "reasoning": {
5557
+ "supported": {
5558
+ "value": true,
5559
+ "source": "official-doc",
5560
+ "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",
5561
+ "confidence": "declared",
5562
+ "observedAt": "2026-09-25T08:40:00Z"
5563
+ },
5564
+ "efforts": [
5565
+ "low",
5566
+ "medium",
5567
+ "high",
5568
+ "xhigh"
5569
+ ],
5570
+ "continuation": "opaque-provider-state"
5571
+ },
5572
+ "pricing": {
5573
+ "value": {
5574
+ "inputPerMTokUsd": 1.25,
5575
+ "outputPerMTokUsd": 2.5,
5576
+ "cacheReadPerMTokUsd": 0.2
5577
+ },
5578
+ "source": "official-doc",
5579
+ "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).",
5580
+ "confidence": "declared",
5581
+ "observedAt": "2026-09-25T17:09:48Z"
5582
+ },
5583
+ "unsupportedParameters": [
5584
+ "max_output_tokens",
5585
+ "tools"
5586
+ ],
5587
+ "status": "candidate"
5588
+ },
5221
5589
  {
5222
5590
  "key": "xai/grok-4.3",
5223
5591
  "providerId": "xai",
@@ -5226,9 +5594,10 @@
5226
5594
  "aliases": [
5227
5595
  "grok-4.3-latest"
5228
5596
  ],
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",
5597
+ "$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
5598
  "endpoints": [
5231
- "chat"
5599
+ "chat",
5600
+ "responses"
5232
5601
  ],
5233
5602
  "contextWindow": {
5234
5603
  "value": 1000000,
@@ -5299,7 +5668,7 @@
5299
5668
  "high",
5300
5669
  "xhigh"
5301
5670
  ],
5302
- "continuation": "plaintext",
5671
+ "continuation": "opaque-provider-state",
5303
5672
  "defaultEffort": "low"
5304
5673
  },
5305
5674
  "pricing": {
@@ -5326,9 +5695,10 @@
5326
5695
  "grok-code-fast",
5327
5696
  "grok-code-fast-1-0825"
5328
5697
  ],
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",
5698
+ "$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
5699
  "endpoints": [
5331
- "chat"
5700
+ "chat",
5701
+ "responses"
5332
5702
  ],
5333
5703
  "contextWindow": {
5334
5704
  "value": 256000,
@@ -5393,7 +5763,7 @@
5393
5763
  "observedAt": "2026-09-25T08:40:00Z"
5394
5764
  },
5395
5765
  "efforts": [],
5396
- "continuation": "none"
5766
+ "continuation": "opaque-provider-state"
5397
5767
  },
5398
5768
  "pricing": {
5399
5769
  "value": {
@@ -6425,6 +6795,15 @@
6425
6795
  "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
6796
  "confidence": "declared",
6427
6797
  "observedAt": "2026-09-06T00:00:00Z"
6798
+ },
6799
+ "perMessageEffort": {
6800
+ "value": {
6801
+ "item": "configuration_update"
6802
+ },
6803
+ "source": "official-doc",
6804
+ "confidence": "declared",
6805
+ "observedAt": "2026-09-26T00:00:00Z",
6806
+ "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
6807
  }
6429
6808
  },
6430
6809
  "pricing": {
@@ -6440,7 +6819,35 @@
6440
6819
  "observedAt": "2026-09-06T00:00:00Z"
6441
6820
  },
6442
6821
  "unsupportedParameters": [],
6443
- "status": "candidate"
6822
+ "status": "candidate",
6823
+ "promptCacheKey": {
6824
+ "value": true,
6825
+ "source": "official-doc",
6826
+ "confidence": "declared",
6827
+ "observedAt": "2026-09-25T19:30:00Z",
6828
+ "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\"."
6829
+ },
6830
+ "clientToolSearch": {
6831
+ "value": true,
6832
+ "source": "official-doc",
6833
+ "confidence": "declared",
6834
+ "observedAt": "2026-09-26T00:00:00Z",
6835
+ "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."
6836
+ },
6837
+ "additionalToolsItem": {
6838
+ "value": true,
6839
+ "source": "official-doc",
6840
+ "confidence": "declared",
6841
+ "observedAt": "2026-09-26T00:00:00Z",
6842
+ "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."
6843
+ },
6844
+ "allowedToolsChoice": {
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/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."
6850
+ }
6444
6851
  },
6445
6852
  {
6446
6853
  "key": "codex-oauth/gpt-6-astra",
@@ -6548,7 +6955,21 @@
6548
6955
  }
6549
6956
  },
6550
6957
  "unsupportedParameters": [],
6551
- "status": "candidate"
6958
+ "status": "candidate",
6959
+ "promptCacheKey": {
6960
+ "value": true,
6961
+ "source": "official-doc",
6962
+ "confidence": "declared",
6963
+ "observedAt": "2026-09-25T19:30:00Z",
6964
+ "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."
6965
+ },
6966
+ "clientToolSearch": {
6967
+ "value": true,
6968
+ "source": "upstream-static",
6969
+ "confidence": "declared",
6970
+ "observedAt": "2026-09-26T00:00:00Z",
6971
+ "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."
6972
+ }
6552
6973
  },
6553
6974
  {
6554
6975
  "key": "anthropic/claude-fable-5-1",
@@ -6698,6 +7119,15 @@
6698
7119
  "confidence": "declared",
6699
7120
  "observedAt": "2026-09-25T13:00:00Z",
6700
7121
  "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\")."
7122
+ },
7123
+ "perMessageEffort": {
7124
+ "value": {
7125
+ "beta": "mid-conversation-output-config-2026-07-01"
7126
+ },
7127
+ "source": "official-doc",
7128
+ "confidence": "declared",
7129
+ "observedAt": "2026-09-25T18:00:00Z",
7130
+ "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
7131
  }
6702
7132
  },
6703
7133
  "pricing": {
@@ -6718,7 +7148,46 @@
6718
7148
  "tool_choice.any",
6719
7149
  "tool_choice.tool"
6720
7150
  ],
6721
- "status": "candidate"
7151
+ "status": "candidate",
7152
+ "deferredToolLoading": {
7153
+ "value": true,
7154
+ "source": "official-doc",
7155
+ "confidence": "declared",
7156
+ "observedAt": "2026-09-25T18:30:00Z",
7157
+ "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)."
7158
+ },
7159
+ "midConversationSystem": {
7160
+ "value": true,
7161
+ "source": "official-doc",
7162
+ "confidence": "declared",
7163
+ "observedAt": "2026-09-25T19:00:00Z",
7164
+ "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.\""
7165
+ },
7166
+ "midConversationToolChanges": {
7167
+ "value": {
7168
+ "beta": "mid-conversation-tool-changes-2026-07-01"
7169
+ },
7170
+ "source": "official-doc",
7171
+ "confidence": "declared",
7172
+ "observedAt": "2026-09-26T00:00:00Z",
7173
+ "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)."
7174
+ },
7175
+ "inlineToolDefinitions": {
7176
+ "value": {
7177
+ "beta": "inline-tools-2026-09-15"
7178
+ },
7179
+ "source": "official-doc",
7180
+ "confidence": "declared",
7181
+ "observedAt": "2026-09-26T00:00:00Z",
7182
+ "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."
7183
+ },
7184
+ "assistantPrefill": {
7185
+ "value": false,
7186
+ "source": "official-doc",
7187
+ "confidence": "declared",
7188
+ "observedAt": "2026-09-26T00:00:00Z",
7189
+ "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.\""
7190
+ }
6722
7191
  },
6723
7192
  {
6724
7193
  "key": "google/gemini-3.8-flash",
@@ -6951,9 +7420,10 @@
6951
7420
  "upstreamId": "grok-4.6",
6952
7421
  "displayName": "Grok 4.6",
6953
7422
  "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).",
7423
+ "$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
7424
  "endpoints": [
6956
- "chat"
7425
+ "chat",
7426
+ "responses"
6957
7427
  ],
6958
7428
  "contextWindow": {
6959
7429
  "value": 500000,
@@ -7023,7 +7493,7 @@
7023
7493
  "high",
7024
7494
  "xhigh"
7025
7495
  ],
7026
- "continuation": "plaintext",
7496
+ "continuation": "opaque-provider-state",
7027
7497
  "defaultEffort": "high"
7028
7498
  },
7029
7499
  "pricing": {
@@ -7155,7 +7625,35 @@
7155
7625
  "observedAt": "2026-09-25T10:21:48Z"
7156
7626
  },
7157
7627
  "unsupportedParameters": [],
7158
- "status": "candidate"
7628
+ "status": "candidate",
7629
+ "promptCacheKey": {
7630
+ "value": true,
7631
+ "source": "official-doc",
7632
+ "confidence": "declared",
7633
+ "observedAt": "2026-09-25T19:30:00Z",
7634
+ "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\"."
7635
+ },
7636
+ "clientToolSearch": {
7637
+ "value": true,
7638
+ "source": "official-doc",
7639
+ "confidence": "declared",
7640
+ "observedAt": "2026-09-26T00:00:00Z",
7641
+ "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."
7642
+ },
7643
+ "additionalToolsItem": {
7644
+ "value": true,
7645
+ "source": "official-doc",
7646
+ "confidence": "declared",
7647
+ "observedAt": "2026-09-26T00:00:00Z",
7648
+ "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."
7649
+ },
7650
+ "allowedToolsChoice": {
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/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."
7656
+ }
7159
7657
  },
7160
7658
  {
7161
7659
  "key": "openai/gpt-5.6-terra",
@@ -7268,7 +7766,35 @@
7268
7766
  "observedAt": "2026-09-25T10:21:48Z"
7269
7767
  },
7270
7768
  "unsupportedParameters": [],
7271
- "status": "candidate"
7769
+ "status": "candidate",
7770
+ "promptCacheKey": {
7771
+ "value": true,
7772
+ "source": "official-doc",
7773
+ "confidence": "declared",
7774
+ "observedAt": "2026-09-25T19:30:00Z",
7775
+ "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\"."
7776
+ },
7777
+ "clientToolSearch": {
7778
+ "value": true,
7779
+ "source": "official-doc",
7780
+ "confidence": "declared",
7781
+ "observedAt": "2026-09-26T00:00:00Z",
7782
+ "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."
7783
+ },
7784
+ "additionalToolsItem": {
7785
+ "value": true,
7786
+ "source": "official-doc",
7787
+ "confidence": "declared",
7788
+ "observedAt": "2026-09-26T00:00:00Z",
7789
+ "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."
7790
+ },
7791
+ "allowedToolsChoice": {
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/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."
7797
+ }
7272
7798
  },
7273
7799
  {
7274
7800
  "key": "openai/gpt-5.6-luna",
@@ -7381,7 +7907,35 @@
7381
7907
  "observedAt": "2026-09-25T10:21:48Z"
7382
7908
  },
7383
7909
  "unsupportedParameters": [],
7384
- "status": "candidate"
7910
+ "status": "candidate",
7911
+ "promptCacheKey": {
7912
+ "value": true,
7913
+ "source": "official-doc",
7914
+ "confidence": "declared",
7915
+ "observedAt": "2026-09-25T19:30:00Z",
7916
+ "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\"."
7917
+ },
7918
+ "clientToolSearch": {
7919
+ "value": true,
7920
+ "source": "official-doc",
7921
+ "confidence": "declared",
7922
+ "observedAt": "2026-09-26T00:00:00Z",
7923
+ "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."
7924
+ },
7925
+ "additionalToolsItem": {
7926
+ "value": true,
7927
+ "source": "official-doc",
7928
+ "confidence": "declared",
7929
+ "observedAt": "2026-09-26T00:00:00Z",
7930
+ "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."
7931
+ },
7932
+ "allowedToolsChoice": {
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/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."
7938
+ }
7385
7939
  },
7386
7940
  {
7387
7941
  "key": "console/claude-fable-5",
@@ -7507,7 +8061,46 @@
7507
8061
  "thinking.type.enabled",
7508
8062
  "thinking.type.disabled"
7509
8063
  ],
7510
- "status": "candidate"
8064
+ "status": "candidate",
8065
+ "deferredToolLoading": {
8066
+ "value": true,
8067
+ "source": "official-doc",
8068
+ "confidence": "declared",
8069
+ "observedAt": "2026-09-25T18:30:00Z",
8070
+ "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)."
8071
+ },
8072
+ "midConversationSystem": {
8073
+ "value": true,
8074
+ "source": "official-doc",
8075
+ "confidence": "declared",
8076
+ "observedAt": "2026-09-25T19:00:00Z",
8077
+ "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.\""
8078
+ },
8079
+ "midConversationToolChanges": {
8080
+ "value": {
8081
+ "beta": "mid-conversation-tool-changes-2026-07-01"
8082
+ },
8083
+ "source": "official-doc",
8084
+ "confidence": "declared",
8085
+ "observedAt": "2026-09-26T00:00:00Z",
8086
+ "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)."
8087
+ },
8088
+ "inlineToolDefinitions": {
8089
+ "value": {
8090
+ "beta": "inline-tools-2026-09-15"
8091
+ },
8092
+ "source": "official-doc",
8093
+ "confidence": "declared",
8094
+ "observedAt": "2026-09-26T00:00:00Z",
8095
+ "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."
8096
+ },
8097
+ "assistantPrefill": {
8098
+ "value": false,
8099
+ "source": "official-doc",
8100
+ "confidence": "declared",
8101
+ "observedAt": "2026-09-26T00:00:00Z",
8102
+ "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.\""
8103
+ }
7511
8104
  },
7512
8105
  {
7513
8106
  "key": "console/claude-fable-5-1",
@@ -7657,6 +8250,15 @@
7657
8250
  "confidence": "declared",
7658
8251
  "observedAt": "2026-09-25T13:00:00Z",
7659
8252
  "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\")."
8253
+ },
8254
+ "perMessageEffort": {
8255
+ "value": {
8256
+ "beta": "mid-conversation-output-config-2026-07-01"
8257
+ },
8258
+ "source": "official-doc",
8259
+ "confidence": "declared",
8260
+ "observedAt": "2026-09-25T18:00:00Z",
8261
+ "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
8262
  }
7661
8263
  },
7662
8264
  "pricing": {
@@ -7677,7 +8279,46 @@
7677
8279
  "tool_choice.any",
7678
8280
  "tool_choice.tool"
7679
8281
  ],
7680
- "status": "candidate"
8282
+ "status": "candidate",
8283
+ "deferredToolLoading": {
8284
+ "value": true,
8285
+ "source": "official-doc",
8286
+ "confidence": "declared",
8287
+ "observedAt": "2026-09-25T18:30:00Z",
8288
+ "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)."
8289
+ },
8290
+ "midConversationSystem": {
8291
+ "value": true,
8292
+ "source": "official-doc",
8293
+ "confidence": "declared",
8294
+ "observedAt": "2026-09-25T19:00:00Z",
8295
+ "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.\""
8296
+ },
8297
+ "midConversationToolChanges": {
8298
+ "value": {
8299
+ "beta": "mid-conversation-tool-changes-2026-07-01"
8300
+ },
8301
+ "source": "official-doc",
8302
+ "confidence": "declared",
8303
+ "observedAt": "2026-09-26T00:00:00Z",
8304
+ "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)."
8305
+ },
8306
+ "inlineToolDefinitions": {
8307
+ "value": {
8308
+ "beta": "inline-tools-2026-09-15"
8309
+ },
8310
+ "source": "official-doc",
8311
+ "confidence": "declared",
8312
+ "observedAt": "2026-09-26T00:00:00Z",
8313
+ "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."
8314
+ },
8315
+ "assistantPrefill": {
8316
+ "value": false,
8317
+ "source": "official-doc",
8318
+ "confidence": "declared",
8319
+ "observedAt": "2026-09-26T00:00:00Z",
8320
+ "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.\""
8321
+ }
7681
8322
  },
7682
8323
  {
7683
8324
  "key": "console/claude-haiku-4-5-20251001",
@@ -7774,7 +8415,14 @@
7774
8415
  "unsupportedParameters": [
7775
8416
  "thinking.type.adaptive"
7776
8417
  ],
7777
- "status": "candidate"
8418
+ "status": "candidate",
8419
+ "deferredToolLoading": {
8420
+ "value": true,
8421
+ "source": "official-doc",
8422
+ "confidence": "declared",
8423
+ "observedAt": "2026-09-25T18:30:00Z",
8424
+ "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)."
8425
+ }
7778
8426
  },
7779
8427
  {
7780
8428
  "key": "console/claude-haiku-4.5",
@@ -7871,7 +8519,14 @@
7871
8519
  "unsupportedParameters": [
7872
8520
  "thinking.type.adaptive"
7873
8521
  ],
7874
- "status": "candidate"
8522
+ "status": "candidate",
8523
+ "deferredToolLoading": {
8524
+ "value": true,
8525
+ "source": "official-doc",
8526
+ "confidence": "declared",
8527
+ "observedAt": "2026-09-25T18:30:00Z",
8528
+ "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)."
8529
+ }
7875
8530
  },
7876
8531
  {
7877
8532
  "key": "console/claude-opus-4.5",
@@ -7994,15 +8649,24 @@
7994
8649
  "unsupportedParameters": [
7995
8650
  "thinking.type.adaptive"
7996
8651
  ],
7997
- "status": "candidate"
8652
+ "status": "candidate",
8653
+ "deferredToolLoading": {
8654
+ "value": true,
8655
+ "source": "official-doc",
8656
+ "confidence": "declared",
8657
+ "observedAt": "2026-09-25T18:30:00Z",
8658
+ "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)."
8659
+ }
7998
8660
  },
7999
8661
  {
8000
8662
  "key": "console/claude-opus-4.6",
8001
8663
  "providerId": "console",
8002
8664
  "upstreamId": "claude-opus-4.6",
8003
8665
  "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. ",
8666
+ "aliases": [
8667
+ "claude-opus-4-6"
8668
+ ],
8669
+ "$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
8670
  "endpoints": [
8007
8671
  "chat"
8008
8672
  ],
@@ -8113,15 +8777,31 @@
8113
8777
  "observedAt": "2026-09-19T00:00:00Z"
8114
8778
  },
8115
8779
  "unsupportedParameters": [],
8116
- "status": "candidate"
8780
+ "status": "candidate",
8781
+ "deferredToolLoading": {
8782
+ "value": true,
8783
+ "source": "official-doc",
8784
+ "confidence": "declared",
8785
+ "observedAt": "2026-09-25T18:30:00Z",
8786
+ "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)."
8787
+ },
8788
+ "assistantPrefill": {
8789
+ "value": false,
8790
+ "source": "official-doc",
8791
+ "confidence": "declared",
8792
+ "observedAt": "2026-09-26T00:00:00Z",
8793
+ "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.\""
8794
+ }
8117
8795
  },
8118
8796
  {
8119
8797
  "key": "console/claude-opus-4.7",
8120
8798
  "providerId": "console",
8121
8799
  "upstreamId": "claude-opus-4.7",
8122
8800
  "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. ",
8801
+ "aliases": [
8802
+ "claude-opus-4-7"
8803
+ ],
8804
+ "$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
8805
  "endpoints": [
8126
8806
  "chat"
8127
8807
  ],
@@ -8238,15 +8918,31 @@
8238
8918
  "top_k",
8239
8919
  "thinking.type.enabled"
8240
8920
  ],
8241
- "status": "candidate"
8921
+ "status": "candidate",
8922
+ "deferredToolLoading": {
8923
+ "value": true,
8924
+ "source": "official-doc",
8925
+ "confidence": "declared",
8926
+ "observedAt": "2026-09-25T18:30:00Z",
8927
+ "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)."
8928
+ },
8929
+ "assistantPrefill": {
8930
+ "value": false,
8931
+ "source": "official-doc",
8932
+ "confidence": "declared",
8933
+ "observedAt": "2026-09-26T00:00:00Z",
8934
+ "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.\""
8935
+ }
8242
8936
  },
8243
8937
  {
8244
8938
  "key": "console/claude-opus-4.8",
8245
8939
  "providerId": "console",
8246
8940
  "upstreamId": "claude-opus-4.8",
8247
8941
  "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. ",
8942
+ "aliases": [
8943
+ "claude-opus-4-8"
8944
+ ],
8945
+ "$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
8946
  "endpoints": [
8251
8947
  "chat"
8252
8948
  ],
@@ -8363,7 +9059,46 @@
8363
9059
  "top_k",
8364
9060
  "thinking.type.enabled"
8365
9061
  ],
8366
- "status": "candidate"
9062
+ "status": "candidate",
9063
+ "deferredToolLoading": {
9064
+ "value": true,
9065
+ "source": "official-doc",
9066
+ "confidence": "declared",
9067
+ "observedAt": "2026-09-25T18:30:00Z",
9068
+ "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)."
9069
+ },
9070
+ "midConversationSystem": {
9071
+ "value": true,
9072
+ "source": "official-doc",
9073
+ "confidence": "declared",
9074
+ "observedAt": "2026-09-25T19:00:00Z",
9075
+ "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.\""
9076
+ },
9077
+ "midConversationToolChanges": {
9078
+ "value": {
9079
+ "beta": "mid-conversation-tool-changes-2026-07-01"
9080
+ },
9081
+ "source": "official-doc",
9082
+ "confidence": "declared",
9083
+ "observedAt": "2026-09-26T00:00:00Z",
9084
+ "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)."
9085
+ },
9086
+ "inlineToolDefinitions": {
9087
+ "value": {
9088
+ "beta": "inline-tools-2026-09-15"
9089
+ },
9090
+ "source": "official-doc",
9091
+ "confidence": "declared",
9092
+ "observedAt": "2026-09-26T00:00:00Z",
9093
+ "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."
9094
+ },
9095
+ "assistantPrefill": {
9096
+ "value": false,
9097
+ "source": "official-doc",
9098
+ "confidence": "declared",
9099
+ "observedAt": "2026-09-26T00:00:00Z",
9100
+ "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.\""
9101
+ }
8367
9102
  },
8368
9103
  {
8369
9104
  "key": "console/claude-opus-5",
@@ -8371,7 +9106,7 @@
8371
9106
  "upstreamId": "claude-opus-5",
8372
9107
  "displayName": "Claude Opus 5",
8373
9108
  "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. ",
9109
+ "$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
9110
  "endpoints": [
8376
9111
  "chat"
8377
9112
  ],
@@ -8511,6 +9246,15 @@
8511
9246
  "confidence": "declared",
8512
9247
  "observedAt": "2026-09-25T12:30:00Z",
8513
9248
  "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)."
9249
+ },
9250
+ "perMessageEffort": {
9251
+ "value": {
9252
+ "beta": "mid-conversation-output-config-2026-07-01"
9253
+ },
9254
+ "source": "official-doc",
9255
+ "confidence": "declared",
9256
+ "observedAt": "2026-09-25T18:00:00Z",
9257
+ "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
9258
  }
8515
9259
  },
8516
9260
  "pricing": {
@@ -8529,9 +9273,50 @@
8529
9273
  "temperature",
8530
9274
  "top_p",
8531
9275
  "top_k",
8532
- "thinking.type.enabled"
9276
+ "thinking.type.enabled",
9277
+ "thinking.type.disabled+output_config.effort.xhigh",
9278
+ "thinking.type.disabled+output_config.effort.max"
8533
9279
  ],
8534
- "status": "candidate"
9280
+ "status": "candidate",
9281
+ "deferredToolLoading": {
9282
+ "value": true,
9283
+ "source": "official-doc",
9284
+ "confidence": "declared",
9285
+ "observedAt": "2026-09-25T18:30:00Z",
9286
+ "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)."
9287
+ },
9288
+ "midConversationSystem": {
9289
+ "value": true,
9290
+ "source": "official-doc",
9291
+ "confidence": "declared",
9292
+ "observedAt": "2026-09-25T19:00:00Z",
9293
+ "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.\""
9294
+ },
9295
+ "midConversationToolChanges": {
9296
+ "value": {
9297
+ "beta": "mid-conversation-tool-changes-2026-07-01"
9298
+ },
9299
+ "source": "official-doc",
9300
+ "confidence": "declared",
9301
+ "observedAt": "2026-09-26T00:00:00Z",
9302
+ "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)."
9303
+ },
9304
+ "inlineToolDefinitions": {
9305
+ "value": {
9306
+ "beta": "inline-tools-2026-09-15"
9307
+ },
9308
+ "source": "official-doc",
9309
+ "confidence": "declared",
9310
+ "observedAt": "2026-09-26T00:00:00Z",
9311
+ "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."
9312
+ },
9313
+ "assistantPrefill": {
9314
+ "value": false,
9315
+ "source": "official-doc",
9316
+ "confidence": "declared",
9317
+ "observedAt": "2026-09-26T00:00:00Z",
9318
+ "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.\""
9319
+ }
8535
9320
  },
8536
9321
  {
8537
9322
  "key": "console/claude-sonnet-4.5",
@@ -8645,15 +9430,24 @@
8645
9430
  "unsupportedParameters": [
8646
9431
  "thinking.type.adaptive"
8647
9432
  ],
8648
- "status": "candidate"
9433
+ "status": "candidate",
9434
+ "deferredToolLoading": {
9435
+ "value": true,
9436
+ "source": "official-doc",
9437
+ "confidence": "declared",
9438
+ "observedAt": "2026-09-25T18:30:00Z",
9439
+ "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)."
9440
+ }
8649
9441
  },
8650
9442
  {
8651
9443
  "key": "console/claude-sonnet-4.6",
8652
9444
  "providerId": "console",
8653
9445
  "upstreamId": "claude-sonnet-4.6",
8654
9446
  "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. ",
9447
+ "aliases": [
9448
+ "claude-sonnet-4-6"
9449
+ ],
9450
+ "$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
9451
  "endpoints": [
8658
9452
  "chat"
8659
9453
  ],
@@ -8764,7 +9558,14 @@
8764
9558
  "observedAt": "2026-09-19T00:00:00Z"
8765
9559
  },
8766
9560
  "unsupportedParameters": [],
8767
- "status": "candidate"
9561
+ "status": "candidate",
9562
+ "deferredToolLoading": {
9563
+ "value": true,
9564
+ "source": "official-doc",
9565
+ "confidence": "declared",
9566
+ "observedAt": "2026-09-25T18:30:00Z",
9567
+ "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)."
9568
+ }
8768
9569
  },
8769
9570
  {
8770
9571
  "key": "console/claude-sonnet-5",
@@ -8934,7 +9735,14 @@
8934
9735
  "top_k",
8935
9736
  "thinking.type.enabled"
8936
9737
  ],
8937
- "status": "candidate"
9738
+ "status": "candidate",
9739
+ "assistantPrefill": {
9740
+ "value": false,
9741
+ "source": "official-doc",
9742
+ "confidence": "declared",
9743
+ "observedAt": "2026-09-26T00:00:00Z",
9744
+ "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.\""
9745
+ }
8938
9746
  },
8939
9747
  {
8940
9748
  "key": "openai/gpt-5.6",
@@ -9047,7 +9855,35 @@
9047
9855
  "observedAt": "2026-09-25T10:21:48Z"
9048
9856
  },
9049
9857
  "unsupportedParameters": [],
9050
- "status": "candidate"
9858
+ "status": "candidate",
9859
+ "promptCacheKey": {
9860
+ "value": true,
9861
+ "source": "official-doc",
9862
+ "confidence": "declared",
9863
+ "observedAt": "2026-09-25T19:30:00Z",
9864
+ "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\"."
9865
+ },
9866
+ "clientToolSearch": {
9867
+ "value": true,
9868
+ "source": "official-doc",
9869
+ "confidence": "declared",
9870
+ "observedAt": "2026-09-26T00:00:00Z",
9871
+ "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."
9872
+ },
9873
+ "additionalToolsItem": {
9874
+ "value": true,
9875
+ "source": "official-doc",
9876
+ "confidence": "declared",
9877
+ "observedAt": "2026-09-26T00:00:00Z",
9878
+ "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."
9879
+ },
9880
+ "allowedToolsChoice": {
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/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."
9886
+ }
9051
9887
  },
9052
9888
  {
9053
9889
  "key": "openai/gpt-4.1-mini",
@@ -9126,7 +9962,14 @@
9126
9962
  "observedAt": "2026-09-19T00:00:00Z"
9127
9963
  },
9128
9964
  "unsupportedParameters": [],
9129
- "status": "candidate"
9965
+ "status": "candidate",
9966
+ "promptCacheKey": {
9967
+ "value": true,
9968
+ "source": "official-doc",
9969
+ "confidence": "declared",
9970
+ "observedAt": "2026-09-25T19:30:00Z",
9971
+ "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\"."
9972
+ }
9130
9973
  },
9131
9974
  {
9132
9975
  "key": "openai/gpt-4.1-nano",
@@ -9212,7 +10055,14 @@
9212
10055
  "observedAt": "2026-09-19T00:00:00Z"
9213
10056
  },
9214
10057
  "unsupportedParameters": [],
9215
- "status": "candidate"
10058
+ "status": "candidate",
10059
+ "promptCacheKey": {
10060
+ "value": true,
10061
+ "source": "official-doc",
10062
+ "confidence": "declared",
10063
+ "observedAt": "2026-09-25T19:30:00Z",
10064
+ "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\"."
10065
+ }
9216
10066
  },
9217
10067
  {
9218
10068
  "key": "openai/gpt-4o",
@@ -9291,7 +10141,14 @@
9291
10141
  "observedAt": "2026-09-19T00:00:00Z"
9292
10142
  },
9293
10143
  "unsupportedParameters": [],
9294
- "status": "candidate"
10144
+ "status": "candidate",
10145
+ "promptCacheKey": {
10146
+ "value": true,
10147
+ "source": "official-doc",
10148
+ "confidence": "declared",
10149
+ "observedAt": "2026-09-25T19:30:00Z",
10150
+ "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\"."
10151
+ }
9295
10152
  },
9296
10153
  {
9297
10154
  "key": "openai/gpt-4o-2024-11-20",
@@ -9370,7 +10227,14 @@
9370
10227
  "observedAt": "2026-09-19T00:00:00Z"
9371
10228
  },
9372
10229
  "unsupportedParameters": [],
9373
- "status": "candidate"
10230
+ "status": "candidate",
10231
+ "promptCacheKey": {
10232
+ "value": true,
10233
+ "source": "official-doc",
10234
+ "confidence": "declared",
10235
+ "observedAt": "2026-09-25T19:30:00Z",
10236
+ "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\"."
10237
+ }
9374
10238
  },
9375
10239
  {
9376
10240
  "key": "openai/gpt-4o-mini",
@@ -9449,7 +10313,14 @@
9449
10313
  "observedAt": "2026-09-19T00:00:00Z"
9450
10314
  },
9451
10315
  "unsupportedParameters": [],
9452
- "status": "candidate"
10316
+ "status": "candidate",
10317
+ "promptCacheKey": {
10318
+ "value": true,
10319
+ "source": "official-doc",
10320
+ "confidence": "declared",
10321
+ "observedAt": "2026-09-25T19:30:00Z",
10322
+ "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\"."
10323
+ }
9453
10324
  },
9454
10325
  {
9455
10326
  "key": "openai/gpt-5.4",
@@ -9553,7 +10424,35 @@
9553
10424
  "observedAt": "2026-09-19T00:00:00Z"
9554
10425
  },
9555
10426
  "unsupportedParameters": [],
9556
- "status": "candidate"
10427
+ "status": "candidate",
10428
+ "promptCacheKey": {
10429
+ "value": true,
10430
+ "source": "official-doc",
10431
+ "confidence": "declared",
10432
+ "observedAt": "2026-09-25T19:30:00Z",
10433
+ "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\"."
10434
+ },
10435
+ "clientToolSearch": {
10436
+ "value": true,
10437
+ "source": "official-doc",
10438
+ "confidence": "declared",
10439
+ "observedAt": "2026-09-26T00:00:00Z",
10440
+ "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."
10441
+ },
10442
+ "additionalToolsItem": {
10443
+ "value": true,
10444
+ "source": "official-doc",
10445
+ "confidence": "declared",
10446
+ "observedAt": "2026-09-26T00:00:00Z",
10447
+ "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."
10448
+ },
10449
+ "allowedToolsChoice": {
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/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."
10455
+ }
9557
10456
  },
9558
10457
  {
9559
10458
  "key": "openai/gpt-5.4-mini",
@@ -9664,7 +10563,35 @@
9664
10563
  "observedAt": "2026-09-19T00:00:00Z"
9665
10564
  },
9666
10565
  "unsupportedParameters": [],
9667
- "status": "candidate"
10566
+ "status": "candidate",
10567
+ "promptCacheKey": {
10568
+ "value": true,
10569
+ "source": "official-doc",
10570
+ "confidence": "declared",
10571
+ "observedAt": "2026-09-25T19:30:00Z",
10572
+ "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\"."
10573
+ },
10574
+ "clientToolSearch": {
10575
+ "value": true,
10576
+ "source": "official-doc",
10577
+ "confidence": "declared",
10578
+ "observedAt": "2026-09-26T00:00:00Z",
10579
+ "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."
10580
+ },
10581
+ "additionalToolsItem": {
10582
+ "value": true,
10583
+ "source": "official-doc",
10584
+ "confidence": "declared",
10585
+ "observedAt": "2026-09-26T00:00:00Z",
10586
+ "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."
10587
+ },
10588
+ "allowedToolsChoice": {
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/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."
10594
+ }
9668
10595
  },
9669
10596
  {
9670
10597
  "key": "openai/gpt-5.4-nano",
@@ -9775,7 +10702,35 @@
9775
10702
  "observedAt": "2026-09-19T00:00:00Z"
9776
10703
  },
9777
10704
  "unsupportedParameters": [],
9778
- "status": "candidate"
10705
+ "status": "candidate",
10706
+ "promptCacheKey": {
10707
+ "value": true,
10708
+ "source": "official-doc",
10709
+ "confidence": "declared",
10710
+ "observedAt": "2026-09-25T19:30:00Z",
10711
+ "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\"."
10712
+ },
10713
+ "clientToolSearch": {
10714
+ "value": true,
10715
+ "source": "official-doc",
10716
+ "confidence": "declared",
10717
+ "observedAt": "2026-09-26T00:00:00Z",
10718
+ "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."
10719
+ },
10720
+ "additionalToolsItem": {
10721
+ "value": true,
10722
+ "source": "official-doc",
10723
+ "confidence": "declared",
10724
+ "observedAt": "2026-09-26T00:00:00Z",
10725
+ "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."
10726
+ },
10727
+ "allowedToolsChoice": {
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/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."
10733
+ }
9779
10734
  },
9780
10735
  {
9781
10736
  "key": "openai/gpt-5.4-pro",
@@ -9861,7 +10816,35 @@
9861
10816
  "observedAt": "2026-09-19T00:00:00Z"
9862
10817
  },
9863
10818
  "unsupportedParameters": [],
9864
- "status": "candidate"
10819
+ "status": "candidate",
10820
+ "promptCacheKey": {
10821
+ "value": true,
10822
+ "source": "official-doc",
10823
+ "confidence": "declared",
10824
+ "observedAt": "2026-09-25T19:30:00Z",
10825
+ "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\"."
10826
+ },
10827
+ "clientToolSearch": {
10828
+ "value": true,
10829
+ "source": "official-doc",
10830
+ "confidence": "declared",
10831
+ "observedAt": "2026-09-26T00:00:00Z",
10832
+ "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."
10833
+ },
10834
+ "additionalToolsItem": {
10835
+ "value": true,
10836
+ "source": "official-doc",
10837
+ "confidence": "declared",
10838
+ "observedAt": "2026-09-26T00:00:00Z",
10839
+ "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."
10840
+ },
10841
+ "allowedToolsChoice": {
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/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."
10847
+ }
9865
10848
  },
9866
10849
  {
9867
10850
  "key": "openai/gpt-5.5",
@@ -9965,7 +10948,35 @@
9965
10948
  "observedAt": "2026-09-19T00:00:00Z"
9966
10949
  },
9967
10950
  "unsupportedParameters": [],
9968
- "status": "candidate"
10951
+ "status": "candidate",
10952
+ "promptCacheKey": {
10953
+ "value": true,
10954
+ "source": "official-doc",
10955
+ "confidence": "declared",
10956
+ "observedAt": "2026-09-25T19:30:00Z",
10957
+ "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\"."
10958
+ },
10959
+ "clientToolSearch": {
10960
+ "value": true,
10961
+ "source": "official-doc",
10962
+ "confidence": "declared",
10963
+ "observedAt": "2026-09-26T00:00:00Z",
10964
+ "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."
10965
+ },
10966
+ "additionalToolsItem": {
10967
+ "value": true,
10968
+ "source": "official-doc",
10969
+ "confidence": "declared",
10970
+ "observedAt": "2026-09-26T00:00:00Z",
10971
+ "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."
10972
+ },
10973
+ "allowedToolsChoice": {
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/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."
10979
+ }
9969
10980
  },
9970
10981
  {
9971
10982
  "key": "openai/gpt-5.5-pro",
@@ -10058,7 +11069,35 @@
10058
11069
  "observedAt": "2026-09-19T00:00:00Z"
10059
11070
  },
10060
11071
  "unsupportedParameters": [],
10061
- "status": "candidate"
11072
+ "status": "candidate",
11073
+ "promptCacheKey": {
11074
+ "value": true,
11075
+ "source": "official-doc",
11076
+ "confidence": "declared",
11077
+ "observedAt": "2026-09-25T19:30:00Z",
11078
+ "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\"."
11079
+ },
11080
+ "clientToolSearch": {
11081
+ "value": true,
11082
+ "source": "official-doc",
11083
+ "confidence": "declared",
11084
+ "observedAt": "2026-09-26T00:00:00Z",
11085
+ "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."
11086
+ },
11087
+ "additionalToolsItem": {
11088
+ "value": true,
11089
+ "source": "official-doc",
11090
+ "confidence": "declared",
11091
+ "observedAt": "2026-09-26T00:00:00Z",
11092
+ "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."
11093
+ },
11094
+ "allowedToolsChoice": {
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/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."
11100
+ }
10062
11101
  },
10063
11102
  {
10064
11103
  "key": "openai/o3",
@@ -10159,7 +11198,14 @@
10159
11198
  "observedAt": "2026-09-19T00:00:00Z"
10160
11199
  },
10161
11200
  "unsupportedParameters": [],
10162
- "status": "candidate"
11201
+ "status": "candidate",
11202
+ "promptCacheKey": {
11203
+ "value": true,
11204
+ "source": "official-doc",
11205
+ "confidence": "declared",
11206
+ "observedAt": "2026-09-25T19:30:00Z",
11207
+ "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\"."
11208
+ }
10163
11209
  },
10164
11210
  {
10165
11211
  "key": "openai/o3-mini",
@@ -10252,7 +11298,14 @@
10252
11298
  "observedAt": "2026-09-19T00:00:00Z"
10253
11299
  },
10254
11300
  "unsupportedParameters": [],
10255
- "status": "candidate"
11301
+ "status": "candidate",
11302
+ "promptCacheKey": {
11303
+ "value": true,
11304
+ "source": "official-doc",
11305
+ "confidence": "declared",
11306
+ "observedAt": "2026-09-25T19:30:00Z",
11307
+ "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\"."
11308
+ }
10256
11309
  },
10257
11310
  {
10258
11311
  "key": "openrouter/openai/gpt-5.4",
@@ -20760,9 +21813,10 @@
20760
21813
  "upstreamId": "grok-4.7",
20761
21814
  "displayName": "Grok 4.7",
20762
21815
  "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).",
21816
+ "$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
21817
  "endpoints": [
20765
- "chat"
21818
+ "chat",
21819
+ "responses"
20766
21820
  ],
20767
21821
  "contextWindow": {
20768
21822
  "value": 500000,
@@ -20832,8 +21886,29 @@
20832
21886
  "high",
20833
21887
  "xhigh"
20834
21888
  ],
20835
- "continuation": "plaintext",
20836
- "defaultEffort": "high"
21889
+ "continuation": "opaque-provider-state",
21890
+ "defaultEffort": "high",
21891
+ "readableState": {
21892
+ "value": "summary",
21893
+ "source": "official-doc",
21894
+ "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\", … }]`",
21895
+ "confidence": "declared",
21896
+ "observedAt": "2026-09-25T17:09:48Z"
21897
+ },
21898
+ "summaryRequest": {
21899
+ "value": {
21900
+ "field": "reasoning.summary",
21901
+ "values": [
21902
+ "detailed",
21903
+ "auto",
21904
+ "concise"
21905
+ ]
21906
+ },
21907
+ "source": "official-doc",
21908
+ "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",
21909
+ "confidence": "declared",
21910
+ "observedAt": "2026-09-25T17:09:48Z"
21911
+ }
20837
21912
  },
20838
21913
  "pricing": {
20839
21914
  "value": {
@@ -20862,9 +21937,10 @@
20862
21937
  "grok-4.5-latest",
20863
21938
  "grok-build-latest"
20864
21939
  ],
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).",
21940
+ "$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
21941
  "endpoints": [
20867
- "chat"
21942
+ "chat",
21943
+ "responses"
20868
21944
  ],
20869
21945
  "contextWindow": {
20870
21946
  "value": 500000,
@@ -20933,7 +22009,7 @@
20933
22009
  "medium",
20934
22010
  "high"
20935
22011
  ],
20936
- "continuation": "plaintext",
22012
+ "continuation": "opaque-provider-state",
20937
22013
  "defaultEffort": "high"
20938
22014
  },
20939
22015
  "pricing": {
@@ -47374,7 +48450,21 @@
47374
48450
  }
47375
48451
  },
47376
48452
  "unsupportedParameters": [],
47377
- "status": "candidate"
48453
+ "status": "candidate",
48454
+ "promptCacheKey": {
48455
+ "value": true,
48456
+ "source": "official-doc",
48457
+ "confidence": "declared",
48458
+ "observedAt": "2026-09-25T19:30:00Z",
48459
+ "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."
48460
+ },
48461
+ "clientToolSearch": {
48462
+ "value": true,
48463
+ "source": "upstream-static",
48464
+ "confidence": "declared",
48465
+ "observedAt": "2026-09-26T00:00:00Z",
48466
+ "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."
48467
+ }
47378
48468
  },
47379
48469
  {
47380
48470
  "key": "codex-oauth/gpt-6-luna",
@@ -47482,7 +48572,21 @@
47482
48572
  }
47483
48573
  },
47484
48574
  "unsupportedParameters": [],
47485
- "status": "candidate"
48575
+ "status": "candidate",
48576
+ "promptCacheKey": {
48577
+ "value": true,
48578
+ "source": "official-doc",
48579
+ "confidence": "declared",
48580
+ "observedAt": "2026-09-25T19:30:00Z",
48581
+ "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."
48582
+ },
48583
+ "clientToolSearch": {
48584
+ "value": true,
48585
+ "source": "upstream-static",
48586
+ "confidence": "declared",
48587
+ "observedAt": "2026-09-26T00:00:00Z",
48588
+ "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."
48589
+ }
47486
48590
  },
47487
48591
  {
47488
48592
  "key": "openai/gpt-6-sol",
@@ -47617,6 +48721,15 @@
47617
48721
  "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
48722
  "confidence": "declared",
47619
48723
  "observedAt": "2026-09-06T00:00:00Z"
48724
+ },
48725
+ "perMessageEffort": {
48726
+ "value": {
48727
+ "item": "configuration_update"
48728
+ },
48729
+ "source": "official-doc",
48730
+ "confidence": "declared",
48731
+ "observedAt": "2026-09-26T00:00:00Z",
48732
+ "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
48733
  }
47621
48734
  },
47622
48735
  "pricing": {
@@ -47632,7 +48745,35 @@
47632
48745
  "observedAt": "2026-09-25T10:21:48Z"
47633
48746
  },
47634
48747
  "unsupportedParameters": [],
47635
- "status": "candidate"
48748
+ "status": "candidate",
48749
+ "promptCacheKey": {
48750
+ "value": true,
48751
+ "source": "official-doc",
48752
+ "confidence": "declared",
48753
+ "observedAt": "2026-09-25T19:30:00Z",
48754
+ "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\"."
48755
+ },
48756
+ "clientToolSearch": {
48757
+ "value": true,
48758
+ "source": "official-doc",
48759
+ "confidence": "declared",
48760
+ "observedAt": "2026-09-26T00:00:00Z",
48761
+ "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."
48762
+ },
48763
+ "additionalToolsItem": {
48764
+ "value": true,
48765
+ "source": "official-doc",
48766
+ "confidence": "declared",
48767
+ "observedAt": "2026-09-26T00:00:00Z",
48768
+ "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."
48769
+ },
48770
+ "allowedToolsChoice": {
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/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."
48776
+ }
47636
48777
  },
47637
48778
  {
47638
48779
  "key": "openai/gpt-6-luna",
@@ -47767,6 +48908,15 @@
47767
48908
  "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
48909
  "confidence": "declared",
47769
48910
  "observedAt": "2026-09-06T00:00:00Z"
48911
+ },
48912
+ "perMessageEffort": {
48913
+ "value": {
48914
+ "item": "configuration_update"
48915
+ },
48916
+ "source": "official-doc",
48917
+ "confidence": "declared",
48918
+ "observedAt": "2026-09-26T00:00:00Z",
48919
+ "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
48920
  }
47771
48921
  },
47772
48922
  "pricing": {
@@ -47782,7 +48932,35 @@
47782
48932
  "observedAt": "2026-09-25T10:21:48Z"
47783
48933
  },
47784
48934
  "unsupportedParameters": [],
47785
- "status": "candidate"
48935
+ "status": "candidate",
48936
+ "promptCacheKey": {
48937
+ "value": true,
48938
+ "source": "official-doc",
48939
+ "confidence": "declared",
48940
+ "observedAt": "2026-09-25T19:30:00Z",
48941
+ "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\"."
48942
+ },
48943
+ "clientToolSearch": {
48944
+ "value": true,
48945
+ "source": "official-doc",
48946
+ "confidence": "declared",
48947
+ "observedAt": "2026-09-26T00:00:00Z",
48948
+ "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."
48949
+ },
48950
+ "additionalToolsItem": {
48951
+ "value": true,
48952
+ "source": "official-doc",
48953
+ "confidence": "declared",
48954
+ "observedAt": "2026-09-26T00:00:00Z",
48955
+ "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."
48956
+ },
48957
+ "allowedToolsChoice": {
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/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."
48963
+ }
47786
48964
  },
47787
48965
  {
47788
48966
  "key": "anthropic/claude-opus-5-5",
@@ -47941,6 +49119,15 @@
47941
49119
  "confidence": "declared",
47942
49120
  "observedAt": "2026-09-25T13:00:00Z",
47943
49121
  "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\")."
49122
+ },
49123
+ "perMessageEffort": {
49124
+ "value": {
49125
+ "beta": "mid-conversation-output-config-2026-07-01"
49126
+ },
49127
+ "source": "official-doc",
49128
+ "confidence": "declared",
49129
+ "observedAt": "2026-09-25T18:00:00Z",
49130
+ "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
49131
  }
47945
49132
  },
47946
49133
  "pricing": {
@@ -47961,7 +49148,46 @@
47961
49148
  "tool_choice.any",
47962
49149
  "tool_choice.tool"
47963
49150
  ],
47964
- "status": "candidate"
49151
+ "status": "candidate",
49152
+ "deferredToolLoading": {
49153
+ "value": true,
49154
+ "source": "official-doc",
49155
+ "confidence": "declared",
49156
+ "observedAt": "2026-09-25T18:30:00Z",
49157
+ "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)."
49158
+ },
49159
+ "midConversationSystem": {
49160
+ "value": true,
49161
+ "source": "official-doc",
49162
+ "confidence": "declared",
49163
+ "observedAt": "2026-09-25T19:00:00Z",
49164
+ "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.\""
49165
+ },
49166
+ "midConversationToolChanges": {
49167
+ "value": {
49168
+ "beta": "mid-conversation-tool-changes-2026-07-01"
49169
+ },
49170
+ "source": "official-doc",
49171
+ "confidence": "declared",
49172
+ "observedAt": "2026-09-26T00:00:00Z",
49173
+ "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)."
49174
+ },
49175
+ "inlineToolDefinitions": {
49176
+ "value": {
49177
+ "beta": "inline-tools-2026-09-15"
49178
+ },
49179
+ "source": "official-doc",
49180
+ "confidence": "declared",
49181
+ "observedAt": "2026-09-26T00:00:00Z",
49182
+ "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."
49183
+ },
49184
+ "assistantPrefill": {
49185
+ "value": false,
49186
+ "source": "official-doc",
49187
+ "confidence": "declared",
49188
+ "observedAt": "2026-09-26T00:00:00Z",
49189
+ "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.\""
49190
+ }
47965
49191
  },
47966
49192
  {
47967
49193
  "key": "console/claude-opus-5-5",
@@ -48120,6 +49346,15 @@
48120
49346
  "confidence": "declared",
48121
49347
  "observedAt": "2026-09-25T13:00:00Z",
48122
49348
  "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\")."
49349
+ },
49350
+ "perMessageEffort": {
49351
+ "value": {
49352
+ "beta": "mid-conversation-output-config-2026-07-01"
49353
+ },
49354
+ "source": "official-doc",
49355
+ "confidence": "declared",
49356
+ "observedAt": "2026-09-25T18:00:00Z",
49357
+ "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
49358
  }
48124
49359
  },
48125
49360
  "pricing": {
@@ -48140,7 +49375,46 @@
48140
49375
  "tool_choice.any",
48141
49376
  "tool_choice.tool"
48142
49377
  ],
48143
- "status": "candidate"
49378
+ "status": "candidate",
49379
+ "deferredToolLoading": {
49380
+ "value": true,
49381
+ "source": "official-doc",
49382
+ "confidence": "declared",
49383
+ "observedAt": "2026-09-25T18:30:00Z",
49384
+ "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)."
49385
+ },
49386
+ "midConversationSystem": {
49387
+ "value": true,
49388
+ "source": "official-doc",
49389
+ "confidence": "declared",
49390
+ "observedAt": "2026-09-25T19:00:00Z",
49391
+ "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.\""
49392
+ },
49393
+ "midConversationToolChanges": {
49394
+ "value": {
49395
+ "beta": "mid-conversation-tool-changes-2026-07-01"
49396
+ },
49397
+ "source": "official-doc",
49398
+ "confidence": "declared",
49399
+ "observedAt": "2026-09-26T00:00:00Z",
49400
+ "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)."
49401
+ },
49402
+ "inlineToolDefinitions": {
49403
+ "value": {
49404
+ "beta": "inline-tools-2026-09-15"
49405
+ },
49406
+ "source": "official-doc",
49407
+ "confidence": "declared",
49408
+ "observedAt": "2026-09-26T00:00:00Z",
49409
+ "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."
49410
+ },
49411
+ "assistantPrefill": {
49412
+ "value": false,
49413
+ "source": "official-doc",
49414
+ "confidence": "declared",
49415
+ "observedAt": "2026-09-26T00:00:00Z",
49416
+ "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.\""
49417
+ }
48144
49418
  },
48145
49419
  {
48146
49420
  "key": "mistral/mistral-large-2512",