diff --git a/dist/index.mjs b/dist/index.mjs --- a/dist/index.mjs +++ b/dist/index.mjs @@ -959,7 +959,7 @@ model: z4.string().nullish(), object: z4.literal("response"), output: z4.array(outputItemSchema), - usage: xaiResponsesUsageSchema, + usage: xaiResponsesUsageSchema.nullish(), status: z4.string() }); var xaiResponsesChunkSchema = z4.union([ \ No newline at end of file @@ -1143,6 +1143,18 @@ z4.object({ type: z4.literal("response.completed"), response: xaiResponsesResponseSchema + }), + z4.object({ + type: z4.literal("response.function_call_arguments.delta"), + item_id: z4.string(), + output_index: z4.number(), + delta: z4.string() + }), + z4.object({ + type: z4.literal("response.function_call_arguments.done"), + item_id: z4.string(), + output_index: z4.number(), + arguments: z4.string() }) ]); \ No newline at end of file @@ -1940,6 +1952,9 @@ if (response2.status) { finishReason = mapXaiResponsesFinishReason(response2.status); } + if (seenToolCalls.size > 0 && finishReason !== "tool-calls") { + finishReason = "tool-calls"; + } return; } if (event.type === "response.output_item.added" || event.type === "response.output_item.done") { \ No newline at end of file @@ -2024,7 +2039,7 @@ } } } else if (part.type === "function_call") { - if (!seenToolCalls.has(part.call_id)) { + if (event.type === "response.output_item.done" && !seenToolCalls.has(part.call_id)) { seenToolCalls.add(part.call_id); controller.enqueue({ type: "tool-input-start", \ No newline at end of file diff --git a/dist/index.js b/dist/index.js --- a/dist/index.js +++ b/dist/index.js @@ -964,7 +964,7 @@ model: import_v44.z.string().nullish(), object: import_v44.z.literal("response"), output: import_v44.z.array(outputItemSchema), - usage: xaiResponsesUsageSchema, + usage: xaiResponsesUsageSchema.nullish(), status: import_v44.z.string() }); var xaiResponsesChunkSchema = import_v44.z.union([ \ No newline at end of file @@ -1148,6 +1148,18 @@ import_v44.z.object({ type: import_v44.z.literal("response.completed"), response: xaiResponsesResponseSchema + }), + import_v44.z.object({ + type: import_v44.z.literal("response.function_call_arguments.delta"), + item_id: import_v44.z.string(), + output_index: import_v44.z.number(), + delta: import_v44.z.string() + }), + import_v44.z.object({ + type: import_v44.z.literal("response.function_call_arguments.done"), + item_id: import_v44.z.string(), + output_index: import_v44.z.number(), + arguments: import_v44.z.string() }) ]); \ No newline at end of file @@ -1935,6 +1947,9 @@ if (response2.status) { finishReason = mapXaiResponsesFinishReason(response2.status); } + if (seenToolCalls.size > 0 && finishReason !== "tool-calls") { + finishReason = "tool-calls"; + } return; } if (event.type === "response.output_item.added" || event.type === "response.output_item.done") { \ No newline at end of file @@ -2019,7 +2034,7 @@ } } } else if (part.type === "function_call") { - if (!seenToolCalls.has(part.call_id)) { + if (event.type === "response.output_item.done" && !seenToolCalls.has(part.call_id)) { seenToolCalls.add(part.call_id); controller.enqueue({ type: "tool-input-start", \ No newline at end of file