@bastani/pi-ai 0.9.38-alpha.6 → 0.9.38-alpha.8

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.
Files changed (43) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +5 -5
  3. package/dist/api/anthropic-messages.d.ts.map +1 -1
  4. package/dist/api/anthropic-messages.js +32 -23
  5. package/dist/api/anthropic-messages.js.map +1 -1
  6. package/dist/api/bedrock-converse-stream.js +14 -16
  7. package/dist/api/bedrock-converse-stream.js.map +1 -1
  8. package/dist/api/google-shared.js +1 -1
  9. package/dist/api/google-shared.js.map +1 -1
  10. package/dist/api/openai-codex-responses.d.ts +1 -0
  11. package/dist/api/openai-codex-responses.d.ts.map +1 -1
  12. package/dist/api/openai-codex-responses.js +2 -1
  13. package/dist/api/openai-codex-responses.js.map +1 -1
  14. package/dist/api/openai-completions.js +1 -1
  15. package/dist/api/openai-completions.js.map +1 -1
  16. package/dist/api/openai-responses-shared.js +1 -1
  17. package/dist/api/openai-responses-shared.js.map +1 -1
  18. package/dist/api/transform-messages.d.ts +16 -1
  19. package/dist/api/transform-messages.d.ts.map +1 -1
  20. package/dist/api/transform-messages.js +28 -15
  21. package/dist/api/transform-messages.js.map +1 -1
  22. package/dist/index.d.ts +1 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/providers/compat-schema.d.ts +156 -0
  27. package/dist/providers/compat-schema.d.ts.map +1 -1
  28. package/dist/providers/compat-schema.js +4 -2
  29. package/dist/providers/compat-schema.js.map +1 -1
  30. package/dist/providers/data/.manifest.json +1 -1
  31. package/dist/providers/data/anthropic.json +1 -1
  32. package/dist/providers/data/opencode.json +1 -1
  33. package/dist/providers/data/openrouter.json +1 -1
  34. package/dist/providers/data/radius.json +1 -1
  35. package/dist/providers/data/together.json +1 -1
  36. package/dist/providers/data/vercel-ai-gateway.json +1 -1
  37. package/dist/providers/model-schema.d.ts.map +1 -1
  38. package/dist/providers/model-schema.js +4 -2
  39. package/dist/providers/model-schema.js.map +1 -1
  40. package/dist/utils/retry.d.ts.map +1 -1
  41. package/dist/utils/retry.js +7 -1
  42. package/dist/utils/retry.js.map +1 -1
  43. package/package.json +2 -2
