UNPKG

@just-every/ensemble

Version:

LLM provider abstraction layer with unified streaming interface

164 lines 6.76 kB
export async function ensembleResult(stream) { const result = { message: '', completed: false, startTime: new Date(), messageIds: new Set(), }; const messageDeltas = new Map(); const thinkingDeltas = new Map(); const toolCalls = new Map(); const files = []; const responseOutputs = []; try { for await (const event of stream) { switch (event.type) { case 'message_start': { const msgEvent = event; if (msgEvent.message_id) { result.messageIds.add(msgEvent.message_id); messageDeltas.set(msgEvent.message_id, []); if (msgEvent.thinking_content || msgEvent.thinking_signature) { thinkingDeltas.set(msgEvent.message_id, { content: [], signature: [], }); } } break; } case 'message_delta': { const msgEvent = event; if (msgEvent.message_id && messageDeltas.has(msgEvent.message_id)) { messageDeltas.get(msgEvent.message_id).push(msgEvent.content); } if (msgEvent.thinking_content && msgEvent.message_id && thinkingDeltas.has(msgEvent.message_id)) { thinkingDeltas.get(msgEvent.message_id).content.push(msgEvent.thinking_content); } if (msgEvent.thinking_signature && msgEvent.message_id && thinkingDeltas.has(msgEvent.message_id)) { thinkingDeltas.get(msgEvent.message_id).signature?.push(msgEvent.thinking_signature); } break; } case 'message_complete': { const msgEvent = event; if (msgEvent.message_id) { if (msgEvent.content) { result.message = msgEvent.content; } else if (messageDeltas.has(msgEvent.message_id)) { const deltas = messageDeltas.get(msgEvent.message_id); result.message = deltas.join(''); } if (thinkingDeltas.has(msgEvent.message_id)) { const thinking = thinkingDeltas.get(msgEvent.message_id); result.thinking = { content: msgEvent.thinking_content || thinking.content.join(''), signature: msgEvent.thinking_signature || (thinking.signature?.length ? thinking.signature.join('') : undefined), }; } } break; } case 'file_start': case 'file_delta': case 'file_complete': { const fileEvent = event; if (event.type === 'file_complete') { files.push({ mime_type: fileEvent.mime_type, data: fileEvent.data, data_format: fileEvent.data_format, }); } break; } case 'tool_start': { const toolEvent = event; const callId = toolEvent.tool_call.call_id || toolEvent.tool_call.id; toolCalls.set(callId, { toolCall: toolEvent.tool_call, id: toolEvent.tool_call.id, call_id: callId, }); break; } case 'tool_done': { const toolEvent = event; if (toolEvent.result) { const existing = toolCalls.get(toolEvent.result.call_id); if (existing) { existing.output = toolEvent.result.output; existing.error = toolEvent.result.error; } } break; } case 'cost_update': { const costEvent = event; result.cost = { input_tokens: costEvent.usage.input_tokens, output_tokens: costEvent.usage.output_tokens, total_tokens: costEvent.usage.total_tokens, cached_tokens: costEvent.usage.cached_tokens, thought_delay: costEvent.thought_delay, }; break; } case 'error': { const errorEvent = event; result.error = errorEvent.error; break; } case 'response_output': { const outputEvent = event; responseOutputs.push(outputEvent.message); break; } case 'agent_start': case 'agent_status': case 'agent_done': { const agentEvent = event; result.agent = agentEvent.agent; break; } case 'stream_end': { result.completed = true; break; } } } if (!result.message && messageDeltas.size > 0) { const allDeltas = []; for (const deltas of messageDeltas.values()) { allDeltas.push(...deltas); } result.message = allDeltas.join(''); } if (toolCalls.size > 0) { result.tools = { calls: Array.from(toolCalls.values()), totalCalls: toolCalls.size, }; } if (files.length > 0) { result.files = files; } if (responseOutputs.length > 0) { result.responseOutputs = responseOutputs; } if (!result.error && !result.completed) { result.completed = true; } } catch (error) { result.error = error instanceof Error ? error.message : String(error); result.completed = false; } finally { result.endTime = new Date(); } return result; } //# sourceMappingURL=ensemble_result.js.map