@caupulican/pi-ai 0.91.4 → 0.93.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"openai-responses-shared.d.ts","sourceRoot":"","sources":["../../src/providers/openai-responses-shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,IAAI,IAAI,UAAU,EAClB,6BAA6B,EAG7B,aAAa,EAQb,mBAAmB,EACnB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,KAAK,EACX,GAAG,EACH,gBAAgB,EAChB,OAAO,EAEP,KAAK,EAKL,IAAI,EAEJ,KAAK,EACL,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAI5E,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAyB7E,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,WAAW,CAEpF;AA4BD,MAAM,WAAW,4BAA4B;IAC5C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,6BAA6B,CAAC,cAAc,CAAC,CAAC;IAC5D,kBAAkB,CAAC,EAAE,CACpB,mBAAmB,EAAE,6BAA6B,CAAC,cAAc,CAAC,GAAG,SAAS,EAC9E,kBAAkB,EAAE,6BAA6B,CAAC,cAAc,CAAC,GAAG,SAAS,KACzE,6BAA6B,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAC/D,uBAAuB,CAAC,EAAE,CACzB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,6BAA6B,CAAC,cAAc,CAAC,GAAG,SAAS,KAClE,IAAI,CAAC;CACV;AAED,MAAM,WAAW,4BAA4B;IAC5C,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,+BAA+B;IAC/C,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC1B;AA0CD,wBAAgB,6BAA6B,CAAC,IAAI,SAAS,GAAG,EAC7D,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,6BAA6B,CAAC,cAAc,CAAC,GAAG,SAAS,EACtE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAC5B,IAAI,CAUN;AAMD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE/E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,SAAS,GAAG,EACxD,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,EAAE,OAAO,EAChB,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAAC,EAC7C,OAAO,CAAC,EAAE,+BAA+B,GACvC,aAAa,CA0Jf;AAMD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,4BAA4B,GAAG,UAAU,EAAE,CASzG;AAyBD,wBAAsB,sBAAsB,CAAC,IAAI,SAAS,GAAG,EAC5D,YAAY,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAChD,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,2BAA2B,EACnC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,CAAC,EAAE,4BAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CA2cf"}
1
+ {"version":3,"file":"openai-responses-shared.d.ts","sourceRoot":"","sources":["../../src/providers/openai-responses-shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,IAAI,IAAI,UAAU,EAClB,6BAA6B,EAG7B,aAAa,EAQb,mBAAmB,EACnB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,KAAK,EACX,GAAG,EACH,gBAAgB,EAChB,OAAO,EAEP,KAAK,EAKL,IAAI,EAEJ,KAAK,EACL,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAI5E,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAyB7E,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,WAAW,CAEpF;AA4BD,MAAM,WAAW,4BAA4B;IAC5C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,6BAA6B,CAAC,cAAc,CAAC,CAAC;IAC5D,kBAAkB,CAAC,EAAE,CACpB,mBAAmB,EAAE,6BAA6B,CAAC,cAAc,CAAC,GAAG,SAAS,EAC9E,kBAAkB,EAAE,6BAA6B,CAAC,cAAc,CAAC,GAAG,SAAS,KACzE,6BAA6B,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAC/D,uBAAuB,CAAC,EAAE,CACzB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,6BAA6B,CAAC,cAAc,CAAC,GAAG,SAAS,KAClE,IAAI,CAAC;CACV;AAED,MAAM,WAAW,4BAA4B;IAC5C,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,qGAAqG;IACrG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,+BAA+B;IAC/C,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACrC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC1B;AA0CD,wBAAgB,6BAA6B,CAAC,IAAI,SAAS,GAAG,EAC7D,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,6BAA6B,CAAC,cAAc,CAAC,GAAG,SAAS,EACtE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAC5B,IAAI,CAUN;AAMD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE/E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,SAAS,GAAG,EACxD,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,EAAE,OAAO,EAChB,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAAC,EAC7C,OAAO,CAAC,EAAE,+BAA+B,GACvC,aAAa,CA4Lf;AAMD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,4BAA4B,GAAG,UAAU,EAAE,CAgBzG;AAyBD,wBAAsB,sBAAsB,CAAC,IAAI,SAAS,GAAG,EAC5D,YAAY,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAChD,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,2BAA2B,EACnC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,CAAC,EAAE,4BAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CA2cf"}
@@ -98,6 +98,15 @@ export function buildResponsesInstructions(context) {
98
98
  export function convertResponsesMessages(model, context, allowedToolCallProviders, options) {
99
99
  const messages = [];
100
100
  const imageDetail = options?.imageDetail === undefined ? "auto" : options.imageDetail;
101
+ const useXaiCliFormat = options?.requestFormat === "xai-cli";
102
+ const includeMessageType = useXaiCliFormat || options?.includeMessageType === true;
103
+ if (useXaiCliFormat && context.systemPrompt) {
104
+ messages.push({
105
+ type: "message",
106
+ role: "system",
107
+ content: sanitizeSurrogates(context.systemPrompt),
108
+ });
109
+ }
101
110
  const normalizeIdPart = (part) => {
102
111
  const sanitized = part.replace(/[^a-zA-Z0-9_-]/g, "_");
103
112
  const normalized = sanitized.length > 64 ? sanitized.slice(0, 64) : sanitized;
@@ -127,10 +136,13 @@ export function convertResponsesMessages(model, context, allowedToolCallProvider
127
136
  for (const msg of transformedMessages) {
128
137
  if (msg.role === "user") {
129
138
  if (typeof msg.content === "string") {
130
- messages.push({
131
- role: "user",
132
- content: [{ type: "input_text", text: sanitizeSurrogates(msg.content) }],
133
- });
139
+ messages.push(useXaiCliFormat
140
+ ? { type: "message", role: "user", content: sanitizeSurrogates(msg.content) }
141
+ : {
142
+ ...(includeMessageType ? { type: "message" } : {}),
143
+ role: "user",
144
+ content: [{ type: "input_text", text: sanitizeSurrogates(msg.content) }],
145
+ });
134
146
  }
135
147
  else {
136
148
  const content = msg.content.map((item) => {
@@ -145,6 +157,7 @@ export function convertResponsesMessages(model, context, allowedToolCallProvider
145
157
  if (content.length === 0)
146
158
  continue;
147
159
  messages.push({
160
+ ...(includeMessageType ? { type: "message" } : {}),
148
161
  role: "user",
149
162
  content,
150
163
  });
@@ -161,11 +174,31 @@ export function convertResponsesMessages(model, context, allowedToolCallProvider
161
174
  if (block.type === "thinking") {
162
175
  if (block.thinkingSignature) {
163
176
  const reasoningItem = JSON.parse(block.thinkingSignature);
164
- output.push(reasoningItem);
177
+ if (useXaiCliFormat) {
178
+ output.push({
179
+ type: "reasoning",
180
+ id: reasoningItem.id,
181
+ summary: reasoningItem.summary,
182
+ ...(reasoningItem.encrypted_content
183
+ ? { encrypted_content: reasoningItem.encrypted_content }
184
+ : {}),
185
+ });
186
+ }
187
+ else {
188
+ output.push(reasoningItem);
189
+ }
165
190
  }
166
191
  }
167
192
  else if (block.type === "text") {
168
193
  const textBlock = block;
194
+ if (useXaiCliFormat) {
195
+ output.push({
196
+ type: "message",
197
+ role: "assistant",
198
+ content: sanitizeSurrogates(textBlock.text),
199
+ });
200
+ continue;
201
+ }
169
202
  const parsedSignature = parseTextSignature(textBlock.textSignature);
170
203
  const fallbackMessageId = textBlockIndex === 0 ? `msg_pi_${msgIndex}` : `msg_pi_${msgIndex}_${textBlockIndex}`;
171
204
  textBlockIndex++;
@@ -198,7 +231,7 @@ export function convertResponsesMessages(model, context, allowedToolCallProvider
198
231
  }
199
232
  output.push({
200
233
  type: "function_call",
201
- id: itemId,
234
+ id: useXaiCliFormat ? undefined : itemId,
202
235
  call_id: callId,
203
236
  name: options?.toolNameMap?.toProviderName(toolCall.name) ?? toolCall.name,
204
237
  arguments: JSON.stringify(toolCall.arguments),
@@ -248,13 +281,20 @@ export function convertResponsesMessages(model, context, allowedToolCallProvider
248
281
  // =============================================================================
249
282
  export function convertResponsesTools(tools, options) {
250
283
  const strict = options?.strict === undefined ? false : options.strict;
251
- return tools.map((tool) => ({
252
- type: "function",
253
- name: options?.toolNameMap?.toProviderName(tool.name) ?? tool.name,
254
- description: tool.description,
255
- parameters: tool.parameters, // TypeBox already generates JSON Schema
256
- strict,
257
- }));
284
+ return tools.map((tool) => {
285
+ const converted = {
286
+ type: "function",
287
+ name: options?.toolNameMap?.toProviderName(tool.name) ?? tool.name,
288
+ description: tool.description,
289
+ parameters: tool.parameters, // TypeBox already generates JSON Schema
290
+ strict,
291
+ };
292
+ if (options?.omitStrict === true) {
293
+ // The installed Grok CLI omits this field, while the OpenAI SDK type requires it.
294
+ delete converted.strict;
295
+ }
296
+ return converted;
297
+ });
258
298
  }
259
299
  // =============================================================================
260
300
  // Stream processing
@@ -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 { 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 functionCallBlocksByItemId = new Map<string, ToolCall & { partialJson?: string }>();\n\tconst functionCallBlocksByCallId = new Map<string, ToolCall & { partialJson?: string }>();\n\tconst outputItemKeys = (item: { type: string; id?: string | null; call_id?: string }): string[] => {\n\t\tif (item.type === \"reasoning\" || item.type === \"message\") {\n\t\t\treturn item.id ? [`${item.type}:${item.id}`] : [];\n\t\t}\n\t\tif (item.type === \"function_call\") {\n\t\t\tconst keys: string[] = [];\n\t\t\tif (item.id) keys.push(`function_call:id:${item.id}`);\n\t\t\tif (item.call_id) keys.push(`function_call:call:${item.call_id}`);\n\t\t\tkeys.push(`function_call:${item.call_id ?? \"\"}|${item.id ?? \"\"}`);\n\t\t\treturn keys;\n\t\t}\n\t\treturn [];\n\t};\n\tconst registerFunctionCallBlock = (\n\t\titem: { id?: string | null; call_id?: string },\n\t\tblock: ToolCall & { partialJson?: string },\n\t): void => {\n\t\tif (item.id) functionCallBlocksByItemId.set(item.id, block);\n\t\tif (item.call_id) functionCallBlocksByCallId.set(item.call_id, block);\n\t};\n\tconst findFunctionCallBlock = (\n\t\titem: ResponseFunctionToolCall,\n\t): (ToolCall & { partialJson?: string }) | undefined => {\n\t\tconst id = `${item.call_id}|${item.id}`;\n\t\tconst byExactId = 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 (byExactId) return byExactId;\n\t\tif (item.id) {\n\t\t\tconst byItemId = functionCallBlocksByItemId.get(item.id);\n\t\t\tif (byItemId) return byItemId;\n\t\t}\n\t\tif (item.call_id) {\n\t\t\tconst byCallId = functionCallBlocksByCallId.get(item.call_id);\n\t\t\tif (byCallId) return byCallId;\n\t\t}\n\t\tif (currentBlock?.type === \"toolCall\") return currentBlock;\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 keys = outputItemKeys(item);\n\t\tif (keys.some((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\tfor (const key of keys) 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\t// xAI/Grok emits message.added + deltas, then function_call items, then\n\t\t\t// message.done / response.output. currentBlock has already moved to the\n\t\t\t// tool; the live text block must be reused or the same sentence is stored\n\t\t\t// twice (unsigned before tools, signed after).\n\t\t\tif (!block) {\n\t\t\t\tblock = [...output.content]\n\t\t\t\t\t.reverse()\n\t\t\t\t\t.find(\n\t\t\t\t\t\t(candidate): candidate is TextContent =>\n\t\t\t\t\t\t\tcandidate.type === \"text\" &&\n\t\t\t\t\t\t\t!candidate.textSignature &&\n\t\t\t\t\t\t\t(candidate.text === \"\" ||\n\t\t\t\t\t\t\t\ttext === \"\" ||\n\t\t\t\t\t\t\t\ttext.startsWith(candidate.text) ||\n\t\t\t\t\t\t\t\tcandidate.text.startsWith(text)),\n\t\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\tfor (const key of keys) finalizedOutputItemKeys.add(key);\n\t\t\treturn;\n\t\t}\n\n\t\tconst id = `${item.call_id}|${item.id}`;\n\t\tlet block = findFunctionCallBlock(item);\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} else {\n\t\t\tblock.id = id;\n\t\t\tblock.name = options?.toolNameMap?.toOriginalName(item.name) ?? item.name;\n\t\t}\n\t\tblock.arguments = parseStreamingJson(block.partialJson || item.arguments || \"{}\");\n\t\tdelete block.partialJson;\n\t\tregisterFunctionCallBlock(item, block);\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\tfor (const key of keys) 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\tif (item.id) reasoningBlocksById.set(item.id, 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\tif (item.id) {\n\t\t\t\t\t\tcurrentBlock.textSignature = encodeTextSignatureV1(item.id, item.phase ?? undefined);\n\t\t\t\t\t}\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\tregisterFunctionCallBlock(item, 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"]}
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\t/** Omit the strict field for transports whose wire schema rejects it, such as the Grok CLI proxy. */\n\tomitStrict?: boolean;\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\t/** Emit the explicit Responses message discriminator required by Lite transports. */\n\tincludeMessageType?: boolean;\n\trequestFormat?: \"openai\" | \"xai-cli\";\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\tconst useXaiCliFormat = options?.requestFormat === \"xai-cli\";\n\tconst includeMessageType = useXaiCliFormat || options?.includeMessageType === true;\n\tif (useXaiCliFormat && context.systemPrompt) {\n\t\tmessages.push({\n\t\t\ttype: \"message\",\n\t\t\trole: \"system\",\n\t\t\tcontent: sanitizeSurrogates(context.systemPrompt),\n\t\t});\n\t}\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\tuseXaiCliFormat\n\t\t\t\t\t\t? { type: \"message\", role: \"user\", content: sanitizeSurrogates(msg.content) }\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t...(includeMessageType ? { type: \"message\" as const } : {}),\n\t\t\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\t\t\tcontent: [{ type: \"input_text\", text: sanitizeSurrogates(msg.content) }],\n\t\t\t\t\t\t\t},\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\t...(includeMessageType ? { type: \"message\" as const } : {}),\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\tif (useXaiCliFormat) {\n\t\t\t\t\t\t\toutput.push({\n\t\t\t\t\t\t\t\ttype: \"reasoning\",\n\t\t\t\t\t\t\t\tid: reasoningItem.id,\n\t\t\t\t\t\t\t\tsummary: reasoningItem.summary,\n\t\t\t\t\t\t\t\t...(reasoningItem.encrypted_content\n\t\t\t\t\t\t\t\t\t? { encrypted_content: reasoningItem.encrypted_content }\n\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\toutput.push(reasoningItem);\n\t\t\t\t\t\t}\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\tif (useXaiCliFormat) {\n\t\t\t\t\t\toutput.push({\n\t\t\t\t\t\t\ttype: \"message\",\n\t\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\t\tcontent: sanitizeSurrogates(textBlock.text),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\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: useXaiCliFormat ? undefined : 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\tconst converted: Extract<OpenAITool, { type: \"function\" }> = {\n\t\t\ttype: \"function\",\n\t\t\tname: options?.toolNameMap?.toProviderName(tool.name) ?? tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.parameters as any, // TypeBox already generates JSON Schema\n\t\t\tstrict,\n\t\t};\n\t\tif (options?.omitStrict === true) {\n\t\t\t// The installed Grok CLI omits this field, while the OpenAI SDK type requires it.\n\t\t\tdelete (converted as Partial<typeof converted>).strict;\n\t\t}\n\t\treturn converted;\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 functionCallBlocksByItemId = new Map<string, ToolCall & { partialJson?: string }>();\n\tconst functionCallBlocksByCallId = new Map<string, ToolCall & { partialJson?: string }>();\n\tconst outputItemKeys = (item: { type: string; id?: string | null; call_id?: string }): string[] => {\n\t\tif (item.type === \"reasoning\" || item.type === \"message\") {\n\t\t\treturn item.id ? [`${item.type}:${item.id}`] : [];\n\t\t}\n\t\tif (item.type === \"function_call\") {\n\t\t\tconst keys: string[] = [];\n\t\t\tif (item.id) keys.push(`function_call:id:${item.id}`);\n\t\t\tif (item.call_id) keys.push(`function_call:call:${item.call_id}`);\n\t\t\tkeys.push(`function_call:${item.call_id ?? \"\"}|${item.id ?? \"\"}`);\n\t\t\treturn keys;\n\t\t}\n\t\treturn [];\n\t};\n\tconst registerFunctionCallBlock = (\n\t\titem: { id?: string | null; call_id?: string },\n\t\tblock: ToolCall & { partialJson?: string },\n\t): void => {\n\t\tif (item.id) functionCallBlocksByItemId.set(item.id, block);\n\t\tif (item.call_id) functionCallBlocksByCallId.set(item.call_id, block);\n\t};\n\tconst findFunctionCallBlock = (\n\t\titem: ResponseFunctionToolCall,\n\t): (ToolCall & { partialJson?: string }) | undefined => {\n\t\tconst id = `${item.call_id}|${item.id}`;\n\t\tconst byExactId = 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 (byExactId) return byExactId;\n\t\tif (item.id) {\n\t\t\tconst byItemId = functionCallBlocksByItemId.get(item.id);\n\t\t\tif (byItemId) return byItemId;\n\t\t}\n\t\tif (item.call_id) {\n\t\t\tconst byCallId = functionCallBlocksByCallId.get(item.call_id);\n\t\t\tif (byCallId) return byCallId;\n\t\t}\n\t\tif (currentBlock?.type === \"toolCall\") return currentBlock;\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 keys = outputItemKeys(item);\n\t\tif (keys.some((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\tfor (const key of keys) 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\t// xAI/Grok emits message.added + deltas, then function_call items, then\n\t\t\t// message.done / response.output. currentBlock has already moved to the\n\t\t\t// tool; the live text block must be reused or the same sentence is stored\n\t\t\t// twice (unsigned before tools, signed after).\n\t\t\tif (!block) {\n\t\t\t\tblock = [...output.content]\n\t\t\t\t\t.reverse()\n\t\t\t\t\t.find(\n\t\t\t\t\t\t(candidate): candidate is TextContent =>\n\t\t\t\t\t\t\tcandidate.type === \"text\" &&\n\t\t\t\t\t\t\t!candidate.textSignature &&\n\t\t\t\t\t\t\t(candidate.text === \"\" ||\n\t\t\t\t\t\t\t\ttext === \"\" ||\n\t\t\t\t\t\t\t\ttext.startsWith(candidate.text) ||\n\t\t\t\t\t\t\t\tcandidate.text.startsWith(text)),\n\t\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\tfor (const key of keys) finalizedOutputItemKeys.add(key);\n\t\t\treturn;\n\t\t}\n\n\t\tconst id = `${item.call_id}|${item.id}`;\n\t\tlet block = findFunctionCallBlock(item);\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} else {\n\t\t\tblock.id = id;\n\t\t\tblock.name = options?.toolNameMap?.toOriginalName(item.name) ?? item.name;\n\t\t}\n\t\tblock.arguments = parseStreamingJson(block.partialJson || item.arguments || \"{}\");\n\t\tdelete block.partialJson;\n\t\tregisterFunctionCallBlock(item, block);\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\tfor (const key of keys) 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\tif (item.id) reasoningBlocksById.set(item.id, 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\tif (item.id) {\n\t\t\t\t\t\tcurrentBlock.textSignature = encodeTextSignatureV1(item.id, item.phase ?? undefined);\n\t\t\t\t\t}\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\tregisterFunctionCallBlock(item, 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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../src/providers/openai-responses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AAE7F,OAAO,KAAK,EAKX,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,MAAM,aAAa,CAAC;AAuDrB,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC5D,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;IAC7F,gBAAgB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1D,WAAW,CAAC,EAAE,6BAA6B,CAAC,cAAc,CAAC,CAAC;IAC5D,UAAU,CAAC,EAAE,6BAA6B,CAAC,aAAa,CAAC,CAAC;CAC1D;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,kBAAkB,EAAE,sBAAsB,CA2D5F,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,cAAc,CAAC,kBAAkB,EAAE,mBAAmB,CAmB/F,CAAC"}
1
+ {"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../src/providers/openai-responses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AAE7F,OAAO,KAAK,EAKX,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,MAAM,aAAa,CAAC;AAwDrB,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC5D,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;IAC7F,gBAAgB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1D,WAAW,CAAC,EAAE,6BAA6B,CAAC,cAAc,CAAC,CAAC;IAC5D,UAAU,CAAC,EAAE,6BAA6B,CAAC,aAAa,CAAC,CAAC;CAC1D;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,kBAAkB,EAAE,sBAAsB,CA2D5F,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,cAAc,CAAC,kBAAkB,EAAE,mBAAmB,CAmB/F,CAAC"}
@@ -17,6 +17,7 @@ function detectSessionAffinityFormat(model) {
17
17
  function getCompat(model) {
18
18
  return {
19
19
  sessionAffinityFormat: model.compat?.sessionAffinityFormat ?? detectSessionAffinityFormat(model),
20
+ requestFormat: model.compat?.requestFormat ?? "openai",
20
21
  supportsReasoningEffort: model.compat?.supportsReasoningEffort ?? true,
21
22
  supportsLongCacheRetention: model.compat?.supportsLongCacheRetention ?? true,
22
23
  };
@@ -107,13 +108,17 @@ function resolveBaseUrl(model) {
107
108
  }
108
109
  function buildParams(model, context, options) {
109
110
  const toolNameMap = createOpenAIResponsesToolNameMap(context.tools ?? []);
110
- const messages = convertResponsesMessages(model, context, OPENAI_TOOL_CALL_PROVIDERS, { toolNameMap });
111
111
  const cacheRetention = resolveCacheRetention(options?.cacheRetention);
112
112
  const compat = getCompat(model);
113
+ const useXaiCliFormat = compat.requestFormat === "xai-cli";
114
+ const messages = convertResponsesMessages(model, context, OPENAI_TOOL_CALL_PROVIDERS, {
115
+ requestFormat: compat.requestFormat,
116
+ toolNameMap,
117
+ });
113
118
  const isGpt56 = model.provider === "openai" && model.id.startsWith("gpt-5.6");
114
119
  const params = {
115
120
  model: model.id,
116
- instructions: buildResponsesInstructions(context),
121
+ instructions: useXaiCliFormat ? undefined : buildResponsesInstructions(context),
117
122
  input: messages,
118
123
  stream: true,
119
124
  prompt_cache_key: cacheRetention === "none" ? undefined : clampOpenAIPromptCacheKey(options?.sessionId),
@@ -137,7 +142,7 @@ function buildParams(model, context, options) {
137
142
  params.service_tier = options.serviceTier;
138
143
  }
139
144
  if (context.tools && context.tools.length > 0) {
140
- params.tools = convertResponsesTools(context.tools, { toolNameMap });
145
+ params.tools = convertResponsesTools(context.tools, { omitStrict: useXaiCliFormat, toolNameMap });
141
146
  }
142
147
  if (options?.toolChoice !== undefined) {
143
148
  params.tool_choice = options.toolChoice;
@@ -157,7 +162,7 @@ function buildParams(model, context, options) {
157
162
  params.reasoning = {
158
163
  effort: effort,
159
164
  ...(supportsReasoningSummary && !reasoningDisabled && options?.reasoningSummary !== null
160
- ? { summary: options?.reasoningSummary ?? "auto" }
165
+ ? { summary: options?.reasoningSummary ?? (useXaiCliFormat ? "concise" : "auto") }
161
166
  : {}),
162
167
  ...(options?.reasoningMode ? { mode: options.reasoningMode } : {}),
163
168
  ...(options?.reasoningContext ? { context: options.reasoningContext } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"openai-responses.js","sourceRoot":"","sources":["../../src/providers/openai-responses.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ResponseCreateParamsStreaming } from \"openai/resources/responses/responses.js\";\nimport { clampThinkingLevel } from \"../models.ts\";\nimport type {\n\tCacheRetention,\n\tContext,\n\tModel,\n\tOpenAIResponsesCompat,\n\tSimpleStreamOptions,\n\tStreamFunction,\n\tStreamOptions,\n} from \"../types.ts\";\nimport { formatProviderError, normalizeProviderError } from \"../utils/error-body.ts\";\nimport { AssistantMessageEventStream } from \"../utils/event-stream.ts\";\nimport { retryProviderRequest } from \"../utils/provider-retry.ts\";\nimport { isCloudflareProvider, resolveCloudflareBaseUrl } from \"./cloudflare.ts\";\nimport { createOpenAIClient } from \"./openai-client.ts\";\nimport { clampOpenAIPromptCacheKey } from \"./openai-prompt-cache.ts\";\nimport {\n\tapplyOpenAIServiceTierPricing,\n\tbuildResponsesInstructions,\n\tconvertResponsesMessages,\n\tconvertResponsesTools,\n\tcreateOpenAIResponsesToolNameMap,\n\tprocessResponsesStream,\n} from \"./openai-responses-shared.ts\";\nimport {\n\tapplyProviderPayloadHook,\n\tbeginAssistantResponseStream,\n\tcompleteAssistantStream,\n\tcreateAssistantMessage,\n\tcreateProviderRetryOptions,\n\tcreateRetryFreeRequestOptions,\n\tresolveCacheRetention,\n\tterminateAssistantStreamWithError,\n} from \"./provider-runtime.ts\";\nimport { buildBaseOptions } from \"./simple-options.ts\";\n\nconst OPENAI_TOOL_CALL_PROVIDERS = new Set([\"openai\", \"openai-codex\", \"opencode\", \"fugu\"]);\nconst FUGU_DEFAULT_TIMEOUT_MS = 7_200_000;\nconst FUGU_DEFAULT_MAX_RETRIES = 4;\n\nfunction detectSessionAffinityFormat(model: Pick<Model<\"openai-responses\">, \"provider\" | \"baseUrl\">) {\n\treturn model.provider === \"openrouter\" || model.baseUrl.includes(\"openrouter.ai\") ? \"openrouter\" : \"openai\";\n}\n\nfunction getCompat(model: Model<\"openai-responses\">): Required<OpenAIResponsesCompat> {\n\treturn {\n\t\tsessionAffinityFormat: model.compat?.sessionAffinityFormat ?? detectSessionAffinityFormat(model),\n\t\tsupportsReasoningEffort: model.compat?.supportsReasoningEffort ?? true,\n\t\tsupportsLongCacheRetention: model.compat?.supportsLongCacheRetention ?? true,\n\t};\n}\n\nfunction getPromptCacheRetention(\n\tcompat: Required<OpenAIResponsesCompat>,\n\tcacheRetention: CacheRetention,\n): \"24h\" | undefined {\n\treturn cacheRetention === \"long\" && compat.supportsLongCacheRetention ? \"24h\" : undefined;\n}\n\nfunction formatOpenAIResponsesError(error: unknown): string {\n\treturn formatProviderError(normalizeProviderError(error), \"OpenAI API error\");\n}\n\n// OpenAI Responses-specific options\nexport interface OpenAIResponsesOptions extends StreamOptions {\n\treasoningEffort?: \"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\" | \"ultra\";\n\treasoningSummary?: \"auto\" | \"detailed\" | \"concise\" | null;\n\tserviceTier?: ResponseCreateParamsStreaming[\"service_tier\"];\n\ttoolChoice?: ResponseCreateParamsStreaming[\"tool_choice\"];\n}\n\n/**\n * Generate function for OpenAI Responses API\n */\nexport const streamOpenAIResponses: StreamFunction<\"openai-responses\", OpenAIResponsesOptions> = (\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\toptions?: OpenAIResponsesOptions,\n): AssistantMessageEventStream => {\n\tconst stream = new AssistantMessageEventStream();\n\n\t// Start async processing\n\t(async () => {\n\t\tconst output = createAssistantMessage(model);\n\n\t\ttry {\n\t\t\t// Create OpenAI client\n\t\t\tconst apiKey = options?.apiKey;\n\t\t\tif (!apiKey) {\n\t\t\t\tthrow new Error(`No API key for provider: ${model.provider}`);\n\t\t\t}\n\t\t\tconst cacheRetention = resolveCacheRetention(options?.cacheRetention);\n\t\t\tconst cacheSessionId = cacheRetention === \"none\" ? undefined : options?.sessionId;\n\t\t\tconst compat = getCompat(model);\n\t\t\tconst client = createOpenAIClient(model, apiKey, {\n\t\t\t\tbaseUrl: resolveBaseUrl(model),\n\t\t\t\tcontext,\n\t\t\t\tcallerHeaders: options?.headers,\n\t\t\t\tsession: cacheSessionId\n\t\t\t\t\t? { id: cacheSessionId, format: compat.sessionAffinityFormat, includeLegacyAffinity: false }\n\t\t\t\t\t: undefined,\n\t\t\t});\n\t\t\tconst toolNameMap = createOpenAIResponsesToolNameMap(context.tools ?? []);\n\t\t\tconst params = await applyProviderPayloadHook(buildParams(model, context, options), model, options?.onPayload);\n\t\t\tconst requestOptions = createRetryFreeRequestOptions(\n\t\t\t\toptions,\n\t\t\t\tmodel.provider === \"fugu\" ? FUGU_DEFAULT_TIMEOUT_MS : undefined,\n\t\t\t);\n\t\t\tconst { data: openaiStream, response } = await retryProviderRequest(\n\t\t\t\t() => client.responses.create(params, requestOptions).withResponse(),\n\t\t\t\tcreateProviderRetryOptions(options, model.provider === \"fugu\" ? FUGU_DEFAULT_MAX_RETRIES : 0),\n\t\t\t);\n\t\t\tawait beginAssistantResponseStream(stream, output, response, model, options?.onResponse);\n\n\t\t\tawait processResponsesStream(openaiStream, output, stream, model, {\n\t\t\t\ttoolNameMap,\n\t\t\t\tserviceTier: options?.serviceTier,\n\t\t\t\tapplyServiceTierPricing:\n\t\t\t\t\tmodel.provider === \"fugu\"\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: (usage, serviceTier) => applyOpenAIServiceTierPricing(usage, serviceTier, model),\n\t\t\t});\n\n\t\t\tcompleteAssistantStream(stream, output, options?.signal);\n\t\t} catch (error) {\n\t\t\tterminateAssistantStreamWithError(stream, output, options?.signal, error, {\n\t\t\t\tformatError: formatOpenAIResponsesError,\n\t\t\t\tscratchFields: [\"index\", \"partialJson\"],\n\t\t\t});\n\t\t}\n\t})();\n\n\treturn stream;\n};\n\nexport const streamSimpleOpenAIResponses: StreamFunction<\"openai-responses\", SimpleStreamOptions> = (\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n): AssistantMessageEventStream => {\n\tconst apiKey = options?.apiKey;\n\tif (!apiKey) {\n\t\tthrow new Error(`No API key for provider: ${model.provider}`);\n\t}\n\n\tconst base = buildBaseOptions(model, options, apiKey);\n\tconst requestedReasoning = options?.reasoning ?? model.defaultThinkingLevel;\n\tconst clampedReasoning = requestedReasoning ? clampThinkingLevel(model, requestedReasoning) : undefined;\n\tconst reasoningEffort = clampedReasoning === \"off\" ? \"none\" : clampedReasoning;\n\n\treturn streamOpenAIResponses(model, context, {\n\t\t...base,\n\t\treasoningEffort,\n\t} satisfies OpenAIResponsesOptions);\n};\n\nfunction resolveFuguBaseUrl(): string | undefined {\n\tif (typeof process === \"undefined\") return undefined;\n\tconst value = process.env.FUGU_BASE_URL?.trim();\n\tif (!value) return undefined;\n\tconst baseUrl = value.replace(/\\/+$/, \"\");\n\treturn baseUrl.endsWith(\"/v1\") ? baseUrl : `${baseUrl}/v1`;\n}\n\nfunction resolveBaseUrl(model: Model<\"openai-responses\">): string {\n\tif (isCloudflareProvider(model.provider)) return resolveCloudflareBaseUrl(model);\n\tif (model.provider === \"fugu\") return resolveFuguBaseUrl() ?? model.baseUrl;\n\treturn model.baseUrl;\n}\n\nfunction buildParams(model: Model<\"openai-responses\">, context: Context, options?: OpenAIResponsesOptions) {\n\tconst toolNameMap = createOpenAIResponsesToolNameMap(context.tools ?? []);\n\tconst messages = convertResponsesMessages(model, context, OPENAI_TOOL_CALL_PROVIDERS, { toolNameMap });\n\n\tconst cacheRetention = resolveCacheRetention(options?.cacheRetention);\n\tconst compat = getCompat(model);\n\tconst isGpt56 = model.provider === \"openai\" && model.id.startsWith(\"gpt-5.6\");\n\tconst params: ResponseCreateParamsStreaming = {\n\t\tmodel: model.id,\n\t\tinstructions: buildResponsesInstructions(context),\n\t\tinput: messages,\n\t\tstream: true,\n\t\tprompt_cache_key: cacheRetention === \"none\" ? undefined : clampOpenAIPromptCacheKey(options?.sessionId),\n\t\t...(cacheRetention !== \"none\" && isGpt56\n\t\t\t? { prompt_cache_options: options?.promptCacheOptions ?? { mode: \"implicit\" as const, ttl: \"30m\" as const } }\n\t\t\t: {}),\n\t\t...(isGpt56 ? {} : { prompt_cache_retention: getPromptCacheRetention(compat, cacheRetention) }),\n\t\tstore: false,\n\t};\n\tconst safetyIdentifier = options?.metadata?.safety_identifier;\n\tif (typeof safetyIdentifier === \"string\" && safetyIdentifier.length > 0) {\n\t\tparams.safety_identifier = safetyIdentifier;\n\t}\n\n\tif (options?.maxTokens) {\n\t\tparams.max_output_tokens = options?.maxTokens;\n\t}\n\n\tif (options?.temperature !== undefined) {\n\t\tparams.temperature = options?.temperature;\n\t}\n\n\tif (options?.serviceTier !== undefined && model.provider !== \"fugu\") {\n\t\tparams.service_tier = options.serviceTier;\n\t}\n\n\tif (context.tools && context.tools.length > 0) {\n\t\tparams.tools = convertResponsesTools(context.tools, { toolNameMap });\n\t}\n\tif (options?.toolChoice !== undefined) {\n\t\tparams.tool_choice = options.toolChoice;\n\t}\n\n\tif (model.reasoning && compat.supportsReasoningEffort) {\n\t\tif (\n\t\t\toptions?.reasoningEffort ||\n\t\t\toptions?.reasoningSummary !== undefined ||\n\t\t\toptions?.reasoningMode ||\n\t\t\toptions?.reasoningContext\n\t\t) {\n\t\t\tconst effort = options?.reasoningEffort\n\t\t\t\t? options.reasoningEffort === \"none\"\n\t\t\t\t\t? (model.thinkingLevelMap?.off ?? \"none\")\n\t\t\t\t\t: (model.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort)\n\t\t\t\t: \"medium\";\n\t\t\tconst reasoningDisabled = options?.reasoningEffort === \"none\";\n\t\t\tconst supportsReasoningSummary = model.provider !== \"fugu\" || model.id === \"fugu-ultra\";\n\t\t\tparams.reasoning = {\n\t\t\t\teffort: effort as NonNullable<typeof params.reasoning>[\"effort\"],\n\t\t\t\t...(supportsReasoningSummary && !reasoningDisabled && options?.reasoningSummary !== null\n\t\t\t\t\t? { summary: options?.reasoningSummary ?? \"auto\" }\n\t\t\t\t\t: {}),\n\t\t\t\t...(options?.reasoningMode ? { mode: options.reasoningMode } : {}),\n\t\t\t\t...(options?.reasoningContext ? { context: options.reasoningContext } : {}),\n\t\t\t};\n\t\t\tif (supportsReasoningSummary && !reasoningDisabled) {\n\t\t\t\tparams.include = [\"reasoning.encrypted_content\"];\n\t\t\t}\n\t\t} else if (model.provider !== \"github-copilot\" && model.thinkingLevelMap?.off !== null) {\n\t\t\tparams.reasoning = {\n\t\t\t\teffort: (model.thinkingLevelMap?.off ?? \"none\") as NonNullable<typeof params.reasoning>[\"effort\"],\n\t\t\t};\n\t\t}\n\t\t// xAI always returns encrypted reasoning items that must be echoed back on the next turn,\n\t\t// even when no reasoning effort was requested (e.g. thinkingLevelMap.off === null skips the\n\t\t// branch above entirely). Without this, encrypted reasoning silently drops across turns.\n\t\tif (model.provider === \"xai\") {\n\t\t\tparams.include = [\"reasoning.encrypted_content\"];\n\t\t}\n\t}\n\n\treturn params;\n}\n"]}
1
+ {"version":3,"file":"openai-responses.js","sourceRoot":"","sources":["../../src/providers/openai-responses.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ResponseCreateParamsStreaming } from \"openai/resources/responses/responses.js\";\nimport { clampThinkingLevel } from \"../models.ts\";\nimport type {\n\tCacheRetention,\n\tContext,\n\tModel,\n\tOpenAIResponsesCompat,\n\tSimpleStreamOptions,\n\tStreamFunction,\n\tStreamOptions,\n} from \"../types.ts\";\nimport { formatProviderError, normalizeProviderError } from \"../utils/error-body.ts\";\nimport { AssistantMessageEventStream } from \"../utils/event-stream.ts\";\nimport { retryProviderRequest } from \"../utils/provider-retry.ts\";\nimport { isCloudflareProvider, resolveCloudflareBaseUrl } from \"./cloudflare.ts\";\nimport { createOpenAIClient } from \"./openai-client.ts\";\nimport { clampOpenAIPromptCacheKey } from \"./openai-prompt-cache.ts\";\nimport {\n\tapplyOpenAIServiceTierPricing,\n\tbuildResponsesInstructions,\n\tconvertResponsesMessages,\n\tconvertResponsesTools,\n\tcreateOpenAIResponsesToolNameMap,\n\tprocessResponsesStream,\n} from \"./openai-responses-shared.ts\";\nimport {\n\tapplyProviderPayloadHook,\n\tbeginAssistantResponseStream,\n\tcompleteAssistantStream,\n\tcreateAssistantMessage,\n\tcreateProviderRetryOptions,\n\tcreateRetryFreeRequestOptions,\n\tresolveCacheRetention,\n\tterminateAssistantStreamWithError,\n} from \"./provider-runtime.ts\";\nimport { buildBaseOptions } from \"./simple-options.ts\";\n\nconst OPENAI_TOOL_CALL_PROVIDERS = new Set([\"openai\", \"openai-codex\", \"opencode\", \"fugu\"]);\nconst FUGU_DEFAULT_TIMEOUT_MS = 7_200_000;\nconst FUGU_DEFAULT_MAX_RETRIES = 4;\n\nfunction detectSessionAffinityFormat(model: Pick<Model<\"openai-responses\">, \"provider\" | \"baseUrl\">) {\n\treturn model.provider === \"openrouter\" || model.baseUrl.includes(\"openrouter.ai\") ? \"openrouter\" : \"openai\";\n}\n\nfunction getCompat(model: Model<\"openai-responses\">): Required<OpenAIResponsesCompat> {\n\treturn {\n\t\tsessionAffinityFormat: model.compat?.sessionAffinityFormat ?? detectSessionAffinityFormat(model),\n\t\trequestFormat: model.compat?.requestFormat ?? \"openai\",\n\t\tsupportsReasoningEffort: model.compat?.supportsReasoningEffort ?? true,\n\t\tsupportsLongCacheRetention: model.compat?.supportsLongCacheRetention ?? true,\n\t};\n}\n\nfunction getPromptCacheRetention(\n\tcompat: Required<OpenAIResponsesCompat>,\n\tcacheRetention: CacheRetention,\n): \"24h\" | undefined {\n\treturn cacheRetention === \"long\" && compat.supportsLongCacheRetention ? \"24h\" : undefined;\n}\n\nfunction formatOpenAIResponsesError(error: unknown): string {\n\treturn formatProviderError(normalizeProviderError(error), \"OpenAI API error\");\n}\n\n// OpenAI Responses-specific options\nexport interface OpenAIResponsesOptions extends StreamOptions {\n\treasoningEffort?: \"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\" | \"ultra\";\n\treasoningSummary?: \"auto\" | \"detailed\" | \"concise\" | null;\n\tserviceTier?: ResponseCreateParamsStreaming[\"service_tier\"];\n\ttoolChoice?: ResponseCreateParamsStreaming[\"tool_choice\"];\n}\n\n/**\n * Generate function for OpenAI Responses API\n */\nexport const streamOpenAIResponses: StreamFunction<\"openai-responses\", OpenAIResponsesOptions> = (\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\toptions?: OpenAIResponsesOptions,\n): AssistantMessageEventStream => {\n\tconst stream = new AssistantMessageEventStream();\n\n\t// Start async processing\n\t(async () => {\n\t\tconst output = createAssistantMessage(model);\n\n\t\ttry {\n\t\t\t// Create OpenAI client\n\t\t\tconst apiKey = options?.apiKey;\n\t\t\tif (!apiKey) {\n\t\t\t\tthrow new Error(`No API key for provider: ${model.provider}`);\n\t\t\t}\n\t\t\tconst cacheRetention = resolveCacheRetention(options?.cacheRetention);\n\t\t\tconst cacheSessionId = cacheRetention === \"none\" ? undefined : options?.sessionId;\n\t\t\tconst compat = getCompat(model);\n\t\t\tconst client = createOpenAIClient(model, apiKey, {\n\t\t\t\tbaseUrl: resolveBaseUrl(model),\n\t\t\t\tcontext,\n\t\t\t\tcallerHeaders: options?.headers,\n\t\t\t\tsession: cacheSessionId\n\t\t\t\t\t? { id: cacheSessionId, format: compat.sessionAffinityFormat, includeLegacyAffinity: false }\n\t\t\t\t\t: undefined,\n\t\t\t});\n\t\t\tconst toolNameMap = createOpenAIResponsesToolNameMap(context.tools ?? []);\n\t\t\tconst params = await applyProviderPayloadHook(buildParams(model, context, options), model, options?.onPayload);\n\t\t\tconst requestOptions = createRetryFreeRequestOptions(\n\t\t\t\toptions,\n\t\t\t\tmodel.provider === \"fugu\" ? FUGU_DEFAULT_TIMEOUT_MS : undefined,\n\t\t\t);\n\t\t\tconst { data: openaiStream, response } = await retryProviderRequest(\n\t\t\t\t() => client.responses.create(params, requestOptions).withResponse(),\n\t\t\t\tcreateProviderRetryOptions(options, model.provider === \"fugu\" ? FUGU_DEFAULT_MAX_RETRIES : 0),\n\t\t\t);\n\t\t\tawait beginAssistantResponseStream(stream, output, response, model, options?.onResponse);\n\n\t\t\tawait processResponsesStream(openaiStream, output, stream, model, {\n\t\t\t\ttoolNameMap,\n\t\t\t\tserviceTier: options?.serviceTier,\n\t\t\t\tapplyServiceTierPricing:\n\t\t\t\t\tmodel.provider === \"fugu\"\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: (usage, serviceTier) => applyOpenAIServiceTierPricing(usage, serviceTier, model),\n\t\t\t});\n\n\t\t\tcompleteAssistantStream(stream, output, options?.signal);\n\t\t} catch (error) {\n\t\t\tterminateAssistantStreamWithError(stream, output, options?.signal, error, {\n\t\t\t\tformatError: formatOpenAIResponsesError,\n\t\t\t\tscratchFields: [\"index\", \"partialJson\"],\n\t\t\t});\n\t\t}\n\t})();\n\n\treturn stream;\n};\n\nexport const streamSimpleOpenAIResponses: StreamFunction<\"openai-responses\", SimpleStreamOptions> = (\n\tmodel: Model<\"openai-responses\">,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n): AssistantMessageEventStream => {\n\tconst apiKey = options?.apiKey;\n\tif (!apiKey) {\n\t\tthrow new Error(`No API key for provider: ${model.provider}`);\n\t}\n\n\tconst base = buildBaseOptions(model, options, apiKey);\n\tconst requestedReasoning = options?.reasoning ?? model.defaultThinkingLevel;\n\tconst clampedReasoning = requestedReasoning ? clampThinkingLevel(model, requestedReasoning) : undefined;\n\tconst reasoningEffort = clampedReasoning === \"off\" ? \"none\" : clampedReasoning;\n\n\treturn streamOpenAIResponses(model, context, {\n\t\t...base,\n\t\treasoningEffort,\n\t} satisfies OpenAIResponsesOptions);\n};\n\nfunction resolveFuguBaseUrl(): string | undefined {\n\tif (typeof process === \"undefined\") return undefined;\n\tconst value = process.env.FUGU_BASE_URL?.trim();\n\tif (!value) return undefined;\n\tconst baseUrl = value.replace(/\\/+$/, \"\");\n\treturn baseUrl.endsWith(\"/v1\") ? baseUrl : `${baseUrl}/v1`;\n}\n\nfunction resolveBaseUrl(model: Model<\"openai-responses\">): string {\n\tif (isCloudflareProvider(model.provider)) return resolveCloudflareBaseUrl(model);\n\tif (model.provider === \"fugu\") return resolveFuguBaseUrl() ?? model.baseUrl;\n\treturn model.baseUrl;\n}\n\nfunction buildParams(model: Model<\"openai-responses\">, context: Context, options?: OpenAIResponsesOptions) {\n\tconst toolNameMap = createOpenAIResponsesToolNameMap(context.tools ?? []);\n\tconst cacheRetention = resolveCacheRetention(options?.cacheRetention);\n\tconst compat = getCompat(model);\n\tconst useXaiCliFormat = compat.requestFormat === \"xai-cli\";\n\tconst messages = convertResponsesMessages(model, context, OPENAI_TOOL_CALL_PROVIDERS, {\n\t\trequestFormat: compat.requestFormat,\n\t\ttoolNameMap,\n\t});\n\tconst isGpt56 = model.provider === \"openai\" && model.id.startsWith(\"gpt-5.6\");\n\tconst params: ResponseCreateParamsStreaming = {\n\t\tmodel: model.id,\n\t\tinstructions: useXaiCliFormat ? undefined : buildResponsesInstructions(context),\n\t\tinput: messages,\n\t\tstream: true,\n\t\tprompt_cache_key: cacheRetention === \"none\" ? undefined : clampOpenAIPromptCacheKey(options?.sessionId),\n\t\t...(cacheRetention !== \"none\" && isGpt56\n\t\t\t? { prompt_cache_options: options?.promptCacheOptions ?? { mode: \"implicit\" as const, ttl: \"30m\" as const } }\n\t\t\t: {}),\n\t\t...(isGpt56 ? {} : { prompt_cache_retention: getPromptCacheRetention(compat, cacheRetention) }),\n\t\tstore: false,\n\t};\n\tconst safetyIdentifier = options?.metadata?.safety_identifier;\n\tif (typeof safetyIdentifier === \"string\" && safetyIdentifier.length > 0) {\n\t\tparams.safety_identifier = safetyIdentifier;\n\t}\n\n\tif (options?.maxTokens) {\n\t\tparams.max_output_tokens = options?.maxTokens;\n\t}\n\n\tif (options?.temperature !== undefined) {\n\t\tparams.temperature = options?.temperature;\n\t}\n\n\tif (options?.serviceTier !== undefined && model.provider !== \"fugu\") {\n\t\tparams.service_tier = options.serviceTier;\n\t}\n\n\tif (context.tools && context.tools.length > 0) {\n\t\tparams.tools = convertResponsesTools(context.tools, { omitStrict: useXaiCliFormat, toolNameMap });\n\t}\n\tif (options?.toolChoice !== undefined) {\n\t\tparams.tool_choice = options.toolChoice;\n\t}\n\n\tif (model.reasoning && compat.supportsReasoningEffort) {\n\t\tif (\n\t\t\toptions?.reasoningEffort ||\n\t\t\toptions?.reasoningSummary !== undefined ||\n\t\t\toptions?.reasoningMode ||\n\t\t\toptions?.reasoningContext\n\t\t) {\n\t\t\tconst effort = options?.reasoningEffort\n\t\t\t\t? options.reasoningEffort === \"none\"\n\t\t\t\t\t? (model.thinkingLevelMap?.off ?? \"none\")\n\t\t\t\t\t: (model.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort)\n\t\t\t\t: \"medium\";\n\t\t\tconst reasoningDisabled = options?.reasoningEffort === \"none\";\n\t\t\tconst supportsReasoningSummary = model.provider !== \"fugu\" || model.id === \"fugu-ultra\";\n\t\t\tparams.reasoning = {\n\t\t\t\teffort: effort as NonNullable<typeof params.reasoning>[\"effort\"],\n\t\t\t\t...(supportsReasoningSummary && !reasoningDisabled && options?.reasoningSummary !== null\n\t\t\t\t\t? { summary: options?.reasoningSummary ?? (useXaiCliFormat ? \"concise\" : \"auto\") }\n\t\t\t\t\t: {}),\n\t\t\t\t...(options?.reasoningMode ? { mode: options.reasoningMode } : {}),\n\t\t\t\t...(options?.reasoningContext ? { context: options.reasoningContext } : {}),\n\t\t\t};\n\t\t\tif (supportsReasoningSummary && !reasoningDisabled) {\n\t\t\t\tparams.include = [\"reasoning.encrypted_content\"];\n\t\t\t}\n\t\t} else if (model.provider !== \"github-copilot\" && model.thinkingLevelMap?.off !== null) {\n\t\t\tparams.reasoning = {\n\t\t\t\teffort: (model.thinkingLevelMap?.off ?? \"none\") as NonNullable<typeof params.reasoning>[\"effort\"],\n\t\t\t};\n\t\t}\n\t\t// xAI always returns encrypted reasoning items that must be echoed back on the next turn,\n\t\t// even when no reasoning effort was requested (e.g. thinkingLevelMap.off === null skips the\n\t\t// branch above entirely). Without this, encrypted reasoning silently drops across turns.\n\t\tif (model.provider === \"xai\") {\n\t\t\tparams.include = [\"reasoning.encrypted_content\"];\n\t\t}\n\t}\n\n\treturn params;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"simple-options.d.ts","sourceRoot":"","sources":["../../src/providers/simple-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAuBlH;AAED,wBAAgB,cAAc,CAC7B,MAAM,EAAE,aAAa,GAAG,SAAS,GAC/B,OAAO,CAAC,aAAa,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC,GAAG,SAAS,CAE/D;AAED,wBAAgB,0BAA0B,CAEzC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,aAAa,EAC7B,aAAa,CAAC,EAAE,eAAe,GAC7B;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAoB/C"}
1
+ {"version":3,"file":"simple-options.d.ts","sourceRoot":"","sources":["../../src/providers/simple-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAwBlH;AAED,wBAAgB,cAAc,CAC7B,MAAM,EAAE,aAAa,GAAG,SAAS,GAC/B,OAAO,CAAC,aAAa,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC,GAAG,SAAS,CAE/D;AAED,wBAAgB,0BAA0B,CAEzC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,aAAa,EAC7B,aAAa,CAAC,EAAE,eAAe,GAC7B;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAoB/C"}