fix(formats): preserve Responses namespace tools through Chat

This commit is contained in:
ZheFox
2026-08-26 00:43:50 +08:00
parent ffca7e0402
commit e2b003af24
9 changed files with 2586 additions and 99 deletions
+6 -6
View File
@@ -384,7 +384,7 @@ Statuses used in this matrix: `native`, `mapped`, `mapped/lossy-blocked`, `exten
| OpenAI | `CreateResponse` | `temperature` | 否 | `number \| null` | openai:responses standard | native | mapped | mapped | Responses request field maps provider-specifically; target-incompatible cases fail closed |
| OpenAI | `CreateResponse` | `text` | 否 | `ResponseTextParam` | openai:responses standard | native | mapped | mapped | text.format and text.verbosity map provider-specifically |
| OpenAI | `CreateResponse` | `tool_choice` | 否 | `ToolChoiceParam` | openai:responses standard | native | mapped | mapped | tool choice enum/name style maps provider-specifically |
| OpenAI | `CreateResponse` | `tools` | 否 | `ToolsArray` | openai:responses standard | native | mapped | mapped | function tools map; custom/built-in tools fail closed unless target supports equivalent |
| OpenAI | `CreateResponse` | `tools` | 否 | `ToolsArray` | openai:responses standard | native | mapped | mapped | function tools map; function-only namespaces expand to reversible Chat aliases with child description/schema/strict preserved; ambiguous or unsupported namespace/custom/built-in tools fail closed unless the target supports an equivalent |
| OpenAI | `CreateResponse` | `top_logprobs` | 否 | `integer \| null` | openai:responses standard | native | mapped | mapped | Responses request field maps provider-specifically; target-incompatible cases fail closed |
| OpenAI | `CreateResponse` | `top_p` | 否 | `number \| null` | openai:responses standard | native | mapped | mapped | Responses request field maps provider-specifically; target-incompatible cases fail closed |
| OpenAI | `CreateResponse` | `truncation` | 否 | `string \| null` | openai:responses standard | native | extension-preserved | lossy-blocked | Responses-only field has no audited lossless Chat/Claude/Gemini target equivalent |
@@ -528,7 +528,7 @@ Statuses used in this matrix: `native`, `mapped`, `mapped/lossy-blocked`, `exten
| OpenAI | `FunctionToolCall` | `call_id` | 是 | `string` | openai:responses standard | native | extension-preserved | lossy-blocked | nested Responses field is preserved same-format; cross-format requires explicit parent mapping or fails closed |
| OpenAI | `FunctionToolCall` | `id` | 否 | `string` | openai:responses standard | native | extension-preserved | lossy-blocked | nested Responses field is preserved same-format; cross-format requires explicit parent mapping or fails closed |
| OpenAI | `FunctionToolCall` | `name` | 是 | `string` | openai:responses standard | native | extension-preserved | lossy-blocked | nested Responses field is preserved same-format; cross-format requires explicit parent mapping or fails closed |
| OpenAI | `FunctionToolCall` | `namespace` | 否 | `string` | openai:responses standard | native | extension-preserved | lossy-blocked | nested Responses field is preserved same-format; cross-format requires explicit parent mapping or fails closed |
| OpenAI | `FunctionToolCall` | `namespace` | 否 | `string` | openai:responses standard | native | extension-preserved | mapped | Responses→Chat history and Chat→Responses sync/stream responses use the reversible alias derived from the original namespace definition; missing, ambiguous, or unsupported mappings fail closed |
| OpenAI | `FunctionToolCall` | `status` | 否 | `string` | openai:responses standard | native | extension-preserved | lossy-blocked | nested Responses field is preserved same-format; cross-format requires explicit parent mapping or fails closed |
| OpenAI | `FunctionToolCall` | `type` | 是 | `string` | openai:responses standard | native | extension-preserved | lossy-blocked | nested Responses field is preserved same-format; cross-format requires explicit parent mapping or fails closed |
| OpenAI | `FunctionToolCallOutput` | `call_id` | 是 | `string` | openai:responses standard | native | extension-preserved | lossy-blocked | nested Responses field is preserved same-format; cross-format requires explicit parent mapping or fails closed |
@@ -752,10 +752,10 @@ Statuses used in this matrix: `native`, `mapped`, `mapped/lossy-blocked`, `exten
| OpenAI | `MoveParam` | `type` | 是 | `string` | openai auxiliary / not-in-conversion-surface | native | not-in-conversion-surface | not-in-conversion-surface | not part of current canonical cross-format conversion; same-format runtime path remains provider-native when routed directly |
| OpenAI | `MoveParam` | `x` | 是 | `integer` | openai auxiliary / not-in-conversion-surface | native | not-in-conversion-surface | not-in-conversion-surface | not part of current canonical cross-format conversion; same-format runtime path remains provider-native when routed directly |
| OpenAI | `MoveParam` | `y` | 是 | `integer` | openai auxiliary / not-in-conversion-surface | native | not-in-conversion-surface | not-in-conversion-surface | not part of current canonical cross-format conversion; same-format runtime path remains provider-native when routed directly |
| OpenAI | `NamespaceToolParam` | `description` | 是 | `string` | openai auxiliary / not-in-conversion-surface | native | not-in-conversion-surface | not-in-conversion-surface | not part of current canonical cross-format conversion; same-format runtime path remains provider-native when routed directly |
| OpenAI | `NamespaceToolParam` | `name` | 是 | `string` | openai auxiliary / not-in-conversion-surface | native | not-in-conversion-surface | not-in-conversion-surface | not part of current canonical cross-format conversion; same-format runtime path remains provider-native when routed directly |
| OpenAI | `NamespaceToolParam` | `tools` | 是 | `array<FunctionToolParam \| CustomToolParam>` | openai auxiliary / not-in-conversion-surface | native | not-in-conversion-surface | not-in-conversion-surface | not part of current canonical cross-format conversion; same-format runtime path remains provider-native when routed directly |
| OpenAI | `NamespaceToolParam` | `type` | 是 | `string` | openai auxiliary / not-in-conversion-surface | native | not-in-conversion-surface | not-in-conversion-surface | not part of current canonical cross-format conversion; same-format runtime path remains provider-native when routed directly |
| OpenAI | `NamespaceToolParam` | `description` | 是 | `string` | openai:responses standard | native | extension-preserved | mapped/lossy-blocked | Responses→Chat expands function-only namespaces into reversible aliases and preserves each child definition; unsupported children or unknown fields fail closed |
| OpenAI | `NamespaceToolParam` | `name` | 是 | `string` | openai:responses standard | native | extension-preserved | mapped/lossy-blocked | namespace identity is retained in the request alias map and restored on sync/stream Responses function calls; missing or ambiguous mappings fail closed |
| OpenAI | `NamespaceToolParam` | `tools` | 是 | `array<FunctionToolParam \| CustomToolParam>` | openai:responses standard | native | extension-preserved | mapped/lossy-blocked | function children expand to Chat function definitions with description/schema/strict preserved; custom children and unrepresentable fields fail closed |
| OpenAI | `NamespaceToolParam` | `type` | 是 | `string` | openai:responses standard | native | extension-preserved | mapped/lossy-blocked | namespace containers map only through the audited reversible Responses→Chat adapter; other cross-format targets fail closed |
| OpenAI | `OutputMessage` | `content` | 是 | `array<OutputMessageContent>` | openai:responses standard | native | extension-preserved | lossy-blocked | nested Responses field is preserved same-format; cross-format requires explicit parent mapping or fails closed |
| OpenAI | `OutputMessage` | `id` | 是 | `string` | openai:responses standard | native | extension-preserved | lossy-blocked | nested Responses field is preserved same-format; cross-format requires explicit parent mapping or fails closed |
| OpenAI | `OutputMessage` | `phase` | 否 | `MessagePhase \| null` | openai:responses standard | native | extension-preserved | lossy-blocked | nested Responses field is preserved same-format; cross-format requires explicit parent mapping or fails closed |