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;" />

128 lines (126 loc) 4.57 kB
require("reflect-metadata"); const require_runtime = require('../../../../_virtual/_rolldown/runtime.cjs'); const require_logger = require('../../../../lib/logger.cjs'); const require_telemetry_client = require('../../telemetry/telemetry-client.cjs'); let _ag_ui_encoder = require("@ag-ui/encoder"); //#region src/v2/runtime/handlers/shared/sse-response.ts function createSseEventResponse({ request, observableFactory, debugEventBus, agentId, debug, logger }) { const stream = new TransformStream(); const writer = stream.writable.getWriter(); const encoder = new _ag_ui_encoder.EventEncoder(); let streamClosed = false; let debugThreadId = ""; let debugRunId = ""; const debugLogger = debug?.enabled ? logger ?? require_logger.createLogger({ level: "debug", component: "copilotkit-debug" }) : void 0; const closeStream = async () => { if (!streamClosed) try { await writer.close(); streamClosed = true; } catch {} }; const logError = (error) => { console.error("Error running agent:", error); console.error("Error stack:", error instanceof Error ? error.stack : "No stack trace"); console.error("Error details:", { name: error instanceof Error ? error.name : "Unknown", message: error instanceof Error ? error.message : String(error), cause: error instanceof Error ? error.cause : void 0 }); }; let subscription; (async () => { const observable = await observableFactory(); require_telemetry_client.default.capture("oss.runtime.agent_execution_stream_started", {}); if (debug?.lifecycle) debugLogger.debug("SSE stream opened"); let eventCount = 0; let loggedEventCount = 0; subscription = observable.subscribe({ next: async (event) => { if (event.type === "RUN_STARTED") { const e = event; debugThreadId = e.threadId ?? ""; debugRunId = e.runId ?? ""; } if (debugEventBus) try { debugEventBus.broadcast(event, { agentId: agentId ?? "", threadId: debugThreadId, runId: debugRunId }); } catch (broadcastError) { logError(broadcastError); } if (!request.signal.aborted && !streamClosed) try { eventCount++; if (debug?.events) { loggedEventCount++; if (debug.verbose) debugLogger.debug({ event }, "Event emitted"); else debugLogger.debug({ type: event.type, ...summarizeEvent(event) }, "Event emitted"); } await writer.write(encoder.encode(event)); } catch (error) { if (error instanceof Error && error.name === "AbortError") streamClosed = true; else { logError(error); streamClosed = true; } } }, error: async (error) => { require_telemetry_client.default.capture("oss.runtime.agent_execution_stream_errored", { error: error instanceof Error ? error.message : String(error) }); if (debug?.lifecycle) debugLogger.debug({ error: error instanceof Error ? error.message : String(error) }, "SSE stream errored"); logError(error); await closeStream(); }, complete: async () => { require_telemetry_client.default.capture("oss.runtime.agent_execution_stream_ended", {}); if (debug?.lifecycle) debugLogger.debug({ eventCount, loggedEventCount }, "SSE stream completed"); await closeStream(); } }); if (request.signal.aborted) subscription.unsubscribe(); })().catch(async (error) => { logError(error); await closeStream(); }); request.signal.addEventListener("abort", () => { subscription?.unsubscribe(); }); return new Response(stream.readable, { status: 200, headers: { "Content-Type": "text/event-stream", "Cache-Control": "no-cache", Connection: "keep-alive" } }); } function summarizeEvent(event) { const e = event; const summary = {}; if (e.messageId) summary.messageId = e.messageId; if (e.toolCallId) summary.toolCallId = e.toolCallId; if (e.toolCallName) summary.toolCallName = e.toolCallName; if (e.role) summary.role = e.role; if (e.delta != null && typeof e.delta === "string") summary.deltaLength = e.delta.length; if (e.snapshot && typeof e.snapshot === "object") summary.snapshotKeys = Object.keys(e.snapshot); if (e.delta && Array.isArray(e.delta)) summary.operationCount = e.delta.length; if (e.threadId) summary.threadId = e.threadId; if (e.runId) summary.runId = e.runId; if (e.message) summary.message = e.message; if (e.code) summary.code = e.code; if (e.stepName) summary.stepName = e.stepName; return summary; } //#endregion exports.createSseEventResponse = createSseEventResponse; //# sourceMappingURL=sse-response.cjs.map