@yanlinglabs/winter-provider-catalog 0.0.24 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,25 @@ 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["undeclaredToolCalls"], `${path}.undeclaredToolCalls`, evidenceBoolean, false);
588
+ checkEvidence(errs, v["assistantPrefill"], `${path}.assistantPrefill`, evidenceBoolean, false);
551
589
  checkEvidence(errs, v["classifierEligible"], `${path}.classifierEligible`, evidenceBoolean, false);
552
590
  checkEvidence(errs, v["pricing"], `${path}.pricing`, (val, p) => checkPricing(errs, val, p), false);
553
591
  if (v["reasoning"] !== undefined)
@@ -7776,6 +7814,7 @@ var catalog_default = {
7776
7814
  id: "xai",
7777
7815
  displayName: "xAI (Grok)",
7778
7816
  protocols: [
7817
+ "openai-responses",
7779
7818
  "openai-chat-completions"
7780
7819
  ],
7781
7820
  authKinds: [
@@ -7786,7 +7825,7 @@ var catalog_default = {
7786
7825
  },
7787
7826
  modelDiscovery: "openai-models",
7788
7827
  liveCatalogAuthority: "unknown",
7789
- adapterId: "winter.openai-chat-completions",
7828
+ adapterId: "winter.openai-responses",
7790
7829
  family: "openai",
7791
7830
  upstream: {
7792
7831
  project: "winter",
@@ -15136,6 +15175,45 @@ var catalog_default = {
15136
15175
  "thinking.type.disabled"
15137
15176
  ],
15138
15177
  status: "candidate",
15178
+ deferredToolLoading: {
15179
+ value: true,
15180
+ source: "official-doc",
15181
+ confidence: "declared",
15182
+ observedAt: "2026-09-25T18:30:00Z",
15183
+ 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).'
15184
+ },
15185
+ midConversationSystem: {
15186
+ value: true,
15187
+ source: "official-doc",
15188
+ confidence: "declared",
15189
+ observedAt: "2026-09-25T19:00:00Z",
15190
+ 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."'
15191
+ },
15192
+ midConversationToolChanges: {
15193
+ value: {
15194
+ beta: "mid-conversation-tool-changes-2026-07-01"
15195
+ },
15196
+ source: "official-doc",
15197
+ confidence: "declared",
15198
+ observedAt: "2026-09-26T00:00:00Z",
15199
+ 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).'
15200
+ },
15201
+ inlineToolDefinitions: {
15202
+ value: {
15203
+ beta: "inline-tools-2026-09-15"
15204
+ },
15205
+ source: "official-doc",
15206
+ confidence: "declared",
15207
+ observedAt: "2026-09-26T00:00:00Z",
15208
+ 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.'
15209
+ },
15210
+ assistantPrefill: {
15211
+ value: false,
15212
+ source: "official-doc",
15213
+ confidence: "declared",
15214
+ observedAt: "2026-09-26T00:00:00Z",
15215
+ 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."`
15216
+ },
15139
15217
  canonicalModelId: "claude-fable-5",
15140
15218
  modelFamily: "claude"
15141
15219
  },
@@ -15286,6 +15364,15 @@ var catalog_default = {
15286
15364
  confidence: "declared",
15287
15365
  observedAt: "2026-09-25T13:00:00Z",
15288
15366
  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").'
15367
+ },
15368
+ perMessageEffort: {
15369
+ value: {
15370
+ beta: "mid-conversation-output-config-2026-07-01"
15371
+ },
15372
+ source: "official-doc",
15373
+ confidence: "declared",
15374
+ observedAt: "2026-09-25T18:00:00Z",
15375
+ 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
15376
  }
15290
15377
  },
15291
15378
  pricing: {
@@ -15307,6 +15394,45 @@ var catalog_default = {
15307
15394
  "tool_choice.tool"
15308
15395
  ],
15309
15396
  status: "candidate",
15397
+ deferredToolLoading: {
15398
+ value: true,
15399
+ source: "official-doc",
15400
+ confidence: "declared",
15401
+ observedAt: "2026-09-25T18:30:00Z",
15402
+ 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).'
15403
+ },
15404
+ midConversationSystem: {
15405
+ value: true,
15406
+ source: "official-doc",
15407
+ confidence: "declared",
15408
+ observedAt: "2026-09-25T19:00:00Z",
15409
+ 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."'
15410
+ },
15411
+ midConversationToolChanges: {
15412
+ value: {
15413
+ beta: "mid-conversation-tool-changes-2026-07-01"
15414
+ },
15415
+ source: "official-doc",
15416
+ confidence: "declared",
15417
+ observedAt: "2026-09-26T00:00:00Z",
15418
+ 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).'
15419
+ },
15420
+ inlineToolDefinitions: {
15421
+ value: {
15422
+ beta: "inline-tools-2026-09-15"
15423
+ },
15424
+ source: "official-doc",
15425
+ confidence: "declared",
15426
+ observedAt: "2026-09-26T00:00:00Z",
15427
+ 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.'
15428
+ },
15429
+ assistantPrefill: {
15430
+ value: false,
15431
+ source: "official-doc",
15432
+ confidence: "declared",
15433
+ observedAt: "2026-09-26T00:00:00Z",
15434
+ 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."`
15435
+ },
15310
15436
  canonicalModelId: "claude-fable-5.1",
15311
15437
  modelFamily: "claude"
15312
15438
  },
@@ -15405,6 +15531,13 @@ var catalog_default = {
15405
15531
  "thinking.type.adaptive"
15406
15532
  ],
15407
15533
  status: "candidate",
15534
+ deferredToolLoading: {
15535
+ value: true,
15536
+ source: "official-doc",
15537
+ confidence: "declared",
15538
+ observedAt: "2026-09-25T18:30:00Z",
15539
+ 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).'
15540
+ },
15408
15541
  canonicalModelId: "claude-haiku-4.5-20251001",
15409
15542
  modelFamily: "claude"
15410
15543
  },
@@ -15503,6 +15636,13 @@ var catalog_default = {
15503
15636
  "thinking.type.adaptive"
15504
15637
  ],
15505
15638
  status: "candidate",
15639
+ deferredToolLoading: {
15640
+ value: true,
15641
+ source: "official-doc",
15642
+ confidence: "declared",
15643
+ observedAt: "2026-09-25T18:30:00Z",
15644
+ 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).'
15645
+ },
15506
15646
  canonicalModelId: "claude-haiku-4.5",
15507
15647
  modelFamily: "claude"
15508
15648
  },
@@ -15627,6 +15767,13 @@ var catalog_default = {
15627
15767
  "thinking.type.adaptive"
15628
15768
  ],
15629
15769
  status: "candidate",
15770
+ deferredToolLoading: {
15771
+ value: true,
15772
+ source: "official-doc",
15773
+ confidence: "declared",
15774
+ observedAt: "2026-09-25T18:30:00Z",
15775
+ 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).'
15776
+ },
15630
15777
  canonicalModelId: "claude-opus-4.5",
15631
15778
  modelFamily: "claude"
15632
15779
  },
@@ -15635,7 +15782,9 @@ var catalog_default = {
15635
15782
  providerId: "anthropic",
15636
15783
  upstreamId: "claude-opus-4.6",
15637
15784
  displayName: "Claude Opus 4.6",
15638
- aliases: [],
15785
+ aliases: [
15786
+ "claude-opus-4-6"
15787
+ ],
15639
15788
  endpoints: [
15640
15789
  "chat"
15641
15790
  ],
@@ -15747,6 +15896,20 @@ var catalog_default = {
15747
15896
  },
15748
15897
  unsupportedParameters: [],
15749
15898
  status: "candidate",
15899
+ deferredToolLoading: {
15900
+ value: true,
15901
+ source: "official-doc",
15902
+ confidence: "declared",
15903
+ observedAt: "2026-09-25T18:30:00Z",
15904
+ 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).'
15905
+ },
15906
+ assistantPrefill: {
15907
+ value: false,
15908
+ source: "official-doc",
15909
+ confidence: "declared",
15910
+ observedAt: "2026-09-26T00:00:00Z",
15911
+ 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."`
15912
+ },
15750
15913
  canonicalModelId: "claude-opus-4.6",
15751
15914
  modelFamily: "claude"
15752
15915
  },
@@ -15755,7 +15918,9 @@ var catalog_default = {
15755
15918
  providerId: "anthropic",
15756
15919
  upstreamId: "claude-opus-4.7",
15757
15920
  displayName: "Claude Opus 4.7",
15758
- aliases: [],
15921
+ aliases: [
15922
+ "claude-opus-4-7"
15923
+ ],
15759
15924
  endpoints: [
15760
15925
  "chat"
15761
15926
  ],
@@ -15873,6 +16038,20 @@ var catalog_default = {
15873
16038
  "thinking.type.enabled"
15874
16039
  ],
15875
16040
  status: "candidate",
16041
+ deferredToolLoading: {
16042
+ value: true,
16043
+ source: "official-doc",
16044
+ confidence: "declared",
16045
+ observedAt: "2026-09-25T18:30:00Z",
16046
+ 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).'
16047
+ },
16048
+ assistantPrefill: {
16049
+ value: false,
16050
+ source: "official-doc",
16051
+ confidence: "declared",
16052
+ observedAt: "2026-09-26T00:00:00Z",
16053
+ 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."`
16054
+ },
15876
16055
  canonicalModelId: "claude-opus-4.7",
