@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.
package/dist/index.js CHANGED
@@ -50,6 +50,10 @@ var REPLAY_SCOPES = ["current-tool-loop", "current-turn", "selected-turns", "all
50
50
  var TOOL_LOOP_REQUIREMENTS = ["hard-error", "silent-degradation", "not-required"];
51
51
  var EFFORT_REQUEST_FIELDS = ["output_config.effort"];
52
52
  var BLOCK_BINDING_BETAS = ["thinking-binding-controls-2026-08-01"];
53
+ var PER_MESSAGE_EFFORT_BETAS = ["mid-conversation-output-config-2026-07-01"];
54
+ var PER_MESSAGE_EFFORT_ITEMS = ["configuration_update"];
55
+ var MID_CONVERSATION_TOOL_CHANGE_BETAS = ["mid-conversation-tool-changes-2026-07-01"];
56
+ var INLINE_TOOL_DEFINITION_BETAS = ["inline-tools-2026-09-15"];
53
57
  var CATALOG_VOCABULARIES = {
54
58
  protocols: PROTOCOLS,
55
59
  authKinds: AUTH_KINDS,
@@ -75,7 +79,11 @@ var CATALOG_VOCABULARIES = {
75
79
  replayScopes: REPLAY_SCOPES,
76
80
  toolLoopRequirements: TOOL_LOOP_REQUIREMENTS,
77
81
  effortRequestFields: EFFORT_REQUEST_FIELDS,
78
- blockBindingBetas: BLOCK_BINDING_BETAS
82
+ blockBindingBetas: BLOCK_BINDING_BETAS,
83
+ perMessageEffortBetas: PER_MESSAGE_EFFORT_BETAS,
84
+ perMessageEffortItems: PER_MESSAGE_EFFORT_ITEMS,
85
+ midConversationToolChangeBetas: MID_CONVERSATION_TOOL_CHANGE_BETAS,
86
+ inlineToolDefinitionBetas: INLINE_TOOL_DEFINITION_BETAS
79
87
  };
80
88
  var SECRET_FIELD_NAME_RE = /^(?:api[_-]?key|apikey|secret|secret[_-]?key|password|passwd|token|access[_-]?token|refresh[_-]?token|id[_-]?token|bearer|private[_-]?key|client[_-]?secret|session[_-]?token|credential|credentials|authorization|auth[_-]?token|aws[_-]?secret[_-]?access[_-]?key|aws[_-]?access[_-]?key[_-]?id)$/i;
81
89
  var SECRET_VALUE_PATTERNS = [
@@ -308,6 +316,17 @@ function checkReasoning(errs, v, path) {
308
316
  if (typeof val["beta"] !== "string" || !BLOCK_BINDING_BETAS.includes(val["beta"]))
309
317
  errs.add(`${p}.beta`, `unknown block-binding beta ${describe(val["beta"])}`);
310
318
  }, false);
319
+ checkEvidence(errs, v["perMessageEffort"], `${path}.perMessageEffort`, (val, p) => {
320
+ if (!isRecord(val))
321
+ return errs.add(p, `expected {beta} or {item}, got ${describe(val)}`);
322
+ const keys = Object.keys(val);
323
+ if (keys.length !== 1 || keys[0] !== "beta" && keys[0] !== "item")
324
+ return errs.add(p, `expected exactly one of {beta} or {item}, got keys ${describe(keys)}`);
325
+ if (keys[0] === "beta" && (typeof val["beta"] !== "string" || !PER_MESSAGE_EFFORT_BETAS.includes(val["beta"])))
326
+ errs.add(`${p}.beta`, `unknown per-message effort beta ${describe(val["beta"])}`);
327
+ if (keys[0] === "item" && (typeof val["item"] !== "string" || !PER_MESSAGE_EFFORT_ITEMS.includes(val["item"])))
328
+ errs.add(`${p}.item`, `unknown per-message effort item ${describe(val["item"])}`);
329
+ }, false);
311
330
  }
312
331
  function checkProvider(errs, v, path) {
313
332
  if (!isRecord(v)) {
@@ -548,6 +567,24 @@ function checkModel(errs, v, path) {
548
567
  checkEvidence(errs, v["parallelTools"], `${path}.parallelTools`, evidenceBoolean, false);
549
568
  checkEvidence(errs, v["structuredOutput"], `${path}.structuredOutput`, evidenceBoolean, false);
550
569
  checkEvidence(errs, v["promptCaching"], `${path}.promptCaching`, evidenceBoolean, false);
570
+ checkEvidence(errs, v["deferredToolLoading"], `${path}.deferredToolLoading`, evidenceBoolean, false);
571
+ checkEvidence(errs, v["midConversationSystem"], `${path}.midConversationSystem`, evidenceBoolean, false);
572
+ checkEvidence(errs, v["promptCacheKey"], `${path}.promptCacheKey`, evidenceBoolean, false);
573
+ const betaOnly = (vocabulary, what) => (val, p) => {
574
+ if (!isRecord(val))
575
+ return errs.add(p, `expected {beta}, got ${describe(val)}`);
576
+ for (const key of Object.keys(val))
577
+ if (key !== "beta")
578
+ errs.add(`${p}.${key}`, "unknown key");
579
+ if (typeof val["beta"] !== "string" || !vocabulary.includes(val["beta"]))
580
+ errs.add(`${p}.beta`, `unknown ${what} beta ${describe(val["beta"])}`);
581
+ };
582
+ checkEvidence(errs, v["midConversationToolChanges"], `${path}.midConversationToolChanges`, betaOnly(MID_CONVERSATION_TOOL_CHANGE_BETAS, "mid-conversation tool-change"), false);
583
+ checkEvidence(errs, v["inlineToolDefinitions"], `${path}.inlineToolDefinitions`, betaOnly(INLINE_TOOL_DEFINITION_BETAS, "inline tool-definition"), false);
584
+ checkEvidence(errs, v["clientToolSearch"], `${path}.clientToolSearch`, evidenceBoolean, false);
585
+ checkEvidence(errs, v["additionalToolsItem"], `${path}.additionalToolsItem`, evidenceBoolean, false);
586
+ checkEvidence(errs, v["allowedToolsChoice"], `${path}.allowedToolsChoice`, evidenceBoolean, false);
587
+ checkEvidence(errs, v["assistantPrefill"], `${path}.assistantPrefill`, evidenceBoolean, false);
551
588
  checkEvidence(errs, v["classifierEligible"], `${path}.classifierEligible`, evidenceBoolean, false);
552
589
  checkEvidence(errs, v["pricing"], `${path}.pricing`, (val, p) => checkPricing(errs, val, p), false);
553
590
  if (v["reasoning"] !== undefined)
@@ -7776,6 +7813,7 @@ var catalog_default = {
7776
7813
  id: "xai",
7777
7814
  displayName: "xAI (Grok)",
7778
7815
  protocols: [
7816
+ "openai-responses",
7779
7817
  "openai-chat-completions"
7780
7818
  ],
7781
7819
  authKinds: [
@@ -7786,7 +7824,7 @@ var catalog_default = {
7786
7824
  },
7787
7825
  modelDiscovery: "openai-models",
7788
7826
  liveCatalogAuthority: "unknown",
7789
- adapterId: "winter.openai-chat-completions",
7827
+ adapterId: "winter.openai-responses",
7790
7828
  family: "openai",
7791
7829
  upstream: {
7792
7830
  project: "winter",
@@ -15136,6 +15174,45 @@ var catalog_default = {
15136
15174
  "thinking.type.disabled"
15137
15175
  ],
15138
15176
  status: "candidate",
15177
+ deferredToolLoading: {
15178
+ value: true,
15179
+ source: "official-doc",
15180
+ confidence: "declared",
15181
+ observedAt: "2026-09-25T18:30:00Z",
15182
+ 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).'
15183
+ },
15184
+ midConversationSystem: {
15185
+ value: true,
15186
+ source: "official-doc",
15187
+ confidence: "declared",
15188
+ observedAt: "2026-09-25T19:00:00Z",
15189
+ 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."'
15190
+ },
15191
+ midConversationToolChanges: {
15192
+ value: {
15193
+ beta: "mid-conversation-tool-changes-2026-07-01"
15194
+ },
15195
+ source: "official-doc",
15196
+ confidence: "declared",
15197
+ observedAt: "2026-09-26T00:00:00Z",
15198
+ 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).'
15199
+ },
15200
+ inlineToolDefinitions: {
15201
+ value: {
15202
+ beta: "inline-tools-2026-09-15"
15203
+ },
15204
+ source: "official-doc",
15205
+ confidence: "declared",
15206
+ observedAt: "2026-09-26T00:00:00Z",
15207
+ 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.'
15208
+ },
15209
+ assistantPrefill: {
15210
+ value: false,
15211
+ source: "official-doc",
15212
+ confidence: "declared",
15213
+ observedAt: "2026-09-26T00:00:00Z",
15214
+ 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."`
15215
+ },
15139
15216
  canonicalModelId: "claude-fable-5",
15140
15217
  modelFamily: "claude"
15141
15218
  },
@@ -15286,6 +15363,15 @@ var catalog_default = {
15286
15363
  confidence: "declared",
15287
15364
  observedAt: "2026-09-25T13:00:00Z",
15288
15365
  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").'
15366
+ },
15367
+ perMessageEffort: {
15368
+ value: {
15369
+ beta: "mid-conversation-output-config-2026-07-01"
15370
+ },
15371
+ source: "official-doc",
15372
+ confidence: "declared",
15373
+ observedAt: "2026-09-25T18:00:00Z",
15374
+ 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.'
15289
15375
  }
15290
15376
  },
15291
15377
  pricing: {
@@ -15307,6 +15393,45 @@ var catalog_default = {
15307
15393
  "tool_choice.tool"
15308
15394
  ],
15309
15395
  status: "candidate",
15396
+ deferredToolLoading: {
15397
+ value: true,
15398
+ source: "official-doc",
15399
+ confidence: "declared",
15400
+ observedAt: "2026-09-25T18:30:00Z",
15401
+ 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).'
15402
+ },
15403
+ midConversationSystem: {
15404
+ value: true,
15405
+ source: "official-doc",
15406
+ confidence: "declared",
15407
+ observedAt: "2026-09-25T19:00:00Z",
15408
+ 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."'
15409
+ },
15410
+ midConversationToolChanges: {
15411
+ value: {
15412
+ beta: "mid-conversation-tool-changes-2026-07-01"
15413
+ },
15414
+ source: "official-doc",
15415
+ confidence: "declared",
15416
+ observedAt: "2026-09-26T00:00:00Z",
15417
+ 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).'
15418
+ },
15419
+ inlineToolDefinitions: {
15420
+ value: {
15421
+ beta: "inline-tools-2026-09-15"
15422
+ },
15423
+ source: "official-doc",
15424
+ confidence: "declared",
15425
+ observedAt: "2026-09-26T00:00:00Z",
15426
+ 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.'
15427
+ },
15428
+ assistantPrefill: {
15429
+ value: false,
15430
+ source: "official-doc",
15431
+ confidence: "declared",
15432
+ observedAt: "2026-09-26T00:00:00Z",
15433
+ 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."`
15434
+ },
15310
15435
  canonicalModelId: "claude-fable-5.1",
15311
15436
  modelFamily: "claude"
15312
15437
  },
@@ -15405,6 +15530,13 @@ var catalog_default = {
15405
15530
  "thinking.type.adaptive"
15406
15531
  ],
15407
15532
  status: "candidate",
15533
+ deferredToolLoading: {
15534
+ value: true,
15535
+ source: "official-doc",
15536
+ confidence: "declared",
15537
+ observedAt: "2026-09-25T18:30:00Z",
15538
+ 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).'
15539
+ },
15408
15540
  canonicalModelId: "claude-haiku-4.5-20251001",
