UNPKG

@copilotkit/runtime

Version:

<img src="https://github.com/user-attachments/assets/0a6b64d9-e193-4940-a3f6-60334ac34084" alt="banner" style="border-radius: 12px; border: 2px solid #d6d4fa;" />

141 lines (139 loc) 4.26 kB
require("reflect-metadata"); const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs'); let _copilotkit_shared = require("@copilotkit/shared"); //#region src/v2/runtime/core/middleware-sse-parser.ts /** * Parse a cloned SSE Response body into structured messages. * Returns empty results for non-SSE responses. */ async function parseSSEResponse(response) { if (!(response.headers.get("content-type") ?? "").includes("text/event-stream")) return { messages: [] }; let text; try { text = await response.text(); } catch { _copilotkit_shared.logger.warn("Failed to read SSE response body in afterRequestMiddleware"); return { messages: [] }; } if (!text.trim()) return { messages: [] }; let threadId; let runId; const messagesById = /* @__PURE__ */ new Map(); const toolCallsById = /* @__PURE__ */ new Map(); const toolCallParent = /* @__PURE__ */ new Map(); let snapshotMessages; for (const line of text.split("\n")) { const trimmed = line.trim(); if (!trimmed.startsWith("data:")) continue; let event; try { event = JSON.parse(trimmed.slice(5).trim()); } catch { continue; } switch (event.type) { case "RUN_STARTED": threadId = event.threadId; runId = event.runId; break; case "MESSAGES_SNAPSHOT": if (Array.isArray(event.messages)) snapshotMessages = event.messages; break; case "TEXT_MESSAGE_START": messagesById.set(event.messageId, { id: event.messageId, role: event.role ?? "assistant", content: "" }); break; case "TEXT_MESSAGE_CONTENT": { const msg = messagesById.get(event.messageId); if (msg) msg.content = (msg.content ?? "") + (event.delta ?? ""); break; } case "TEXT_MESSAGE_CHUNK": if (event.messageId) { const existing = messagesById.get(event.messageId); if (existing) existing.content = (existing.content ?? "") + (event.delta ?? ""); else messagesById.set(event.messageId, { id: event.messageId, role: event.role ?? "assistant", content: event.delta ?? "" }); } break; case "TOOL_CALL_START": { const tc = { id: event.toolCallId, name: event.toolCallName, args: "" }; toolCallsById.set(event.toolCallId, tc); if (event.parentMessageId) toolCallParent.set(event.toolCallId, event.parentMessageId); break; } case "TOOL_CALL_ARGS": { const tc = toolCallsById.get(event.toolCallId); if (tc) tc.args += event.delta ?? ""; break; } case "TOOL_CALL_CHUNK": if (event.toolCallId) { let tc = toolCallsById.get(event.toolCallId); if (!tc) { tc = { id: event.toolCallId, name: event.toolCallName ?? "", args: "" }; toolCallsById.set(event.toolCallId, tc); if (event.parentMessageId) toolCallParent.set(event.toolCallId, event.parentMessageId); } if (event.toolCallName) tc.name = event.toolCallName; tc.args += event.delta ?? ""; } break; case "TOOL_CALL_END": { const tc = toolCallsById.get(event.toolCallId); const parentId = toolCallParent.get(event.toolCallId); if (tc && parentId) { const parent = messagesById.get(parentId); if (parent) { parent.toolCalls = parent.toolCalls ?? []; parent.toolCalls.push(tc); } } break; } case "TOOL_CALL_RESULT": { let resultContent = event.content; if (Array.isArray(resultContent)) resultContent = resultContent.filter((part) => part && typeof part.text === "string").map((part) => part.text).join(""); messagesById.set(event.messageId, { id: event.messageId, role: "tool", content: resultContent, toolCallId: event.toolCallId }); break; } } } for (const [toolCallId, tc] of toolCallsById) { const parentId = toolCallParent.get(toolCallId); if (!parentId) continue; const parent = messagesById.get(parentId); if (!parent) continue; if (!parent.toolCalls?.some((t) => t.id === tc.id)) { parent.toolCalls = parent.toolCalls ?? []; parent.toolCalls.push(tc); } } return { messages: snapshotMessages ?? [...messagesById.values()], threadId, runId }; } //#endregion exports.parseSSEResponse = parseSSEResponse; //# sourceMappingURL=middleware-sse-parser.cjs.map