15877
16056
  modelFamily: "claude"
15878
16057
  },
@@ -15881,7 +16060,9 @@ var catalog_default = {
15881
16060
  providerId: "anthropic",
15882
16061
  upstreamId: "claude-opus-4.8",
15883
16062
  displayName: "Claude Opus 4.8",
15884
- aliases: [],
16063
+ aliases: [
16064
+ "claude-opus-4-8"
16065
+ ],
15885
16066
  endpoints: [
15886
16067
  "chat"
15887
16068
  ],
@@ -15999,6 +16180,45 @@ var catalog_default = {
15999
16180
  "thinking.type.enabled"
16000
16181
  ],
16001
16182
  status: "candidate",
16183
+ deferredToolLoading: {
16184
+ value: true,
16185
+ source: "official-doc",
16186
+ confidence: "declared",
16187
+ observedAt: "2026-09-25T18:30:00Z",
16188
+ 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).'
16189
+ },
16190
+ midConversationSystem: {
16191
+ value: true,
16192
+ source: "official-doc",
16193
+ confidence: "declared",
16194
+ observedAt: "2026-09-25T19:00:00Z",
16195
+ 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."'
16196
+ },
16197
+ midConversationToolChanges: {
16198
+ value: {
16199
+ beta: "mid-conversation-tool-changes-2026-07-01"
16200
+ },
16201
+ source: "official-doc",
16202
+ confidence: "declared",
16203
+ observedAt: "2026-09-26T00:00:00Z",
16204
+ 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).'
16205
+ },
16206
+ inlineToolDefinitions: {
16207
+ value: {
16208
+ beta: "inline-tools-2026-09-15"
16209
+ },
16210
+ source: "official-doc",
16211
+ confidence: "declared",
16212
+ observedAt: "2026-09-26T00:00:00Z",
16213
+ 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.'
16214
+ },
16215
+ assistantPrefill: {
16216
+ value: false,
16217
+ source: "official-doc",
16218
+ confidence: "declared",
16219
+ observedAt: "2026-09-26T00:00:00Z",
16220
+ 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."`
16221
+ },
16002
16222
  canonicalModelId: "claude-opus-4.8",
16003
16223
  modelFamily: "claude"
16004
16224
  },
@@ -16147,6 +16367,15 @@ var catalog_default = {
16147
16367
  confidence: "declared",
16148
16368
  observedAt: "2026-09-25T12:30:00Z",
16149
16369
  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)."
16370
+ },
16371
+ perMessageEffort: {
16372
+ value: {
16373
+ beta: "mid-conversation-output-config-2026-07-01"
16374
+ },
16375
+ source: "official-doc",
16376
+ confidence: "declared",
16377
+ observedAt: "2026-09-25T18:00:00Z",
16378
+ 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
16379
  }
16151
16380
  },
16152
16381
  pricing: {
@@ -16165,9 +16394,50 @@ var catalog_default = {
16165
16394
  "temperature",
16166
16395
  "top_p",
16167
16396
  "top_k",
16168
- "thinking.type.enabled"
16397
+ "thinking.type.enabled",
16398
+ "thinking.type.disabled+output_config.effort.xhigh",
16399
+ "thinking.type.disabled+output_config.effort.max"
16169
16400
  ],
16170
16401
  status: "candidate",
16402
+ deferredToolLoading: {
16403
+ value: true,
16404
+ source: "official-doc",
16405
+ confidence: "declared",
16406
+ observedAt: "2026-09-25T18:30:00Z",
16407
+ 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).'
16408
+ },
16409
+ midConversationSystem: {
16410
+ value: true,
16411
+ source: "official-doc",
16412
+ confidence: "declared",
16413
+ observedAt: "2026-09-25T19:00:00Z",
16414
+ 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."'
16415
+ },
16416
+ midConversationToolChanges: {
16417
+ value: {
16418
+ beta: "mid-conversation-tool-changes-2026-07-01"
16419
+ },
16420
+ source: "official-doc",
16421
+ confidence: "declared",
16422
+ observedAt: "2026-09-26T00:00:00Z",
16423
+ 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).'
16424
+ },
16425
+ inlineToolDefinitions: {
16426
+ value: {
16427
+ beta: "inline-tools-2026-09-15"
16428
+ },
16429
+ source: "official-doc",
16430
+ confidence: "declared",
16431
+ observedAt: "2026-09-26T00:00:00Z",
16432
+ 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.'
16433
+ },
16434
+ assistantPrefill: {
16435
+ value: false,
16436
+ source: "official-doc",
16437
+ confidence: "declared",
16438
+ observedAt: "2026-09-26T00:00:00Z",
16439
+ 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."`
16440
+ },
16171
16441
  canonicalModelId: "claude-opus-5",
16172
16442
  modelFamily: "claude"
16173
16443
  },
@@ -16327,6 +16597,15 @@ var catalog_default = {
16327
16597
  confidence: "declared",
16328
16598
  observedAt: "2026-09-25T13:00:00Z",
16329
16599
  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").'
16600
+ },
16601
+ perMessageEffort: {
16602
+ value: {
16603
+ beta: "mid-conversation-output-config-2026-07-01"
16604
+ },
16605
+ source: "official-doc",
16606
+ confidence: "declared",
16607
+ observedAt: "2026-09-25T18:00:00Z",
16608
+ 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
16609
  }
16331
16610
  },
16332
16611
  pricing: {
@@ -16348,6 +16627,52 @@ var catalog_default = {
16348
16627
  "tool_choice.tool"
16349
16628
  ],
16350
16629
  status: "candidate",
16630
+ deferredToolLoading: {
16631
+ value: true,
16632
+ source: "official-doc",
16633
+ confidence: "declared",
16634
+ observedAt: "2026-09-25T18:30:00Z",
16635
+ 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).'
16636
+ },
16637
+ midConversationSystem: {
16638
+ value: true,
16639
+ source: "official-doc",
16640
+ confidence: "declared",
16641
+ observedAt: "2026-09-25T19:00:00Z",
16642
+ 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."'
16643
+ },
16644
+ midConversationToolChanges: {
16645
+ value: {
16646
+ beta: "mid-conversation-tool-changes-2026-07-01"
16647
+ },
16648
+ source: "official-doc",
16649
+ confidence: "declared",
16650
+ observedAt: "2026-09-26T00:00:00Z",
16651
+ 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).'
16652
+ },
16653
+ inlineToolDefinitions: {
16654
+ value: {
16655
+ beta: "inline-tools-2026-09-15"
16656
+ },
16657
+ source: "official-doc",
16658
+ confidence: "declared",
16659
+ observedAt: "2026-09-26T00:00:00Z",
16660
+ 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.'
16661
+ },
16662
+ assistantPrefill: {
16663
+ value: false,
16664
+ source: "official-doc",
16665
+ confidence: "declared",
16666
+ observedAt: "2026-09-26T00:00:00Z",
16667
+ 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."`
16668
+ },
16669
+ undeclaredToolCalls: {
16670
+ value: true,
16671
+ source: "live-probe",
16672
+ sourceRef: "scripts/probe-fork-undeclared-tool.ts (WS-24), run live 2026-09-26: A -- a call to a tool absent from `tools` and its result in the history -> 200; B -- a ToolSearch result carrying the definition as text -> the model called the undeclared tool; C -- that call and its result fed back -> 200",
16673
+ confidence: "verified",
16674
+ observedAt: "2026-09-26T00:00:00Z"
16675
+ },
16351
16676
  canonicalModelId: "claude-opus-5.5",
16352
16677
  modelFamily: "claude"
16353
16678
  },
@@ -16463,6 +16788,13 @@ var catalog_default = {
16463
16788
  "thinking.type.adaptive"
16464
16789
  ],
16465
16790
  status: "candidate",
16791
+ deferredToolLoading: {
16792
+ value: true,
16793
+ source: "official-doc",
16794
+ confidence: "declared",
16795
+ observedAt: "2026-09-25T18:30:00Z",
16796
+ 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).'
16797
+ },
16466
16798
  canonicalModelId: "claude-sonnet-4.5",
16467
16799
  modelFamily: "claude"
16468
16800
  },
@@ -16471,7 +16803,9 @@ var catalog_default = {
16471
16803
  providerId: "anthropic",
16472
16804
  upstreamId: "claude-sonnet-4.6",
16473
16805
  displayName: "Claude Sonnet 4.6",
16474
- aliases: [],
16806
+ aliases: [
16807
+ "claude-sonnet-4-6"
16808
+ ],
16475
16809
  endpoints: [
16476
16810
  "chat"
16477
16811
  ],
@@ -16583,6 +16917,13 @@ var catalog_default = {
16583
16917
  },
16584
16918
  unsupportedParameters: [],
16585
16919
  status: "candidate",
16920
+ deferredToolLoading: {
16921
+ value: true,
16922
+ source: "official-doc",
16923
+ confidence: "declared",
16924
+ observedAt: "2026-09-25T18:30:00Z",
16925
+ 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).'
16926
+ },
16586
16927
  canonicalModelId: "claude-sonnet-4.6",
16587
16928
  modelFamily: "claude"
16588
16929
  },
@@ -16754,6 +17095,20 @@ var catalog_default = {
16754
17095
  "thinking.type.enabled"
16755
17096
  ],
16756
17097
  status: "candidate",
