in challenge5/frontend/app/api/get_response/route.ts [29:80]
for await (const part of openaiStream) {
const delta = part.choices[0].delta
const finishReason = part.choices[0].finish_reason
if (delta.content) {
const data = JSON.stringify({
event: 'assistant_delta',
data: delta
})
controller.enqueue(`data: ${data}\n\n`)
}
if (delta.tool_calls) {
isCollectingFunctionArgs = true
if (delta.tool_calls[0].id) {
callId = delta.tool_calls[0].id
}
if (delta.tool_calls[0].function?.name) {
functionName = delta.tool_calls[0].function.name
console.log('Function execution:', functionName)
}
functionArguments += delta.tool_calls[0].function?.arguments || ''
const data = JSON.stringify({
event: 'function_arguments_delta',
data: {
callId: callId,
name: functionName,
arguments: delta.tool_calls[0].function?.arguments
}
})
controller.enqueue(`data: ${data}\n\n`)
}
if (finishReason === 'tool_calls' && isCollectingFunctionArgs) {
console.log(`tool call ${functionName} is complete`)
const data = JSON.stringify({
event: 'function_arguments_done',
data: {
callId: callId,
name: functionName,
arguments: functionArguments
}
})
controller.enqueue(`data: ${data}\n\n`)
// Reset function arguments
functionArguments = ''
functionName = ''
isCollectingFunctionArgs = false
}
}