@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
JavaScript
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