@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;" />
147 lines (145 loc) • 5.62 kB
JavaScript
require("reflect-metadata");
const require_runtime = require('../../../../_virtual/_rolldown/runtime.cjs');
const require_events = require('../../../../agents/langgraph/events.cjs');
const require_consts = require('./consts.cjs');
let rxjs = require("rxjs");
let _ag_ui_client = require("@ag-ui/client");
let _ag_ui_langgraph = require("@ag-ui/langgraph");
//#region src/lib/runtime/agent-integrations/langgraph/agent.ts
var LangGraphAgent = class extends _ag_ui_langgraph.LangGraphAgent {
constructor(config) {
super(config);
}
dispatchEvent(event) {
if (event.type === _ag_ui_client.EventType.CUSTOM) {
const customEvent = event;
if (customEvent.name === require_consts.CustomEventNames.CopilotKitManuallyEmitMessage) {
this.subscriber.next({
type: _ag_ui_client.EventType.TEXT_MESSAGE_START,
role: "assistant",
messageId: customEvent.value.message_id,
rawEvent: event
});
this.subscriber.next({
type: _ag_ui_client.EventType.TEXT_MESSAGE_CONTENT,
messageId: customEvent.value.message_id,
delta: customEvent.value.message,
rawEvent: event
});
this.subscriber.next({
type: _ag_ui_client.EventType.TEXT_MESSAGE_END,
messageId: customEvent.value.message_id,
rawEvent: event
});
return true;
}
if (customEvent.name === require_consts.CustomEventNames.CopilotKitManuallyEmitToolCall) {
this.subscriber.next({
type: _ag_ui_client.EventType.TOOL_CALL_START,
toolCallId: customEvent.value.id,
toolCallName: customEvent.value.name,
parentMessageId: customEvent.value.id,
rawEvent: event
});
this.subscriber.next({
type: _ag_ui_client.EventType.TOOL_CALL_ARGS,
toolCallId: customEvent.value.id,
delta: customEvent.value.args,
rawEvent: event
});
this.subscriber.next({
type: _ag_ui_client.EventType.TOOL_CALL_END,
toolCallId: customEvent.value.id,
rawEvent: event
});
return true;
}
if (customEvent.name === require_consts.CustomEventNames.CopilotKitManuallyEmitIntermediateState) {
this.activeRun.manuallyEmittedState = customEvent.value;
this.dispatchEvent({
type: _ag_ui_client.EventType.STATE_SNAPSHOT,
snapshot: this.getStateSnapshot({ values: this.activeRun.manuallyEmittedState }),
rawEvent: event
});
return true;
}
if (customEvent.name === require_consts.CustomEventNames.CopilotKitExit) {
this.subscriber.next({
type: _ag_ui_client.EventType.CUSTOM,
name: "Exit",
value: true
});
return true;
}
}
const rawEvent = event.rawEvent;
if (!rawEvent) {
this.subscriber.next(event);
return true;
}
const isMessageEvent = event.type === _ag_ui_client.EventType.TEXT_MESSAGE_START || event.type === _ag_ui_client.EventType.TEXT_MESSAGE_CONTENT || event.type === _ag_ui_client.EventType.TEXT_MESSAGE_END;
const isToolEvent = event.type === _ag_ui_client.EventType.TOOL_CALL_START || event.type === _ag_ui_client.EventType.TOOL_CALL_ARGS || event.type === _ag_ui_client.EventType.TOOL_CALL_END;
if ("copilotkit:emit-tool-calls" in (rawEvent.metadata || {})) {
if (rawEvent.metadata["copilotkit:emit-tool-calls"] === false && isToolEvent) return false;
}
if ("copilotkit:emit-messages" in (rawEvent.metadata || {})) {
if (rawEvent.metadata["copilotkit:emit-messages"] === false && isMessageEvent) {
if (this.activeRun?.id) this.messagesInProcess[this.activeRun.id] = null;
return false;
}
}
this.subscriber.next(event);
return true;
}
run(input) {
const messages = (input.messages ?? []).filter((m) => m?.role !== "reasoning");
const enrichedInput = {
...input,
messages,
forwardedProps: {
...input.forwardedProps,
streamSubgraphs: input.forwardedProps?.streamSubgraphs ?? true
}
};
return super.run(enrichedInput).pipe((0, rxjs.map)((processedEvent) => {
if (processedEvent.type === _ag_ui_client.EventType.RAW) {
const event = processedEvent.event ?? processedEvent.rawEvent;
const eventType = event.event;
const toolCallData = event.data?.chunk?.tool_call_chunks?.[0];
const toolCallUsedToPredictState = event.metadata?.["copilotkit:emit-intermediate-state"]?.some((predictStateTool) => predictStateTool.tool === toolCallData?.name);
if (eventType === require_events.LangGraphEventTypes.OnChatModelStream && toolCallUsedToPredictState) return {
type: _ag_ui_client.EventType.CUSTOM,
name: "PredictState",
value: event.metadata["copilotkit:emit-intermediate-state"]
};
}
return processedEvent;
}));
}
langGraphDefaultMergeState(state, messages, input) {
const aguiMergedState = super.langGraphDefaultMergeState(state, messages, input);
const { tools: returnedTools, "ag-ui": agui } = aguiMergedState;
const rawCombinedTools = [...returnedTools ?? [], ...agui?.tools ?? []];
const combinedTools = Array.from(new Map(rawCombinedTools.map((t) => [t?.id ?? t?.name ?? t?.key ?? JSON.stringify(t), t])).values());
return {
...aguiMergedState,
copilotkit: {
actions: combinedTools,
context: agui?.context ?? []
}
};
}
async getSchemaKeys() {
const CONSTANT_KEYS = ["copilotkit"];
const schemaKeys = await super.getSchemaKeys();
return {
config: schemaKeys.config,
input: schemaKeys.input ? [...schemaKeys.input, ...CONSTANT_KEYS] : null,
output: schemaKeys.output ? [...schemaKeys.output, ...CONSTANT_KEYS] : null,
context: schemaKeys.context ? [...schemaKeys.context, ...CONSTANT_KEYS] : null
};
}
};
//#endregion
exports.LangGraphAgent = LangGraphAgent;
//# sourceMappingURL=agent.cjs.map