@copilotkit/runtime 0.37.0 → 0.38.0-mme-alpha.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.
Files changed (88) hide show
  1. package/.turbo/turbo-build.log +69 -54
  2. package/CHANGELOG.md +11 -0
  3. package/__snapshots__/schema/schema.graphql +15 -4
  4. package/dist/{chunk-NFCPM5AM.mjs → chunk-6NZ4UMOD.mjs} +4 -4
  5. package/dist/chunk-6NZ4UMOD.mjs.map +1 -0
  6. package/dist/{chunk-2CCVVJDU.mjs → chunk-6OJ47NCG.mjs} +13 -15
  7. package/dist/chunk-6OJ47NCG.mjs.map +1 -0
  8. package/dist/chunk-BYB2LNMK.mjs +152 -0
  9. package/dist/chunk-BYB2LNMK.mjs.map +1 -0
  10. package/dist/{chunk-XPAUPJMW.mjs → chunk-EWS5TMDA.mjs} +411 -206
  11. package/dist/chunk-EWS5TMDA.mjs.map +1 -0
  12. package/dist/{chunk-7IFP53C6.mjs → chunk-FRK6BXXV.mjs} +49 -11
  13. package/dist/chunk-FRK6BXXV.mjs.map +1 -0
  14. package/dist/{chunk-BLTAUVRP.mjs → chunk-OZMCHYYR.mjs} +5 -3
  15. package/dist/{chunk-BLTAUVRP.mjs.map → chunk-OZMCHYYR.mjs.map} +1 -1
  16. package/dist/chunk-RHQLCJGG.mjs +7 -0
  17. package/dist/chunk-RHQLCJGG.mjs.map +1 -0
  18. package/dist/{chunk-5HGYI6EG.mjs → chunk-XI3HBDMA.mjs} +13 -5
  19. package/dist/chunk-XI3HBDMA.mjs.map +1 -0
  20. package/dist/{chunk-4UA4RB4C.mjs → chunk-XXYCNRFT.mjs} +12 -10
  21. package/dist/chunk-XXYCNRFT.mjs.map +1 -0
  22. package/dist/failed-response-status-reasons-0ab19e06.d.ts +49 -0
  23. package/dist/graphql/types/base/index.mjs +2 -1
  24. package/dist/graphql/types/converted/index.mjs +3 -2
  25. package/dist/{index-f0875df3.d.ts → index-d5ba24be.d.ts} +24 -23
  26. package/dist/index.d.ts +7 -4
  27. package/dist/index.js +486 -96
  28. package/dist/index.js.map +1 -1
  29. package/dist/index.mjs +16 -7
  30. package/dist/index.mjs.map +1 -1
  31. package/dist/{langchain-adapter-9ce103f3.d.ts → langchain-adapter-54784d29.d.ts} +1 -1
  32. package/dist/{langserve-fd5066ee.d.ts → langserve-63794237.d.ts} +24 -7
  33. package/dist/lib/cloud/index.d.ts +6 -0
  34. package/dist/lib/cloud/index.js +18 -0
  35. package/dist/lib/cloud/index.js.map +1 -0
  36. package/dist/lib/cloud/index.mjs +1 -0
  37. package/dist/lib/cloud/index.mjs.map +1 -0
  38. package/dist/lib/index.d.ts +6 -4
  39. package/dist/lib/index.js +480 -96
  40. package/dist/lib/index.js.map +1 -1
  41. package/dist/lib/index.mjs +9 -7
  42. package/dist/lib/integrations/index.d.ts +5 -3
  43. package/dist/lib/integrations/index.js +419 -80
  44. package/dist/lib/integrations/index.js.map +1 -1
  45. package/dist/lib/integrations/index.mjs +7 -5
  46. package/dist/lib/integrations/node-http/index.d.ts +4 -2
  47. package/dist/lib/integrations/node-http/index.js +409 -68
  48. package/dist/lib/integrations/node-http/index.js.map +1 -1
  49. package/dist/lib/integrations/node-http/index.mjs +6 -4
  50. package/dist/pages-router-d94f01da.d.ts +21 -0
  51. package/dist/service-adapters/index.d.ts +2 -2
  52. package/dist/service-adapters/index.js +54 -8
  53. package/dist/service-adapters/index.js.map +1 -1
  54. package/dist/service-adapters/index.mjs +5 -4
  55. package/dist/utils/index.d.ts +1 -0
  56. package/dist/utils/index.js +174 -0
  57. package/dist/utils/index.js.map +1 -0
  58. package/dist/utils/index.mjs +12 -0
  59. package/dist/utils/index.mjs.map +1 -0
  60. package/package.json +6 -4
  61. package/src/graphql/inputs/cloud-guardrails.input.ts +2 -5
  62. package/src/graphql/inputs/cloud.input.ts +2 -2
  63. package/src/graphql/resolvers/copilot.resolver.ts +269 -30
  64. package/src/graphql/types/response-status.type.ts +16 -2
  65. package/src/index.ts +1 -0
  66. package/src/lib/cloud/index.ts +4 -0
  67. package/src/lib/copilot-runtime.ts +13 -37
  68. package/src/lib/integrations/nextjs/app-router.ts +9 -17
  69. package/src/lib/integrations/nextjs/pages-router.ts +9 -15
  70. package/src/lib/integrations/node-http/index.ts +6 -14
  71. package/src/lib/integrations/shared.ts +37 -17
  72. package/src/lib/logger.ts +28 -0
  73. package/src/service-adapters/events.ts +20 -2
  74. package/src/service-adapters/google/google-genai-adapter.ts +3 -0
  75. package/src/service-adapters/google/utils.ts +1 -1
  76. package/src/service-adapters/index.ts +1 -1
  77. package/src/service-adapters/langchain/langserve.ts +10 -4
  78. package/src/service-adapters/langchain/utils.ts +58 -9
  79. package/src/utils/failed-response-status-reasons.ts +48 -0
  80. package/src/utils/index.ts +1 -0
  81. package/dist/chunk-2CCVVJDU.mjs.map +0 -1
  82. package/dist/chunk-4UA4RB4C.mjs.map +0 -1
  83. package/dist/chunk-5HGYI6EG.mjs.map +0 -1
  84. package/dist/chunk-7IFP53C6.mjs.map +0 -1
  85. package/dist/chunk-NFCPM5AM.mjs.map +0 -1
  86. package/dist/chunk-XPAUPJMW.mjs.map +0 -1
  87. package/dist/pages-router-b6bc6c60.d.ts +0 -30
  88. package/src/lib/guardrails.ts +0 -3
@@ -1,10 +1,14 @@
1
1
  import { YogaInitialContext } from "graphql-yoga";
2
- import { GuardrailsOptions } from "../guardrails";
3
2
  import { buildSchemaSync } from "type-graphql";
4
3
  import { CopilotResolver } from "../../graphql/resolvers/copilot.resolver";
5
4
  import { useDeferStream } from "@graphql-yoga/plugin-defer-stream";
6
5
  import { CopilotRuntime } from "../copilot-runtime";
7
6
  import { CopilotServiceAdapter } from "../../service-adapters";
7
+ import { CopilotCloudOptions } from "../cloud";
8
+ import { LogLevel, createLogger } from "../../lib/logger";
9
+ import { createYoga } from "graphql-yoga";
10
+
11
+ const logger = createLogger();
8
12
 
9
13
  type AnyPrimitive = string | boolean | number | null;
10
14
  export type CopilotRequestContextProperties = Record<
@@ -12,33 +16,37 @@ export type CopilotRequestContextProperties = Record<
12
16
  AnyPrimitive | Record<string, AnyPrimitive>
13
17
  >;
14
18
 
15
- type CopilotKitContext = {
16
- runtime: CopilotRuntime;
17
- serviceAdapter: CopilotServiceAdapter;
18
- properties: CopilotRequestContextProperties;
19
- };
20
-
21
19
  export type GraphQLContext = YogaInitialContext & {
22
- _copilotkit: CopilotKitContext;
20
+ _copilotkit: CreateCopilotRuntimeServerOptions;
21
+ properties: CopilotRequestContextProperties;
22
+ logger: typeof logger;
23
23
  };
24
24
 
25
25
  export interface CreateCopilotRuntimeServerOptions {
26
26
  runtime: CopilotRuntime;
27
27
  serviceAdapter: CopilotServiceAdapter;
28
- guardrails?: GuardrailsOptions;
28
+ endpoint: string;
29
+ baseUrl?: string;
30
+ cloud?: CopilotCloudOptions;
31
+ properties?: CopilotRequestContextProperties;
32
+ logLevel?: LogLevel;
29
33
  }
30
34
 
31
35
  export async function createContext(
32
36
  initialContext: YogaInitialContext,
33
- copilotKitContext: CopilotKitContext,
37
+ copilotKitContext: CreateCopilotRuntimeServerOptions,
38
+ contextLogger: typeof logger,
39
+ properties: CopilotRequestContextProperties = {},
34
40
  ): Promise<Partial<GraphQLContext>> {
41
+ logger.debug({ copilotKitContext }, "Creating GraphQL context");
35
42
  const ctx: GraphQLContext = {
36
43
  ...initialContext,
37
44
  _copilotkit: {
38
45
  ...copilotKitContext,
39
46
  },
47
+ properties: { ...properties },
48
+ logger: contextLogger,
40
49
  };
41
-
42
50
  return ctx;
43
51
  }
44
52
 
@@ -47,22 +55,34 @@ export function buildSchema(
47
55
  emitSchemaFile?: string;
48
56
  } = {},
49
57
  ) {
58
+ logger.debug("Building GraphQL schema...");
50
59
  const schema = buildSchemaSync({
51
60
  resolvers: [CopilotResolver],
52
61
  emitSchemaFile: options.emitSchemaFile,
53
62
  });
63
+ logger.debug("GraphQL schema built successfully");
54
64
  return schema;
55
65
  }
56
66
 