15409
15541
  modelFamily: "claude"
15410
15542
  },
@@ -15503,6 +15635,13 @@ var catalog_default = {
15503
15635
  "thinking.type.adaptive"
15504
15636
  ],
15505
15637
  status: "candidate",
15638
+ deferredToolLoading: {
15639
+ value: true,
15640
+ source: "official-doc",
15641
+ confidence: "declared",
15642
+ observedAt: "2026-09-25T18:30:00Z",
15643
+ 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).'
15644
+ },
15506
15645
  canonicalModelId: "claude-haiku-4.5",
15507
15646
  modelFamily: "claude"
15508
15647
  },
@@ -15627,6 +15766,13 @@ var catalog_default = {
15627
15766
  "thinking.type.adaptive"
15628
15767
  ],
15629
15768
  status: "candidate",
15769
+ deferredToolLoading: {
15770
+ value: true,
15771
+ source: "official-doc",
15772
+ confidence: "declared",
15773
+ observedAt: "2026-09-25T18:30:00Z",
15774
+ 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).'
15775
+ },
15630
15776
  canonicalModelId: "claude-opus-4.5",
15631
15777
  modelFamily: "claude"
15632
15778
  },
@@ -15635,7 +15781,9 @@ var catalog_default = {
15635
15781
  providerId: "anthropic",
15636
15782
  upstreamId: "claude-opus-4.6",
15637
15783
  displayName: "Claude Opus 4.6",
15638
- aliases: [],
15784
+ aliases: [
15785
+ "claude-opus-4-6"
15786
+ ],
15639
15787
  endpoints: [
15640
15788
  "chat"
15641
15789
  ],
@@ -15747,6 +15895,20 @@ var catalog_default = {
15747
15895
  },
15748
15896
  unsupportedParameters: [],
15749
15897
  status: "candidate",
15898
+ deferredToolLoading: {
15899
+ value: true,
15900
+ source: "official-doc",
15901
+ confidence: "declared",
15902
+ observedAt: "2026-09-25T18:30:00Z",
15903
+ 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).'
15904
+ },
15905
+ assistantPrefill: {
15906
+ value: false,
15907
+ source: "official-doc",
15908
+ confidence: "declared",
15909
+ observedAt: "2026-09-26T00:00:00Z",
15910
+ 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."`
15911
+ },
15750
15912
  canonicalModelId: "claude-opus-4.6",
15751
15913
  modelFamily: "claude"
15752
15914
  },
@@ -15755,7 +15917,9 @@ var catalog_default = {
15755
15917
  providerId: "anthropic",
15756
15918
  upstreamId: "claude-opus-4.7",
15757
15919
  displayName: "Claude Opus 4.7",
15758
- aliases: [],
15920
+ aliases: [
15921
+ "claude-opus-4-7"
15922
+ ],
15759
15923
  endpoints: [
15760
15924
  "chat"
15761
15925
  ],
@@ -15873,6 +16037,20 @@ var catalog_default = {
15873
16037
  "thinking.type.enabled"
15874
16038
  ],
15875
16039
  status: "candidate",
16040
+ deferredToolLoading: {
16041
+ value: true,
16042
+ source: "official-doc",
16043
+ confidence: "declared",
16044
+ observedAt: "2026-09-25T18:30:00Z",
16045
+ 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).'
16046
+ },
16047
+ assistantPrefill: {
16048
+ value: false,
16049
+ source: "official-doc",
16050
+ confidence: "declared",
16051
+ observedAt: "2026-09-26T00:00:00Z",
16052
+ 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."`
16053
+ },
15876
16054
  canonicalModelId: "claude-opus-4.7",
15877
16055
  modelFamily: "claude"
15878
16056
  },
@@ -15881,7 +16059,9 @@ var catalog_default = {
15881
16059
  providerId: "anthropic",
15882
16060
  upstreamId: "claude-opus-4.8",
15883
16061
  displayName: "Claude Opus 4.8",
15884
- aliases: [],
16062
+ aliases: [
16063
+ "claude-opus-4-8"
16064
+ ],
15885
16065
  endpoints: [
15886
16066
  "chat"
15887
16067
  ],
@@ -15999,6 +16179,45 @@ var catalog_default = {
15999
16179
  "thinking.type.enabled"
16000
16180
  ],
16001
16181
  status: "candidate",
16182
+ deferredToolLoading: {
16183
+ value: true,
16184
+ source: "official-doc",
16185
+ confidence: "declared",
16186
+ observedAt: "2026-09-25T18:30:00Z",
16187
+ 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).'
16188
+ },
16189
+ midConversationSystem: {
16190
+ value: true,
16191
+ source: "official-doc",
16192
+ confidence: "declared",
16193
+ observedAt: "2026-09-25T19:00:00Z",
16194
+ 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."'
16195
+ },
16196
+ midConversationToolChanges: {
16197
+ value: {
16198
+ beta: "mid-conversation-tool-changes-2026-07-01"
16199
+ },
16200
+ source: "official-doc",
16201
+ confidence: "declared",
16202
+ observedAt: "2026-09-26T00:00:00Z",
16203
+ 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).'
16204
+ },
16205
+ inlineToolDefinitions: {
16206
+ value: {
16207
+ beta: "inline-tools-2026-09-15"
16208
+ },
16209
+ source: "official-doc",
16210
+ confidence: "declared",
16211
+ observedAt: "2026-09-26T00:00:00Z",
16212
+ 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.'
16213
+ },
16214
+ assistantPrefill: {
16215
+ value: false,
16216
+ source: "official-doc",
16217
+ confidence: "declared",
16218
+ observedAt: "2026-09-26T00:00:00Z",
16219
+ 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."`
16220
+ },
16002
16221
  canonicalModelId: "claude-opus-4.8",
16003
16222
  modelFamily: "claude"
16004
16223
  },
@@ -16147,6 +16366,15 @@ var catalog_default = {
16147
16366
  confidence: "declared",
16148
16367
  observedAt: "2026-09-25T12:30:00Z",
16149
16368
  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)."
16369
+ },
16370
+ perMessageEffort: {
16371
+ value: {
16372
+ beta: "mid-conversation-output-config-2026-07-01"
16373
+ },
16374
+ source: "official-doc",
16375
+ confidence: "declared",
16376
+ observedAt: "2026-09-25T18:00:00Z",
16377
+ 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.'
16150
16378
  }
16151
16379
  },
16152
16380
  pricing: {
@@ -16165,9 +16393,50 @@ var catalog_default = {
16165
16393
  "temperature",
16166
16394
  "top_p",
16167
16395
  "top_k",
16168
- "thinking.type.enabled"
16396
+ "thinking.type.enabled",
16397
+ "thinking.type.disabled+output_config.effort.xhigh",
16398
+ "thinking.type.disabled+output_config.effort.max"
16169
16399
  ],
16170
16400
  status: "candidate",
16401
+ deferredToolLoading: {
16402
+ value: true,
16403
+ source: "official-doc",
16404
+ confidence: "declared",
16405
+ observedAt: "2026-09-25T18:30:00Z",
16406
+ 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).'
16407
+ },
16408
+ midConversationSystem: {
16409
+ value: true,
16410
+ source: "official-doc",
16411
+ confidence: "declared",
16412
+ observedAt: "2026-09-25T19:00:00Z",
16413
+ 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."'
16414
+ },
16415
+ midConversationToolChanges: {
16416
+ value: {
16417
+ beta: "mid-conversation-tool-changes-2026-07-01"
16418
+ },
16419
+ source: "official-doc",
16420
+ confidence: "declared",
16421
+ observedAt: "2026-09-26T00:00:00Z",
16422
+ 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).'
16423
+ },
16424
+ inlineToolDefinitions: {
16425
+ value: {
16426
+ beta: "inline-tools-2026-09-15"
16427
+ },
16428
+ source: "official-doc",
16429
+ confidence: "declared",
16430
+ observedAt: "2026-09-26T00:00:00Z",
16431
+ 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.'
16432
+ },
16433
+ assistantPrefill: {
16434
+ value: false,
16435
+ source: "official-doc",
16436
+ confidence: "declared",
16437
+ observedAt: "2026-09-26T00:00:00Z",
16438
+ 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."`
16439
+ },
16171
16440
  canonicalModelId: "claude-opus-5",
