in packages/mcp-client/src/McpClient.ts [144:182]
for await (const chunk of stream) {
if (opts.abortSignal?.aborted) {
throw new Error("AbortError");
}
debug(chunk.choices[0]);
numOfChunks++;
const delta = chunk.choices[0]?.delta;
if (!delta) {
continue;
}
if (delta.role) {
message.role = delta.role;
}
if (delta.content) {
message.content += delta.content;
}
for (const toolCall of delta.tool_calls ?? []) {
// aggregating chunks into an encoded arguments JSON object
if (!finalToolCalls[toolCall.index]) {
/// first chunk of the tool call
finalToolCalls[toolCall.index] = toolCall;
/// ensure .function.arguments is always a string
if (finalToolCalls[toolCall.index].function.arguments === undefined) {
finalToolCalls[toolCall.index].function.arguments = "";
}
} else {
/// any subsequent chunk to the same tool call
if (toolCall.function.arguments) {
finalToolCalls[toolCall.index].function.arguments += toolCall.function.arguments;
}
}
}
if (opts.exitIfFirstChunkNoTool && numOfChunks <= 2 && Object.keys(finalToolCalls).length === 0) {
/// If no tool is present in chunk number 1 or 2, exit.
return;
}
yield chunk;
}