@copilotkit/runtime 0.37.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 (105) hide show
  1. package/.eslintrc.js +7 -0
  2. package/.turbo/turbo-build.log +70 -0
  3. package/CHANGELOG.md +1 -0
  4. package/__snapshots__/schema/schema.graphql +178 -0
  5. package/dist/chunk-2CCVVJDU.mjs +56 -0
  6. package/dist/chunk-2CCVVJDU.mjs.map +1 -0
  7. package/dist/chunk-4UA4RB4C.mjs +185 -0
  8. package/dist/chunk-4UA4RB4C.mjs.map +1 -0
  9. package/dist/chunk-5HGYI6EG.mjs +678 -0
  10. package/dist/chunk-5HGYI6EG.mjs.map +1 -0
  11. package/dist/chunk-7IFP53C6.mjs +169 -0
  12. package/dist/chunk-7IFP53C6.mjs.map +1 -0
  13. package/dist/chunk-BLTAUVRP.mjs +30 -0
  14. package/dist/chunk-BLTAUVRP.mjs.map +1 -0
  15. package/dist/chunk-NFCPM5AM.mjs +43 -0
  16. package/dist/chunk-NFCPM5AM.mjs.map +1 -0
  17. package/dist/chunk-XPAUPJMW.mjs +1051 -0
  18. package/dist/chunk-XPAUPJMW.mjs.map +1 -0
  19. package/dist/graphql/types/base/index.d.ts +6 -0
  20. package/dist/graphql/types/base/index.js +63 -0
  21. package/dist/graphql/types/base/index.js.map +1 -0
  22. package/dist/graphql/types/base/index.mjs +7 -0
  23. package/dist/graphql/types/base/index.mjs.map +1 -0
  24. package/dist/graphql/types/converted/index.d.ts +2 -0
  25. package/dist/graphql/types/converted/index.js +88 -0
  26. package/dist/graphql/types/converted/index.js.map +1 -0
  27. package/dist/graphql/types/converted/index.mjs +12 -0
  28. package/dist/graphql/types/converted/index.mjs.map +1 -0
  29. package/dist/index-aa091e3c.d.ts +49 -0
  30. package/dist/index-f0875df3.d.ts +197 -0
  31. package/dist/index.d.ts +15 -0
  32. package/dist/index.js +2171 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/index.mjs +49 -0
  35. package/dist/index.mjs.map +1 -0
  36. package/dist/langchain-adapter-9ce103f3.d.ts +200 -0
  37. package/dist/langserve-fd5066ee.d.ts +96 -0
  38. package/dist/lib/index.d.ts +15 -0
  39. package/dist/lib/index.js +2170 -0
  40. package/dist/lib/index.js.map +1 -0
  41. package/dist/lib/index.mjs +46 -0
  42. package/dist/lib/index.mjs.map +1 -0
  43. package/dist/lib/integrations/index.d.ts +9 -0
  44. package/dist/lib/integrations/index.js +1024 -0
  45. package/dist/lib/integrations/index.js.map +1 -0
  46. package/dist/lib/integrations/index.mjs +24 -0
  47. package/dist/lib/integrations/index.mjs.map +1 -0
  48. package/dist/lib/integrations/node-http/index.d.ts +8 -0
  49. package/dist/lib/integrations/node-http/index.js +969 -0
  50. package/dist/lib/integrations/node-http/index.js.map +1 -0
  51. package/dist/lib/integrations/node-http/index.mjs +10 -0
  52. package/dist/lib/integrations/node-http/index.mjs.map +1 -0
  53. package/dist/pages-router-b6bc6c60.d.ts +30 -0
  54. package/dist/service-adapters/index.d.ts +11 -0
  55. package/dist/service-adapters/index.js +912 -0
  56. package/dist/service-adapters/index.js.map +1 -0
  57. package/dist/service-adapters/index.mjs +18 -0
  58. package/dist/service-adapters/index.mjs.map +1 -0
  59. package/jest.config.js +5 -0
  60. package/package.json +63 -0
  61. package/scripts/generate-gql-schema.ts +13 -0
  62. package/src/graphql/inputs/action.input.ts +13 -0
  63. package/src/graphql/inputs/cloud-guardrails.input.ts +19 -0
  64. package/src/graphql/inputs/cloud.input.ts +8 -0
  65. package/src/graphql/inputs/context-property.input.ts +10 -0
  66. package/src/graphql/inputs/custom-property.input.ts +15 -0
  67. package/src/graphql/inputs/frontend.input.ts +11 -0
  68. package/src/graphql/inputs/generate-copilot-response.input.ts +22 -0
  69. package/src/graphql/inputs/message.input.ts +50 -0
  70. package/src/graphql/resolvers/copilot.resolver.ts +147 -0
  71. package/src/graphql/types/base/index.ts +10 -0
  72. package/src/graphql/types/converted/index.ts +29 -0
  73. package/src/graphql/types/copilot-response.type.ts +75 -0
  74. package/src/graphql/types/enums.ts +22 -0
  75. package/src/graphql/types/guardrails-result.type.ts +20 -0
  76. package/src/graphql/types/message-status.type.ts +40 -0
  77. package/src/graphql/types/response-status.type.ts +52 -0
  78. package/src/index.ts +2 -0
  79. package/src/lib/copilot-cloud.ts +63 -0
  80. package/src/lib/copilot-runtime.ts +261 -0
  81. package/src/lib/guardrails.ts +3 -0
  82. package/src/lib/index.ts +7 -0
  83. package/src/lib/integrations/index.ts +4 -0
  84. package/src/lib/integrations/nextjs/app-router.ts +29 -0
  85. package/src/lib/integrations/nextjs/pages-router.ts +36 -0
  86. package/src/lib/integrations/node-http/index.ts +23 -0
  87. package/src/lib/integrations/shared.ts +68 -0
  88. package/src/service-adapters/conversion.ts +47 -0
  89. package/src/service-adapters/events.ts +197 -0
  90. package/src/service-adapters/experimental/groq/groq-adapter.ts +124 -0
  91. package/src/service-adapters/experimental/ollama/ollama-adapter.ts +75 -0
  92. package/src/service-adapters/google/google-genai-adapter.ts +149 -0
  93. package/src/service-adapters/google/utils.ts +94 -0
  94. package/src/service-adapters/index.ts +6 -0
  95. package/src/service-adapters/langchain/langchain-adapter.ts +82 -0
  96. package/src/service-adapters/langchain/langserve.ts +81 -0
  97. package/src/service-adapters/langchain/types.ts +14 -0
  98. package/src/service-adapters/langchain/utils.ts +235 -0
  99. package/src/service-adapters/openai/openai-adapter.ts +142 -0
  100. package/src/service-adapters/openai/openai-assistant-adapter.ts +260 -0
  101. package/src/service-adapters/openai/utils.ts +164 -0
  102. package/src/service-adapters/service-adapter.ts +29 -0
  103. package/tsconfig.json +11 -0
  104. package/tsup.config.ts +17 -0
  105. package/typedoc.json +4 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/lib/copilot-runtime.ts","../src/service-adapters/openai/openai-adapter.ts","../src/graphql/types/base/index.ts","../src/graphql/types/converted/index.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/utils.ts","../src/service-adapters/langchain/langchain-adapter.ts","../src/service-adapters/langchain/langserve.ts","../src/lib/copilot-cloud.ts","../src/service-adapters/events.ts","../src/service-adapters/conversion.ts","../src/lib/integrations/shared.ts","../src/graphql/resolvers/copilot.resolver.ts","../src/graphql/inputs/generate-copilot-response.input.ts","../src/graphql/inputs/message.input.ts","../src/graphql/types/enums.ts","../src/graphql/inputs/frontend.input.ts","../src/graphql/inputs/action.input.ts","../src/graphql/inputs/cloud.input.ts","../src/graphql/inputs/cloud-guardrails.input.ts","../src/graphql/types/copilot-response.type.ts","../src/graphql/types/message-status.type.ts","../src/graphql/types/response-status.type.ts","../src/lib/integrations/nextjs/app-router.ts","../src/lib/integrations/nextjs/pages-router.ts","../src/lib/integrations/node-http/index.ts"],"sourcesContent":["import \"reflect-metadata\";\nexport * from \"./lib\";\n","/**\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","/**\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 { 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","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","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","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","/**\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","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 { Action } from \"@copilotkit/shared\";\nimport { of, concat, map, scan, concatMap, ReplaySubject } from \"rxjs\";\nimport { streamLangChainResponse } from \"./langchain/utils\";\n\nexport enum RuntimeEventTypes {\n TextMessageStart = \"TextMessageStart\",\n TextMessageContent = \"TextMessageContent\",\n TextMessageEnd = \"TextMessageEnd\",\n ActionExecutionStart = \"ActionExecutionStart\",\n ActionExecutionArgs = \"ActionExecutionArgs\",\n ActionExecutionEnd = \"ActionExecutionEnd\",\n ActionExecutionResult = \"ActionExecutionResult\",\n}\n\ntype FunctionCallScope = \"client\" | \"server\";\n\nexport type RuntimeEvent =\n | { type: RuntimeEventTypes.TextMessageStart; messageId: string }\n | {\n type: RuntimeEventTypes.TextMessageContent;\n content: string;\n }\n | { type: RuntimeEventTypes.TextMessageEnd }\n | {\n type: RuntimeEventTypes.ActionExecutionStart;\n actionExecutionId: string;\n actionName: string;\n scope?: FunctionCallScope;\n }\n | { type: RuntimeEventTypes.ActionExecutionArgs; args: string }\n | { type: RuntimeEventTypes.ActionExecutionEnd }\n | {\n type: RuntimeEventTypes.ActionExecutionResult;\n actionName: string;\n actionExecutionId: string;\n result: string;\n };\n\ninterface RuntimeEventWithState {\n event: RuntimeEvent | null;\n callActionServerSide: boolean;\n action: Action<any> | null;\n actionExecutionId: string | null;\n args: string;\n}\n\ntype EventSourceCallback = (eventStream$: RuntimeEventSubject) => Promise<void>;\n\nexport class RuntimeEventSubject extends ReplaySubject<RuntimeEvent> {\n constructor() {\n super();\n }\n\n sendTextMessageStart(messageId: string) {\n this.next({ type: RuntimeEventTypes.TextMessageStart, messageId });\n }\n\n sendTextMessageContent(content: string) {\n this.next({ type: RuntimeEventTypes.TextMessageContent, content });\n }\n\n sendTextMessageEnd() {\n this.next({ type: RuntimeEventTypes.TextMessageEnd });\n }\n\n sendTextMessage(messageId: string, content: string) {\n this.sendTextMessageStart(messageId);\n this.sendTextMessageContent(content);\n this.sendTextMessageEnd();\n }\n\n sendActionExecutionStart(actionExecutionId: string, actionName: string) {\n this.next({\n type: RuntimeEventTypes.ActionExecutionStart,\n actionExecutionId,\n actionName,\n });\n }\n\n sendActionExecutionArgs(args: string) {\n this.next({ type: RuntimeEventTypes.ActionExecutionArgs, args });\n }\n\n sendActionExecutionEnd() {\n this.next({ type: RuntimeEventTypes.ActionExecutionEnd });\n }\n\n sendActionExecution(actionExecutionId: string, toolName: string, args: string) {\n this.sendActionExecutionStart(actionExecutionId, toolName);\n this.sendActionExecutionArgs(args);\n this.sendActionExecutionEnd();\n }\n\n sendActionExecutionResult(actionExecutionId: string, actionName: string, result: string) {\n this.next({\n type: RuntimeEventTypes.ActionExecutionResult,\n actionName,\n actionExecutionId,\n result,\n });\n }\n}\n\nexport class RuntimeEventSource {\n private eventStream$ = new RuntimeEventSubject();\n private callback!: EventSourceCallback;\n\n async stream(callback: EventSourceCallback): Promise<void> {\n this.callback = callback;\n }\n\n process(serversideActions: Action<any>[]) {\n this.callback(this.eventStream$).catch((error) => {\n console.error(\"Error in event source callback\", error);\n });\n return this.eventStream$.pipe(\n // mark tools for server side execution\n map((event) => {\n if (event.type === RuntimeEventTypes.ActionExecutionStart) {\n event.scope = serversideActions.find((action) => action.name === event.actionName)\n ? \"server\"\n : \"client\";\n }\n return event;\n }),\n // track state\n scan(\n (acc, event) => {\n if (event.type === RuntimeEventTypes.ActionExecutionStart) {\n acc.callActionServerSide = event.scope === \"server\";\n acc.args = \"\";\n acc.actionExecutionId = event.actionExecutionId;\n if (acc.callActionServerSide) {\n acc.action = serversideActions.find((action) => action.name === event.actionName);\n }\n } else if (event.type === RuntimeEventTypes.ActionExecutionArgs) {\n acc.args += event.args;\n }\n\n acc.event = event;\n return acc;\n },\n {\n event: null,\n callActionServerSide: false,\n args: \"\",\n actionExecutionId: null,\n action: null,\n } as RuntimeEventWithState,\n ),\n concatMap((eventWithState) => {\n if (\n eventWithState.event!.type === RuntimeEventTypes.ActionExecutionEnd &&\n eventWithState.callActionServerSide\n ) {\n const toolCallEventStream$ = new RuntimeEventSubject();\n executeAction(\n toolCallEventStream$,\n eventWithState.action!,\n eventWithState.args,\n eventWithState.actionExecutionId,\n ).catch((error) => {\n console.error(error);\n });\n return concat(of(eventWithState.event!), toolCallEventStream$);\n } else {\n return of(eventWithState.event!);\n }\n }),\n );\n }\n}\n\nasync function executeAction(\n eventStream$: RuntimeEventSubject,\n action: Action<any>,\n actionArguments: string,\n actionExecutionId: string,\n) {\n // Prepare arguments for function calling\n let args: Record<string, any>[] = [];\n if (actionArguments) {\n args = JSON.parse(actionArguments);\n }\n\n // call the function\n const result = await action.handler(args);\n\n await streamLangChainResponse({\n result,\n eventStream$,\n actionExecution: {\n name: action.name,\n id: actionExecutionId,\n },\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","import { YogaInitialContext } from \"graphql-yoga\";\nimport { GuardrailsOptions } from \"../guardrails\";\nimport { buildSchemaSync } from \"type-graphql\";\nimport { CopilotResolver } from \"../../graphql/resolvers/copilot.resolver\";\nimport { useDeferStream } from \"@graphql-yoga/plugin-defer-stream\";\nimport { CopilotRuntime } from \"../copilot-runtime\";\nimport { CopilotServiceAdapter } from \"../../service-adapters\";\n\ntype AnyPrimitive = string | boolean | number | null;\nexport type CopilotRequestContextProperties = Record<\n string,\n AnyPrimitive | Record<string, AnyPrimitive>\n>;\n\ntype CopilotKitContext = {\n runtime: CopilotRuntime;\n serviceAdapter: CopilotServiceAdapter;\n properties: CopilotRequestContextProperties;\n};\n\nexport type GraphQLContext = YogaInitialContext & {\n _copilotkit: CopilotKitContext;\n};\n\nexport interface CreateCopilotRuntimeServerOptions {\n runtime: CopilotRuntime;\n serviceAdapter: CopilotServiceAdapter;\n guardrails?: GuardrailsOptions;\n}\n\nexport async function createContext(\n initialContext: YogaInitialContext,\n copilotKitContext: CopilotKitContext,\n): Promise<Partial<GraphQLContext>> {\n const ctx: GraphQLContext = {\n ...initialContext,\n _copilotkit: {\n ...copilotKitContext,\n },\n };\n\n return ctx;\n}\n\nexport function buildSchema(\n options: {\n emitSchemaFile?: string;\n } = {},\n) {\n const schema = buildSchemaSync({\n resolvers: [CopilotResolver],\n emitSchemaFile: options.emitSchemaFile,\n });\n return schema;\n}\n\nexport function getCommonConfig(options?: CreateCopilotRuntimeServerOptions) {\n return {\n schema: buildSchema(),\n plugins: [useDeferStream()],\n context: (ctx: YogaInitialContext): Promise<Partial<GraphQLContext>> =>\n createContext(ctx, {\n runtime: options.runtime,\n serviceAdapter: options.serviceAdapter,\n properties: {},\n }),\n };\n}\n","import { Arg, Ctx, Mutation, Query, Resolver } from \"type-graphql\";\nimport { Subject, firstValueFrom, shareReplay, skipWhile, takeWhile } from \"rxjs\";\nimport { GenerateCopilotResponseInput } from \"../inputs/generate-copilot-response.input\";\nimport { CopilotResponse } from \"../types/copilot-response.type\";\nimport { MessageRole } from \"../types/enums\";\nimport { Repeater } from \"graphql-yoga\";\nimport type { CopilotRequestContextProperties, GraphQLContext } from \"../../lib/integrations\";\nimport { nanoid } from \"nanoid\";\nimport { RuntimeEvent, RuntimeEventTypes } from \"../../service-adapters/events\";\nimport { MessageStatusUnion, SuccessMessageStatus } from \"../types/message-status.type\";\nimport { ResponseStatusUnion, SuccessResponseStatus } from \"../types/response-status.type\";\nimport { GraphQLJSONObject } from \"graphql-scalars\";\n\n@Resolver(() => CopilotResponse)\nexport class CopilotResolver {\n @Query(() => String)\n async hello() {\n return \"Hello World\";\n }\n\n @Mutation(() => CopilotResponse)\n async generateCopilotResponse(\n @Ctx() ctx: GraphQLContext,\n @Arg(\"data\") data: GenerateCopilotResponseInput,\n @Arg(\"properties\", () => GraphQLJSONObject, { nullable: true })\n properties?: CopilotRequestContextProperties,\n ) {\n if (properties) {\n ctx._copilotkit.properties = { ...ctx._copilotkit.properties, ...properties };\n }\n const copilotRuntime = ctx._copilotkit.runtime;\n const serviceAdapter = ctx._copilotkit.serviceAdapter;\n const responseStatus = new Subject<typeof ResponseStatusUnion>();\n\n const {\n eventSource,\n threadId = nanoid(),\n runId,\n } = await copilotRuntime.process({\n serviceAdapter,\n messages: data.messages,\n actions: data.frontend.actions,\n threadId: data.threadId,\n runId: data.runId,\n publicApiKey: undefined,\n });\n\n const response = {\n threadId,\n runId,\n status: firstValueFrom(responseStatus),\n messages: new Repeater(async (pushMessage, stopStreamingMessages) => {\n // run and process the event stream\n const eventStream = eventSource.process(copilotRuntime.actions).pipe(\n // shareReplay() ensures that later subscribers will see the whole stream instead of\n // just the events that were emitted after the subscriber was added.\n shareReplay(),\n );\n eventStream.subscribe({\n next: async (event) => {\n switch (event.type) {\n ////////////////////////////////\n // TextMessageStart\n ////////////////////////////////\n case RuntimeEventTypes.TextMessageStart:\n // create a sub stream that contains the message content\n const textMessageContentStream = eventStream.pipe(\n // skip until this message start event\n skipWhile((e) => e !== event),\n // take until the message end event\n takeWhile((e) => e.type != RuntimeEventTypes.TextMessageEnd),\n );\n\n // signal when we are done streaming\n const streamingTextStatus = new Subject<typeof MessageStatusUnion>();\n\n // push the new message\n pushMessage({\n id: nanoid(),\n status: firstValueFrom(streamingTextStatus),\n createdAt: new Date(),\n role: MessageRole.assistant,\n content: new Repeater(async (pushTextChunk, stopStreamingText) => {\n // push the message content\n await textMessageContentStream.forEach(async (e: RuntimeEvent) => {\n if (e.type == RuntimeEventTypes.TextMessageContent) {\n await pushTextChunk(e.content);\n }\n });\n stopStreamingText();\n streamingTextStatus.next(new SuccessMessageStatus());\n }),\n });\n break;\n ////////////////////////////////\n // ActionExecutionStart\n ////////////////////////////////\n case RuntimeEventTypes.ActionExecutionStart:\n const actionExecutionArgumentStream = eventStream.pipe(\n skipWhile((e) => e !== event),\n takeWhile((e) => e.type != RuntimeEventTypes.ActionExecutionEnd),\n );\n const streamingArgumentsStatus = new Subject<typeof MessageStatusUnion>();\n pushMessage({\n id: event.actionExecutionId,\n status: firstValueFrom(streamingArgumentsStatus),\n createdAt: new Date(),\n name: event.actionName,\n scope: event.scope!,\n arguments: new Repeater(async (pushArgumentsChunk, stopStreamingArguments) => {\n await actionExecutionArgumentStream.forEach(async (e: RuntimeEvent) => {\n if (e.type == RuntimeEventTypes.ActionExecutionArgs) {\n await pushArgumentsChunk(e.args);\n }\n });\n stopStreamingArguments();\n streamingArgumentsStatus.next(new SuccessMessageStatus());\n }),\n });\n break;\n ////////////////////////////////\n // ActionExecutionResult\n ////////////////////////////////\n case RuntimeEventTypes.ActionExecutionResult:\n pushMessage({\n id: nanoid(),\n status: new SuccessMessageStatus(),\n createdAt: new Date(),\n actionExecutionId: event.actionExecutionId,\n actionName: event.actionName,\n result: event.result,\n });\n break;\n }\n },\n error: (err) => console.error(\"Error in event source\", err),\n complete: () => {\n responseStatus.next(new SuccessResponseStatus());\n stopStreamingMessages();\n },\n });\n }),\n };\n\n return response;\n }\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MessageInput } from \"./message.input\";\nimport { FrontendInput } from \"./frontend.input\";\nimport { CloudInput } from \"./cloud.input\";\n\n@InputType()\nexport class GenerateCopilotResponseInput {\n @Field(() => String, { nullable: true })\n threadId?: string;\n\n @Field(() => String, { nullable: true })\n runId?: string;\n\n @Field(() => [MessageInput])\n messages: MessageInput[];\n\n @Field(() => FrontendInput)\n frontend: FrontendInput;\n\n @Field(() => CloudInput, { nullable: true })\n cloud?: CloudInput;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MessageRole, ActionExecutionScope } from \"../types/enums\";\nimport { BaseMessage } from \"../types/base\";\n\n// GraphQL does not support union types in inputs, so we need to use\n// optional fields for the different subtypes.\n@InputType()\nexport class MessageInput extends BaseMessage {\n @Field(() => TextMessageInput, { nullable: true })\n textMessage?: TextMessageInput;\n\n @Field(() => ActionExecutionMessageInput, { nullable: true })\n actionExecutionMessage?: ActionExecutionMessageInput;\n\n @Field(() => ResultMessageInput, { nullable: true })\n resultMessage?: ResultMessageInput;\n}\n\n@InputType()\nexport class TextMessageInput {\n @Field(() => String)\n content: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n}\n\n@InputType()\nexport class ActionExecutionMessageInput {\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n arguments: string;\n\n @Field(() => ActionExecutionScope)\n scope: ActionExecutionScope;\n}\n\n@InputType()\nexport class ResultMessageInput {\n @Field(() => String)\n actionExecutionId: string;\n\n @Field(() => String)\n actionName: string;\n\n @Field(() => String)\n result: string;\n}\n","import { registerEnumType } from \"type-graphql\";\n\nexport enum MessageRole {\n user = \"user\",\n assistant = \"assistant\",\n system = \"system\",\n}\n\nexport enum ActionExecutionScope {\n server = \"server\",\n client = \"client\",\n}\n\nregisterEnumType(MessageRole, {\n name: \"MessageRole\",\n description: \"The role of the message\",\n});\n\nregisterEnumType(ActionExecutionScope, {\n name: \"ActionExecutionScope\",\n description: \"The scope of the action\",\n});\n","import { Field, InputType } from \"type-graphql\";\nimport { ActionInput } from \"./action.input\";\n\n@InputType()\nexport class FrontendInput {\n @Field(() => String, { nullable: true })\n toDeprecate_fullContext?: string;\n\n @Field(() => [ActionInput])\n actions: ActionInput[];\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class ActionInput {\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n description: string;\n\n @Field(() => String)\n jsonSchema: string;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { GuardrailsInput } from \"./cloud-guardrails.input\";\n\n@InputType()\nexport class CloudInput {\n @Field(() => GuardrailsInput)\n guardrails: GuardrailsInput;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class GuardrailsRuleInput {\n @Field(() => String)\n id: string;\n\n @Field(() => [String], { nullable: true })\n allowList?: string[] = [];\n\n @Field(() => [String], { nullable: true })\n denyList?: string[] = [];\n}\n\n@InputType()\nexport class GuardrailsInput {\n @Field(() => [GuardrailsRuleInput], { nullable: true })\n inputValidationRules?: GuardrailsRuleInput[] = [];\n}\n","import { Field, InterfaceType, ObjectType } from \"type-graphql\";\nimport { MessageRole, ActionExecutionScope } from \"./enums\";\nimport { MessageStatusUnion } from \"./message-status.type\";\nimport { ResponseStatusUnion } from \"./response-status.type\";\n\n@InterfaceType({\n resolveType(value) {\n if (value.hasOwnProperty(\"content\")) {\n return TextMessageOutput;\n } else if (value.hasOwnProperty(\"name\")) {\n return ActionExecutionMessageOutput;\n } else if (value.hasOwnProperty(\"result\")) {\n return ResultMessageOutput;\n }\n return undefined;\n },\n})\nabstract class BaseMessageOutput {\n @Field(() => String)\n id: string;\n\n @Field(() => Date)\n createdAt: Date;\n\n @Field(() => MessageStatusUnion)\n status: typeof MessageStatusUnion;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class TextMessageOutput {\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => [String])\n content: string[];\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ActionExecutionMessageOutput {\n @Field(() => String)\n name: string;\n\n @Field(() => ActionExecutionScope)\n scope: ActionExecutionScope;\n\n @Field(() => [String])\n arguments: string[];\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ResultMessageOutput {\n @Field(() => String)\n actionExecutionId: string;\n\n @Field(() => String)\n actionName: string;\n\n @Field(() => String)\n result: string;\n}\n\n@ObjectType()\nexport class CopilotResponse {\n @Field(() => String)\n threadId!: string;\n\n @Field(() => ResponseStatusUnion)\n status: typeof ResponseStatusUnion;\n\n @Field({ nullable: true })\n runId?: string;\n\n @Field(() => [BaseMessageOutput])\n messages: (typeof BaseMessageOutput)[];\n}\n","import { Field, ObjectType, createUnionType, registerEnumType } from \"type-graphql\";\n\nexport enum MessageStatusCode {\n Pending = \"pending\",\n Success = \"success\",\n Failed = \"failed\",\n}\n\nregisterEnumType(MessageStatusCode, {\n name: \"MessageStatusCode\",\n});\n\n@ObjectType()\nclass BaseMessageStatus {\n @Field(() => MessageStatusCode)\n code: MessageStatusCode;\n}\n\n@ObjectType()\nexport class PendingMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Pending;\n}\n\n@ObjectType()\nexport class SuccessMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Success;\n}\n\n@ObjectType()\nexport class FailedMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Failed;\n\n @Field(() => String)\n reason: string;\n}\n\nexport const MessageStatusUnion = createUnionType({\n name: \"MessageStatus\",\n types: () => [PendingMessageStatus, SuccessMessageStatus, FailedMessageStatus] as const,\n});\n","import { Field, InterfaceType, ObjectType, createUnionType, registerEnumType } from \"type-graphql\";\n\nexport enum ResponseStatusCode {\n Pending = \"pending\",\n Success = \"success\",\n Failed = \"failed\",\n}\n\nregisterEnumType(ResponseStatusCode, {\n name: \"ResponseStatusCode\",\n});\n\n@InterfaceType({\n resolveType(value) {\n if (value.code === ResponseStatusCode.Success) {\n return SuccessResponseStatus;\n } else if (value.code === ResponseStatusCode.Failed) {\n return FailedResponseStatus;\n } else if (value.code === ResponseStatusCode.Pending) {\n return PendingResponseStatus;\n }\n return undefined;\n },\n})\n@ObjectType()\nabstract class BaseResponseStatus {\n @Field(() => ResponseStatusCode)\n code: ResponseStatusCode;\n}\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class PendingResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Pending;\n}\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class SuccessResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Success;\n}\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class FailedResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Failed;\n\n @Field(() => String)\n reason: string;\n}\n\nexport const ResponseStatusUnion = createUnionType({\n name: \"ResponseStatus\",\n types: () => [PendingResponseStatus, SuccessResponseStatus, FailedResponseStatus] as const,\n});\n","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","import { createYoga } from \"graphql-yoga\";\nimport { getCommonConfig } from \"../shared\";\nimport { CopilotRuntime } from \"../../copilot-runtime\";\nimport { CopilotServiceAdapter } from \"../../../service-adapters\";\n\nexport function copilotRuntimeNodeHttpEndpoint({\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 });\n\n return yoga;\n}\n"],"mappings":"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","names":["import_shared","BaseMessage","id","createdAt","Field","String","Date","InputType","TextMessage","BaseMessage","content","role","ActionExecutionMessage","name","arguments","scope","ResultMessage","actionExecutionId","actionName","result","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","import_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","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","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","import_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","LangChainAdapter","constructor","options","process","eventSource","model","actions","messages","threadId","runId","result","chainFn","map","convertMessageToLangChainMessage","tools","convertActionInputToLangChainTool","stream","eventStream$","streamLangChainResponse","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","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","RuntimeEventTypes","RuntimeEventSubject","ReplaySubject","constructor","sendTextMessageStart","messageId","next","type","sendTextMessageContent","content","sendTextMessageEnd","sendTextMessage","sendActionExecutionStart","actionExecutionId","actionName","sendActionExecutionArgs","args","sendActionExecutionEnd","sendActionExecution","toolName","sendActionExecutionResult","result","RuntimeEventSource","eventStream$","callback","stream","process","serversideActions","catch","error","console","pipe","map","event","scope","find","action","name","scan","acc","callActionServerSide","concatMap","eventWithState","toolCallEventStream$","executeAction","concat","of","actionArguments","JSON","parse","handler","streamLangChainResponse","actionExecution","id","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","import_type_graphql","import_type_graphql","import_rxjs","import_type_graphql","import_type_graphql","import_type_graphql","MessageRole","ActionExecutionScope","registerEnumType","name","description","MessageInput","BaseMessage","textMessage","actionExecutionMessage","resultMessage","Field","TextMessageInput","nullable","ActionExecutionMessageInput","ResultMessageInput","InputType","content","role","String","MessageRole","name","arguments","scope","ActionExecutionScope","actionExecutionId","actionName","result","import_type_graphql","import_type_graphql","ActionInput","name","description","jsonSchema","Field","String","InputType","FrontendInput","toDeprecate_fullContext","actions","Field","String","nullable","ActionInput","InputType","import_type_graphql","import_type_graphql","GuardrailsRuleInput","id","allowList","denyList","Field","String","nullable","InputType","GuardrailsInput","inputValidationRules","CloudInput","guardrails","Field","GuardrailsInput","InputType","GenerateCopilotResponseInput","threadId","runId","messages","frontend","cloud","Field","String","nullable","MessageInput","FrontendInput","CloudInput","InputType","import_type_graphql","import_type_graphql","MessageStatusCode","registerEnumType","name","BaseMessageStatus","code","Field","ObjectType","PendingMessageStatus","SuccessMessageStatus","FailedMessageStatus","reason","String","MessageStatusUnion","createUnionType","types","import_type_graphql","ResponseStatusCode","registerEnumType","name","BaseResponseStatus","code","Field","InterfaceType","resolveType","value","SuccessResponseStatus","FailedResponseStatus","PendingResponseStatus","undefined","ObjectType","implements","reason","String","ResponseStatusUnion","createUnionType","types","BaseMessageOutput","id","createdAt","status","Field","String","Date","MessageStatusUnion","InterfaceType","resolveType","value","hasOwnProperty","TextMessageOutput","ActionExecutionMessageOutput","ResultMessageOutput","undefined","role","content","MessageRole","ObjectType","implements","name","scope","arguments","ActionExecutionScope","actionExecutionId","actionName","result","CopilotResponse","threadId","runId","messages","ResponseStatusUnion","nullable","import_nanoid","CopilotResolver","hello","generateCopilotResponse","ctx","data","properties","_copilotkit","copilotRuntime","runtime","serviceAdapter","responseStatus","Subject","eventSource","threadId","nanoid","runId","process","messages","actions","frontend","publicApiKey","undefined","response","status","firstValueFrom","Repeater","pushMessage","stopStreamingMessages","eventStream","pipe","shareReplay","subscribe","next","event","type","RuntimeEventTypes","TextMessageStart","textMessageContentStream","skipWhile","e","takeWhile","TextMessageEnd","streamingTextStatus","id","createdAt","Date","role","MessageRole","assistant","content","pushTextChunk","stopStreamingText","forEach","TextMessageContent","SuccessMessageStatus","ActionExecutionStart","actionExecutionArgumentStream","ActionExecutionEnd","streamingArgumentsStatus","actionExecutionId","name","actionName","scope","arguments","pushArgumentsChunk","stopStreamingArguments","ActionExecutionArgs","args","ActionExecutionResult","result","error","err","console","complete","SuccessResponseStatus","Query","String","Mutation","CopilotResponse","Ctx","Arg","GraphQLJSONObject","nullable","Resolver","createContext","initialContext","copilotKitContext","ctx","_copilotkit","buildSchema","options","schema","buildSchemaSync","resolvers","CopilotResolver","emitSchemaFile","getCommonConfig","plugins","useDeferStream","context","runtime","serviceAdapter","properties","import_graphql_yoga","copilotRuntimeNextJSAppRouterEndpoint","runtime","endpoint","serviceAdapter","commonConfig","getCommonConfig","yoga","createYoga","graphqlEndpoint","fetchAPI","Response","globalThis","handleRequest","GET","POST","OPTIONS","import_graphql_yoga","config","api","bodyParser","copilotRuntimeNextJSPagesRouterEndpoint","runtime","endpoint","serviceAdapter","commonConfig","getCommonConfig","yoga","createYoga","graphqlEndpoint","import_graphql_yoga","copilotRuntimeNodeHttpEndpoint","runtime","endpoint","serviceAdapter","commonConfig","getCommonConfig","yoga","createYoga","graphqlEndpoint"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,49 @@
1
+ import {
2
+ CopilotBackend,
3
+ CopilotCloud,
4
+ CopilotRuntime,
5
+ RemoteCopilotCloud,
6
+ flattenToolCallsNoDuplicates
7
+ } from "./chunk-4UA4RB4C.mjs";
8
+ import {
9
+ GoogleGenerativeAIAdapter,
10
+ LangChainAdapter,
11
+ OpenAIAdapter,
12
+ OpenAIAssistantAdapter
13
+ } from "./chunk-5HGYI6EG.mjs";
14
+ import {
15
+ config,
16
+ copilotRuntimeNextJSAppRouterEndpoint,
17
+ copilotRuntimeNextJSPagesRouterEndpoint
18
+ } from "./chunk-2CCVVJDU.mjs";
19
+ import {
20
+ buildSchema,
21
+ copilotRuntimeNodeHttpEndpoint,
22
+ createContext,
23
+ getCommonConfig
24
+ } from "./chunk-XPAUPJMW.mjs";
25
+ import "./chunk-7IFP53C6.mjs";
26
+ import "./chunk-BLTAUVRP.mjs";
27
+ import "./chunk-NFCPM5AM.mjs";
28
+
29
+ // src/index.ts
30
+ import "reflect-metadata";
31
+ export {
32
+ CopilotBackend,
33
+ CopilotCloud,
34
+ CopilotRuntime,
35
+ GoogleGenerativeAIAdapter,
36
+ LangChainAdapter,
37
+ OpenAIAdapter,
38
+ OpenAIAssistantAdapter,
39
+ RemoteCopilotCloud,
40
+ buildSchema,
41
+ config,
42
+ copilotRuntimeNextJSAppRouterEndpoint,
43
+ copilotRuntimeNextJSPagesRouterEndpoint,
44
+ copilotRuntimeNodeHttpEndpoint,
45
+ createContext,
46
+ flattenToolCallsNoDuplicates,
47
+ getCommonConfig
48
+ };
49
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import \"reflect-metadata\";\nexport * from \"./lib\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO;","names":[]}
@@ -0,0 +1,200 @@
1
+ import OpenAI from 'openai';
2
+ import { C as CopilotServiceAdapter, b as CopilotRuntimeChatCompletionRequest, c as CopilotRuntimeChatCompletionResponse } from './langserve-fd5066ee.js';
3
+ import { GenerativeModel } from '@google/generative-ai';
4
+ import { BaseMessageChunk, AIMessage, AIMessageChunk, BaseMessage } from '@langchain/core/messages';
5
+ import { DynamicStructuredTool } from '@langchain/core/tools';
6
+ import { IterableReadableStream, IterableReadableStreamInterface } from '@langchain/core/utils/stream';
7
+
8
+ /**
9
+ * CopilotRuntime Adapter for OpenAI.
10
+ *
11
+ * <RequestExample>
12
+ * ```jsx CopilotRuntime Example
13
+ * const copilotKit = new CopilotRuntime();
14
+ * return copilotKit.response(req, new OpenAIAdapter());
15
+ * ```
16
+ * </RequestExample>
17
+ *
18
+ * You can easily set the model to use by passing it to the constructor.
19
+ * ```jsx
20
+ * const copilotKit = new CopilotRuntime();
21
+ * return copilotKit.response(
22
+ * req,
23
+ * new OpenAIAdapter({ model: "gpt-4o" }),
24
+ * );
25
+ * ```
26
+ *
27
+ * To use your custom OpenAI instance, pass the `openai` property.
28
+ * ```jsx
29
+ * const openai = new OpenAI({
30
+ * organization: "your-organization-id",
31
+ * apiKey: "your-api-key"
32
+ * });
33
+ *
34
+ * const copilotKit = new CopilotRuntime();
35
+ * return copilotKit.response(
36
+ * req,
37
+ * new OpenAIAdapter({ openai }),
38
+ * );
39
+ * ```
40
+ *
41
+ */
42
+
43
+ interface OpenAIAdapterParams {
44
+ /**
45
+ * An optional OpenAI instance to use.
46
+ */
47
+ openai?: OpenAI;
48
+ /**
49
+ * The model to use.
50
+ */
51
+ model?: string;
52
+ }
53
+ declare class OpenAIAdapter implements CopilotServiceAdapter {
54
+ private model;
55
+ private _openai;
56
+ get openai(): OpenAI;
57
+ constructor(params?: OpenAIAdapterParams);
58
+ process({ model, messages, actions, eventSource, }: CopilotRuntimeChatCompletionRequest): Promise<CopilotRuntimeChatCompletionResponse>;
59
+ }
60
+
61
+ /**
62
+ * CopilotKit Adapter for the OpenAI Assistant API.
63
+ *
64
+ * Use this adapter to get responses from the OpenAI Assistant API.
65
+ *
66
+ * <RequestExample>
67
+ * ```typescript
68
+ * const copilotKit = new CopilotRuntime();
69
+ * return copilotKit.response(
70
+ * req,
71
+ * new OpenAIAssistantAdapter({
72
+ * assistantId: "your-assistant-id"
73
+ * })
74
+ * );
75
+ * ```
76
+ * </RequestExample>
77
+ */
78
+
79
+ interface OpenAIAssistantAdapterParams {
80
+ /**
81
+ * The ID of the assistant to use.
82
+ */
83
+ assistantId: string;
84
+ /**
85
+ * An instance of `OpenAI` to use for the request. If not provided, a new instance will be created.
86
+ */
87
+ openai?: OpenAI;
88
+ /**
89
+ * Whether to enable the code interpreter. Defaults to `true`.
90
+ */
91
+ codeInterpreterEnabled?: boolean;
92
+ /**
93
+ * Whether to enable retrieval. Defaults to `true`.
94
+ */
95
+ fileSearchEnabled?: boolean;
96
+ }
97
+ declare class OpenAIAssistantAdapter implements CopilotServiceAdapter {
98
+ private openai;
99
+ private codeInterpreterEnabled;
100
+ private assistantId;
101
+ private fileSearchEnabled;
102
+ constructor(params: OpenAIAssistantAdapterParams);
103
+ process({ messages, actions, eventSource, threadId, runId, }: CopilotRuntimeChatCompletionRequest): Promise<CopilotRuntimeChatCompletionResponse>;
104
+ private submitToolOutputs;
105
+ private submitUserMessage;
106
+ private streamResponse;
107
+ }
108
+
109
+ /**
110
+ * CopilotKit Adapter for Google Gemini
111
+ *
112
+ * Use this adapter for a Google Gemini backend.
113
+ *
114
+ * <RequestExample>
115
+ * ```typescript
116
+ * const copilotKit = new CopilotRuntime();
117
+ * return copilotKit.response(
118
+ * req,
119
+ * new GoogleGenerativeAIAdapter()
120
+ * );
121
+ * ```
122
+ * </RequestExample>
123
+ *
124
+ * To set up a different model, pass the model prop:
125
+ *
126
+ * ```typescript
127
+ * const copilotKit = new CopilotRuntime();
128
+ * const genAI = new GoogleGenerativeAI(
129
+ * process.env["GOOGLE_API_KEY"]!
130
+ * );
131
+ * const model = genAI.getGenerativeModel(
132
+ * { model: "gemini-pro" }
133
+ * );
134
+ * return copilotKit.response(
135
+ * req,
136
+ * new GoogleGenerativeAIAdapter()
137
+ * );
138
+ * ```
139
+ */
140
+
141
+ interface GoogleGenerativeAIAdapterOptions {
142
+ /**
143
+ * A custom `GenerativeModel` to use for the request.
144
+ */
145
+ model?: GenerativeModel;
146
+ }
147
+ declare class GoogleGenerativeAIAdapter implements CopilotServiceAdapter {
148
+ private model;
149
+ constructor(options?: GoogleGenerativeAIAdapterOptions);
150
+ process(request: CopilotRuntimeChatCompletionRequest): Promise<CopilotRuntimeChatCompletionResponse>;
151
+ }
152
+
153
+ type LangChainBaseMessageChunkStream = IterableReadableStream<BaseMessageChunk>;
154
+ type LangChainAIMessageChunkStream = IterableReadableStreamInterface<AIMessageChunk>;
155
+ type LangChainReturnType = LangChainBaseMessageChunkStream | LangChainAIMessageChunkStream | BaseMessageChunk | string | AIMessage;
156
+
157
+ /**
158
+ * CopilotKit Adapter for LangChain
159
+ *
160
+ * Use this adapter to use LangChain as a backend.
161
+ *
162
+ * ```typescript
163
+ * return copilotKit.response(
164
+ * req,
165
+ * new LangChainAdapter(async (forwardedProps) => {
166
+ * const model = new ChatOpenAI({ modelName: "gpt-4o" });
167
+ * return model.stream(forwardedProps.messages, {
168
+ * tools: forwardedProps.tools,
169
+ * });
170
+ * })
171
+ * );
172
+ * ```
173
+ * The async handler function can return:
174
+ *
175
+ * - a simple `string` response
176
+ * - a LangChain stream `IterableReadableStream`
177
+ * - a LangChain `BaseMessageChunk` object
178
+ * - a LangChain `AIMessage` object
179
+ */
180
+
181
+ interface ChainFnParameters {
182
+ model: string;
183
+ messages: BaseMessage[];
184
+ tools: DynamicStructuredTool[];
185
+ threadId?: string;
186
+ runId?: string;
187
+ }
188
+ interface LangChainAdapterOptions {
189
+ chainFn: (parameters: ChainFnParameters) => Promise<LangChainReturnType>;
190
+ }
191
+ declare class LangChainAdapter implements CopilotServiceAdapter {
192
+ private options;
193
+ /**
194
+ * To use LangChain as a backend, provide a handler function to the adapter with your custom LangChain logic.
195
+ */
196
+ constructor(options: LangChainAdapterOptions);
197
+ process({ eventSource, model, actions, messages, threadId, runId, }: CopilotRuntimeChatCompletionRequest): Promise<CopilotRuntimeChatCompletionResponse>;
198
+ }
199
+
200
+ export { GoogleGenerativeAIAdapter as G, LangChainAdapter as L, OpenAIAdapterParams as O, OpenAIAdapter as a, OpenAIAssistantAdapterParams as b, OpenAIAssistantAdapter as c };