16172
16441
  modelFamily: "claude"
16173
16442
  },
@@ -16327,6 +16596,15 @@ var catalog_default = {
16327
16596
  confidence: "declared",
16328
16597
  observedAt: "2026-09-25T13:00:00Z",
16329
16598
  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").'
16599
+ },
16600
+ perMessageEffort: {
16601
+ value: {
16602
+ beta: "mid-conversation-output-config-2026-07-01"
16603
+ },
16604
+ source: "official-doc",
16605
+ confidence: "declared",
16606
+ observedAt: "2026-09-25T18:00:00Z",
16607
+ 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.'
16330
16608
  }
16331
16609
  },
16332
16610
  pricing: {
@@ -16348,6 +16626,45 @@ var catalog_default = {
16348
16626
  "tool_choice.tool"
16349
16627
  ],
16350
16628
  status: "candidate",
16629
+ deferredToolLoading: {
16630
+ value: true,
16631
+ source: "official-doc",
16632
+ confidence: "declared",
16633
+ observedAt: "2026-09-25T18:30:00Z",
16634
+ 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).'
16635
+ },
16636
+ midConversationSystem: {
16637
+ value: true,
16638
+ source: "official-doc",
16639
+ confidence: "declared",
16640
+ observedAt: "2026-09-25T19:00:00Z",
16641
+ 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."'
16642
+ },
16643
+ midConversationToolChanges: {
16644
+ value: {
16645
+ beta: "mid-conversation-tool-changes-2026-07-01"
16646
+ },
16647
+ source: "official-doc",
16648
+ confidence: "declared",
16649
+ observedAt: "2026-09-26T00:00:00Z",
16650
+ 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).'
16651
+ },
16652
+ inlineToolDefinitions: {
16653
+ value: {
16654
+ beta: "inline-tools-2026-09-15"
16655
+ },
16656
+ source: "official-doc",
16657
+ confidence: "declared",
16658
+ observedAt: "2026-09-26T00:00:00Z",
16659
+ 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.'
16660
+ },
16661
+ assistantPrefill: {
16662
+ value: false,
16663
+ source: "official-doc",
16664
+ confidence: "declared",
16665
+ observedAt: "2026-09-26T00:00:00Z",
16666
+ 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."`
16667
+ },
16351
16668
  canonicalModelId: "claude-opus-5.5",
16352
16669
  modelFamily: "claude"
16353
16670
  },
@@ -16463,6 +16780,13 @@ var catalog_default = {
16463
16780
  "thinking.type.adaptive"
16464
16781
  ],
16465
16782
  status: "candidate",
16783
+ deferredToolLoading: {
16784
+ value: true,
16785
+ source: "official-doc",
16786
+ confidence: "declared",
16787
+ observedAt: "2026-09-25T18:30:00Z",
16788
+ 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).'
16789
+ },
16466
16790
  canonicalModelId: "claude-sonnet-4.5",
16467
16791
  modelFamily: "claude"
16468
16792
  },
@@ -16471,7 +16795,9 @@ var catalog_default = {
16471
16795
  providerId: "anthropic",
16472
16796
  upstreamId: "claude-sonnet-4.6",
16473
16797
  displayName: "Claude Sonnet 4.6",
16474
- aliases: [],
16798
+ aliases: [
16799
+ "claude-sonnet-4-6"
16800
+ ],
16475
16801
  endpoints: [
16476
16802
  "chat"
16477
16803
  ],
@@ -16583,6 +16909,13 @@ var catalog_default = {
16583
16909
  },
16584
16910
  unsupportedParameters: [],
16585
16911
  status: "candidate",
16912
+ deferredToolLoading: {
16913
+ value: true,
16914
+ source: "official-doc",
16915
+ confidence: "declared",
16916
+ observedAt: "2026-09-25T18:30:00Z",
16917
+ 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).'
16918
+ },
16586
16919
  canonicalModelId: "claude-sonnet-4.6",
16587
16920
  modelFamily: "claude"
16588
16921
  },
@@ -16754,6 +17087,13 @@ var catalog_default = {
16754
17087
  "thinking.type.enabled"
16755
17088
  ],
16756
17089
  status: "candidate",
17090
+ assistantPrefill: {
17091
+ value: false,
17092
+ source: "official-doc",
17093
+ confidence: "declared",
17094
+ observedAt: "2026-09-26T00:00:00Z",
17095
+ 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."`
17096
+ },
16757
17097
  canonicalModelId: "claude-sonnet-5",
16758
17098
  modelFamily: "claude"
16759
17099
  },
@@ -25957,6 +26297,20 @@ var catalog_default = {
25957
26297
  },
25958
26298
  unsupportedParameters: [],
25959
26299
  status: "candidate",
26300
+ promptCacheKey: {
26301
+ value: true,
26302
+ source: "official-doc",
26303
+ confidence: "declared",
26304
+ observedAt: "2026-09-25T19:30:00Z",
26305
+ 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."
26306
+ },
26307
+ clientToolSearch: {
26308
+ value: true,
26309
+ source: "upstream-static",
26310
+ confidence: "declared",
26311
+ observedAt: "2026-09-26T00:00:00Z",
26312
+ 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."
26313
+ },
25960
26314
  canonicalModelId: "gpt-5.6-luna",
25961
26315
  modelFamily: "gpt"
25962
26316
  },
@@ -26064,6 +26418,20 @@ var catalog_default = {
26064
26418
  },
26065
26419
  unsupportedParameters: [],
26066
26420
  status: "candidate",
26421
+ promptCacheKey: {
26422
+ value: true,
26423
+ source: "official-doc",
26424
+ confidence: "declared",
26425
+ observedAt: "2026-09-25T19:30:00Z",
26426
+ 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."
26427
+ },
26428
+ clientToolSearch: {
26429
+ value: true,
26430
+ source: "upstream-static",
26431
+ confidence: "declared",
26432
+ observedAt: "2026-09-26T00:00:00Z",
26433
+ 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."
26434
+ },
26067
26435
  canonicalModelId: "gpt-5.6-sol",
26068
26436
  modelFamily: "gpt"
26069
26437
  },
@@ -26171,6 +26539,20 @@ var catalog_default = {
26171
26539
  },
26172
26540
  unsupportedParameters: [],
26173
26541
  status: "candidate",
26542
+ promptCacheKey: {
26543
+ value: true,
26544
+ source: "official-doc",
26545
+ confidence: "declared",
26546
+ observedAt: "2026-09-25T19:30:00Z",
26547
+ 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."
26548
+ },
26549
+ clientToolSearch: {
26550
+ value: true,
26551
+ source: "upstream-static",
26552
+ confidence: "declared",
26553
+ observedAt: "2026-09-26T00:00:00Z",
26554
+ 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."
26555
+ },
26174
26556
  canonicalModelId: "gpt-5.6-terra",
26175
26557
  modelFamily: "gpt"
26176
26558
  },
@@ -26280,6 +26662,20 @@ var catalog_default = {
26280
26662
  },
26281
26663
  unsupportedParameters: [],
26282
26664
  status: "candidate",
26665
+ promptCacheKey: {
26666
+ value: true,
26667
+ source: "official-doc",
26668
+ confidence: "declared",
26669
+ observedAt: "2026-09-25T19:30:00Z",
26670
+ 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."
26671
+ },
26672
+ clientToolSearch: {
26673
+ value: true,
26674
+ source: "upstream-static",
26675
+ confidence: "declared",
26676
+ observedAt: "2026-09-26T00:00:00Z",
26677
+ 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."
26678
+ },
26283
26679
  canonicalModelId: "gpt-6-astra",
26284
26680
  modelFamily: "gpt"
26285
26681
  },
@@ -26389,6 +26785,20 @@ var catalog_default = {
26389
26785
  },
26390
26786
  unsupportedParameters: [],
26391
26787
  status: "candidate",
26788
+ promptCacheKey: {
26789
+ value: true,
26790
+ source: "official-doc",
26791
+ confidence: "declared",
26792
+ observedAt: "2026-09-25T19:30:00Z",
26793
+ 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."
26794
+ },
26795
+ clientToolSearch: {
26796
+ value: true,
26797
+ source: "upstream-static",
26798
+ confidence: "declared",
26799
+ observedAt: "2026-09-26T00:00:00Z",
26800
+ 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."
26801
+ },
26392
26802
  canonicalModelId: "gpt-6-luna",
26393
26803
  modelFamily: "gpt"
26394
26804
  },
@@ -26498,6 +26908,20 @@ var catalog_default = {
26498
26908
  },
26499
26909
  unsupportedParameters: [],
26500
26910
  status: "candidate",
26911
+ promptCacheKey: {
26912
+ value: true,
26913
+ source: "official-doc",
26914
+ confidence: "declared",
26915
+ observedAt: "2026-09-25T19:30:00Z",
26916
+ 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."
26917
+ },
26918
+ clientToolSearch: {
26919
+ value: true,
26920
+ source: "upstream-static",
26921
+ confidence: "declared",
26922
+ observedAt: "2026-09-26T00:00:00Z",
26923
+ 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."
26924
+ },
26501
26925
  canonicalModelId: "gpt-6-sol",
26502
26926
  modelFamily: "gpt"
26503
26927
  },
@@ -27241,6 +27665,45 @@ var catalog_default = {
27241
27665
  "thinking.type.disabled"
27242
27666
  ],
27243
27667
  status: "candidate",