17098
+ assistantPrefill: {
17099
+ value: false,
17100
+ source: "official-doc",
17101
+ confidence: "declared",
17102
+ observedAt: "2026-09-26T00:00:00Z",
17103
+ 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."`
17104
+ },
17105
+ undeclaredToolCalls: {
17106
+ value: true,
17107
+ source: "live-probe",
17108
+ sourceRef: "scripts/probe-fork-undeclared-tool.ts (WS-24), run live 2026-09-26: A -- a call to a tool absent from `tools` and its result in the history -> 200; B -- a ToolSearch result carrying the definition as text -> the model called the undeclared tool; C -- that call and its result fed back -> 200",
17109
+ confidence: "verified",
17110
+ observedAt: "2026-09-26T00:00:00Z"
17111
+ },
16757
17112
  canonicalModelId: "claude-sonnet-5",
16758
17113
  modelFamily: "claude"
16759
17114
  },
@@ -25957,6 +26312,20 @@ var catalog_default = {
25957
26312
  },
25958
26313
  unsupportedParameters: [],
25959
26314
  status: "candidate",
26315
+ promptCacheKey: {
26316
+ value: true,
26317
+ source: "official-doc",
26318
+ confidence: "declared",
26319
+ observedAt: "2026-09-25T19:30:00Z",
26320
+ 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."
26321
+ },
26322
+ clientToolSearch: {
26323
+ value: true,
26324
+ source: "upstream-static",
26325
+ confidence: "declared",
26326
+ observedAt: "2026-09-26T00:00:00Z",
26327
+ 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."
26328
+ },
25960
26329
  canonicalModelId: "gpt-5.6-luna",
25961
26330
  modelFamily: "gpt"
25962
26331
  },
@@ -26064,6 +26433,20 @@ var catalog_default = {
26064
26433
  },
26065
26434
  unsupportedParameters: [],
26066
26435
  status: "candidate",
26436
+ promptCacheKey: {
26437
+ value: true,
26438
+ source: "official-doc",
26439
+ confidence: "declared",
26440
+ observedAt: "2026-09-25T19:30:00Z",
26441
+ 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."
26442
+ },
26443
+ clientToolSearch: {
26444
+ value: true,
26445
+ source: "upstream-static",
26446
+ confidence: "declared",
26447
+ observedAt: "2026-09-26T00:00:00Z",
26448
+ 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."
26449
+ },
26067
26450
  canonicalModelId: "gpt-5.6-sol",
26068
26451
  modelFamily: "gpt"
26069
26452
  },
@@ -26171,6 +26554,20 @@ var catalog_default = {
26171
26554
  },
26172
26555
  unsupportedParameters: [],
26173
26556
  status: "candidate",
26557
+ promptCacheKey: {
26558
+ value: true,
26559
+ source: "official-doc",
26560
+ confidence: "declared",
26561
+ observedAt: "2026-09-25T19:30:00Z",
26562
+ 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."
26563
+ },
26564
+ clientToolSearch: {
26565
+ value: true,
26566
+ source: "upstream-static",
26567
+ confidence: "declared",
26568
+ observedAt: "2026-09-26T00:00:00Z",
26569
+ 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."
26570
+ },
26174
26571
  canonicalModelId: "gpt-5.6-terra",
26175
26572
  modelFamily: "gpt"
26176
26573
  },
@@ -26280,6 +26677,20 @@ var catalog_default = {
26280
26677
  },
26281
26678
  unsupportedParameters: [],
26282
26679
  status: "candidate",
26680
+ promptCacheKey: {
26681
+ value: true,
26682
+ source: "official-doc",
26683
+ confidence: "declared",
26684
+ observedAt: "2026-09-25T19:30:00Z",
26685
+ 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."
26686
+ },
26687
+ clientToolSearch: {
26688
+ value: true,
26689
+ source: "upstream-static",
26690
+ confidence: "declared",
26691
+ observedAt: "2026-09-26T00:00:00Z",
26692
+ 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."
26693
+ },
26283
26694
  canonicalModelId: "gpt-6-astra",
26284
26695
  modelFamily: "gpt"
26285
26696
  },
@@ -26389,6 +26800,20 @@ var catalog_default = {
26389
26800
  },
26390
26801
  unsupportedParameters: [],
26391
26802
  status: "candidate",
26803
+ promptCacheKey: {
26804
+ value: true,
26805
+ source: "official-doc",
26806
+ confidence: "declared",
26807
+ observedAt: "2026-09-25T19:30:00Z",
26808
+ 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."
26809
+ },
26810
+ clientToolSearch: {
26811
+ value: true,
26812
+ source: "upstream-static",
26813
+ confidence: "declared",
26814
+ observedAt: "2026-09-26T00:00:00Z",
26815
+ 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."
26816
+ },
26392
26817
  canonicalModelId: "gpt-6-luna",
26393
26818
  modelFamily: "gpt"
26394
26819
  },
@@ -26498,6 +26923,20 @@ var catalog_default = {
26498
26923
  },
26499
26924
  unsupportedParameters: [],
26500
26925
  status: "candidate",
26926
+ promptCacheKey: {
26927
+ value: true,
26928
+ source: "official-doc",
26929
+ confidence: "declared",
26930
+ observedAt: "2026-09-25T19:30:00Z",
26931
+ 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."
26932
+ },
26933
+ clientToolSearch: {
26934
+ value: true,
26935
+ source: "upstream-static",
26936
+ confidence: "declared",
26937
+ observedAt: "2026-09-26T00:00:00Z",
26938
+ 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."
26939
+ },
26501
26940
  canonicalModelId: "gpt-6-sol",
26502
26941
  modelFamily: "gpt"
26503
26942
  },
@@ -27241,6 +27680,45 @@ var catalog_default = {
27241
27680
  "thinking.type.disabled"
27242
27681
  ],
27243
27682
  status: "candidate",
27683
+ deferredToolLoading: {
27684
+ value: true,
27685
+ source: "official-doc",
27686
+ confidence: "declared",
27687
+ observedAt: "2026-09-25T18:30:00Z",
27688
+ 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).'
27689
+ },
27690
+ midConversationSystem: {
27691
+ value: true,
27692
+ source: "official-doc",
27693
+ confidence: "declared",
27694
+ observedAt: "2026-09-25T19:00:00Z",
27695
+ 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."'
27696
+ },
27697
+ midConversationToolChanges: {
27698
+ value: {
27699
+ beta: "mid-conversation-tool-changes-2026-07-01"
27700
+ },
27701
+ source: "official-doc",
27702
+ confidence: "declared",
27703
+ observedAt: "2026-09-26T00:00:00Z",
27704
+ 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).'
27705
+ },
27706
+ inlineToolDefinitions: {
27707
+ value: {
27708
+ beta: "inline-tools-2026-09-15"
27709
+ },
27710
+ source: "official-doc",
27711
+ confidence: "declared",
27712
+ observedAt: "2026-09-26T00:00:00Z",
27713
+ 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.'
27714
+ },
27715
+ assistantPrefill: {
27716
+ value: false,
27717
+ source: "official-doc",
27718
+ confidence: "declared",
27719
+ observedAt: "2026-09-26T00:00:00Z",
27720
+ 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."`
27721
+ },
27244
27722
  canonicalModelId: "claude-fable-5",
27245
27723
  modelFamily: "claude"
27246
27724
  },
@@ -27391,6 +27869,15 @@ var catalog_default = {
27391
27869
  confidence: "declared",
27392
27870
  observedAt: "2026-09-25T13:00:00Z",
27393
27871
  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").'
27872
+ },
27873
+ perMessageEffort: {
27874
+ value: {
27875
+ beta: "mid-conversation-output-config-2026-07-01"
27876
+ },
27877
+ source: "official-doc",
27878
+ confidence: "declared",
27879
+ observedAt: "2026-09-25T18:00:00Z",
27880
+ 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
27881
  }
27395
27882
  },
27396
27883
  pricing: {
@@ -27412,6 +27899,45 @@ var catalog_default = {
27412
27899
  "tool_choice.tool"
27413
27900
  ],
27414
27901
  status: "candidate",
27902
+ deferredToolLoading: {
27903
+ value: true,
27904
+ source: "official-doc",
27905
+ confidence: "declared",
27906
+ observedAt: "2026-09-25T18:30:00Z",
27907
+ 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).'
27908
+ },
27909
+ midConversationSystem: {
27910
+ value: true,
27911
+ source: "official-doc",
27912
+ confidence: "declared",
27913
+ observedAt: "2026-09-25T19:00:00Z",
27914
+ 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."'
27915
+ },
27916
+ midConversationToolChanges: {
27917
+ value: {
27918
+ beta: "mid-conversation-tool-changes-2026-07-01"
27919
+ },
27920
+ source: "official-doc",
27921
+ confidence: "declared",
27922
+ observedAt: "2026-09-26T00:00:00Z",
27923
+ 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).'
27924
+ },
27925
+ inlineToolDefinitions: {
27926
+ value: {
27927
+ beta: "inline-tools-2026-09-15"
27928
+ },
27929
+ source: "official-doc",
27930
+ confidence: "declared",
27931
+ observedAt: "2026-09-26T00:00:00Z",
27932
+ 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.'
27933
+ },
27934
+ assistantPrefill: {
27935
+ value: false,
27936
+ source: "official-doc",
27937
+ confidence: "declared",
27938
+ observedAt: "2026-09-26T00:00:00Z",
27939
+ 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."`
27940
+ },
27415
27941
  canonicalModelId: "claude-fable-5.1",