@@ -43,7 +43,7 @@ function convertToolResultOutput(model, content) {
43
43
  .map((c) => c.text)
44
44
  .join("\n");
45
45
  const images = content.filter((c) => c.type === "image");
46
- const hasText = textResult.length > 0;
46
+ const hasText = textResult.trim().length > 0;
47
47
  if (images.length === 0 || !model.input.includes("image")) {
48
48
  return sanitizeSurrogates(hasText ? textResult : images.length > 0 ? "(see attached image)" : "(no tool output)");
49
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"openai-responses-shared.js","sourceRoot":"","sources":["../../src/api/openai-responses-shared.ts"],"names":[],"mappings":"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","sourcesContent":["import type OpenAI from \"openai\";\nimport type {\n\tTool as OpenAITool,\n\tResponseConfigurationUpdateItemParam,\n\tResponseCreateParamsStreaming,\n\tResponseInput,\n\tResponseInputContent,\n\tResponseInputImage,\n\tResponseInputItem,\n\tResponseInputText,\n\tResponseOutputItem,\n\tResponseOutputMessage,\n\tResponseReasoningItem,\n\tResponseStreamEvent,\n\tResponseToolSearchOutputItemParam,\n} from \"openai/resources/responses/responses.js\";\nimport { calculateCost, getServiceTierCost } from \"../models.ts\";\nimport { normalizeProviderId } from \"../provider-id.ts\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tImageContent,\n\tModel,\n\tModelServiceTierId,\n\tStopReason,\n\tStreamOptions,\n\tSystemMessage,\n\tTextContent,\n\tTextSignatureV1,\n\tThinkingContent,\n\tTool,\n\tToolCall,\n\tTranscriptContext,\n\tUsage,\n} from \"../types.ts\";\nimport { appendAssistantMessageDiagnostic } from \"../utils/diagnostics.ts\";\nimport { normalizeProviderError } from \"../utils/error-body.ts\";\nimport type { AssistantMessageEventStream } from \"../utils/event-stream.ts\";\nimport { shortHash } from \"../utils/hash.ts\";\nimport { parseStreamingJson, parseToolCallArguments } from \"../utils/json-parse.ts\";\nimport { sanitizeSurrogates } from \"../utils/sanitize-unicode.ts\";\nimport { getSystemMessageText, renderSystemMessageUpdate } from \"../utils/text.ts\";\nimport { resolveTranscript, resolveTranscriptTools } from \"../utils/transcript.ts\";\nimport {\n\tappendGrammarToolInputJsonDelta,\n\ttype GrammarToolInputJsonBuffer,\n\tgetGrammarToolInput,\n\tgetJsonSchemaToolParameters,\n\tresolveGrammarConstrainedSampling,\n\tresolveJsonSchemaStrictSampling,\n} from \"./constrained-sampling.ts\";\nimport { transformMessages } from \"./transform-messages.ts\";\n\n// =============================================================================\n// Utilities\n// =============================================================================\n\nfunction encodeTextSignatureV1(id: string, phase?: TextSignatureV1[\"phase\"]): string {\n\tconst payload: TextSignatureV1 = { v: 1, id };\n\tif (phase) payload.phase = phase;\n\treturn JSON.stringify(payload);\n}\n\nfunction parseTextSignature(\n\tsignature: string | undefined,\n): { id: string; phase?: TextSignatureV1[\"phase\"] } | undefined {\n\tif (!signature) return undefined;\n\tif (signature.startsWith(\"{\")) {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(signature) as Partial<TextSignatureV1>;\n\t\t\tif (parsed.v === 1 && typeof parsed.id === \"string\") {\n\t\t\t\tif (parsed.phase === \"commentary\" || parsed.phase === \"final_answer\") {\n\t\t\t\t\treturn { id: parsed.id, phase: parsed.phase };\n\t\t\t\t}\n\t\t\t\treturn { id: parsed.id };\n\t\t\t}\n\t\t} catch {\n\t\t\t// Fall through to legacy plain-string handling.\n\t\t}\n\t}\n\treturn { id: signature };\n}\n\ntype ToolResultOutputContent = Array<ResponseInputText | ResponseInputImage>;\n\nfunction convertToolResultOutput<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontent: readonly (TextContent | ImageContent)[],\n): string | ToolResultOutputContent {\n\tconst textResult = content\n\t\t.filter((c): c is TextContent => c.type === \"text\")\n\t\t.map((c) => c.text)\n\t\t.join(\"\\n\");\n\tconst images = content.filter((c): c is ImageContent => c.type === \"image\");\n\tconst hasText = textResult.length > 0;\n\n\tif (images.length === 0 || !model.input.includes(\"image\")) {\n\t\treturn sanitizeSurrogates(hasText ? textResult : images.length > 0 ? \"(see attached image)\" : \"(no tool output)\");\n\t}\n\n\tconst output: ToolResultOutputContent = [];\n\tif (hasText) {\n\t\toutput.push({ type: \"input_text\", text: sanitizeSurrogates(textResult) });\n\t}\n\tfor (const image of images) {\n\t\toutput.push({\n\t\t\ttype: \"input_image\",\n\t\t\tdetail: \"auto\",\n\t\t\timage_url: `data:${image.mimeType};base64,${image.data}`,\n\t\t});\n\t}\n\treturn output;\n}\n\n/**\n * The service tier this request should carry.\n *\n * The **presence** of `fastRoute` is the discriminator, and its declared tier is the value. Fast\n * versus normal is model identity, so a caller who wants a different tier selects the normal sibling\n * rather than downgrading the fast one; letting a per-request option win would let a model selected,\n * recorded, persisted, and billed as `-fast` route as an ordinary request — and, because the Codex\n * routing identity keys on the final payload's tier, silently drop `originator: codex_cli_rs` too.\n *\n * A route that declares **no** tier means *no tier*, not \"fall through to the caller\". A GitHub\n * Copilot fast variant is exactly that case: it sends its own advertised `-fast` model ID and must\n * carry no OpenAI service-tier field at all, whatever the caller asks for.\n *\n * A normal model has no route, so an explicit `serviceTier` still applies there exactly as it did\n * before fast variants existed.\n */\n/** Codex accepts an additional tier not yet represented by the OpenAI API SDK. */\nexport type ResponsesServiceTier = ResponseCreateParamsStreaming[\"service_tier\"] | \"ultrafast\";\n\nexport function resolveRequestedServiceTier(\n\tmodel: Pick<Model<Api>, \"fastRoute\">,\n\toptionsServiceTier: ResponsesServiceTier | undefined,\n): ResponsesServiceTier | undefined {\n\treturn model.fastRoute ? model.fastRoute.serviceTier : optionsServiceTier;\n}\n\nfunction advertisedServiceTierId(serviceTier: ResponsesServiceTier | undefined): ModelServiceTierId | undefined {\n\tif (serviceTier === \"priority\" || serviceTier === \"fast\") return \"priority\";\n\treturn serviceTier === \"ultrafast\" ? \"ultrafast\" : undefined;\n}\n\n/**\n * Whether the model offers a Fast or Ultrafast tier. A model without tier metadata keeps offering Fast\n * but never Ultrafast. Other tiers (`flex`, `default`, `auto`, `scale`) need no advertisement.\n */\nexport function supportsServiceTier(\n\tmodel: Pick<Model<Api>, \"serviceTiers\">,\n\tserviceTier: ResponsesServiceTier,\n): boolean {\n\tconst advertisedId = advertisedServiceTierId(serviceTier);\n\tif (advertisedId === undefined) return true;\n\tif (model.serviceTiers === undefined) return advertisedId !== \"ultrafast\";\n\treturn getServiceTierCost(model, advertisedId) !== undefined;\n}\n\n/** OpenAI API: drop a Fast or Ultrafast tier the model does not advertise and send any other tier as asked. */\nexport function openAIServiceTierForRequest(\n\tmodel: Pick<Model<Api>, \"serviceTiers\">,\n\tserviceTier: ResponsesServiceTier | undefined,\n): ResponsesServiceTier | undefined {\n\treturn serviceTier !== undefined && supportsServiceTier(model, serviceTier) ? serviceTier : undefined;\n}\n\n/**\n * Codex's `service_tier_for_request`: send `flex` or an advertised tier, and omit `default` and every\n * tier the model does not advertise.\n */\nexport function codexServiceTierForRequest(\n\tmodel: Pick<Model<Api>, \"serviceTiers\">,\n\tserviceTier: ResponsesServiceTier | undefined,\n): ResponsesServiceTier | undefined {\n\tif (serviceTier === \"flex\") return serviceTier;\n\treturn advertisedServiceTierId(serviceTier) !== undefined && supportsServiceTier(model, serviceTier)\n\t\t? serviceTier\n\t\t: undefined;\n}\n\n/**\n * Reprice usage at the tier that actually served the request, using the advertised tier's published\n * rates. A model without tier metadata keeps the documented Fast multiplier.\n */\nexport function applyServiceTierPricing(\n\tusage: Usage,\n\tserviceTier: ResponsesServiceTier | undefined,\n\tmodel: Model<Api>,\n): void {\n\tif (serviceTier === \"flex\") {\n\t\tscaleUsageCost(usage, 0.5);\n\t\treturn;\n\t}\n\tconst advertisedId = advertisedServiceTierId(serviceTier);\n\tif (advertisedId === undefined) return;\n\tconst tierCost = getServiceTierCost(model, advertisedId);\n\tif (tierCost) {\n\t\tcalculateCost({ ...model, cost: tierCost }, usage);\n\t\treturn;\n\t}\n\tif (advertisedId === \"priority\") {\n\t\tscaleUsageCost(usage, (model.fastRoute?.baseModelId ?? model.id) === \"gpt-5.5\" ? 2.5 : 2);\n\t}\n}\n\nfunction scaleUsageCost(usage: Usage, multiplier: number): void {\n\tusage.cost.input *= multiplier;\n\tusage.cost.output *= multiplier;\n\tusage.cost.cacheRead *= multiplier;\n\tusage.cost.cacheWrite *= multiplier;\n\tusage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;\n}\n\ntype ServiceTier = NonNullable<ResponsesServiceTier>;\n\nexport function normalizeResponseServiceTier(serviceTier: string | null | undefined): ServiceTier | undefined {\n\tif (serviceTier === null || serviceTier === undefined) return undefined;\n\treturn serviceTier === \"fast\" ? \"priority\" : (serviceTier as ServiceTier);\n}\n\nconst CHATGPT_AUTH_CLAIM = \"https://api.openai.com/auth\";\n\n/**\n * Whether a bearer token is a ChatGPT sign-in token (a JWT carrying OpenAI's auth claim) rather than an API key. Requests made with it are served by\n * the ChatGPT backend, which reports `default` as the tier of every response, whatever tier it applied.\n */\nexport function isChatGPTSubscriptionToken(token: string | undefined): boolean {\n\tconst payload = token?.split(\".\")[1];\n\tif (!payload || token?.split(\".\").length !== 3) return false;\n\ttry {\n\t\tconst claims = JSON.parse(atob(payload.replace(/-/g, \"+\").replace(/_/g, \"/\")));\n\t\treturn typeof claims?.[CHATGPT_AUTH_CLAIM] === \"object\" && claims[CHATGPT_AUTH_CLAIM] !== null;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * The tier a ChatGPT-backend response ran at. That backend reports `default` for every Flex, Fast or Ultrafast\n * request, so `default` there means the requested tier rather than a downgrade.\n */\nexport function resolveChatGPTBackendServiceTier(\n\tresponseServiceTier: ResponsesServiceTier | undefined,\n\trequestServiceTier: ResponsesServiceTier | undefined,\n): ResponsesServiceTier | undefined {\n\tif (\n\t\tresponseServiceTier === \"default\" &&\n\t\t(requestServiceTier === \"flex\" || requestServiceTier === \"priority\" || requestServiceTier === \"ultrafast\")\n\t) {\n\t\treturn requestServiceTier;\n\t}\n\treturn responseServiceTier ?? requestServiceTier;\n}\n\n/** Diagnostic type recorded when a requested Fast or Ultrafast tier did not apply to a response. */\nexport const SERVICE_TIER_UNAVAILABLE_DIAGNOSTIC = \"service_tier_unavailable\";\n\nconst SERVICE_TIER_SPEED_RANK: Readonly<Record<string, number>> = { priority: 1, ultrafast: 2 };\n\nfunction serviceTierSpeedRank(serviceTier: string): number {\n\treturn SERVICE_TIER_SPEED_RANK[serviceTier] ?? 0;\n}\n\nfunction serviceTierLabel(serviceTier: string): string {\n\treturn serviceTier === \"priority\" ? \"fast\" : serviceTier;\n}\n\n/**\n * Whether the server refused the request because of its `service_tier`: `400 Invalid service_tier argument`\n * on a plain request, or a status-less `error` event with `param: \"service_tier\"` on a streamed one.\n */\nexport function isServiceTierRejection(error: unknown): boolean {\n\tconst { status, body, message } = normalizeProviderError(error);\n\treturn (status === 400 || status === undefined) && /service_tier/i.test(`${message} ${body ?? \"\"}`);\n}\n\nfunction appendServiceTierWarning(\n\toutput: AssistantMessage,\n\tmodel: Pick<Model<Api>, \"fastRoute\" | \"id\">,\n\trequestedServiceTier: string,\n\tranAt: string,\n\treason: \"rejected\" | \"downgraded\",\n): void {\n\tconst baseModelId = model.fastRoute?.baseModelId ?? model.id;\n\tappendAssistantMessageDiagnostic(output, {\n\t\ttype: SERVICE_TIER_UNAVAILABLE_DIAGNOSTIC,\n\t\ttimestamp: Date.now(),\n\t\tdetails: {\n\t\t\tseverity: \"warning\",\n\t\t\tmessage: `${serviceTierLabel(requestedServiceTier)} isn't available for ${baseModelId} on this account; ran at ${serviceTierLabel(ranAt)}`,\n\t\t\treason,\n\t\t\trequestedServiceTier,\n\t\t\tranAtServiceTier: ranAt,\n\t\t},\n\t});\n}\n\n/** The server rejected the requested tier and the request was retried once without it. */\nexport function appendServiceTierRejectedWarning(\n\toutput: AssistantMessage,\n\tmodel: Pick<Model<Api>, \"fastRoute\" | \"id\">,\n\trequestedServiceTier: string,\n): void {\n\tappendServiceTierWarning(output, model, requestedServiceTier, \"default\", \"rejected\");\n}\n\n/**\n * Warn when the server reports a slower tier than the Fast or Ultrafast tier requested. A response\n * that reports no tier says nothing, so it never warns.\n */\nexport function appendServiceTierDowngradeWarning(\n\toutput: AssistantMessage,\n\tmodel: Pick<Model<Api>, \"fastRoute\" | \"id\">,\n\trequestedServiceTier: ResponsesServiceTier | undefined,\n\treportedServiceTier: ResponsesServiceTier | undefined,\n): void {\n\tconst requested = normalizeResponseServiceTier(requestedServiceTier);\n\tif (requested === undefined || reportedServiceTier == null) return;\n\tconst requestedRank = serviceTierSpeedRank(requested);\n\tif (requestedRank === 0 || serviceTierSpeedRank(reportedServiceTier) >= requestedRank) return;\n\tappendServiceTierWarning(output, model, requested, reportedServiceTier, \"downgraded\");\n}\n\n/**\n * Reject a payload hook that rewrote a field the model's route owns.\n *\n * A fast variant is a distinct selected, recorded, persisted, and billed identity, and the objective\n * requires it to send its route's upstream model ID and tier. A hook that changes either would send a\n * different model — or an ordinary-tier request — under the `-fast` identity Atomic recorded, and the\n * Codex routing identity would faithfully advertise whatever the hook left behind.\n *\n * Following the repository's precedent for discarded caller instructions, this rejects loudly rather\n * than silently restoring the route's values, so a misconfigured hook surfaces instead of hiding. A\n * hook may still rewrite every other field, and a model without a route keeps unrestricted freedom.\n */\nexport function assertPayloadPreservesFastRoute(\n\tmodel: Pick<Model<Api>, \"fastRoute\" | \"id\" | \"provider\" | \"serviceTiers\">,\n\tpayload: unknown,\n): void {\n\tconst fastRoute = model.fastRoute;\n\tif (!fastRoute) return;\n\tif (typeof payload !== \"object\" || payload === null || Array.isArray(payload)) {\n\t\tthrow new Error(\n\t\t\t`A request hook changed payload for fast model \"${model.provider}/${model.id}\" to a value that cannot carry ` +\n\t\t\t\t`the route's upstream model and service tier. A fast model variant must send its route's upstream model and ` +\n\t\t\t\t`service tier, because it is recorded, persisted, and billed under its own identity. Select the normal model ` +\n\t\t\t\t`\"${model.provider}/${fastRoute.baseModelId}\" if the request needs different routing, or return an object that ` +\n\t\t\t\t`preserves those fields.`,\n\t\t);\n\t}\n\tconst record = payload as Record<string, unknown>;\n\tconst conflicts: string[] = [];\n\tif (record.model !== fastRoute.upstreamModelId) {\n\t\tconflicts.push(`model (expected \"${fastRoute.upstreamModelId}\", got ${JSON.stringify(record.model)})`);\n\t}\n\tconst expectedServiceTier =\n\t\tfastRoute.serviceTier !== undefined && supportsServiceTier(model, fastRoute.serviceTier)\n\t\t\t? fastRoute.serviceTier\n\t\t\t: undefined;\n\tif (record.service_tier !== expectedServiceTier) {\n\t\tconflicts.push(\n\t\t\t`service_tier (expected ${JSON.stringify(expectedServiceTier)}, got ${JSON.stringify(record.service_tier)})`,\n\t\t);\n\t}\n\tif (conflicts.length === 0) return;\n\tthrow new Error(\n\t\t`A request hook changed ${conflicts.join(\" and \")} for fast model \"${model.provider}/${model.id}\". ` +\n\t\t\t`A fast model variant must send its route's upstream model and service tier, because it is ` +\n\t\t\t`recorded, persisted, and billed under its own identity. Select the normal model \"${model.provider}/${fastRoute.baseModelId}\" ` +\n\t\t\t`if the request needs different routing, or stop rewriting those fields.`,\n\t);\n}\n\nexport interface OpenAIResponsesStreamOptions {\n\tonProviderStreamEvent?: StreamOptions[\"onProviderStreamEvent\"];\n\tserviceTier?: ResponsesServiceTier;\n\tgrammarToolInputProperties?: ReadonlyMap<string, string>;\n\tresolveServiceTier?: (\n\t\tresponseServiceTier: ResponsesServiceTier | undefined,\n\t\trequestServiceTier: ResponsesServiceTier | undefined,\n\t) => ResponsesServiceTier | undefined;\n\tapplyServiceTierPricing?: (usage: Usage, serviceTier: ResponsesServiceTier | undefined) => void;\n\t/** Attach a warning when the response reports a slower tier than requested. Off where the reported tier is ambiguous. */\n\twarnOnServiceTierDowngrade?: boolean;\n}\n\nexport interface ConvertResponsesMessagesOptions {\n\tincludeSystemPrompt?: boolean;\n\tgrammarToolInputProperties?: ReadonlyMap<string, string>;\n\t/** Whether later system messages are sent in place; otherwise they are folded into the leading prompt. */\n\tsupportsMidConvoSystemMessages?: boolean;\n\tsupportsAdditionalTools?: boolean;\n\tsupportsToolSearch?: boolean;\n\ttoolOptions?: ConvertResponsesToolsOptions;\n\t/**\n\t * Effort for the reply being generated. When set, the thinking level is sent as\n\t * configuration_update items instead of a changing reasoning.effort, which would invalidate the\n\t * prompt cache. Each item sets the effort from that point on: one goes before every earlier\n\t * reply with the level recorded on it (`providerThinkingLevel`), and one with this effort goes\n\t * at the end. Earlier input therefore never changes. OpenAI documents the item before user\n\t * messages only. After tool results it was verified on gpt-6-luna (October 2026) to be accepted\n\t * and to apply to the next reply.\n\t */\n\tconfigurationUpdateEffort?: string;\n}\n\nexport interface ConvertResponsesToolsOptions {\n\tstrict?: boolean | null;\n\tsupportsStrictMode?: boolean;\n\tsupportsOpenAIGrammarTools?: boolean;\n\ttoolSearchResult?: boolean;\n}\n\n// =============================================================================\n// Message conversion\n// =============================================================================\n\nexport function convertResponsesMessages<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: TranscriptContext,\n\tallowedToolCallProviders: ReadonlySet<string>,\n\toptions?: ConvertResponsesMessagesOptions,\n): ResponseInput {\n\tconst normalizedContext = resolveTranscript(context, options?.supportsMidConvoSystemMessages);\n\tconst messages: ResponseInput = [];\n\n\tconst normalizeIdPart = (part: string): string => {\n\t\tconst sanitized = part.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n\t\tconst normalized = sanitized.length > 64 ? sanitized.slice(0, 64) : sanitized;\n\t\treturn normalized.replace(/_+$/, \"\");\n\t};\n\n\tconst buildForeignResponsesItemId = (itemId: string): string => {\n\t\tconst normalized = `fc_${shortHash(itemId)}`;\n\t\treturn normalized.length > 64 ? normalized.slice(0, 64) : normalized;\n\t};\n\n\tconst normalizeToolCallId = (id: string, _targetModel: Model<TApi>, source: AssistantMessage): string => {\n\t\tif (!allowedToolCallProviders.has(model.provider)) return normalizeIdPart(id);\n\t\tif (!id.includes(\"|\")) return normalizeIdPart(id);\n\t\tconst [callId, itemId] = id.split(\"|\");\n\t\tconst normalizedCallId = normalizeIdPart(callId);\n\t\tconst isForeignToolCall =\n\t\t\tnormalizeProviderId(source.provider) !== normalizeProviderId(model.provider) || source.api !== model.api;\n\t\tlet normalizedItemId = isForeignToolCall ? buildForeignResponsesItemId(itemId) : normalizeIdPart(itemId);\n\t\t// OpenAI Responses API requires item id to start with \"fc\"\n\t\tif (!normalizedItemId.startsWith(\"fc_\")) {\n\t\t\tnormalizedItemId = normalizeIdPart(`fc_${normalizedItemId}`);\n\t\t}\n\t\treturn `${normalizedCallId}|${normalizedItemId}`;\n\t};\n\n\tconst transformedMessages = transformMessages(normalizedContext.messages, model, normalizeToolCallId);\n\tconst transcriptTools = resolveTranscriptTools(\n\t\tnormalizedContext.messages,\n\t\t(options?.supportsAdditionalTools ?? false) || (options?.supportsToolSearch ?? false),\n\t);\n\tconst appendSystemToolAdditions = (message: SystemMessage, seed: string): void => {\n\t\tconst tools = transcriptTools.anchorsAdditions ? (message.toolsAdded ?? []) : [];\n\t\tif (tools.length === 0) return;\n\t\tif (options?.supportsAdditionalTools) {\n\t\t\tmessages.push({\n\t\t\t\ttype: \"additional_tools\",\n\t\t\t\trole: \"developer\",\n\t\t\t\ttools: convertResponsesTools(tools, options.toolOptions),\n\t\t\t} satisfies ResponseInputItem);\n\t\t\treturn;\n\t\t}\n\t\tif (!options?.supportsToolSearch) return;\n\t\tconst names = tools.map((tool) => tool.name);\n\t\tconst callId = `pi_tool_load_${shortHash(`${seed}:${names.join(\",\")}`)}`;\n\t\tmessages.push({\n\t\t\ttype: \"tool_search_call\",\n\t\t\tcall_id: callId,\n\t\t\texecution: \"client\",\n\t\t\tstatus: \"completed\",\n\t\t\targuments: { query: names.join(\" \"), limit: names.length },\n\t\t} satisfies ResponseInputItem);\n\t\tmessages.push({\n\t\t\ttype: \"tool_search_output\",\n\t\t\tcall_id: callId,\n\t\t\texecution: \"client\",\n\t\t\tstatus: \"completed\",\n\t\t\ttools: convertResponsesTools(tools, { ...options.toolOptions, toolSearchResult: true }),\n\t\t} satisfies ResponseToolSearchOutputItemParam);\n\t};\n\tconst includeInitialSystemMessage = options?.includeSystemPrompt ?? true;\n\tconst pushConfigurationUpdate = (effort: string): void => {\n\t\tmessages.push({\n\t\t\ttype: \"configuration_update\",\n\t\t\treasoning: { effort: effort as NonNullable<ResponseConfigurationUpdateItemParam.Reasoning[\"effort\"]> },\n\t\t} satisfies ResponseConfigurationUpdateItemParam);\n\t};\n\tconst compat = model.compat as { supportsDeveloperRole?: boolean } | undefined;\n\tconst instructionRole = model.reasoning && compat?.supportsDeveloperRole !== false ? \"developer\" : \"system\";\n\n\tlet msgIndex = 0;\n\tlet sourceIndex = 0;\n\tfor (const msg of transformedMessages) {\n\t\tconst isLeadingSystemMessage = sourceIndex++ === 0 && msg.role === \"system\";\n\t\tif (msg.role === \"system\") {\n\t\t\tif (!isLeadingSystemMessage) appendSystemToolAdditions(msg, `system:${msgIndex}`);\n\t\t\tif (!isLeadingSystemMessage || includeInitialSystemMessage) {\n\t\t\t\tconst text = isLeadingSystemMessage ? getSystemMessageText(msg) : renderSystemMessageUpdate(msg);\n\t\t\t\tif (text.length > 0) {\n\t\t\t\t\tmessages.push({ role: instructionRole, content: sanitizeSurrogates(text) });\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (msg.role === \"user\") {\n\t\t\tif (typeof msg.content === \"string\") {\n\t\t\t\tmessages.push({\n\t\t\t\t\trole: \"user\",\n\t\t\t\t\tcontent: [{ type: \"input_text\", text: sanitizeSurrogates(msg.content) }],\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst content: ResponseInputContent[] = msg.content.map((item): ResponseInputContent => {\n\t\t\t\t\tif (item.type === \"text\") {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: \"input_text\",\n\t\t\t\t\t\t\ttext: sanitizeSurrogates(item.text),\n\t\t\t\t\t\t} satisfies ResponseInputText;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"input_image\",\n\t\t\t\t\t\tdetail: \"auto\",\n\t\t\t\t\t\timage_url: `data:${item.mimeType};base64,${item.data}`,\n\t\t\t\t\t} satisfies ResponseInputImage;\n\t\t\t\t});\n\t\t\t\tif (content.length === 0) continue;\n\t\t\t\tmessages.push({\n\t\t\t\t\trole: \"user\",\n\t\t\t\t\tcontent,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (msg.role === \"assistant\") {\n\t\t\tconst output: ResponseInput = [];\n\t\t\tconst assistantMsg = msg as AssistantMessage;\n\t\t\tconst isSameProviderAndApi =\n\t\t\t\tnormalizeProviderId(assistantMsg.provider) === normalizeProviderId(model.provider) &&\n\t\t\t\tassistantMsg.api === model.api;\n\t\t\tconst isSameModel = isSameProviderAndApi && assistantMsg.model === model.id;\n\t\t\tconst isDifferentModel = isSameProviderAndApi && assistantMsg.model !== model.id;\n\t\t\tlet textBlockIndex = 0;\n\n\t\t\tfor (const block of msg.content) {\n\t\t\t\tif (block.type === \"thinking\") {\n\t\t\t\t\tif (block.thinkingSignature) {\n\t\t\t\t\t\tconst reasoningItem = JSON.parse(block.thinkingSignature) as ResponseReasoningItem;\n\t\t\t\t\t\toutput.push(reasoningItem);\n\t\t\t\t\t}\n\t\t\t\t} else if (block.type === \"text\") {\n\t\t\t\t\tconst textBlock = block as TextContent;\n\t\t\t\t\tconst parsedSignature = parseTextSignature(textBlock.textSignature);\n\t\t\t\t\tconst fallbackMessageId =\n\t\t\t\t\t\ttextBlockIndex === 0 ? `msg_pi_${msgIndex}` : `msg_pi_${msgIndex}_${textBlockIndex}`;\n\t\t\t\t\ttextBlockIndex++;\n\t\t\t\t\t// OpenAI requires id to be max 64 characters\n\t\t\t\t\tlet msgId = parsedSignature?.id;\n\t\t\t\t\tif (!msgId) {\n\t\t\t\t\t\tmsgId = fallbackMessageId;\n\t\t\t\t\t} else if (msgId.length > 64) {\n\t\t\t\t\t\tmsgId = `msg_${shortHash(msgId)}`;\n\t\t\t\t\t}\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\ttype: \"message\",\n\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\tcontent: [{ type: \"output_text\", text: sanitizeSurrogates(textBlock.text), annotations: [] }],\n\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\tid: msgId,\n\t\t\t\t\t\tphase: parsedSignature?.phase,\n\t\t\t\t\t} satisfies ResponseOutputMessage);\n\t\t\t\t} else if (block.type === \"toolCall\") {\n\t\t\t\t\tconst toolCall = block as ToolCall;\n\t\t\t\t\tconst [callId, itemIdRaw] = toolCall.id.split(\"|\");\n\t\t\t\t\tconst customInputProperty = options?.grammarToolInputProperties?.get(toolCall.name);\n\t\t\t\t\tlet itemId: string | undefined = itemIdRaw;\n\n\t\t\t\t\t// For different-model messages, set id to undefined to avoid pairing validation.\n\t\t\t\t\t// OpenAI tracks which item IDs were paired with rs_xxx reasoning items.\n\t\t\t\t\t// By omitting the id, we avoid triggering that validation (like cross-provider does).\n\t\t\t\t\t// Also drop ids that do not match the replayed item type: function_call ids must be fc_*\n\t\t\t\t\t// and custom_tool_call ids must be ctc_*. Foreign tool call ids are normalized to fc_*, and\n\t\t\t\t\t// a call can switch between the two types when grammar tool support differs.\n\t\t\t\t\tconst itemIdPrefix = customInputProperty === undefined ? \"fc_\" : \"ctc_\";\n\t\t\t\t\tif (isDifferentModel || !itemId?.startsWith(itemIdPrefix)) {\n\t\t\t\t\t\titemId = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (customInputProperty !== undefined) {\n\t\t\t\t\t\toutput.push({\n\t\t\t\t\t\t\ttype: \"custom_tool_call\",\n\t\t\t\t\t\t\tid: itemId,\n\t\t\t\t\t\t\tcall_id: callId,\n\t\t\t\t\t\t\tname: toolCall.name,\n\t\t\t\t\t\t\tinput: sanitizeSurrogates(\n\t\t\t\t\t\t\t\tgetGrammarToolInput(toolCall.name, toolCall.arguments, customInputProperty),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t...(isSameModel && toolCall.namespace !== undefined ? { namespace: toolCall.namespace } : {}),\n\t\t\t\t\t\t} satisfies ResponseOutputItem);\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput.push({\n\t\t\t\t\t\t\ttype: \"function_call\",\n\t\t\t\t\t\t\tid: itemId,\n\t\t\t\t\t\t\tcall_id: callId,\n\t\t\t\t\t\t\tname: toolCall.name,\n\t\t\t\t\t\t\targuments: JSON.stringify(toolCall.arguments),\n\t\t\t\t\t\t\t...(isSameModel && toolCall.namespace !== undefined ? { namespace: toolCall.namespace } : {}),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (output.length === 0) continue;\n\t\t\tif (\n\t\t\t\toptions?.configurationUpdateEffort !== undefined &&\n\t\t\t\tisSameModel &&\n\t\t\t\tmsg.providerThinkingLevel !== undefined\n\t\t\t) {\n\t\t\t\tpushConfigurationUpdate(msg.providerThinkingLevel);\n\t\t\t}\n\t\t\tmessages.push(...output);\n\t\t} else if (msg.role === \"toolResult\") {\n\t\t\tconst [callId] = msg.toolCallId.split(\"|\");\n\t\t\tconst output = convertToolResultOutput(model, msg.content);\n\n\t\t\tif (options?.grammarToolInputProperties?.has(msg.toolName)) {\n\t\t\t\tmessages.push({\n\t\t\t\t\ttype: \"custom_tool_call_output\",\n\t\t\t\t\tcall_id: callId,\n\t\t\t\t\toutput,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tmessages.push({\n\t\t\t\t\ttype: \"function_call_output\",\n\t\t\t\t\tcall_id: callId,\n\t\t\t\t\toutput,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (!isLeadingSystemMessage) msgIndex++;\n\t}\n\tif (options?.configurationUpdateEffort !== undefined) pushConfigurationUpdate(options.configurationUpdateEffort);\n\n\treturn messages;\n}\n\n// =============================================================================\n// Tool conversion\n// =============================================================================\n\nexport function convertResponsesTools(tools: readonly Tool[], options?: ConvertResponsesToolsOptions): OpenAITool[] {\n\tconst defaultStrict = options?.strict === undefined ? false : options.strict;\n\tconst supportsStrictMode = options?.supportsStrictMode ?? true;\n\tconst supportsOpenAIGrammarTools = options?.supportsOpenAIGrammarTools ?? false;\n\n\treturn tools.map((tool) => {\n\t\tconst grammar = resolveGrammarConstrainedSampling(tool, supportsOpenAIGrammarTools);\n\t\tif (grammar) {\n\t\t\treturn {\n\t\t\t\ttype: \"custom\",\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description,\n\t\t\t\tformat: {\n\t\t\t\t\ttype: \"grammar\",\n\t\t\t\t\tsyntax: grammar.format,\n\t\t\t\t\tdefinition: grammar.definition,\n\t\t\t\t},\n\t\t\t\t...(options?.toolSearchResult ? { defer_loading: true } : {}),\n\t\t\t} satisfies OpenAITool;\n\t\t}\n\n\t\tconst constrainedStrict = resolveJsonSchemaStrictSampling(tool, supportsStrictMode);\n\t\tconst strict = constrainedStrict ?? defaultStrict;\n\t\tconst functionTool: Omit<Extract<OpenAITool, { type: \"function\" }>, \"strict\"> & {\n\t\t\tstrict?: Extract<OpenAITool, { type: \"function\" }>[\"strict\"];\n\t\t} = {\n\t\t\ttype: \"function\",\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: getJsonSchemaToolParameters(tool, strict === true) as Record<string, unknown>,\n\t\t\t...(options?.toolSearchResult ? { defer_loading: true } : {}),\n\t\t};\n\t\tif (supportsStrictMode) {\n\t\t\tfunctionTool.strict = strict;\n\t\t}\n\t\treturn functionTool as OpenAITool;\n\t});\n}\n\n// =============================================================================\n// Stream processing\n// =============================================================================\n\ntype StreamingToolCall = ToolCall & {\n\tpartialJson?: string;\n\tcustomInput?: {\n\t\tproperty: string;\n\t\tjsonBuffer: GrammarToolInputJsonBuffer;\n\t};\n};\n\nfunction getCustomToolCallInput(block: StreamingToolCall): string {\n\tconst property = block.customInput?.property;\n\tif (property === undefined) return \"\";\n\tconst value = block.arguments[property];\n\treturn typeof value === \"string\" ? value : \"\";\n}\n\nfunction appendCustomToolCallInput(block: StreamingToolCall, nextInput: string, close: boolean): string | undefined {\n\tconst customInput = block.customInput;\n\tif (!customInput) return undefined;\n\tconst delta = appendGrammarToolInputJsonDelta(customInput.jsonBuffer, customInput.property, nextInput, close);\n\tblock.arguments = { [customInput.property]: nextInput };\n\treturn delta;\n}\n\ntype ResponsesOutputSlot =\n\t| { type: \"thinking\"; block: ThinkingContent; contentIndex: number }\n\t| { type: \"text\"; block: TextContent; contentIndex: number }\n\t| { type: \"toolCall\"; block: StreamingToolCall; contentIndex: number };\n\ntype ToolCallOutputSlot = Extract<ResponsesOutputSlot, { type: \"toolCall\" }>;\n\nexport async function processResponsesStream<TApi extends Api>(\n\topenaiStream: AsyncIterable<ResponseStreamEvent>,\n\toutput: AssistantMessage,\n\tstream: AssistantMessageEventStream,\n\tmodel: Model<TApi>,\n\toptions?: OpenAIResponsesStreamOptions,\n): Promise<void> {\n\tlet sawTerminalResponseEvent = false;\n\tconst outputSlots = new Map<number, ResponsesOutputSlot>();\n\tconst reasoningBlocksById = new Map<string, ThinkingContent>();\n\tconst applyMessagePhaseStopReason = (item: ResponseOutputItem): void => {\n\t\tif (item.type === \"message\" && item.phase === \"final_answer\") {\n\t\t\toutput.stopReason = \"stop\";\n\t\t}\n\t};\n\tconst getSlot = <TType extends ResponsesOutputSlot[\"type\"]>(\n\t\toutputIndex: number,\n\t\ttype: TType,\n\t): Extract<ResponsesOutputSlot, { type: TType }> | undefined => {\n\t\tconst slot = outputSlots.get(outputIndex);\n\t\treturn slot?.type === type ? (slot as Extract<ResponsesOutputSlot, { type: TType }>) : undefined;\n\t};\n\tconst pushToolCallDelta = (slot: ToolCallOutputSlot, delta: string | undefined): void => {\n\t\tif (delta === undefined) return;\n\t\tstream.push({\n\t\t\ttype: \"toolcall_delta\",\n\t\t\tcontentIndex: slot.contentIndex,\n\t\t\tdelta,\n\t\t\tpartial: output,\n\t\t});\n\t};\n\tconst createSlot = (outputIndex: number, item: ResponseOutputItem): ResponsesOutputSlot | undefined => {\n\t\tif (item.type === \"reasoning\") {\n\t\t\tconst block: ThinkingContent = { type: \"thinking\", thinking: \"\" };\n\t\t\toutput.content.push(block);\n\t\t\tconst slot = {\n\t\t\t\ttype: \"thinking\",\n\t\t\t\tblock,\n\t\t\t\tcontentIndex: output.content.length - 1,\n\t\t\t} satisfies ResponsesOutputSlot;\n\t\t\toutputSlots.set(outputIndex, slot);\n\t\t\tstream.push({ type: \"thinking_start\", contentIndex: slot.contentIndex, partial: output });\n\t\t\treturn slot;\n\t\t}\n\t\tif (item.type === \"message\") {\n\t\t\tapplyMessagePhaseStopReason(item);\n\t\t\tconst block: TextContent = { type: \"text\", text: \"\" };\n\t\t\toutput.content.push(block);\n\t\t\tconst slot = { type: \"text\", block, contentIndex: output.content.length - 1 } satisfies ResponsesOutputSlot;\n\t\t\toutputSlots.set(outputIndex, slot);\n\t\t\tstream.push({ type: \"text_start\", contentIndex: slot.contentIndex, partial: output });\n\t\t\treturn slot;\n\t\t}\n\t\tif (item.type === \"function_call\") {\n\t\t\tconst block: StreamingToolCall = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: `${item.call_id}|${item.id}`,\n\t\t\t\tname: item.name,\n\t\t\t\targuments: {},\n\t\t\t\t...(item.namespace !== undefined ? { namespace: item.namespace } : {}),\n\t\t\t\tpartialJson: item.arguments || \"\",\n\t\t\t};\n\t\t\toutput.content.push(block);\n\t\t\tconst slot = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tblock,\n\t\t\t\tcontentIndex: output.content.length - 1,\n\t\t\t} satisfies ResponsesOutputSlot;\n\t\t\toutputSlots.set(outputIndex, slot);\n\t\t\tstream.push({ type: \"toolcall_start\", contentIndex: slot.contentIndex, partial: output });\n\t\t\treturn slot;\n\t\t}\n\t\tif (item.type === \"custom_tool_call\") {\n\t\t\tconst inputProperty = options?.grammarToolInputProperties?.get(item.name) ?? \"input\";\n\t\t\tconst input = item.input || \"\";\n\t\t\tconst block: StreamingToolCall = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: `${item.call_id}|${item.id}`,\n\t\t\t\tname: item.name,\n\t\t\t\targuments: { [inputProperty]: input },\n\t\t\t\t...(item.namespace !== undefined ? { namespace: item.namespace } : {}),\n\t\t\t\tcustomInput: {\n\t\t\t\t\tproperty: inputProperty,\n\t\t\t\t\tjsonBuffer: { input: \"\", started: false, closed: false },\n\t\t\t\t},\n\t\t\t};\n\t\t\toutput.content.push(block);\n\t\t\tconst slot = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tblock,\n\t\t\t\tcontentIndex: output.content.length - 1,\n\t\t\t} satisfies ResponsesOutputSlot;\n\t\t\toutputSlots.set(outputIndex, slot);\n\t\t\tstream.push({ type: \"toolcall_start\", contentIndex: slot.contentIndex, partial: output });\n\t\t\treturn slot;\n\t\t}\n\t\treturn undefined;\n\t};\n\tconst getOrCreateSlot = (outputIndex: number, item: ResponseOutputItem): ResponsesOutputSlot | undefined => {\n\t\treturn outputSlots.get(outputIndex) ?? createSlot(outputIndex, item);\n\t};\n\t// Azure OpenAI can omit reasoning.encrypted_content from response.output_item.done\n\t// and provide it only in response.completed.response.output. Backfill the\n\t// persisted reasoning signature from the terminal response to keep store:false\n\t// multi-turn replay stateless. See https://github.com/earendil-works/pi/issues/6409.\n\tconst backfillReasoningSignatures = (responseOutput: ResponseOutputItem[]): void => {\n\t\tfor (const item of responseOutput) {\n\t\t\tif (item.type !== \"reasoning\" || !item.encrypted_content) continue;\n\t\t\tconst block = reasoningBlocksById.get(item.id);\n\t\t\tif (!block?.thinkingSignature) continue;\n\n\t\t\tconst storedItem = JSON.parse(block.thinkingSignature) as ResponseReasoningItem;\n\t\t\tif (storedItem.encrypted_content) continue;\n\t\t\tblock.thinkingSignature = JSON.stringify({\n\t\t\t\t...storedItem,\n\t\t\t\tencrypted_content: item.encrypted_content,\n\t\t\t});\n\t\t}\n\t};\n\tconst finalizeResponse = (\n\t\tresponse: Extract<ResponseStreamEvent, { type: \"response.completed\" | \"response.incomplete\" }>[\"response\"],\n\t): void => {\n\t\tsawTerminalResponseEvent = true;\n\t\tbackfillReasoningSignatures(response.output ?? []);\n\t\tif (response?.id) {\n\t\t\toutput.responseId = response.id;\n\t\t}\n\t\tif (response?.usage) {\n\t\t\tconst inputDetails = response.usage.input_tokens_details as\n\t\t\t\t| { cached_tokens?: number; cache_write_tokens?: number }\n\t\t\t\t| undefined;\n\t\t\tconst cachedTokens = inputDetails?.cached_tokens || 0;\n\t\t\tconst cacheWriteTokens = inputDetails?.cache_write_tokens || 0;\n\t\t\toutput.usage = {\n\t\t\t\t// OpenAI includes cached and cache-write tokens in input_tokens, so subtract both.\n\t\t\t\tinput: Math.max(0, (response.usage.input_tokens || 0) - cachedTokens - cacheWriteTokens),\n\t\t\t\toutput: response.usage.output_tokens || 0,\n\t\t\t\tcacheRead: cachedTokens,\n\t\t\t\tcacheWrite: cacheWriteTokens,\n\t\t\t\treasoning: response.usage.output_tokens_details?.reasoning_tokens || 0,\n\t\t\t\ttotalTokens: response.usage.total_tokens || 0,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t};\n\t\t}\n\t\tcalculateCost(model, output.usage);\n\t\tif (options?.applyServiceTierPricing) {\n\t\t\tconst responseServiceTier = normalizeResponseServiceTier(response?.service_tier);\n\t\t\tconst serviceTier = options.resolveServiceTier\n\t\t\t\t? options.resolveServiceTier(responseServiceTier, options.serviceTier)\n\t\t\t\t: (responseServiceTier ?? options.serviceTier);\n\t\t\toptions.applyServiceTierPricing(output.usage, serviceTier);\n\t\t\tif (options.warnOnServiceTierDowngrade) {\n\t\t\t\tappendServiceTierDowngradeWarning(output, model, options.serviceTier, responseServiceTier);\n\t\t\t}\n\t\t}\n\t\t// Map status to stop reason. For incomplete responses, retain the provider's\n\t\t// specific reason so max-output truncation and content filtering stay distinct.\n\t\tconst status = response?.status;\n\t\tconst incompleteDetails = response?.incomplete_details as { reason?: unknown } | null | undefined;\n\t\tconst incompleteReason = typeof incompleteDetails?.reason === \"string\" ? incompleteDetails.reason : undefined;\n\t\tif (output.rawStopReason !== \"refusal\") {\n\t\t\toutput.rawStopReason = incompleteReason ? `${status}.${incompleteReason}` : status;\n\t\t}\n\t\tconst mappedStop = mapStopReason(status, incompleteReason);\n\t\toutput.stopReason = mappedStop.stopReason;\n\t\toutput.errorMessage = mappedStop.errorMessage;\n\t\tif (output.content.some((b) => b.type === \"toolCall\") && output.stopReason === \"stop\") {\n\t\t\toutput.stopReason = \"toolUse\";\n\t\t}\n\t};\n\n\tfor await (const event of openaiStream) {\n\t\tawait options?.onProviderStreamEvent?.(event, model);\n\t\tif (event.type === \"response.created\") {\n\t\t\toutput.responseId = event.response.id;\n\t\t} else if (event.type === \"response.output_item.added\") {\n\t\t\tcreateSlot(event.output_index, event.item);\n\t\t} else if (event.type === \"response.reasoning_summary_text.delta\") {\n\t\t\tconst slot = getSlot(event.output_index, \"thinking\");\n\t\t\tif (!slot) continue;\n\t\t\tslot.block.thinking += event.delta;\n\t\t\tstream.push({\n\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\tdelta: event.delta,\n\t\t\t\tpartial: output,\n\t\t\t});\n\t\t} else if (event.type === \"response.reasoning_summary_part.done\") {\n\t\t\tconst slot = getSlot(event.output_index, \"thinking\");\n\t\t\tif (!slot) continue;\n\t\t\tslot.block.thinking += \"\\n\\n\";\n\t\t\tstream.push({\n\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\tdelta: \"\\n\\n\",\n\t\t\t\tpartial: output,\n\t\t\t});\n\t\t} else if (event.type === \"response.reasoning_text.delta\") {\n\t\t\tconst slot = getSlot(event.output_index, \"thinking\");\n\t\t\tif (!slot) continue;\n\t\t\tslot.block.thinking += event.delta;\n\t\t\tstream.push({\n\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\tdelta: event.delta,\n\t\t\t\tpartial: output,\n\t\t\t});\n\t\t} else if (event.type === \"response.output_text.delta\") {\n\t\t\tconst slot = getSlot(event.output_index, \"text\");\n\t\t\tif (!slot) continue;\n\t\t\tslot.block.text += event.delta;\n\t\t\tstream.push({\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\tdelta: event.delta,\n\t\t\t\tpartial: output,\n\t\t\t});\n\t\t} else if (event.type === \"response.refusal.delta\") {\n\t\t\toutput.rawStopReason = \"refusal\";\n\t\t\tconst slot = getSlot(event.output_index, \"text\");\n\t\t\tif (!slot) continue;\n\t\t\tslot.block.text += event.delta;\n\t\t\tstream.push({\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\tdelta: event.delta,\n\t\t\t\tpartial: output,\n\t\t\t});\n\t\t} else if (event.type === \"response.function_call_arguments.delta\") {\n\t\t\tconst slot = getSlot(event.output_index, \"toolCall\");\n\t\t\tif (!slot || slot.block.partialJson === undefined) continue;\n\t\t\tslot.block.partialJson += event.delta;\n\t\t\tslot.block.arguments = parseStreamingJson(slot.block.partialJson);\n\t\t\tpushToolCallDelta(slot, event.delta);\n\t\t} else if (event.type === \"response.function_call_arguments.done\") {\n\t\t\tconst slot = getSlot(event.output_index, \"toolCall\");\n\t\t\tif (!slot || slot.block.partialJson === undefined) continue;\n\t\t\tconst previousPartialJson = slot.block.partialJson;\n\t\t\tslot.block.partialJson = event.arguments;\n\t\t\tslot.block.arguments = parseStreamingJson(slot.block.partialJson);\n\n\t\t\tif (event.arguments.startsWith(previousPartialJson)) {\n\t\t\t\tconst delta = event.arguments.slice(previousPartialJson.length);\n\t\t\t\tif (delta.length > 0) pushToolCallDelta(slot, delta);\n\t\t\t}\n\t\t} else if (event.type === \"response.custom_tool_call_input.delta\") {\n\t\t\tconst slot = getSlot(event.output_index, \"toolCall\");\n\t\t\tif (!slot || !slot.block.customInput) continue;\n\t\t\tpushToolCallDelta(\n\t\t\t\tslot,\n\t\t\t\tappendCustomToolCallInput(slot.block, getCustomToolCallInput(slot.block) + event.delta, false),\n\t\t\t);\n\t\t} else if (event.type === \"response.custom_tool_call_input.done\") {\n\t\t\tconst slot = getSlot(event.output_index, \"toolCall\");\n\t\t\tif (!slot || !slot.block.customInput) continue;\n\t\t\tpushToolCallDelta(slot, appendCustomToolCallInput(slot.block, event.input, true));\n\t\t} else if (event.type === \"response.output_item.done\") {\n\t\t\tconst item = event.item;\n\t\t\tapplyMessagePhaseStopReason(item);\n\t\t\tconst slot = getOrCreateSlot(event.output_index, item);\n\n\t\t\tif (item.type === \"reasoning\" && slot?.type === \"thinking\") {\n\t\t\t\tconst summaryText = item.summary?.map((s) => s.text).join(\"\\n\\n\") || \"\";\n\t\t\t\tconst contentText = item.content?.map((c) => c.text).join(\"\\n\\n\") || \"\";\n\t\t\t\tslot.block.thinking = summaryText || contentText || slot.block.thinking;\n\t\t\t\tslot.block.thinkingSignature = JSON.stringify(item);\n\t\t\t\treasoningBlocksById.set(item.id, slot.block);\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"thinking_end\",\n\t\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\t\tcontent: slot.block.thinking,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t\toutputSlots.delete(event.output_index);\n\t\t\t} else if (item.type === \"message\" && slot?.type === \"text\") {\n\t\t\t\tif (item.content?.some((content) => content.type === \"refusal\")) output.rawStopReason = \"refusal\";\n\t\t\t\tslot.block.text = item.content?.map((c) => (c.type === \"output_text\" ? c.text : c.refusal)).join(\"\") || \"\";\n\t\t\t\tslot.block.textSignature = encodeTextSignatureV1(item.id, item.phase ?? undefined);\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"text_end\",\n\t\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\t\tcontent: slot.block.text,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t\toutputSlots.delete(event.output_index);\n\t\t\t} else if (\n\t\t\t\titem.type === \"function_call\" &&\n\t\t\t\tslot?.type === \"toolCall\" &&\n\t\t\t\tslot.block.partialJson !== undefined\n\t\t\t) {\n\t\t\t\tObject.assign(slot.block, parseToolCallArguments(item.arguments || slot.block.partialJson));\n\t\t\t\tif (item.namespace !== undefined) slot.block.namespace = item.namespace;\n\t\t\t\t// Finalize in-place and strip the scratch buffer so replay only\n\t\t\t\t// carries parsed arguments.\n\t\t\t\tdelete slot.block.partialJson;\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\t\ttoolCall: slot.block,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t\toutputSlots.delete(event.output_index);\n\t\t\t} else if (item.type === \"custom_tool_call\" && slot?.type === \"toolCall\" && slot.block.customInput) {\n\t\t\t\tpushToolCallDelta(\n\t\t\t\t\tslot,\n\t\t\t\t\tappendCustomToolCallInput(slot.block, item.input ?? getCustomToolCallInput(slot.block), true),\n\t\t\t\t);\n\t\t\t\tif (item.namespace !== undefined) slot.block.namespace = item.namespace;\n\t\t\t\tdelete slot.block.customInput;\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\t\ttoolCall: slot.block,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t\toutputSlots.delete(event.output_index);\n\t\t\t}\n\t\t} else if (event.type === \"response.completed\" || event.type === \"response.incomplete\") {\n\t\t\tfinalizeResponse(event.response);\n\t\t} else if (event.type === \"error\") {\n\t\t\tthrow new Error(`Error Code ${event.code}: ${event.message}` || \"Unknown error\");\n\t\t} else if (event.type === \"response.failed\") {\n\t\t\tsawTerminalResponseEvent = true;\n\t\t\toutput.rawStopReason = event.response?.status;\n\t\t\tconst error = event.response?.error;\n\t\t\tconst details = event.response?.incomplete_details;\n\t\t\tconst msg = error\n\t\t\t\t? `${error.code || \"unknown\"}: ${error.message || \"no message\"}`\n\t\t\t\t: details?.reason\n\t\t\t\t\t? `incomplete: ${details.reason}`\n\t\t\t\t\t: \"Unknown error (no error details in response)\";\n\t\t\tthrow new Error(msg);\n\t\t}\n\t}\n\tif (!sawTerminalResponseEvent) {\n\t\tthrow new Error(\"OpenAI Responses stream ended before a terminal response event\");\n\t}\n\t// The agent runs every tool call in the final message. Refuse to hand over calls whose\n\t// output_item.done never arrived: their arguments may be cut off or mixed up, e.g. when a\n\t// non-compliant server omits output_index. Finished calls have their scratch buffers removed.\n\tif (output.stopReason === \"toolUse\") {\n\t\tfor (const block of output.content) {\n\t\t\tif (block.type !== \"toolCall\") continue;\n\t\t\tconst toolCall = block as StreamingToolCall;\n\t\t\tif (toolCall.partialJson !== undefined || toolCall.customInput !== undefined) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`OpenAI Responses stream completed with an unfinished tool call: ${toolCall.name} (${toolCall.id})`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction mapStopReason(\n\tstatus: OpenAI.Responses.ResponseStatus | undefined,\n\tincompleteReason?: string,\n): { stopReason: StopReason; errorMessage?: string } {\n\tif (!status) return { stopReason: \"stop\" };\n\tswitch (status) {\n\t\tcase \"completed\":\n\t\t\treturn { stopReason: \"stop\" };\n\t\tcase \"incomplete\":\n\t\t\tif (incompleteReason === \"max_output_tokens\") {\n\t\t\t\treturn { stopReason: \"length\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tstopReason: \"error\",\n\t\t\t\terrorMessage: incompleteReason\n\t\t\t\t\t? `Response incomplete: ${incompleteReason}`\n\t\t\t\t\t: \"Response incomplete without a provider reason\",\n\t\t\t};\n\t\tcase \"failed\":\n\t\tcase \"cancelled\":\n\t\t\treturn { stopReason: \"error\" };\n\t\t// These two are wonky ...\n\t\tcase \"in_progress\":\n\t\tcase \"queued\":\n\t\t\treturn { stopReason: \"stop\" };\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = status;\n\t\t\tthrow new Error(`Unhandled stop reason: ${_exhaustive}`);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"openai-responses-shared.js","sourceRoot":"","sources":["../../src/api/openai-responses-shared.ts"],"names":[],"mappings":"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","sourcesContent":["import type OpenAI from \"openai\";\nimport type {\n\tTool as OpenAITool,\n\tResponseConfigurationUpdateItemParam,\n\tResponseCreateParamsStreaming,\n\tResponseInput,\n\tResponseInputContent,\n\tResponseInputImage,\n\tResponseInputItem,\n\tResponseInputText,\n\tResponseOutputItem,\n\tResponseOutputMessage,\n\tResponseReasoningItem,\n\tResponseStreamEvent,\n\tResponseToolSearchOutputItemParam,\n} from \"openai/resources/responses/responses.js\";\nimport { calculateCost, getServiceTierCost } from \"../models.ts\";\nimport { normalizeProviderId } from \"../provider-id.ts\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tImageContent,\n\tModel,\n\tModelServiceTierId,\n\tStopReason,\n\tStreamOptions,\n\tSystemMessage,\n\tTextContent,\n\tTextSignatureV1,\n\tThinkingContent,\n\tTool,\n\tToolCall,\n\tTranscriptContext,\n\tUsage,\n} from \"../types.ts\";\nimport { appendAssistantMessageDiagnostic } from \"../utils/diagnostics.ts\";\nimport { normalizeProviderError } from \"../utils/error-body.ts\";\nimport type { AssistantMessageEventStream } from \"../utils/event-stream.ts\";\nimport { shortHash } from \"../utils/hash.ts\";\nimport { parseStreamingJson, parseToolCallArguments } from \"../utils/json-parse.ts\";\nimport { sanitizeSurrogates } from \"../utils/sanitize-unicode.ts\";\nimport { getSystemMessageText, renderSystemMessageUpdate } from \"../utils/text.ts\";\nimport { resolveTranscript, resolveTranscriptTools } from \"../utils/transcript.ts\";\nimport {\n\tappendGrammarToolInputJsonDelta,\n\ttype GrammarToolInputJsonBuffer,\n\tgetGrammarToolInput,\n\tgetJsonSchemaToolParameters,\n\tresolveGrammarConstrainedSampling,\n\tresolveJsonSchemaStrictSampling,\n} from \"./constrained-sampling.ts\";\nimport { transformMessages } from \"./transform-messages.ts\";\n\n// =============================================================================\n// Utilities\n// =============================================================================\n\nfunction encodeTextSignatureV1(id: string, phase?: TextSignatureV1[\"phase\"]): string {\n\tconst payload: TextSignatureV1 = { v: 1, id };\n\tif (phase) payload.phase = phase;\n\treturn JSON.stringify(payload);\n}\n\nfunction parseTextSignature(\n\tsignature: string | undefined,\n): { id: string; phase?: TextSignatureV1[\"phase\"] } | undefined {\n\tif (!signature) return undefined;\n\tif (signature.startsWith(\"{\")) {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(signature) as Partial<TextSignatureV1>;\n\t\t\tif (parsed.v === 1 && typeof parsed.id === \"string\") {\n\t\t\t\tif (parsed.phase === \"commentary\" || parsed.phase === \"final_answer\") {\n\t\t\t\t\treturn { id: parsed.id, phase: parsed.phase };\n\t\t\t\t}\n\t\t\t\treturn { id: parsed.id };\n\t\t\t}\n\t\t} catch {\n\t\t\t// Fall through to legacy plain-string handling.\n\t\t}\n\t}\n\treturn { id: signature };\n}\n\ntype ToolResultOutputContent = Array<ResponseInputText | ResponseInputImage>;\n\nfunction convertToolResultOutput<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontent: readonly (TextContent | ImageContent)[],\n): string | ToolResultOutputContent {\n\tconst textResult = content\n\t\t.filter((c): c is TextContent => c.type === \"text\")\n\t\t.map((c) => c.text)\n\t\t.join(\"\\n\");\n\tconst images = content.filter((c): c is ImageContent => c.type === \"image\");\n\tconst hasText = textResult.trim().length > 0;\n\n\tif (images.length === 0 || !model.input.includes(\"image\")) {\n\t\treturn sanitizeSurrogates(hasText ? textResult : images.length > 0 ? \"(see attached image)\" : \"(no tool output)\");\n\t}\n\n\tconst output: ToolResultOutputContent = [];\n\tif (hasText) {\n\t\toutput.push({ type: \"input_text\", text: sanitizeSurrogates(textResult) });\n\t}\n\tfor (const image of images) {\n\t\toutput.push({\n\t\t\ttype: \"input_image\",\n\t\t\tdetail: \"auto\",\n\t\t\timage_url: `data:${image.mimeType};base64,${image.data}`,\n\t\t});\n\t}\n\treturn output;\n}\n\n/**\n * The service tier this request should carry.\n *\n * The **presence** of `fastRoute` is the discriminator, and its declared tier is the value. Fast\n * versus normal is model identity, so a caller who wants a different tier selects the normal sibling\n * rather than downgrading the fast one; letting a per-request option win would let a model selected,\n * recorded, persisted, and billed as `-fast` route as an ordinary request — and, because the Codex\n * routing identity keys on the final payload's tier, silently drop `originator: codex_cli_rs` too.\n *\n * A route that declares **no** tier means *no tier*, not \"fall through to the caller\". A GitHub\n * Copilot fast variant is exactly that case: it sends its own advertised `-fast` model ID and must\n * carry no OpenAI service-tier field at all, whatever the caller asks for.\n *\n * A normal model has no route, so an explicit `serviceTier` still applies there exactly as it did\n * before fast variants existed.\n */\n/** Codex accepts an additional tier not yet represented by the OpenAI API SDK. */\nexport type ResponsesServiceTier = ResponseCreateParamsStreaming[\"service_tier\"] | \"ultrafast\";\n\nexport function resolveRequestedServiceTier(\n\tmodel: Pick<Model<Api>, \"fastRoute\">,\n\toptionsServiceTier: ResponsesServiceTier | undefined,\n): ResponsesServiceTier | undefined {\n\treturn model.fastRoute ? model.fastRoute.serviceTier : optionsServiceTier;\n}\n\nfunction advertisedServiceTierId(serviceTier: ResponsesServiceTier | undefined): ModelServiceTierId | undefined {\n\tif (serviceTier === \"priority\" || serviceTier === \"fast\") return \"priority\";\n\treturn serviceTier === \"ultrafast\" ? \"ultrafast\" : undefined;\n}\n\n/**\n * Whether the model offers a Fast or Ultrafast tier. A model without tier metadata keeps offering Fast\n * but never Ultrafast. Other tiers (`flex`, `default`, `auto`, `scale`) need no advertisement.\n */\nexport function supportsServiceTier(\n\tmodel: Pick<Model<Api>, \"serviceTiers\">,\n\tserviceTier: ResponsesServiceTier,\n): boolean {\n\tconst advertisedId = advertisedServiceTierId(serviceTier);\n\tif (advertisedId === undefined) return true;\n\tif (model.serviceTiers === undefined) return advertisedId !== \"ultrafast\";\n\treturn getServiceTierCost(model, advertisedId) !== undefined;\n}\n\n/** OpenAI API: drop a Fast or Ultrafast tier the model does not advertise and send any other tier as asked. */\nexport function openAIServiceTierForRequest(\n\tmodel: Pick<Model<Api>, \"serviceTiers\">,\n\tserviceTier: ResponsesServiceTier | undefined,\n): ResponsesServiceTier | undefined {\n\treturn serviceTier !== undefined && supportsServiceTier(model, serviceTier) ? serviceTier : undefined;\n}\n\n/**\n * Codex's `service_tier_for_request`: send `flex` or an advertised tier, and omit `default` and every\n * tier the model does not advertise.\n */\nexport function codexServiceTierForRequest(\n\tmodel: Pick<Model<Api>, \"serviceTiers\">,\n\tserviceTier: ResponsesServiceTier | undefined,\n): ResponsesServiceTier | undefined {\n\tif (serviceTier === \"flex\") return serviceTier;\n\treturn advertisedServiceTierId(serviceTier) !== undefined && supportsServiceTier(model, serviceTier)\n\t\t? serviceTier\n\t\t: undefined;\n}\n\n/**\n * Reprice usage at the tier that actually served the request, using the advertised tier's published\n * rates. A model without tier metadata keeps the documented Fast multiplier.\n */\nexport function applyServiceTierPricing(\n\tusage: Usage,\n\tserviceTier: ResponsesServiceTier | undefined,\n\tmodel: Model<Api>,\n): void {\n\tif (serviceTier === \"flex\") {\n\t\tscaleUsageCost(usage, 0.5);\n\t\treturn;\n\t}\n\tconst advertisedId = advertisedServiceTierId(serviceTier);\n\tif (advertisedId === undefined) return;\n\tconst tierCost = getServiceTierCost(model, advertisedId);\n\tif (tierCost) {\n\t\tcalculateCost({ ...model, cost: tierCost }, usage);\n\t\treturn;\n\t}\n\tif (advertisedId === \"priority\") {\n\t\tscaleUsageCost(usage, (model.fastRoute?.baseModelId ?? model.id) === \"gpt-5.5\" ? 2.5 : 2);\n\t}\n}\n\nfunction scaleUsageCost(usage: Usage, multiplier: number): void {\n\tusage.cost.input *= multiplier;\n\tusage.cost.output *= multiplier;\n\tusage.cost.cacheRead *= multiplier;\n\tusage.cost.cacheWrite *= multiplier;\n\tusage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;\n}\n\ntype ServiceTier = NonNullable<ResponsesServiceTier>;\n\nexport function normalizeResponseServiceTier(serviceTier: string | null | undefined): ServiceTier | undefined {\n\tif (serviceTier === null || serviceTier === undefined) return undefined;\n\treturn serviceTier === \"fast\" ? \"priority\" : (serviceTier as ServiceTier);\n}\n\nconst CHATGPT_AUTH_CLAIM = \"https://api.openai.com/auth\";\n\n/**\n * Whether a bearer token is a ChatGPT sign-in token (a JWT carrying OpenAI's auth claim) rather than an API key. Requests made with it are served by\n * the ChatGPT backend, which reports `default` as the tier of every response, whatever tier it applied.\n */\nexport function isChatGPTSubscriptionToken(token: string | undefined): boolean {\n\tconst payload = token?.split(\".\")[1];\n\tif (!payload || token?.split(\".\").length !== 3) return false;\n\ttry {\n\t\tconst claims = JSON.parse(atob(payload.replace(/-/g, \"+\").replace(/_/g, \"/\")));\n\t\treturn typeof claims?.[CHATGPT_AUTH_CLAIM] === \"object\" && claims[CHATGPT_AUTH_CLAIM] !== null;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * The tier a ChatGPT-backend response ran at. That backend reports `default` for every Flex, Fast or Ultrafast\n * request, so `default` there means the requested tier rather than a downgrade.\n */\nexport function resolveChatGPTBackendServiceTier(\n\tresponseServiceTier: ResponsesServiceTier | undefined,\n\trequestServiceTier: ResponsesServiceTier | undefined,\n): ResponsesServiceTier | undefined {\n\tif (\n\t\tresponseServiceTier === \"default\" &&\n\t\t(requestServiceTier === \"flex\" || requestServiceTier === \"priority\" || requestServiceTier === \"ultrafast\")\n\t) {\n\t\treturn requestServiceTier;\n\t}\n\treturn responseServiceTier ?? requestServiceTier;\n}\n\n/** Diagnostic type recorded when a requested Fast or Ultrafast tier did not apply to a response. */\nexport const SERVICE_TIER_UNAVAILABLE_DIAGNOSTIC = \"service_tier_unavailable\";\n\nconst SERVICE_TIER_SPEED_RANK: Readonly<Record<string, number>> = { priority: 1, ultrafast: 2 };\n\nfunction serviceTierSpeedRank(serviceTier: string): number {\n\treturn SERVICE_TIER_SPEED_RANK[serviceTier] ?? 0;\n}\n\nfunction serviceTierLabel(serviceTier: string): string {\n\treturn serviceTier === \"priority\" ? \"fast\" : serviceTier;\n}\n\n/**\n * Whether the server refused the request because of its `service_tier`: `400 Invalid service_tier argument`\n * on a plain request, or a status-less `error` event with `param: \"service_tier\"` on a streamed one.\n */\nexport function isServiceTierRejection(error: unknown): boolean {\n\tconst { status, body, message } = normalizeProviderError(error);\n\treturn (status === 400 || status === undefined) && /service_tier/i.test(`${message} ${body ?? \"\"}`);\n}\n\nfunction appendServiceTierWarning(\n\toutput: AssistantMessage,\n\tmodel: Pick<Model<Api>, \"fastRoute\" | \"id\">,\n\trequestedServiceTier: string,\n\tranAt: string,\n\treason: \"rejected\" | \"downgraded\",\n): void {\n\tconst baseModelId = model.fastRoute?.baseModelId ?? model.id;\n\tappendAssistantMessageDiagnostic(output, {\n\t\ttype: SERVICE_TIER_UNAVAILABLE_DIAGNOSTIC,\n\t\ttimestamp: Date.now(),\n\t\tdetails: {\n\t\t\tseverity: \"warning\",\n\t\t\tmessage: `${serviceTierLabel(requestedServiceTier)} isn't available for ${baseModelId} on this account; ran at ${serviceTierLabel(ranAt)}`,\n\t\t\treason,\n\t\t\trequestedServiceTier,\n\t\t\tranAtServiceTier: ranAt,\n\t\t},\n\t});\n}\n\n/** The server rejected the requested tier and the request was retried once without it. */\nexport function appendServiceTierRejectedWarning(\n\toutput: AssistantMessage,\n\tmodel: Pick<Model<Api>, \"fastRoute\" | \"id\">,\n\trequestedServiceTier: string,\n): void {\n\tappendServiceTierWarning(output, model, requestedServiceTier, \"default\", \"rejected\");\n}\n\n/**\n * Warn when the server reports a slower tier than the Fast or Ultrafast tier requested. A response\n * that reports no tier says nothing, so it never warns.\n */\nexport function appendServiceTierDowngradeWarning(\n\toutput: AssistantMessage,\n\tmodel: Pick<Model<Api>, \"fastRoute\" | \"id\">,\n\trequestedServiceTier: ResponsesServiceTier | undefined,\n\treportedServiceTier: ResponsesServiceTier | undefined,\n): void {\n\tconst requested = normalizeResponseServiceTier(requestedServiceTier);\n\tif (requested === undefined || reportedServiceTier == null) return;\n\tconst requestedRank = serviceTierSpeedRank(requested);\n\tif (requestedRank === 0 || serviceTierSpeedRank(reportedServiceTier) >= requestedRank) return;\n\tappendServiceTierWarning(output, model, requested, reportedServiceTier, \"downgraded\");\n}\n\n/**\n * Reject a payload hook that rewrote a field the model's route owns.\n *\n * A fast variant is a distinct selected, recorded, persisted, and billed identity, and the objective\n * requires it to send its route's upstream model ID and tier. A hook that changes either would send a\n * different model — or an ordinary-tier request — under the `-fast` identity Atomic recorded, and the\n * Codex routing identity would faithfully advertise whatever the hook left behind.\n *\n * Following the repository's precedent for discarded caller instructions, this rejects loudly rather\n * than silently restoring the route's values, so a misconfigured hook surfaces instead of hiding. A\n * hook may still rewrite every other field, and a model without a route keeps unrestricted freedom.\n */\nexport function assertPayloadPreservesFastRoute(\n\tmodel: Pick<Model<Api>, \"fastRoute\" | \"id\" | \"provider\" | \"serviceTiers\">,\n\tpayload: unknown,\n): void {\n\tconst fastRoute = model.fastRoute;\n\tif (!fastRoute) return;\n\tif (typeof payload !== \"object\" || payload === null || Array.isArray(payload)) {\n\t\tthrow new Error(\n\t\t\t`A request hook changed payload for fast model \"${model.provider}/${model.id}\" to a value that cannot carry ` +\n\t\t\t\t`the route's upstream model and service tier. A fast model variant must send its route's upstream model and ` +\n\t\t\t\t`service tier, because it is recorded, persisted, and billed under its own identity. Select the normal model ` +\n\t\t\t\t`\"${model.provider}/${fastRoute.baseModelId}\" if the request needs different routing, or return an object that ` +\n\t\t\t\t`preserves those fields.`,\n\t\t);\n\t}\n\tconst record = payload as Record<string, unknown>;\n\tconst conflicts: string[] = [];\n\tif (record.model !== fastRoute.upstreamModelId) {\n\t\tconflicts.push(`model (expected \"${fastRoute.upstreamModelId}\", got ${JSON.stringify(record.model)})`);\n\t}\n\tconst expectedServiceTier =\n\t\tfastRoute.serviceTier !== undefined && supportsServiceTier(model, fastRoute.serviceTier)\n\t\t\t? fastRoute.serviceTier\n\t\t\t: undefined;\n\tif (record.service_tier !== expectedServiceTier) {\n\t\tconflicts.push(\n\t\t\t`service_tier (expected ${JSON.stringify(expectedServiceTier)}, got ${JSON.stringify(record.service_tier)})`,\n\t\t);\n\t}\n\tif (conflicts.length === 0) return;\n\tthrow new Error(\n\t\t`A request hook changed ${conflicts.join(\" and \")} for fast model \"${model.provider}/${model.id}\". ` +\n\t\t\t`A fast model variant must send its route's upstream model and service tier, because it is ` +\n\t\t\t`recorded, persisted, and billed under its own identity. Select the normal model \"${model.provider}/${fastRoute.baseModelId}\" ` +\n\t\t\t`if the request needs different routing, or stop rewriting those fields.`,\n\t);\n}\n\nexport interface OpenAIResponsesStreamOptions {\n\tonProviderStreamEvent?: StreamOptions[\"onProviderStreamEvent\"];\n\tserviceTier?: ResponsesServiceTier;\n\tgrammarToolInputProperties?: ReadonlyMap<string, string>;\n\tresolveServiceTier?: (\n\t\tresponseServiceTier: ResponsesServiceTier | undefined,\n\t\trequestServiceTier: ResponsesServiceTier | undefined,\n\t) => ResponsesServiceTier | undefined;\n\tapplyServiceTierPricing?: (usage: Usage, serviceTier: ResponsesServiceTier | undefined) => void;\n\t/** Attach a warning when the response reports a slower tier than requested. Off where the reported tier is ambiguous. */\n\twarnOnServiceTierDowngrade?: boolean;\n}\n\nexport interface ConvertResponsesMessagesOptions {\n\tincludeSystemPrompt?: boolean;\n\tgrammarToolInputProperties?: ReadonlyMap<string, string>;\n\t/** Whether later system messages are sent in place; otherwise they are folded into the leading prompt. */\n\tsupportsMidConvoSystemMessages?: boolean;\n\tsupportsAdditionalTools?: boolean;\n\tsupportsToolSearch?: boolean;\n\ttoolOptions?: ConvertResponsesToolsOptions;\n\t/**\n\t * Effort for the reply being generated. When set, the thinking level is sent as\n\t * configuration_update items instead of a changing reasoning.effort, which would invalidate the\n\t * prompt cache. Each item sets the effort from that point on: one goes before every earlier\n\t * reply with the level recorded on it (`providerThinkingLevel`), and one with this effort goes\n\t * at the end. Earlier input therefore never changes. OpenAI documents the item before user\n\t * messages only. After tool results it was verified on gpt-6-luna (October 2026) to be accepted\n\t * and to apply to the next reply.\n\t */\n\tconfigurationUpdateEffort?: string;\n}\n\nexport interface ConvertResponsesToolsOptions {\n\tstrict?: boolean | null;\n\tsupportsStrictMode?: boolean;\n\tsupportsOpenAIGrammarTools?: boolean;\n\ttoolSearchResult?: boolean;\n}\n\n// =============================================================================\n// Message conversion\n// =============================================================================\n\nexport function convertResponsesMessages<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: TranscriptContext,\n\tallowedToolCallProviders: ReadonlySet<string>,\n\toptions?: ConvertResponsesMessagesOptions,\n): ResponseInput {\n\tconst normalizedContext = resolveTranscript(context, options?.supportsMidConvoSystemMessages);\n\tconst messages: ResponseInput = [];\n\n\tconst normalizeIdPart = (part: string): string => {\n\t\tconst sanitized = part.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n\t\tconst normalized = sanitized.length > 64 ? sanitized.slice(0, 64) : sanitized;\n\t\treturn normalized.replace(/_+$/, \"\");\n\t};\n\n\tconst buildForeignResponsesItemId = (itemId: string): string => {\n\t\tconst normalized = `fc_${shortHash(itemId)}`;\n\t\treturn normalized.length > 64 ? normalized.slice(0, 64) : normalized;\n\t};\n\n\tconst normalizeToolCallId = (id: string, _targetModel: Model<TApi>, source: AssistantMessage): string => {\n\t\tif (!allowedToolCallProviders.has(model.provider)) return normalizeIdPart(id);\n\t\tif (!id.includes(\"|\")) return normalizeIdPart(id);\n\t\tconst [callId, itemId] = id.split(\"|\");\n\t\tconst normalizedCallId = normalizeIdPart(callId);\n\t\tconst isForeignToolCall =\n\t\t\tnormalizeProviderId(source.provider) !== normalizeProviderId(model.provider) || source.api !== model.api;\n\t\tlet normalizedItemId = isForeignToolCall ? buildForeignResponsesItemId(itemId) : normalizeIdPart(itemId);\n\t\t// OpenAI Responses API requires item id to start with \"fc\"\n\t\tif (!normalizedItemId.startsWith(\"fc_\")) {\n\t\t\tnormalizedItemId = normalizeIdPart(`fc_${normalizedItemId}`);\n\t\t}\n\t\treturn `${normalizedCallId}|${normalizedItemId}`;\n\t};\n\n\tconst transformedMessages = transformMessages(normalizedContext.messages, model, normalizeToolCallId);\n\tconst transcriptTools = resolveTranscriptTools(\n\t\tnormalizedContext.messages,\n\t\t(options?.supportsAdditionalTools ?? false) || (options?.supportsToolSearch ?? false),\n\t);\n\tconst appendSystemToolAdditions = (message: SystemMessage, seed: string): void => {\n\t\tconst tools = transcriptTools.anchorsAdditions ? (message.toolsAdded ?? []) : [];\n\t\tif (tools.length === 0) return;\n\t\tif (options?.supportsAdditionalTools) {\n\t\t\tmessages.push({\n\t\t\t\ttype: \"additional_tools\",\n\t\t\t\trole: \"developer\",\n\t\t\t\ttools: convertResponsesTools(tools, options.toolOptions),\n\t\t\t} satisfies ResponseInputItem);\n\t\t\treturn;\n\t\t}\n\t\tif (!options?.supportsToolSearch) return;\n\t\tconst names = tools.map((tool) => tool.name);\n\t\tconst callId = `pi_tool_load_${shortHash(`${seed}:${names.join(\",\")}`)}`;\n\t\tmessages.push({\n\t\t\ttype: \"tool_search_call\",\n\t\t\tcall_id: callId,\n\t\t\texecution: \"client\",\n\t\t\tstatus: \"completed\",\n\t\t\targuments: { query: names.join(\" \"), limit: names.length },\n\t\t} satisfies ResponseInputItem);\n\t\tmessages.push({\n\t\t\ttype: \"tool_search_output\",\n\t\t\tcall_id: callId,\n\t\t\texecution: \"client\",\n\t\t\tstatus: \"completed\",\n\t\t\ttools: convertResponsesTools(tools, { ...options.toolOptions, toolSearchResult: true }),\n\t\t} satisfies ResponseToolSearchOutputItemParam);\n\t};\n\tconst includeInitialSystemMessage = options?.includeSystemPrompt ?? true;\n\tconst pushConfigurationUpdate = (effort: string): void => {\n\t\tmessages.push({\n\t\t\ttype: \"configuration_update\",\n\t\t\treasoning: { effort: effort as NonNullable<ResponseConfigurationUpdateItemParam.Reasoning[\"effort\"]> },\n\t\t} satisfies ResponseConfigurationUpdateItemParam);\n\t};\n\tconst compat = model.compat as { supportsDeveloperRole?: boolean } | undefined;\n\tconst instructionRole = model.reasoning && compat?.supportsDeveloperRole !== false ? \"developer\" : \"system\";\n\n\tlet msgIndex = 0;\n\tlet sourceIndex = 0;\n\tfor (const msg of transformedMessages) {\n\t\tconst isLeadingSystemMessage = sourceIndex++ === 0 && msg.role === \"system\";\n\t\tif (msg.role === \"system\") {\n\t\t\tif (!isLeadingSystemMessage) appendSystemToolAdditions(msg, `system:${msgIndex}`);\n\t\t\tif (!isLeadingSystemMessage || includeInitialSystemMessage) {\n\t\t\t\tconst text = isLeadingSystemMessage ? getSystemMessageText(msg) : renderSystemMessageUpdate(msg);\n\t\t\t\tif (text.length > 0) {\n\t\t\t\t\tmessages.push({ role: instructionRole, content: sanitizeSurrogates(text) });\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (msg.role === \"user\") {\n\t\t\tif (typeof msg.content === \"string\") {\n\t\t\t\tmessages.push({\n\t\t\t\t\trole: \"user\",\n\t\t\t\t\tcontent: [{ type: \"input_text\", text: sanitizeSurrogates(msg.content) }],\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst content: ResponseInputContent[] = msg.content.map((item): ResponseInputContent => {\n\t\t\t\t\tif (item.type === \"text\") {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: \"input_text\",\n\t\t\t\t\t\t\ttext: sanitizeSurrogates(item.text),\n\t\t\t\t\t\t} satisfies ResponseInputText;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"input_image\",\n\t\t\t\t\t\tdetail: \"auto\",\n\t\t\t\t\t\timage_url: `data:${item.mimeType};base64,${item.data}`,\n\t\t\t\t\t} satisfies ResponseInputImage;\n\t\t\t\t});\n\t\t\t\tif (content.length === 0) continue;\n\t\t\t\tmessages.push({\n\t\t\t\t\trole: \"user\",\n\t\t\t\t\tcontent,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (msg.role === \"assistant\") {\n\t\t\tconst output: ResponseInput = [];\n\t\t\tconst assistantMsg = msg as AssistantMessage;\n\t\t\tconst isSameProviderAndApi =\n\t\t\t\tnormalizeProviderId(assistantMsg.provider) === normalizeProviderId(model.provider) &&\n\t\t\t\tassistantMsg.api === model.api;\n\t\t\tconst isSameModel = isSameProviderAndApi && assistantMsg.model === model.id;\n\t\t\tconst isDifferentModel = isSameProviderAndApi && assistantMsg.model !== model.id;\n\t\t\tlet textBlockIndex = 0;\n\n\t\t\tfor (const block of msg.content) {\n\t\t\t\tif (block.type === \"thinking\") {\n\t\t\t\t\tif (block.thinkingSignature) {\n\t\t\t\t\t\tconst reasoningItem = JSON.parse(block.thinkingSignature) as ResponseReasoningItem;\n\t\t\t\t\t\toutput.push(reasoningItem);\n\t\t\t\t\t}\n\t\t\t\t} else if (block.type === \"text\") {\n\t\t\t\t\tconst textBlock = block as TextContent;\n\t\t\t\t\tconst parsedSignature = parseTextSignature(textBlock.textSignature);\n\t\t\t\t\tconst fallbackMessageId =\n\t\t\t\t\t\ttextBlockIndex === 0 ? `msg_pi_${msgIndex}` : `msg_pi_${msgIndex}_${textBlockIndex}`;\n\t\t\t\t\ttextBlockIndex++;\n\t\t\t\t\t// OpenAI requires id to be max 64 characters\n\t\t\t\t\tlet msgId = parsedSignature?.id;\n\t\t\t\t\tif (!msgId) {\n\t\t\t\t\t\tmsgId = fallbackMessageId;\n\t\t\t\t\t} else if (msgId.length > 64) {\n\t\t\t\t\t\tmsgId = `msg_${shortHash(msgId)}`;\n\t\t\t\t\t}\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\ttype: \"message\",\n\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\tcontent: [{ type: \"output_text\", text: sanitizeSurrogates(textBlock.text), annotations: [] }],\n\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\tid: msgId,\n\t\t\t\t\t\tphase: parsedSignature?.phase,\n\t\t\t\t\t} satisfies ResponseOutputMessage);\n\t\t\t\t} else if (block.type === \"toolCall\") {\n\t\t\t\t\tconst toolCall = block as ToolCall;\n\t\t\t\t\tconst [callId, itemIdRaw] = toolCall.id.split(\"|\");\n\t\t\t\t\tconst customInputProperty = options?.grammarToolInputProperties?.get(toolCall.name);\n\t\t\t\t\tlet itemId: string | undefined = itemIdRaw;\n\n\t\t\t\t\t// For different-model messages, set id to undefined to avoid pairing validation.\n\t\t\t\t\t// OpenAI tracks which item IDs were paired with rs_xxx reasoning items.\n\t\t\t\t\t// By omitting the id, we avoid triggering that validation (like cross-provider does).\n\t\t\t\t\t// Also drop ids that do not match the replayed item type: function_call ids must be fc_*\n\t\t\t\t\t// and custom_tool_call ids must be ctc_*. Foreign tool call ids are normalized to fc_*, and\n\t\t\t\t\t// a call can switch between the two types when grammar tool support differs.\n\t\t\t\t\tconst itemIdPrefix = customInputProperty === undefined ? \"fc_\" : \"ctc_\";\n\t\t\t\t\tif (isDifferentModel || !itemId?.startsWith(itemIdPrefix)) {\n\t\t\t\t\t\titemId = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (customInputProperty !== undefined) {\n\t\t\t\t\t\toutput.push({\n\t\t\t\t\t\t\ttype: \"custom_tool_call\",\n\t\t\t\t\t\t\tid: itemId,\n\t\t\t\t\t\t\tcall_id: callId,\n\t\t\t\t\t\t\tname: toolCall.name,\n\t\t\t\t\t\t\tinput: sanitizeSurrogates(\n\t\t\t\t\t\t\t\tgetGrammarToolInput(toolCall.name, toolCall.arguments, customInputProperty),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t...(isSameModel && toolCall.namespace !== undefined ? { namespace: toolCall.namespace } : {}),\n\t\t\t\t\t\t} satisfies ResponseOutputItem);\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput.push({\n\t\t\t\t\t\t\ttype: \"function_call\",\n\t\t\t\t\t\t\tid: itemId,\n\t\t\t\t\t\t\tcall_id: callId,\n\t\t\t\t\t\t\tname: toolCall.name,\n\t\t\t\t\t\t\targuments: JSON.stringify(toolCall.arguments),\n\t\t\t\t\t\t\t...(isSameModel && toolCall.namespace !== undefined ? { namespace: toolCall.namespace } : {}),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (output.length === 0) continue;\n\t\t\tif (\n\t\t\t\toptions?.configurationUpdateEffort !== undefined &&\n\t\t\t\tisSameModel &&\n\t\t\t\tmsg.providerThinkingLevel !== undefined\n\t\t\t) {\n\t\t\t\tpushConfigurationUpdate(msg.providerThinkingLevel);\n\t\t\t}\n\t\t\tmessages.push(...output);\n\t\t} else if (msg.role === \"toolResult\") {\n\t\t\tconst [callId] = msg.toolCallId.split(\"|\");\n\t\t\tconst output = convertToolResultOutput(model, msg.content);\n\n\t\t\tif (options?.grammarToolInputProperties?.has(msg.toolName)) {\n\t\t\t\tmessages.push({\n\t\t\t\t\ttype: \"custom_tool_call_output\",\n\t\t\t\t\tcall_id: callId,\n\t\t\t\t\toutput,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tmessages.push({\n\t\t\t\t\ttype: \"function_call_output\",\n\t\t\t\t\tcall_id: callId,\n\t\t\t\t\toutput,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (!isLeadingSystemMessage) msgIndex++;\n\t}\n\tif (options?.configurationUpdateEffort !== undefined) pushConfigurationUpdate(options.configurationUpdateEffort);\n\n\treturn messages;\n}\n\n// =============================================================================\n// Tool conversion\n// =============================================================================\n\nexport function convertResponsesTools(tools: readonly Tool[], options?: ConvertResponsesToolsOptions): OpenAITool[] {\n\tconst defaultStrict = options?.strict === undefined ? false : options.strict;\n\tconst supportsStrictMode = options?.supportsStrictMode ?? true;\n\tconst supportsOpenAIGrammarTools = options?.supportsOpenAIGrammarTools ?? false;\n\n\treturn tools.map((tool) => {\n\t\tconst grammar = resolveGrammarConstrainedSampling(tool, supportsOpenAIGrammarTools);\n\t\tif (grammar) {\n\t\t\treturn {\n\t\t\t\ttype: \"custom\",\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description,\n\t\t\t\tformat: {\n\t\t\t\t\ttype: \"grammar\",\n\t\t\t\t\tsyntax: grammar.format,\n\t\t\t\t\tdefinition: grammar.definition,\n\t\t\t\t},\n\t\t\t\t...(options?.toolSearchResult ? { defer_loading: true } : {}),\n\t\t\t} satisfies OpenAITool;\n\t\t}\n\n\t\tconst constrainedStrict = resolveJsonSchemaStrictSampling(tool, supportsStrictMode);\n\t\tconst strict = constrainedStrict ?? defaultStrict;\n\t\tconst functionTool: Omit<Extract<OpenAITool, { type: \"function\" }>, \"strict\"> & {\n\t\t\tstrict?: Extract<OpenAITool, { type: \"function\" }>[\"strict\"];\n\t\t} = {\n\t\t\ttype: \"function\",\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: getJsonSchemaToolParameters(tool, strict === true) as Record<string, unknown>,\n\t\t\t...(options?.toolSearchResult ? { defer_loading: true } : {}),\n\t\t};\n\t\tif (supportsStrictMode) {\n\t\t\tfunctionTool.strict = strict;\n\t\t}\n\t\treturn functionTool as OpenAITool;\n\t});\n}\n\n// =============================================================================\n// Stream processing\n// =============================================================================\n\ntype StreamingToolCall = ToolCall & {\n\tpartialJson?: string;\n\tcustomInput?: {\n\t\tproperty: string;\n\t\tjsonBuffer: GrammarToolInputJsonBuffer;\n\t};\n};\n\nfunction getCustomToolCallInput(block: StreamingToolCall): string {\n\tconst property = block.customInput?.property;\n\tif (property === undefined) return \"\";\n\tconst value = block.arguments[property];\n\treturn typeof value === \"string\" ? value : \"\";\n}\n\nfunction appendCustomToolCallInput(block: StreamingToolCall, nextInput: string, close: boolean): string | undefined {\n\tconst customInput = block.customInput;\n\tif (!customInput) return undefined;\n\tconst delta = appendGrammarToolInputJsonDelta(customInput.jsonBuffer, customInput.property, nextInput, close);\n\tblock.arguments = { [customInput.property]: nextInput };\n\treturn delta;\n}\n\ntype ResponsesOutputSlot =\n\t| { type: \"thinking\"; block: ThinkingContent; contentIndex: number }\n\t| { type: \"text\"; block: TextContent; contentIndex: number }\n\t| { type: \"toolCall\"; block: StreamingToolCall; contentIndex: number };\n\ntype ToolCallOutputSlot = Extract<ResponsesOutputSlot, { type: \"toolCall\" }>;\n\nexport async function processResponsesStream<TApi extends Api>(\n\topenaiStream: AsyncIterable<ResponseStreamEvent>,\n\toutput: AssistantMessage,\n\tstream: AssistantMessageEventStream,\n\tmodel: Model<TApi>,\n\toptions?: OpenAIResponsesStreamOptions,\n): Promise<void> {\n\tlet sawTerminalResponseEvent = false;\n\tconst outputSlots = new Map<number, ResponsesOutputSlot>();\n\tconst reasoningBlocksById = new Map<string, ThinkingContent>();\n\tconst applyMessagePhaseStopReason = (item: ResponseOutputItem): void => {\n\t\tif (item.type === \"message\" && item.phase === \"final_answer\") {\n\t\t\toutput.stopReason = \"stop\";\n\t\t}\n\t};\n\tconst getSlot = <TType extends ResponsesOutputSlot[\"type\"]>(\n\t\toutputIndex: number,\n\t\ttype: TType,\n\t): Extract<ResponsesOutputSlot, { type: TType }> | undefined => {\n\t\tconst slot = outputSlots.get(outputIndex);\n\t\treturn slot?.type === type ? (slot as Extract<ResponsesOutputSlot, { type: TType }>) : undefined;\n\t};\n\tconst pushToolCallDelta = (slot: ToolCallOutputSlot, delta: string | undefined): void => {\n\t\tif (delta === undefined) return;\n\t\tstream.push({\n\t\t\ttype: \"toolcall_delta\",\n\t\t\tcontentIndex: slot.contentIndex,\n\t\t\tdelta,\n\t\t\tpartial: output,\n\t\t});\n\t};\n\tconst createSlot = (outputIndex: number, item: ResponseOutputItem): ResponsesOutputSlot | undefined => {\n\t\tif (item.type === \"reasoning\") {\n\t\t\tconst block: ThinkingContent = { type: \"thinking\", thinking: \"\" };\n\t\t\toutput.content.push(block);\n\t\t\tconst slot = {\n\t\t\t\ttype: \"thinking\",\n\t\t\t\tblock,\n\t\t\t\tcontentIndex: output.content.length - 1,\n\t\t\t} satisfies ResponsesOutputSlot;\n\t\t\toutputSlots.set(outputIndex, slot);\n\t\t\tstream.push({ type: \"thinking_start\", contentIndex: slot.contentIndex, partial: output });\n\t\t\treturn slot;\n\t\t}\n\t\tif (item.type === \"message\") {\n\t\t\tapplyMessagePhaseStopReason(item);\n\t\t\tconst block: TextContent = { type: \"text\", text: \"\" };\n\t\t\toutput.content.push(block);\n\t\t\tconst slot = { type: \"text\", block, contentIndex: output.content.length - 1 } satisfies ResponsesOutputSlot;\n\t\t\toutputSlots.set(outputIndex, slot);\n\t\t\tstream.push({ type: \"text_start\", contentIndex: slot.contentIndex, partial: output });\n\t\t\treturn slot;\n\t\t}\n\t\tif (item.type === \"function_call\") {\n\t\t\tconst block: StreamingToolCall = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: `${item.call_id}|${item.id}`,\n\t\t\t\tname: item.name,\n\t\t\t\targuments: {},\n\t\t\t\t...(item.namespace !== undefined ? { namespace: item.namespace } : {}),\n\t\t\t\tpartialJson: item.arguments || \"\",\n\t\t\t};\n\t\t\toutput.content.push(block);\n\t\t\tconst slot = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tblock,\n\t\t\t\tcontentIndex: output.content.length - 1,\n\t\t\t} satisfies ResponsesOutputSlot;\n\t\t\toutputSlots.set(outputIndex, slot);\n\t\t\tstream.push({ type: \"toolcall_start\", contentIndex: slot.contentIndex, partial: output });\n\t\t\treturn slot;\n\t\t}\n\t\tif (item.type === \"custom_tool_call\") {\n\t\t\tconst inputProperty = options?.grammarToolInputProperties?.get(item.name) ?? \"input\";\n\t\t\tconst input = item.input || \"\";\n\t\t\tconst block: StreamingToolCall = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: `${item.call_id}|${item.id}`,\n\t\t\t\tname: item.name,\n\t\t\t\targuments: { [inputProperty]: input },\n\t\t\t\t...(item.namespace !== undefined ? { namespace: item.namespace } : {}),\n\t\t\t\tcustomInput: {\n\t\t\t\t\tproperty: inputProperty,\n\t\t\t\t\tjsonBuffer: { input: \"\", started: false, closed: false },\n\t\t\t\t},\n\t\t\t};\n\t\t\toutput.content.push(block);\n\t\t\tconst slot = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tblock,\n\t\t\t\tcontentIndex: output.content.length - 1,\n\t\t\t} satisfies ResponsesOutputSlot;\n\t\t\toutputSlots.set(outputIndex, slot);\n\t\t\tstream.push({ type: \"toolcall_start\", contentIndex: slot.contentIndex, partial: output });\n\t\t\treturn slot;\n\t\t}\n\t\treturn undefined;\n\t};\n\tconst getOrCreateSlot = (outputIndex: number, item: ResponseOutputItem): ResponsesOutputSlot | undefined => {\n\t\treturn outputSlots.get(outputIndex) ?? createSlot(outputIndex, item);\n\t};\n\t// Azure OpenAI can omit reasoning.encrypted_content from response.output_item.done\n\t// and provide it only in response.completed.response.output. Backfill the\n\t// persisted reasoning signature from the terminal response to keep store:false\n\t// multi-turn replay stateless. See https://github.com/earendil-works/pi/issues/6409.\n\tconst backfillReasoningSignatures = (responseOutput: ResponseOutputItem[]): void => {\n\t\tfor (const item of responseOutput) {\n\t\t\tif (item.type !== \"reasoning\" || !item.encrypted_content) continue;\n\t\t\tconst block = reasoningBlocksById.get(item.id);\n\t\t\tif (!block?.thinkingSignature) continue;\n\n\t\t\tconst storedItem = JSON.parse(block.thinkingSignature) as ResponseReasoningItem;\n\t\t\tif (storedItem.encrypted_content) continue;\n\t\t\tblock.thinkingSignature = JSON.stringify({\n\t\t\t\t...storedItem,\n\t\t\t\tencrypted_content: item.encrypted_content,\n\t\t\t});\n\t\t}\n\t};\n\tconst finalizeResponse = (\n\t\tresponse: Extract<ResponseStreamEvent, { type: \"response.completed\" | \"response.incomplete\" }>[\"response\"],\n\t): void => {\n\t\tsawTerminalResponseEvent = true;\n\t\tbackfillReasoningSignatures(response.output ?? []);\n\t\tif (response?.id) {\n\t\t\toutput.responseId = response.id;\n\t\t}\n\t\tif (response?.usage) {\n\t\t\tconst inputDetails = response.usage.input_tokens_details as\n\t\t\t\t| { cached_tokens?: number; cache_write_tokens?: number }\n\t\t\t\t| undefined;\n\t\t\tconst cachedTokens = inputDetails?.cached_tokens || 0;\n\t\t\tconst cacheWriteTokens = inputDetails?.cache_write_tokens || 0;\n\t\t\toutput.usage = {\n\t\t\t\t// OpenAI includes cached and cache-write tokens in input_tokens, so subtract both.\n\t\t\t\tinput: Math.max(0, (response.usage.input_tokens || 0) - cachedTokens - cacheWriteTokens),\n\t\t\t\toutput: response.usage.output_tokens || 0,\n\t\t\t\tcacheRead: cachedTokens,\n\t\t\t\tcacheWrite: cacheWriteTokens,\n\t\t\t\treasoning: response.usage.output_tokens_details?.reasoning_tokens || 0,\n\t\t\t\ttotalTokens: response.usage.total_tokens || 0,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t};\n\t\t}\n\t\tcalculateCost(model, output.usage);\n\t\tif (options?.applyServiceTierPricing) {\n\t\t\tconst responseServiceTier = normalizeResponseServiceTier(response?.service_tier);\n\t\t\tconst serviceTier = options.resolveServiceTier\n\t\t\t\t? options.resolveServiceTier(responseServiceTier, options.serviceTier)\n\t\t\t\t: (responseServiceTier ?? options.serviceTier);\n\t\t\toptions.applyServiceTierPricing(output.usage, serviceTier);\n\t\t\tif (options.warnOnServiceTierDowngrade) {\n\t\t\t\tappendServiceTierDowngradeWarning(output, model, options.serviceTier, responseServiceTier);\n\t\t\t}\n\t\t}\n\t\t// Map status to stop reason. For incomplete responses, retain the provider's\n\t\t// specific reason so max-output truncation and content filtering stay distinct.\n\t\tconst status = response?.status;\n\t\tconst incompleteDetails = response?.incomplete_details as { reason?: unknown } | null | undefined;\n\t\tconst incompleteReason = typeof incompleteDetails?.reason === \"string\" ? incompleteDetails.reason : undefined;\n\t\tif (output.rawStopReason !== \"refusal\") {\n\t\t\toutput.rawStopReason = incompleteReason ? `${status}.${incompleteReason}` : status;\n\t\t}\n\t\tconst mappedStop = mapStopReason(status, incompleteReason);\n\t\toutput.stopReason = mappedStop.stopReason;\n\t\toutput.errorMessage = mappedStop.errorMessage;\n\t\tif (output.content.some((b) => b.type === \"toolCall\") && output.stopReason === \"stop\") {\n\t\t\toutput.stopReason = \"toolUse\";\n\t\t}\n\t};\n\n\tfor await (const event of openaiStream) {\n\t\tawait options?.onProviderStreamEvent?.(event, model);\n\t\tif (event.type === \"response.created\") {\n\t\t\toutput.responseId = event.response.id;\n\t\t} else if (event.type === \"response.output_item.added\") {\n\t\t\tcreateSlot(event.output_index, event.item);\n\t\t} else if (event.type === \"response.reasoning_summary_text.delta\") {\n\t\t\tconst slot = getSlot(event.output_index, \"thinking\");\n\t\t\tif (!slot) continue;\n\t\t\tslot.block.thinking += event.delta;\n\t\t\tstream.push({\n\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\tdelta: event.delta,\n\t\t\t\tpartial: output,\n\t\t\t});\n\t\t} else if (event.type === \"response.reasoning_summary_part.done\") {\n\t\t\tconst slot = getSlot(event.output_index, \"thinking\");\n\t\t\tif (!slot) continue;\n\t\t\tslot.block.thinking += \"\\n\\n\";\n\t\t\tstream.push({\n\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\tdelta: \"\\n\\n\",\n\t\t\t\tpartial: output,\n\t\t\t});\n\t\t} else if (event.type === \"response.reasoning_text.delta\") {\n\t\t\tconst slot = getSlot(event.output_index, \"thinking\");\n\t\t\tif (!slot) continue;\n\t\t\tslot.block.thinking += event.delta;\n\t\t\tstream.push({\n\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\tdelta: event.delta,\n\t\t\t\tpartial: output,\n\t\t\t});\n\t\t} else if (event.type === \"response.output_text.delta\") {\n\t\t\tconst slot = getSlot(event.output_index, \"text\");\n\t\t\tif (!slot) continue;\n\t\t\tslot.block.text += event.delta;\n\t\t\tstream.push({\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\tdelta: event.delta,\n\t\t\t\tpartial: output,\n\t\t\t});\n\t\t} else if (event.type === \"response.refusal.delta\") {\n\t\t\toutput.rawStopReason = \"refusal\";\n\t\t\tconst slot = getSlot(event.output_index, \"text\");\n\t\t\tif (!slot) continue;\n\t\t\tslot.block.text += event.delta;\n\t\t\tstream.push({\n\t\t\t\ttype: \"text_delta\",\n\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\tdelta: event.delta,\n\t\t\t\tpartial: output,\n\t\t\t});\n\t\t} else if (event.type === \"response.function_call_arguments.delta\") {\n\t\t\tconst slot = getSlot(event.output_index, \"toolCall\");\n\t\t\tif (!slot || slot.block.partialJson === undefined) continue;\n\t\t\tslot.block.partialJson += event.delta;\n\t\t\tslot.block.arguments = parseStreamingJson(slot.block.partialJson);\n\t\t\tpushToolCallDelta(slot, event.delta);\n\t\t} else if (event.type === \"response.function_call_arguments.done\") {\n\t\t\tconst slot = getSlot(event.output_index, \"toolCall\");\n\t\t\tif (!slot || slot.block.partialJson === undefined) continue;\n\t\t\tconst previousPartialJson = slot.block.partialJson;\n\t\t\tslot.block.partialJson = event.arguments;\n\t\t\tslot.block.arguments = parseStreamingJson(slot.block.partialJson);\n\n\t\t\tif (event.arguments.startsWith(previousPartialJson)) {\n\t\t\t\tconst delta = event.arguments.slice(previousPartialJson.length);\n\t\t\t\tif (delta.length > 0) pushToolCallDelta(slot, delta);\n\t\t\t}\n\t\t} else if (event.type === \"response.custom_tool_call_input.delta\") {\n\t\t\tconst slot = getSlot(event.output_index, \"toolCall\");\n\t\t\tif (!slot || !slot.block.customInput) continue;\n\t\t\tpushToolCallDelta(\n\t\t\t\tslot,\n\t\t\t\tappendCustomToolCallInput(slot.block, getCustomToolCallInput(slot.block) + event.delta, false),\n\t\t\t);\n\t\t} else if (event.type === \"response.custom_tool_call_input.done\") {\n\t\t\tconst slot = getSlot(event.output_index, \"toolCall\");\n\t\t\tif (!slot || !slot.block.customInput) continue;\n\t\t\tpushToolCallDelta(slot, appendCustomToolCallInput(slot.block, event.input, true));\n\t\t} else if (event.type === \"response.output_item.done\") {\n\t\t\tconst item = event.item;\n\t\t\tapplyMessagePhaseStopReason(item);\n\t\t\tconst slot = getOrCreateSlot(event.output_index, item);\n\n\t\t\tif (item.type === \"reasoning\" && slot?.type === \"thinking\") {\n\t\t\t\tconst summaryText = item.summary?.map((s) => s.text).join(\"\\n\\n\") || \"\";\n\t\t\t\tconst contentText = item.content?.map((c) => c.text).join(\"\\n\\n\") || \"\";\n\t\t\t\tslot.block.thinking = summaryText || contentText || slot.block.thinking;\n\t\t\t\tslot.block.thinkingSignature = JSON.stringify(item);\n\t\t\t\treasoningBlocksById.set(item.id, slot.block);\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"thinking_end\",\n\t\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\t\tcontent: slot.block.thinking,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t\toutputSlots.delete(event.output_index);\n\t\t\t} else if (item.type === \"message\" && slot?.type === \"text\") {\n\t\t\t\tif (item.content?.some((content) => content.type === \"refusal\")) output.rawStopReason = \"refusal\";\n\t\t\t\tslot.block.text = item.content?.map((c) => (c.type === \"output_text\" ? c.text : c.refusal)).join(\"\") || \"\";\n\t\t\t\tslot.block.textSignature = encodeTextSignatureV1(item.id, item.phase ?? undefined);\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"text_end\",\n\t\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\t\tcontent: slot.block.text,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t\toutputSlots.delete(event.output_index);\n\t\t\t} else if (\n\t\t\t\titem.type === \"function_call\" &&\n\t\t\t\tslot?.type === \"toolCall\" &&\n\t\t\t\tslot.block.partialJson !== undefined\n\t\t\t) {\n\t\t\t\tObject.assign(slot.block, parseToolCallArguments(item.arguments || slot.block.partialJson));\n\t\t\t\tif (item.namespace !== undefined) slot.block.namespace = item.namespace;\n\t\t\t\t// Finalize in-place and strip the scratch buffer so replay only\n\t\t\t\t// carries parsed arguments.\n\t\t\t\tdelete slot.block.partialJson;\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\t\ttoolCall: slot.block,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t\toutputSlots.delete(event.output_index);\n\t\t\t} else if (item.type === \"custom_tool_call\" && slot?.type === \"toolCall\" && slot.block.customInput) {\n\t\t\t\tpushToolCallDelta(\n\t\t\t\t\tslot,\n\t\t\t\t\tappendCustomToolCallInput(slot.block, item.input ?? getCustomToolCallInput(slot.block), true),\n\t\t\t\t);\n\t\t\t\tif (item.namespace !== undefined) slot.block.namespace = item.namespace;\n\t\t\t\tdelete slot.block.customInput;\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\tcontentIndex: slot.contentIndex,\n\t\t\t\t\ttoolCall: slot.block,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t\toutputSlots.delete(event.output_index);\n\t\t\t}\n\t\t} else if (event.type === \"response.completed\" || event.type === \"response.incomplete\") {\n\t\t\tfinalizeResponse(event.response);\n\t\t} else if (event.type === \"error\") {\n\t\t\tthrow new Error(`Error Code ${event.code}: ${event.message}` || \"Unknown error\");\n\t\t} else if (event.type === \"response.failed\") {\n\t\t\tsawTerminalResponseEvent = true;\n\t\t\toutput.rawStopReason = event.response?.status;\n\t\t\tconst error = event.response?.error;\n\t\t\tconst details = event.response?.incomplete_details;\n\t\t\tconst msg = error\n\t\t\t\t? `${error.code || \"unknown\"}: ${error.message || \"no message\"}`\n\t\t\t\t: details?.reason\n\t\t\t\t\t? `incomplete: ${details.reason}`\n\t\t\t\t\t: \"Unknown error (no error details in response)\";\n\t\t\tthrow new Error(msg);\n\t\t}\n\t}\n\tif (!sawTerminalResponseEvent) {\n\t\tthrow new Error(\"OpenAI Responses stream ended before a terminal response event\");\n\t}\n\t// The agent runs every tool call in the final message. Refuse to hand over calls whose\n\t// output_item.done never arrived: their arguments may be cut off or mixed up, e.g. when a\n\t// non-compliant server omits output_index. Finished calls have their scratch buffers removed.\n\tif (output.stopReason === \"toolUse\") {\n\t\tfor (const block of output.content) {\n\t\t\tif (block.type !== \"toolCall\") continue;\n\t\t\tconst toolCall = block as StreamingToolCall;\n\t\t\tif (toolCall.partialJson !== undefined || toolCall.customInput !== undefined) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`OpenAI Responses stream completed with an unfinished tool call: ${toolCall.name} (${toolCall.id})`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction mapStopReason(\n\tstatus: OpenAI.Responses.ResponseStatus | undefined,\n\tincompleteReason?: string,\n): { stopReason: StopReason; errorMessage?: string } {\n\tif (!status) return { stopReason: \"stop\" };\n\tswitch (status) {\n\t\tcase \"completed\":\n\t\t\treturn { stopReason: \"stop\" };\n\t\tcase \"incomplete\":\n\t\t\tif (incompleteReason === \"max_output_tokens\") {\n\t\t\t\treturn { stopReason: \"length\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tstopReason: \"error\",\n\t\t\t\terrorMessage: incompleteReason\n\t\t\t\t\t? `Response incomplete: ${incompleteReason}`\n\t\t\t\t\t: \"Response incomplete without a provider reason\",\n\t\t\t};\n\t\tcase \"failed\":\n\t\tcase \"cancelled\":\n\t\t\treturn { stopReason: \"error\" };\n\t\t// These two are wonky ...\n\t\tcase \"in_progress\":\n\t\tcase \"queued\":\n\t\t\treturn { stopReason: \"stop\" };\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = status;\n\t\t\tthrow new Error(`Unhandled stop reason: ${_exhaustive}`);\n\t\t}\n\t}\n}\n"]}
@@ -1,4 +1,19 @@
1
- import type { Api, AssistantMessage, Message, Model } from "../types.ts";
1
+ import type { Api, AssistantMessage, ImageContent, Message, Model, TextContent, ToolResultMessage } from "../types.ts";
2
+ /** An error tool result split into a text-only result and the images to send after the tool results. */
3
+ export interface SplitErrorToolResult {
4
+ /** The result content with each run of images replaced by a note. */
5
+ content: TextContent[];
6
+ /** Text naming the tool call, to send before `images`. */
7
+ caption: string;
8
+ images: ImageContent[];
9
+ }
10
+ /**
11
+ * Split the images out of an error tool result, for APIs that reject images in error results
12
+ * (Anthropic, and Claude on Bedrock). Send the returned content as the tool result and the caption and
13
+ * images after all tool results of the turn, in the same user message. Returns undefined for results
14
+ * that need no split (#10794).
15
+ */
16
+ export declare function splitErrorToolResultImages(msg: ToolResultMessage): SplitErrorToolResult | undefined;
2
17
  /**
3
18
  * Normalize tool call ID for cross-provider compatibility.
4
19
  * OpenAI Responses API generates IDs that are 450+ chars with special characters like `|`.
@@ -1 +1 @@
1
- {"version":3,"file":"transform-messages.d.ts","sourceRoot":"","sources":["../../src/api/transform-messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEX,GAAG,EACH,gBAAgB,EAEhB,OAAO,EACP,KAAK,EAIL,MAAM,aAAa,CAAC;AA6GrB;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,SAAS,GAAG,EACjD,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,mBAAmB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,KAAK,MAAM,GACxF,OAAO,EAAE,CAgOX"}
1
+ {"version":3,"file":"transform-messages.d.ts","sourceRoot":"","sources":["../../src/api/transform-messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEX,GAAG,EACH,gBAAgB,EAChB,YAAY,EACZ,OAAO,EACP,KAAK,EACL,WAAW,EAEX,iBAAiB,EACjB,MAAM,aAAa,CAAC;AA4BrB,wGAAwG;AACxG,MAAM,WAAW,oBAAoB;IACpC,qEAAqE;IACrE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,SAAS,CASnG;AAoFD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,SAAS,GAAG,EACjD,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,mBAAmB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,KAAK,MAAM,GACxF,OAAO,EAAE,CA0NX"}
@@ -2,6 +2,7 @@ import { normalizeProviderId } from "../provider-id.js";
2
2
  const NON_VISION_USER_IMAGE_PLACEHOLDER = "(image omitted: model does not support images)";
3
3
  const NON_VISION_TOOL_IMAGE_PLACEHOLDER = "(tool image omitted: model does not support images)";
4
4
  const NON_DOCUMENT_USER_PLACEHOLDER = "(document omitted: model does not support document input)";
5
+ const ERROR_TOOL_IMAGE_PLACEHOLDER = "(image attached after the tool results)";
5
6
  /**
6
7
  * Whether the target model's API adjudicates thinking-block model binding itself.
7
8
  *
@@ -23,6 +24,24 @@ function delegatesThinkingModelBinding(model) {
23
24
  const compat = model.compat;
24
25
  return compat?.delegatesThinkingModelBinding === true;
25
26
  }
27
+ /**
28
+ * Split the images out of an error tool result, for APIs that reject images in error results
29
+ * (Anthropic, and Claude on Bedrock). Send the returned content as the tool result and the caption and
30
+ * images after all tool results of the turn, in the same user message. Returns undefined for results
31
+ * that need no split (#10794).
32
+ */
33
+ export function splitErrorToolResultImages(msg) {
34
+ if (!msg.isError)
35
+ return undefined;
36
+ const images = msg.content.filter((block) => block.type === "image");
37
+ if (images.length === 0)
38
+ return undefined;
39
+ return {
40
+ content: replaceImagesWithPlaceholder(msg.content, ERROR_TOOL_IMAGE_PLACEHOLDER),
41
+ caption: `Images from the error result of tool call ${msg.toolCallId} (${msg.toolName}):`,
42
+ images,
43
+ };
44
+ }
26
45
  // Preserves the caller's block union minus images, so a user message keeps its document blocks
27
46
  // while a tool result — which cannot carry one — keeps its narrower type.
28
47
  function replaceImagesWithPlaceholder(content, placeholder) {
@@ -164,24 +183,18 @@ export function transformMessages(messages, model, normalizeToolCallId) {
164
183
  if (block.type === "thinking") {
165
184
  if (precedesFallbackBoundary)
166
185
  return [];
167
- // Redacted thinking is opaque encrypted content the client cannot rewrite.
168
- // Replay it where the API adjudicates it; otherwise drop it to avoid API errors.
169
- if (block.redacted) {
170
- return preservesThinking ? block : [];
171
- }
172
- // Keep signed thinking blocks for replay even when the thinking text is empty
173
- // (OpenAI encrypted reasoning, or Anthropic `display: "omitted"`).
174
- if (preservesThinking && block.thinkingSignature)
186
+ // Thinking from another model is dropped unless the API adjudicates it. Signatures and
187
+ // encrypted reasoning are only valid for the model that produced them, and sending
188
+ // readable thinking as plain text makes the new model treat it as part of the visible reply.
189
+ if (!preservesThinking)
190
+ return [];
191
+ // Keep redacted and signed blocks even if the thinking text is empty
192
+ // (OpenAI encrypted reasoning, or Anthropic `display: "omitted"`); they are needed for replay.
193
+ if (block.redacted || block.thinkingSignature)
175
194
  return block;
176
- // Skip empty thinking blocks, convert others to plain text
177
195
  if (!block.thinking || block.thinking.trim() === "")
178
196
  return [];
179
- if (preservesThinking)
180
- return block;
181
- return {
182
- type: "text",
183
- text: block.thinking,
184
- };
197
+ return block;
185
198
  }
186
199
  if (block.type === "text") {
187
200
  if (isSameModel)