27668
+ deferredToolLoading: {
27669
+ value: true,
27670
+ source: "official-doc",
27671
+ confidence: "declared",
27672
+ observedAt: "2026-09-25T18:30:00Z",
27673
+ 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).'
27674
+ },
27675
+ midConversationSystem: {
27676
+ value: true,
27677
+ source: "official-doc",
27678
+ confidence: "declared",
27679
+ observedAt: "2026-09-25T19:00:00Z",
27680
+ 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."'
27681
+ },
27682
+ midConversationToolChanges: {
27683
+ value: {
27684
+ beta: "mid-conversation-tool-changes-2026-07-01"
27685
+ },
27686
+ source: "official-doc",
27687
+ confidence: "declared",
27688
+ observedAt: "2026-09-26T00:00:00Z",
27689
+ 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).'
27690
+ },
27691
+ inlineToolDefinitions: {
27692
+ value: {
27693
+ beta: "inline-tools-2026-09-15"
27694
+ },
27695
+ source: "official-doc",
27696
+ confidence: "declared",
27697
+ observedAt: "2026-09-26T00:00:00Z",
27698
+ 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.'
27699
+ },
27700
+ assistantPrefill: {
27701
+ value: false,
27702
+ source: "official-doc",
27703
+ confidence: "declared",
27704
+ observedAt: "2026-09-26T00:00:00Z",
27705
+ 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."`
27706
+ },
27244
27707
  canonicalModelId: "claude-fable-5",
27245
27708
  modelFamily: "claude"
27246
27709
  },
@@ -27391,6 +27854,15 @@ var catalog_default = {
27391
27854
  confidence: "declared",
27392
27855
  observedAt: "2026-09-25T13:00:00Z",
27393
27856
  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").'
27857
+ },
27858
+ perMessageEffort: {
27859
+ value: {
27860
+ beta: "mid-conversation-output-config-2026-07-01"
27861
+ },
27862
+ source: "official-doc",
27863
+ confidence: "declared",
27864
+ observedAt: "2026-09-25T18:00:00Z",
27865
+ 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.'
27394
27866
  }
27395
27867
  },
27396
27868
  pricing: {
@@ -27412,6 +27884,45 @@ var catalog_default = {
27412
27884
  "tool_choice.tool"
27413
27885
  ],
27414
27886
  status: "candidate",
27887
+ deferredToolLoading: {
27888
+ value: true,
27889
+ source: "official-doc",
27890
+ confidence: "declared",
27891
+ observedAt: "2026-09-25T18:30:00Z",
27892
+ 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).'
27893
+ },
27894
+ midConversationSystem: {
27895
+ value: true,
27896
+ source: "official-doc",
27897
+ confidence: "declared",
27898
+ observedAt: "2026-09-25T19:00:00Z",
27899
+ 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."'
27900
+ },
27901
+ midConversationToolChanges: {
27902
+ value: {
27903
+ beta: "mid-conversation-tool-changes-2026-07-01"
27904
+ },
27905
+ source: "official-doc",
27906
+ confidence: "declared",
27907
+ observedAt: "2026-09-26T00:00:00Z",
27908
+ 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).'
27909
+ },
27910
+ inlineToolDefinitions: {
27911
+ value: {
27912
+ beta: "inline-tools-2026-09-15"
27913
+ },
27914
+ source: "official-doc",
27915
+ confidence: "declared",
27916
+ observedAt: "2026-09-26T00:00:00Z",
27917
+ 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.'
27918
+ },
27919
+ assistantPrefill: {
27920
+ value: false,
27921
+ source: "official-doc",
27922
+ confidence: "declared",
27923
+ observedAt: "2026-09-26T00:00:00Z",
27924
+ 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."`
27925
+ },
27415
27926
  canonicalModelId: "claude-fable-5.1",
27416
27927
  modelFamily: "claude"
27417
27928
  },
@@ -27510,6 +28021,13 @@ var catalog_default = {
27510
28021
  "thinking.type.adaptive"
27511
28022
  ],
27512
28023
  status: "candidate",
28024
+ deferredToolLoading: {
28025
+ value: true,
28026
+ source: "official-doc",
28027
+ confidence: "declared",
28028
+ observedAt: "2026-09-25T18:30:00Z",
28029
+ 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).'
28030
+ },
27513
28031
  canonicalModelId: "claude-haiku-4.5-20251001",
27514
28032
  modelFamily: "claude"
27515
28033
  },
@@ -27608,6 +28126,13 @@ var catalog_default = {
27608
28126
  "thinking.type.adaptive"
27609
28127
  ],
27610
28128
  status: "candidate",
28129
+ deferredToolLoading: {
28130
+ value: true,
28131
+ source: "official-doc",
28132
+ confidence: "declared",
28133
+ observedAt: "2026-09-25T18:30:00Z",
28134
+ 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).'
28135
+ },
27611
28136
  canonicalModelId: "claude-haiku-4.5",
27612
28137
  modelFamily: "claude"
27613
28138
  },
@@ -27732,6 +28257,13 @@ var catalog_default = {
27732
28257
  "thinking.type.adaptive"
27733
28258
  ],
27734
28259
  status: "candidate",
28260
+ deferredToolLoading: {
28261
+ value: true,
28262
+ source: "official-doc",
28263
+ confidence: "declared",
28264
+ observedAt: "2026-09-25T18:30:00Z",
28265
+ 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).'
28266
+ },
27735
28267
  canonicalModelId: "claude-opus-4.5",
27736
28268
  modelFamily: "claude"
27737
28269
  },
@@ -27740,7 +28272,9 @@ var catalog_default = {
27740
28272
  providerId: "console",
27741
28273
  upstreamId: "claude-opus-4.6",
27742
28274
  displayName: "Claude Opus 4.6",
27743
- aliases: [],
28275
+ aliases: [
28276
+ "claude-opus-4-6"
28277
+ ],
27744
28278
  endpoints: [
27745
28279
  "chat"
27746
28280
  ],
@@ -27852,6 +28386,20 @@ var catalog_default = {
27852
28386
  },
27853
28387
  unsupportedParameters: [],
27854
28388
  status: "candidate",
28389
+ deferredToolLoading: {
28390
+ value: true,
28391
+ source: "official-doc",
28392
+ confidence: "declared",
28393
+ observedAt: "2026-09-25T18:30:00Z",
28394
+ 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).'
28395
+ },
28396
+ assistantPrefill: {
28397
+ value: false,
28398
+ source: "official-doc",
28399
+ confidence: "declared",
28400
+ observedAt: "2026-09-26T00:00:00Z",
28401
+ 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."`
28402
+ },
27855
28403
  canonicalModelId: "claude-opus-4.6",
27856
28404
  modelFamily: "claude"
27857
28405
  },
@@ -27860,7 +28408,9 @@ var catalog_default = {
27860
28408
  providerId: "console",
27861
28409
  upstreamId: "claude-opus-4.7",
27862
28410
  displayName: "Claude Opus 4.7",
27863
- aliases: [],
28411
+ aliases: [
28412
+ "claude-opus-4-7"
28413
+ ],
27864
28414
  endpoints: [
27865
28415
  "chat"
27866
28416
  ],
@@ -27978,6 +28528,20 @@ var catalog_default = {
27978
28528
  "thinking.type.enabled"
27979
28529
  ],
27980
28530
  status: "candidate",
28531
+ deferredToolLoading: {
28532
+ value: true,
28533
+ source: "official-doc",
28534
+ confidence: "declared",
28535
+ observedAt: "2026-09-25T18:30:00Z",
28536
+ 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).'
28537
+ },
28538
+ assistantPrefill: {
28539
+ value: false,
28540
+ source: "official-doc",
28541
+ confidence: "declared",
28542
+ observedAt: "2026-09-26T00:00:00Z",
28543
+ 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."`
28544
+ },
27981
28545
  canonicalModelId: "claude-opus-4.7",
27982
28546
  modelFamily: "claude"
27983
28547
  },
@@ -27986,7 +28550,9 @@ var catalog_default = {
27986
28550
  providerId: "console",
27987
28551
  upstreamId: "claude-opus-4.8",
27988
28552
  displayName: "Claude Opus 4.8",
27989
- aliases: [],
28553
+ aliases: [
28554
+ "claude-opus-4-8"
28555
+ ],
27990
28556
  endpoints: [
27991
28557
  "chat"
27992
28558
  ],
@@ -28104,6 +28670,45 @@ var catalog_default = {
28104
28670
  "thinking.type.enabled"
28105
28671
  ],
28106
28672
  status: "candidate",
28673
+ deferredToolLoading: {
28674
+ value: true,
28675
+ source: "official-doc",
28676
+ confidence: "declared",
28677
+ observedAt: "2026-09-25T18:30:00Z",
28678
+ 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).'
28679
+ },
28680
+ midConversationSystem: {
28681
+ value: true,
28682
+ source: "official-doc",
28683
+ confidence: "declared",
28684
+ observedAt: "2026-09-25T19:00:00Z",
28685
+ 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."'
28686
+ },
28687
+ midConversationToolChanges: {
28688
+ value: {
28689
+ beta: "mid-conversation-tool-changes-2026-07-01"
28690
+ },
28691
+ source: "official-doc",
28692
+ confidence: "declared",
28693
+ observedAt: "2026-09-26T00:00:00Z",
28694
+ 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).'
28695
+ },
28696
+ inlineToolDefinitions: {
28697
+ value: {
28698
+ beta: "inline-tools-2026-09-15"
28699
+ },
28700
+ source: "official-doc",
28701
+ confidence: "declared",
28702
+ observedAt: "2026-09-26T00:00:00Z",
28703
+ 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.'
28704
+ },
28705
+ assistantPrefill: {
28706
+ value: false,
28707
+ source: "official-doc",
28708
+ confidence: "declared",
28709
+ observedAt: "2026-09-26T00:00:00Z",
28710
+ 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."`
28711
+ },
28107
28712
  canonicalModelId: "claude-opus-4.8",
28108
28713
  modelFamily: "claude"
28109
28714
  },
@@ -28252,6 +28857,15 @@ var catalog_default = {
28252
28857
  confidence: "declared",
28253
28858
  observedAt: "2026-09-25T12:30:00Z",
28254
28859
  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)."
