@caupulican/pi-ai 0.91.2 → 0.91.4

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,CAwZf"}
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"}
@@ -318,19 +318,52 @@ export async function processResponsesStream(openaiStream, output, stream, model
318
318
  }
319
319
  };
320
320
  const finalizedOutputItemKeys = new Set();
321
- const outputItemKey = (item) => {
321
+ const functionCallBlocksByItemId = new Map();
322
+ const functionCallBlocksByCallId = new Map();
323
+ const outputItemKeys = (item) => {
322
324
  if (item.type === "reasoning" || item.type === "message") {
323
- return item.id ? `${item.type}:${item.id}` : undefined;
325
+ return item.id ? [`${item.type}:${item.id}`] : [];
324
326
  }
325
327
  if (item.type === "function_call") {
326
- return `function_call:${item.call_id ?? ""}|${item.id ?? ""}`;
328
+ const keys = [];
329
+ if (item.id)
330
+ keys.push(`function_call:id:${item.id}`);
331
+ if (item.call_id)
332
+ keys.push(`function_call:call:${item.call_id}`);
333
+ keys.push(`function_call:${item.call_id ?? ""}|${item.id ?? ""}`);
334
+ return keys;
335
+ }
336
+ return [];
337
+ };
338
+ const registerFunctionCallBlock = (item, block) => {
339
+ if (item.id)
340
+ functionCallBlocksByItemId.set(item.id, block);
341
+ if (item.call_id)
342
+ functionCallBlocksByCallId.set(item.call_id, block);
343
+ };
344
+ const findFunctionCallBlock = (item) => {
345
+ const id = `${item.call_id}|${item.id}`;
346
+ const byExactId = output.content.find((candidate) => candidate.type === "toolCall" && candidate.id === id);
347
+ if (byExactId)
348
+ return byExactId;
349
+ if (item.id) {
350
+ const byItemId = functionCallBlocksByItemId.get(item.id);
351
+ if (byItemId)
352
+ return byItemId;
353
+ }
354
+ if (item.call_id) {
355
+ const byCallId = functionCallBlocksByCallId.get(item.call_id);
356
+ if (byCallId)
357
+ return byCallId;
327
358
  }
359
+ if (currentBlock?.type === "toolCall")
360
+ return currentBlock;
328
361
  return undefined;
329
362
  };
330
363
  const contentIndexOf = (block) => output.content.indexOf(block);
331
364
  const applyCompletedOutputItem = (item, emit) => {
332
- const key = outputItemKey(item);
333
- if (key && finalizedOutputItemKeys.has(key))
365
+ const keys = outputItemKeys(item);
366
+ if (keys.some((key) => finalizedOutputItemKeys.has(key)))
334
367
  return;
335
368
  if (item.type === "reasoning") {
336
369
  if (item.summary) {
@@ -366,7 +399,7 @@ export async function processResponsesStream(openaiStream, output, stream, model
366
399
  }
367
400
  if (currentBlock === block)
368
401
  currentBlock = null;
369
- if (key)
402
+ for (const key of keys)
370
403
  finalizedOutputItemKeys.add(key);
371
404
  return;
372
405
  }
@@ -381,6 +414,20 @@ export async function processResponsesStream(openaiStream, output, stream, model
381
414
  else if (item.id) {
382
415
  block = output.content.find((candidate) => candidate.type === "text" && parseTextSignature(candidate.textSignature)?.id === item.id);
383
416
  }
417
+ // xAI/Grok emits message.added + deltas, then function_call items, then
418
+ // message.done / response.output. currentBlock has already moved to the
419
+ // tool; the live text block must be reused or the same sentence is stored
420
+ // twice (unsigned before tools, signed after).
421
+ if (!block) {
422
+ block = [...output.content]
423
+ .reverse()
424
+ .find((candidate) => candidate.type === "text" &&
425
+ !candidate.textSignature &&
426
+ (candidate.text === "" ||
427
+ text === "" ||
428
+ text.startsWith(candidate.text) ||
429
+ candidate.text.startsWith(text)));
430
+ }
384
431
  const isNew = !block;
385
432
  if (!block) {
386
433
  block = { type: "text", text: "" };
@@ -399,17 +446,12 @@ export async function processResponsesStream(openaiStream, output, stream, model
399
446
  }
400
447
  if (currentBlock === block)
401
448
  currentBlock = null;
402
- if (key)
449
+ for (const key of keys)
403
450
  finalizedOutputItemKeys.add(key);
404
451
  return;
405
452
  }
406
453
  const id = `${item.call_id}|${item.id}`;
407
- let block = output.content.find((candidate) => candidate.type === "toolCall" && candidate.id === id);
408
- if (!block && currentBlock?.type === "toolCall") {
409
- block = currentBlock;
410
- block.id = id;
411
- block.name = options?.toolNameMap?.toOriginalName(item.name) ?? item.name;
412
- }
454
+ let block = findFunctionCallBlock(item);
413
455
  const isNew = !block;
414
456
  if (!block) {
415
457
  block = {
@@ -420,8 +462,13 @@ export async function processResponsesStream(openaiStream, output, stream, model
420
462
  };
421
463
  output.content.push(block);
422
464
  }
465
+ else {
466
+ block.id = id;
467
+ block.name = options?.toolNameMap?.toOriginalName(item.name) ?? item.name;
468
+ }
423
469
  block.arguments = parseStreamingJson(block.partialJson || item.arguments || "{}");
424
470
  delete block.partialJson;
471
+ registerFunctionCallBlock(item, block);
425
472
  if (emit) {
426
473
  const contentIndex = contentIndexOf(block);
427
474
  if (isNew) {
@@ -431,7 +478,7 @@ export async function processResponsesStream(openaiStream, output, stream, model
431
478
  }
432
479
  if (currentBlock === block)
433
480
  currentBlock = null;
434
- if (key)
481
+ for (const key of keys)
435
482
  finalizedOutputItemKeys.add(key);
436
483
  };
437
484
  const applyResponseOutput = (responseOutput) => {
@@ -530,11 +577,16 @@ export async function processResponsesStream(openaiStream, output, stream, model
530
577
  currentBlock = { type: "thinking", thinking: "" };
531
578
  currentReasoningSummaryPartText = "";
532
579
  output.content.push(currentBlock);
580
+ if (item.id)
581
+ reasoningBlocksById.set(item.id, currentBlock);
533
582
  stream.push({ type: "thinking_start", contentIndex: blockIndex(), partial: output });
534
583
  }
535
584
  else if (item.type === "message") {
536
585
  currentItem = item;
537
586
  currentBlock = { type: "text", text: "" };
587
+ if (item.id) {
588
+ currentBlock.textSignature = encodeTextSignatureV1(item.id, item.phase ?? undefined);
589
+ }
538
590
  output.content.push(currentBlock);
539
591
  stream.push({ type: "text_start", contentIndex: blockIndex(), partial: output });
540
592
  }
@@ -548,6 +600,7 @@ export async function processResponsesStream(openaiStream, output, stream, model
548
600
  partialJson: item.arguments || "",
549
601
  };
550
602
  output.content.push(currentBlock);
603
+ registerFunctionCallBlock(item, currentBlock);
551
604
  stream.push({ type: "toolcall_start", contentIndex: blockIndex(), partial: output });
552
605
  }
553
606
  }
@@ -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 outputItemKey = (item: { type: string; id?: string | null; call_id?: string }): string | undefined => {\n\t\tif (item.type === \"reasoning\" || item.type === \"message\") {\n\t\t\treturn item.id ? `${item.type}:${item.id}` : undefined;\n\t\t}\n\t\tif (item.type === \"function_call\") {\n\t\t\treturn `function_call:${item.call_id ?? \"\"}|${item.id ?? \"\"}`;\n\t\t}\n\t\treturn undefined;\n\t};\n\tconst contentIndexOf = (block: AssistantMessage[\"content\"][number]): number => output.content.indexOf(block);\n\tconst applyCompletedOutputItem = (\n\t\titem: ResponseReasoningItem | ResponseOutputMessage | ResponseFunctionToolCall,\n\t\temit: boolean,\n\t): void => {\n\t\tconst key = outputItemKey(item);\n\t\tif (key && finalizedOutputItemKeys.has(key)) return;\n\n\t\tif (item.type === \"reasoning\") {\n\t\t\tif (item.summary) {\n\t\t\t\titem.summary = item.summary\n\t\t\t\t\t.map((part) => ({ ...part, text: cleanReasoningSummaryText(part.text ?? \"\") }))\n\t\t\t\t\t.filter((part) => part.text.trim().length > 0);\n\t\t\t}\n\t\t\tconst summaryText = normalizeReasoningSummaryText(item.summary);\n\t\t\tconst contentText = item.content?.map((part) => part.text).join(\"\\n\\n\") || \"\";\n\t\t\tlet block = item.id ? reasoningBlocksById.get(item.id) : undefined;\n\t\t\tif (!block && currentBlock?.type === \"thinking\") block = currentBlock;\n\t\t\tconst isNew = !block;\n\t\t\tif (!block) {\n\t\t\t\tblock = { type: \"thinking\", thinking: \"\" };\n\t\t\t\toutput.content.push(block);\n\t\t\t}\n\t\t\tblock.thinking = summaryText || contentText || block.thinking;\n\t\t\tblock.thinkingSignature = JSON.stringify(item);\n\t\t\tif (item.id) reasoningBlocksById.set(item.id, block);\n\t\t\tif (emit) {\n\t\t\t\tconst contentIndex = contentIndexOf(block);\n\t\t\t\tif (isNew) {\n\t\t\t\t\tstream.push({ type: \"thinking_start\", contentIndex, partial: output });\n\t\t\t\t}\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"thinking_end\",\n\t\t\t\t\tcontentIndex,\n\t\t\t\t\tcontent: block.thinking,\n\t\t\t\t\tpartial: output,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (currentBlock === block) currentBlock = null;\n\t\t\tif (key) finalizedOutputItemKeys.add(key);\n\t\t\treturn;\n\t\t}\n\n\t\tif (item.type === \"message\") {\n\t\t\tconst text = (item.content ?? [])\n\t\t\t\t.map((part) => (part.type === \"output_text\" ? part.text : part.refusal))\n\t\t\t\t.join(\"\");\n\t\t\tlet block: TextContent | undefined;\n\t\t\tif (currentBlock?.type === \"text\") {\n\t\t\t\tblock = currentBlock;\n\t\t\t} else if (item.id) {\n\t\t\t\tblock = output.content.find(\n\t\t\t\t\t(candidate): candidate is TextContent =>\n\t\t\t\t\t\tcandidate.type === \"text\" && parseTextSignature(candidate.textSignature)?.id === item.id,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst isNew = !block;\n\t\t\tif (!block) {\n\t\t\t\tblock = { type: \"text\", text: \"\" };\n\t\t\t\toutput.content.push(block);\n\t\t\t}\n\t\t\tif (text.length > 0) block.text = text;\n\t\t\tif (item.id) block.textSignature = encodeTextSignatureV1(item.id, item.phase ?? undefined);\n\t\t\tif (emit) {\n\t\t\t\tconst contentIndex = contentIndexOf(block);\n\t\t\t\tif (isNew) {\n\t\t\t\t\tstream.push({ type: \"text_start\", contentIndex, partial: output });\n\t\t\t\t}\n\t\t\t\tstream.push({ type: \"text_end\", contentIndex, content: block.text, partial: output });\n\t\t\t}\n\t\t\tif (currentBlock === block) currentBlock = null;\n\t\t\tif (key) finalizedOutputItemKeys.add(key);\n\t\t\treturn;\n\t\t}\n\n\t\tconst id = `${item.call_id}|${item.id}`;\n\t\tlet block: (ToolCall & { partialJson?: string }) | undefined = output.content.find(\n\t\t\t(candidate): candidate is ToolCall & { partialJson?: string } =>\n\t\t\t\tcandidate.type === \"toolCall\" && candidate.id === id,\n\t\t);\n\t\tif (!block && currentBlock?.type === \"toolCall\") {\n\t\t\tblock = currentBlock;\n\t\t\tblock.id = id;\n\t\t\tblock.name = options?.toolNameMap?.toOriginalName(item.name) ?? item.name;\n\t\t}\n\t\tconst isNew = !block;\n\t\tif (!block) {\n\t\t\tblock = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid,\n\t\t\t\tname: options?.toolNameMap?.toOriginalName(item.name) ?? item.name,\n\t\t\t\targuments: {},\n\t\t\t};\n\t\t\toutput.content.push(block);\n\t\t}\n\t\tblock.arguments = parseStreamingJson(block.partialJson || item.arguments || \"{}\");\n\t\tdelete block.partialJson;\n\t\tif (emit) {\n\t\t\tconst contentIndex = contentIndexOf(block);\n\t\t\tif (isNew) {\n\t\t\t\tstream.push({ type: \"toolcall_start\", contentIndex, partial: output });\n\t\t\t}\n\t\t\tstream.push({ type: \"toolcall_end\", contentIndex, toolCall: block, partial: output });\n\t\t}\n\t\tif (currentBlock === block) currentBlock = null;\n\t\tif (key) finalizedOutputItemKeys.add(key);\n\t};\n\tconst applyResponseOutput = (\n\t\tresponseOutput: NonNullable<\n\t\t\tExtract<ResponseStreamEvent, { type: \"response.completed\" | \"response.incomplete\" }>[\"response\"][\"output\"]\n\t\t>,\n\t): void => {\n\t\tfor (const item of responseOutput) {\n\t\t\tif (item.type === \"reasoning\" || item.type === \"message\" || item.type === \"function_call\") {\n\t\t\t\tapplyCompletedOutputItem(item, true);\n\t\t\t}\n\t\t}\n\t\tif (!currentBlock) return;\n\t\tconst contentIndex = blockIndex();\n\t\tif (currentBlock.type === \"text\") {\n\t\t\tstream.push({ type: \"text_end\", contentIndex, content: currentBlock.text, partial: output });\n\t\t} else if (currentBlock.type === \"thinking\") {\n\t\t\tstream.push({\n\t\t\t\ttype: \"thinking_end\",\n\t\t\t\tcontentIndex,\n\t\t\t\tcontent: currentBlock.thinking,\n\t\t\t\tpartial: output,\n\t\t\t});\n\t\t} else {\n\t\t\tdelete currentBlock.partialJson;\n\t\t\tstream.push({ type: \"toolcall_end\", contentIndex, toolCall: currentBlock, partial: output });\n\t\t}\n\t\tcurrentBlock = null;\n\t};\n\tconst finalizeResponse = (\n\t\tresponse: Extract<ResponseStreamEvent, { type: \"response.completed\" | \"response.incomplete\" }>[\"response\"],\n\t): void => {\n\t\tsawTerminalResponseEvent = true;\n\t\tbackfillReasoningSignatures((response.output ?? []).filter((item) => item.type === \"reasoning\"));\n\t\tif (response?.id) {\n\t\t\toutput.responseId = response.id;\n\t\t}\n\t\tif (response?.usage) {\n\t\t\tconst inputDetails = response.usage.input_tokens_details as InputTokenDetailsWithOrchestration | undefined;\n\t\t\tconst outputDetails = response.usage.output_tokens_details as OutputTokenDetailsWithOrchestration | undefined;\n\t\t\tconst cachedTokens = inputDetails?.cached_tokens || 0;\n\t\t\tconst cacheWriteTokens = inputDetails?.cache_write_tokens || 0;\n\t\t\tlet inputTokens = Math.max(0, (response.usage.input_tokens || 0) - cachedTokens - cacheWriteTokens);\n\t\t\tlet outputTokens = response.usage.output_tokens || 0;\n\t\t\tlet cacheReadTokens = cachedTokens;\n\t\t\tconst totalTokens = response.usage.total_tokens || 0;\n\t\t\tif (model.provider === \"fugu\") {\n\t\t\t\tconst orchestrationInputTokens = inputDetails?.orchestration_input_tokens || 0;\n\t\t\t\tconst orchestrationInputCachedTokens = inputDetails?.orchestration_input_cached_tokens || 0;\n\t\t\t\tconst orchestrationOutputTokens = outputDetails?.orchestration_output_tokens || 0;\n\t\t\t\tinputTokens += orchestrationInputTokens;\n\t\t\t\tcacheReadTokens += orchestrationInputCachedTokens;\n\t\t\t\toutputTokens += orchestrationOutputTokens;\n\t\t\t}\n\t\t\tconst providerCost = (response.usage as { cost?: number }).cost ?? 0;\n\t\t\toutput.usage = {\n\t\t\t\t// OpenAI includes cached tokens in input_tokens, so subtract to get non-cached input.\n\t\t\t\t// Sakana Fugu Ultra also reports billable orchestration tokens in token details fields.\n\t\t\t\t// Source: https://console.sakana.ai/pricing#usage-field-details\n\t\t\t\tinput: inputTokens,\n\t\t\t\toutput: outputTokens,\n\t\t\t\tcacheRead: cacheReadTokens,\n\t\t\t\tcacheWrite: cacheWriteTokens,\n\t\t\t\ttotalTokens,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: providerCost },\n\t\t\t};\n\t\t}\n\t\tcalculateCost(model, output.usage, {\n\t\t\t// response.usage is absent on some streams; this call sits outside the guard above.\n\t\t\tproviderSuppliedTotal: Boolean((response.usage as { cost?: number } | undefined)?.cost),\n\t\t});\n\t\tapplyFuguUltraPricing(model, output.usage);\n\t\tif (options?.applyServiceTierPricing) {\n\t\t\tconst serviceTier = options.resolveServiceTier\n\t\t\t\t? options.resolveServiceTier(response?.service_tier, options.serviceTier)\n\t\t\t\t: (response?.service_tier ?? options.serviceTier);\n\t\t\toptions.applyServiceTierPricing(output.usage, serviceTier);\n\t\t}\n\t\tapplyResponseOutput(response.output ?? []);\n\t\t// Map status to stop reason\n\t\toutput.stopReason = mapStopReason(response?.status);\n\t\tif (output.content.some((b) => b.type === \"toolCall\") && output.stopReason === \"stop\") {\n\t\t\toutput.stopReason = \"toolUse\";\n\t\t}\n\t\tif (output.stopReason !== \"error\" && output.stopReason !== \"aborted\") {\n\t\t\tcommittedSuccessfulTerminal = true;\n\t\t\tcommitSuccessfulAssistantParse(output);\n\t\t}\n\t};\n\n\ttry {\n\t\tfor await (const event of openaiStream) {\n\t\t\tif (event.type === \"response.created\") {\n\t\t\t\toutput.responseId = event.response.id;\n\t\t\t} else if (event.type === \"response.output_item.added\") {\n\t\t\t\tconst item = event.item;\n\t\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\t\tcurrentItem = item;\n\t\t\t\t\tcurrentBlock = { type: \"thinking\", thinking: \"\" };\n\t\t\t\t\tcurrentReasoningSummaryPartText = \"\";\n\t\t\t\t\toutput.content.push(currentBlock);\n\t\t\t\t\tstream.push({ type: \"thinking_start\", contentIndex: blockIndex(), partial: output });\n\t\t\t\t} else if (item.type === \"message\") {\n\t\t\t\t\tcurrentItem = item;\n\t\t\t\t\tcurrentBlock = { type: \"text\", text: \"\" };\n\t\t\t\t\toutput.content.push(currentBlock);\n\t\t\t\t\tstream.push({ type: \"text_start\", contentIndex: blockIndex(), partial: output });\n\t\t\t\t} else if (item.type === \"function_call\") {\n\t\t\t\t\tcurrentItem = item;\n\t\t\t\t\tcurrentBlock = {\n\t\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\t\tid: `${item.call_id}|${item.id}`,\n\t\t\t\t\t\tname: options?.toolNameMap?.toOriginalName(item.name) ?? item.name,\n\t\t\t\t\t\targuments: {},\n\t\t\t\t\t\tpartialJson: item.arguments || \"\",\n\t\t\t\t\t};\n\t\t\t\t\toutput.content.push(currentBlock);\n\t\t\t\t\tstream.push({ type: \"toolcall_start\", contentIndex: blockIndex(), partial: output });\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.reasoning_summary_part.added\") {\n\t\t\t\tif (currentItem && currentItem.type === \"reasoning\") {\n\t\t\t\t\tcurrentItem.summary = currentItem.summary || [];\n\t\t\t\t\tcurrentItem.summary.push(event.part);\n\t\t\t\t\tcurrentReasoningSummaryPartText = event.part.text ?? \"\";\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.reasoning_summary_text.delta\") {\n\t\t\t\tif (currentItem?.type === \"reasoning\") {\n\t\t\t\t\tcurrentItem.summary = currentItem.summary || [];\n\t\t\t\t\tconst lastPart = currentItem.summary[currentItem.summary.length - 1];\n\t\t\t\t\tif (lastPart) {\n\t\t\t\t\t\tlastPart.text += event.delta;\n\t\t\t\t\t\tcurrentReasoningSummaryPartText += event.delta;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.reasoning_summary_part.done\") {\n\t\t\t\tif (currentItem?.type === \"reasoning\" && currentBlock?.type === \"thinking\") {\n\t\t\t\t\tcurrentItem.summary = currentItem.summary || [];\n\t\t\t\t\tconst lastPart = currentItem.summary[currentItem.summary.length - 1];\n\t\t\t\t\tconst partText = cleanReasoningSummaryText(lastPart?.text ?? currentReasoningSummaryPartText);\n\t\t\t\t\tif (lastPart) {\n\t\t\t\t\t\tlastPart.text = partText;\n\t\t\t\t\t}\n\t\t\t\t\tif (partText.trim().length > 0) {\n\t\t\t\t\t\tconst delta = `${partText}\\n\\n`;\n\t\t\t\t\t\tcurrentBlock.thinking += delta;\n\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\t\tdelta,\n\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tcurrentReasoningSummaryPartText = \"\";\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.reasoning_text.delta\") {\n\t\t\t\tif (currentItem?.type === \"reasoning\" && currentBlock?.type === \"thinking\") {\n\t\t\t\t\tcurrentBlock.thinking += event.delta;\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.content_part.added\") {\n\t\t\t\tif (currentItem?.type === \"message\") {\n\t\t\t\t\tcurrentItem.content = currentItem.content || [];\n\t\t\t\t\t// Filter out ReasoningText, only accept output_text and refusal\n\t\t\t\t\tif (event.part.type === \"output_text\" || event.part.type === \"refusal\") {\n\t\t\t\t\t\tcurrentItem.content.push(event.part);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.output_text.delta\") {\n\t\t\t\tif (currentItem?.type === \"message\" && currentBlock?.type === \"text\") {\n\t\t\t\t\tconst lastPart = ensureMessageOutputTextPart();\n\t\t\t\t\tif (lastPart) {\n\t\t\t\t\t\tcurrentBlock.text += event.delta;\n\t\t\t\t\t\tlastPart.text += event.delta;\n\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.refusal.delta\") {\n\t\t\t\tif (currentItem?.type === \"message\" && currentBlock?.type === \"text\") {\n\t\t\t\t\tconst lastPart = ensureMessageRefusalPart();\n\t\t\t\t\tif (lastPart) {\n\t\t\t\t\t\tcurrentBlock.text += event.delta;\n\t\t\t\t\t\tlastPart.refusal += event.delta;\n\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.function_call_arguments.delta\") {\n\t\t\t\tif (currentItem?.type === \"function_call\" && currentBlock?.type === \"toolCall\") {\n\t\t\t\t\tcurrentBlock.partialJson = (currentBlock.partialJson ?? \"\") + event.delta;\n\t\t\t\t\tcurrentBlock.arguments = parseStreamingJson(currentBlock.partialJson);\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\tdelta: event.delta,\n\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.function_call_arguments.done\") {\n\t\t\t\tif (currentItem?.type === \"function_call\" && currentBlock?.type === \"toolCall\") {\n\t\t\t\t\tconst previousPartialJson = currentBlock.partialJson;\n\t\t\t\t\tcurrentBlock.partialJson = event.arguments;\n\t\t\t\t\tcurrentBlock.arguments = parseStreamingJson(currentBlock.partialJson);\n\n\t\t\t\t\tif (previousPartialJson !== undefined && event.arguments.startsWith(previousPartialJson)) {\n\t\t\t\t\t\tconst delta = event.arguments.slice(previousPartialJson.length);\n\t\t\t\t\t\tif (delta.length > 0) {\n\t\t\t\t\t\t\tstream.push({\n\t\t\t\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\t\t\t\tcontentIndex: blockIndex(),\n\t\t\t\t\t\t\t\tdelta,\n\t\t\t\t\t\t\t\tpartial: output,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.output_item.done\") {\n\t\t\t\tconst item = event.item;\n\t\t\t\tif (item.type === \"reasoning\" || item.type === \"message\" || item.type === \"function_call\") {\n\t\t\t\t\tapplyCompletedOutputItem(item, true);\n\t\t\t\t}\n\t\t\t} else if (event.type === \"response.completed\" || event.type === \"response.incomplete\") {\n\t\t\t\tfinalizeResponse(event.response);\n\t\t\t} else if (event.type === \"error\") {\n\t\t\t\tthrow new Error(`Error Code ${event.code}: ${event.message}` || \"Unknown error\");\n\t\t\t} else if (event.type === \"response.failed\") {\n\t\t\t\tsawTerminalResponseEvent = true;\n\t\t\t\tconst error = event.response?.error;\n\t\t\t\tconst details = event.response?.incomplete_details;\n\t\t\t\tconst msg = error\n\t\t\t\t\t? `${error.code || \"unknown\"}: ${error.message || \"no message\"}`\n\t\t\t\t\t: details?.reason\n\t\t\t\t\t\t? `incomplete: ${details.reason}`\n\t\t\t\t\t\t: \"Unknown error (no error details in response)\";\n\t\t\t\tthrow new Error(msg);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tif (committedSuccessfulTerminal) return;\n\t\tthrow error;\n\t}\n\tif (!sawTerminalResponseEvent) {\n\t\tthrow new Error(\"OpenAI Responses stream ended before a terminal response event\");\n\t}\n}\n\nfunction mapStopReason(status: OpenAI.Responses.ResponseStatus | undefined): StopReason {\n\tif (!status) return \"stop\";\n\tswitch (status) {\n\t\tcase \"completed\":\n\t\t\treturn \"stop\";\n\t\tcase \"incomplete\":\n\t\t\treturn \"length\";\n\t\tcase \"failed\":\n\t\tcase \"cancelled\":\n\t\t\treturn \"error\";\n\t\t// These two are wonky ...\n\t\tcase \"in_progress\":\n\t\tcase \"queued\":\n\t\t\treturn \"stop\";\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = status;\n\t\t\tthrow new Error(`Unhandled stop reason: ${_exhaustive}`);\n\t\t}\n\t}\n}\n"]}
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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@caupulican/pi-ai",
3
- "version": "0.91.2",
3
+ "version": "0.91.4",
4
4
  "description": "Unified LLM API with automatic model discovery and provider configuration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -179,7 +179,7 @@
179
179
  "generate-models": "node scripts/generate-models.ts",
180
180
  "generate-image-models": "node scripts/generate-image-models.ts",
181
181
  "build": "npm run generate-models && npm run generate-image-models && node ../../scripts/run-tsc.mjs -p tsconfig.build.json",
182
- "test": "vitest --run",
182
+ "test": "vitest --run --bail=1",
183
183
  "prepublishOnly": "npm run clean && npm run build"
184
184
  },
185
185
  "dependencies": {