27416
27942
  modelFamily: "claude"
27417
27943
  },
@@ -27510,6 +28036,13 @@ var catalog_default = {
27510
28036
  "thinking.type.adaptive"
27511
28037
  ],
27512
28038
  status: "candidate",
28039
+ deferredToolLoading: {
28040
+ value: true,
28041
+ source: "official-doc",
28042
+ confidence: "declared",
28043
+ observedAt: "2026-09-25T18:30:00Z",
28044
+ 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).'
28045
+ },
27513
28046
  canonicalModelId: "claude-haiku-4.5-20251001",
27514
28047
  modelFamily: "claude"
27515
28048
  },
@@ -27608,6 +28141,13 @@ var catalog_default = {
27608
28141
  "thinking.type.adaptive"
27609
28142
  ],
27610
28143
  status: "candidate",
28144
+ deferredToolLoading: {
28145
+ value: true,
28146
+ source: "official-doc",
28147
+ confidence: "declared",
28148
+ observedAt: "2026-09-25T18:30:00Z",
28149
+ 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).'
28150
+ },
27611
28151
  canonicalModelId: "claude-haiku-4.5",
27612
28152
  modelFamily: "claude"
27613
28153
  },
@@ -27732,6 +28272,13 @@ var catalog_default = {
27732
28272
  "thinking.type.adaptive"
27733
28273
  ],
27734
28274
  status: "candidate",
28275
+ deferredToolLoading: {
28276
+ value: true,
28277
+ source: "official-doc",
28278
+ confidence: "declared",
28279
+ observedAt: "2026-09-25T18:30:00Z",
28280
+ 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).'
28281
+ },
27735
28282
  canonicalModelId: "claude-opus-4.5",
27736
28283
  modelFamily: "claude"
27737
28284
  },
@@ -27740,7 +28287,9 @@ var catalog_default = {
27740
28287
  providerId: "console",
27741
28288
  upstreamId: "claude-opus-4.6",
27742
28289
  displayName: "Claude Opus 4.6",
27743
- aliases: [],
28290
+ aliases: [
28291
+ "claude-opus-4-6"
28292
+ ],
27744
28293
  endpoints: [
27745
28294
  "chat"
27746
28295
  ],
@@ -27852,6 +28401,20 @@ var catalog_default = {
27852
28401
  },
27853
28402
  unsupportedParameters: [],
27854
28403
  status: "candidate",
28404
+ deferredToolLoading: {
28405
+ value: true,
28406
+ source: "official-doc",
28407
+ confidence: "declared",
28408
+ observedAt: "2026-09-25T18:30:00Z",
28409
+ 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).'
28410
+ },
28411
+ assistantPrefill: {
28412
+ value: false,
28413
+ source: "official-doc",
28414
+ confidence: "declared",
28415
+ observedAt: "2026-09-26T00:00:00Z",
28416
+ 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."`
28417
+ },
27855
28418
  canonicalModelId: "claude-opus-4.6",
27856
28419
  modelFamily: "claude"
27857
28420
  },
@@ -27860,7 +28423,9 @@ var catalog_default = {
27860
28423
  providerId: "console",
27861
28424
  upstreamId: "claude-opus-4.7",
27862
28425
  displayName: "Claude Opus 4.7",
27863
- aliases: [],
28426
+ aliases: [
28427
+ "claude-opus-4-7"
28428
+ ],
27864
28429
  endpoints: [
27865
28430
  "chat"
27866
28431
  ],
@@ -27978,6 +28543,20 @@ var catalog_default = {
27978
28543
  "thinking.type.enabled"
27979
28544
  ],
27980
28545
  status: "candidate",
28546
+ deferredToolLoading: {
28547
+ value: true,
28548
+ source: "official-doc",
28549
+ confidence: "declared",
28550
+ observedAt: "2026-09-25T18:30:00Z",
28551
+ 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).'
28552
+ },
28553
+ assistantPrefill: {
28554
+ value: false,
28555
+ source: "official-doc",
28556
+ confidence: "declared",
28557
+ observedAt: "2026-09-26T00:00:00Z",
28558
+ 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."`
28559
+ },
27981
28560
  canonicalModelId: "claude-opus-4.7",
27982
28561
  modelFamily: "claude"
27983
28562
  },
@@ -27986,7 +28565,9 @@ var catalog_default = {
27986
28565
  providerId: "console",
27987
28566
  upstreamId: "claude-opus-4.8",
27988
28567
  displayName: "Claude Opus 4.8",
27989
- aliases: [],
28568
+ aliases: [
28569
+ "claude-opus-4-8"
28570
+ ],
27990
28571
  endpoints: [
27991
28572
  "chat"
27992
28573
  ],
@@ -28104,6 +28685,45 @@ var catalog_default = {
28104
28685
  "thinking.type.enabled"
28105
28686
  ],
28106
28687
  status: "candidate",
28688
+ deferredToolLoading: {
28689
+ value: true,
28690
+ source: "official-doc",
28691
+ confidence: "declared",
28692
+ observedAt: "2026-09-25T18:30:00Z",
28693
+ 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).'
28694
+ },
28695
+ midConversationSystem: {
28696
+ value: true,
28697
+ source: "official-doc",
28698
+ confidence: "declared",
28699
+ observedAt: "2026-09-25T19:00:00Z",
28700
+ 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."'
28701
+ },
28702
+ midConversationToolChanges: {
28703
+ value: {
28704
+ beta: "mid-conversation-tool-changes-2026-07-01"
28705
+ },
28706
+ source: "official-doc",
28707
+ confidence: "declared",
28708
+ observedAt: "2026-09-26T00:00:00Z",
28709
+ 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).'
28710
+ },
28711
+ inlineToolDefinitions: {
28712
+ value: {
28713
+ beta: "inline-tools-2026-09-15"
28714
+ },
28715
+ source: "official-doc",
28716
+ confidence: "declared",
28717
+ observedAt: "2026-09-26T00:00:00Z",
28718
+ 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.'
28719
+ },
28720
+ assistantPrefill: {
28721
+ value: false,
28722
+ source: "official-doc",
28723
+ confidence: "declared",
28724
+ observedAt: "2026-09-26T00:00:00Z",
28725
+ 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."`
28726
+ },
28107
28727
  canonicalModelId: "claude-opus-4.8",
28108
28728
  modelFamily: "claude"
28109
28729
  },
@@ -28252,6 +28872,15 @@ var catalog_default = {
28252
28872
  confidence: "declared",
28253
28873
  observedAt: "2026-09-25T12:30:00Z",
28254
28874
  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)."
28875
+ },
28876
+ perMessageEffort: {
28877
+ value: {
28878
+ beta: "mid-conversation-output-config-2026-07-01"
28879
+ },
28880
+ source: "official-doc",
28881
+ confidence: "declared",
28882
+ observedAt: "2026-09-25T18:00:00Z",
28883
+ 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
28884
  }
28256
28885
  },
28257
28886
  pricing: {
@@ -28270,9 +28899,50 @@ var catalog_default = {
28270
28899
  "temperature",
28271
28900
  "top_p",
28272
28901
  "top_k",
28273
- "thinking.type.enabled"
28902
+ "thinking.type.enabled",
28903
+ "thinking.type.disabled+output_config.effort.xhigh",
28904
+ "thinking.type.disabled+output_config.effort.max"
28274
28905
  ],
28275
28906
  status: "candidate",
28907
+ deferredToolLoading: {
28908
+ value: true,
28909
+ source: "official-doc",
28910
+ confidence: "declared",
28911
+ observedAt: "2026-09-25T18:30:00Z",
28912
+ 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).'
28913
+ },
28914
+ midConversationSystem: {
28915
+ value: true,
28916
+ source: "official-doc",
28917
+ confidence: "declared",
28918
+ observedAt: "2026-09-25T19:00:00Z",
28919
+ 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."'
28920
+ },
28921
+ midConversationToolChanges: {
28922
+ value: {
28923
+ beta: "mid-conversation-tool-changes-2026-07-01"
28924
+ },
28925
+ source: "official-doc",
28926
+ confidence: "declared",
28927
+ observedAt: "2026-09-26T00:00:00Z",
28928
+ 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).'
28929
+ },
28930
+ inlineToolDefinitions: {
28931
+ value: {
28932
+ beta: "inline-tools-2026-09-15"
28933
+ },
28934
+ source: "official-doc",
28935
+ confidence: "declared",
28936
+ observedAt: "2026-09-26T00:00:00Z",
28937
+ 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.'
28938
+ },
28939
+ assistantPrefill: {
28940
+ value: false,
28941
+ source: "official-doc",
28942
+ confidence: "declared",
28943
+ observedAt: "2026-09-26T00:00:00Z",
28944
+ 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."`
28945
+ },
28276
28946
  canonicalModelId: "claude-opus-5",
28277
28947
  modelFamily: "claude"
28278
28948
  },
@@ -28432,6 +29102,15 @@ var catalog_default = {
28432
29102
  confidence: "declared",
28433
29103
  observedAt: "2026-09-25T13:00:00Z",
28434
29104
  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").'
29105
+ },
29106
+ perMessageEffort: {
29107
+ value: {
29108
+ beta: "mid-conversation-output-config-2026-07-01"
29109
+ },
29110
+ source: "official-doc",
29111
+ confidence: "declared",
29112
+ observedAt: "2026-09-25T18:00:00Z",
29113
+ 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
29114
  }