28860
+ },
28861
+ perMessageEffort: {
28862
+ value: {
28863
+ beta: "mid-conversation-output-config-2026-07-01"
28864
+ },
28865
+ source: "official-doc",
28866
+ confidence: "declared",
28867
+ observedAt: "2026-09-25T18:00:00Z",
28868
+ 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.'
28255
28869
  }
28256
28870
  },
28257
28871
  pricing: {
@@ -28270,9 +28884,50 @@ var catalog_default = {
28270
28884
  "temperature",
28271
28885
  "top_p",
28272
28886
  "top_k",
28273
- "thinking.type.enabled"
28887
+ "thinking.type.enabled",
28888
+ "thinking.type.disabled+output_config.effort.xhigh",
28889
+ "thinking.type.disabled+output_config.effort.max"
28274
28890
  ],
28275
28891
  status: "candidate",
28892
+ deferredToolLoading: {
28893
+ value: true,
28894
+ source: "official-doc",
28895
+ confidence: "declared",
28896
+ observedAt: "2026-09-25T18:30:00Z",
28897
+ 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).'
28898
+ },
28899
+ midConversationSystem: {
28900
+ value: true,
28901
+ source: "official-doc",
28902
+ confidence: "declared",
28903
+ observedAt: "2026-09-25T19:00:00Z",
28904
+ 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."'
28905
+ },
28906
+ midConversationToolChanges: {
28907
+ value: {
28908
+ beta: "mid-conversation-tool-changes-2026-07-01"
28909
+ },
28910
+ source: "official-doc",
28911
+ confidence: "declared",
28912
+ observedAt: "2026-09-26T00:00:00Z",
28913
+ 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).'
28914
+ },
28915
+ inlineToolDefinitions: {
28916
+ value: {
28917
+ beta: "inline-tools-2026-09-15"
28918
+ },
28919
+ source: "official-doc",
28920
+ confidence: "declared",
28921
+ observedAt: "2026-09-26T00:00:00Z",
28922
+ 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.'
28923
+ },
28924
+ assistantPrefill: {
28925
+ value: false,
28926
+ source: "official-doc",
28927
+ confidence: "declared",
28928
+ observedAt: "2026-09-26T00:00:00Z",
28929
+ 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."`
28930
+ },
28276
28931
  canonicalModelId: "claude-opus-5",
28277
28932
  modelFamily: "claude"
28278
28933
  },
@@ -28432,6 +29087,15 @@ var catalog_default = {
28432
29087
  confidence: "declared",
28433
29088
  observedAt: "2026-09-25T13:00:00Z",
28434
29089
  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").'
29090
+ },
29091
+ perMessageEffort: {
29092
+ value: {
29093
+ beta: "mid-conversation-output-config-2026-07-01"
29094
+ },
29095
+ source: "official-doc",
29096
+ confidence: "declared",
29097
+ observedAt: "2026-09-25T18:00:00Z",
29098
+ 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.'
28435
29099
  }
28436
29100
  },
28437
29101
  pricing: {
@@ -28453,6 +29117,45 @@ var catalog_default = {
28453
29117
  "tool_choice.tool"
28454
29118
  ],
28455
29119
  status: "candidate",
29120
+ deferredToolLoading: {
29121
+ value: true,
29122
+ source: "official-doc",
29123
+ confidence: "declared",
29124
+ observedAt: "2026-09-25T18:30:00Z",
29125
+ 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).'
29126
+ },
29127
+ midConversationSystem: {
29128
+ value: true,
29129
+ source: "official-doc",
29130
+ confidence: "declared",
29131
+ observedAt: "2026-09-25T19:00:00Z",
29132
+ 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."'
29133
+ },
29134
+ midConversationToolChanges: {
29135
+ value: {
29136
+ beta: "mid-conversation-tool-changes-2026-07-01"
29137
+ },
29138
+ source: "official-doc",
29139
+ confidence: "declared",
29140
+ observedAt: "2026-09-26T00:00:00Z",
29141
+ 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).'
29142
+ },
29143
+ inlineToolDefinitions: {
29144
+ value: {
29145
+ beta: "inline-tools-2026-09-15"
29146
+ },
29147
+ source: "official-doc",
29148
+ confidence: "declared",
29149
+ observedAt: "2026-09-26T00:00:00Z",
29150
+ 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.'
29151
+ },
29152
+ assistantPrefill: {
29153
+ value: false,
29154
+ source: "official-doc",
29155
+ confidence: "declared",
29156
+ observedAt: "2026-09-26T00:00:00Z",
29157
+ 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."`
29158
+ },
28456
29159
  canonicalModelId: "claude-opus-5.5",
28457
29160
  modelFamily: "claude"
28458
29161
  },
@@ -28568,6 +29271,13 @@ var catalog_default = {
28568
29271
  "thinking.type.adaptive"
28569
29272
  ],
28570
29273
  status: "candidate",
29274
+ deferredToolLoading: {
29275
+ value: true,
29276
+ source: "official-doc",
29277
+ confidence: "declared",
29278
+ observedAt: "2026-09-25T18:30:00Z",
29279
+ 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).'
29280
+ },
28571
29281
  canonicalModelId: "claude-sonnet-4.5",
28572
29282
  modelFamily: "claude"
28573
29283
  },
@@ -28576,7 +29286,9 @@ var catalog_default = {
28576
29286
  providerId: "console",
28577
29287
  upstreamId: "claude-sonnet-4.6",
28578
29288
  displayName: "Claude Sonnet 4.6",
28579
- aliases: [],
29289
+ aliases: [
29290
+ "claude-sonnet-4-6"
29291
+ ],
28580
29292
  endpoints: [
28581
29293
  "chat"
28582
29294
  ],
@@ -28688,6 +29400,13 @@ var catalog_default = {
28688
29400
  },
28689
29401
  unsupportedParameters: [],
28690
29402
  status: "candidate",
29403
+ deferredToolLoading: {
29404
+ value: true,
29405
+ source: "official-doc",
29406
+ confidence: "declared",
29407
+ observedAt: "2026-09-25T18:30:00Z",
29408
+ 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).'
29409
+ },
28691
29410
  canonicalModelId: "claude-sonnet-4.6",
28692
29411
  modelFamily: "claude"
28693
29412
  },
@@ -28859,6 +29578,13 @@ var catalog_default = {
28859
29578
  "thinking.type.enabled"
28860
29579
  ],
28861
29580
  status: "candidate",
29581
+ assistantPrefill: {
29582
+ value: false,
29583
+ source: "official-doc",
29584
+ confidence: "declared",
29585
+ observedAt: "2026-09-26T00:00:00Z",
29586
+ 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."`
29587
+ },
28862
29588
  canonicalModelId: "claude-sonnet-5",
28863
29589
  modelFamily: "claude"
28864
29590
  },
@@ -51159,6 +51885,13 @@ var catalog_default = {
51159
51885
  },
51160
51886
  unsupportedParameters: [],
51161
51887
  status: "candidate",
51888
+ promptCacheKey: {
51889
+ value: true,
51890
+ source: "official-doc",
51891
+ confidence: "declared",
51892
+ observedAt: "2026-09-25T19:30:00Z",
51893
+ 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".'
51894
+ },
51162
51895
  canonicalModelId: "gpt-4.1",
51163
51896
  modelFamily: "gpt"
51164
51897
  },
@@ -51239,6 +51972,13 @@ var catalog_default = {
51239
51972
  },
51240
51973
  unsupportedParameters: [],
51241
51974
  status: "candidate",
51975
+ promptCacheKey: {
51976
+ value: true,
51977
+ source: "official-doc",
51978
+ confidence: "declared",
51979
+ observedAt: "2026-09-25T19:30:00Z",
51980
+ 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".'
51981
+ },
51242
51982
  canonicalModelId: "gpt-4.1-mini",
51243
51983
  modelFamily: "gpt"
51244
51984
  },
@@ -51326,6 +52066,13 @@ var catalog_default = {
51326
52066
  },
51327
52067
  unsupportedParameters: [],
51328
52068
  status: "candidate",
52069
+ promptCacheKey: {
52070
+ value: true,
52071
+ source: "official-doc",
52072
+ confidence: "declared",
52073
+ observedAt: "2026-09-25T19:30:00Z",
52074
+ 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".'
52075
+ },
51329
52076
  canonicalModelId: "gpt-4.1-nano",
51330
52077
  modelFamily: "gpt"
51331
52078
  },
@@ -51406,6 +52153,13 @@ var catalog_default = {
51406
52153
  },
51407
52154
  unsupportedParameters: [],
51408
52155
  status: "candidate",
52156
+ promptCacheKey: {
52157
+ value: true,
52158
+ source: "official-doc",
52159
+ confidence: "declared",
52160
+ observedAt: "2026-09-25T19:30:00Z",
52161
+ 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".'
52162
+ },
51409
52163
  canonicalModelId: "gpt-4o",
51410
52164
  modelFamily: "gpt"
51411
52165
  },
@@ -51486,6 +52240,13 @@ var catalog_default = {
51486
52240
  },
51487
52241
  unsupportedParameters: [],
51488
52242
  status: "candidate",
52243
+ promptCacheKey: {
52244
+ value: true,
52245
+ source: "official-doc",
52246
+ confidence: "declared",
52247
+ observedAt: "2026-09-25T19:30:00Z",
52248
+ 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".'
52249
+ },
51489
52250
  canonicalModelId: "gpt-4o-2024-11-20",
51490
52251
  modelFamily: "gpt"
51491
52252
  },
@@ -51566,6 +52327,13 @@ var catalog_default = {
51566
52327
  },
51567
52328
  unsupportedParameters: [],
51568
52329
  status: "candidate",
52330
+ promptCacheKey: {
52331
+ value: true,
52332
+ source: "official-doc",
52333
+ confidence: "declared",
52334
+ observedAt: "2026-09-25T19:30:00Z",
52335
+ 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".'
52336
+ },
51569
52337
  canonicalModelId: "gpt-4o-mini",
