@copilotkit/runtime 1.2.1 → 1.2.2-feat-runtime-remote-actions.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/__snapshots__/schema/schema.graphql +41 -0
- package/dist/{chunk-YMUS43FR.mjs → chunk-2N45GS3P.mjs} +2 -2
- package/dist/{chunk-URMISMK2.mjs → chunk-73NMP3DI.mjs} +2 -2
- package/dist/{chunk-736EEICU.mjs → chunk-BJ2LVHWA.mjs} +3 -3
- package/dist/{chunk-DMO6FA25.mjs → chunk-T6O5FSTK.mjs} +2 -2
- package/dist/{chunk-GEIBJJQ4.mjs → chunk-TBZGOJJX.mjs} +14 -2
- package/dist/chunk-TBZGOJJX.mjs.map +1 -0
- package/dist/{chunk-DYF5MUAH.mjs → chunk-X5QBBMCJ.mjs} +2 -2
- package/dist/{chunk-Q5ZTE7WH.mjs → chunk-XROLDARH.mjs} +786 -158
- package/dist/chunk-XROLDARH.mjs.map +1 -0
- package/dist/chunk-ZNZGATLW.mjs +260 -0
- package/dist/chunk-ZNZGATLW.mjs.map +1 -0
- package/dist/{shared-c5362338.d.ts → copilot-runtime-d427e991.d.ts} +65 -38
- package/dist/graphql/types/converted/index.d.ts +1 -1
- package/dist/graphql/types/converted/index.js +13 -0
- package/dist/graphql/types/converted/index.js.map +1 -1
- package/dist/graphql/types/converted/index.mjs +3 -1
- package/dist/{index-aa091e3c.d.ts → index-0476e4f7.d.ts} +24 -2
- package/dist/{index-13aa818e.d.ts → index-079752b9.d.ts} +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +982 -245
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8 -8
- package/dist/{langserve-a54438c6.d.ts → langserve-d6073a3b.d.ts} +24 -11
- package/dist/lib/index.d.ts +7 -7
- package/dist/lib/index.js +982 -245
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs +8 -8
- package/dist/lib/integrations/index.d.ts +6 -6
- package/dist/lib/integrations/index.js +437 -182
- package/dist/lib/integrations/index.js.map +1 -1
- package/dist/lib/integrations/index.mjs +6 -6
- package/dist/lib/integrations/nest/index.d.ts +5 -5
- package/dist/lib/integrations/nest/index.js +437 -182
- package/dist/lib/integrations/nest/index.js.map +1 -1
- package/dist/lib/integrations/nest/index.mjs +4 -4
- package/dist/lib/integrations/node-express/index.d.ts +5 -5
- package/dist/lib/integrations/node-express/index.js +437 -182
- package/dist/lib/integrations/node-express/index.js.map +1 -1
- package/dist/lib/integrations/node-express/index.mjs +4 -4
- package/dist/lib/integrations/node-http/index.d.ts +5 -5
- package/dist/lib/integrations/node-http/index.js +437 -182
- package/dist/lib/integrations/node-http/index.js.map +1 -1
- package/dist/lib/integrations/node-http/index.mjs +3 -3
- package/dist/service-adapters/index.d.ts +3 -3
- package/dist/service-adapters/index.js.map +1 -1
- package/dist/service-adapters/index.mjs +3 -3
- package/package.json +7 -5
- package/src/agents/langgraph/event-source.ts +222 -0
- package/src/agents/langgraph/events.ts +309 -0
- package/src/graphql/inputs/agent-session.input.ts +13 -0
- package/src/graphql/inputs/agent-state.input.ts +10 -0
- package/src/graphql/inputs/generate-copilot-response.input.ts +11 -0
- package/src/graphql/inputs/message.input.ts +30 -0
- package/src/graphql/resolvers/copilot.resolver.ts +56 -12
- package/src/graphql/types/converted/index.ts +15 -0
- package/src/graphql/types/copilot-response.type.ts +29 -0
- package/src/graphql/types/enums.ts +1 -0
- package/src/lib/index.ts +1 -1
- package/src/lib/integrations/shared.ts +1 -1
- package/src/lib/runtime/copilot-runtime.ts +360 -0
- package/src/lib/runtime/remote-actions.ts +241 -0
- package/src/service-adapters/conversion.ts +16 -0
- package/src/service-adapters/events.ts +101 -19
- package/dist/chunk-GEIBJJQ4.mjs.map +0 -1
- package/dist/chunk-PB24CCIJ.mjs +0 -158
- package/dist/chunk-PB24CCIJ.mjs.map +0 -1
- package/dist/chunk-Q5ZTE7WH.mjs.map +0 -1
- package/src/lib/copilot-runtime.ts +0 -231
- /package/dist/{chunk-YMUS43FR.mjs.map → chunk-2N45GS3P.mjs.map} +0 -0
- /package/dist/{chunk-URMISMK2.mjs.map → chunk-73NMP3DI.mjs.map} +0 -0
- /package/dist/{chunk-736EEICU.mjs.map → chunk-BJ2LVHWA.mjs.map} +0 -0
- /package/dist/{chunk-DMO6FA25.mjs.map → chunk-T6O5FSTK.mjs.map} +0 -0
- /package/dist/{chunk-DYF5MUAH.mjs.map → chunk-X5QBBMCJ.mjs.map} +0 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { Action } from "@copilotkit/shared";
|
|
2
|
+
import { GraphQLContext } from "../integrations/shared";
|
|
3
|
+
import { Logger } from "pino";
|
|
4
|
+
import telemetry from "../../lib/telemetry-client";
|
|
5
|
+
import { Message } from "../../graphql/types/converted";
|
|
6
|
+
import { RuntimeEvent, RuntimeEventSubject } from "../../service-adapters/events";
|
|
7
|
+
import { RemoteLangGraphEventSource } from "../../agents/langgraph/event-source";
|
|
8
|
+
import { Observable } from "rxjs";
|
|
9
|
+
import { ActionInput } from "../../graphql/inputs/action.input";
|
|
10
|
+
import { AgentStateInput } from "../../graphql/inputs/agent-state.input";
|
|
11
|
+
|
|
12
|
+
export type RemoteActionDefinition = {
|
|
13
|
+
url: string;
|
|
14
|
+
onBeforeRequest?: ({ ctx }: { ctx: GraphQLContext }) => {
|
|
15
|
+
headers?: Record<string, string> | undefined;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type LangGraphAgentHandlerParams = {
|
|
20
|
+
name: string;
|
|
21
|
+
actionInputsWithoutAgents: ActionInput[];
|
|
22
|
+
threadId?: string;
|
|
23
|
+
nodeName?: string;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export type LangGraphAgentAction = Action<any> & {
|
|
27
|
+
langGraphAgentHandler: (params: LangGraphAgentHandlerParams) => Promise<Observable<RuntimeEvent>>;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export function isLangGraphAgentAction(action: Action<any>): action is LangGraphAgentAction {
|
|
31
|
+
if (!action) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return typeof (action as LangGraphAgentAction).langGraphAgentHandler === "function";
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function createHeaders(
|
|
38
|
+
onBeforeRequest: RemoteActionDefinition["onBeforeRequest"],
|
|
39
|
+
graphqlContext: GraphQLContext,
|
|
40
|
+
) {
|
|
41
|
+
const headers = {
|
|
42
|
+
"Content-Type": "application/json",
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
if (onBeforeRequest) {
|
|
46
|
+
const { headers: additionalHeaders } = onBeforeRequest({ ctx: graphqlContext });
|
|
47
|
+
if (additionalHeaders) {
|
|
48
|
+
Object.assign(headers, additionalHeaders);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return headers;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async function fetchRemoteInfo({
|
|
56
|
+
url,
|
|
57
|
+
onBeforeRequest,
|
|
58
|
+
graphqlContext,
|
|
59
|
+
logger,
|
|
60
|
+
}: {
|
|
61
|
+
url: string;
|
|
62
|
+
onBeforeRequest?: RemoteActionDefinition["onBeforeRequest"];
|
|
63
|
+
graphqlContext: GraphQLContext;
|
|
64
|
+
logger: Logger;
|
|
65
|
+
}): Promise<any[]> {
|
|
66
|
+
logger.debug({ url }, "Fetching actions from url");
|
|
67
|
+
const headers = createHeaders(onBeforeRequest, graphqlContext);
|
|
68
|
+
|
|
69
|
+
const response = await fetch(`${url}/info`, {
|
|
70
|
+
method: "POST",
|
|
71
|
+
headers,
|
|
72
|
+
body: JSON.stringify({ properties: graphqlContext.properties }),
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
if (!response.ok) {
|
|
76
|
+
logger.error(
|
|
77
|
+
{ url, status: response.status, body: await response.text() },
|
|
78
|
+
"Failed to fetch actions from url",
|
|
79
|
+
);
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const json = await response.json();
|
|
84
|
+
logger.debug({ json }, "Fetched actions from url");
|
|
85
|
+
return json;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function constructRemoteActions({
|
|
89
|
+
json,
|
|
90
|
+
url,
|
|
91
|
+
onBeforeRequest,
|
|
92
|
+
graphqlContext,
|
|
93
|
+
logger,
|
|
94
|
+
messages,
|
|
95
|
+
agentStates,
|
|
96
|
+
}: {
|
|
97
|
+
json: any[];
|
|
98
|
+
url: string;
|
|
99
|
+
onBeforeRequest?: RemoteActionDefinition["onBeforeRequest"];
|
|
100
|
+
graphqlContext: GraphQLContext;
|
|
101
|
+
logger: Logger;
|
|
102
|
+
messages: Message[];
|
|
103
|
+
agentStates?: AgentStateInput[];
|
|
104
|
+
}): Action<any>[] {
|
|
105
|
+
const actions = json["actions"].map((action) => ({
|
|
106
|
+
name: action.name,
|
|
107
|
+
description: action.description,
|
|
108
|
+
parameters: action.parameters,
|
|
109
|
+
handler: async (args: any) => {
|
|
110
|
+
logger.debug({ actionName: action.name, args }, "Executing remote action");
|
|
111
|
+
|
|
112
|
+
const headers = createHeaders(onBeforeRequest, graphqlContext);
|
|
113
|
+
telemetry.capture("oss.runtime.remote_action_executed", {});
|
|
114
|
+
|
|
115
|
+
const response = await fetch(`${url}/actions/execute`, {
|
|
116
|
+
method: "POST",
|
|
117
|
+
headers,
|
|
118
|
+
body: JSON.stringify({
|
|
119
|
+
name: action.name,
|
|
120
|
+
arguments: args,
|
|
121
|
+
properties: graphqlContext.properties,
|
|
122
|
+
}),
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
if (!response.ok) {
|
|
126
|
+
logger.error(
|
|
127
|
+
{ url, status: response.status, body: await response.text() },
|
|
128
|
+
"Failed to execute remote action",
|
|
129
|
+
);
|
|
130
|
+
return "Failed to execute remote action";
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const requestResult = await response.json();
|
|
134
|
+
|
|
135
|
+
const result = requestResult["result"];
|
|
136
|
+
logger.debug({ actionName: action.name, result }, "Executed remote action");
|
|
137
|
+
return result;
|
|
138
|
+
},
|
|
139
|
+
}));
|
|
140
|
+
|
|
141
|
+
const agents = json["agents"].map((agent) => ({
|
|
142
|
+
name: agent.name,
|
|
143
|
+
description: agent.description,
|
|
144
|
+
parameters: [],
|
|
145
|
+
handler: async (_args: any) => {},
|
|
146
|
+
|
|
147
|
+
langGraphAgentHandler: async ({
|
|
148
|
+
name,
|
|
149
|
+
actionInputsWithoutAgents,
|
|
150
|
+
threadId,
|
|
151
|
+
nodeName,
|
|
152
|
+
}: LangGraphAgentHandlerParams): Promise<Observable<RuntimeEvent>> => {
|
|
153
|
+
logger.debug({ actionName: agent.name }, "Executing remote agent");
|
|
154
|
+
|
|
155
|
+
const headers = createHeaders(onBeforeRequest, graphqlContext);
|
|
156
|
+
telemetry.capture("oss.runtime.remote_action_executed", {});
|
|
157
|
+
|
|
158
|
+
let state = {};
|
|
159
|
+
if (agentStates) {
|
|
160
|
+
const jsonState = agentStates.find((state) => state.agentName === name)?.state;
|
|
161
|
+
if (jsonState) {
|
|
162
|
+
state = JSON.parse(jsonState);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const response = await fetch(`${url}/agents/execute`, {
|
|
167
|
+
method: "POST",
|
|
168
|
+
headers,
|
|
169
|
+
body: JSON.stringify({
|
|
170
|
+
name,
|
|
171
|
+
threadId,
|
|
172
|
+
nodeName,
|
|
173
|
+
messages,
|
|
174
|
+
state,
|
|
175
|
+
properties: graphqlContext.properties,
|
|
176
|
+
actions: actionInputsWithoutAgents.map((action) => ({
|
|
177
|
+
name: action.name,
|
|
178
|
+
description: action.description,
|
|
179
|
+
parameters: JSON.parse(action.jsonSchema),
|
|
180
|
+
})),
|
|
181
|
+
}),
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
if (!response.ok) {
|
|
185
|
+
logger.error(
|
|
186
|
+
{ url, status: response.status, body: await response.text() },
|
|
187
|
+
"Failed to execute remote agent",
|
|
188
|
+
);
|
|
189
|
+
throw new Error("Failed to execute remote agent");
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const eventSource = new RemoteLangGraphEventSource();
|
|
193
|
+
eventSource.streamResponse(response);
|
|
194
|
+
return eventSource.processLangGraphEvents();
|
|
195
|
+
},
|
|
196
|
+
}));
|
|
197
|
+
|
|
198
|
+
return [...actions, ...agents];
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export async function setupRemoteActions({
|
|
202
|
+
remoteActionDefinitions,
|
|
203
|
+
graphqlContext,
|
|
204
|
+
messages,
|
|
205
|
+
agentStates,
|
|
206
|
+
}: {
|
|
207
|
+
remoteActionDefinitions: RemoteActionDefinition[];
|
|
208
|
+
graphqlContext: GraphQLContext;
|
|
209
|
+
messages: Message[];
|
|
210
|
+
agentStates?: AgentStateInput[];
|
|
211
|
+
}): Promise<Action[]> {
|
|
212
|
+
const logger = graphqlContext.logger.child({ component: "remote-actions.fetchRemoteActions" });
|
|
213
|
+
logger.debug({ remoteActionDefinitions }, "Fetching remote actions");
|
|
214
|
+
|
|
215
|
+
// Remove duplicates of remoteActionDefinitions.url
|
|
216
|
+
const filtered = remoteActionDefinitions.filter(
|
|
217
|
+
(value, index, self) => index === self.findIndex((t) => t.url === value.url),
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
const result = await Promise.all(
|
|
221
|
+
filtered.map(async (actionDefinition) => {
|
|
222
|
+
const json = await fetchRemoteInfo({
|
|
223
|
+
url: actionDefinition.url,
|
|
224
|
+
onBeforeRequest: actionDefinition.onBeforeRequest,
|
|
225
|
+
graphqlContext,
|
|
226
|
+
logger: logger.child({ component: "remote-actions.fetchActionsFromUrl", actionDefinition }),
|
|
227
|
+
});
|
|
228
|
+
return constructRemoteActions({
|
|
229
|
+
json,
|
|
230
|
+
messages,
|
|
231
|
+
url: actionDefinition.url,
|
|
232
|
+
onBeforeRequest: actionDefinition.onBeforeRequest,
|
|
233
|
+
graphqlContext,
|
|
234
|
+
logger: logger.child({ component: "remote-actions.constructActions", actionDefinition }),
|
|
235
|
+
agentStates,
|
|
236
|
+
});
|
|
237
|
+
}),
|
|
238
|
+
);
|
|
239
|
+
|
|
240
|
+
return result.flat();
|
|
241
|
+
}
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
Message,
|
|
4
4
|
ResultMessage,
|
|
5
5
|
TextMessage,
|
|
6
|
+
AgentStateMessage,
|
|
6
7
|
} from "../graphql/types/converted";
|
|
7
8
|
import { MessageInput } from "../graphql/inputs/message.input";
|
|
8
9
|
import { plainToInstance } from "class-transformer";
|
|
@@ -40,6 +41,21 @@ export function convertGqlInputToMessages(inputMessages: MessageInput[]): Messag
|
|
|
40
41
|
result: message.resultMessage.result,
|
|
41
42
|
}),
|
|
42
43
|
);
|
|
44
|
+
} else if (message.agentStateMessage) {
|
|
45
|
+
messages.push(
|
|
46
|
+
plainToInstance(AgentStateMessage, {
|
|
47
|
+
id: message.id,
|
|
48
|
+
threadId: message.agentStateMessage.threadId,
|
|
49
|
+
createdAt: message.createdAt,
|
|
50
|
+
agentName: message.agentStateMessage.agentName,
|
|
51
|
+
nodeName: message.agentStateMessage.nodeName,
|
|
52
|
+
runId: message.agentStateMessage.runId,
|
|
53
|
+
active: message.agentStateMessage.active,
|
|
54
|
+
role: message.agentStateMessage.role,
|
|
55
|
+
state: JSON.parse(message.agentStateMessage.state),
|
|
56
|
+
running: message.agentStateMessage.running,
|
|
57
|
+
}),
|
|
58
|
+
);
|
|
43
59
|
}
|
|
44
60
|
}
|
|
45
61
|
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
import { Action } from "@copilotkit/shared";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
of,
|
|
4
|
+
concat,
|
|
5
|
+
map,
|
|
6
|
+
scan,
|
|
7
|
+
concatMap,
|
|
8
|
+
ReplaySubject,
|
|
9
|
+
Subject,
|
|
10
|
+
firstValueFrom,
|
|
11
|
+
from,
|
|
12
|
+
} from "rxjs";
|
|
3
13
|
import { streamLangChainResponse } from "./langchain/utils";
|
|
4
14
|
import { GuardrailsResult } from "../graphql/types/guardrails-result.type";
|
|
15
|
+
import telemetry from "../lib/telemetry-client";
|
|
16
|
+
import { isLangGraphAgentAction } from "../lib/runtime/remote-actions";
|
|
17
|
+
import { ActionInput } from "../graphql/inputs/action.input";
|
|
5
18
|
|
|
6
19
|
export enum RuntimeEventTypes {
|
|
7
20
|
TextMessageStart = "TextMessageStart",
|
|
@@ -11,9 +24,10 @@ export enum RuntimeEventTypes {
|
|
|
11
24
|
ActionExecutionArgs = "ActionExecutionArgs",
|
|
12
25
|
ActionExecutionEnd = "ActionExecutionEnd",
|
|
13
26
|
ActionExecutionResult = "ActionExecutionResult",
|
|
27
|
+
AgentStateMessage = "AgentStateMessage",
|
|
14
28
|
}
|
|
15
29
|
|
|
16
|
-
type FunctionCallScope = "client" | "server";
|
|
30
|
+
type FunctionCallScope = "client" | "server" | "passThrough";
|
|
17
31
|
|
|
18
32
|
export type RuntimeEvent =
|
|
19
33
|
| { type: RuntimeEventTypes.TextMessageStart; messageId: string }
|
|
@@ -35,6 +49,17 @@ export type RuntimeEvent =
|
|
|
35
49
|
actionName: string;
|
|
36
50
|
actionExecutionId: string;
|
|
37
51
|
result: string;
|
|
52
|
+
}
|
|
53
|
+
| {
|
|
54
|
+
type: RuntimeEventTypes.AgentStateMessage;
|
|
55
|
+
threadId: string;
|
|
56
|
+
agentName: string;
|
|
57
|
+
nodeName: string;
|
|
58
|
+
runId: string;
|
|
59
|
+
active: boolean;
|
|
60
|
+
role: string;
|
|
61
|
+
state: string;
|
|
62
|
+
running: boolean;
|
|
38
63
|
};
|
|
39
64
|
|
|
40
65
|
interface RuntimeEventWithState {
|
|
@@ -100,6 +125,29 @@ export class RuntimeEventSubject extends ReplaySubject<RuntimeEvent> {
|
|
|
100
125
|
result,
|
|
101
126
|
});
|
|
102
127
|
}
|
|
128
|
+
|
|
129
|
+
sendAgentStateMessage(
|
|
130
|
+
threadId: string,
|
|
131
|
+
agentName: string,
|
|
132
|
+
nodeName: string,
|
|
133
|
+
runId: string,
|
|
134
|
+
active: boolean,
|
|
135
|
+
role: string,
|
|
136
|
+
state: string,
|
|
137
|
+
running: boolean,
|
|
138
|
+
) {
|
|
139
|
+
this.next({
|
|
140
|
+
type: RuntimeEventTypes.AgentStateMessage,
|
|
141
|
+
threadId,
|
|
142
|
+
agentName,
|
|
143
|
+
nodeName,
|
|
144
|
+
runId,
|
|
145
|
+
active,
|
|
146
|
+
role,
|
|
147
|
+
state,
|
|
148
|
+
running,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
103
151
|
}
|
|
104
152
|
|
|
105
153
|
export class RuntimeEventSource {
|
|
@@ -110,12 +158,14 @@ export class RuntimeEventSource {
|
|
|
110
158
|
this.callback = callback;
|
|
111
159
|
}
|
|
112
160
|
|
|
113
|
-
|
|
114
|
-
|
|
161
|
+
processRuntimeEvents({
|
|
162
|
+
serverSideActions,
|
|
115
163
|
guardrailsResult$,
|
|
164
|
+
actionInputsWithoutAgents,
|
|
116
165
|
}: {
|
|
117
|
-
|
|
166
|
+
serverSideActions: Action<any>[];
|
|
118
167
|
guardrailsResult$?: Subject<GuardrailsResult>;
|
|
168
|
+
actionInputsWithoutAgents: ActionInput[];
|
|
119
169
|
}) {
|
|
120
170
|
this.callback(this.eventStream$).catch((error) => {
|
|
121
171
|
console.error("Error in event source callback", error);
|
|
@@ -124,27 +174,35 @@ export class RuntimeEventSource {
|
|
|
124
174
|
// mark tools for server side execution
|
|
125
175
|
map((event) => {
|
|
126
176
|
if (event.type === RuntimeEventTypes.ActionExecutionStart) {
|
|
127
|
-
event.scope
|
|
128
|
-
|
|
129
|
-
|
|
177
|
+
if (event.scope !== "passThrough") {
|
|
178
|
+
event.scope = serverSideActions.find((action) => action.name === event.actionName)
|
|
179
|
+
? "server"
|
|
180
|
+
: "client";
|
|
181
|
+
}
|
|
130
182
|
}
|
|
131
183
|
return event;
|
|
132
184
|
}),
|
|
133
185
|
// track state
|
|
134
186
|
scan(
|
|
135
187
|
(acc, event) => {
|
|
188
|
+
// It seems like this is needed so that rxjs recognizes the object has changed
|
|
189
|
+
// This fixes an issue where action were executed multiple times
|
|
190
|
+
// Not investigating further for now (Markus)
|
|
191
|
+
acc = { ...acc };
|
|
192
|
+
|
|
136
193
|
if (event.type === RuntimeEventTypes.ActionExecutionStart) {
|
|
137
194
|
acc.callActionServerSide = event.scope === "server";
|
|
138
195
|
acc.args = "";
|
|
139
196
|
acc.actionExecutionId = event.actionExecutionId;
|
|
140
197
|
if (acc.callActionServerSide) {
|
|
141
|
-
acc.action =
|
|
198
|
+
acc.action = serverSideActions.find((action) => action.name === event.actionName);
|
|
142
199
|
}
|
|
143
200
|
} else if (event.type === RuntimeEventTypes.ActionExecutionArgs) {
|
|
144
201
|
acc.args += event.args;
|
|
145
202
|
}
|
|
146
203
|
|
|
147
204
|
acc.event = event;
|
|
205
|
+
|
|
148
206
|
return acc;
|
|
149
207
|
},
|
|
150
208
|
{
|
|
@@ -167,9 +225,12 @@ export class RuntimeEventSource {
|
|
|
167
225
|
eventWithState.action!,
|
|
168
226
|
eventWithState.args,
|
|
169
227
|
eventWithState.actionExecutionId,
|
|
228
|
+
actionInputsWithoutAgents,
|
|
170
229
|
).catch((error) => {
|
|
171
230
|
console.error(error);
|
|
172
231
|
});
|
|
232
|
+
|
|
233
|
+
telemetry.capture("oss.runtime.server_action_executed", {});
|
|
173
234
|
return concat(of(eventWithState.event!), toolCallEventStream$);
|
|
174
235
|
} else {
|
|
175
236
|
return of(eventWithState.event!);
|
|
@@ -185,6 +246,7 @@ async function executeAction(
|
|
|
185
246
|
action: Action<any>,
|
|
186
247
|
actionArguments: string,
|
|
187
248
|
actionExecutionId: string,
|
|
249
|
+
actionInputsWithoutAgents: ActionInput[],
|
|
188
250
|
) {
|
|
189
251
|
if (guardrailsResult$) {
|
|
190
252
|
const { status } = await firstValueFrom(guardrailsResult$);
|
|
@@ -201,15 +263,35 @@ async function executeAction(
|
|
|
201
263
|
args = JSON.parse(actionArguments);
|
|
202
264
|
}
|
|
203
265
|
|
|
204
|
-
//
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
266
|
+
// handle LangGraph agents
|
|
267
|
+
if (isLangGraphAgentAction(action)) {
|
|
268
|
+
eventStream$.sendActionExecutionResult(
|
|
269
|
+
actionExecutionId,
|
|
270
|
+
action.name,
|
|
271
|
+
`${action.name} agent started`,
|
|
272
|
+
);
|
|
273
|
+
const stream = await action.langGraphAgentHandler({
|
|
211
274
|
name: action.name,
|
|
212
|
-
|
|
213
|
-
}
|
|
214
|
-
|
|
275
|
+
actionInputsWithoutAgents,
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
// forward to eventStream$
|
|
279
|
+
from(stream).subscribe({
|
|
280
|
+
next: (event) => eventStream$.next(event),
|
|
281
|
+
error: (err) => console.error("Error in stream", err),
|
|
282
|
+
complete: () => eventStream$.complete(),
|
|
283
|
+
});
|
|
284
|
+
} else {
|
|
285
|
+
// call the function
|
|
286
|
+
const result = await action.handler?.(args);
|
|
287
|
+
|
|
288
|
+
await streamLangChainResponse({
|
|
289
|
+
result,
|
|
290
|
+
eventStream$,
|
|
291
|
+
actionExecution: {
|
|
292
|
+
name: action.name,
|
|
293
|
+
id: actionExecutionId,
|
|
294
|
+
},
|
|
295
|
+
});
|
|
296
|
+
}
|
|
215
297
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphql/types/converted/index.ts"],"sourcesContent":["import {\n ActionExecutionMessageInput,\n ResultMessageInput,\n TextMessageInput,\n} from \"../../inputs/message.input\";\nimport { BaseMessage } from \"../base\";\nimport { ActionExecutionScope, MessageRole } from \"../enums\";\n\nexport class TextMessage extends BaseMessage implements TextMessageInput {\n content: string;\n role: MessageRole;\n}\n\nexport type Message = BaseMessage;\n\nexport class ActionExecutionMessage\n extends BaseMessage\n implements Omit<ActionExecutionMessageInput, \"arguments\">\n{\n name: string;\n arguments: Record<string, any>;\n scope: ActionExecutionScope;\n}\n\nexport class ResultMessage extends BaseMessage implements ResultMessageInput {\n actionExecutionId: string;\n actionName: string;\n result: string;\n}\n"],"mappings":";;;;;;;;AAQO,IAAMA,cAAN,cAA0BC,YAAAA;EAC/BC;EACAC;AACF;AAHaH;AAON,IAAMI,yBAAN,cACGH,YAAAA;EAGRI;EACAC;EACAC;AACF;AAPaH;AASN,IAAMI,gBAAN,cAA4BP,YAAAA;EACjCQ;EACAC;EACAC;AACF;AAJaH;","names":["TextMessage","BaseMessage","content","role","ActionExecutionMessage","name","arguments","scope","ResultMessage","actionExecutionId","actionName","result"]}
|
package/dist/chunk-PB24CCIJ.mjs
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
RemoteChain
|
|
3
|
-
} from "./chunk-736EEICU.mjs";
|
|
4
|
-
import {
|
|
5
|
-
RuntimeEventSource
|
|
6
|
-
} from "./chunk-Q5ZTE7WH.mjs";
|
|
7
|
-
import {
|
|
8
|
-
ActionExecutionMessage,
|
|
9
|
-
ResultMessage,
|
|
10
|
-
TextMessage
|
|
11
|
-
} from "./chunk-GEIBJJQ4.mjs";
|
|
12
|
-
import {
|
|
13
|
-
__name
|
|
14
|
-
} from "./chunk-44O2JGUY.mjs";
|
|
15
|
-
|
|
16
|
-
// src/lib/copilot-runtime.ts
|
|
17
|
-
import { actionParametersToJsonSchema } from "@copilotkit/shared";
|
|
18
|
-
|
|
19
|
-
// src/service-adapters/conversion.ts
|
|
20
|
-
import { plainToInstance } from "class-transformer";
|
|
21
|
-
function convertGqlInputToMessages(inputMessages) {
|
|
22
|
-
const messages = [];
|
|
23
|
-
for (const message of inputMessages) {
|
|
24
|
-
if (message.textMessage) {
|
|
25
|
-
messages.push(plainToInstance(TextMessage, {
|
|
26
|
-
id: message.id,
|
|
27
|
-
createdAt: message.createdAt,
|
|
28
|
-
role: message.textMessage.role,
|
|
29
|
-
content: message.textMessage.content
|
|
30
|
-
}));
|
|
31
|
-
} else if (message.actionExecutionMessage) {
|
|
32
|
-
messages.push(plainToInstance(ActionExecutionMessage, {
|
|
33
|
-
id: message.id,
|
|
34
|
-
createdAt: message.createdAt,
|
|
35
|
-
name: message.actionExecutionMessage.name,
|
|
36
|
-
arguments: JSON.parse(message.actionExecutionMessage.arguments),
|
|
37
|
-
scope: message.actionExecutionMessage.scope
|
|
38
|
-
}));
|
|
39
|
-
} else if (message.resultMessage) {
|
|
40
|
-
messages.push(plainToInstance(ResultMessage, {
|
|
41
|
-
id: message.id,
|
|
42
|
-
createdAt: message.createdAt,
|
|
43
|
-
actionExecutionId: message.resultMessage.actionExecutionId,
|
|
44
|
-
actionName: message.resultMessage.actionName,
|
|
45
|
-
result: message.resultMessage.result
|
|
46
|
-
}));
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return messages;
|
|
50
|
-
}
|
|
51
|
-
__name(convertGqlInputToMessages, "convertGqlInputToMessages");
|
|
52
|
-
|
|
53
|
-
// src/lib/copilot-runtime.ts
|
|
54
|
-
var CopilotRuntime = class {
|
|
55
|
-
actions;
|
|
56
|
-
langserve = [];
|
|
57
|
-
onBeforeRequest;
|
|
58
|
-
onAfterRequest;
|
|
59
|
-
constructor(params) {
|
|
60
|
-
var _a, _b;
|
|
61
|
-
this.actions = (params == null ? void 0 : params.actions) || [];
|
|
62
|
-
for (const chain of (params == null ? void 0 : params.langserve) || []) {
|
|
63
|
-
const remoteChain = new RemoteChain(chain);
|
|
64
|
-
this.langserve.push(remoteChain.toAction());
|
|
65
|
-
}
|
|
66
|
-
this.onBeforeRequest = (_a = params == null ? void 0 : params.middleware) == null ? void 0 : _a.onBeforeRequest;
|
|
67
|
-
this.onAfterRequest = (_b = params == null ? void 0 : params.middleware) == null ? void 0 : _b.onAfterRequest;
|
|
68
|
-
}
|
|
69
|
-
async process(request) {
|
|
70
|
-
var _a;
|
|
71
|
-
const { serviceAdapter, messages, actions: clientSideActionsInput, threadId, runId, properties, outputMessagesPromise, forwardedParameters, url } = request;
|
|
72
|
-
const langserveFunctions = [];
|
|
73
|
-
for (const chainPromise of this.langserve) {
|
|
74
|
-
try {
|
|
75
|
-
const chain = await chainPromise;
|
|
76
|
-
langserveFunctions.push(chain);
|
|
77
|
-
} catch (error) {
|
|
78
|
-
console.error("Error loading langserve chain:", error);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
const configuredActions = typeof this.actions === "function" ? this.actions({
|
|
82
|
-
properties,
|
|
83
|
-
url
|
|
84
|
-
}) : this.actions;
|
|
85
|
-
const actions = [
|
|
86
|
-
...configuredActions,
|
|
87
|
-
...langserveFunctions
|
|
88
|
-
];
|
|
89
|
-
const serverSideActionsInput = actions.map((action) => ({
|
|
90
|
-
name: action.name,
|
|
91
|
-
description: action.description,
|
|
92
|
-
jsonSchema: JSON.stringify(actionParametersToJsonSchema(action.parameters))
|
|
93
|
-
}));
|
|
94
|
-
const actionInputs = flattenToolCallsNoDuplicates([
|
|
95
|
-
...serverSideActionsInput,
|
|
96
|
-
...clientSideActionsInput
|
|
97
|
-
]);
|
|
98
|
-
const inputMessages = convertGqlInputToMessages(messages);
|
|
99
|
-
await ((_a = this.onBeforeRequest) == null ? void 0 : _a.call(this, {
|
|
100
|
-
threadId,
|
|
101
|
-
runId,
|
|
102
|
-
inputMessages,
|
|
103
|
-
properties,
|
|
104
|
-
url
|
|
105
|
-
}));
|
|
106
|
-
try {
|
|
107
|
-
const eventSource = new RuntimeEventSource();
|
|
108
|
-
const result = await serviceAdapter.process({
|
|
109
|
-
messages: inputMessages,
|
|
110
|
-
actions: actionInputs,
|
|
111
|
-
threadId,
|
|
112
|
-
runId,
|
|
113
|
-
eventSource,
|
|
114
|
-
forwardedParameters
|
|
115
|
-
});
|
|
116
|
-
outputMessagesPromise.then((outputMessages) => {
|
|
117
|
-
var _a2;
|
|
118
|
-
(_a2 = this.onAfterRequest) == null ? void 0 : _a2.call(this, {
|
|
119
|
-
threadId: result.threadId,
|
|
120
|
-
runId: result.runId,
|
|
121
|
-
inputMessages,
|
|
122
|
-
outputMessages,
|
|
123
|
-
properties,
|
|
124
|
-
url
|
|
125
|
-
});
|
|
126
|
-
}).catch((_error) => {
|
|
127
|
-
});
|
|
128
|
-
return {
|
|
129
|
-
threadId: result.threadId,
|
|
130
|
-
runId: result.runId,
|
|
131
|
-
eventSource,
|
|
132
|
-
actions
|
|
133
|
-
};
|
|
134
|
-
} catch (error) {
|
|
135
|
-
console.error("Error getting response:", error);
|
|
136
|
-
throw error;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
__name(CopilotRuntime, "CopilotRuntime");
|
|
141
|
-
function flattenToolCallsNoDuplicates(toolsByPriority) {
|
|
142
|
-
let allTools = [];
|
|
143
|
-
const allToolNames = [];
|
|
144
|
-
for (const tool of toolsByPriority) {
|
|
145
|
-
if (!allToolNames.includes(tool.name)) {
|
|
146
|
-
allTools.push(tool);
|
|
147
|
-
allToolNames.push(tool.name);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return allTools;
|
|
151
|
-
}
|
|
152
|
-
__name(flattenToolCallsNoDuplicates, "flattenToolCallsNoDuplicates");
|
|
153
|
-
|
|
154
|
-
export {
|
|
155
|
-
CopilotRuntime,
|
|
156
|
-
flattenToolCallsNoDuplicates
|
|
157
|
-
};
|
|
158
|
-
//# sourceMappingURL=chunk-PB24CCIJ.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/copilot-runtime.ts","../src/service-adapters/conversion.ts"],"sourcesContent":["/**\n * <Callout type=\"info\">\n * This is the reference for the `CopilotRuntime` class. For more information and example code snippets, please see [Concept: Copilot Runtime](/concepts/copilot-runtime).\n * </Callout>\n *\n * ## Usage\n *\n * ```tsx\n * import { CopilotRuntime } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n * ```\n */\n\nimport { Action, actionParametersToJsonSchema, Parameter } from \"@copilotkit/shared\";\nimport { RemoteChain, RemoteChainParameters, CopilotServiceAdapter } from \"../service-adapters\";\nimport { MessageInput } from \"../graphql/inputs/message.input\";\nimport { ActionInput } from \"../graphql/inputs/action.input\";\nimport { RuntimeEventSource } from \"../service-adapters/events\";\nimport { convertGqlInputToMessages } from \"../service-adapters/conversion\";\nimport { Message } from \"../graphql/types/converted\";\nimport { ForwardedParametersInput } from \"../graphql/inputs/forwarded-parameters.input\";\n\ninterface CopilotRuntimeRequest {\n serviceAdapter: CopilotServiceAdapter;\n messages: MessageInput[];\n actions: ActionInput[];\n outputMessagesPromise: Promise<Message[]>;\n properties: any;\n threadId?: string;\n runId?: string;\n publicApiKey?: string;\n url?: string;\n forwardedParameters?: ForwardedParametersInput;\n}\n\ninterface CopilotRuntimeResponse {\n threadId: string;\n runId?: string;\n eventSource: RuntimeEventSource;\n actions: Action<any>[];\n}\n\ntype ActionsConfiguration<T extends Parameter[] | [] = []> =\n | Action<T>[]\n | ((ctx: { properties: any; url?: string }) => Action<T>[]);\n\ninterface OnBeforeRequestOptions {\n threadId?: string;\n runId?: string;\n inputMessages: Message[];\n properties: any;\n url?: string;\n}\n\ntype OnBeforeRequestHandler = (options: OnBeforeRequestOptions) => void | Promise<void>;\n\ninterface OnAfterRequestOptions {\n threadId: string;\n runId?: string;\n inputMessages: Message[];\n outputMessages: Message[];\n properties: any;\n url?: string;\n}\n\ntype OnAfterRequestHandler = (options: OnAfterRequestOptions) => void | Promise<void>;\n\ninterface Middleware {\n /**\n * A function that is called before the request is processed.\n */\n onBeforeRequest?: OnBeforeRequestHandler;\n\n /**\n * A function that is called after the request is processed.\n */\n onAfterRequest?: OnAfterRequestHandler;\n}\n\nexport interface CopilotRuntimeConstructorParams<T extends Parameter[] | [] = []> {\n /**\n * Middleware to be used by the runtime.\n *\n * ```ts\n * onBeforeRequest: (options: {\n * threadId?: string;\n * runId?: string;\n * inputMessages: Message[];\n * properties: any;\n * }) => void | Promise<void>;\n * ```\n *\n * ```ts\n * onAfterRequest: (options: {\n * threadId?: string;\n * runId?: string;\n * inputMessages: Message[];\n * outputMessages: Message[];\n * properties: any;\n * }) => void | Promise<void>;\n * ```\n */\n middleware?: Middleware;\n\n /*\n * A list of server side actions that can be executed.\n */\n actions?: ActionsConfiguration<T>;\n\n /*\n * An array of LangServer URLs.\n */\n langserve?: RemoteChainParameters[];\n}\n\nexport class CopilotRuntime<const T extends Parameter[] | [] = []> {\n public actions: ActionsConfiguration<T>;\n private langserve: Promise<Action<any>>[] = [];\n private onBeforeRequest?: OnBeforeRequestHandler;\n private onAfterRequest?: OnAfterRequestHandler;\n\n constructor(params?: CopilotRuntimeConstructorParams<T>) {\n this.actions = params?.actions || [];\n\n for (const chain of params?.langserve || []) {\n const remoteChain = new RemoteChain(chain);\n this.langserve.push(remoteChain.toAction());\n }\n\n this.onBeforeRequest = params?.middleware?.onBeforeRequest;\n this.onAfterRequest = params?.middleware?.onAfterRequest;\n }\n\n async process(request: CopilotRuntimeRequest): Promise<CopilotRuntimeResponse> {\n const {\n serviceAdapter,\n messages,\n actions: clientSideActionsInput,\n threadId,\n runId,\n properties,\n outputMessagesPromise,\n forwardedParameters,\n url,\n } = request;\n const langserveFunctions: Action<any>[] = [];\n\n for (const chainPromise of this.langserve) {\n try {\n const chain = await chainPromise;\n langserveFunctions.push(chain);\n } catch (error) {\n console.error(\"Error loading langserve chain:\", error);\n }\n }\n\n const configuredActions =\n typeof this.actions === \"function\" ? this.actions({ properties, url }) : this.actions;\n\n const actions = [...configuredActions, ...langserveFunctions];\n\n const serverSideActionsInput: ActionInput[] = actions.map((action) => ({\n name: action.name,\n description: action.description,\n jsonSchema: JSON.stringify(actionParametersToJsonSchema(action.parameters)),\n }));\n\n const actionInputs = flattenToolCallsNoDuplicates([\n ...serverSideActionsInput,\n ...clientSideActionsInput,\n ]);\n const inputMessages = convertGqlInputToMessages(messages);\n\n await this.onBeforeRequest?.({\n threadId,\n runId,\n inputMessages,\n properties,\n url,\n });\n\n try {\n const eventSource = new RuntimeEventSource();\n\n const result = await serviceAdapter.process({\n messages: inputMessages,\n actions: actionInputs,\n threadId,\n runId,\n eventSource,\n forwardedParameters,\n });\n\n outputMessagesPromise\n .then((outputMessages) => {\n this.onAfterRequest?.({\n threadId: result.threadId,\n runId: result.runId,\n inputMessages,\n outputMessages,\n properties,\n url,\n });\n })\n .catch((_error) => {});\n\n return {\n threadId: result.threadId,\n runId: result.runId,\n eventSource,\n actions: actions,\n };\n } catch (error) {\n console.error(\"Error getting response:\", error);\n throw error;\n }\n }\n}\n\nexport function flattenToolCallsNoDuplicates(toolsByPriority: ActionInput[]): ActionInput[] {\n let allTools: ActionInput[] = [];\n const allToolNames: string[] = [];\n for (const tool of toolsByPriority) {\n if (!allToolNames.includes(tool.name)) {\n allTools.push(tool);\n allToolNames.push(tool.name);\n }\n }\n return allTools;\n}\n","import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../graphql/types/converted\";\nimport { MessageInput } from \"../graphql/inputs/message.input\";\nimport { plainToInstance } from \"class-transformer\";\n\nexport function convertGqlInputToMessages(inputMessages: MessageInput[]): Message[] {\n const messages: Message[] = [];\n\n for (const message of inputMessages) {\n if (message.textMessage) {\n messages.push(\n plainToInstance(TextMessage, {\n id: message.id,\n createdAt: message.createdAt,\n role: message.textMessage.role,\n content: message.textMessage.content,\n }),\n );\n } else if (message.actionExecutionMessage) {\n messages.push(\n plainToInstance(ActionExecutionMessage, {\n id: message.id,\n createdAt: message.createdAt,\n name: message.actionExecutionMessage.name,\n arguments: JSON.parse(message.actionExecutionMessage.arguments),\n scope: message.actionExecutionMessage.scope,\n }),\n );\n } else if (message.resultMessage) {\n messages.push(\n plainToInstance(ResultMessage, {\n id: message.id,\n createdAt: message.createdAt,\n actionExecutionId: message.resultMessage.actionExecutionId,\n actionName: message.resultMessage.actionName,\n result: message.resultMessage.result,\n }),\n );\n }\n }\n\n return messages;\n}\n"],"mappings":"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","names":["actionParametersToJsonSchema","plainToInstance","convertGqlInputToMessages","inputMessages","messages","message","textMessage","push","plainToInstance","TextMessage","id","createdAt","role","content","actionExecutionMessage","ActionExecutionMessage","name","arguments","JSON","parse","scope","resultMessage","ResultMessage","actionExecutionId","actionName","result","CopilotRuntime","actions","langserve","onBeforeRequest","onAfterRequest","constructor","params","chain","remoteChain","RemoteChain","push","toAction","middleware","process","request","serviceAdapter","messages","clientSideActionsInput","threadId","runId","properties","outputMessagesPromise","forwardedParameters","url","langserveFunctions","chainPromise","error","console","configuredActions","serverSideActionsInput","map","action","name","description","jsonSchema","JSON","stringify","actionParametersToJsonSchema","parameters","actionInputs","flattenToolCallsNoDuplicates","inputMessages","convertGqlInputToMessages","eventSource","RuntimeEventSource","result","then","outputMessages","_a","catch","_error","toolsByPriority","allTools","allToolNames","tool","includes"]}
|