28436
29115
  },
28437
29116
  pricing: {
@@ -28453,6 +29132,45 @@ var catalog_default = {
28453
29132
  "tool_choice.tool"
28454
29133
  ],
28455
29134
  status: "candidate",
29135
+ deferredToolLoading: {
29136
+ value: true,
29137
+ source: "official-doc",
29138
+ confidence: "declared",
29139
+ observedAt: "2026-09-25T18:30:00Z",
29140
+ 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).'
29141
+ },
29142
+ midConversationSystem: {
29143
+ value: true,
29144
+ source: "official-doc",
29145
+ confidence: "declared",
29146
+ observedAt: "2026-09-25T19:00:00Z",
29147
+ 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."'
29148
+ },
29149
+ midConversationToolChanges: {
29150
+ value: {
29151
+ beta: "mid-conversation-tool-changes-2026-07-01"
29152
+ },
29153
+ source: "official-doc",
29154
+ confidence: "declared",
29155
+ observedAt: "2026-09-26T00:00:00Z",
29156
+ 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).'
29157
+ },
29158
+ inlineToolDefinitions: {
29159
+ value: {
29160
+ beta: "inline-tools-2026-09-15"
29161
+ },
29162
+ source: "official-doc",
29163
+ confidence: "declared",
29164
+ observedAt: "2026-09-26T00:00:00Z",
29165
+ 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.'
29166
+ },
29167
+ assistantPrefill: {
29168
+ value: false,
29169
+ source: "official-doc",
29170
+ confidence: "declared",
29171
+ observedAt: "2026-09-26T00:00:00Z",
29172
+ 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."`
29173
+ },
28456
29174
  canonicalModelId: "claude-opus-5.5",
28457
29175
  modelFamily: "claude"
28458
29176
  },
@@ -28568,6 +29286,13 @@ var catalog_default = {
28568
29286
  "thinking.type.adaptive"
28569
29287
  ],
28570
29288
  status: "candidate",
29289
+ deferredToolLoading: {
29290
+ value: true,
29291
+ source: "official-doc",
29292
+ confidence: "declared",
29293
+ observedAt: "2026-09-25T18:30:00Z",
29294
+ 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).'
29295
+ },
28571
29296
  canonicalModelId: "claude-sonnet-4.5",
28572
29297
  modelFamily: "claude"
28573
29298
  },
@@ -28576,7 +29301,9 @@ var catalog_default = {
28576
29301
  providerId: "console",
28577
29302
  upstreamId: "claude-sonnet-4.6",
28578
29303
  displayName: "Claude Sonnet 4.6",
28579
- aliases: [],
29304
+ aliases: [
29305
+ "claude-sonnet-4-6"
29306
+ ],
28580
29307
  endpoints: [
28581
29308
  "chat"
28582
29309
  ],
@@ -28688,6 +29415,13 @@ var catalog_default = {
28688
29415
  },
28689
29416
  unsupportedParameters: [],
28690
29417
  status: "candidate",
29418
+ deferredToolLoading: {
29419
+ value: true,
29420
+ source: "official-doc",
29421
+ confidence: "declared",
29422
+ observedAt: "2026-09-25T18:30:00Z",
29423
+ 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).'
29424
+ },
28691
29425
  canonicalModelId: "claude-sonnet-4.6",
28692
29426
  modelFamily: "claude"
28693
29427
  },
@@ -28859,6 +29593,13 @@ var catalog_default = {
28859
29593
  "thinking.type.enabled"
28860
29594
  ],
28861
29595
  status: "candidate",
29596
+ assistantPrefill: {
29597
+ value: false,
29598
+ source: "official-doc",
29599
+ confidence: "declared",
29600
+ observedAt: "2026-09-26T00:00:00Z",
29601
+ 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."`
29602
+ },
28862
29603
  canonicalModelId: "claude-sonnet-5",
28863
29604
  modelFamily: "claude"
28864
29605
  },
@@ -30178,6 +30919,13 @@ var catalog_default = {
30178
30919
  },
30179
30920
  unsupportedParameters: [],
30180
30921
  status: "candidate",
30922
+ undeclaredToolCalls: {
30923
+ value: true,
30924
+ source: "live-probe",
30925
+ sourceRef: "scripts/probe-fork-undeclared-tool.ts (WS-24), run live 2026-09-26: A -- a call to a tool absent from `tools` and its result in the history -> 200; B -- a ToolSearch result carrying the definition as text -> the model called the undeclared tool; C -- that call and its result fed back -> 200",
30926
+ confidence: "verified",
30927
+ observedAt: "2026-09-26T00:00:00Z"
30928
+ },
30181
30929
  canonicalModelId: "deepseek-flash",
30182
30930
  modelFamily: "deepseek"
30183
30931
  },
@@ -51159,6 +51907,13 @@ var catalog_default = {
51159
51907
  },
51160
51908
  unsupportedParameters: [],
51161
51909
  status: "candidate",
51910
+ promptCacheKey: {
51911
+ value: true,
51912
+ source: "official-doc",
51913
+ confidence: "declared",
51914
+ observedAt: "2026-09-25T19:30:00Z",
51915
+ 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".'
51916
+ },
51162
51917
  canonicalModelId: "gpt-4.1",
51163
51918
  modelFamily: "gpt"
51164
51919
  },
@@ -51239,6 +51994,13 @@ var catalog_default = {
51239
51994
  },
51240
51995
  unsupportedParameters: [],
51241
51996
  status: "candidate",
51997
+ promptCacheKey: {
51998
+ value: true,
51999
+ source: "official-doc",
52000
+ confidence: "declared",
52001
+ observedAt: "2026-09-25T19:30:00Z",
52002
+ 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".'
52003
+ },
51242
52004
  canonicalModelId: "gpt-4.1-mini",
51243
52005
  modelFamily: "gpt"
51244
52006
  },
@@ -51326,6 +52088,13 @@ var catalog_default = {
51326
52088
  },
51327
52089
  unsupportedParameters: [],
51328
52090
  status: "candidate",
52091
+ promptCacheKey: {
52092
+ value: true,
52093
+ source: "official-doc",
52094
+ confidence: "declared",
52095
+ observedAt: "2026-09-25T19:30:00Z",
52096
+ 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".'
52097
+ },
51329
52098
  canonicalModelId: "gpt-4.1-nano",
51330
52099
  modelFamily: "gpt"
51331
52100
  },
@@ -51406,6 +52175,13 @@ var catalog_default = {
51406
52175
  },
51407
52176
  unsupportedParameters: [],
51408
52177
  status: "candidate",
52178
+ promptCacheKey: {
52179
+ value: true,
52180
+ source: "official-doc",
52181
+ confidence: "declared",
52182
+ observedAt: "2026-09-25T19:30:00Z",
52183
+ 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".'
52184
+ },
51409
52185
  canonicalModelId: "gpt-4o",
51410
52186
  modelFamily: "gpt"
51411
52187
  },
@@ -51486,6 +52262,13 @@ var catalog_default = {
51486
52262
  },
51487
52263
  unsupportedParameters: [],
51488
52264
  status: "candidate",
52265
+ promptCacheKey: {
52266
+ value: true,
52267
+ source: "official-doc",
52268
+ confidence: "declared",
52269
+ observedAt: "2026-09-25T19:30:00Z",
52270
+ 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".'
52271
+ },
51489
52272
  canonicalModelId: "gpt-4o-2024-11-20",
51490
52273
  modelFamily: "gpt"
51491
52274
  },
@@ -51566,6 +52349,13 @@ var catalog_default = {
51566
52349
  },
51567
52350
  unsupportedParameters: [],
51568
52351
  status: "candidate",
52352
+ promptCacheKey: {
52353
+ value: true,
52354
+ source: "official-doc",
52355
+ confidence: "declared",
52356
+ observedAt: "2026-09-25T19:30:00Z",
52357
+ 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".'
52358
+ },
51569
52359
  canonicalModelId: "gpt-4o-mini",
51570
52360
  modelFamily: "gpt"
51571
52361
  },
@@ -51671,6 +52461,34 @@ var catalog_default = {
51671
52461
  },
51672
52462
  unsupportedParameters: [],
51673
52463
  status: "candidate",
52464
+ promptCacheKey: {
52465
+ value: true,
52466
+ source: "official-doc",
52467
+ confidence: "declared",
52468
+ observedAt: "2026-09-25T19:30:00Z",
52469
+ 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".'
52470
+ },
52471
+ clientToolSearch: {
52472
+ value: true,
52473
+ source: "official-doc",
52474
+ confidence: "declared",
52475
+ observedAt: "2026-09-26T00:00:00Z",
52476
+ 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.'
52477
+ },
52478
+ additionalToolsItem: {
52479
+ value: true,
52480
+ source: "official-doc",
52481
+ confidence: "declared",
52482
+ observedAt: "2026-09-26T00:00:00Z",
52483
+ 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.'
52484
+ },
52485
+ allowedToolsChoice: {
52486
+ value: true,
52487
+ source: "official-doc",
52488
+ confidence: "declared",
52489
+ observedAt: "2026-09-26T00:00:00Z",
52490
+ 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.'
52491
+ },
51674
52492
  canonicalModelId: "gpt-5.4",
51675
52493
  modelFamily: "gpt"
51676
52494
  },
@@ -51783,6 +52601,34 @@ var catalog_default = {
51783
52601
  },