57
- export function getCommonConfig(options?: CreateCopilotRuntimeServerOptions) {
67
+ export type CommonConfig = {
68
+ logging: typeof logger;
69
+ schema: ReturnType<typeof buildSchema>;
70
+ plugins: Parameters<typeof createYoga>[0]["plugins"];
71
+ context: (ctx: YogaInitialContext) => Promise<Partial<GraphQLContext>>;
72
+ };
73
+
74
+ export function getCommonConfig(options: CreateCopilotRuntimeServerOptions): CommonConfig {
75
+ const logLevel = (process.env.LOG_LEVEL as LogLevel) || (options.logLevel as LogLevel) || "error";
76
+ const logger = createLogger({ level: logLevel, component: "getCommonConfig" });
77
+ logger.debug("Getting common config");
78
+
79
+ const contextLogger = createLogger({ level: logLevel });
80
+
58
81
  return {
82
+ logging: createLogger({ component: "Yoga GraphQL", level: logLevel }),
59
83
  schema: buildSchema(),
60
84
  plugins: [useDeferStream()],
61
85
  context: (ctx: YogaInitialContext): Promise<Partial<GraphQLContext>> =>
62
- createContext(ctx, {
63
- runtime: options.runtime,
64
- serviceAdapter: options.serviceAdapter,
65
- properties: {},
66
- }),
86
+ createContext(ctx, options, contextLogger, options.properties),
67
87
  };
68
88
  }
@@ -0,0 +1,28 @@
1
+ import createPinoLogger from "pino";
2
+ import pretty from "pino-pretty";
3
+
4
+ export type LogLevel = "debug" | "info" | "warn" | "error";
5
+
6
+ export type CopilotRuntimeLogger = ReturnType<typeof createLogger>;
7
+
8
+ export function createLogger(options?: { level?: LogLevel; component?: string }) {
9
+ const { level, component } = options || {};
10
+ const stream = pretty({ colorize: true });
11
+
12
+ const logger = createPinoLogger(
13
+ {
14
+ level: process.env.LOG_LEVEL || level || "error",
15
+ redact: {
16
+ paths: ["pid", "hostname"],
17
+ remove: true,
18
+ },
19
+ },
20
+ stream,
21
+ );
22
+
23
+ if (component) {
24
+ return logger.child({ component });
25
+ } else {
26
+ return logger;
27
+ }
28
+ }
@@ -1,6 +1,7 @@
1
1
  import { Action } from "@copilotkit/shared";
2
- import { of, concat, map, scan, concatMap, ReplaySubject } from "rxjs";
2
+ import { of, concat, map, scan, concatMap, ReplaySubject, Subject, firstValueFrom } from "rxjs";
3
3
  import { streamLangChainResponse } from "./langchain/utils";
4
+ import { GuardrailsResult } from "../graphql/types/guardrails-result.type";
4
5
 
5
6
  export enum RuntimeEventTypes {
6
7
  TextMessageStart = "TextMessageStart",
@@ -109,7 +110,13 @@ export class RuntimeEventSource {
109
110
  this.callback = callback;
110
111
  }
111
112
 
112
- process(serversideActions: Action<any>[]) {
113
+ process({
114
+ serversideActions,
115
+ guardrailsResult$,
116
+ }: {
117
+ serversideActions: Action<any>[];
118
+ guardrailsResult$?: Subject<GuardrailsResult>;
119
+ }) {
113
120
  this.callback(this.eventStream$).catch((error) => {
114
121
  console.error("Error in event source callback", error);
115
122
  });
@@ -156,6 +163,7 @@ export class RuntimeEventSource {
156
163
  const toolCallEventStream$ = new RuntimeEventSubject();
157
164
  executeAction(
158
165
  toolCallEventStream$,
166
+ guardrailsResult$ ? guardrailsResult$ : null,
159
167
  eventWithState.action!,
160
168
  eventWithState.args,
161
169
  eventWithState.actionExecutionId,
@@ -173,10 +181,20 @@ export class RuntimeEventSource {
173
181
 
174
182
  async function executeAction(
175
183
  eventStream$: RuntimeEventSubject,
184
+ guardrailsResult$: Subject<GuardrailsResult> | null,
176
185
  action: Action<any>,
177
186
  actionArguments: string,
178
187
  actionExecutionId: string,
179
188
  ) {
189
+ if (guardrailsResult$) {
190
+ const { status } = await firstValueFrom(guardrailsResult$);
191
+
192
+ if (status === "denied") {
193
+ eventStream$.complete();
194
+ return;
195
+ }
196
+ }
197
+
180
198
  // Prepare arguments for function calling
181
199
  let args: Record<string, any>[] = [];
182
200
  if (actionArguments) {
@@ -104,6 +104,9 @@ export class GoogleGenerativeAIAdapter implements CopilotServiceAdapter {
104
104
  let isTextMessage = false;
105
105
  for await (const chunk of result.stream) {
106
106
  const chunkText = chunk.text();
107
+ if (chunkText === "") {
108
+ continue;
109
+ }
107
110
  if (!isTextMessage) {
108
111
  isTextMessage = true;
109
112
  eventStream$.sendTextMessageStart(nanoid());
@@ -38,7 +38,7 @@ export function convertMessageToGoogleGenAIMessage(message: Message) {
38
38
  };
39
39
  } else if (message instanceof ResultMessage) {
40
40
  return {
41
- role: "model",
41
+ role: "function",
42
42
  parts: [
43
43
  {
44
44
  functionResponse: {
@@ -3,4 +3,4 @@ export { OpenAIAdapter } from "./openai/openai-adapter";
3
3
  export { OpenAIAssistantAdapter } from "./openai/openai-assistant-adapter";
4
4
  export { GoogleGenerativeAIAdapter } from "./google/google-genai-adapter";
5
5
  export { LangChainAdapter } from "./langchain/langchain-adapter";
6
- export { RemoteChain } from "./langchain/langserve";
6
+ export { RemoteChain, type RemoteChainParameters } from "./langchain/langserve";
@@ -1,16 +1,22 @@
1
1
  import { Parameter, Action } from "@copilotkit/shared";
2
2
  import { RemoteRunnable } from "langchain/runnables/remote";
3
3
 
4
- export interface RemoteChain {
4
+ export interface RemoteChainParameters {
5
5
  name: string;
6
6
  description: string;
7
7
  chainUrl: string;
8
8
  parameters?: Parameter[];
9
- parameterType: "single" | "multi";
9
+ parameterType?: "single" | "multi";
10
10
  }
11
11
 
12
- export class RemoteChain implements RemoteChain {
13
- constructor(options: RemoteChain) {
12
+ export class RemoteChain {
13
+ name: string;
14
+ description: string;
15
+ chainUrl: string;
16
+ parameters?: Parameter[];
17
+ parameterType: "single" | "multi";
18
+
19
+ constructor(options: RemoteChainParameters) {
14
20
  this.name = options.name;
15
21
  this.description = options.description;
16
22
  this.chainUrl = options.chainUrl;
@@ -75,7 +75,7 @@ export function convertJsonSchemaToZodSchema(jsonSchema: any, required: boolean)
75
75
  }
76
76
  }
77
77
 
78
- export function convertActionInputToLangChainTool(actionInput: ActionInput): DynamicStructuredTool {
78
+ export function convertActionInputToLangChainTool(actionInput: ActionInput): any {
79
79
  return new DynamicStructuredTool({
80
80
  name: actionInput.name,
81
81
  description: actionInput.description,
@@ -98,6 +98,40 @@ interface StreamLangChainResponseParams {
98
98
  };
99
99
  }
100
100
 
101
+ function getConstructorName(object: any): string {
102
+ if (object && typeof object === "object" && object.constructor && object.constructor.name) {
103
+ return object.constructor.name;
104
+ }
105
+ return "";
106
+ }
107
+
108
+ function isAIMessage(message: any): message is AIMessage {
109
+ return getConstructorName(message) === "AIMessage";
110
+ }
111
+
112
+ function isAIMessageChunk(message: any): message is AIMessageChunk {
113
+ return getConstructorName(message) === "AIMessageChunk";
114
+ }
115
+
116
+ function isBaseMessageChunk(message: any): message is BaseMessageChunk {
117
+ return getConstructorName(message) === "BaseMessageChunk";
118
+ }
119
+
120
+ function maybeSendActionExecutionResultIsMessage(
121
+ eventStream$: RuntimeEventSubject,
122
+ actionExecution?: { id: string; name: string },
123
+ ) {
124
+ // language models need a result after the function call
125
+ // we simply let them know that we are sending a message
126
+ if (actionExecution) {
127
+ eventStream$.sendActionExecutionResult(
128
+ actionExecution.id,
129
+ actionExecution.name,
130
+ "Sending a message",
131
+ );
132
+ }
133
+ }
134
+
101
135
  export async function streamLangChainResponse({
102
136
  result,
103
137
  eventStream$,
@@ -119,8 +153,9 @@ export async function streamLangChainResponse({
119
153
 
120
154
  // 2. AIMessage
121
155
  // Send the content and function call of the AIMessage as the content of the chunk.
122
- // else if ("content" in result && typeof result.content === "string") {
123
- else if (result instanceof AIMessage) {
156
+ else if (isAIMessage(result)) {
157
+ maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);
158
+
124
159
  if (result.content) {
125
160
  eventStream$.sendTextMessage(nanoid(), result.content as string);
126
161
  }
@@ -135,7 +170,9 @@ export async function streamLangChainResponse({
135
170
 
136
171
  // 3. BaseMessageChunk
137
172
  // Send the content and function call of the AIMessage as the content of the chunk.
138
- else if (result instanceof BaseMessageChunk) {
173
+ else if (isBaseMessageChunk(result)) {
174
+ maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);
175
+
139
176
  if (result.lc_kwargs?.content) {
140
177
  eventStream$.sendTextMessage(nanoid(), result.content as string);
141
178
  }
@@ -152,7 +189,9 @@ export async function streamLangChainResponse({
152
189
 
153
190
  // 4. IterableReadableStream
154
191
  // Stream the result of the LangChain function.
155
- else if ("getReader" in result) {
192
+ else if (result && "getReader" in result) {
193
+ maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);
194
+
156
195
  let reader = result.getReader();
157
196
 
158
197
  let mode: "function" | "message" | null = null;
@@ -165,15 +204,15 @@ export async function streamLangChainResponse({
165
204
  let toolCallId: string | undefined = undefined;
166
205
  let toolCallArgs: string | undefined = undefined;
167
206
  let hasToolCall: boolean = false;
168
- let content = value.content as string;
207
+ let content = value?.content as string;
169
208
 
170
- if (value instanceof AIMessageChunk) {
209
+ if (isAIMessageChunk(value)) {
171
210
  let chunk = value.tool_call_chunks?.[0];
172
211
  toolCallName = chunk?.name;
173
212
  toolCallId = chunk?.id;
174
213
  toolCallArgs = chunk?.args;
175
214
  hasToolCall = chunk != undefined;
176
- } else if (value instanceof BaseMessageChunk) {
215
+ } else if (isBaseMessageChunk(value)) {
177
216
  let chunk = value.additional_kwargs?.tool_calls?.[0];
178
217
  toolCallName = chunk?.function?.name;
179
218
  toolCallId = chunk?.id;
@@ -222,7 +261,7 @@ export async function streamLangChainResponse({
222
261
  eventStream$.sendActionExecutionResult(
223
262
  actionExecution.id,
224
263
  actionExecution.name,
225
- JSON.stringify(result),
264
+ encodeResult(result),
226
265
  );
227
266
  }
228
267
 
@@ -233,3 +272,13 @@ export async function streamLangChainResponse({
233
272
 
234
273
  eventStream$.complete();
235
274
  }
275
+
276
+ function encodeResult(result: any): string {
277
+ if (result === undefined) {
278
+ return "";
279
+ } else if (typeof result === "string") {
280
+ return result;
281
+ } else {
282
+ return JSON.stringify(result);
283
+ }
284
+ }
@@ -0,0 +1,48 @@
1
+ import {
2
+ FailedResponseStatus,
3
+ FailedResponseStatusReason,
4
+ } from "../graphql/types/response-status.type";
5
+
6
+ export class GuardrailsValidationFailureResponse extends FailedResponseStatus {
7
+ reason = FailedResponseStatusReason.GUARDRAILS_VALIDATION_FAILED;
8
+ declare details: {
9
+ guardrailsReason: string;
10
+ };
11
+
12
+ constructor({ guardrailsReason }) {
13
+ super();
14
+ this.details = {
15
+ guardrailsReason,
16
+ };
17
+ }
18
+ }
19
+
20
+ export class MessageStreamInterruptedResponse extends FailedResponseStatus {
21
+ reason = FailedResponseStatusReason.MESSAGE_STREAM_INTERRUPTED;
22
+ declare details: {
23
+ messageId: string;
24
+ description: string;
25
+ };
26
+
27
+ constructor({ messageId }: { messageId: string }) {
28
+ super();
29
+ this.details = {
30
+ messageId,
31
+ description: "Check the message for mode details",
32
+ };
33
+ }
34
+ }
35
+
36
+ export class UnknownErrorResponse extends FailedResponseStatus {
37
+ reason = FailedResponseStatusReason.UNKNOWN_ERROR;
38
+ declare details: {
39
+ description?: string;
40
+ };
41
+
42
+ constructor({ description }: { description?: string }) {
43
+ super();
44
+ this.details = {
45
+ description,
46
+ };
47
+ }
48
+ }
@@ -0,0 +1 @@
1
+ export * from "./failed-response-status-reasons";
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/integrations/nextjs/app-router.ts","../src/lib/integrations/nextjs/pages-router.ts"],"sourcesContent":["import { createYoga } from \"graphql-yoga\";\nimport { getCommonConfig } from \"../shared\";\nimport { CopilotRuntime } from \"../../copilot-runtime\";\nimport { CopilotServiceAdapter } from \"../../../service-adapters\";\n\nexport function copilotRuntimeNextJSAppRouterEndpoint({\n runtime,\n endpoint,\n serviceAdapter,\n}: {\n runtime: CopilotRuntime;\n serviceAdapter: CopilotServiceAdapter;\n endpoint: string;\n}) {\n const commonConfig = getCommonConfig({ runtime, serviceAdapter });\n\n const yoga = createYoga({\n ...commonConfig,\n graphqlEndpoint: endpoint,\n fetchAPI: { Response: globalThis.Response },\n });\n\n return {\n handleRequest: yoga,\n GET: yoga,\n POST: yoga,\n OPTIONS: yoga,\n };\n}\n","import { YogaServerInstance, createYoga } from \"graphql-yoga\";\nimport { GraphQLContext, getCommonConfig } from \"../shared\";\nimport { CopilotRuntime } from \"../../copilot-runtime\";\nimport { CopilotServiceAdapter } from \"../../../service-adapters\";\n\nexport const config = {\n api: {\n bodyParser: false,\n },\n};\n\nexport type CopilotRuntimeServerInstance<T> = YogaServerInstance<T, Partial<GraphQLContext>>;\n\n// Theis import is needed to fix the type error\n// Fix is currently in TypeScript 5.5 beta, waiting for stable version\n// https://github.com/microsoft/TypeScript/issues/42873#issuecomment-2066874644\nexport type {} from \"@whatwg-node/server\";\n\nexport function copilotRuntimeNextJSPagesRouterEndpoint({\n runtime,\n endpoint,\n serviceAdapter,\n}: {\n runtime: CopilotRuntime;\n serviceAdapter: CopilotServiceAdapter;\n endpoint: string;\n}): CopilotRuntimeServerInstance<GraphQLContext> {\n const commonConfig = getCommonConfig({ runtime, serviceAdapter });\n\n const yoga = createYoga({\n ...commonConfig,\n graphqlEndpoint: endpoint,\n });\n\n return yoga;\n}\n"],"mappings":";;;;;;;;AAAA,SAASA,kBAAkB;AAKpB,SAASC,sCAAsC,EACpDC,SACAC,UACAC,eAAc,GAKf;AACC,QAAMC,eAAeC,gBAAgB;IAAEJ;IAASE;EAAe,CAAA;AAE/D,QAAMG,OAAOC,WAAW;IACtB,GAAGH;IACHI,iBAAiBN;IACjBO,UAAU;MAAEC,UAAUC,WAAWD;IAAS;EAC5C,CAAA;AAEA,SAAO;IACLE,eAAeN;IACfO,KAAKP;IACLQ,MAAMR;IACNS,SAAST;EACX;AACF;AAvBgBN;;;ACLhB,SAA6BgB,cAAAA,mBAAkB;AAKxC,IAAMC,SAAS;EACpBC,KAAK;IACHC,YAAY;EACd;AACF;AASO,SAASC,wCAAwC,EACtDC,SACAC,UACAC,eAAc,GAKf;AACC,QAAMC,eAAeC,gBAAgB;IAAEJ;IAASE;EAAe,CAAA;AAE/D,QAAMG,OAAOC,YAAW;IACtB,GAAGH;IACHI,iBAAiBN;EACnB,CAAA;AAEA,SAAOI;AACT;AAjBgBN;","names":["createYoga","copilotRuntimeNextJSAppRouterEndpoint","runtime","endpoint","serviceAdapter","commonConfig","getCommonConfig","yoga","createYoga","graphqlEndpoint","fetchAPI","Response","globalThis","handleRequest","GET","POST","OPTIONS","createYoga","config","api","bodyParser","copilotRuntimeNextJSPagesRouterEndpoint","runtime","endpoint","serviceAdapter","commonConfig","getCommonConfig","yoga","createYoga","graphqlEndpoint"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/copilot-runtime.ts","../src/lib/copilot-cloud.ts","../src/service-adapters/conversion.ts"],"sourcesContent":["/**\n * Handles requests from frontend, provides function calling and various LLM backends.\n *\n * <img\n * referrerPolicy=\"no-referrer-when-downgrade\"\n * src=\"https://static.scarf.sh/a.png?x-pxid=a9b290bb-38f9-4518-ac3b-8f54fdbf43be\"\n * />\n *\n * <RequestExample>\n * ```jsx CopilotRuntime Example\n * import {\n * CopilotRuntime,\n * OpenAIAdapter\n * } from \"@copilotkit/runtime\";\n *\n * export async function POST(req: Request) {\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(req, new OpenAIAdapter());\n * }\n *\n * ```\n * </RequestExample>\n *\n * This class is the main entry point for the runtime. It handles requests from the frontend, provides function calling and various LLM backends.\n *\n * For example, to use OpenAI as a backend (check the [OpenAI Adapter](./OpenAIAdapter) docs for more info):\n * ```typescript\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(req, new OpenAIAdapter());\n * ```\n *\n * Currently we support:\n *\n * - [OpenAI](./OpenAIAdapter)\n * - [LangChain](./LangChainAdapter)\n * - [OpenAI Assistant API](./OpenAIAssistantAdapter)\n * - [Google Gemini](./GoogleGenerativeAIAdapter)\n *\n * ## Server Side Actions\n *\n * CopilotKit supports actions that can be executed on the server side. You can define server side actions by passing the `actions` parameter:\n *\n * ```typescript\n * const copilotKit = new CopilotRuntime({\n * actions: [\n * {\n * name: \"sayHello\",\n * description: \"Says hello to someone.\",\n * argumentAnnotations: [\n * {\n * name: \"arg\",\n * type: \"string\",\n * description: \"The name of the person to say hello to.\",\n * required: true,\n * },\n * ],\n * implementation: async (arg) => {\n * console.log(\"Hello from the server\", arg, \"!\");\n * },\n * },\n * ],\n * });\n * ```\n *\n * Server side actions can also return a result which becomes part of the message history.\n *\n * This is useful because it gives the LLM context about what happened on the server side. In addition,\n * it can be used to look up information from a vector or relational database and other sources.\n *\n * In addition to that, server side actions can also come from LangChain, including support for streaming responses.\n *\n * Returned results can be of the following type:\n *\n * - anything serializable to JSON\n * - `string`\n * - LangChain types:\n * - `IterableReadableStream`\n * - `BaseMessageChunk`\n * - `AIMessage`\n *\n * ## LangServe\n *\n * The backend also supports LangServe, enabling you to connect to existing chains, for example python based chains.\n * Use the `langserve` parameter to specify URLs for LangServe.\n *\n * ```typescript\n * const copilotKit = new CopilotRuntime({\n * langserve: [\n * {\n * chainUrl: \"http://my-langserve.chain\",\n * name: \"performResearch\",\n * description: \"Performs research on a given topic.\",\n * },\n * ],\n * });\n * ```\n *\n * When left out, arguments are automatically inferred from the schema provided by LangServe.\n */\n\nimport { Action, actionParametersToJsonSchema, Parameter } from \"@copilotkit/shared\";\nimport { RemoteChain, CopilotServiceAdapter } from \"../service-adapters\";\nimport { CopilotCloud, RemoteCopilotCloud } from \"./copilot-cloud\";\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\";\n\ninterface CopilotRuntimeRequest {\n serviceAdapter: CopilotServiceAdapter;\n messages: MessageInput[];\n actions: ActionInput[];\n threadId?: string;\n runId?: string;\n publicApiKey?: string;\n}\n\ninterface CopilotRuntimeResponse {\n threadId?: string;\n runId?: string;\n eventSource: RuntimeEventSource;\n}\n\nexport interface CopilotRuntimeConstructorParams<T extends Parameter[] | [] = []> {\n /*\n * A list of server side actions that can be executed.\n */\n actions?: Action<T>[];\n\n /*\n * An array of LangServer URLs.\n */\n langserve?: RemoteChain[];\n\n debug?: boolean;\n copilotCloud?: CopilotCloud;\n}\n\nexport class CopilotRuntime<const T extends Parameter[] | [] = []> {\n public actions: Action<any>[] = [];\n private langserve: Promise<Action<any>>[] = [];\n private debug: boolean = false;\n private copilotCloud: CopilotCloud;\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 this.debug = params?.debug || false;\n this.copilotCloud = params?.copilotCloud || new RemoteCopilotCloud();\n }\n\n addAction<const T extends Parameter[] | [] = []>(action: Action<T>): void {\n this.removeAction(action.name);\n this.actions.push(action);\n }\n\n removeAction(actionName: string): void {\n this.actions = this.actions.filter((f) => f.name !== actionName);\n }\n\n async process({\n serviceAdapter,\n messages,\n actions: clientSideActionsInput,\n threadId,\n runId,\n publicApiKey,\n }: CopilotRuntimeRequest): Promise<CopilotRuntimeResponse> {\n // TODO-PROTOCOL: cloud configuration\n // const cloud: CopilotCloudConfig = forwardedProps.cloud;\n\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 serverSideActionsInput: ActionInput[] = [...this.actions, ...langserveFunctions].map(\n (action) => ({\n name: action.name,\n description: action.description,\n jsonSchema: JSON.stringify(actionParametersToJsonSchema(action.parameters)),\n }),\n );\n\n const actions = flattenToolCallsNoDuplicates([\n ...serverSideActionsInput,\n ...clientSideActionsInput,\n ]);\n\n try {\n const eventSource = new RuntimeEventSource();\n // TODO-PROTOCOL: type this and support function calls\n const result = await serviceAdapter.process({\n messages: convertGqlInputToMessages(messages),\n actions,\n threadId,\n runId,\n eventSource,\n });\n\n // TODO-PROTOCOL add guardrails\n //\n // if (publicApiKey !== undefined) {\n // // wait for the cloud log chat to finish before streaming back the response\n // try {\n // const checkGuardrailsInputResult = await this.copilotCloud.checkGuardrailsInput({\n // cloud,\n // publicApiKey,\n // messages: forwardedProps.messages || [],\n // });\n\n // if (checkGuardrailsInputResult.status === \"denied\") {\n // // the chat was denied. instead of streaming back the response,\n // // we let the client know...\n // return {\n // stream: new SingleChunkReadableStream(checkGuardrailsInputResult.reason),\n // // headers: result.headers,\n // };\n // }\n // } catch (error) {\n // console.error(\"Error checking guardrails:\", error);\n // }\n // }\n return {\n threadId: result.threadId,\n runId: result.runId,\n eventSource,\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\n/**\n * @deprecated use CopilotRuntime instead\n */\nexport class CopilotBackend extends CopilotRuntime {}\n","import {\n COPILOT_CLOUD_API_URL,\n COPILOT_CLOUD_VERSION,\n COPILOT_CLOUD_PUBLIC_API_KEY_HEADER,\n CopilotCloudConfig,\n} from \"@copilotkit/shared\";\n\nexport interface CloudCheckGuardrailsInputParams {\n cloud: CopilotCloudConfig;\n publicApiKey: string;\n // TODO-PROTOCOL: switch to graphql\n messages: any[];\n}\n\nexport interface CloudCheckGuardrailsInputResponse {\n status: \"allowed\" | \"denied\";\n reason: string;\n}\n\nexport abstract class CopilotCloud {\n abstract checkGuardrailsInput(\n params: CloudCheckGuardrailsInputParams,\n ): Promise<CloudCheckGuardrailsInputResponse>;\n}\n\nexport class RemoteCopilotCloud extends CopilotCloud {\n constructor(private readonly cloudApiUrl: string = COPILOT_CLOUD_API_URL) {\n super();\n }\n\n async checkGuardrailsInput({\n cloud,\n publicApiKey,\n messages,\n }: CloudCheckGuardrailsInputParams): Promise<CloudCheckGuardrailsInputResponse> {\n const url = `${this.cloudApiUrl}/${COPILOT_CLOUD_VERSION}/copilotkit/guardrails/input`;\n\n const response = await fetch(url, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n [COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey,\n },\n body: JSON.stringify({ messages, cloud }),\n });\n\n if (!response.ok) {\n let message = response.statusText;\n\n // try to parse the response body for a more detailed error message\n try {\n const json = await response.json();\n if (json.message) {\n message = json.message;\n }\n } catch (error) {}\n\n throw new Error(\"Failed to check input guardrails: \" + message);\n }\n const json = await response.json();\n return { status: json.status, reason: json.reason };\n }\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":";;;;;;;;;;;;;;;;AAoGA,SAAiBA,oCAA+C;;;ACpGhE,SACEC,uBACAC,uBACAC,2CAEK;AAcA,IAAeC,eAAf,MAAeA;AAItB;AAJsBA;AAMf,IAAMC,qBAAN,cAAiCD,aAAAA;;EACtCE,YAA6BC,cAAsBC,uBAAuB;AACxE,UAAK;SADsBD,cAAAA;EAE7B;EAEA,MAAME,qBAAqB,EACzBC,OACAC,cACAC,SAAQ,GACsE;AAC9E,UAAMC,MAAM,GAAG,KAAKN,eAAeO;AAEnC,UAAMC,WAAW,MAAMC,MAAMH,KAAK;MAChCI,QAAQ;MACRC,SAAS;QACP,gBAAgB;QAChB,CAACC,mCAAAA,GAAsCR;MACzC;MACAS,MAAMC,KAAKC,UAAU;QAAEV;QAAUF;MAAM,CAAA;IACzC,CAAA;AAEA,QAAI,CAACK,SAASQ,IAAI;AAChB,UAAIC,UAAUT,SAASU;AAGvB,UAAI;AACF,cAAMC,QAAO,MAAMX,SAASW,KAAI;AAChC,YAAIA,MAAKF,SAAS;AAChBA,oBAAUE,MAAKF;QACjB;MACF,SAASG,OAAP;MAAe;AAEjB,YAAM,IAAIC,MAAM,uCAAuCJ,OAAAA;IACzD;AACA,UAAME,OAAO,MAAMX,SAASW,KAAI;AAChC,WAAO;MAAEG,QAAQH,KAAKG;MAAQC,QAAQJ,KAAKI;IAAO;EACpD;AACF;AArCazB;;;AClBb,SAAS0B,uBAAuB;AAEzB,SAASC,0BAA0BC,eAA6B;AACrE,QAAMC,WAAsB,CAAA;AAE5B,aAAWC,WAAWF,eAAe;AACnC,QAAIE,QAAQC,aAAa;AACvBF,eAASG,KACPC,gBAAgBC,aAAa;QAC3BC,IAAIL,QAAQK;QACZC,WAAWN,QAAQM;QACnBC,MAAMP,QAAQC,YAAYM;QAC1BC,SAASR,QAAQC,YAAYO;MAC/B,CAAA,CAAA;IAEJ,WAAWR,QAAQS,wBAAwB;AACzCV,eAASG,KACPC,gBAAgBO,wBAAwB;QACtCL,IAAIL,QAAQK;QACZC,WAAWN,QAAQM;QACnBK,MAAMX,QAAQS,uBAAuBE;QACrCC,WAAWC,KAAKC,MAAMd,QAAQS,uBAAuBG,SAAS;QAC9DG,OAAOf,QAAQS,uBAAuBM;MACxC,CAAA,CAAA;IAEJ,WAAWf,QAAQgB,eAAe;AAChCjB,eAASG,KACPC,gBAAgBc,eAAe;QAC7BZ,IAAIL,QAAQK;QACZC,WAAWN,QAAQM;QACnBY,mBAAmBlB,QAAQgB,cAAcE;QACzCC,YAAYnB,QAAQgB,cAAcG;QAClCC,QAAQpB,QAAQgB,cAAcI;MAChC,CAAA,CAAA;IAEJ;EACF;AAEA,SAAOrB;AACT;AArCgBF;;;AFiIT,IAAMwB,iBAAN,MAAMA;EACJC,UAAyB,CAAA;EACxBC,YAAoC,CAAA;EACpCC,QAAiB;EACjBC;EAERC,YAAYC,QAA6C;AACvD,SAAKL,WAAUK,iCAAQL,YAAW,CAAA;AAElC,eAAWM,UAASD,iCAAQJ,cAAa,CAAA,GAAI;AAC3C,YAAMM,cAAc,IAAIC,YAAYF,KAAAA;AACpC,WAAKL,UAAUQ,KAAKF,YAAYG,SAAQ,CAAA;IAC1C;AACA,SAAKR,SAAQG,iCAAQH,UAAS;AAC9B,SAAKC,gBAAeE,iCAAQF,iBAAgB,IAAIQ,mBAAAA;EAClD;EAEAC,UAAiDC,QAAyB;AACxE,SAAKC,aAAaD,OAAOE,IAAI;AAC7B,SAAKf,QAAQS,KAAKI,MAAAA;EACpB;EAEAC,aAAaE,YAA0B;AACrC,SAAKhB,UAAU,KAAKA,QAAQiB,OAAO,CAACC,MAAMA,EAAEH,SAASC,UAAAA;EACvD;EAEA,MAAMG,QAAQ,EACZC,gBACAC,UACArB,SAASsB,wBACTC,UACAC,OACAC,aAAY,GAC6C;AAIzD,UAAMC,qBAAoC,CAAA;AAE1C,eAAWC,gBAAgB,KAAK1B,WAAW;AACzC,UAAI;AACF,cAAMK,QAAQ,MAAMqB;AACpBD,2BAAmBjB,KAAKH,KAAAA;MAC1B,SAASsB,OAAP;AACAC,gBAAQD,MAAM,kCAAkCA,KAAAA;MAClD;IACF;AAEA,UAAME,yBAAwC;SAAI,KAAK9B;SAAY0B;MAAoBK,IACrF,CAAClB,YAAY;MACXE,MAAMF,OAAOE;MACbiB,aAAanB,OAAOmB;MACpBC,YAAYC,KAAKC,UAAUC,6BAA6BvB,OAAOwB,UAAU,CAAA;IAC3E,EAAA;AAGF,UAAMrC,UAAUsC,6BAA6B;SACxCR;SACAR;KACJ;AAED,QAAI;AACF,YAAMiB,cAAc,IAAIC,mBAAAA;AAExB,YAAMC,SAAS,MAAMrB,eAAeD,QAAQ;QAC1CE,UAAUqB,0BAA0BrB,QAAAA;QACpCrB;QACAuB;QACAC;QACAe;MACF,CAAA;AAyBA,aAAO;QACLhB,UAAUkB,OAAOlB;QACjBC,OAAOiB,OAAOjB;QACde;MACF;IACF,SAASX,OAAP;AACAC,cAAQD,MAAM,2BAA2BA,KAAAA;AACzC,YAAMA;IACR;EACF;AACF;AAzGa7B;AA2GN,SAASuC,6BAA6BK,iBAA8B;AACzE,MAAIC,WAA0B,CAAA;AAC9B,QAAMC,eAAyB,CAAA;AAC/B,aAAWC,QAAQH,iBAAiB;AAClC,QAAI,CAACE,aAAaE,SAASD,KAAK/B,IAAI,GAAG;AACrC6B,eAASnC,KAAKqC,IAAAA;AACdD,mBAAapC,KAAKqC,KAAK/B,IAAI;IAC7B;EACF;AACA,SAAO6B;AACT;AAVgBN;AAeT,IAAMU,iBAAN,cAA6BjD,eAAAA;AAAgB;AAAvCiD;","names":["actionParametersToJsonSchema","COPILOT_CLOUD_API_URL","COPILOT_CLOUD_VERSION","COPILOT_CLOUD_PUBLIC_API_KEY_HEADER","CopilotCloud","RemoteCopilotCloud","constructor","cloudApiUrl","COPILOT_CLOUD_API_URL","checkGuardrailsInput","cloud","publicApiKey","messages","url","COPILOT_CLOUD_VERSION","response","fetch","method","headers","COPILOT_CLOUD_PUBLIC_API_KEY_HEADER","body","JSON","stringify","ok","message","statusText","json","error","Error","status","reason","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","debug","copilotCloud","constructor","params","chain","remoteChain","RemoteChain","push","toAction","RemoteCopilotCloud","addAction","action","removeAction","name","actionName","filter","f","process","serviceAdapter","messages","clientSideActionsInput","threadId","runId","publicApiKey","langserveFunctions","chainPromise","error","console","serverSideActionsInput","map","description","jsonSchema","JSON","stringify","actionParametersToJsonSchema","parameters","flattenToolCallsNoDuplicates","eventSource","RuntimeEventSource","result","convertGqlInputToMessages","toolsByPriority","allTools","allToolNames","tool","includes","CopilotBackend"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/service-adapters/openai/openai-adapter.ts","../src/service-adapters/openai/utils.ts","../src/service-adapters/openai/openai-assistant-adapter.ts","../src/service-adapters/google/google-genai-adapter.ts","../src/service-adapters/google/utils.ts","../src/service-adapters/langchain/langchain-adapter.ts","../src/service-adapters/langchain/langserve.ts"],"sourcesContent":["/**\n * CopilotRuntime Adapter for OpenAI.\n *\n * <RequestExample>\n * ```jsx CopilotRuntime Example\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(req, new OpenAIAdapter());\n * ```\n * </RequestExample>\n *\n * You can easily set the model to use by passing it to the constructor.\n * ```jsx\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(\n * req,\n * new OpenAIAdapter({ model: \"gpt-4o\" }),\n * );\n * ```\n *\n * To use your custom OpenAI instance, pass the `openai` property.\n * ```jsx\n * const openai = new OpenAI({\n * organization: \"your-organization-id\",\n * apiKey: \"your-api-key\"\n * });\n *\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(\n * req,\n * new OpenAIAdapter({ openai }),\n * );\n * ```\n *\n */\nimport OpenAI from \"openai\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n} from \"./utils\";\n\nconst DEFAULT_MODEL = \"gpt-4o\";\n\nexport interface OpenAIAdapterParams {\n /**\n * An optional OpenAI instance to use.\n */\n openai?: OpenAI;\n\n /**\n * The model to use.\n */\n model?: string;\n}\n\nexport class OpenAIAdapter implements CopilotServiceAdapter {\n private model: string = DEFAULT_MODEL;\n\n private _openai: OpenAI;\n public get openai(): OpenAI {\n return this._openai;\n }\n\n constructor(params?: OpenAIAdapterParams) {\n this._openai = params?.openai || new OpenAI({});\n if (params?.model) {\n this.model = params.model;\n }\n }\n\n async process({\n model = this.model,\n messages,\n actions,\n eventSource,\n }: CopilotRuntimeChatCompletionRequest): Promise<CopilotRuntimeChatCompletionResponse> {\n const tools = actions.map(convertActionInputToOpenAITool);\n\n let openaiMessages = messages.map(convertMessageToOpenAIMessage);\n openaiMessages = limitMessagesToTokenCount(openaiMessages, tools, model);\n\n const stream = this.openai.beta.chat.completions.stream({\n model: model,\n stream: true,\n messages: openaiMessages,\n ...(tools.length > 0 && { tools }),\n });\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n for await (const chunk of stream) {\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd();\n } else if (mode === \"function\" && (toolCall === undefined || toolCall?.id)) {\n mode = null;\n eventStream$.sendActionExecutionEnd();\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n eventStream$.sendActionExecutionStart(toolCall!.id, toolCall!.function!.name);\n } else if (content) {\n mode = \"message\";\n eventStream$.sendTextMessageStart(chunk.id);\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent(content);\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs(toolCall.function.arguments);\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd();\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd();\n }\n\n eventStream$.complete();\n });\n\n return {};\n }\n}\n","import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport { Tiktoken, TiktokenModel, encodingForModel } from \"js-tiktoken\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { ChatCompletionMessageParam, ChatCompletionTool } from \"openai/resources\";\n\nexport function limitMessagesToTokenCount(\n messages: any[],\n tools: any[],\n model: string,\n maxTokens?: number,\n): any[] {\n maxTokens ||= maxTokensForOpenAIModel(model);\n\n const result: any[] = [];\n const toolsNumTokens = countToolsTokens(model, tools);\n if (toolsNumTokens > maxTokens) {\n throw new Error(`Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`);\n }\n maxTokens -= toolsNumTokens;\n\n for (const message of messages) {\n if (message.role === \"system\") {\n const numTokens = countMessageTokens(model, message);\n maxTokens -= numTokens;\n\n if (maxTokens < 0) {\n throw new Error(\"Not enough tokens for system message.\");\n }\n }\n }\n\n let cutoff: boolean = false;\n\n const reversedMessages = [...messages].reverse();\n for (const message of reversedMessages) {\n if (message.role === \"system\") {\n result.unshift(message);\n continue;\n } else if (cutoff) {\n continue;\n }\n let numTokens = countMessageTokens(model, message);\n if (maxTokens < numTokens) {\n cutoff = true;\n continue;\n }\n result.unshift(message);\n maxTokens -= numTokens;\n }\n\n return result;\n}\n\nexport function maxTokensForOpenAIModel(model: string): number {\n return maxTokensByModel[model] || DEFAULT_MAX_TOKENS;\n}\n\nconst DEFAULT_MAX_TOKENS = 128000;\n\nconst maxTokensByModel: { [key: string]: number } = {\n // GPT-4\n \"gpt-4o\": 128000,\n \"gpt-4o-2024-05-13\": 128000,\n \"gpt-4-turbo\": 128000,\n \"gpt-4-turbo-2024-04-09\": 128000,\n \"gpt-4-0125-preview\": 128000,\n \"gpt-4-turbo-preview\": 128000,\n \"gpt-4-1106-preview\": 128000,\n \"gpt-4-vision-preview\": 128000,\n \"gpt-4-1106-vision-preview\": 128000,\n \"gpt-4-32k\": 32768,\n \"gpt-4-32k-0613\": 32768,\n \"gpt-4-32k-0314\": 32768,\n \"gpt-4\": 8192,\n \"gpt-4-0613\": 8192,\n \"gpt-4-0314\": 8192,\n\n // GPT-3.5\n \"gpt-3.5-turbo-0125\": 16385,\n \"gpt-3.5-turbo\": 16385,\n \"gpt-3.5-turbo-1106\": 16385,\n \"gpt-3.5-turbo-instruct\": 4096,\n \"gpt-3.5-turbo-16k\": 16385,\n \"gpt-3.5-turbo-0613\": 4096,\n \"gpt-3.5-turbo-16k-0613\": 16385,\n \"gpt-3.5-turbo-0301\": 4097,\n};\n\nfunction countToolsTokens(model: string, tools: any[]): number {\n if (tools.length === 0) {\n return 0;\n }\n const json = JSON.stringify(tools);\n return countTokens(model, json);\n}\n\nfunction countMessageTokens(model: string, message: any): number {\n return countTokens(model, message.content || \"\");\n}\n\nfunction countTokens(model: string, text: string): number {\n let enc: Tiktoken;\n try {\n enc = encodingForModel(model as TiktokenModel);\n } catch (e) {\n enc = encodingForModel(\"gpt-4\");\n }\n return enc.encode(text).length;\n}\n\nexport function convertActionInputToOpenAITool(action: ActionInput): ChatCompletionTool {\n return {\n type: \"function\",\n function: {\n name: action.name,\n description: action.description,\n parameters: JSON.parse(action.jsonSchema),\n },\n };\n}\n\nexport function convertMessageToOpenAIMessage(message: Message): ChatCompletionMessageParam {\n if (message instanceof TextMessage) {\n return {\n role: message.role,\n content: message.content,\n };\n } else if (message instanceof ActionExecutionMessage) {\n return {\n role: \"assistant\",\n tool_calls: [\n {\n id: message.id,\n type: \"function\",\n function: {\n name: message.name,\n arguments: JSON.stringify(message.arguments),\n },\n },\n ],\n };\n } else if (message instanceof ResultMessage) {\n return {\n role: \"tool\",\n content: message.result,\n tool_call_id: message.actionExecutionId,\n };\n }\n}\n\nexport function convertSystemMessageToAssistantAPI(message: ChatCompletionMessageParam) {\n return {\n ...message,\n ...(message.role === \"system\" && {\n role: \"assistant\",\n content: \"THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: \" + message.content,\n }),\n };\n}\n","/**\n * CopilotKit Adapter for the OpenAI Assistant API.\n *\n * Use this adapter to get responses from the OpenAI Assistant API.\n *\n * <RequestExample>\n * ```typescript\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(\n * req,\n * new OpenAIAssistantAdapter({\n * assistantId: \"your-assistant-id\"\n * })\n * );\n * ```\n * </RequestExample>\n */\nimport OpenAI from \"openai\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport { Message, ResultMessage, TextMessage } from \"../../graphql/types/converted\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n convertSystemMessageToAssistantAPI,\n} from \"./utils\";\nimport { RunSubmitToolOutputsStreamParams } from \"openai/resources/beta/threads/runs/runs\";\nimport { AssistantStream } from \"openai/lib/AssistantStream\";\nimport { RuntimeEventSource } from \"../events\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { AssistantStreamEvent, AssistantTool } from \"openai/resources/beta/assistants\";\n\nexport interface OpenAIAssistantAdapterParams {\n /**\n * The ID of the assistant to use.\n */\n assistantId: string;\n\n /**\n * An instance of `OpenAI` to use for the request. If not provided, a new instance will be created.\n */\n openai?: OpenAI;\n\n /**\n * Whether to enable the code interpreter. Defaults to `true`.\n */\n codeInterpreterEnabled?: boolean;\n\n /**\n * Whether to enable retrieval. Defaults to `true`.\n */\n fileSearchEnabled?: boolean;\n}\n\nexport class OpenAIAssistantAdapter implements CopilotServiceAdapter {\n private openai: OpenAI;\n private codeInterpreterEnabled: boolean;\n private assistantId: string;\n private fileSearchEnabled: boolean;\n\n constructor(params: OpenAIAssistantAdapterParams) {\n this.openai = params.openai || new OpenAI({});\n this.codeInterpreterEnabled = params.codeInterpreterEnabled === false || true;\n this.fileSearchEnabled = params.fileSearchEnabled === false || true;\n this.assistantId = params.assistantId;\n }\n\n async process({\n messages,\n actions,\n eventSource,\n threadId,\n runId,\n }: CopilotRuntimeChatCompletionRequest): Promise<CopilotRuntimeChatCompletionResponse> {\n // if we don't have a threadId, create a new thread\n threadId ||= (await this.openai.beta.threads.create()).id;\n const lastMessage = messages.at(-1);\n\n let nextRunId: string | undefined = undefined;\n\n // submit function outputs\n if (lastMessage instanceof ResultMessage && runId) {\n nextRunId = await this.submitToolOutputs(threadId, runId, messages, eventSource);\n }\n // submit user message\n else if (lastMessage instanceof TextMessage) {\n nextRunId = await this.submitUserMessage(threadId, messages, actions, eventSource);\n }\n // unsupported message\n else {\n throw new Error(\"No actionable message found in the messages\");\n }\n\n return {\n threadId,\n runId: nextRunId,\n };\n }\n\n private async submitToolOutputs(\n threadId: string,\n runId: string,\n messages: Message[],\n eventSource: RuntimeEventSource,\n ) {\n let run = await this.openai.beta.threads.runs.retrieve(threadId, runId);\n if (!run.required_action) {\n throw new Error(\"No tool outputs required\");\n }\n\n // get the required tool call ids\n const toolCallsIds = run.required_action.submit_tool_outputs.tool_calls.map(\n (toolCall) => toolCall.id,\n );\n\n // search for these tool calls\n const resultMessages = messages.filter(\n (message) =>\n message instanceof ResultMessage && toolCallsIds.includes(message.actionExecutionId),\n ) as ResultMessage[];\n\n if (toolCallsIds.length != resultMessages.length) {\n throw new Error(\"Number of function results does not match the number of tool calls\");\n }\n\n // submit the tool outputs\n const toolOutputs: RunSubmitToolOutputsStreamParams.ToolOutput[] = resultMessages.map(\n (message) => {\n return {\n tool_call_id: message.actionExecutionId,\n output: message.result,\n };\n },\n );\n\n const stream = this.openai.beta.threads.runs.submitToolOutputsStream(threadId, runId, {\n tool_outputs: toolOutputs,\n });\n\n await this.streamResponse(stream, eventSource);\n return runId;\n }\n\n private async submitUserMessage(\n threadId: string,\n messages: Message[],\n actions: ActionInput[],\n eventSource: RuntimeEventSource,\n ) {\n messages = [...messages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions =\n instructionsMessage instanceof TextMessage ? instructionsMessage.content : \"\";\n\n // get the latest user message\n const userMessage = messages\n .map(convertMessageToOpenAIMessage)\n .map(convertSystemMessageToAssistantAPI)\n .at(-1);\n\n if (userMessage.role !== \"user\") {\n throw new Error(\"No user message found\");\n }\n\n // create a new message on the thread\n await this.openai.beta.threads.messages.create(threadId, {\n role: \"user\",\n content: userMessage.content,\n });\n\n const openaiTools = actions.map(convertActionInputToOpenAITool);\n\n const tools = [\n ...openaiTools,\n ...(this.codeInterpreterEnabled ? [{ type: \"code_interpreter\" } as AssistantTool] : []),\n ...(this.fileSearchEnabled ? [{ type: \"file_search\" } as AssistantTool] : []),\n ];\n\n // run the thread\n let stream = this.openai.beta.threads.runs.stream(threadId, {\n assistant_id: this.assistantId,\n instructions,\n tools: tools,\n });\n\n await this.streamResponse(stream, eventSource);\n\n return getRunIdFromStream(stream);\n }\n\n private async streamResponse(stream: AssistantStream, eventSource: RuntimeEventSource) {\n eventSource.stream(async (eventStream$) => {\n let inFunctionCall = false;\n\n for await (const chunk of stream) {\n switch (chunk.event) {\n case \"thread.message.created\":\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd();\n }\n eventStream$.sendTextMessageStart(chunk.data.id);\n break;\n case \"thread.message.delta\":\n if (chunk.data.delta.content?.[0].type === \"text\") {\n eventStream$.sendTextMessageContent(chunk.data.delta.content?.[0].text.value);\n }\n break;\n case \"thread.message.completed\":\n eventStream$.sendTextMessageEnd();\n break;\n case \"thread.run.step.delta\":\n let toolCallId: string | undefined;\n let toolCallName: string | undefined;\n let toolCallArgs: string | undefined;\n if (\n chunk.data.delta.step_details.type === \"tool_calls\" &&\n chunk.data.delta.step_details.tool_calls?.[0].type === \"function\"\n ) {\n toolCallId = chunk.data.delta.step_details.tool_calls?.[0].id;\n toolCallName = chunk.data.delta.step_details.tool_calls?.[0].function.name;\n toolCallArgs = chunk.data.delta.step_details.tool_calls?.[0].function.arguments;\n }\n\n if (toolCallName && toolCallId) {\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd();\n }\n inFunctionCall = true;\n eventStream$.sendActionExecutionStart(toolCallId, toolCallName);\n } else if (toolCallArgs) {\n eventStream$.sendActionExecutionArgs(toolCallArgs);\n }\n break;\n }\n }\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd();\n }\n eventStream$.complete();\n });\n }\n}\n\nfunction getRunIdFromStream(stream: AssistantStream): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n let runIdGetter = (event: AssistantStreamEvent) => {\n if (event.event === \"thread.run.created\") {\n const runId = event.data.id;\n stream.off(\"event\", runIdGetter);\n resolve(runId);\n }\n };\n stream.on(\"event\", runIdGetter);\n });\n}\n","/**\n * CopilotKit Adapter for Google Gemini\n *\n * Use this adapter for a Google Gemini backend.\n *\n * <RequestExample>\n * ```typescript\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(\n * req,\n * new GoogleGenerativeAIAdapter()\n * );\n * ```\n * </RequestExample>\n *\n * To set up a different model, pass the model prop:\n *\n * ```typescript\n * const copilotKit = new CopilotRuntime();\n * const genAI = new GoogleGenerativeAI(\n * process.env[\"GOOGLE_API_KEY\"]!\n * );\n * const model = genAI.getGenerativeModel(\n * { model: \"gemini-pro\" }\n * );\n * return copilotKit.response(\n * req,\n * new GoogleGenerativeAIAdapter()\n * );\n * ```\n */\nimport { CopilotServiceAdapter } from \"../service-adapter\";\nimport {\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport { GenerativeModel, GoogleGenerativeAI } from \"@google/generative-ai\";\nimport { TextMessage } from \"../../graphql/types/converted\";\nimport { convertMessageToGoogleGenAIMessage, transformActionToGoogleGenAITool } from \"./utils\";\nimport { nanoid } from \"nanoid\";\n\ninterface GoogleGenerativeAIAdapterOptions {\n /**\n * A custom `GenerativeModel` to use for the request.\n */\n model?: GenerativeModel;\n}\n\nexport class GoogleGenerativeAIAdapter implements CopilotServiceAdapter {\n private model: GenerativeModel;\n\n constructor(options?: GoogleGenerativeAIAdapterOptions) {\n if (options?.model) {\n this.model = options.model;\n } else {\n const genAI = new GoogleGenerativeAI(process.env[\"GOOGLE_API_KEY\"]!);\n this.model = genAI.getGenerativeModel({ model: \"gemini-pro\" });\n }\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource } = request;\n\n // get the history (everything except the first and last message)\n const history = messages.slice(1, -1).map(convertMessageToGoogleGenAIMessage);\n\n // get the current message (the last message)\n const currentMessage = convertMessageToGoogleGenAIMessage(messages.at(-1));\n if (!currentMessage) {\n throw new Error(\"No current message\");\n }\n\n let systemMessage: string;\n const firstMessage = messages.at(0);\n if (firstMessage instanceof TextMessage && firstMessage.role === \"system\") {\n systemMessage = firstMessage.content.trim();\n } else {\n throw new Error(\"First message is not a system message\");\n }\n\n const tools = actions.map(transformActionToGoogleGenAITool);\n\n const isFirstGenGeminiPro =\n this.model.model === \"gemini-pro\" || this.model.model === \"models/gemini-pro\";\n\n const chat = this.model.startChat({\n history: [\n ...history,\n // gemini-pro does not support system instructions, so we need to add them to the history\n ...(isFirstGenGeminiPro ? [{ role: \"user\", parts: [{ text: systemMessage }] }] : []),\n ],\n // only gemini-1.5-pro-latest and later supports setting system instructions\n ...(isFirstGenGeminiPro\n ? {}\n : { systemInstruction: { role: \"user\", parts: [{ text: systemMessage }] } }),\n tools,\n });\n\n const result = await chat.sendMessageStream(currentMessage.parts);\n\n eventSource.stream(async (eventStream$) => {\n let isTextMessage = false;\n for await (const chunk of result.stream) {\n const chunkText = chunk.text();\n if (!isTextMessage) {\n isTextMessage = true;\n eventStream$.sendTextMessageStart(nanoid());\n }\n eventStream$.sendTextMessageContent(chunkText);\n }\n if (isTextMessage) {\n eventStream$.sendTextMessageEnd();\n }\n\n let calls = (await result.response).functionCalls();\n if (calls) {\n for (let call of calls) {\n eventStream$.sendActionExecution(\n nanoid(),\n call.name,\n JSON.stringify(replaceNewlinesInObject(call.args)),\n );\n }\n }\n eventStream$.complete();\n });\n\n return {};\n }\n}\n\nfunction replaceNewlinesInObject(obj: any): any {\n if (typeof obj === \"string\") {\n return obj.replace(/\\\\\\\\n/g, \"\\n\");\n } else if (Array.isArray(obj)) {\n return obj.map(replaceNewlinesInObject);\n } else if (typeof obj === \"object\" && obj !== null) {\n const newObj: any = {};\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n newObj[key] = replaceNewlinesInObject(obj[key]);\n }\n }\n return newObj;\n }\n return obj;\n}\n","import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport { Tool } from \"@google/generative-ai\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\n\nexport function convertMessageToGoogleGenAIMessage(message: Message) {\n if (message instanceof TextMessage) {\n const role = {\n user: \"user\",\n assistant: \"model\",\n system: \"user\",\n }[message.role];\n\n const text =\n message.role === \"system\"\n ? \"THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: \" + message.content\n : message.content;\n\n return {\n role,\n parts: [{ text }],\n };\n } else if (message instanceof ActionExecutionMessage) {\n return {\n role: \"model\",\n parts: [\n {\n functionCall: {\n name: message.name,\n args: message.arguments,\n },\n },\n ],\n };\n } else if (message instanceof ResultMessage) {\n return {\n role: \"model\",\n parts: [\n {\n functionResponse: {\n name: message.actionName,\n response: {\n name: message.actionName,\n content: tryParseJson(message.result),\n },\n },\n },\n ],\n };\n }\n}\n\nexport function transformActionToGoogleGenAITool(action: ActionInput): Tool {\n const name = action.name;\n const description = action.description;\n const parameters = JSON.parse(action.jsonSchema);\n\n const transformProperties = (props: any) => {\n for (const key in props) {\n if (props[key].type) {\n props[key].type = props[key].type.toUpperCase();\n }\n if (props[key].properties) {\n transformProperties(props[key].properties);\n }\n }\n };\n transformProperties(parameters);\n\n return {\n functionDeclarations: [\n {\n name,\n description,\n parameters,\n },\n ],\n };\n}\n\nfunction tryParseJson(str?: string) {\n if (!str) {\n return \"\";\n }\n try {\n return JSON.parse(str);\n } catch (e) {\n return str;\n }\n}\n","/**\n * CopilotKit Adapter for LangChain\n *\n * Use this adapter to use LangChain as a backend.\n *\n * ```typescript\n * return copilotKit.response(\n * req,\n * new LangChainAdapter(async (forwardedProps) => {\n * const model = new ChatOpenAI({ modelName: \"gpt-4o\" });\n * return model.stream(forwardedProps.messages, {\n * tools: forwardedProps.tools,\n * });\n * })\n * );\n * ```\n * The async handler function can return:\n *\n * - a simple `string` response\n * - a LangChain stream `IterableReadableStream`\n * - a LangChain `BaseMessageChunk` object\n * - a LangChain `AIMessage` object\n */\n\nimport { BaseMessage } from \"@langchain/core/messages\";\nimport { CopilotServiceAdapter } from \"../service-adapter\";\nimport {\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToLangChainTool,\n convertMessageToLangChainMessage,\n streamLangChainResponse,\n} from \"./utils\";\nimport { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { LangChainReturnType } from \"./types\";\n\ninterface ChainFnParameters {\n model: string;\n messages: BaseMessage[];\n tools: DynamicStructuredTool[];\n threadId?: string;\n runId?: string;\n}\n\ninterface LangChainAdapterOptions {\n chainFn: (parameters: ChainFnParameters) => Promise<LangChainReturnType>;\n}\n\nexport class LangChainAdapter implements CopilotServiceAdapter {\n /**\n * To use LangChain as a backend, provide a handler function to the adapter with your custom LangChain logic.\n */\n constructor(private options: LangChainAdapterOptions) {}\n\n async process({\n eventSource,\n model,\n actions,\n messages,\n threadId,\n runId,\n }: CopilotRuntimeChatCompletionRequest): Promise<CopilotRuntimeChatCompletionResponse> {\n const result = await this.options.chainFn({\n messages: messages.map(convertMessageToLangChainMessage),\n tools: actions.map(convertActionInputToLangChainTool),\n model,\n threadId,\n runId,\n });\n\n eventSource.stream(async (eventStream$) => {\n await streamLangChainResponse({\n result,\n eventStream$,\n });\n });\n\n return {};\n }\n}\n","import { Parameter, Action } from \"@copilotkit/shared\";\nimport { RemoteRunnable } from \"langchain/runnables/remote\";\n\nexport interface RemoteChain {\n name: string;\n description: string;\n chainUrl: string;\n parameters?: Parameter[];\n parameterType: \"single\" | \"multi\";\n}\n\nexport class RemoteChain implements RemoteChain {\n constructor(options: RemoteChain) {\n this.name = options.name;\n this.description = options.description;\n this.chainUrl = options.chainUrl;\n this.parameters = options.parameters;\n this.parameterType = options.parameterType || \"multi\";\n }\n\n async toAction(): Promise<Action<any>> {\n if (!this.parameters) {\n await this.inferLangServeParameters();\n }\n\n return {\n name: this.name,\n description: this.description,\n parameters: this.parameters!,\n handler: async (args: any) => {\n const runnable = new RemoteRunnable({ url: this.chainUrl });\n let input: any;\n if (this.parameterType === \"single\") {\n input = args[Object.keys(args)[0]];\n } else {\n input = args;\n }\n return await runnable.invoke(input);\n },\n };\n }\n\n async inferLangServeParameters() {\n const supportedTypes = [\"string\", \"number\", \"boolean\"];\n\n let schemaUrl = this.chainUrl.replace(/\\/+$/, \"\") + \"/input_schema\";\n let schema = await fetch(schemaUrl)\n .then((res) => res.json())\n .catch(() => {\n throw new Error(\"Failed to fetch langserve schema at \" + schemaUrl);\n });\n // for now, don't use json schema, just do a simple conversion\n\n if (supportedTypes.includes(schema.type)) {\n this.parameterType = \"single\";\n this.parameters = [\n {\n name: \"input\",\n type: schema.type,\n description: \"The input to the chain\",\n },\n ];\n } else if (schema.type === \"object\") {\n this.parameterType = \"multi\";\n this.parameters = Object.keys(schema.properties).map((key) => {\n let property = schema.properties[key];\n if (!supportedTypes.includes(property.type)) {\n throw new Error(\"Unsupported schema type\");\n }\n return {\n name: key,\n type: property.type,\n description: property.description || \"\",\n required: schema.required?.includes(key) || false,\n };\n });\n } else {\n throw new Error(\"Unsupported schema type\");\n }\n }\n}\n"],"mappings":"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","names":["OpenAI","encodingForModel","limitMessagesToTokenCount","messages","tools","model","maxTokens","maxTokensForOpenAIModel","result","toolsNumTokens","countToolsTokens","Error","message","role","numTokens","countMessageTokens","cutoff","reversedMessages","reverse","unshift","maxTokensByModel","DEFAULT_MAX_TOKENS","length","json","JSON","stringify","countTokens","content","text","enc","encodingForModel","e","encode","convertActionInputToOpenAITool","action","type","function","name","description","parameters","parse","jsonSchema","convertMessageToOpenAIMessage","TextMessage","ActionExecutionMessage","tool_calls","id","arguments","ResultMessage","tool_call_id","actionExecutionId","convertSystemMessageToAssistantAPI","DEFAULT_MODEL","OpenAIAdapter","model","_openai","openai","constructor","params","OpenAI","process","messages","actions","eventSource","tools","map","convertActionInputToOpenAITool","openaiMessages","convertMessageToOpenAIMessage","limitMessagesToTokenCount","stream","beta","chat","completions","length","eventStream$","mode","chunk","toolCall","choices","delta","tool_calls","content","id","sendTextMessageEnd","undefined","sendActionExecutionEnd","sendActionExecutionStart","function","name","sendTextMessageStart","sendTextMessageContent","arguments","sendActionExecutionArgs","complete","OpenAI","OpenAIAssistantAdapter","openai","codeInterpreterEnabled","assistantId","fileSearchEnabled","constructor","params","OpenAI","process","messages","actions","eventSource","threadId","runId","beta","threads","create","id","lastMessage","at","nextRunId","undefined","ResultMessage","submitToolOutputs","TextMessage","submitUserMessage","Error","run","runs","retrieve","required_action","toolCallsIds","submit_tool_outputs","tool_calls","map","toolCall","resultMessages","filter","message","includes","actionExecutionId","length","toolOutputs","tool_call_id","output","result","stream","submitToolOutputsStream","tool_outputs","streamResponse","instructionsMessage","shift","instructions","content","userMessage","convertMessageToOpenAIMessage","convertSystemMessageToAssistantAPI","role","openaiTools","convertActionInputToOpenAITool","tools","type","assistant_id","getRunIdFromStream","eventStream$","inFunctionCall","chunk","event","sendActionExecutionEnd","sendTextMessageStart","data","delta","sendTextMessageContent","text","value","sendTextMessageEnd","toolCallId","toolCallName","toolCallArgs","step_details","function","name","arguments","sendActionExecutionStart","sendActionExecutionArgs","complete","Promise","resolve","reject","runIdGetter","off","on","GoogleGenerativeAI","convertMessageToGoogleGenAIMessage","message","TextMessage","role","user","assistant","system","text","content","parts","ActionExecutionMessage","functionCall","name","args","arguments","ResultMessage","functionResponse","actionName","response","tryParseJson","result","transformActionToGoogleGenAITool","action","description","parameters","JSON","parse","jsonSchema","transformProperties","props","key","type","toUpperCase","properties","functionDeclarations","str","e","nanoid","GoogleGenerativeAIAdapter","model","constructor","options","genAI","GoogleGenerativeAI","process","env","getGenerativeModel","request","messages","actions","eventSource","history","slice","map","convertMessageToGoogleGenAIMessage","currentMessage","at","Error","systemMessage","firstMessage","TextMessage","role","content","trim","tools","transformActionToGoogleGenAITool","isFirstGenGeminiPro","chat","startChat","parts","text","systemInstruction","result","sendMessageStream","stream","eventStream$","isTextMessage","chunk","chunkText","sendTextMessageStart","nanoid","sendTextMessageContent","sendTextMessageEnd","calls","response","functionCalls","call","sendActionExecution","name","JSON","stringify","replaceNewlinesInObject","args","complete","obj","replace","Array","isArray","newObj","key","hasOwnProperty","LangChainAdapter","constructor","options","process","eventSource","model","actions","messages","threadId","runId","result","chainFn","map","convertMessageToLangChainMessage","tools","convertActionInputToLangChainTool","stream","eventStream$","streamLangChainResponse","RemoteRunnable","RemoteChain","constructor","options","name","description","chainUrl","parameters","parameterType","toAction","inferLangServeParameters","handler","args","runnable","RemoteRunnable","url","input","Object","keys","invoke","supportedTypes","schemaUrl","replace","schema","fetch","then","res","json","catch","Error","includes","type","properties","map","key","property","required"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/service-adapters/langchain/utils.ts"],"sourcesContent":["import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n HumanMessage,\n SystemMessage,\n ToolMessage,\n} from \"@langchain/core/messages\";\nimport { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { z } from \"zod\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { LangChainReturnType } from \"./types\";\nimport { RuntimeEventSubject } from \"../events\";\nimport { nanoid } from \"nanoid\";\n\nexport function convertMessageToLangChainMessage(message: Message): BaseMessage {\n if (message instanceof TextMessage) {\n if (message.role == \"user\") {\n return new HumanMessage(message.content);\n } else if (message.role == \"assistant\") {\n return new AIMessage(message.content);\n } else if (message.role === \"system\") {\n return new SystemMessage(message.content);\n }\n } else if (message instanceof ActionExecutionMessage) {\n return new AIMessage({\n content: \"\",\n tool_calls: [\n {\n id: message.id,\n args: message.arguments,\n name: message.name,\n },\n ],\n });\n } else if (message instanceof ResultMessage) {\n return new ToolMessage({\n content: message.result,\n tool_call_id: message.actionExecutionId,\n });\n }\n}\n\nexport function convertJsonSchemaToZodSchema(jsonSchema: any, required: boolean): z.ZodSchema {\n if (jsonSchema.type === \"object\") {\n const spec: { [key: string]: z.ZodSchema } = {};\n for (const [key, value] of Object.entries(jsonSchema.properties)) {\n spec[key] = convertJsonSchemaToZodSchema(\n value,\n jsonSchema.required ? jsonSchema.required.includes(key) : false,\n );\n }\n let schema = z.object(spec);\n return !required ? schema.optional() : schema;\n } else if (jsonSchema.type === \"string\") {\n let schema = z.string().describe(jsonSchema.description);\n return !required ? schema.optional() : schema;\n } else if (jsonSchema.type === \"number\") {\n let schema = z.number().describe(jsonSchema.description);\n return !required ? schema.optional() : schema;\n } else if (jsonSchema.type === \"boolean\") {\n let schema = z.boolean().describe(jsonSchema.description);\n return !required ? schema.optional() : schema;\n } else if (jsonSchema.type === \"array\") {\n let itemSchema = convertJsonSchemaToZodSchema(jsonSchema.items, false);\n let schema = z.array(itemSchema);\n return !required ? schema.optional() : schema;\n }\n}\n\nexport function convertActionInputToLangChainTool(actionInput: ActionInput): DynamicStructuredTool {\n return new DynamicStructuredTool({\n name: actionInput.name,\n description: actionInput.description,\n schema: convertJsonSchemaToZodSchema(\n JSON.parse(actionInput.jsonSchema),\n true,\n ) as z.ZodObject<any>,\n func: async () => {\n return \"\";\n },\n });\n}\n\ninterface StreamLangChainResponseParams {\n result: LangChainReturnType;\n eventStream$: RuntimeEventSubject;\n actionExecution?: {\n id: string;\n name: string;\n };\n}\n\nexport async function streamLangChainResponse({\n result,\n eventStream$,\n actionExecution,\n}: StreamLangChainResponseParams) {\n // We support several types of return values from LangChain functions:\n\n // 1. string\n\n if (typeof result === \"string\") {\n if (!actionExecution) {\n // Just send one chunk with the string as the content.\n eventStream$.sendTextMessage(nanoid(), result);\n } else {\n // Send as a result\n eventStream$.sendActionExecutionResult(actionExecution.id, actionExecution.name, result);\n }\n }\n\n // 2. AIMessage\n // Send the content and function call of the AIMessage as the content of the chunk.\n // else if (\"content\" in result && typeof result.content === \"string\") {\n else if (result instanceof AIMessage) {\n if (result.content) {\n eventStream$.sendTextMessage(nanoid(), result.content as string);\n }\n for (const toolCall of result.tool_calls) {\n eventStream$.sendActionExecution(\n toolCall.id || nanoid(),\n toolCall.name,\n JSON.stringify(toolCall.args),\n );\n }\n }\n\n // 3. BaseMessageChunk\n // Send the content and function call of the AIMessage as the content of the chunk.\n else if (result instanceof BaseMessageChunk) {\n if (result.lc_kwargs?.content) {\n eventStream$.sendTextMessage(nanoid(), result.content as string);\n }\n if (result.lc_kwargs?.tool_calls) {\n for (const toolCall of result.lc_kwargs?.tool_calls) {\n eventStream$.sendActionExecution(\n toolCall.id || nanoid(),\n toolCall.name,\n JSON.stringify(toolCall.args),\n );\n }\n }\n }\n\n // 4. IterableReadableStream\n // Stream the result of the LangChain function.\n else if (\"getReader\" in result) {\n let reader = result.getReader();\n\n let mode: \"function\" | \"message\" | null = null;\n\n while (true) {\n try {\n const { done, value } = await reader.read();\n\n let toolCallName: string | undefined = undefined;\n let toolCallId: string | undefined = undefined;\n let toolCallArgs: string | undefined = undefined;\n let hasToolCall: boolean = false;\n let content = value.content as string;\n\n if (value instanceof AIMessageChunk) {\n let chunk = value.tool_call_chunks?.[0];\n toolCallName = chunk?.name;\n toolCallId = chunk?.id;\n toolCallArgs = chunk?.args;\n hasToolCall = chunk != undefined;\n } else if (value instanceof BaseMessageChunk) {\n let chunk = value.additional_kwargs?.tool_calls?.[0];\n toolCallName = chunk?.function?.name;\n toolCallId = chunk?.id;\n toolCallArgs = chunk?.function?.arguments;\n hasToolCall = chunk?.function != undefined;\n }\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCallName is defined, it means a new tool call starts.\n if (mode === \"message\" && (toolCallId || done)) {\n mode = null;\n eventStream$.sendTextMessageEnd();\n } else if (mode === \"function\" && (!hasToolCall || done)) {\n mode = null;\n eventStream$.sendActionExecutionEnd();\n }\n\n if (done) {\n break;\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (hasToolCall) {\n mode = \"function\";\n eventStream$.sendActionExecutionStart(toolCallId, toolCallName);\n } else if (content) {\n mode = \"message\";\n eventStream$.sendTextMessageStart(nanoid());\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent(content);\n } else if (mode === \"function\" && toolCallArgs) {\n eventStream$.sendActionExecutionArgs(toolCallArgs);\n }\n } catch (error) {\n console.error(\"Error reading from stream\", error);\n break;\n }\n }\n } else if (actionExecution) {\n eventStream$.sendActionExecutionResult(\n actionExecution.id,\n actionExecution.name,\n JSON.stringify(result),\n );\n }\n\n // unsupported type\n else {\n throw new Error(\"Invalid return type from LangChain function.\");\n }\n\n eventStream$.complete();\n}\n"],"mappings":";;;;;;;;;;AAMA,SACEA,WACAC,gBAEAC,kBACAC,cACAC,eACAC,mBACK;AACP,SAASC,6BAA6B;AACtC,SAASC,SAAS;AAIlB,SAASC,cAAc;AAEhB,SAASC,iCAAiCC,SAAgB;AAC/D,MAAIA,mBAAmBC,aAAa;AAClC,QAAID,QAAQE,QAAQ,QAAQ;AAC1B,aAAO,IAAIC,aAAaH,QAAQI,OAAO;IACzC,WAAWJ,QAAQE,QAAQ,aAAa;AACtC,aAAO,IAAIG,UAAUL,QAAQI,OAAO;IACtC,WAAWJ,QAAQE,SAAS,UAAU;AACpC,aAAO,IAAII,cAAcN,QAAQI,OAAO;IAC1C;EACF,WAAWJ,mBAAmBO,wBAAwB;AACpD,WAAO,IAAIF,UAAU;MACnBD,SAAS;MACTI,YAAY;QACV;UACEC,IAAIT,QAAQS;UACZC,MAAMV,QAAQW;UACdC,MAAMZ,QAAQY;QAChB;;IAEJ,CAAA;EACF,WAAWZ,mBAAmBa,eAAe;AAC3C,WAAO,IAAIC,YAAY;MACrBV,SAASJ,QAAQe;MACjBC,cAAchB,QAAQiB;IACxB,CAAA;EACF;AACF;AA1BgBlB;AA4BT,SAASmB,6BAA6BC,YAAiBC,UAAiB;AAC7E,MAAID,WAAWE,SAAS,UAAU;AAChC,UAAMC,OAAuC,CAAC;AAC9C,eAAW,CAACC,KAAKC,KAAAA,KAAUC,OAAOC,QAAQP,WAAWQ,UAAU,GAAG;AAChEL,WAAKC,GAAAA,IAAOL,6BACVM,OACAL,WAAWC,WAAWD,WAAWC,SAASQ,SAASL,GAAAA,IAAO,KAAA;IAE9D;AACA,QAAIM,SAASC,EAAEC,OAAOT,IAAAA;AACtB,WAAO,CAACF,WAAWS,OAAOG,SAAQ,IAAKH;EACzC,WAAWV,WAAWE,SAAS,UAAU;AACvC,QAAIQ,SAASC,EAAEG,OAAM,EAAGC,SAASf,WAAWgB,WAAW;AACvD,WAAO,CAACf,WAAWS,OAAOG,SAAQ,IAAKH;EACzC,WAAWV,WAAWE,SAAS,UAAU;AACvC,QAAIQ,SAASC,EAAEM,OAAM,EAAGF,SAASf,WAAWgB,WAAW;AACvD,WAAO,CAACf,WAAWS,OAAOG,SAAQ,IAAKH;EACzC,WAAWV,WAAWE,SAAS,WAAW;AACxC,QAAIQ,SAASC,EAAEO,QAAO,EAAGH,SAASf,WAAWgB,WAAW;AACxD,WAAO,CAACf,WAAWS,OAAOG,SAAQ,IAAKH;EACzC,WAAWV,WAAWE,SAAS,SAAS;AACtC,QAAIiB,aAAapB,6BAA6BC,WAAWoB,OAAO,KAAA;AAChE,QAAIV,SAASC,EAAEU,MAAMF,UAAAA;AACrB,WAAO,CAAClB,WAAWS,OAAOG,SAAQ,IAAKH;EACzC;AACF;AAzBgBX;AA2BT,SAASuB,kCAAkCC,aAAwB;AACxE,SAAO,IAAIC,sBAAsB;IAC/B/B,MAAM8B,YAAY9B;IAClBuB,aAAaO,YAAYP;IACzBN,QAAQX,6BACN0B,KAAKC,MAAMH,YAAYvB,UAAU,GACjC,IAAA;IAEF2B,MAAM,YAAA;AACJ,aAAO;IACT;EACF,CAAA;AACF;AAZgBL;AAuBhB,eAAsBM,wBAAwB,EAC5ChC,QACAiC,cACAC,gBAAe,GACe;AAxGhC;AA6GE,MAAI,OAAOlC,WAAW,UAAU;AAC9B,QAAI,CAACkC,iBAAiB;AAEpBD,mBAAaE,gBAAgBC,OAAAA,GAAUpC,MAAAA;IACzC,OAAO;AAELiC,mBAAaI,0BAA0BH,gBAAgBxC,IAAIwC,gBAAgBrC,MAAMG,MAAAA;IACnF;EACF,WAKSA,kBAAkBV,WAAW;AACpC,QAAIU,OAAOX,SAAS;AAClB4C,mBAAaE,gBAAgBC,OAAAA,GAAUpC,OAAOX,OAAO;IACvD;AACA,eAAWiD,YAAYtC,OAAOP,YAAY;AACxCwC,mBAAaM,oBACXD,SAAS5C,MAAM0C,OAAAA,GACfE,SAASzC,MACTgC,KAAKW,UAAUF,SAAS3C,IAAI,CAAA;IAEhC;EACF,WAISK,kBAAkByC,kBAAkB;AAC3C,SAAIzC,YAAO0C,cAAP1C,mBAAkBX,SAAS;AAC7B4C,mBAAaE,gBAAgBC,OAAAA,GAAUpC,OAAOX,OAAO;IACvD;AACA,SAAIW,YAAO0C,cAAP1C,mBAAkBP,YAAY;AAChC,iBAAW6C,aAAYtC,YAAO0C,cAAP1C,mBAAkBP,YAAY;AACnDwC,qBAAaM,oBACXD,SAAS5C,MAAM0C,OAAAA,GACfE,SAASzC,MACTgC,KAAKW,UAAUF,SAAS3C,IAAI,CAAA;MAEhC;IACF;EACF,WAIS,eAAeK,QAAQ;AAC9B,QAAI2C,SAAS3C,OAAO4C,UAAS;AAE7B,QAAIC,OAAsC;AAE1C,WAAO,MAAM;AACX,UAAI;AACF,cAAM,EAAEC,MAAMrC,MAAK,IAAK,MAAMkC,OAAOI,KAAI;AAEzC,YAAIC,eAAmCC;AACvC,YAAIC,aAAiCD;AACrC,YAAIE,eAAmCF;AACvC,YAAIG,cAAuB;AAC3B,YAAI/D,UAAUoB,MAAMpB;AAEpB,YAAIoB,iBAAiB4C,gBAAgB;AACnC,cAAIC,SAAQ7C,WAAM8C,qBAAN9C,mBAAyB;AACrCuC,yBAAeM,+BAAOzD;AACtBqD,uBAAaI,+BAAO5D;AACpByD,yBAAeG,+BAAO3D;AACtByD,wBAAcE,SAASL;QACzB,WAAWxC,iBAAiBgC,kBAAkB;AAC5C,cAAIa,SAAQ7C,iBAAM+C,sBAAN/C,mBAAyBhB,eAAzBgB,mBAAsC;AAClDuC,0BAAeM,oCAAOG,aAAPH,mBAAiBzD;AAChCqD,uBAAaI,+BAAO5D;AACpByD,0BAAeG,oCAAOG,aAAPH,mBAAiB1D;AAChCwD,yBAAcE,+BAAOG,aAAYR;QACnC;AAKA,YAAIJ,SAAS,cAAcK,cAAcJ,OAAO;AAC9CD,iBAAO;AACPZ,uBAAayB,mBAAkB;QACjC,WAAWb,SAAS,eAAe,CAACO,eAAeN,OAAO;AACxDD,iBAAO;AACPZ,uBAAa0B,uBAAsB;QACrC;AAEA,YAAIb,MAAM;AACR;QACF;AAGA,YAAID,SAAS,MAAM;AACjB,cAAIO,aAAa;AACfP,mBAAO;AACPZ,yBAAa2B,yBAAyBV,YAAYF,YAAAA;UACpD,WAAW3D,SAAS;AAClBwD,mBAAO;AACPZ,yBAAa4B,qBAAqBzB,OAAAA,CAAAA;UACpC;QACF;AAGA,YAAIS,SAAS,aAAaxD,SAAS;AACjC4C,uBAAa6B,uBAAuBzE,OAAAA;QACtC,WAAWwD,SAAS,cAAcM,cAAc;AAC9ClB,uBAAa8B,wBAAwBZ,YAAAA;QACvC;MACF,SAASa,OAAP;AACAC,gBAAQD,MAAM,6BAA6BA,KAAAA;AAC3C;MACF;IACF;EACF,WAAW9B,iBAAiB;AAC1BD,iBAAaI,0BACXH,gBAAgBxC,IAChBwC,gBAAgBrC,MAChBgC,KAAKW,UAAUxC,MAAAA,CAAAA;EAEnB,OAGK;AACH,UAAM,IAAIkE,MAAM,8CAAA;EAClB;AAEAjC,eAAakC,SAAQ;AACvB;AAtIsBnC;","names":["AIMessage","AIMessageChunk","BaseMessageChunk","HumanMessage","SystemMessage","ToolMessage","DynamicStructuredTool","z","nanoid","convertMessageToLangChainMessage","message","TextMessage","role","HumanMessage","content","AIMessage","SystemMessage","ActionExecutionMessage","tool_calls","id","args","arguments","name","ResultMessage","ToolMessage","result","tool_call_id","actionExecutionId","convertJsonSchemaToZodSchema","jsonSchema","required","type","spec","key","value","Object","entries","properties","includes","schema","z","object","optional","string","describe","description","number","boolean","itemSchema","items","array","convertActionInputToLangChainTool","actionInput","DynamicStructuredTool","JSON","parse","func","streamLangChainResponse","eventStream$","actionExecution","sendTextMessage","nanoid","sendActionExecutionResult","toolCall","sendActionExecution","stringify","BaseMessageChunk","lc_kwargs","reader","getReader","mode","done","read","toolCallName","undefined","toolCallId","toolCallArgs","hasToolCall","AIMessageChunk","chunk","tool_call_chunks","additional_kwargs","function","sendTextMessageEnd","sendActionExecutionEnd","sendActionExecutionStart","sendTextMessageStart","sendTextMessageContent","sendActionExecutionArgs","error","console","Error","complete"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/graphql/types/base/index.ts"],"sourcesContent":["import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class BaseMessage {\n @Field(() => String)\n id: string;\n\n @Field(() => Date)\n createdAt: Date;\n}\n"],"mappings":";;;;AAAA,SAASA,OAAOC,iBAAiB;;;;;;;;;;;;;;;;;AAG1B,IAAMC,cAAN,MAAMA;EAEXC;EAGAC;AACF;AANaF;;EACVG,MAAM,MAAMC,MAAAA;;GADFJ,YAAAA,WAAAA,MAAAA,MAAAA;;EAIVG,MAAM,MAAME,IAAAA;qCACF,SAAA,cAAA,SAAA,IAAA;GALAL,YAAAA,WAAAA,aAAAA,MAAAA;AAAAA,cAAAA,aAAAA;EADZM,UAAAA;GACYN,WAAAA;","names":["Field","InputType","BaseMessage","id","createdAt","Field","String","Date","InputType"]}