51570
52338
  modelFamily: "gpt"
51571
52339
  },
@@ -51671,6 +52439,34 @@ var catalog_default = {
51671
52439
  },
51672
52440
  unsupportedParameters: [],
51673
52441
  status: "candidate",
52442
+ promptCacheKey: {
52443
+ value: true,
52444
+ source: "official-doc",
52445
+ confidence: "declared",
52446
+ observedAt: "2026-09-25T19:30:00Z",
52447
+ 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".'
52448
+ },
52449
+ clientToolSearch: {
52450
+ value: true,
52451
+ source: "official-doc",
52452
+ confidence: "declared",
52453
+ observedAt: "2026-09-26T00:00:00Z",
52454
+ 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.'
52455
+ },
52456
+ additionalToolsItem: {
52457
+ value: true,
52458
+ source: "official-doc",
52459
+ confidence: "declared",
52460
+ observedAt: "2026-09-26T00:00:00Z",
52461
+ 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.'
52462
+ },
52463
+ allowedToolsChoice: {
52464
+ value: true,
52465
+ source: "official-doc",
52466
+ confidence: "declared",
52467
+ observedAt: "2026-09-26T00:00:00Z",
52468
+ 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.'
52469
+ },
51674
52470
  canonicalModelId: "gpt-5.4",
51675
52471
  modelFamily: "gpt"
51676
52472
  },
@@ -51783,6 +52579,34 @@ var catalog_default = {
51783
52579
  },
51784
52580
  unsupportedParameters: [],
51785
52581
  status: "candidate",
52582
+ promptCacheKey: {
52583
+ value: true,
52584
+ source: "official-doc",
52585
+ confidence: "declared",
52586
+ observedAt: "2026-09-25T19:30:00Z",
52587
+ 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".'
52588
+ },
52589
+ clientToolSearch: {
52590
+ value: true,
52591
+ source: "official-doc",
52592
+ confidence: "declared",
52593
+ observedAt: "2026-09-26T00:00:00Z",
52594
+ 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.'
52595
+ },
52596
+ additionalToolsItem: {
52597
+ value: true,
52598
+ source: "official-doc",
52599
+ confidence: "declared",
52600
+ observedAt: "2026-09-26T00:00:00Z",
52601
+ 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.'
52602
+ },
52603
+ allowedToolsChoice: {
52604
+ value: true,
52605
+ source: "official-doc",
52606
+ confidence: "declared",
52607
+ observedAt: "2026-09-26T00:00:00Z",
52608
+ 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.'
52609
+ },
51786
52610
  canonicalModelId: "gpt-5.4-mini",
51787
52611
  modelFamily: "gpt"
51788
52612
  },
@@ -51895,6 +52719,34 @@ var catalog_default = {
51895
52719
  },
51896
52720
  unsupportedParameters: [],
51897
52721
  status: "candidate",
52722
+ promptCacheKey: {
52723
+ value: true,
52724
+ source: "official-doc",
52725
+ confidence: "declared",
52726
+ observedAt: "2026-09-25T19:30:00Z",
52727
+ 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".'
52728
+ },
52729
+ clientToolSearch: {
52730
+ value: true,
52731
+ source: "official-doc",
52732
+ confidence: "declared",
52733
+ observedAt: "2026-09-26T00:00:00Z",
52734
+ 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.'
52735
+ },
52736
+ additionalToolsItem: {
52737
+ value: true,
52738
+ source: "official-doc",
52739
+ confidence: "declared",
52740
+ observedAt: "2026-09-26T00:00:00Z",
52741
+ 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.'
52742
+ },
52743
+ allowedToolsChoice: {
52744
+ value: true,
52745
+ source: "official-doc",
52746
+ confidence: "declared",
52747
+ observedAt: "2026-09-26T00:00:00Z",
52748
+ 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.'
52749
+ },
51898
52750
  canonicalModelId: "gpt-5.4-nano",
51899
52751
  modelFamily: "gpt"
51900
52752
  },
@@ -51982,6 +52834,34 @@ var catalog_default = {
51982
52834
  },
51983
52835
  unsupportedParameters: [],
51984
52836
  status: "candidate",
52837
+ promptCacheKey: {
52838
+ value: true,
52839
+ source: "official-doc",
52840
+ confidence: "declared",
52841
+ observedAt: "2026-09-25T19:30:00Z",
52842
+ 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".'
52843
+ },
52844
+ clientToolSearch: {
52845
+ value: true,
52846
+ source: "official-doc",
52847
+ confidence: "declared",
52848
+ observedAt: "2026-09-26T00:00:00Z",
52849
+ 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.'
52850
+ },
52851
+ additionalToolsItem: {
52852
+ value: true,
52853
+ source: "official-doc",
52854
+ confidence: "declared",
52855
+ observedAt: "2026-09-26T00:00:00Z",
52856
+ 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.'
52857
+ },
52858
+ allowedToolsChoice: {
52859
+ value: true,
52860
+ source: "official-doc",
52861
+ confidence: "declared",
52862
+ observedAt: "2026-09-26T00:00:00Z",
52863
+ 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.'
52864
+ },
51985
52865
  canonicalModelId: "gpt-5.4-pro",
51986
52866
  modelFamily: "gpt"
51987
52867
  },
@@ -52087,6 +52967,34 @@ var catalog_default = {
52087
52967
  },
52088
52968
  unsupportedParameters: [],
52089
52969
  status: "candidate",
52970
+ promptCacheKey: {
52971
+ value: true,
52972
+ source: "official-doc",
52973
+ confidence: "declared",
52974
+ observedAt: "2026-09-25T19:30:00Z",
52975
+ 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".'
52976
+ },
52977
+ clientToolSearch: {
52978
+ value: true,
52979
+ source: "official-doc",
52980
+ confidence: "declared",
52981
+ observedAt: "2026-09-26T00:00:00Z",
52982
+ 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.'
52983
+ },
52984
+ additionalToolsItem: {
52985
+ value: true,
52986
+ source: "official-doc",
52987
+ confidence: "declared",
52988
+ observedAt: "2026-09-26T00:00:00Z",
52989
+ 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.'
52990
+ },
52991
+ allowedToolsChoice: {
52992
+ value: true,
52993
+ source: "official-doc",
52994
+ confidence: "declared",
52995
+ observedAt: "2026-09-26T00:00:00Z",
52996
+ 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.'
52997
+ },
52090
52998
  canonicalModelId: "gpt-5.5",
52091
52999
  modelFamily: "gpt"
52092
53000
  },
@@ -52181,6 +53089,34 @@ var catalog_default = {
52181
53089
  },
52182
53090
  unsupportedParameters: [],
52183
53091
  status: "candidate",
53092
+ promptCacheKey: {
53093
+ value: true,
53094
+ source: "official-doc",
53095
+ confidence: "declared",
53096
+ observedAt: "2026-09-25T19:30:00Z",
53097
+ 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".'
53098
+ },
53099
+ clientToolSearch: {
53100
+ value: true,
53101
+ source: "official-doc",
53102
+ confidence: "declared",
53103
+ observedAt: "2026-09-26T00:00:00Z",
53104
+ 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.'
53105
+ },
53106
+ additionalToolsItem: {
53107
+ value: true,
53108
+ source: "official-doc",
53109
+ confidence: "declared",
53110
+ observedAt: "2026-09-26T00:00:00Z",
53111
+ 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.'
53112
+ },
53113
+ allowedToolsChoice: {
53114
+ value: true,
53115
+ source: "official-doc",
53116
+ confidence: "declared",
53117
+ observedAt: "2026-09-26T00:00:00Z",
53118
+ 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.'
53119
+ },
52184
53120
  canonicalModelId: "gpt-5.5-pro",
52185
53121
  modelFamily: "gpt"
52186
53122
  },
@@ -52295,6 +53231,34 @@ var catalog_default = {
52295
53231
  },
52296
53232
  unsupportedParameters: [],
52297
53233
  status: "candidate",
53234
+ promptCacheKey: {
53235
+ value: true,
53236
+ source: "official-doc",
53237
+ confidence: "declared",
53238
+ observedAt: "2026-09-25T19:30:00Z",
53239
+ 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".'
53240
+ },
53241
+ clientToolSearch: {
53242
+ value: true,
53243
+ source: "official-doc",
53244
+ confidence: "declared",
53245
+ observedAt: "2026-09-26T00:00:00Z",
53246
+ 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.'
53247
+ },
53248
+ additionalToolsItem: {
53249
+ value: true,
53250
+ source: "official-doc",
53251
+ confidence: "declared",
53252
+ observedAt: "2026-09-26T00:00:00Z",
53253
+ 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.'
53254
+ },
53255
+ allowedToolsChoice: {
53256
+ value: true,
53257
+ source: "official-doc",
53258
+ confidence: "declared",
53259
+ observedAt: "2026-09-26T00:00:00Z",
53260
+ 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.'
53261
+ },
52298
53262
  canonicalModelId: "gpt-5.6",
52299
53263
  modelFamily: "gpt"
52300
53264
  },
@@ -52409,6 +53373,34 @@ var catalog_default = {
52409
53373
  },
52410
53374
  unsupportedParameters: [],
52411
53375
  status: "candidate",
53376
+ promptCacheKey: {
53377
+ value: true,
53378
+ source: "official-doc",
53379
+ confidence: "declared",
53380
+ observedAt: "2026-09-25T19:30:00Z",
53381
+ 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".'
53382
+ },
53383
+ clientToolSearch: {
53384
+ value: true,
53385
+ source: "official-doc",
53386
+ confidence: "declared",
53387
+ observedAt: "2026-09-26T00:00:00Z",
53388
+ 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.'
53389
+ },
53390
+ additionalToolsItem: {
53391
+ value: true,
53392
+ source: "official-doc",
53393
+ confidence: "declared",
53394
+ observedAt: "2026-09-26T00:00:00Z",
53395
+ 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.'
53396
+ },
53397
+ allowedToolsChoice: {
53398
+ value: true,
53399
+ source: "official-doc",
53400
+ confidence: "declared",
53401
+ observedAt: "2026-09-26T00:00:00Z",
53402
+ 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.'
53403
+ },
52412
53404
  canonicalModelId: "gpt-5.6-luna",