51784
52602
  unsupportedParameters: [],
51785
52603
  status: "candidate",
52604
+ promptCacheKey: {
52605
+ value: true,
52606
+ source: "official-doc",
52607
+ confidence: "declared",
52608
+ observedAt: "2026-09-25T19:30:00Z",
52609
+ 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".'
52610
+ },
52611
+ clientToolSearch: {
52612
+ value: true,
52613
+ source: "official-doc",
52614
+ confidence: "declared",
52615
+ observedAt: "2026-09-26T00:00:00Z",
52616
+ 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.'
52617
+ },
52618
+ additionalToolsItem: {
52619
+ value: true,
52620
+ source: "official-doc",
52621
+ confidence: "declared",
52622
+ observedAt: "2026-09-26T00:00:00Z",
52623
+ 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.'
52624
+ },
52625
+ allowedToolsChoice: {
52626
+ value: true,
52627
+ source: "official-doc",
52628
+ confidence: "declared",
52629
+ observedAt: "2026-09-26T00:00:00Z",
52630
+ 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.'
52631
+ },
51786
52632
  canonicalModelId: "gpt-5.4-mini",
51787
52633
  modelFamily: "gpt"
51788
52634
  },
@@ -51895,6 +52741,34 @@ var catalog_default = {
51895
52741
  },
51896
52742
  unsupportedParameters: [],
51897
52743
  status: "candidate",
52744
+ promptCacheKey: {
52745
+ value: true,
52746
+ source: "official-doc",
52747
+ confidence: "declared",
52748
+ observedAt: "2026-09-25T19:30:00Z",
52749
+ 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".'
52750
+ },
52751
+ clientToolSearch: {
52752
+ value: true,
52753
+ source: "official-doc",
52754
+ confidence: "declared",
52755
+ observedAt: "2026-09-26T00:00:00Z",
52756
+ 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.'
52757
+ },
52758
+ additionalToolsItem: {
52759
+ value: true,
52760
+ source: "official-doc",
52761
+ confidence: "declared",
52762
+ observedAt: "2026-09-26T00:00:00Z",
52763
+ 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.'
52764
+ },
52765
+ allowedToolsChoice: {
52766
+ value: true,
52767
+ source: "official-doc",
52768
+ confidence: "declared",
52769
+ observedAt: "2026-09-26T00:00:00Z",
52770
+ 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.'
52771
+ },
51898
52772
  canonicalModelId: "gpt-5.4-nano",
51899
52773
  modelFamily: "gpt"
51900
52774
  },
@@ -51982,6 +52856,34 @@ var catalog_default = {
51982
52856
  },
51983
52857
  unsupportedParameters: [],
51984
52858
  status: "candidate",
52859
+ promptCacheKey: {
52860
+ value: true,
52861
+ source: "official-doc",
52862
+ confidence: "declared",
52863
+ observedAt: "2026-09-25T19:30:00Z",
52864
+ 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".'
52865
+ },
52866
+ clientToolSearch: {
52867
+ value: true,
52868
+ source: "official-doc",
52869
+ confidence: "declared",
52870
+ observedAt: "2026-09-26T00:00:00Z",
52871
+ 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.'
52872
+ },
52873
+ additionalToolsItem: {
52874
+ value: true,
52875
+ source: "official-doc",
52876
+ confidence: "declared",
52877
+ observedAt: "2026-09-26T00:00:00Z",
52878
+ 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.'
52879
+ },
52880
+ allowedToolsChoice: {
52881
+ value: true,
52882
+ source: "official-doc",
52883
+ confidence: "declared",
52884
+ observedAt: "2026-09-26T00:00:00Z",
52885
+ 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.'
52886
+ },
51985
52887
  canonicalModelId: "gpt-5.4-pro",
51986
52888
  modelFamily: "gpt"
51987
52889
  },
@@ -52087,6 +52989,34 @@ var catalog_default = {
52087
52989
  },
52088
52990
  unsupportedParameters: [],
52089
52991
  status: "candidate",
52992
+ promptCacheKey: {
52993
+ value: true,
52994
+ source: "official-doc",
52995
+ confidence: "declared",
52996
+ observedAt: "2026-09-25T19:30:00Z",
52997
+ 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".'
52998
+ },
52999
+ clientToolSearch: {
53000
+ value: true,
53001
+ source: "official-doc",
53002
+ confidence: "declared",
53003
+ observedAt: "2026-09-26T00:00:00Z",
53004
+ 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.'
53005
+ },
53006
+ additionalToolsItem: {
53007
+ value: true,
53008
+ source: "official-doc",
53009
+ confidence: "declared",
53010
+ observedAt: "2026-09-26T00:00:00Z",
53011
+ 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.'
53012
+ },
53013
+ allowedToolsChoice: {
53014
+ value: true,
53015
+ source: "official-doc",
53016
+ confidence: "declared",
53017
+ observedAt: "2026-09-26T00:00:00Z",
53018
+ 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.'
53019
+ },
52090
53020
  canonicalModelId: "gpt-5.5",
52091
53021
  modelFamily: "gpt"
52092
53022
  },
@@ -52181,6 +53111,34 @@ var catalog_default = {
52181
53111
  },
52182
53112
  unsupportedParameters: [],
52183
53113
  status: "candidate",
53114
+ promptCacheKey: {
53115
+ value: true,
53116
+ source: "official-doc",
53117
+ confidence: "declared",
53118
+ observedAt: "2026-09-25T19:30:00Z",
53119
+ 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".'
53120
+ },
53121
+ clientToolSearch: {
53122
+ value: true,
53123
+ source: "official-doc",
53124
+ confidence: "declared",
53125
+ observedAt: "2026-09-26T00:00:00Z",
53126
+ 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.'
53127
+ },
53128
+ additionalToolsItem: {
53129
+ value: true,
53130
+ source: "official-doc",
53131
+ confidence: "declared",
53132
+ observedAt: "2026-09-26T00:00:00Z",
53133
+ 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.'
53134
+ },
53135
+ allowedToolsChoice: {
53136
+ value: true,
53137
+ source: "official-doc",
53138
+ confidence: "declared",
53139
+ observedAt: "2026-09-26T00:00:00Z",
53140
+ 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.'
53141
+ },
52184
53142
  canonicalModelId: "gpt-5.5-pro",
52185
53143
  modelFamily: "gpt"
52186
53144
  },
@@ -52295,6 +53253,34 @@ var catalog_default = {
52295
53253
  },
52296
53254
  unsupportedParameters: [],
52297
53255
  status: "candidate",
53256
+ promptCacheKey: {
53257
+ value: true,
53258
+ source: "official-doc",
53259
+ confidence: "declared",
53260
+ observedAt: "2026-09-25T19:30:00Z",
53261
+ 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".'
53262
+ },
53263
+ clientToolSearch: {
53264
+ value: true,
53265
+ source: "official-doc",
53266
+ confidence: "declared",
53267
+ observedAt: "2026-09-26T00:00:00Z",
53268
+ 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.'
53269
+ },
53270
+ additionalToolsItem: {
53271
+ value: true,
53272
+ source: "official-doc",
53273
+ confidence: "declared",
53274
+ observedAt: "2026-09-26T00:00:00Z",
53275
+ 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.'
53276
+ },
53277
+ allowedToolsChoice: {
53278
+ value: true,
53279
+ source: "official-doc",
53280
+ confidence: "declared",
53281
+ observedAt: "2026-09-26T00:00:00Z",
53282
+ 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.'
53283
+ },
52298
53284
  canonicalModelId: "gpt-5.6",
52299
53285
  modelFamily: "gpt"
52300
53286
  },
@@ -52409,6 +53395,34 @@ var catalog_default = {
52409
53395
  },
52410
53396
  unsupportedParameters: [],
52411
53397
  status: "candidate",
53398
+ promptCacheKey: {
53399
+ value: true,
53400
+ source: "official-doc",
53401
+ confidence: "declared",
53402
+ observedAt: "2026-09-25T19:30:00Z",
53403
+ 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".'
53404
+ },
53405
+ clientToolSearch: {
53406
+ value: true,
53407
+ source: "official-doc",
53408
+ confidence: "declared",
53409
+ observedAt: "2026-09-26T00:00:00Z",
53410
+ 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.'
53411
+ },
53412
+ additionalToolsItem: {
53413
+ value: true,
53414
+ source: "official-doc",
53415
+ confidence: "declared",
53416
+ observedAt: "2026-09-26T00:00:00Z",
53417
+ 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.'
53418
+ },
53419
+ allowedToolsChoice: {
53420
+ value: true,
53421
+ source: "official-doc",
53422
+ confidence: "declared",
53423
+ observedAt: "2026-09-26T00:00:00Z",
53424
+ 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.'
53425
+ },
52412
53426
  canonicalModelId: "gpt-5.6-luna",
52413
53427
  modelFamily: "gpt"
52414
53428
  },
@@ -52523,6 +53537,34 @@ var catalog_default = {
52523
53537
  },
52524
53538
  unsupportedParameters: [],
52525
53539
  status: "candidate",
