@caupulican/pi-ai 0.90.12 → 0.91.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/dist/providers/amazon-bedrock.js +4 -4
- package/dist/providers/amazon-bedrock.js.map +1 -1
- package/dist/providers/openai-codex-responses.d.ts.map +1 -1
- package/dist/providers/openai-codex-responses.js +0 -6
- package/dist/providers/openai-codex-responses.js.map +1 -1
- package/dist/providers/openai-completions.d.ts.map +1 -1
- package/dist/providers/openai-completions.js +4 -4
- package/dist/providers/openai-completions.js.map +1 -1
- package/dist/providers/openai-responses-shared.d.ts.map +1 -1
- package/dist/providers/openai-responses-shared.js +297 -190
- package/dist/providers/openai-responses-shared.js.map +1 -1
- package/dist/providers/provider-runtime.d.ts +10 -1
- package/dist/providers/provider-runtime.d.ts.map +1 -1
- package/dist/providers/provider-runtime.js +22 -3
- package/dist/providers/provider-runtime.js.map +1 -1
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +28 -1
- package/dist/stream.js.map +1 -1
- package/dist/utils/event-stream.d.ts +8 -0
- package/dist/utils/event-stream.d.ts.map +1 -1
- package/dist/utils/event-stream.js +58 -3
- package/dist/utils/event-stream.js.map +1 -1
- package/dist/utils/tool-repair/registry.d.ts +18 -0
- package/dist/utils/tool-repair/registry.d.ts.map +1 -1
- package/dist/utils/tool-repair/registry.js +29 -0
- package/dist/utils/tool-repair/registry.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-responses-shared.js","sourceRoot":"","sources":["../../src/providers/openai-responses-shared.ts"],"names":[],"mappings":"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","sourcesContent":["import type OpenAI from \"openai\";\nimport type {\n\tTool as OpenAITool,\n\tResponseCreateParamsStreaming,\n\tResponseFunctionCallOutputItemList,\n\tResponseFunctionToolCall,\n\tResponseInput,\n\tResponseInputContent,\n\tResponseInputImage,\n\tResponseInputText,\n\tResponseOutputMessage,\n\tResponseOutputRefusal,\n\tResponseOutputText,\n\tResponseReasoningItem,\n\tResponseStreamEvent,\n} from \"openai/resources/responses/responses.js\";\nimport { calculateCost } from \"../models.ts\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tContext,\n\tImageContent,\n\tModel,\n\tStopReason,\n\tTextContent,\n\tTextSignatureV1,\n\tThinkingContent,\n\tTool,\n\tToolCall,\n\tUsage,\n} from \"../types.ts\";\nimport type { AssistantMessageEventStream } from \"../utils/event-stream.ts\";\nimport { shortHash } from \"../utils/hash.ts\";\nimport { parseStreamingJson } from \"../utils/json-parse.ts\";\nimport { sanitizeSurrogates } from \"../utils/sanitize-unicode.ts\";\nimport { createToolNameMap, type ToolNameMap } from \"../utils/tool-names.ts\";\nimport { joinTextContent, transformMessages } from \"./transform-messages.ts\";\n\n// =============================================================================\n// Utilities\n// =============================================================================\n\nconst RESERVED_RESPONSES_TOOL_NAMES = new Set([\n\t\"api_tool\",\n\t\"browser\",\n\t\"computer\",\n\t\"container\",\n\t\"file_search\",\n\t\"functions\",\n\t\"image_gen\",\n\t\"multi_tool_use\",\n\t\"python\",\n\t\"python_user_visible\",\n\t\"submodel_delegator\",\n\t\"terminal\",\n\t\"tool_search\",\n\t\"web\",\n]);\n\nexport function createOpenAIResponsesToolNameMap(tools: readonly Tool[]): ToolNameMap {\n\treturn createToolNameMap(tools, { reservedNames: RESERVED_RESPONSES_TOOL_NAMES });\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\nexport interface OpenAIResponsesStreamOptions {\n\ttoolNameMap?: ToolNameMap;\n\tserviceTier?: ResponseCreateParamsStreaming[\"service_tier\"];\n\tresolveServiceTier?: (\n\t\tresponseServiceTier: ResponseCreateParamsStreaming[\"service_tier\"] | undefined,\n\t\trequestServiceTier: ResponseCreateParamsStreaming[\"service_tier\"] | undefined,\n\t) => ResponseCreateParamsStreaming[\"service_tier\"] | undefined;\n\tapplyServiceTierPricing?: (\n\t\tusage: Usage,\n\t\tserviceTier: ResponseCreateParamsStreaming[\"service_tier\"] | undefined,\n\t) => void;\n}\n\nexport interface ConvertResponsesToolsOptions {\n\tstrict?: boolean | null;\n\ttoolNameMap?: ToolNameMap;\n}\n\nexport interface ConvertResponsesMessagesOptions {\n\t/** null omits image detail for transports such as ChatGPT Responses Lite. */\n\timageDetail?: \"auto\" | null;\n\ttoolNameMap?: ToolNameMap;\n}\n\ninterface InputTokenDetailsWithOrchestration {\n\tcached_tokens?: number;\n\tcache_write_tokens?: number;\n\torchestration_input_tokens?: number;\n\torchestration_input_cached_tokens?: number;\n}\n\ninterface OutputTokenDetailsWithOrchestration {\n\torchestration_output_tokens?: number;\n}\n\nfunction createResponseInputImage(imageUrl: string, imageDetail: \"auto\" | null): ResponseInputImage {\n\tconst inputImage: ResponseInputImage = {\n\t\ttype: \"input_image\",\n\t\tdetail: imageDetail ?? \"auto\",\n\t\timage_url: imageUrl,\n\t};\n\tif (imageDetail === null) {\n\t\t// Responses Lite requires the image detail property to be absent.\n\t\tdelete (inputImage as Partial<ResponseInputImage>).detail;\n\t}\n\treturn inputImage;\n}\n\nfunction applyFuguUltraPricing<TApi extends Api>(model: Model<TApi>, usage: Usage): void {\n\tif (model.provider !== \"fugu\" || model.id !== \"fugu-ultra\") return;\n\n\t// Sakana pricing has a higher Fugu Ultra tier once context exceeds 272K tokens.\n\t// Source: https://console.sakana.ai/pricing\n\tconst highContext = usage.input + usage.cacheRead > 272_000;\n\tconst inputRate = highContext ? 10 : 5;\n\tconst outputRate = highContext ? 45 : 30;\n\tconst cacheReadRate = highContext ? 1 : 0.5;\n\tusage.cost.input = (inputRate / 1_000_000) * usage.input;\n\tusage.cost.output = (outputRate / 1_000_000) * usage.output;\n\tusage.cost.cacheRead = (cacheReadRate / 1_000_000) * usage.cacheRead;\n\tusage.cost.cacheWrite = 0;\n\tusage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead;\n}\n\nexport function applyOpenAIServiceTierPricing<TApi extends Api>(\n\tusage: Usage,\n\tserviceTier: ResponseCreateParamsStreaming[\"service_tier\"] | undefined,\n\tmodel: Pick<Model<TApi>, \"id\">,\n): void {\n\tconst multiplier =\n\t\tserviceTier === \"flex\" ? 0.5 : serviceTier === \"priority\" ? (model.id === \"gpt-5.5\" ? 2.5 : 2) : 1;\n\tif (multiplier === 1) return;\n\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\n// =============================================================================\n// Message conversion\n// =============================================================================\n\nexport function buildResponsesInstructions(context: Context): string | undefined {\n\treturn context.systemPrompt ? sanitizeSurrogates(context.systemPrompt) : undefined;\n}\n\nexport function convertResponsesMessages<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\tallowedToolCallProviders: ReadonlySet<string>,\n\toptions?: ConvertResponsesMessagesOptions,\n): ResponseInput {\n\tconst messages: ResponseInput = [];\n\tconst imageDetail = options?.imageDetail === undefined ? \"auto\" : options.imageDetail;\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 = source.provider !== 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(context.messages, model, normalizeToolCallId);\n\n\tlet msgIndex = 0;\n\tfor (const msg of transformedMessages) {\n\t\tif (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 createResponseInputImage(`data:${item.mimeType};base64,${item.data}`, imageDetail);\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 isDifferentModel =\n\t\t\t\tassistantMsg.model !== model.id &&\n\t\t\t\tassistantMsg.provider === model.provider &&\n\t\t\t\tassistantMsg.api === model.api;\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\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 fc_xxx 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\tif (isDifferentModel && itemId?.startsWith(\"fc_\")) {\n\t\t\t\t\t\titemId = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\ttype: \"function_call\",\n\t\t\t\t\t\tid: itemId,\n\t\t\t\t\t\tcall_id: callId,\n\t\t\t\t\t\tname: options?.toolNameMap?.toProviderName(toolCall.name) ?? toolCall.name,\n\t\t\t\t\t\targuments: JSON.stringify(toolCall.arguments),\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\tmessages.push(...output);\n\t\t} else if (msg.role === \"toolResult\") {\n\t\t\tconst textResult = joinTextContent(msg.content);\n\t\t\tconst hasImages = msg.content.some((c): c is ImageContent => c.type === \"image\");\n\t\t\tconst hasText = textResult.length > 0;\n\t\t\tconst [callId] = msg.toolCallId.split(\"|\");\n\n\t\t\tlet output: string | ResponseFunctionCallOutputItemList;\n\t\t\tif (hasImages && model.input.includes(\"image\")) {\n\t\t\t\tconst contentParts: ResponseFunctionCallOutputItemList = [];\n\n\t\t\t\tif (hasText) {\n\t\t\t\t\tcontentParts.push({\n\t\t\t\t\t\ttype: \"input_text\",\n\t\t\t\t\t\ttext: sanitizeSurrogates(textResult),\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (const block of msg.content) {\n\t\t\t\t\tif (block.type === \"image\") {\n\t\t\t\t\t\tcontentParts.push(\n\t\t\t\t\t\t\tcreateResponseInputImage(`data:${block.mimeType};base64,${block.data}`, imageDetail),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\toutput = contentParts;\n\t\t\t} else {\n\t\t\t\toutput = sanitizeSurrogates(hasText ? textResult : \"(see attached image)\");\n\t\t\t}\n\n\t\t\tmessages.push({\n\t\t\t\ttype: \"function_call_output\",\n\t\t\t\tcall_id: callId,\n\t\t\t\toutput,\n\t\t\t});\n\t\t}\n\t\tmsgIndex++;\n\t}\n\n\treturn messages;\n}\n\n// =============================================================================\n// Tool conversion\n// =============================================================================\n\nexport function convertResponsesTools(tools: Tool[], options?: ConvertResponsesToolsOptions): OpenAITool[] {\n\tconst strict = options?.strict === undefined ? false : options.strict;\n\treturn tools.map((tool) => ({\n\t\ttype: \"function\",\n\t\tname: options?.toolNameMap?.toProviderName(tool.name) ?? tool.name,\n\t\tdescription: tool.description,\n\t\tparameters: tool.parameters as any, // TypeBox already generates JSON Schema\n\t\tstrict,\n\t}));\n}\n\n// =============================================================================\n// Stream processing\n// =============================================================================\n\nconst REASONING_SUMMARY_DELIMITER_ONLY = /^<!--\\s*-->$/;\nconst REASONING_SUMMARY_EMPTY_HTML_COMMENT = /(?:\\n\\s*)*<!--\\s*-->\\s*$/;\n\nfunction isReasoningSummaryDelimiterOnly(text: string): boolean {\n\treturn REASONING_SUMMARY_DELIMITER_ONLY.test(text.trim());\n}\n\nfunction cleanReasoningSummaryText(text: string): string {\n\tif (isReasoningSummaryDelimiterOnly(text)) return \"\";\n\treturn text.replace(REASONING_SUMMARY_EMPTY_HTML_COMMENT, \"\").trimEnd();\n}\n\nfunction normalizeReasoningSummaryText(parts: readonly { text?: string }[] | undefined): string {\n\treturn (parts ?? [])\n\t\t.map((part) => cleanReasoningSummaryText(part.text ?? \"\"))\n\t\t.filter((text) => text.trim().length > 0)\n\t\t.join(\"\\n\\n\");\n}\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 currentItem: ResponseReasoningItem | ResponseOutputMessage | ResponseFunctionToolCall | null = null;\n\tlet currentBlock: ThinkingContent | TextContent | (ToolCall & { partialJson: string }) | null = null;\n\tlet currentReasoningSummaryPartText = \"\";\n\tlet sawTerminalResponseEvent = false;\n\tconst reasoningBlocksById = new Map<string, ThinkingContent>();\n\tconst blocks = output.content;\n\tconst blockIndex = () => blocks.length - 1;\n\tconst ensureMessageOutputTextPart = (): ResponseOutputText | undefined => {\n\t\tif (currentItem?.type !== \"message\") return undefined;\n\t\tconst lastPart = currentItem.content[currentItem.content.length - 1];\n\t\tif (lastPart?.type === \"output_text\") return lastPart;\n\t\tconst part: ResponseOutputText = { type: \"output_text\", text: \"\", annotations: [] };\n\t\tcurrentItem.content.push(part);\n\t\treturn part;\n\t};\n\tconst ensureMessageRefusalPart = (): ResponseOutputRefusal | undefined => {\n\t\tif (currentItem?.type !== \"message\") return undefined;\n\t\tconst lastPart = currentItem.content[currentItem.content.length - 1];\n\t\tif (lastPart?.type === \"refusal\") return lastPart;\n\t\tconst part: ResponseOutputRefusal = { type: \"refusal\", refusal: \"\" };\n\t\tcurrentItem.content.push(part);\n\t\treturn part;\n\t};\n\tconst backfillReasoningSignatures = (responseOutput: ResponseReasoningItem[]): void => {\n\t\tfor (const item of responseOutput) {\n\t\t\tif (!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({ ...storedItem, encrypted_content: item.encrypted_content });\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 ?? []).filter((item) => item.type === \"reasoning\"));\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 InputTokenDetailsWithOrchestration | undefined;\n\t\t\tconst outputDetails = response.usage.output_tokens_details as OutputTokenDetailsWithOrchestration | undefined;\n\t\t\tconst cachedTokens = inputDetails?.cached_tokens || 0;\n\t\t\tconst cacheWriteTokens = inputDetails?.cache_write_tokens || 0;\n\t\t\tlet inputTokens = Math.max(0, (response.usage.input_tokens || 0) - cachedTokens - cacheWriteTokens);\n\t\t\tlet outputTokens = response.usage.output_tokens || 0;\n\t\t\tlet cacheReadTokens = cachedTokens;\n\t\t\tconst totalTokens = response.usage.total_tokens || 0;\n\t\t\tif (model.provider === \"fugu\") {\n\t\t\t\tconst orchestrationInputTokens = inputDetails?.orchestration_input_tokens || 0;\n\t\t\t\tconst orchestrationInputCachedTokens = inputDetails?.orchestration_input_cached_tokens || 0;\n\t\t\t\tconst orchestrationOutputTokens = outputDetails?.orchestration_output_tokens || 0;\n\t\t\t\tinputTokens += orchestrationInputTokens;\n\t\t\t\tcacheReadTokens += orchestrationInputCachedTokens;\n\t\t\t\toutputTokens += orchestrationOutputTokens;\n\t\t\t}\n\t\t\tconst providerCost = (response.usage as { cost?: number }).cost ?? 0;\n\t\t\toutput.usage = {\n\t\t\t\t// OpenAI includes cached tokens in input_tokens, so subtract to get non-cached input.\n\t\t\t\t// Sakana Fugu Ultra also reports billable orchestration tokens in token details fields.\n\t\t\t\t// Source: https://console.sakana.ai/pricing#usage-field-details\n\t\t\t\tinput: inputTokens,\n\t\t\t\toutput: outputTokens,\n\t\t\t\tcacheRead: cacheReadTokens,\n\t\t\t\tcacheWrite: cacheWriteTokens,\n\t\t\t\ttotalTokens,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: providerCost },\n\t\t\t};\n\t\t}\n\t\tcalculateCost(model, output.usage, {\n\t\t\t// response.usage is absent on some streams; this call sits outside the guard above.\n\t\t\tproviderSuppliedTotal: Boolean((response.usage as { cost?: number } | undefined)?.cost),\n\t\t});\n\t\tapplyFuguUltraPricing(model, output.usage);\n\t\tif (options?.applyServiceTierPricing) {\n\t\t\tconst serviceTier = options.resolveServiceTier\n\t\t\t\t? options.resolveServiceTier(response?.service_tier, options.serviceTier)\n\t\t\t\t: (response?.service_tier ?? options.serviceTier);\n\t\t\toptions.applyServiceTierPricing(output.usage, serviceTier);\n\t\t}\n\t\t// Map status to stop reason\n\t\toutput.stopReason = mapStopReason(response?.status);\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\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\tconst item = event.item;\n\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\tcurrentItem = item;\n\t\t\t\tcurrentBlock = { type: \"thinking\", thinking: \"\" };\n\t\t\t\tcurrentReasoningSummaryPartText = \"\";\n\t\t\t\toutput.content.push(currentBlock);\n\t\t\t\tstream.push({ type: \"thinking_start\", contentIndex: blockIndex(), partial: output });\n\t\t\t} else if (item.type === \"message\") {\n\t\t\t\tcurrentItem = item;\n\t\t\t\tcurrentBlock = { type: \"text\", text: \"\" };\n\t\t\t\toutput.content.push(currentBlock);\n\t\t\t\tstream.push({ type: \"text_start\", contentIndex: blockIndex(), partial: output });\n\t\t\t} else if (item.type === \"function_call\") {\n\t\t\t\tcurrentItem = item;\n\t\t\t\tcurrentBlock = {\n\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\tid: `${item.call_id}|${item.id}`,\n\t\t\t\t\tname: options?.toolNameMap?.toOriginalName(item.name) ?? item.name,\n\t\t\t\t\targuments: {},\n\t\t\t\t\tpartialJson: item.arguments || \"\",\n\t\t\t\t};\n\t\t\t\toutput.content.push(currentBlock);\n\t\t\t\tstream.push({ type: \"toolcall_start\", contentIndex: blockIndex(), partial: output });\n\t\t\t}\n\t\t} else if (event.type === \"response.reasoning_summary_part.added\") {\n\t\t\tif (currentItem && currentItem.type === \"reasoning\") {\n\t\t\t\tcurrentItem.summary = currentItem.summary || [];\n\t\t\t\tcurrentItem.summary.push(event.part);\n\t\t\t\tcurrentReasoningSummaryPartText = event.part.text ?? \"\";\n\t\t\t}\n\t\t} else if (event.type === \"response.reasoning_summary_text.delta\") {\n\t\t\tif (currentItem?.type === \"reasoning\") {\n\t\t\t\tcurrentItem.summary = currentItem.summary || [];\n\t\t\t\tconst lastPart = currentItem.summary[currentItem.summary.length - 1];\n\t\t\t\tif (lastPart) {\n\t\t\t\t\tlastPart.text += event.delta;\n\t\t\t\t\tcurrentReasoningSummaryPartText += event.delta;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (event.type === \"response.reasoning_summary_part.done\") {\n\t\t\tif (currentItem?.type === \"reasoning\" && currentBlock?.type === \"thinking\") {\n\t\t\t\tcurrentItem.summary = currentItem.summary || [];\n\t\t\t\tconst lastPart = currentItem.summary[currentItem.summary.length - 1];\n\t\t\t\tconst partText = cleanReasoningSummaryText(lastPart?.text ?? currentReasoningSummaryPartText);\n\t\t\t\tif (lastPart) {\n\t\t\t\t\tlastPart.text = partText;\n\t\t\t\t}\n\t\t\t\tif (partText.trim().length > 0) {\n\t\t\t\t\tconst delta = `${partText}\\n\\n`;\n\t\t\t\t\tcurrentBlock.thinking += delta;\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\tdelta,\n\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcurrentReasoningSummaryPartText = \"\";\n\t\t\t}\n\t\t} else if (event.type === \"response.reasoning_text.delta\") {\n\t\t\tif (currentItem?.type === \"reasoning\" && currentBlock?.type === \"thinking\") {\n\t\t\t\tcurrentBlock.thinking += event.delta;\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (event.type === \"response.content_part.added\") {\n\t\t\tif (currentItem?.type === \"message\") {\n\t\t\t\tcurrentItem.content = currentItem.content || [];\n\t\t\t\t// Filter out ReasoningText, only accept output_text and refusal\n\t\t\t\tif (event.part.type === \"output_text\" || event.part.type === \"refusal\") {\n\t\t\t\t\tcurrentItem.content.push(event.part);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (event.type === \"response.output_text.delta\") {\n\t\t\tif (currentItem?.type === \"message\" && currentBlock?.type === \"text\") {\n\t\t\t\tconst lastPart = ensureMessageOutputTextPart();\n\t\t\t\tif (lastPart) {\n\t\t\t\t\tcurrentBlock.text += event.delta;\n\t\t\t\t\tlastPart.text += event.delta;\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (event.type === \"response.refusal.delta\") {\n\t\t\tif (currentItem?.type === \"message\" && currentBlock?.type === \"text\") {\n\t\t\t\tconst lastPart = ensureMessageRefusalPart();\n\t\t\t\tif (lastPart) {\n\t\t\t\t\tcurrentBlock.text += event.delta;\n\t\t\t\t\tlastPart.refusal += event.delta;\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (event.type === \"response.function_call_arguments.delta\") {\n\t\t\tif (currentItem?.type === \"function_call\" && currentBlock?.type === \"toolCall\") {\n\t\t\t\tcurrentBlock.partialJson += event.delta;\n\t\t\t\tcurrentBlock.arguments = parseStreamingJson(currentBlock.partialJson);\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (event.type === \"response.function_call_arguments.done\") {\n\t\t\tif (currentItem?.type === \"function_call\" && currentBlock?.type === \"toolCall\") {\n\t\t\t\tconst previousPartialJson = currentBlock.partialJson;\n\t\t\t\tcurrentBlock.partialJson = event.arguments;\n\t\t\t\tcurrentBlock.arguments = parseStreamingJson(currentBlock.partialJson);\n\n\t\t\t\tif (event.arguments.startsWith(previousPartialJson)) {\n\t\t\t\t\tconst delta = event.arguments.slice(previousPartialJson.length);\n\t\t\t\t\tif (delta.length > 0) {\n\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\t\tdelta,\n\t\t\t\t\t\t\tpartial: output,\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} else if (event.type === \"response.output_item.done\") {\n\t\t\tconst item = event.item;\n\n\t\t\tif (item.type === \"reasoning\" && currentBlock?.type === \"thinking\") {\n\t\t\t\tif (item.summary) {\n\t\t\t\t\titem.summary = item.summary\n\t\t\t\t\t\t.map((part) => ({ ...part, text: cleanReasoningSummaryText(part.text ?? \"\") }))\n\t\t\t\t\t\t.filter((part) => part.text.trim().length > 0);\n\t\t\t\t}\n\t\t\t\tconst summaryText = normalizeReasoningSummaryText(item.summary);\n\t\t\t\tconst contentText = item.content?.map((c) => c.text).join(\"\\n\\n\") || \"\";\n\t\t\t\tcurrentBlock.thinking = summaryText || contentText || currentBlock.thinking;\n\t\t\t\tcurrentBlock.thinkingSignature = JSON.stringify(item);\n\t\t\t\treasoningBlocksById.set(item.id, currentBlock);\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"thinking_end\",\n\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\tcontent: currentBlock.thinking,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t\tcurrentBlock = null;\n\t\t\t} else if (item.type === \"message\" && currentBlock?.type === \"text\") {\n\t\t\t\tcurrentBlock.text = item.content.map((c) => (c.type === \"output_text\" ? c.text : c.refusal)).join(\"\");\n\t\t\t\tcurrentBlock.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: blockIndex(),\n\t\t\t\t\tcontent: currentBlock.text,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t\tcurrentBlock = null;\n\t\t\t} else if (item.type === \"function_call\") {\n\t\t\t\tconst args =\n\t\t\t\t\tcurrentBlock?.type === \"toolCall\" && currentBlock.partialJson\n\t\t\t\t\t\t? parseStreamingJson(currentBlock.partialJson)\n\t\t\t\t\t\t: parseStreamingJson(item.arguments || \"{}\");\n\n\t\t\t\tlet toolCall: ToolCall;\n\t\t\t\tif (currentBlock?.type === \"toolCall\") {\n\t\t\t\t\t// Finalize in-place and strip the scratch buffer so replay only\n\t\t\t\t\t// carries parsed arguments.\n\t\t\t\t\tcurrentBlock.arguments = args;\n\t\t\t\t\tdelete (currentBlock as { partialJson?: string }).partialJson;\n\t\t\t\t\ttoolCall = currentBlock;\n\t\t\t\t} else {\n\t\t\t\t\ttoolCall = {\n\t\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\t\tid: `${item.call_id}|${item.id}`,\n\t\t\t\t\t\tname: options?.toolNameMap?.toOriginalName(item.name) ?? item.name,\n\t\t\t\t\t\targuments: args,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcurrentBlock = null;\n\t\t\t\tstream.push({ type: \"toolcall_end\", contentIndex: blockIndex(), toolCall, partial: output });\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\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}\n\nfunction mapStopReason(status: OpenAI.Responses.ResponseStatus | undefined): StopReason {\n\tif (!status) return \"stop\";\n\tswitch (status) {\n\t\tcase \"completed\":\n\t\t\treturn \"stop\";\n\t\tcase \"incomplete\":\n\t\t\treturn \"length\";\n\t\tcase \"failed\":\n\t\tcase \"cancelled\":\n\t\t\treturn \"error\";\n\t\t// These two are wonky ...\n\t\tcase \"in_progress\":\n\t\tcase \"queued\":\n\t\t\treturn \"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/providers/openai-responses-shared.ts"],"names":[],"mappings":"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","sourcesContent":["import type OpenAI from \"openai\";\nimport type {\n\tTool as OpenAITool,\n\tResponseCreateParamsStreaming,\n\tResponseFunctionCallOutputItemList,\n\tResponseFunctionToolCall,\n\tResponseInput,\n\tResponseInputContent,\n\tResponseInputImage,\n\tResponseInputText,\n\tResponseOutputMessage,\n\tResponseOutputRefusal,\n\tResponseOutputText,\n\tResponseReasoningItem,\n\tResponseStreamEvent,\n} from \"openai/resources/responses/responses.js\";\nimport { calculateCost } from \"../models.ts\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tContext,\n\tImageContent,\n\tModel,\n\tStopReason,\n\tTextContent,\n\tTextSignatureV1,\n\tThinkingContent,\n\tTool,\n\tToolCall,\n\tUsage,\n} from \"../types.ts\";\nimport type { AssistantMessageEventStream } from \"../utils/event-stream.ts\";\nimport { shortHash } from \"../utils/hash.ts\";\nimport { parseStreamingJson } from \"../utils/json-parse.ts\";\nimport { sanitizeSurrogates } from \"../utils/sanitize-unicode.ts\";\nimport { createToolNameMap, type ToolNameMap } from \"../utils/tool-names.ts\";\nimport { commitSuccessfulAssistantParse } from \"./provider-runtime.ts\";\nimport { joinTextContent, transformMessages } from \"./transform-messages.ts\";\n\n// =============================================================================\n// Utilities\n// =============================================================================\n\nconst RESERVED_RESPONSES_TOOL_NAMES = new Set([\n\t\"api_tool\",\n\t\"browser\",\n\t\"computer\",\n\t\"container\",\n\t\"file_search\",\n\t\"functions\",\n\t\"image_gen\",\n\t\"multi_tool_use\",\n\t\"python\",\n\t\"python_user_visible\",\n\t\"submodel_delegator\",\n\t\"terminal\",\n\t\"tool_search\",\n\t\"web\",\n]);\n\nexport function createOpenAIResponsesToolNameMap(tools: readonly Tool[]): ToolNameMap {\n\treturn createToolNameMap(tools, { reservedNames: RESERVED_RESPONSES_TOOL_NAMES });\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\nexport interface OpenAIResponsesStreamOptions {\n\ttoolNameMap?: ToolNameMap;\n\tserviceTier?: ResponseCreateParamsStreaming[\"service_tier\"];\n\tresolveServiceTier?: (\n\t\tresponseServiceTier: ResponseCreateParamsStreaming[\"service_tier\"] | undefined,\n\t\trequestServiceTier: ResponseCreateParamsStreaming[\"service_tier\"] | undefined,\n\t) => ResponseCreateParamsStreaming[\"service_tier\"] | undefined;\n\tapplyServiceTierPricing?: (\n\t\tusage: Usage,\n\t\tserviceTier: ResponseCreateParamsStreaming[\"service_tier\"] | undefined,\n\t) => void;\n}\n\nexport interface ConvertResponsesToolsOptions {\n\tstrict?: boolean | null;\n\ttoolNameMap?: ToolNameMap;\n}\n\nexport interface ConvertResponsesMessagesOptions {\n\t/** null omits image detail for transports such as ChatGPT Responses Lite. */\n\timageDetail?: \"auto\" | null;\n\ttoolNameMap?: ToolNameMap;\n}\n\ninterface InputTokenDetailsWithOrchestration {\n\tcached_tokens?: number;\n\tcache_write_tokens?: number;\n\torchestration_input_tokens?: number;\n\torchestration_input_cached_tokens?: number;\n}\n\ninterface OutputTokenDetailsWithOrchestration {\n\torchestration_output_tokens?: number;\n}\n\nfunction createResponseInputImage(imageUrl: string, imageDetail: \"auto\" | null): ResponseInputImage {\n\tconst inputImage: ResponseInputImage = {\n\t\ttype: \"input_image\",\n\t\tdetail: imageDetail ?? \"auto\",\n\t\timage_url: imageUrl,\n\t};\n\tif (imageDetail === null) {\n\t\t// Responses Lite requires the image detail property to be absent.\n\t\tdelete (inputImage as Partial<ResponseInputImage>).detail;\n\t}\n\treturn inputImage;\n}\n\nfunction applyFuguUltraPricing<TApi extends Api>(model: Model<TApi>, usage: Usage): void {\n\tif (model.provider !== \"fugu\" || model.id !== \"fugu-ultra\") return;\n\n\t// Sakana pricing has a higher Fugu Ultra tier once context exceeds 272K tokens.\n\t// Source: https://console.sakana.ai/pricing\n\tconst highContext = usage.input + usage.cacheRead > 272_000;\n\tconst inputRate = highContext ? 10 : 5;\n\tconst outputRate = highContext ? 45 : 30;\n\tconst cacheReadRate = highContext ? 1 : 0.5;\n\tusage.cost.input = (inputRate / 1_000_000) * usage.input;\n\tusage.cost.output = (outputRate / 1_000_000) * usage.output;\n\tusage.cost.cacheRead = (cacheReadRate / 1_000_000) * usage.cacheRead;\n\tusage.cost.cacheWrite = 0;\n\tusage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead;\n}\n\nexport function applyOpenAIServiceTierPricing<TApi extends Api>(\n\tusage: Usage,\n\tserviceTier: ResponseCreateParamsStreaming[\"service_tier\"] | undefined,\n\tmodel: Pick<Model<TApi>, \"id\">,\n): void {\n\tconst multiplier =\n\t\tserviceTier === \"flex\" ? 0.5 : serviceTier === \"priority\" ? (model.id === \"gpt-5.5\" ? 2.5 : 2) : 1;\n\tif (multiplier === 1) return;\n\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\n// =============================================================================\n// Message conversion\n// =============================================================================\n\nexport function buildResponsesInstructions(context: Context): string | undefined {\n\treturn context.systemPrompt ? sanitizeSurrogates(context.systemPrompt) : undefined;\n}\n\nexport function convertResponsesMessages<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\tallowedToolCallProviders: ReadonlySet<string>,\n\toptions?: ConvertResponsesMessagesOptions,\n): ResponseInput {\n\tconst messages: ResponseInput = [];\n\tconst imageDetail = options?.imageDetail === undefined ? \"auto\" : options.imageDetail;\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 = source.provider !== 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(context.messages, model, normalizeToolCallId);\n\n\tlet msgIndex = 0;\n\tfor (const msg of transformedMessages) {\n\t\tif (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 createResponseInputImage(`data:${item.mimeType};base64,${item.data}`, imageDetail);\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 isDifferentModel =\n\t\t\t\tassistantMsg.model !== model.id &&\n\t\t\t\tassistantMsg.provider === model.provider &&\n\t\t\t\tassistantMsg.api === model.api;\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\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 fc_xxx 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\tif (isDifferentModel && itemId?.startsWith(\"fc_\")) {\n\t\t\t\t\t\titemId = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\ttype: \"function_call\",\n\t\t\t\t\t\tid: itemId,\n\t\t\t\t\t\tcall_id: callId,\n\t\t\t\t\t\tname: options?.toolNameMap?.toProviderName(toolCall.name) ?? toolCall.name,\n\t\t\t\t\t\targuments: JSON.stringify(toolCall.arguments),\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\tmessages.push(...output);\n\t\t} else if (msg.role === \"toolResult\") {\n\t\t\tconst textResult = joinTextContent(msg.content);\n\t\t\tconst hasImages = msg.content.some((c): c is ImageContent => c.type === \"image\");\n\t\t\tconst hasText = textResult.length > 0;\n\t\t\tconst [callId] = msg.toolCallId.split(\"|\");\n\n\t\t\tlet output: string | ResponseFunctionCallOutputItemList;\n\t\t\tif (hasImages && model.input.includes(\"image\")) {\n\t\t\t\tconst contentParts: ResponseFunctionCallOutputItemList = [];\n\n\t\t\t\tif (hasText) {\n\t\t\t\t\tcontentParts.push({\n\t\t\t\t\t\ttype: \"input_text\",\n\t\t\t\t\t\ttext: sanitizeSurrogates(textResult),\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (const block of msg.content) {\n\t\t\t\t\tif (block.type === \"image\") {\n\t\t\t\t\t\tcontentParts.push(\n\t\t\t\t\t\t\tcreateResponseInputImage(`data:${block.mimeType};base64,${block.data}`, imageDetail),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\toutput = contentParts;\n\t\t\t} else {\n\t\t\t\toutput = sanitizeSurrogates(hasText ? textResult : \"(see attached image)\");\n\t\t\t}\n\n\t\t\tmessages.push({\n\t\t\t\ttype: \"function_call_output\",\n\t\t\t\tcall_id: callId,\n\t\t\t\toutput,\n\t\t\t});\n\t\t}\n\t\tmsgIndex++;\n\t}\n\n\treturn messages;\n}\n\n// =============================================================================\n// Tool conversion\n// =============================================================================\n\nexport function convertResponsesTools(tools: Tool[], options?: ConvertResponsesToolsOptions): OpenAITool[] {\n\tconst strict = options?.strict === undefined ? false : options.strict;\n\treturn tools.map((tool) => ({\n\t\ttype: \"function\",\n\t\tname: options?.toolNameMap?.toProviderName(tool.name) ?? tool.name,\n\t\tdescription: tool.description,\n\t\tparameters: tool.parameters as any, // TypeBox already generates JSON Schema\n\t\tstrict,\n\t}));\n}\n\n// =============================================================================\n// Stream processing\n// =============================================================================\n\nconst REASONING_SUMMARY_DELIMITER_ONLY = /^<!--\\s*-->$/;\nconst REASONING_SUMMARY_EMPTY_HTML_COMMENT = /(?:\\n\\s*)*<!--\\s*-->\\s*$/;\n\nfunction isReasoningSummaryDelimiterOnly(text: string): boolean {\n\treturn REASONING_SUMMARY_DELIMITER_ONLY.test(text.trim());\n}\n\nfunction cleanReasoningSummaryText(text: string): string {\n\tif (isReasoningSummaryDelimiterOnly(text)) return \"\";\n\treturn text.replace(REASONING_SUMMARY_EMPTY_HTML_COMMENT, \"\").trimEnd();\n}\n\nfunction normalizeReasoningSummaryText(parts: readonly { text?: string }[] | undefined): string {\n\treturn (parts ?? [])\n\t\t.map((part) => cleanReasoningSummaryText(part.text ?? \"\"))\n\t\t.filter((text) => text.trim().length > 0)\n\t\t.join(\"\\n\\n\");\n}\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 currentItem: ResponseReasoningItem | ResponseOutputMessage | ResponseFunctionToolCall | null = null;\n\tlet currentBlock: ThinkingContent | TextContent | (ToolCall & { partialJson?: string }) | null = null;\n\tlet currentReasoningSummaryPartText = \"\";\n\tlet sawTerminalResponseEvent = false;\n\tlet committedSuccessfulTerminal = false;\n\tconst reasoningBlocksById = new Map<string, ThinkingContent>();\n\tconst blocks = output.content;\n\tconst blockIndex = () => blocks.length - 1;\n\tconst ensureMessageOutputTextPart = (): ResponseOutputText | undefined => {\n\t\tif (currentItem?.type !== \"message\") return undefined;\n\t\tconst lastPart = currentItem.content[currentItem.content.length - 1];\n\t\tif (lastPart?.type === \"output_text\") return lastPart;\n\t\tconst part: ResponseOutputText = { type: \"output_text\", text: \"\", annotations: [] };\n\t\tcurrentItem.content.push(part);\n\t\treturn part;\n\t};\n\tconst ensureMessageRefusalPart = (): ResponseOutputRefusal | undefined => {\n\t\tif (currentItem?.type !== \"message\") return undefined;\n\t\tconst lastPart = currentItem.content[currentItem.content.length - 1];\n\t\tif (lastPart?.type === \"refusal\") return lastPart;\n\t\tconst part: ResponseOutputRefusal = { type: \"refusal\", refusal: \"\" };\n\t\tcurrentItem.content.push(part);\n\t\treturn part;\n\t};\n\tconst backfillReasoningSignatures = (responseOutput: ResponseReasoningItem[]): void => {\n\t\tfor (const item of responseOutput) {\n\t\t\tif (!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({ ...storedItem, encrypted_content: item.encrypted_content });\n\t\t}\n\t};\n\tconst finalizedOutputItemKeys = new Set<string>();\n\tconst outputItemKey = (item: { type: string; id?: string | null; call_id?: string }): string | undefined => {\n\t\tif (item.type === \"reasoning\" || item.type === \"message\") {\n\t\t\treturn item.id ? `${item.type}:${item.id}` : undefined;\n\t\t}\n\t\tif (item.type === \"function_call\") {\n\t\t\treturn `function_call:${item.call_id ?? \"\"}|${item.id ?? \"\"}`;\n\t\t}\n\t\treturn undefined;\n\t};\n\tconst contentIndexOf = (block: AssistantMessage[\"content\"][number]): number => output.content.indexOf(block);\n\tconst applyCompletedOutputItem = (\n\t\titem: ResponseReasoningItem | ResponseOutputMessage | ResponseFunctionToolCall,\n\t\temit: boolean,\n\t): void => {\n\t\tconst key = outputItemKey(item);\n\t\tif (key && finalizedOutputItemKeys.has(key)) return;\n\n\t\tif (item.type === \"reasoning\") {\n\t\t\tif (item.summary) {\n\t\t\t\titem.summary = item.summary\n\t\t\t\t\t.map((part) => ({ ...part, text: cleanReasoningSummaryText(part.text ?? \"\") }))\n\t\t\t\t\t.filter((part) => part.text.trim().length > 0);\n\t\t\t}\n\t\t\tconst summaryText = normalizeReasoningSummaryText(item.summary);\n\t\t\tconst contentText = item.content?.map((part) => part.text).join(\"\\n\\n\") || \"\";\n\t\t\tlet block = item.id ? reasoningBlocksById.get(item.id) : undefined;\n\t\t\tif (!block && currentBlock?.type === \"thinking\") block = currentBlock;\n\t\t\tconst isNew = !block;\n\t\t\tif (!block) {\n\t\t\t\tblock = { type: \"thinking\", thinking: \"\" };\n\t\t\t\toutput.content.push(block);\n\t\t\t}\n\t\t\tblock.thinking = summaryText || contentText || block.thinking;\n\t\t\tblock.thinkingSignature = JSON.stringify(item);\n\t\t\tif (item.id) reasoningBlocksById.set(item.id, block);\n\t\t\tif (emit) {\n\t\t\t\tconst contentIndex = contentIndexOf(block);\n\t\t\t\tif (isNew) {\n\t\t\t\t\tstream.push({ type: \"thinking_start\", contentIndex, partial: output });\n\t\t\t\t}\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"thinking_end\",\n\t\t\t\t\tcontentIndex,\n\t\t\t\t\tcontent: block.thinking,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (currentBlock === block) currentBlock = null;\n\t\t\tif (key) finalizedOutputItemKeys.add(key);\n\t\t\treturn;\n\t\t}\n\n\t\tif (item.type === \"message\") {\n\t\t\tconst text = (item.content ?? [])\n\t\t\t\t.map((part) => (part.type === \"output_text\" ? part.text : part.refusal))\n\t\t\t\t.join(\"\");\n\t\t\tlet block: TextContent | undefined;\n\t\t\tif (currentBlock?.type === \"text\") {\n\t\t\t\tblock = currentBlock;\n\t\t\t} else if (item.id) {\n\t\t\t\tblock = output.content.find(\n\t\t\t\t\t(candidate): candidate is TextContent =>\n\t\t\t\t\t\tcandidate.type === \"text\" && parseTextSignature(candidate.textSignature)?.id === item.id,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst isNew = !block;\n\t\t\tif (!block) {\n\t\t\t\tblock = { type: \"text\", text: \"\" };\n\t\t\t\toutput.content.push(block);\n\t\t\t}\n\t\t\tif (text.length > 0) block.text = text;\n\t\t\tif (item.id) block.textSignature = encodeTextSignatureV1(item.id, item.phase ?? undefined);\n\t\t\tif (emit) {\n\t\t\t\tconst contentIndex = contentIndexOf(block);\n\t\t\t\tif (isNew) {\n\t\t\t\t\tstream.push({ type: \"text_start\", contentIndex, partial: output });\n\t\t\t\t}\n\t\t\t\tstream.push({ type: \"text_end\", contentIndex, content: block.text, partial: output });\n\t\t\t}\n\t\t\tif (currentBlock === block) currentBlock = null;\n\t\t\tif (key) finalizedOutputItemKeys.add(key);\n\t\t\treturn;\n\t\t}\n\n\t\tconst id = `${item.call_id}|${item.id}`;\n\t\tlet block: (ToolCall & { partialJson?: string }) | undefined = output.content.find(\n\t\t\t(candidate): candidate is ToolCall & { partialJson?: string } =>\n\t\t\t\tcandidate.type === \"toolCall\" && candidate.id === id,\n\t\t);\n\t\tif (!block && currentBlock?.type === \"toolCall\") {\n\t\t\tblock = currentBlock;\n\t\t\tblock.id = id;\n\t\t\tblock.name = options?.toolNameMap?.toOriginalName(item.name) ?? item.name;\n\t\t}\n\t\tconst isNew = !block;\n\t\tif (!block) {\n\t\t\tblock = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid,\n\t\t\t\tname: options?.toolNameMap?.toOriginalName(item.name) ?? item.name,\n\t\t\t\targuments: {},\n\t\t\t};\n\t\t\toutput.content.push(block);\n\t\t}\n\t\tblock.arguments = parseStreamingJson(block.partialJson || item.arguments || \"{}\");\n\t\tdelete block.partialJson;\n\t\tif (emit) {\n\t\t\tconst contentIndex = contentIndexOf(block);\n\t\t\tif (isNew) {\n\t\t\t\tstream.push({ type: \"toolcall_start\", contentIndex, partial: output });\n\t\t\t}\n\t\t\tstream.push({ type: \"toolcall_end\", contentIndex, toolCall: block, partial: output });\n\t\t}\n\t\tif (currentBlock === block) currentBlock = null;\n\t\tif (key) finalizedOutputItemKeys.add(key);\n\t};\n\tconst applyResponseOutput = (\n\t\tresponseOutput: NonNullable<\n\t\t\tExtract<ResponseStreamEvent, { type: \"response.completed\" | \"response.incomplete\" }>[\"response\"][\"output\"]\n\t\t>,\n\t): void => {\n\t\tfor (const item of responseOutput) {\n\t\t\tif (item.type === \"reasoning\" || item.type === \"message\" || item.type === \"function_call\") {\n\t\t\t\tapplyCompletedOutputItem(item, true);\n\t\t\t}\n\t\t}\n\t\tif (!currentBlock) return;\n\t\tconst contentIndex = blockIndex();\n\t\tif (currentBlock.type === \"text\") {\n\t\t\tstream.push({ type: \"text_end\", contentIndex, content: currentBlock.text, partial: output });\n\t\t} else if (currentBlock.type === \"thinking\") {\n\t\t\tstream.push({\n\t\t\t\ttype: \"thinking_end\",\n\t\t\t\tcontentIndex,\n\t\t\t\tcontent: currentBlock.thinking,\n\t\t\t\tpartial: output,\n\t\t\t});\n\t\t} else {\n\t\t\tdelete currentBlock.partialJson;\n\t\t\tstream.push({ type: \"toolcall_end\", contentIndex, toolCall: currentBlock, partial: output });\n\t\t}\n\t\tcurrentBlock = null;\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 ?? []).filter((item) => item.type === \"reasoning\"));\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 InputTokenDetailsWithOrchestration | undefined;\n\t\t\tconst outputDetails = response.usage.output_tokens_details as OutputTokenDetailsWithOrchestration | undefined;\n\t\t\tconst cachedTokens = inputDetails?.cached_tokens || 0;\n\t\t\tconst cacheWriteTokens = inputDetails?.cache_write_tokens || 0;\n\t\t\tlet inputTokens = Math.max(0, (response.usage.input_tokens || 0) - cachedTokens - cacheWriteTokens);\n\t\t\tlet outputTokens = response.usage.output_tokens || 0;\n\t\t\tlet cacheReadTokens = cachedTokens;\n\t\t\tconst totalTokens = response.usage.total_tokens || 0;\n\t\t\tif (model.provider === \"fugu\") {\n\t\t\t\tconst orchestrationInputTokens = inputDetails?.orchestration_input_tokens || 0;\n\t\t\t\tconst orchestrationInputCachedTokens = inputDetails?.orchestration_input_cached_tokens || 0;\n\t\t\t\tconst orchestrationOutputTokens = outputDetails?.orchestration_output_tokens || 0;\n\t\t\t\tinputTokens += orchestrationInputTokens;\n\t\t\t\tcacheReadTokens += orchestrationInputCachedTokens;\n\t\t\t\toutputTokens += orchestrationOutputTokens;\n\t\t\t}\n\t\t\tconst providerCost = (response.usage as { cost?: number }).cost ?? 0;\n\t\t\toutput.usage = {\n\t\t\t\t// OpenAI includes cached tokens in input_tokens, so subtract to get non-cached input.\n\t\t\t\t// Sakana Fugu Ultra also reports billable orchestration tokens in token details fields.\n\t\t\t\t// Source: https://console.sakana.ai/pricing#usage-field-details\n\t\t\t\tinput: inputTokens,\n\t\t\t\toutput: outputTokens,\n\t\t\t\tcacheRead: cacheReadTokens,\n\t\t\t\tcacheWrite: cacheWriteTokens,\n\t\t\t\ttotalTokens,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: providerCost },\n\t\t\t};\n\t\t}\n\t\tcalculateCost(model, output.usage, {\n\t\t\t// response.usage is absent on some streams; this call sits outside the guard above.\n\t\t\tproviderSuppliedTotal: Boolean((response.usage as { cost?: number } | undefined)?.cost),\n\t\t});\n\t\tapplyFuguUltraPricing(model, output.usage);\n\t\tif (options?.applyServiceTierPricing) {\n\t\t\tconst serviceTier = options.resolveServiceTier\n\t\t\t\t? options.resolveServiceTier(response?.service_tier, options.serviceTier)\n\t\t\t\t: (response?.service_tier ?? options.serviceTier);\n\t\t\toptions.applyServiceTierPricing(output.usage, serviceTier);\n\t\t}\n\t\tapplyResponseOutput(response.output ?? []);\n\t\t// Map status to stop reason\n\t\toutput.stopReason = mapStopReason(response?.status);\n\t\tif (output.content.some((b) => b.type === \"toolCall\") && output.stopReason === \"stop\") {\n\t\t\toutput.stopReason = \"toolUse\";\n\t\t}\n\t\tif (output.stopReason !== \"error\" && output.stopReason !== \"aborted\") {\n\t\t\tcommittedSuccessfulTerminal = true;\n\t\t\tcommitSuccessfulAssistantParse(output);\n\t\t}\n\t};\n\n\ttry {\n\t\tfor await (const event of openaiStream) {\n\t\t\tif (event.type === \"response.created\") {\n\t\t\t\toutput.responseId = event.response.id;\n\t\t\t} else if (event.type === \"response.output_item.added\") {\n\t\t\t\tconst item = event.item;\n\t\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\t\tcurrentItem = item;\n\t\t\t\t\tcurrentBlock = { type: \"thinking\", thinking: \"\" };\n\t\t\t\t\tcurrentReasoningSummaryPartText = \"\";\n\t\t\t\t\toutput.content.push(currentBlock);\n\t\t\t\t\tstream.push({ type: \"thinking_start\", contentIndex: blockIndex(), partial: output });\n\t\t\t\t} else if (item.type === \"message\") {\n\t\t\t\t\tcurrentItem = item;\n\t\t\t\t\tcurrentBlock = { type: \"text\", text: \"\" };\n\t\t\t\t\toutput.content.push(currentBlock);\n\t\t\t\t\tstream.push({ type: \"text_start\", contentIndex: blockIndex(), partial: output });\n\t\t\t\t} else if (item.type === \"function_call\") {\n\t\t\t\t\tcurrentItem = item;\n\t\t\t\t\tcurrentBlock = {\n\t\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\t\tid: `${item.call_id}|${item.id}`,\n\t\t\t\t\t\tname: options?.toolNameMap?.toOriginalName(item.name) ?? item.name,\n\t\t\t\t\t\targuments: {},\n\t\t\t\t\t\tpartialJson: item.arguments || \"\",\n\t\t\t\t\t};\n\t\t\t\t\toutput.content.push(currentBlock);\n\t\t\t\t\tstream.push({ type: \"toolcall_start\", contentIndex: blockIndex(), partial: output });\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.reasoning_summary_part.added\") {\n\t\t\t\tif (currentItem && currentItem.type === \"reasoning\") {\n\t\t\t\t\tcurrentItem.summary = currentItem.summary || [];\n\t\t\t\t\tcurrentItem.summary.push(event.part);\n\t\t\t\t\tcurrentReasoningSummaryPartText = event.part.text ?? \"\";\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.reasoning_summary_text.delta\") {\n\t\t\t\tif (currentItem?.type === \"reasoning\") {\n\t\t\t\t\tcurrentItem.summary = currentItem.summary || [];\n\t\t\t\t\tconst lastPart = currentItem.summary[currentItem.summary.length - 1];\n\t\t\t\t\tif (lastPart) {\n\t\t\t\t\t\tlastPart.text += event.delta;\n\t\t\t\t\t\tcurrentReasoningSummaryPartText += event.delta;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.reasoning_summary_part.done\") {\n\t\t\t\tif (currentItem?.type === \"reasoning\" && currentBlock?.type === \"thinking\") {\n\t\t\t\t\tcurrentItem.summary = currentItem.summary || [];\n\t\t\t\t\tconst lastPart = currentItem.summary[currentItem.summary.length - 1];\n\t\t\t\t\tconst partText = cleanReasoningSummaryText(lastPart?.text ?? currentReasoningSummaryPartText);\n\t\t\t\t\tif (lastPart) {\n\t\t\t\t\t\tlastPart.text = partText;\n\t\t\t\t\t}\n\t\t\t\t\tif (partText.trim().length > 0) {\n\t\t\t\t\t\tconst delta = `${partText}\\n\\n`;\n\t\t\t\t\t\tcurrentBlock.thinking += delta;\n\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\t\tdelta,\n\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tcurrentReasoningSummaryPartText = \"\";\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.reasoning_text.delta\") {\n\t\t\t\tif (currentItem?.type === \"reasoning\" && currentBlock?.type === \"thinking\") {\n\t\t\t\t\tcurrentBlock.thinking += event.delta;\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.content_part.added\") {\n\t\t\t\tif (currentItem?.type === \"message\") {\n\t\t\t\t\tcurrentItem.content = currentItem.content || [];\n\t\t\t\t\t// Filter out ReasoningText, only accept output_text and refusal\n\t\t\t\t\tif (event.part.type === \"output_text\" || event.part.type === \"refusal\") {\n\t\t\t\t\t\tcurrentItem.content.push(event.part);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.output_text.delta\") {\n\t\t\t\tif (currentItem?.type === \"message\" && currentBlock?.type === \"text\") {\n\t\t\t\t\tconst lastPart = ensureMessageOutputTextPart();\n\t\t\t\t\tif (lastPart) {\n\t\t\t\t\t\tcurrentBlock.text += event.delta;\n\t\t\t\t\t\tlastPart.text += event.delta;\n\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.refusal.delta\") {\n\t\t\t\tif (currentItem?.type === \"message\" && currentBlock?.type === \"text\") {\n\t\t\t\t\tconst lastPart = ensureMessageRefusalPart();\n\t\t\t\t\tif (lastPart) {\n\t\t\t\t\t\tcurrentBlock.text += event.delta;\n\t\t\t\t\t\tlastPart.refusal += event.delta;\n\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.function_call_arguments.delta\") {\n\t\t\t\tif (currentItem?.type === \"function_call\" && currentBlock?.type === \"toolCall\") {\n\t\t\t\t\tcurrentBlock.partialJson = (currentBlock.partialJson ?? \"\") + event.delta;\n\t\t\t\t\tcurrentBlock.arguments = parseStreamingJson(currentBlock.partialJson);\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.function_call_arguments.done\") {\n\t\t\t\tif (currentItem?.type === \"function_call\" && currentBlock?.type === \"toolCall\") {\n\t\t\t\t\tconst previousPartialJson = currentBlock.partialJson;\n\t\t\t\t\tcurrentBlock.partialJson = event.arguments;\n\t\t\t\t\tcurrentBlock.arguments = parseStreamingJson(currentBlock.partialJson);\n\n\t\t\t\t\tif (previousPartialJson !== undefined && event.arguments.startsWith(previousPartialJson)) {\n\t\t\t\t\t\tconst delta = event.arguments.slice(previousPartialJson.length);\n\t\t\t\t\t\tif (delta.length > 0) {\n\t\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\t\t\tdelta,\n\t\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.output_item.done\") {\n\t\t\t\tconst item = event.item;\n\t\t\t\tif (item.type === \"reasoning\" || item.type === \"message\" || item.type === \"function_call\") {\n\t\t\t\t\tapplyCompletedOutputItem(item, true);\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.completed\" || event.type === \"response.incomplete\") {\n\t\t\t\tfinalizeResponse(event.response);\n\t\t\t} else if (event.type === \"error\") {\n\t\t\t\tthrow new Error(`Error Code ${event.code}: ${event.message}` || \"Unknown error\");\n\t\t\t} else if (event.type === \"response.failed\") {\n\t\t\t\tsawTerminalResponseEvent = true;\n\t\t\t\tconst error = event.response?.error;\n\t\t\t\tconst details = event.response?.incomplete_details;\n\t\t\t\tconst msg = error\n\t\t\t\t\t? `${error.code || \"unknown\"}: ${error.message || \"no message\"}`\n\t\t\t\t\t: details?.reason\n\t\t\t\t\t\t? `incomplete: ${details.reason}`\n\t\t\t\t\t\t: \"Unknown error (no error details in response)\";\n\t\t\t\tthrow new Error(msg);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tif (committedSuccessfulTerminal) return;\n\t\tthrow error;\n\t}\n\tif (!sawTerminalResponseEvent) {\n\t\tthrow new Error(\"OpenAI Responses stream ended before a terminal response event\");\n\t}\n}\n\nfunction mapStopReason(status: OpenAI.Responses.ResponseStatus | undefined): StopReason {\n\tif (!status) return \"stop\";\n\tswitch (status) {\n\t\tcase \"completed\":\n\t\t\treturn \"stop\";\n\t\tcase \"incomplete\":\n\t\t\treturn \"length\";\n\t\tcase \"failed\":\n\t\tcase \"cancelled\":\n\t\t\treturn \"error\";\n\t\t// These two are wonky ...\n\t\tcase \"in_progress\":\n\t\tcase \"queued\":\n\t\t\treturn \"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"]}
|
|
@@ -6,6 +6,8 @@ type ProviderRequestOptions = Pick<StreamOptions | ImagesOptions, "signal" | "ti
|
|
|
6
6
|
type ProviderRetrySource = Pick<StreamOptions | ImagesOptions, "signal" | "maxRetries" | "maxRetryDelayMs">;
|
|
7
7
|
type AssistantMessageOverrides = Partial<Pick<AssistantMessage, "stopReason" | "errorMessage">>;
|
|
8
8
|
type StreamingScratchField = "index" | "partialArgs" | "partialArgsComplete" | "partialJson" | "streamIndex";
|
|
9
|
+
/** Mark a fully parsed assistant message so a later iterator abort cannot rewrite it. */
|
|
10
|
+
export declare function commitSuccessfulAssistantParse(output: AssistantMessage): void;
|
|
9
11
|
export declare function createAssistantMessage<TApi extends Api>(model: Model<TApi>, overrides?: AssistantMessageOverrides): AssistantMessage;
|
|
10
12
|
export declare function buildClampedSimpleOptions<TApi extends Api>(model: Model<TApi>, options: SimpleStreamOptions | undefined): {
|
|
11
13
|
base: StreamOptions;
|
|
@@ -23,7 +25,14 @@ export declare function beginAssistantResponseStream<TModel>(stream: AssistantMe
|
|
|
23
25
|
status: number;
|
|
24
26
|
headers: Headers;
|
|
25
27
|
}, model: TModel, onResponse?: (response: ProviderResponse, model: TModel) => void | Promise<void>): Promise<void>;
|
|
26
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Push the successful terminal event for a fully parsed assistant message.
|
|
30
|
+
*
|
|
31
|
+
* A late abort on `signal` must not discard that message: mid-stream abort is
|
|
32
|
+
* the transport's job and is already converted by {@link terminateAssistantStreamWithError}.
|
|
33
|
+
* Checking the signal here is a TOCTOU that drops completed-only / fast responses.
|
|
34
|
+
*/
|
|
35
|
+
export declare function completeAssistantStream(stream: AssistantMessageEventStream, output: AssistantMessage, _signal?: AbortSignal): void;
|
|
27
36
|
export declare function terminateAssistantStreamWithError(stream: AssistantMessageEventStream, output: AssistantMessage, signal: AbortSignal | undefined, error: unknown, options: {
|
|
28
37
|
formatError: (error: unknown) => string;
|
|
29
38
|
scratchFields?: readonly StreamingScratchField[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-runtime.d.ts","sourceRoot":"","sources":["../../src/providers/provider-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EACX,GAAG,EACH,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,KAAK,EACL,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,eAAe,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAE5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGvE,KAAK,sBAAsB,GAAG,IAAI,CAAC,aAAa,GAAG,aAAa,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC;AAC1F,KAAK,mBAAmB,GAAG,IAAI,CAAC,aAAa,GAAG,aAAa,EAAE,QAAQ,GAAG,YAAY,GAAG,iBAAiB,CAAC,CAAC;AAC5G,KAAK,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC;AAChG,KAAK,qBAAqB,GAAG,OAAO,GAAG,aAAa,GAAG,qBAAqB,GAAG,aAAa,GAAG,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"provider-runtime.d.ts","sourceRoot":"","sources":["../../src/providers/provider-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,16 @@ import { clampThinkingLevel } from "../model-capabilities.js";
|
|
|
2
2
|
import { createEmptyUsage } from "../usage.js";
|
|
3
3
|
import { headersToRecord } from "../utils/headers.js";
|
|
4
4
|
import { buildBaseOptions } from "./simple-options.js";
|
|
5
|
+
const committedSuccessfulParses = new WeakSet();
|
|
6
|
+
function isSuccessfulStopReason(stopReason) {
|
|
7
|
+
return stopReason !== "aborted" && stopReason !== "error";
|
|
8
|
+
}
|
|
9
|
+
/** Mark a fully parsed assistant message so a later iterator abort cannot rewrite it. */
|
|
10
|
+
export function commitSuccessfulAssistantParse(output) {
|
|
11
|
+
if (!isSuccessfulStopReason(output.stopReason))
|
|
12
|
+
return;
|
|
13
|
+
committedSuccessfulParses.add(output);
|
|
14
|
+
}
|
|
5
15
|
export function createAssistantMessage(model, overrides = {}) {
|
|
6
16
|
return {
|
|
7
17
|
role: "assistant",
|
|
@@ -54,9 +64,14 @@ export async function beginAssistantResponseStream(stream, output, response, mod
|
|
|
54
64
|
await onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);
|
|
55
65
|
stream.push({ type: "start", partial: output });
|
|
56
66
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
67
|
+
/**
|
|
68
|
+
* Push the successful terminal event for a fully parsed assistant message.
|
|
69
|
+
*
|
|
70
|
+
* A late abort on `signal` must not discard that message: mid-stream abort is
|
|
71
|
+
* the transport's job and is already converted by {@link terminateAssistantStreamWithError}.
|
|
72
|
+
* Checking the signal here is a TOCTOU that drops completed-only / fast responses.
|
|
73
|
+
*/
|
|
74
|
+
export function completeAssistantStream(stream, output, _signal) {
|
|
60
75
|
if (output.stopReason === "aborted" || output.stopReason === "error") {
|
|
61
76
|
throw new Error("An unknown error occurred");
|
|
62
77
|
}
|
|
@@ -71,6 +86,10 @@ export function terminateAssistantStreamWithError(stream, output, signal, error,
|
|
|
71
86
|
delete scratchBlock[field];
|
|
72
87
|
}
|
|
73
88
|
}
|
|
89
|
+
if (committedSuccessfulParses.has(output) && isSuccessfulStopReason(output.stopReason)) {
|
|
90
|
+
completeAssistantStream(stream, output);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
74
93
|
output.stopReason = signal?.aborted ? "aborted" : "error";
|
|
75
94
|
output.errorMessage = options.formatError(error);
|
|
76
95
|
stream.push({ type: "error", reason: output.stopReason, error: output });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-runtime.js","sourceRoot":"","sources":["../../src/providers/provider-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { clampThinkingLevel } from \"../model-capabilities.ts\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tCacheRetention,\n\tImagesOptions,\n\tModel,\n\tProviderResponse,\n\tSimpleStreamOptions,\n\tStreamOptions,\n\tTextContent,\n\tThinkingContent,\n} from \"../types.ts\";\nimport { createEmptyUsage } from \"../usage.ts\";\nimport type { AssistantMessageEventStream } from \"../utils/event-stream.ts\";\nimport { headersToRecord } from \"../utils/headers.ts\";\nimport type { ProviderRetryOptions } from \"../utils/provider-retry.ts\";\nimport { buildBaseOptions } from \"./simple-options.ts\";\n\ntype ProviderRequestOptions = Pick<StreamOptions | ImagesOptions, \"signal\" | \"timeoutMs\">;\ntype ProviderRetrySource = Pick<StreamOptions | ImagesOptions, \"signal\" | \"maxRetries\" | \"maxRetryDelayMs\">;\ntype AssistantMessageOverrides = Partial<Pick<AssistantMessage, \"stopReason\" | \"errorMessage\">>;\ntype StreamingScratchField = \"index\" | \"partialArgs\" | \"partialArgsComplete\" | \"partialJson\" | \"streamIndex\";\n\nexport function createAssistantMessage<TApi extends Api>(\n\tmodel: Model<TApi>,\n\toverrides: AssistantMessageOverrides = {},\n): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: model.api,\n\t\tprovider: model.provider,\n\t\tmodel: model.id,\n\t\tusage: createEmptyUsage(),\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t\t...overrides,\n\t};\n}\n\nexport function buildClampedSimpleOptions<TApi extends Api>(\n\tmodel: Model<TApi>,\n\toptions: SimpleStreamOptions | undefined,\n): {\n\tbase: StreamOptions;\n\tclampedReasoning: ReturnType<typeof clampThinkingLevel> | undefined;\n} {\n\tconst apiKey = options?.apiKey;\n\tif (!apiKey) throw new Error(`No API key for provider: ${model.provider}`);\n\treturn {\n\t\tbase: buildBaseOptions(model, options, apiKey),\n\t\tclampedReasoning: options.reasoning ? clampThinkingLevel(model, options.reasoning) : undefined,\n\t};\n}\n\nexport function resolveCacheRetention(cacheRetention?: CacheRetention): CacheRetention {\n\tif (cacheRetention) return cacheRetention;\n\tif (typeof process !== \"undefined\" && process.env.PI_CACHE_RETENTION === \"long\") return \"long\";\n\treturn \"short\";\n}\n\nexport async function applyProviderPayloadHook<TPayload, TModel>(\n\tpayload: TPayload,\n\tmodel: TModel,\n\thook?: (payload: unknown, model: TModel) => unknown | undefined | Promise<unknown | undefined>,\n): Promise<TPayload> {\n\tconst replacement = await hook?.(payload, model);\n\treturn replacement === undefined ? payload : (replacement as TPayload);\n}\n\nexport function createRetryFreeRequestOptions(\n\toptions: ProviderRequestOptions | undefined,\n\tdefaultTimeoutMs?: number,\n): { signal?: AbortSignal; timeout?: number; maxRetries: 0 } {\n\tconst timeout = options?.timeoutMs ?? defaultTimeoutMs;\n\treturn {\n\t\t...(options?.signal ? { signal: options.signal } : {}),\n\t\t...(timeout !== undefined ? { timeout } : {}),\n\t\tmaxRetries: 0,\n\t};\n}\n\nexport function createProviderRetryOptions(\n\toptions: ProviderRetrySource | undefined,\n\tdefaultMaxRetries?: number,\n): ProviderRetryOptions {\n\treturn {\n\t\tmaxRetries: options?.maxRetries ?? defaultMaxRetries,\n\t\tmaxRetryDelayMs: options?.maxRetryDelayMs,\n\t\tsignal: options?.signal,\n\t};\n}\n\nexport async function beginAssistantResponseStream<TModel>(\n\tstream: AssistantMessageEventStream,\n\toutput: AssistantMessage,\n\tresponse: { status: number; headers: Headers },\n\tmodel: TModel,\n\tonResponse?: (response: ProviderResponse, model: TModel) => void | Promise<void>,\n): Promise<void> {\n\tawait onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);\n\tstream.push({ type: \"start\", partial: output });\n}\n\nexport function completeAssistantStream(\n\tstream: AssistantMessageEventStream,\n\toutput: AssistantMessage,\n\tsignal?: AbortSignal,\n): void {\n\tif (signal?.aborted) throw new Error(\"Request was aborted\");\n\tif (output.stopReason === \"aborted\" || output.stopReason === \"error\") {\n\t\tthrow new Error(\"An unknown error occurred\");\n\t}\n\tstream.push({ type: \"done\", reason: output.stopReason, message: output });\n\tstream.end();\n}\n\nexport function terminateAssistantStreamWithError(\n\tstream: AssistantMessageEventStream,\n\toutput: AssistantMessage,\n\tsignal: AbortSignal | undefined,\n\terror: unknown,\n\toptions: {\n\t\tformatError: (error: unknown) => string;\n\t\tscratchFields?: readonly StreamingScratchField[];\n\t},\n): void {\n\tif (options.scratchFields) {\n\t\tfor (const block of output.content) {\n\t\t\tconst scratchBlock = block as typeof block & Partial<Record<StreamingScratchField, unknown>>;\n\t\t\tfor (const field of options.scratchFields) delete scratchBlock[field];\n\t\t}\n\t}\n\toutput.stopReason = signal?.aborted ? \"aborted\" : \"error\";\n\toutput.errorMessage = options.formatError(error);\n\tstream.push({ type: \"error\", reason: output.stopReason, error: output });\n\tstream.end();\n}\n\nexport function finishTextOrThinkingBlock(\n\tstream: AssistantMessageEventStream,\n\toutput: AssistantMessage,\n\tblock: TextContent | ThinkingContent | null | undefined,\n\tcontentIndex: number,\n): void {\n\tif (!block) return;\n\tif (block.type === \"text\") {\n\t\tstream.push({ type: \"text_end\", contentIndex, content: block.text, partial: output });\n\t\treturn;\n\t}\n\tstream.push({ type: \"thinking_end\", contentIndex, content: block.thinking, partial: output });\n}\n\nexport function mapStandardThinkingEffort(\n\tmodel: Pick<Model<Api>, \"thinkingLevelMap\">,\n\tlevel: \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\" | \"ultra\" | undefined,\n): string {\n\tconst mapped = level ? model.thinkingLevelMap?.[level] : undefined;\n\tif (typeof mapped === \"string\") return mapped;\n\tif (level === \"minimal\" || level === \"low\") return \"low\";\n\tif (level === \"medium\") return \"medium\";\n\treturn \"high\";\n}\n"]}
|
|
1
|
+
{"version":3,"file":"provider-runtime.js","sourceRoot":"","sources":["../../src/providers/provider-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { clampThinkingLevel } from \"../model-capabilities.ts\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tCacheRetention,\n\tImagesOptions,\n\tModel,\n\tProviderResponse,\n\tSimpleStreamOptions,\n\tStreamOptions,\n\tTextContent,\n\tThinkingContent,\n} from \"../types.ts\";\nimport { createEmptyUsage } from \"../usage.ts\";\nimport type { AssistantMessageEventStream } from \"../utils/event-stream.ts\";\nimport { headersToRecord } from \"../utils/headers.ts\";\nimport type { ProviderRetryOptions } from \"../utils/provider-retry.ts\";\nimport { buildBaseOptions } from \"./simple-options.ts\";\n\ntype ProviderRequestOptions = Pick<StreamOptions | ImagesOptions, \"signal\" | \"timeoutMs\">;\ntype ProviderRetrySource = Pick<StreamOptions | ImagesOptions, \"signal\" | \"maxRetries\" | \"maxRetryDelayMs\">;\ntype AssistantMessageOverrides = Partial<Pick<AssistantMessage, \"stopReason\" | \"errorMessage\">>;\ntype StreamingScratchField = \"index\" | \"partialArgs\" | \"partialArgsComplete\" | \"partialJson\" | \"streamIndex\";\n\nconst committedSuccessfulParses = new WeakSet<AssistantMessage>();\n\nfunction isSuccessfulStopReason(stopReason: AssistantMessage[\"stopReason\"]): boolean {\n\treturn stopReason !== \"aborted\" && stopReason !== \"error\";\n}\n\n/** Mark a fully parsed assistant message so a later iterator abort cannot rewrite it. */\nexport function commitSuccessfulAssistantParse(output: AssistantMessage): void {\n\tif (!isSuccessfulStopReason(output.stopReason)) return;\n\tcommittedSuccessfulParses.add(output);\n}\n\nexport function createAssistantMessage<TApi extends Api>(\n\tmodel: Model<TApi>,\n\toverrides: AssistantMessageOverrides = {},\n): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: model.api,\n\t\tprovider: model.provider,\n\t\tmodel: model.id,\n\t\tusage: createEmptyUsage(),\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t\t...overrides,\n\t};\n}\n\nexport function buildClampedSimpleOptions<TApi extends Api>(\n\tmodel: Model<TApi>,\n\toptions: SimpleStreamOptions | undefined,\n): {\n\tbase: StreamOptions;\n\tclampedReasoning: ReturnType<typeof clampThinkingLevel> | undefined;\n} {\n\tconst apiKey = options?.apiKey;\n\tif (!apiKey) throw new Error(`No API key for provider: ${model.provider}`);\n\treturn {\n\t\tbase: buildBaseOptions(model, options, apiKey),\n\t\tclampedReasoning: options.reasoning ? clampThinkingLevel(model, options.reasoning) : undefined,\n\t};\n}\n\nexport function resolveCacheRetention(cacheRetention?: CacheRetention): CacheRetention {\n\tif (cacheRetention) return cacheRetention;\n\tif (typeof process !== \"undefined\" && process.env.PI_CACHE_RETENTION === \"long\") return \"long\";\n\treturn \"short\";\n}\n\nexport async function applyProviderPayloadHook<TPayload, TModel>(\n\tpayload: TPayload,\n\tmodel: TModel,\n\thook?: (payload: unknown, model: TModel) => unknown | undefined | Promise<unknown | undefined>,\n): Promise<TPayload> {\n\tconst replacement = await hook?.(payload, model);\n\treturn replacement === undefined ? payload : (replacement as TPayload);\n}\n\nexport function createRetryFreeRequestOptions(\n\toptions: ProviderRequestOptions | undefined,\n\tdefaultTimeoutMs?: number,\n): { signal?: AbortSignal; timeout?: number; maxRetries: 0 } {\n\tconst timeout = options?.timeoutMs ?? defaultTimeoutMs;\n\treturn {\n\t\t...(options?.signal ? { signal: options.signal } : {}),\n\t\t...(timeout !== undefined ? { timeout } : {}),\n\t\tmaxRetries: 0,\n\t};\n}\n\nexport function createProviderRetryOptions(\n\toptions: ProviderRetrySource | undefined,\n\tdefaultMaxRetries?: number,\n): ProviderRetryOptions {\n\treturn {\n\t\tmaxRetries: options?.maxRetries ?? defaultMaxRetries,\n\t\tmaxRetryDelayMs: options?.maxRetryDelayMs,\n\t\tsignal: options?.signal,\n\t};\n}\n\nexport async function beginAssistantResponseStream<TModel>(\n\tstream: AssistantMessageEventStream,\n\toutput: AssistantMessage,\n\tresponse: { status: number; headers: Headers },\n\tmodel: TModel,\n\tonResponse?: (response: ProviderResponse, model: TModel) => void | Promise<void>,\n): Promise<void> {\n\tawait onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);\n\tstream.push({ type: \"start\", partial: output });\n}\n\n/**\n * Push the successful terminal event for a fully parsed assistant message.\n *\n * A late abort on `signal` must not discard that message: mid-stream abort is\n * the transport's job and is already converted by {@link terminateAssistantStreamWithError}.\n * Checking the signal here is a TOCTOU that drops completed-only / fast responses.\n */\nexport function completeAssistantStream(\n\tstream: AssistantMessageEventStream,\n\toutput: AssistantMessage,\n\t_signal?: AbortSignal,\n): void {\n\tif (output.stopReason === \"aborted\" || output.stopReason === \"error\") {\n\t\tthrow new Error(\"An unknown error occurred\");\n\t}\n\tstream.push({ type: \"done\", reason: output.stopReason, message: output });\n\tstream.end();\n}\n\nexport function terminateAssistantStreamWithError(\n\tstream: AssistantMessageEventStream,\n\toutput: AssistantMessage,\n\tsignal: AbortSignal | undefined,\n\terror: unknown,\n\toptions: {\n\t\tformatError: (error: unknown) => string;\n\t\tscratchFields?: readonly StreamingScratchField[];\n\t},\n): void {\n\tif (options.scratchFields) {\n\t\tfor (const block of output.content) {\n\t\t\tconst scratchBlock = block as typeof block & Partial<Record<StreamingScratchField, unknown>>;\n\t\t\tfor (const field of options.scratchFields) delete scratchBlock[field];\n\t\t}\n\t}\n\tif (committedSuccessfulParses.has(output) && isSuccessfulStopReason(output.stopReason)) {\n\t\tcompleteAssistantStream(stream, output);\n\t\treturn;\n\t}\n\toutput.stopReason = signal?.aborted ? \"aborted\" : \"error\";\n\toutput.errorMessage = options.formatError(error);\n\tstream.push({ type: \"error\", reason: output.stopReason, error: output });\n\tstream.end();\n}\n\nexport function finishTextOrThinkingBlock(\n\tstream: AssistantMessageEventStream,\n\toutput: AssistantMessage,\n\tblock: TextContent | ThinkingContent | null | undefined,\n\tcontentIndex: number,\n): void {\n\tif (!block) return;\n\tif (block.type === \"text\") {\n\t\tstream.push({ type: \"text_end\", contentIndex, content: block.text, partial: output });\n\t\treturn;\n\t}\n\tstream.push({ type: \"thinking_end\", contentIndex, content: block.thinking, partial: output });\n}\n\nexport function mapStandardThinkingEffort(\n\tmodel: Pick<Model<Api>, \"thinkingLevelMap\">,\n\tlevel: \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\" | \"ultra\" | undefined,\n): string {\n\tconst mapped = level ? model.thinkingLevelMap?.[level] : undefined;\n\tif (typeof mapped === \"string\") return mapped;\n\tif (level === \"minimal\" || level === \"low\") return \"low\";\n\tif (level === \"medium\") return \"medium\";\n\treturn \"high\";\n}\n"]}
|
package/dist/stream.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC;AAI1C,OAAO,KAAK,EACX,GAAG,EACH,gBAAgB,EAEhB,OAAO,EACP,KAAK,EACL,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EAEb,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC;AAI1C,OAAO,KAAK,EACX,GAAG,EACH,gBAAgB,EAEhB,OAAO,EACP,KAAK,EACL,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EAEb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,2BAA2B,EAAiC,MAAM,yBAAyB,CAAC;AAQrG,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAkEjD;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,GAAG,SAAS,GAChC,2BAA2B,CAQ7B;AAyUD;;;;GAIG;AACH,wBAAsB,+BAA+B,CAAC,QAAQ,SAAS,aAAa,EACnF,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,2BAA2B,EACpC,OAAO,EAAE,QAAQ,GAAG,SAAS,EAC7B,mBAAmB,EAAE,CACpB,eAAe,EAAE,OAAO,EACxB,eAAe,EAAE,QAAQ,GAAG,SAAS,KACjC,2BAA2B,GAAG,OAAO,CAAC,2BAA2B,CAAC,GACrE,OAAO,CAAC,2BAA2B,CAAC,CAgBtC;AAUD,wBAAgB,MAAM,CAAC,IAAI,SAAS,GAAG,EACtC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,qBAAqB,GAC7B,2BAA2B,CAM7B;AAED,wBAAsB,QAAQ,CAAC,IAAI,SAAS,GAAG,EAC9C,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CAG3B;AAED,wBAAgB,YAAY,CAAC,IAAI,SAAS,GAAG,EAC5C,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAC3B,2BAA2B,CAM7B;AAED,wBAAsB,cAAc,CAAC,IAAI,SAAS,GAAG,EACpD,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAG3B"}
|
package/dist/stream.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import "./providers/register-builtins.js";
|
|
2
2
|
import { getApiProvider } from "./api-registry.js";
|
|
3
3
|
import { getEnvApiKey, getEnvAuthHeaders } from "./env-api-keys.js";
|
|
4
|
+
import { createEmptyUsage } from "./usage.js";
|
|
4
5
|
import { combineAbortSignals } from "./utils/abort-signals.js";
|
|
5
|
-
import { AssistantMessageEventStream } from "./utils/event-stream.js";
|
|
6
|
+
import { AssistantMessageEventStream, STREAM_ENDED_WITHOUT_TERMINAL } from "./utils/event-stream.js";
|
|
6
7
|
import { generateTextToolProtocolPrimer, normalizeTextToolProtocolOptions, parseTextToolCalls, } from "./utils/tool-repair/text-protocol.js";
|
|
7
8
|
import { TextProtocolLiveFilter } from "./utils/tool-repair/text-protocol-live-filter.js";
|
|
8
9
|
export { getEnvApiKey } from "./env-api-keys.js";
|
|
@@ -248,8 +249,16 @@ function withTextToolProtocolResult(stream, model, context, options, control) {
|
|
|
248
249
|
let completedEnvelopeCount = 0;
|
|
249
250
|
let trailingProseLength = 0;
|
|
250
251
|
let completedProjection;
|
|
252
|
+
let lastPartial;
|
|
253
|
+
let sawTerminal = false;
|
|
251
254
|
try {
|
|
252
255
|
for await (const event of stream) {
|
|
256
|
+
if (event.type === "done" || event.type === "error") {
|
|
257
|
+
sawTerminal = true;
|
|
258
|
+
}
|
|
259
|
+
else if ("partial" in event) {
|
|
260
|
+
lastPartial = event.partial;
|
|
261
|
+
}
|
|
253
262
|
if (event.type !== "done") {
|
|
254
263
|
if (event.type === "text_delta" || event.type === "thinking_delta") {
|
|
255
264
|
if (completedProjection)
|
|
@@ -310,6 +319,24 @@ function withTextToolProtocolResult(stream, model, context, options, control) {
|
|
|
310
319
|
});
|
|
311
320
|
wrapped.push({ type: "done", reason: "toolUse", message: projection.message });
|
|
312
321
|
}
|
|
322
|
+
if (!sawTerminal) {
|
|
323
|
+
const source = lastPartial;
|
|
324
|
+
wrapped.push({
|
|
325
|
+
type: "error",
|
|
326
|
+
reason: "error",
|
|
327
|
+
error: {
|
|
328
|
+
role: "assistant",
|
|
329
|
+
content: source?.content ?? [],
|
|
330
|
+
api: model.api,
|
|
331
|
+
provider: model.provider,
|
|
332
|
+
model: model.id,
|
|
333
|
+
usage: source?.usage ?? createEmptyUsage(),
|
|
334
|
+
stopReason: "error",
|
|
335
|
+
errorMessage: source?.errorMessage ?? STREAM_ENDED_WITHOUT_TERMINAL,
|
|
336
|
+
timestamp: source?.timestamp ?? Date.now(),
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
}
|
|
313
340
|
}
|
|
314
341
|
finally {
|
|
315
342
|
control?.cleanup();
|