52413
53405
  modelFamily: "gpt"
52414
53406
  },
@@ -52523,6 +53515,34 @@ var catalog_default = {
52523
53515
  },
52524
53516
  unsupportedParameters: [],
52525
53517
  status: "candidate",
53518
+ promptCacheKey: {
53519
+ value: true,
53520
+ source: "official-doc",
53521
+ confidence: "declared",
53522
+ observedAt: "2026-09-25T19:30:00Z",
53523
+ 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".'
53524
+ },
53525
+ clientToolSearch: {
53526
+ value: true,
53527
+ source: "official-doc",
53528
+ confidence: "declared",
53529
+ observedAt: "2026-09-26T00:00:00Z",
53530
+ 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.'
53531
+ },
53532
+ additionalToolsItem: {
53533
+ value: true,
53534
+ source: "official-doc",
53535
+ confidence: "declared",
53536
+ observedAt: "2026-09-26T00:00:00Z",
53537
+ 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.'
53538
+ },
53539
+ allowedToolsChoice: {
53540
+ value: true,
53541
+ source: "official-doc",
53542
+ confidence: "declared",
53543
+ observedAt: "2026-09-26T00:00:00Z",
53544
+ 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.'
53545
+ },
52526
53546
  canonicalModelId: "gpt-5.6-sol",
52527
53547
  modelFamily: "gpt"
52528
53548
  },
@@ -52637,6 +53657,34 @@ var catalog_default = {
52637
53657
  },
52638
53658
  unsupportedParameters: [],
52639
53659
  status: "candidate",
53660
+ promptCacheKey: {
53661
+ value: true,
53662
+ source: "official-doc",
53663
+ confidence: "declared",
53664
+ observedAt: "2026-09-25T19:30:00Z",
53665
+ 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".'
53666
+ },
53667
+ clientToolSearch: {
53668
+ value: true,
53669
+ source: "official-doc",
53670
+ confidence: "declared",
53671
+ observedAt: "2026-09-26T00:00:00Z",
53672
+ 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.'
53673
+ },
53674
+ additionalToolsItem: {
53675
+ value: true,
53676
+ source: "official-doc",
53677
+ confidence: "declared",
53678
+ observedAt: "2026-09-26T00:00:00Z",
53679
+ 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.'
53680
+ },
53681
+ allowedToolsChoice: {
53682
+ value: true,
53683
+ source: "official-doc",
53684
+ confidence: "declared",
53685
+ observedAt: "2026-09-26T00:00:00Z",
53686
+ 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.'
53687
+ },
52640
53688
  canonicalModelId: "gpt-5.6-terra",
52641
53689
  modelFamily: "gpt"
52642
53690
  },
@@ -52771,6 +53819,15 @@ var catalog_default = {
52771
53819
  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.',
52772
53820
  confidence: "declared",
52773
53821
  observedAt: "2026-09-06T00:00:00Z"
53822
+ },
53823
+ perMessageEffort: {
53824
+ value: {
53825
+ item: "configuration_update"
53826
+ },
53827
+ source: "official-doc",
53828
+ confidence: "declared",
53829
+ observedAt: "2026-09-26T00:00:00Z",
53830
+ 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).`
52774
53831
  }
52775
53832
  },
52776
53833
  pricing: {
@@ -52787,6 +53844,34 @@ var catalog_default = {
52787
53844
  },
52788
53845
  unsupportedParameters: [],
52789
53846
  status: "candidate",
53847
+ promptCacheKey: {
53848
+ value: true,
53849
+ source: "official-doc",
53850
+ confidence: "declared",
53851
+ observedAt: "2026-09-25T19:30:00Z",
53852
+ 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".'
53853
+ },
53854
+ clientToolSearch: {
53855
+ value: true,
53856
+ source: "official-doc",
53857
+ confidence: "declared",
53858
+ observedAt: "2026-09-26T00:00:00Z",
53859
+ 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.'
53860
+ },
53861
+ additionalToolsItem: {
53862
+ value: true,
53863
+ source: "official-doc",
53864
+ confidence: "declared",
53865
+ observedAt: "2026-09-26T00:00:00Z",
53866
+ 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.'
53867
+ },
53868
+ allowedToolsChoice: {
53869
+ value: true,
53870
+ source: "official-doc",
53871
+ confidence: "declared",
53872
+ observedAt: "2026-09-26T00:00:00Z",
53873
+ 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.'
53874
+ },
52790
53875
  canonicalModelId: "gpt-6-astra",
52791
53876
  modelFamily: "gpt"
52792
53877
  },
@@ -52922,6 +54007,15 @@ var catalog_default = {
52922
54007
  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.',
52923
54008
  confidence: "declared",
52924
54009
  observedAt: "2026-09-06T00:00:00Z"
54010
+ },
54011
+ perMessageEffort: {
54012
+ value: {
54013
+ item: "configuration_update"
54014
+ },
54015
+ source: "official-doc",
54016
+ confidence: "declared",
54017
+ observedAt: "2026-09-26T00:00:00Z",
54018
+ 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).`
52925
54019
  }
52926
54020
  },
52927
54021
  pricing: {
@@ -52938,6 +54032,34 @@ var catalog_default = {
52938
54032
  },
52939
54033
  unsupportedParameters: [],
52940
54034
  status: "candidate",
54035
+ promptCacheKey: {
54036
+ value: true,
54037
+ source: "official-doc",
54038
+ confidence: "declared",
54039
+ observedAt: "2026-09-25T19:30:00Z",
54040
+ 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".'
54041
+ },
54042
+ clientToolSearch: {
54043
+ value: true,
54044
+ source: "official-doc",
54045
+ confidence: "declared",
54046
+ observedAt: "2026-09-26T00:00:00Z",
54047
+ 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.'
54048
+ },
54049
+ additionalToolsItem: {
54050
+ value: true,
54051
+ source: "official-doc",
54052
+ confidence: "declared",
54053
+ observedAt: "2026-09-26T00:00:00Z",
54054
+ 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.'
54055
+ },
54056
+ allowedToolsChoice: {
54057
+ value: true,
54058
+ source: "official-doc",
54059
+ confidence: "declared",
54060
+ observedAt: "2026-09-26T00:00:00Z",
54061
+ 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.'
54062
+ },
52941
54063
  canonicalModelId: "gpt-6-luna",
52942
54064
  modelFamily: "gpt"
52943
54065
  },