53540
+ promptCacheKey: {
53541
+ value: true,
53542
+ source: "official-doc",
53543
+ confidence: "declared",
53544
+ observedAt: "2026-09-25T19:30:00Z",
53545
+ 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".'
53546
+ },
53547
+ clientToolSearch: {
53548
+ value: true,
53549
+ source: "official-doc",
53550
+ confidence: "declared",
53551
+ observedAt: "2026-09-26T00:00:00Z",
53552
+ 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.'
53553
+ },
53554
+ additionalToolsItem: {
53555
+ value: true,
53556
+ source: "official-doc",
53557
+ confidence: "declared",
53558
+ observedAt: "2026-09-26T00:00:00Z",
53559
+ 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.'
53560
+ },
53561
+ allowedToolsChoice: {
53562
+ value: true,
53563
+ source: "official-doc",
53564
+ confidence: "declared",
53565
+ observedAt: "2026-09-26T00:00:00Z",
53566
+ 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.'
53567
+ },
52526
53568
  canonicalModelId: "gpt-5.6-sol",
52527
53569
  modelFamily: "gpt"
52528
53570
  },
@@ -52637,6 +53679,34 @@ var catalog_default = {
52637
53679
  },
52638
53680
  unsupportedParameters: [],
52639
53681
  status: "candidate",
53682
+ promptCacheKey: {
53683
+ value: true,
53684
+ source: "official-doc",
53685
+ confidence: "declared",
53686
+ observedAt: "2026-09-25T19:30:00Z",
53687
+ 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".'
53688
+ },
53689
+ clientToolSearch: {
53690
+ value: true,
53691
+ source: "official-doc",
53692
+ confidence: "declared",
53693
+ observedAt: "2026-09-26T00:00:00Z",
53694
+ 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.'
53695
+ },
53696
+ additionalToolsItem: {
53697
+ value: true,
53698
+ source: "official-doc",
53699
+ confidence: "declared",
53700
+ observedAt: "2026-09-26T00:00:00Z",
53701
+ 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.'
53702
+ },
53703
+ allowedToolsChoice: {
53704
+ value: true,
53705
+ source: "official-doc",
53706
+ confidence: "declared",
53707
+ observedAt: "2026-09-26T00:00:00Z",
53708
+ 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.'
53709
+ },
52640
53710
  canonicalModelId: "gpt-5.6-terra",
52641
53711
  modelFamily: "gpt"
52642
53712
  },
@@ -52771,6 +53841,15 @@ var catalog_default = {
52771
53841
  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
53842
  confidence: "declared",
52773
53843
  observedAt: "2026-09-06T00:00:00Z"
53844
+ },
53845
+ perMessageEffort: {
53846
+ value: {
53847
+ item: "configuration_update"
53848
+ },
53849
+ source: "official-doc",
53850
+ confidence: "declared",
53851
+ observedAt: "2026-09-26T00:00:00Z",
53852
+ 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
53853
  }
52775
53854
  },
52776
53855
  pricing: {
@@ -52787,6 +53866,34 @@ var catalog_default = {
52787
53866
  },
52788
53867
  unsupportedParameters: [],
52789
53868
  status: "candidate",
53869
+ promptCacheKey: {
53870
+ value: true,
53871
+ source: "official-doc",
53872
+ confidence: "declared",
53873
+ observedAt: "2026-09-25T19:30:00Z",
53874
+ 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".'
53875
+ },
53876
+ clientToolSearch: {
53877
+ value: true,
53878
+ source: "official-doc",
53879
+ confidence: "declared",
53880
+ observedAt: "2026-09-26T00:00:00Z",
53881
+ 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.'
53882
+ },
53883
+ additionalToolsItem: {
53884
+ value: true,
53885
+ source: "official-doc",
53886
+ confidence: "declared",
53887
+ observedAt: "2026-09-26T00:00:00Z",
53888
+ 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.'
53889
+ },
53890
+ allowedToolsChoice: {
53891
+ value: true,
53892
+ source: "official-doc",
53893
+ confidence: "declared",
53894
+ observedAt: "2026-09-26T00:00:00Z",
53895
+ 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.'
53896
+ },
52790
53897
  canonicalModelId: "gpt-6-astra",
52791
53898
  modelFamily: "gpt"
52792
53899
  },
@@ -52922,6 +54029,15 @@ var catalog_default = {
52922
54029
  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
54030
  confidence: "declared",
52924
54031
  observedAt: "2026-09-06T00:00:00Z"
54032
+ },
54033
+ perMessageEffort: {
54034
+ value: {
54035
+ item: "configuration_update"
54036
+ },
54037
+ source: "official-doc",
54038
+ confidence: "declared",
54039
+ observedAt: "2026-09-26T00:00:00Z",
54040
+ 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
54041
  }
52926
54042
  },
52927
54043
  pricing: {
@@ -52938,6 +54054,34 @@ var catalog_default = {
52938
54054
  },
52939
54055
  unsupportedParameters: [],
52940
54056
  status: "candidate",
54057
+ promptCacheKey: {
54058
+ value: true,
54059
+ source: "official-doc",
54060
+ confidence: "declared",
54061
+ observedAt: "2026-09-25T19:30:00Z",
54062
+ 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".'
54063
+ },
54064
+ clientToolSearch: {
54065
+ value: true,
54066
+ source: "official-doc",
54067
+ confidence: "declared",
54068
+ observedAt: "2026-09-26T00:00:00Z",
54069
+ 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.'
54070
+ },
54071
+ additionalToolsItem: {
54072
+ value: true,
54073
+ source: "official-doc",
54074
+ confidence: "declared",
54075
+ observedAt: "2026-09-26T00:00:00Z",
54076
+ 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.'
54077
+ },
54078
+ allowedToolsChoice: {
54079
+ value: true,
54080
+ source: "official-doc",
54081
+ confidence: "declared",
54082
+ observedAt: "2026-09-26T00:00:00Z",
54083
+ 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.'
54084
+ },
52941
54085
  canonicalModelId: "gpt-6-luna",
52942
54086
  modelFamily: "gpt"
52943
54087
  },
@@ -53073,6 +54217,15 @@ var catalog_default = {
53073
54217
  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
54218
  confidence: "declared",
53075
54219
  observedAt: "2026-09-06T00:00:00Z"
54220
+ },
54221
+ perMessageEffort: {
54222
+ value: {
54223
+ item: "configuration_update"
54224
+ },
54225
+ source: "official-doc",
54226
+ confidence: "declared",
54227
+ observedAt: "2026-09-26T00:00:00Z",
54228
+ 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
54229
  }
53077
54230
  },
53078
54231
  pricing: {
@@ -53089,6 +54242,34 @@ var catalog_default = {
53089
54242
  },
53090
54243
  unsupportedParameters: [],
53091
54244
  status: "candidate",
54245
+ promptCacheKey: {
54246
+ value: true,
54247
+ source: "official-doc",
54248
+ confidence: "declared",
54249
+ observedAt: "2026-09-25T19:30:00Z",
54250
+ 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".'
54251
+ },
54252
+ clientToolSearch: {
54253
+ value: true,
54254
+ source: "official-doc",
54255
+ confidence: "declared",
54256
+ observedAt: "2026-09-26T00:00:00Z",
54257
+ 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.'
54258
+ },
54259
+ additionalToolsItem: {
54260
+ value: true,
54261
+ source: "official-doc",
54262
+ confidence: "declared",
54263
+ observedAt: "2026-09-26T00:00:00Z",
54264
+ 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.'
54265
+ },
54266
+ allowedToolsChoice: {
54267
+ value: true,
54268
+ source: "official-doc",
54269
+ confidence: "declared",
54270
+ observedAt: "2026-09-26T00:00:00Z",
54271
+ 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.'
54272
+ },
53092
54273
  canonicalModelId: "gpt-6-sol",
53093
54274
  modelFamily: "gpt"
53094
54275
  },
@@ -53191,6 +54372,13 @@ var catalog_default = {
53191
54372
  },
53192
54373
  unsupportedParameters: [],
53193
54374
  status: "candidate",
54375
+ promptCacheKey: {
54376
+ value: true,
54377
+ source: "official-doc",
54378
+ confidence: "declared",
54379
+ observedAt: "2026-09-25T19:30:00Z",
54380
+ 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".'
54381
+ },
53194
54382
  canonicalModelId: "o3",
53195
54383
  modelFamily: "o-series"
53196
54384
  },
@@ -53285,6 +54473,13 @@ var catalog_default = {
53285
54473
  },
53286
54474
  unsupportedParameters: [],
53287
54475
  status: "candidate",
54476
+ promptCacheKey: {
54477
+ value: true,
54478
+ source: "official-doc",
54479
+ confidence: "declared",
54480
+ observedAt: "2026-09-25T19:30:00Z",
54481
+ 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".'
54482
+ },
53288
54483
  canonicalModelId: "o3-mini",
53289
54484
  modelFamily: "o-series"
53290
54485
  },
@@ -53432,6 +54627,13 @@ var catalog_default = {
53432
54627
  },
53433
54628
  unsupportedParameters: [],
53434
54629
  status: "candidate",
54630
+ promptCacheKey: {
54631
+ value: true,
54632
+ source: "official-doc",
54633
+ confidence: "declared",
54634
+ observedAt: "2026-09-25T19:30:00Z",
54635
+ 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".'
54636
+ },
53435
54637
  canonicalModelId: "o4-mini",
53436
54638
  modelFamily: "o-series"
53437
54639
  },
@@ -73702,7 +74904,8 @@ var catalog_default = {
73702
74904
  "grok-4.20-non-reasoning-gv2"
73703
74905
  ],
73704
74906
  endpoints: [
73705
- "chat"
74907
+ "chat",
74908
+ "responses"
73706
74909
  ],
