@caupulican/pi-ai 0.91.2 → 0.91.3
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,
|
|
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
|
|
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}` :
|
|
325
|
+
return item.id ? [`${item.type}:${item.id}`] : [];
|
|
324
326
|
}
|
|
325
327
|
if (item.type === "function_call") {
|
|
326
|
-
|
|
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
|
|
333
|
-
if (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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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.
|
|
3
|
+
"version": "0.91.3",
|
|
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": {
|