@@ -53073,6 +54195,15 @@ var catalog_default = {
53073
54195
  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.',
53074
54196
  confidence: "declared",
53075
54197
  observedAt: "2026-09-06T00:00:00Z"
54198
+ },
54199
+ perMessageEffort: {
54200
+ value: {
54201
+ item: "configuration_update"
54202
+ },
54203
+ source: "official-doc",
54204
+ confidence: "declared",
54205
+ observedAt: "2026-09-26T00:00:00Z",
54206
+ 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).`
53076
54207
  }
53077
54208
  },
53078
54209
  pricing: {
@@ -53089,6 +54220,34 @@ var catalog_default = {
53089
54220
  },
53090
54221
  unsupportedParameters: [],
53091
54222
  status: "candidate",
54223
+ promptCacheKey: {
54224
+ value: true,
54225
+ source: "official-doc",
54226
+ confidence: "declared",
54227
+ observedAt: "2026-09-25T19:30:00Z",
54228
+ 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".'
54229
+ },
54230
+ clientToolSearch: {
54231
+ value: true,
54232
+ source: "official-doc",
54233
+ confidence: "declared",
54234
+ observedAt: "2026-09-26T00:00:00Z",
54235
+ 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.'
54236
+ },
54237
+ additionalToolsItem: {
54238
+ value: true,
54239
+ source: "official-doc",
54240
+ confidence: "declared",
54241
+ observedAt: "2026-09-26T00:00:00Z",
54242
+ 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.'
54243
+ },
54244
+ allowedToolsChoice: {
54245
+ value: true,
54246
+ source: "official-doc",
54247
+ confidence: "declared",
54248
+ observedAt: "2026-09-26T00:00:00Z",
54249
+ 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.'
54250
+ },
53092
54251
  canonicalModelId: "gpt-6-sol",
53093
54252
  modelFamily: "gpt"
53094
54253
  },
@@ -53191,6 +54350,13 @@ var catalog_default = {
53191
54350
  },
53192
54351
  unsupportedParameters: [],
53193
54352
  status: "candidate",
54353
+ promptCacheKey: {
54354
+ value: true,
54355
+ source: "official-doc",
54356
+ confidence: "declared",
54357
+ observedAt: "2026-09-25T19:30:00Z",
54358
+ 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".'
54359
+ },
53194
54360
  canonicalModelId: "o3",
53195
54361
  modelFamily: "o-series"
53196
54362
  },
@@ -53285,6 +54451,13 @@ var catalog_default = {
53285
54451
  },
53286
54452
  unsupportedParameters: [],
53287
54453
  status: "candidate",
54454
+ promptCacheKey: {
54455
+ value: true,
54456
+ source: "official-doc",
54457
+ confidence: "declared",
54458
+ observedAt: "2026-09-25T19:30:00Z",
54459
+ 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".'
54460
+ },
53288
54461
  canonicalModelId: "o3-mini",
53289
54462
  modelFamily: "o-series"
53290
54463
  },
@@ -53432,6 +54605,13 @@ var catalog_default = {
53432
54605
  },
53433
54606
  unsupportedParameters: [],
53434
54607
  status: "candidate",
54608
+ promptCacheKey: {
54609
+ value: true,
54610
+ source: "official-doc",
54611
+ confidence: "declared",
54612
+ observedAt: "2026-09-25T19:30:00Z",
54613
+ 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".'
54614
+ },
53435
54615
  canonicalModelId: "o4-mini",
53436
54616
  modelFamily: "o-series"
53437
54617
  },
@@ -73702,7 +74882,8 @@ var catalog_default = {
73702
74882
  "grok-4.20-non-reasoning-gv2"
73703
74883
  ],
73704
74884
  endpoints: [
73705
- "chat"
74885
+ "chat",
74886
+ "responses"
73706
74887
  ],
73707
74888
  contextWindow: {
73708
74889
  value: 1e6,
@@ -73797,7 +74978,8 @@ var catalog_default = {
73797
74978
  "grok-4.20-reasoning-gv2"
73798
74979
  ],
73799
74980
  endpoints: [
73800
- "chat"
74981
+ "chat",
74982
+ "responses"
73801
74983
  ],
73802
74984
  contextWindow: {
73803
74985
  value: 1e6,
@@ -73862,7 +75044,7 @@ var catalog_default = {
73862
75044
  observedAt: "2026-09-25T08:40:00Z"
73863
75045
  },
73864
75046
  efforts: [],
73865
- continuation: "none"
75047
+ continuation: "opaque-provider-state"
73866
75048
  },
73867
75049
  pricing: {
73868
75050
  value: {
@@ -73880,6 +75062,111 @@ var catalog_default = {
73880
75062
  canonicalModelId: "grok-4.20-0309-reasoning",
73881
75063
  modelFamily: "grok"
73882
75064
  },
75065
+ {
75066
+ key: "xai/grok-4.20-multi-agent-0309",
75067
+ providerId: "xai",
75068
+ upstreamId: "grok-4.20-multi-agent-0309",
75069
+ displayName: "Grok 4.20 Multi-Agent Beta",
75070
+ aliases: [
75071
+ "grok-4.20-multi-agent",
75072
+ "grok-4.20-multi-agent-latest",
75073
+ "grok-4.20-multi-agent-beta-latest",
75074
+ "grok-4.20-multi-agent-experimental-beta-0304",
75075
+ "grok-4.20-multi-agent-experimental-beta-latest",
75076
+ "grok-4.20-multi-agent-beta-0309"
75077
+ ],
75078
+ endpoints: [
75079
+ "responses"
75080
+ ],
75081
+ contextWindow: {
75082
+ value: 1e6,
75083
+ source: "official-doc",
75084
+ sourceRef: "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page context window 1,000,000 tokens",
75085
+ confidence: "declared",
75086
+ observedAt: "2026-09-25T08:40:00Z"
75087
+ },
75088
+ inputModalities: {
75089
+ value: [
75090
+ "text",
75091
+ "image"
75092
+ ],
75093
+ source: "official-doc",
75094
+ sourceRef: "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page Modalities: Text, Image input",
75095
+ confidence: "declared",
75096
+ observedAt: "2026-09-25T08:40:00Z"
75097
+ },
75098
+ outputModalities: {
75099
+ value: [
75100
+ "text"
75101
+ ],
75102
+ source: "official-doc",
75103
+ sourceRef: "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page Modalities: Text output",
75104
+ confidence: "declared",
75105
+ observedAt: "2026-09-25T08:40:00Z"
75106
+ },
75107
+ toolCalling: {
75108
+ value: "none",
75109
+ source: "official-doc",
75110
+ 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",
75111
+ confidence: "declared",
75112
+ observedAt: "2026-09-25T08:40:00Z"
75113
+ },
75114
+ nativeTools: {
75115
+ value: false,
75116
+ source: "official-doc",
75117
+ sourceRef: "https://docs.x.ai/developers/model-capabilities/text/multi-agent — client-side/custom function tools unsupported",
75118
+ confidence: "declared",
75119
+ observedAt: "2026-09-25T08:40:00Z"
75120
+ },
75121
+ structuredOutput: {
75122
+ value: true,
75123
+ source: "official-doc",
75124
+ sourceRef: "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page Structured outputs capability",
75125
+ confidence: "declared",
75126
+ observedAt: "2026-09-25T08:40:00Z"
75127
+ },
75128
+ promptCaching: {
75129
+ value: true,
75130
+ source: "official-doc",
75131
+ sourceRef: "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page lists Cached tokens input rate; prompt caching available",
75132
+ confidence: "declared",
75133
+ observedAt: "2026-09-25T08:40:00Z"
75134
+ },
75135
+ reasoning: {
75136
+ supported: {
75137
+ value: true,
75138
+ source: "official-doc",
75139
+ 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",
75140
+ confidence: "declared",
75141
+ observedAt: "2026-09-25T08:40:00Z"
75142
+ },
75143
+ efforts: [
75144
+ "low",
75145
+ "medium",
75146
+ "high",
75147
+ "xhigh"
75148
+ ],
75149
+ continuation: "opaque-provider-state"
75150
+ },
75151
+ pricing: {
75152
+ value: {
75153
+ inputPerMTokUsd: 1.25,
75154
+ outputPerMTokUsd: 2.5,
75155
+ cacheReadPerMTokUsd: 0.2
75156
+ },
75157
+ source: "official-doc",
75158
+ 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).",
75159
+ confidence: "declared",
75160
+ observedAt: "2026-09-25T17:09:48Z"
75161
+ },
75162
+ unsupportedParameters: [
75163
+ "max_output_tokens",
75164
+ "tools"
75165
+ ],
75166
+ status: "candidate",
75167
+ canonicalModelId: "grok-4.20-multi-agent-0309",
75168
+ modelFamily: "grok"
75169
+ },
73883
75170
  {
73884
75171
  key: "xai/grok-4.3",
73885
75172
  providerId: "xai",
@@ -73889,7 +75176,8 @@ var catalog_default = {
73889
75176
  "grok-4.3-latest"
73890
75177
  ],
73891
75178
  endpoints: [
73892
- "chat"
75179
+ "chat",
75180
+ "responses"
73893
75181
  ],
73894
75182
  contextWindow: {
73895
75183
  value: 1e6,
@@ -73960,7 +75248,7 @@ var catalog_default = {
73960
75248
  "high",
73961
75249
  "xhigh"
73962
75250
  ],
73963
- continuation: "plaintext",
75251
+ continuation: "opaque-provider-state",
73964
75252
  defaultEffort: "low"
73965
75253
  },
73966
75254
  pricing: {
@@ -73989,7 +75277,8 @@ var catalog_default = {
73989
75277
  "grok-build-latest"
73990
75278
  ],
73991
75279
  endpoints: [
73992
- "chat"
75280
+ "chat",
75281
+ "responses"
73993
75282
  ],
73994
75283
  contextWindow: {
73995
75284
  value: 500000,
@@ -74058,7 +75347,7 @@ var catalog_default = {
74058
75347
  "medium",
74059
75348
  "high"
74060
75349
  ],
74061
- continuation: "plaintext",
75350
+ continuation: "opaque-provider-state",
74062
75351
  defaultEffort: "high"
74063
75352
  },
74064
75353
  pricing: {
@@ -74088,7 +75377,8 @@ var catalog_default = {
74088
75377
  displayName: "Grok 4.6",
74089
75378
  aliases: [],
74090
75379
  endpoints: [
74091
- "chat"
75380
+ "chat",
75381
+ "responses"
74092
75382
  ],
74093
75383
  contextWindow: {
74094
75384
  value: 500000,
@@ -74158,7 +75448,7 @@ var catalog_default = {
74158
75448
  "high",
74159
75449
  "xhigh"
74160
75450
  ],
74161
- continuation: "plaintext",
75451
+ continuation: "opaque-provider-state",
74162
75452
  defaultEffort: "high"
74163
75453
  },
74164
75454
  pricing: {
@@ -74188,7 +75478,8 @@ var catalog_default = {
74188
75478
  displayName: "Grok 4.7",
74189
75479
  aliases: [],
74190
75480
  endpoints: [
74191
- "chat"
75481
+ "chat",
75482
+ "responses"
74192
75483
  ],
74193
75484
  contextWindow: {
74194
75485
  value: 500000,
@@ -74258,8 +75549,29 @@ var catalog_default = {
74258
75549
  "high",
74259
75550
  "xhigh"
74260
75551
  ],
74261
- continuation: "plaintext",
74262
- defaultEffort: "high"
75552
+ continuation: "opaque-provider-state",
75553
+ defaultEffort: "high",
75554
+ readableState: {
75555
+ value: "summary",
75556
+ source: "official-doc",
75557
+ 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", … }]`',
75558
+ confidence: "declared",
75559
+ observedAt: "2026-09-25T17:09:48Z"
75560
+ },
75561
+ summaryRequest: {
75562
+ value: {
75563
+ field: "reasoning.summary",
75564
+ values: [
75565
+ "detailed",
75566
+ "auto",
75567
+ "concise"
75568
+ ]
75569
+ },
75570
+ source: "official-doc",
75571
+ 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',
75572
+ confidence: "declared",
75573
+ observedAt: "2026-09-25T17:09:48Z"
75574
+ }
74263
75575
  },
74264
75576
  pricing: {
74265
75577
  value: {
@@ -74292,7 +75604,8 @@ var catalog_default = {
74292
75604
  "grok-code-fast-1-0825"
74293
75605
  ],
74294
75606
  endpoints: [
74295
- "chat"
75607
+ "chat",
75608
+ "responses"
74296
75609
  ],
74297
75610
  contextWindow: {
74298
75611
  value: 256000,
@@ -74357,7 +75670,7 @@ var catalog_default = {
74357
75670
  observedAt: "2026-09-25T08:40:00Z"
74358
75671
  },
74359
75672
  efforts: [],
74360
- continuation: "none"
75673
+ continuation: "opaque-provider-state"
74361
75674
  },
74362
75675
  pricing: {
74363
75676
  value: {