73707
74910
  contextWindow: {
73708
74911
  value: 1e6,
@@ -73797,7 +75000,8 @@ var catalog_default = {
73797
75000
  "grok-4.20-reasoning-gv2"
73798
75001
  ],
73799
75002
  endpoints: [
73800
- "chat"
75003
+ "chat",
75004
+ "responses"
73801
75005
  ],
73802
75006
  contextWindow: {
73803
75007
  value: 1e6,
@@ -73862,7 +75066,7 @@ var catalog_default = {
73862
75066
  observedAt: "2026-09-25T08:40:00Z"
73863
75067
  },
73864
75068
  efforts: [],
73865
- continuation: "none"
75069
+ continuation: "opaque-provider-state"
73866
75070
  },
73867
75071
  pricing: {
73868
75072
  value: {
@@ -73880,6 +75084,111 @@ var catalog_default = {
73880
75084
  canonicalModelId: "grok-4.20-0309-reasoning",
73881
75085
  modelFamily: "grok"
73882
75086
  },
75087
+ {
75088
+ key: "xai/grok-4.20-multi-agent-0309",
75089
+ providerId: "xai",
75090
+ upstreamId: "grok-4.20-multi-agent-0309",
75091
+ displayName: "Grok 4.20 Multi-Agent Beta",
75092
+ aliases: [
75093
+ "grok-4.20-multi-agent",
75094
+ "grok-4.20-multi-agent-latest",
75095
+ "grok-4.20-multi-agent-beta-latest",
75096
+ "grok-4.20-multi-agent-experimental-beta-0304",
75097
+ "grok-4.20-multi-agent-experimental-beta-latest",
75098
+ "grok-4.20-multi-agent-beta-0309"
75099
+ ],
75100
+ endpoints: [
75101
+ "responses"
75102
+ ],
75103
+ contextWindow: {
75104
+ value: 1e6,
75105
+ source: "official-doc",
75106
+ sourceRef: "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page context window 1,000,000 tokens",
75107
+ confidence: "declared",
75108
+ observedAt: "2026-09-25T08:40:00Z"
75109
+ },
75110
+ inputModalities: {
75111
+ value: [
75112
+ "text",
75113
+ "image"
75114
+ ],
75115
+ source: "official-doc",
75116
+ sourceRef: "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page Modalities: Text, Image input",
75117
+ confidence: "declared",
75118
+ observedAt: "2026-09-25T08:40:00Z"
75119
+ },
75120
+ outputModalities: {
75121
+ value: [
75122
+ "text"
75123
+ ],
75124
+ source: "official-doc",
75125
+ sourceRef: "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page Modalities: Text output",
75126
+ confidence: "declared",
75127
+ observedAt: "2026-09-25T08:40:00Z"
75128
+ },
75129
+ toolCalling: {
75130
+ value: "none",
75131
+ source: "official-doc",
75132
+ 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",
75133
+ confidence: "declared",
75134
+ observedAt: "2026-09-25T08:40:00Z"
75135
+ },
75136
+ nativeTools: {
75137
+ value: false,
75138
+ source: "official-doc",
75139
+ sourceRef: "https://docs.x.ai/developers/model-capabilities/text/multi-agent — client-side/custom function tools unsupported",
75140
+ confidence: "declared",
75141
+ observedAt: "2026-09-25T08:40:00Z"
75142
+ },
75143
+ structuredOutput: {
75144
+ value: true,
75145
+ source: "official-doc",
75146
+ sourceRef: "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page Structured outputs capability",
75147
+ confidence: "declared",
75148
+ observedAt: "2026-09-25T08:40:00Z"
75149
+ },
75150
+ promptCaching: {
75151
+ value: true,
75152
+ source: "official-doc",
75153
+ sourceRef: "https://docs.x.ai/developers/models/grok-4.20-multi-agent-0309 — model page lists Cached tokens input rate; prompt caching available",
75154
+ confidence: "declared",
75155
+ observedAt: "2026-09-25T08:40:00Z"
75156
+ },
75157
+ reasoning: {
75158
+ supported: {
75159
+ value: true,
75160
+ source: "official-doc",
75161
+ 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",
75162
+ confidence: "declared",
75163
+ observedAt: "2026-09-25T08:40:00Z"
75164
+ },
75165
+ efforts: [
75166
+ "low",
75167
+ "medium",
75168
+ "high",
75169
+ "xhigh"
75170
+ ],
75171
+ continuation: "opaque-provider-state"
75172
+ },
75173
+ pricing: {
75174
+ value: {
75175
+ inputPerMTokUsd: 1.25,
75176
+ outputPerMTokUsd: 2.5,
75177
+ cacheReadPerMTokUsd: 0.2
75178
+ },
75179
+ source: "official-doc",
75180
+ 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).",
75181
+ confidence: "declared",
75182
+ observedAt: "2026-09-25T17:09:48Z"
75183
+ },
75184
+ unsupportedParameters: [
75185
+ "max_output_tokens",
75186
+ "tools"
75187
+ ],
75188
+ status: "candidate",
75189
+ canonicalModelId: "grok-4.20-multi-agent-0309",
75190
+ modelFamily: "grok"
75191
+ },
73883
75192
  {
73884
75193
  key: "xai/grok-4.3",
73885
75194
  providerId: "xai",
@@ -73889,7 +75198,8 @@ var catalog_default = {
73889
75198
  "grok-4.3-latest"
73890
75199
  ],
73891
75200
  endpoints: [
73892
- "chat"
75201
+ "chat",
75202
+ "responses"
73893
75203
  ],
73894
75204
  contextWindow: {
73895
75205
  value: 1e6,
@@ -73960,7 +75270,7 @@ var catalog_default = {
73960
75270
  "high",
73961
75271
  "xhigh"
73962
75272
  ],
73963
- continuation: "plaintext",
75273
+ continuation: "opaque-provider-state",
73964
75274
  defaultEffort: "low"
73965
75275
  },
73966
75276
  pricing: {
@@ -73989,7 +75299,8 @@ var catalog_default = {
73989
75299
  "grok-build-latest"
73990
75300
  ],
73991
75301
  endpoints: [
73992
- "chat"
75302
+ "chat",
75303
+ "responses"
73993
75304
  ],
73994
75305
  contextWindow: {
73995
75306
  value: 500000,
@@ -74058,7 +75369,7 @@ var catalog_default = {
74058
75369
  "medium",
74059
75370
  "high"
74060
75371
  ],
74061
- continuation: "plaintext",
75372
+ continuation: "opaque-provider-state",
74062
75373
  defaultEffort: "high"
74063
75374
  },
74064
75375
  pricing: {
@@ -74088,7 +75399,8 @@ var catalog_default = {
74088
75399
  displayName: "Grok 4.6",
74089
75400
  aliases: [],
74090
75401
  endpoints: [
74091
- "chat"
75402
+ "chat",
75403
+ "responses"
74092
75404
  ],
74093
75405
  contextWindow: {
74094
75406
  value: 500000,
@@ -74158,7 +75470,7 @@ var catalog_default = {
74158
75470
  "high",
74159
75471
  "xhigh"
74160
75472
  ],
74161
- continuation: "plaintext",
75473
+ continuation: "opaque-provider-state",
74162
75474
  defaultEffort: "high"
74163
75475
  },
74164
75476
  pricing: {
@@ -74188,7 +75500,8 @@ var catalog_default = {
74188
75500
  displayName: "Grok 4.7",
74189
75501
  aliases: [],
74190
75502
  endpoints: [
74191
- "chat"
75503
+ "chat",
75504
+ "responses"
74192
75505
  ],
74193
75506
  contextWindow: {
74194
75507
  value: 500000,
@@ -74258,8 +75571,29 @@ var catalog_default = {
74258
75571
  "high",
74259
75572
  "xhigh"
74260
75573
  ],
74261
- continuation: "plaintext",
74262
- defaultEffort: "high"
75574
+ continuation: "opaque-provider-state",
75575
+ defaultEffort: "high",
75576
+ readableState: {
75577
+ value: "summary",
75578
+ source: "official-doc",
75579
+ 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", … }]`',
75580
+ confidence: "declared",
75581
+ observedAt: "2026-09-25T17:09:48Z"
75582
+ },
75583
+ summaryRequest: {
75584
+ value: {
75585
+ field: "reasoning.summary",
75586
+ values: [
75587
+ "detailed",
75588
+ "auto",
75589
+ "concise"
75590
+ ]
75591
+ },
75592
+ source: "official-doc",
75593
+ 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',
75594
+ confidence: "declared",
75595
+ observedAt: "2026-09-25T17:09:48Z"
75596
+ }
74263
75597
  },
74264
75598
  pricing: {
74265
75599
  value: {
@@ -74292,7 +75626,8 @@ var catalog_default = {
74292
75626
  "grok-code-fast-1-0825"
74293
75627
  ],
74294
75628
  endpoints: [
74295
- "chat"
75629
+ "chat",
75630
+ "responses"
74296
75631
  ],
74297
75632
  contextWindow: {
74298
75633
  value: 256000,
@@ -74357,7 +75692,7 @@ var catalog_default = {
74357
75692
  observedAt: "2026-09-25T08:40:00Z"
74358
75693
  },
74359
75694
  efforts: [],
74360
- continuation: "none"
75695
+ continuation: "opaque-provider-state"
74361
75696
  },
74362
75697
  pricing: {
74363
75698
  value: {