@copilotkit/runtime 1.4.8-no-pino-redact.1 → 1.4.8

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 (52) hide show
  1. package/CHANGELOG.md +9 -7
  2. package/dist/{chunk-OSWF5QDO.mjs → chunk-GGNRDS7N.mjs} +2 -2
  3. package/dist/{chunk-APVJZO3R.mjs → chunk-LSLFIYKP.mjs} +2 -2
  4. package/dist/{chunk-36AYTJIE.mjs → chunk-R6AUAQK6.mjs} +29 -27
  5. package/dist/chunk-R6AUAQK6.mjs.map +1 -0
  6. package/dist/{chunk-M74ZTUCC.mjs → chunk-TA5I5LYF.mjs} +2 -2
  7. package/dist/{chunk-OKQVDDJ2.mjs → chunk-W7GP2EOT.mjs} +50 -2
  8. package/dist/chunk-W7GP2EOT.mjs.map +1 -0
  9. package/dist/{copilot-runtime-12e7ac40.d.ts → copilot-runtime-48d7c2fc.d.ts} +1 -1
  10. package/dist/{groq-adapter-24abe931.d.ts → groq-adapter-ac43305a.d.ts} +1 -1
  11. package/dist/index.d.ts +4 -4
  12. package/dist/index.js +83 -31
  13. package/dist/index.js.map +1 -1
  14. package/dist/index.mjs +9 -5
  15. package/dist/index.mjs.map +1 -1
  16. package/dist/{langserve-f021ab9c.d.ts → langserve-b74e8606.d.ts} +2 -2
  17. package/dist/lib/index.d.ts +3 -3
  18. package/dist/lib/index.js +16 -14
  19. package/dist/lib/index.js.map +1 -1
  20. package/dist/lib/index.mjs +5 -5
  21. package/dist/lib/integrations/index.d.ts +3 -3
  22. package/dist/lib/integrations/index.js +9 -2
  23. package/dist/lib/integrations/index.js.map +1 -1
  24. package/dist/lib/integrations/index.mjs +5 -5
  25. package/dist/lib/integrations/nest/index.d.ts +2 -2
  26. package/dist/lib/integrations/nest/index.js +9 -2
  27. package/dist/lib/integrations/nest/index.js.map +1 -1
  28. package/dist/lib/integrations/nest/index.mjs +3 -3
  29. package/dist/lib/integrations/node-express/index.d.ts +2 -2
  30. package/dist/lib/integrations/node-express/index.js +9 -2
  31. package/dist/lib/integrations/node-express/index.js.map +1 -1
  32. package/dist/lib/integrations/node-express/index.mjs +3 -3
  33. package/dist/lib/integrations/node-http/index.d.ts +2 -2
  34. package/dist/lib/integrations/node-http/index.js +9 -2
  35. package/dist/lib/integrations/node-http/index.js.map +1 -1
  36. package/dist/lib/integrations/node-http/index.mjs +2 -2
  37. package/dist/service-adapters/index.d.ts +35 -4
  38. package/dist/service-adapters/index.js +50 -0
  39. package/dist/service-adapters/index.js.map +1 -1
  40. package/dist/service-adapters/index.mjs +5 -1
  41. package/package.json +2 -2
  42. package/src/lib/logger.ts +4 -0
  43. package/src/lib/runtime/copilot-runtime.ts +1 -7
  44. package/src/lib/runtime/remote-action-constructors.ts +61 -57
  45. package/src/service-adapters/events.ts +2 -2
  46. package/src/service-adapters/experimental/empty/empty-adapter.ts +33 -0
  47. package/src/service-adapters/index.ts +7 -1
  48. package/dist/chunk-36AYTJIE.mjs.map +0 -1
  49. package/dist/chunk-OKQVDDJ2.mjs.map +0 -1
  50. /package/dist/{chunk-OSWF5QDO.mjs.map → chunk-GGNRDS7N.mjs.map} +0 -0
  51. /package/dist/{chunk-APVJZO3R.mjs.map → chunk-LSLFIYKP.mjs.map} +0 -0
  52. /package/dist/{chunk-M74ZTUCC.mjs.map → chunk-TA5I5LYF.mjs.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/service-adapters/langchain/langserve.ts","../src/service-adapters/openai/openai-adapter.ts","../src/service-adapters/openai/utils.ts","../src/service-adapters/langchain/utils.ts","../src/service-adapters/langchain/langchain-adapter.ts","../src/service-adapters/google/google-genai-adapter.ts","../src/service-adapters/openai/openai-assistant-adapter.ts","../src/service-adapters/unify/unify-adapter.ts","../src/service-adapters/groq/groq-adapter.ts","../src/service-adapters/anthropic/anthropic-adapter.ts","../src/service-adapters/anthropic/utils.ts","../src/service-adapters/experimental/ollama/ollama-adapter.ts","../src/service-adapters/experimental/empty/empty-adapter.ts"],"sourcesContent":["import { Parameter, Action } from \"@copilotkit/shared\";\nimport { RemoteRunnable } from \"langchain/runnables/remote\";\n\nexport interface RemoteChainParameters {\n name: string;\n description: string;\n chainUrl: string;\n parameters?: Parameter[];\n parameterType?: \"single\" | \"multi\";\n}\n\nexport class RemoteChain {\n name: string;\n description: string;\n chainUrl: string;\n parameters?: Parameter[];\n parameterType: \"single\" | \"multi\";\n\n constructor(options: RemoteChainParameters) {\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","/**\n * Copilot Runtime adapter for OpenAI.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * organization: \"<your-organization-id>\", // optional\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new OpenAIAdapter({ openai });\n * ```\n *\n * ## Example with Azure OpenAI\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * // The name of your Azure OpenAI Instance.\n * // https://learn.microsoft.com/en-us/azure/cognitive-services/openai/how-to/create-resource?pivots=web-portal#create-a-resource\n * const instance = \"<your instance name>\";\n *\n * // Corresponds to your Model deployment within your OpenAI resource, e.g. my-gpt35-16k-deployment\n * // Navigate to the Azure OpenAI Studio to deploy a model.\n * const model = \"<your model>\";\n *\n * const apiKey = process.env[\"AZURE_OPENAI_API_KEY\"];\n * if (!apiKey) {\n * throw new Error(\"The AZURE_OPENAI_API_KEY environment variable is missing or empty.\");\n * }\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * apiKey,\n * baseURL: `https://${instance}.openai.azure.com/openai/deployments/${model}`,\n * defaultQuery: { \"api-version\": \"2024-04-01-preview\" },\n * defaultHeaders: { \"api-key\": apiKey },\n * });\n *\n * return new OpenAIAdapter({ openai });\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\";\nimport { randomId } from \"@copilotkit/shared\";\n\nconst DEFAULT_MODEL = \"gpt-4o\";\n\nexport interface OpenAIAdapterParams {\n /**\n * An optional OpenAI instance to use. If not provided, a new instance will be\n * created.\n */\n openai?: OpenAI;\n\n /**\n * The model to use.\n */\n model?: string;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n}\n\nexport class OpenAIAdapter implements CopilotServiceAdapter {\n private model: string = DEFAULT_MODEL;\n\n private disableParallelToolCalls: boolean = false;\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 this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId,\n model = this.model,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToOpenAITool);\n\n let openaiMessages = messages.map(convertMessageToOpenAIMessage);\n openaiMessages = limitMessagesToTokenCount(openaiMessages, tools, model);\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"function\",\n function: { name: forwardedParameters.toolChoiceFunctionName },\n };\n }\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 ...(forwardedParameters?.maxTokens && { max_tokens: forwardedParameters.maxTokens }),\n ...(forwardedParameters?.stop && { stop: forwardedParameters.stop }),\n ...(toolChoice && { tool_choice: toolChoice }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n });\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n\n for await (const chunk of stream) {\n if (chunk.choices.length === 0) {\n continue;\n }\n\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 threadId: threadId || randomId(),\n };\n }\n}\n","import { Message } from \"../../graphql/types/converted\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport {\n ChatCompletionMessageParam,\n ChatCompletionTool,\n ChatCompletionUserMessageParam,\n ChatCompletionAssistantMessageParam,\n ChatCompletionSystemMessageParam,\n} 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 return text.length / 3;\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.isTextMessage()) {\n return {\n role: message.role as ChatCompletionUserMessageParam[\"role\"],\n content: message.content,\n } satisfies\n | ChatCompletionUserMessageParam\n | ChatCompletionAssistantMessageParam\n | ChatCompletionSystemMessageParam;\n } else if (message.isActionExecutionMessage()) {\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.isResultMessage()) {\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","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 { randomId, convertJsonSchemaToZodSchema } from \"@copilotkit/shared\";\n\nexport function convertMessageToLangChainMessage(message: Message): BaseMessage {\n if (message.isTextMessage()) {\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.isActionExecutionMessage()) {\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.isResultMessage()) {\n return new ToolMessage({\n content: message.result,\n tool_call_id: message.actionExecutionId,\n });\n }\n}\n\nexport function convertActionInputToLangChainTool(actionInput: ActionInput): any {\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\nfunction getConstructorName(object: any): string {\n if (object && typeof object === \"object\" && object.constructor && object.constructor.name) {\n return object.constructor.name;\n }\n return \"\";\n}\n\nfunction isAIMessage(message: any): message is AIMessage {\n return Object.prototype.toString.call(message) === \"[object AIMessage]\";\n}\n\nfunction isAIMessageChunk(message: any): message is AIMessageChunk {\n return Object.prototype.toString.call(message) === \"[object AIMessageChunk]\";\n}\n\nfunction isBaseMessageChunk(message: any): message is BaseMessageChunk {\n return Object.prototype.toString.call(message) === \"[object BaseMessageChunk]\";\n}\n\nfunction maybeSendActionExecutionResultIsMessage(\n eventStream$: RuntimeEventSubject,\n actionExecution?: { id: string; name: string },\n) {\n // language models need a result after the function call\n // we simply let them know that we are sending a message\n if (actionExecution) {\n eventStream$.sendActionExecutionResult(\n actionExecution.id,\n actionExecution.name,\n \"Sending a message\",\n );\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(randomId(), 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 (isAIMessage(result)) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n if (result.content) {\n eventStream$.sendTextMessage(randomId(), result.content as string);\n }\n for (const toolCall of result.tool_calls) {\n eventStream$.sendActionExecution(\n toolCall.id || randomId(),\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 (isBaseMessageChunk(result)) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n if (result.lc_kwargs?.content) {\n eventStream$.sendTextMessage(randomId(), 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 || randomId(),\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 (result && \"getReader\" in result) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n let reader = result.getReader();\n\n let mode: \"function\" | \"message\" | null = null;\n\n const toolCallDetails = {\n name: null,\n id: null,\n index: null,\n prevIndex: null,\n };\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 (isAIMessageChunk(value)) {\n let chunk = value.tool_call_chunks?.[0];\n toolCallArgs = chunk?.args;\n hasToolCall = chunk != undefined;\n if (chunk?.name) toolCallDetails.name = chunk.name;\n // track different index on the same tool cool\n if (chunk?.index != null) {\n toolCallDetails.index = chunk.index; // 1\n if (toolCallDetails.prevIndex == null) toolCallDetails.prevIndex = chunk.index;\n }\n // Differentiate when calling the same tool but with different index\n if (chunk?.id)\n toolCallDetails.id = chunk.index != null ? `${chunk.id}-idx-${chunk.index}` : chunk.id;\n\n // Assign to internal variables that the entire script here knows how to work with\n toolCallName = toolCallDetails.name;\n toolCallId = toolCallDetails.id;\n } else if (isBaseMessageChunk(value)) {\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 && toolCallId && toolCallName) {\n mode = \"function\";\n eventStream$.sendActionExecutionStart(toolCallId, toolCallName);\n } else if (content) {\n mode = \"message\";\n eventStream$.sendTextMessageStart(randomId());\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent(\n Array.isArray(content) ? (content[0]?.text ?? \"\") : content,\n );\n } else if (mode === \"function\" && toolCallArgs) {\n // For calls of the same tool with different index, we seal last tool call and register a new one\n if (toolCallDetails.index !== toolCallDetails.prevIndex) {\n eventStream$.sendActionExecutionEnd();\n eventStream$.sendActionExecutionStart(toolCallId, toolCallName);\n toolCallDetails.prevIndex = toolCallDetails.index;\n }\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 encodeResult(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\nfunction encodeResult(result: any): string {\n if (result === undefined) {\n return \"\";\n } else if (typeof result === \"string\") {\n return result;\n } else {\n return JSON.stringify(result);\n }\n}\n","/**\n * Copilot Runtime adapter for LangChain.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, LangChainAdapter } from \"@copilotkit/runtime\";\n * import { ChatOpenAI } from \"@langchain/openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const model = new ChatOpenAI({\n * model: \"gpt-4o\",\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new LangChainAdapter({\n * chainFn: async ({ messages, tools }) => {\n * return model.bindTools(tools).stream(messages);\n * // or optionally enable strict mode\n * // return model.bindTools(tools, { strict: true }).stream(messages);\n * }\n * });\n * ```\n *\n * The asynchronous handler function (`chainFn`) can return any of the following:\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\";\nimport { randomId } from \"@copilotkit/shared\";\nimport { awaitAllCallbacks } from \"@langchain/core/callbacks/promises\";\n\ninterface ChainFnParameters {\n model: string;\n messages: BaseMessage[];\n tools: DynamicStructuredTool[];\n threadId?: string;\n runId?: string;\n}\n\ninterface LangChainAdapterOptions {\n /**\n * A function that uses the LangChain API to generate a response.\n */\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 request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n try {\n const { eventSource, model, actions, messages, runId } = request;\n const threadId = request.threadId ?? randomId();\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 threadId,\n };\n } finally {\n await awaitAllCallbacks();\n }\n }\n}\n","/**\n * Copilot Runtime adapter for Google Generative AI (e.g. Gemini).\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, GoogleGenerativeAIAdapter } from \"@copilotkit/runtime\";\n * const { GoogleGenerativeAI } = require(\"@google/generative-ai\");\n *\n * const genAI = new GoogleGenerativeAI(process.env[\"GOOGLE_API_KEY\"]);\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new GoogleGenerativeAIAdapter({ model: \"gemini-1.5-pro\" });\n * ```\n */\nimport { ChatGoogle } from \"@langchain/google-gauth\";\nimport { LangChainAdapter } from \"../langchain/langchain-adapter\";\n\ninterface GoogleGenerativeAIAdapterOptions {\n /**\n * A custom Google Generative AI model to use.\n */\n model?: string;\n}\n\nexport class GoogleGenerativeAIAdapter extends LangChainAdapter {\n constructor(options?: GoogleGenerativeAIAdapterOptions) {\n super({\n chainFn: async ({ messages, tools, threadId }) => {\n const model = new ChatGoogle({\n modelName: options?.model ?? \"gemini-1.5-pro\",\n apiVersion: \"v1beta\",\n }).bindTools(tools);\n return model.stream(messages, { metadata: { conversation_id: threadId } });\n },\n });\n }\n}\n","/**\n * Copilot Runtime adapter for the OpenAI Assistant API.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAssistantAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * organization: \"<your-organization-id>\",\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new OpenAIAssistantAdapter({\n * openai,\n * assistantId: \"<your-assistant-id>\",\n * codeInterpreterEnabled: true,\n * fileSearchEnabled: true,\n * });\n * ```\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\";\nimport { ForwardedParametersInput } from \"../../graphql/inputs/forwarded-parameters.input\";\n\nexport interface OpenAIAssistantAdapterParams {\n /**\n * The ID of the assistant to use.\n */\n assistantId: string;\n\n /**\n * An optional OpenAI instance to use. If not provided, a new instance will be created.\n */\n openai?: OpenAI;\n\n /**\n * Whether to enable code interpretation.\n * @default true\n */\n codeInterpreterEnabled?: boolean;\n\n /**\n * Whether to enable file search.\n * @default true\n */\n fileSearchEnabled?: boolean;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: 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 private disableParallelToolCalls: 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 this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource, runId, forwardedParameters } = request;\n // if we don't have a threadId, create a new thread\n let threadId = request.threadId || (await this.openai.beta.threads.create()).id;\n\n const lastMessage = messages.at(-1);\n\n let nextRunId: string | undefined = undefined;\n\n // submit function outputs\n if (lastMessage.isResultMessage() && runId) {\n nextRunId = await this.submitToolOutputs(threadId, runId, messages, eventSource);\n }\n // submit user message\n else if (lastMessage.isTextMessage()) {\n nextRunId = await this.submitUserMessage(\n threadId,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n );\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) => message.isResultMessage() && 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 ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\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 forwardedParameters: ForwardedParametersInput,\n ) {\n messages = [...messages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage() ? 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 ...(forwardedParameters?.maxTokens && {\n max_completion_tokens: forwardedParameters.maxTokens,\n }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\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 Unify\n *\n * <RequestExample>\n * ```jsx CopilotRuntime Example\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(req, new UnifyAdapter());\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 UnifyAdapter({ model: \"llama-3-8b-chat@fireworks-ai\" }),\n * );\n * ```\n */\nimport { TextMessage } from \"../../graphql/types/converted\";\nimport {\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n CopilotServiceAdapter,\n} from \"../service-adapter\";\nimport OpenAI from \"openai\";\nimport { randomId } from \"@copilotkit/shared\";\nimport { convertActionInputToOpenAITool, convertMessageToOpenAIMessage } from \"../openai/utils\";\n\nexport interface UnifyAdapterParams {\n apiKey?: string;\n model: string;\n}\n\nexport class UnifyAdapter implements CopilotServiceAdapter {\n private apiKey: string;\n private model: string;\n private start: boolean;\n\n constructor(options?: UnifyAdapterParams) {\n if (options?.apiKey) {\n this.apiKey = options.apiKey;\n } else {\n this.apiKey = \"UNIFY_API_KEY\";\n }\n this.model = options?.model;\n this.start = true;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const tools = request.actions.map(convertActionInputToOpenAITool);\n const openai = new OpenAI({\n apiKey: this.apiKey,\n baseURL: \"https://api.unify.ai/v0/\",\n });\n\n const messages = request.messages.map(convertMessageToOpenAIMessage);\n\n const stream = await openai.chat.completions.create({\n model: this.model,\n messages: messages,\n stream: true,\n ...(tools.length > 0 && { tools }),\n });\n\n let model = null;\n request.eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n for await (const chunk of stream) {\n if (this.start) {\n model = chunk.model;\n eventStream$.sendTextMessageStart(randomId());\n eventStream$.sendTextMessageContent(`Model used: ${model}\\n`);\n eventStream$.sendTextMessageEnd();\n this.start = false;\n }\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 threadId: request.threadId || randomId(),\n };\n }\n}\n","/**\n * Copilot Runtime adapter for Groq.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, GroqAdapter } from \"@copilotkit/runtime\";\n * import { Groq } from \"groq-sdk\";\n *\n * const groq = new Groq({ apiKey: process.env[\"GROQ_API_KEY\"] });\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new GroqAdapter({ groq, model: \"<model-name>\" });\n * ```\n */\nimport { Groq } from \"groq-sdk\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n} from \"../openai/utils\";\nimport { randomId } from \"@copilotkit/shared\";\n\nconst DEFAULT_MODEL = \"llama3-groq-70b-8192-tool-use-preview\";\n\nexport interface GroqAdapterParams {\n /**\n * An optional Groq instance to use.\n */\n groq?: Groq;\n\n /**\n * The model to use.\n */\n model?: string;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n}\n\nexport class GroqAdapter implements CopilotServiceAdapter {\n private model: string = DEFAULT_MODEL;\n\n private disableParallelToolCalls: boolean = false;\n private _groq: Groq;\n public get groq(): Groq {\n return this._groq;\n }\n\n constructor(params?: GroqAdapterParams) {\n this._groq = params?.groq || new Groq({});\n if (params?.model) {\n this.model = params.model;\n }\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId,\n model = this.model,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToOpenAITool);\n\n let openaiMessages = messages.map(convertMessageToOpenAIMessage);\n openaiMessages = limitMessagesToTokenCount(openaiMessages, tools, model);\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"function\",\n function: { name: forwardedParameters.toolChoiceFunctionName },\n };\n }\n const stream = await this.groq.chat.completions.create({\n model: model,\n stream: true,\n messages: openaiMessages,\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.maxTokens && {\n max_tokens: forwardedParameters.maxTokens,\n }),\n ...(forwardedParameters?.stop && { stop: forwardedParameters.stop }),\n ...(toolChoice && { tool_choice: toolChoice }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\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 threadId: threadId || randomId(),\n };\n }\n}\n","/**\n * Copilot Runtime adapter for Anthropic.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, AnthropicAdapter } from \"@copilotkit/runtime\";\n * import Anthropic from \"@anthropic-ai/sdk\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const anthropic = new Anthropic({\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new AnthropicAdapter({ anthropic });\n * ```\n */\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToAnthropicTool,\n convertMessageToAnthropicMessage,\n groupAnthropicMessagesByRole,\n limitMessagesToTokenCount,\n} from \"./utils\";\n\nimport { randomId } from \"@copilotkit/shared\";\nimport { TextMessage } from \"../../graphql/types/converted\";\n\nconst DEFAULT_MODEL = \"claude-3-sonnet-20240229\";\n\nexport interface AnthropicAdapterParams {\n /**\n * An optional Anthropic instance to use. If not provided, a new instance will be\n * created.\n */\n anthropic?: Anthropic;\n\n /**\n * The model to use.\n */\n model?: string;\n}\n\nexport class AnthropicAdapter implements CopilotServiceAdapter {\n private model: string = DEFAULT_MODEL;\n\n private _anthropic: Anthropic;\n public get anthropic(): Anthropic {\n return this._anthropic;\n }\n\n constructor(params?: AnthropicAdapterParams) {\n this._anthropic = params?.anthropic || new Anthropic({});\n if (params?.model) {\n this.model = params.model;\n }\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId,\n model = this.model,\n messages: rawMessages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToAnthropicTool);\n\n const messages = [...rawMessages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage() ? instructionsMessage.content : \"\";\n\n let anthropicMessages = messages.map(convertMessageToAnthropicMessage);\n anthropicMessages = limitMessagesToTokenCount(anthropicMessages, tools, model);\n anthropicMessages = groupAnthropicMessagesByRole(anthropicMessages);\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"tool\",\n name: forwardedParameters.toolChoiceFunctionName,\n };\n }\n\n const stream = this.anthropic.messages.create({\n system: instructions,\n model: this.model,\n messages: anthropicMessages,\n max_tokens: forwardedParameters?.maxTokens || 1024,\n ...(tools.length > 0 && { tools }),\n ...(toolChoice && { tool_choice: toolChoice }),\n stream: true,\n });\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let didOutputText = false;\n let currentMessageId = randomId();\n let currentToolCallId = randomId();\n let filterThinkingTextBuffer = new FilterThinkingTextBuffer();\n\n for await (const chunk of await stream) {\n if (chunk.type === \"message_start\") {\n currentMessageId = chunk.message.id;\n } else if (chunk.type === \"content_block_start\") {\n if (chunk.content_block.type === \"text\") {\n didOutputText = false;\n filterThinkingTextBuffer.reset();\n mode = \"message\";\n } else if (chunk.content_block.type === \"tool_use\") {\n currentToolCallId = chunk.content_block.id;\n eventStream$.sendActionExecutionStart(currentToolCallId, chunk.content_block.name);\n mode = \"function\";\n }\n } else if (chunk.type === \"content_block_delta\") {\n if (chunk.delta.type === \"text_delta\") {\n const text = filterThinkingTextBuffer.onTextChunk(chunk.delta.text);\n if (text.length > 0) {\n if (!didOutputText) {\n eventStream$.sendTextMessageStart(currentMessageId);\n didOutputText = true;\n }\n eventStream$.sendTextMessageContent(text);\n }\n } else if (chunk.delta.type === \"input_json_delta\") {\n eventStream$.sendActionExecutionArgs(chunk.delta.partial_json);\n }\n } else if (chunk.type === \"content_block_stop\") {\n if (mode === \"message\") {\n if (didOutputText) {\n eventStream$.sendTextMessageEnd();\n }\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd();\n }\n }\n }\n\n eventStream$.complete();\n });\n\n return {\n threadId: threadId || randomId(),\n };\n }\n}\n\nconst THINKING_TAG = \"<thinking>\";\nconst THINKING_TAG_END = \"</thinking>\";\n\nclass FilterThinkingTextBuffer {\n private buffer: string;\n private didFilterThinkingTag: boolean = false;\n\n constructor() {\n this.buffer = \"\";\n }\n\n onTextChunk(text: string): string {\n this.buffer += text;\n if (this.didFilterThinkingTag) {\n return text;\n }\n const potentialTag = this.buffer.slice(0, THINKING_TAG.length);\n if (THINKING_TAG.startsWith(potentialTag)) {\n if (this.buffer.includes(THINKING_TAG_END)) {\n const end = this.buffer.indexOf(THINKING_TAG_END);\n const filteredText = this.buffer.slice(end + THINKING_TAG_END.length);\n this.buffer = filteredText;\n this.didFilterThinkingTag = true;\n return filteredText;\n } else {\n return \"\";\n }\n }\n return text;\n }\n\n reset() {\n this.buffer = \"\";\n this.didFilterThinkingTag = false;\n }\n}\n","import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { Anthropic } from \"@anthropic-ai/sdk\";\n\nexport function limitMessagesToTokenCount(\n messages: any[],\n tools: any[],\n model: string,\n maxTokens?: number,\n): any[] {\n maxTokens ||= MAX_TOKENS;\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\nconst MAX_TOKENS = 128000;\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, JSON.stringify(message.content) || \"\");\n}\n\nfunction countTokens(model: string, text: string): number {\n return text.length / 3;\n}\n\nexport function convertActionInputToAnthropicTool(action: ActionInput): Anthropic.Messages.Tool {\n return {\n name: action.name,\n description: action.description,\n input_schema: JSON.parse(action.jsonSchema),\n };\n}\n\nexport function convertMessageToAnthropicMessage(\n message: Message,\n): Anthropic.Messages.MessageParam {\n if (message.isTextMessage()) {\n if (message.role === \"system\") {\n return {\n role: \"assistant\",\n content: [\n { type: \"text\", text: \"THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: \" + message.content },\n ],\n };\n } else {\n return {\n role: message.role === \"user\" ? \"user\" : \"assistant\",\n content: [{ type: \"text\", text: message.content }],\n };\n }\n } else if (message.isActionExecutionMessage()) {\n return {\n role: \"assistant\",\n content: [\n {\n id: message.id,\n type: \"tool_use\",\n input: message.arguments,\n name: message.name,\n },\n ],\n };\n } else if (message.isResultMessage()) {\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n content: message.result,\n tool_use_id: message.actionExecutionId,\n },\n ],\n };\n }\n}\n\nexport function groupAnthropicMessagesByRole(\n messageParams: Anthropic.Messages.MessageParam[],\n): Anthropic.Messages.MessageParam[] {\n return messageParams.reduce((acc, message) => {\n const lastGroup = acc[acc.length - 1];\n\n if (lastGroup && lastGroup.role === message.role) {\n lastGroup.content = lastGroup.content.concat(message.content as any);\n } else {\n acc.push({\n role: message.role,\n content: [...(message.content as any)],\n });\n }\n\n return acc;\n }, [] as Anthropic.Messages.MessageParam[]);\n}\n","/**\n * CopilotKit Adapter for Ollama\n *\n * <RequestExample>\n * ```jsx CopilotRuntime Example\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(req, new OllamaAdapter());\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 OllamaAdapter({ model: \"llama3-70b-8192\" }),\n * );\n * ```\n */\nimport { TextMessage } from \"../../../graphql/types/converted\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../../service-adapter\";\nimport { Ollama } from \"@langchain/community/llms/ollama\";\nimport { randomId } from \"@copilotkit/shared\";\n\nconst DEFAULT_MODEL = \"llama3:latest\";\n\ninterface OllamaAdapterOptions {\n model?: string;\n}\n\nexport class ExperimentalOllamaAdapter implements CopilotServiceAdapter {\n private model: string;\n\n constructor(options?: OllamaAdapterOptions) {\n if (options?.model) {\n this.model = options.model;\n } else {\n this.model = DEFAULT_MODEL;\n }\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource } = request;\n // const messages = this.transformMessages(forwardedProps.messages);\n\n const ollama = new Ollama({\n model: this.model,\n });\n const contents = (messages.filter((m) => m.isTextMessage()) as TextMessage[]).map(\n (m) => m.content,\n );\n const _stream = await ollama.stream(contents); // [TODO] role info is dropped...\n\n eventSource.stream(async (eventStream$) => {\n eventStream$.sendTextMessageStart(randomId());\n for await (const chunkText of _stream) {\n eventStream$.sendTextMessageContent(chunkText);\n }\n eventStream$.sendTextMessageEnd();\n // we may need to add this later.. [nc]\n // let calls = (await result.response).functionCalls();\n\n eventStream$.complete();\n });\n return {\n threadId: request.threadId || randomId(),\n };\n }\n}\n","/**\n * CopilotKit Empty Adapter\n *\n * This adapter is meant to preserve adherence to runtime requirements, while doing nothing\n * Ideal if you don't want to connect an LLM the to the runtime, and only use your LangGraph agent.\n * Be aware that Copilot Suggestions will not work if you use this adapter\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, ExperimentalEmptyAdapter } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new ExperimentalEmptyAdapter();\n * ```\n */\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../../service-adapter\";\nimport { randomId } from \"@copilotkit/shared\";\n\nexport class ExperimentalEmptyAdapter implements CopilotServiceAdapter {\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n return {\n threadId: request.threadId || randomId(),\n };\n }\n}\n"],"mappings":"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","names":["RemoteRunnable","RemoteChain","name","description","chainUrl","parameters","parameterType","constructor","options","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","OpenAI","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","convertActionInputToOpenAITool","action","type","function","name","description","parameters","parse","jsonSchema","convertMessageToOpenAIMessage","isTextMessage","isActionExecutionMessage","tool_calls","id","arguments","isResultMessage","tool_call_id","actionExecutionId","convertSystemMessageToAssistantAPI","randomId","DEFAULT_MODEL","OpenAIAdapter","model","disableParallelToolCalls","_openai","openai","constructor","params","OpenAI","process","request","threadId","messages","actions","eventSource","forwardedParameters","tools","map","convertActionInputToOpenAITool","openaiMessages","convertMessageToOpenAIMessage","limitMessagesToTokenCount","toolChoice","type","function","name","toolChoiceFunctionName","stream","beta","chat","completions","length","maxTokens","max_tokens","stop","tool_choice","parallel_tool_calls","eventStream$","mode","chunk","choices","toolCall","delta","tool_calls","content","id","sendTextMessageEnd","undefined","sendActionExecutionEnd","sendActionExecutionStart","sendTextMessageStart","sendTextMessageContent","arguments","sendActionExecutionArgs","complete","randomId","AIMessage","HumanMessage","SystemMessage","ToolMessage","DynamicStructuredTool","randomId","convertJsonSchemaToZodSchema","convertMessageToLangChainMessage","message","isTextMessage","role","HumanMessage","content","AIMessage","SystemMessage","isActionExecutionMessage","tool_calls","id","args","arguments","name","isResultMessage","ToolMessage","result","tool_call_id","actionExecutionId","convertActionInputToLangChainTool","actionInput","DynamicStructuredTool","description","schema","convertJsonSchemaToZodSchema","JSON","parse","jsonSchema","func","isAIMessage","message","Object","prototype","toString","call","isAIMessageChunk","isBaseMessageChunk","maybeSendActionExecutionResultIsMessage","eventStream$","actionExecution","sendActionExecutionResult","id","name","streamLangChainResponse","result","sendTextMessage","randomId","content","toolCall","tool_calls","sendActionExecution","JSON","stringify","args","lc_kwargs","reader","getReader","mode","toolCallDetails","index","prevIndex","done","value","read","toolCallName","undefined","toolCallId","toolCallArgs","hasToolCall","chunk","tool_call_chunks","additional_kwargs","function","arguments","sendTextMessageEnd","sendActionExecutionEnd","sendActionExecutionStart","sendTextMessageStart","sendTextMessageContent","Array","isArray","text","sendActionExecutionArgs","error","console","encodeResult","Error","complete","randomId","awaitAllCallbacks","LangChainAdapter","constructor","options","process","request","eventSource","model","actions","messages","runId","threadId","randomId","result","chainFn","map","convertMessageToLangChainMessage","tools","convertActionInputToLangChainTool","stream","eventStream$","streamLangChainResponse","awaitAllCallbacks","ChatGoogle","GoogleGenerativeAIAdapter","LangChainAdapter","constructor","options","chainFn","messages","tools","threadId","model","ChatGoogle","modelName","apiVersion","bindTools","stream","metadata","conversation_id","OpenAI","OpenAIAssistantAdapter","openai","codeInterpreterEnabled","assistantId","fileSearchEnabled","disableParallelToolCalls","constructor","params","OpenAI","process","request","messages","actions","eventSource","runId","forwardedParameters","threadId","beta","threads","create","id","lastMessage","at","nextRunId","undefined","isResultMessage","submitToolOutputs","isTextMessage","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","parallel_tool_calls","streamResponse","instructionsMessage","shift","instructions","content","userMessage","convertMessageToOpenAIMessage","convertSystemMessageToAssistantAPI","role","openaiTools","convertActionInputToOpenAITool","tools","type","assistant_id","maxTokens","max_completion_tokens","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","OpenAI","randomId","UnifyAdapter","apiKey","model","start","constructor","options","process","request","tools","actions","map","convertActionInputToOpenAITool","openai","OpenAI","baseURL","messages","convertMessageToOpenAIMessage","stream","chat","completions","create","length","eventSource","eventStream$","mode","chunk","sendTextMessageStart","randomId","sendTextMessageContent","sendTextMessageEnd","toolCall","choices","delta","tool_calls","content","id","undefined","sendActionExecutionEnd","sendActionExecutionStart","function","name","arguments","sendActionExecutionArgs","complete","threadId","Groq","randomId","DEFAULT_MODEL","GroqAdapter","model","disableParallelToolCalls","_groq","groq","constructor","params","Groq","process","request","threadId","messages","actions","eventSource","forwardedParameters","tools","map","convertActionInputToOpenAITool","openaiMessages","convertMessageToOpenAIMessage","limitMessagesToTokenCount","toolChoice","type","function","name","toolChoiceFunctionName","stream","chat","completions","create","length","maxTokens","max_tokens","stop","tool_choice","parallel_tool_calls","eventStream$","mode","chunk","toolCall","choices","delta","tool_calls","content","id","sendTextMessageEnd","undefined","sendActionExecutionEnd","sendActionExecutionStart","sendTextMessageStart","sendTextMessageContent","arguments","sendActionExecutionArgs","complete","randomId","Anthropic","limitMessagesToTokenCount","messages","tools","model","maxTokens","MAX_TOKENS","result","toolsNumTokens","countToolsTokens","Error","message","role","numTokens","countMessageTokens","cutoff","reversedMessages","reverse","unshift","length","json","JSON","stringify","countTokens","content","text","convertActionInputToAnthropicTool","action","name","description","input_schema","parse","jsonSchema","convertMessageToAnthropicMessage","isTextMessage","type","isActionExecutionMessage","id","input","arguments","isResultMessage","tool_use_id","actionExecutionId","groupAnthropicMessagesByRole","messageParams","reduce","acc","lastGroup","concat","push","randomId","DEFAULT_MODEL","AnthropicAdapter","model","_anthropic","anthropic","constructor","params","Anthropic","process","request","threadId","messages","rawMessages","actions","eventSource","forwardedParameters","tools","map","convertActionInputToAnthropicTool","instructionsMessage","shift","instructions","isTextMessage","content","anthropicMessages","convertMessageToAnthropicMessage","limitMessagesToTokenCount","groupAnthropicMessagesByRole","toolChoice","type","name","toolChoiceFunctionName","stream","create","system","max_tokens","maxTokens","length","tool_choice","eventStream$","mode","didOutputText","currentMessageId","randomId","currentToolCallId","filterThinkingTextBuffer","FilterThinkingTextBuffer","chunk","message","id","content_block","reset","sendActionExecutionStart","delta","text","onTextChunk","sendTextMessageStart","sendTextMessageContent","sendActionExecutionArgs","partial_json","sendTextMessageEnd","sendActionExecutionEnd","complete","THINKING_TAG","THINKING_TAG_END","buffer","didFilterThinkingTag","potentialTag","slice","startsWith","includes","end","indexOf","filteredText","Ollama","randomId","DEFAULT_MODEL","ExperimentalOllamaAdapter","model","constructor","options","process","request","messages","actions","eventSource","ollama","Ollama","contents","filter","m","isTextMessage","map","content","_stream","stream","eventStream$","sendTextMessageStart","randomId","chunkText","sendTextMessageContent","sendTextMessageEnd","complete","threadId","randomId","ExperimentalEmptyAdapter","process","request","threadId","randomId"]}
@@ -1,5 +1,5 @@
1
1
  import { Parameter, Action } from '@copilotkit/shared';
2
- import { C as CopilotServiceAdapter, R as RemoteChainParameters, A as ActionInput, F as ForwardedParametersInput, b as RuntimeEventSource } from './langserve-f021ab9c.js';
2
+ import { b as CopilotServiceAdapter, R as RemoteChainParameters, A as ActionInput, F as ForwardedParametersInput, d as RuntimeEventSource } from './langserve-b74e8606.js';
3
3
  import { M as MessageInput, a as Message } from './index-10b1c870.js';
4
4
  import * as graphql from 'graphql';
5
5
  import * as pino from 'pino';
@@ -1,5 +1,5 @@
1
1
  import OpenAI from 'openai';
2
- import { C as CopilotServiceAdapter, c as CopilotRuntimeChatCompletionRequest, d as CopilotRuntimeChatCompletionResponse } from './langserve-f021ab9c.js';
2
+ import { b as CopilotServiceAdapter, C as CopilotRuntimeChatCompletionRequest, a as CopilotRuntimeChatCompletionResponse } from './langserve-b74e8606.js';
3
3
  import { BaseMessageChunk, AIMessage, AIMessageChunk, BaseMessage } from '@langchain/core/messages';
4
4
  import { DynamicStructuredTool } from '@langchain/core/tools';
5
5
  import { IterableReadableStream, IterableReadableStreamInterface } from '@langchain/core/utils/stream';
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- export { h as CommonConfig, b as CopilotRequestContextProperties, a as CopilotRuntime, C as CopilotRuntimeConstructorParams, d as CreateCopilotRuntimeServerOptions, G as GraphQLContext, g as buildSchema, c as copilotKitEndpoint, e as createContext, f as flattenToolCallsNoDuplicates, i as getCommonConfig, l as langGraphPlatformEndpoint, r as resolveEndpointType } from './copilot-runtime-12e7ac40.js';
2
- export { G as GoogleGenerativeAIAdapter, f as GroqAdapter, e as GroqAdapterParams, L as LangChainAdapter, a as OpenAIAdapter, O as OpenAIAdapterParams, c as OpenAIAssistantAdapter, b as OpenAIAssistantAdapterParams, d as UnifyAdapter, U as UnifyAdapterParams } from './groq-adapter-24abe931.js';
1
+ export { h as CommonConfig, b as CopilotRequestContextProperties, a as CopilotRuntime, C as CopilotRuntimeConstructorParams, d as CreateCopilotRuntimeServerOptions, G as GraphQLContext, g as buildSchema, c as copilotKitEndpoint, e as createContext, f as flattenToolCallsNoDuplicates, i as getCommonConfig, l as langGraphPlatformEndpoint, r as resolveEndpointType } from './copilot-runtime-48d7c2fc.js';
2
+ export { G as GoogleGenerativeAIAdapter, f as GroqAdapter, e as GroqAdapterParams, L as LangChainAdapter, a as OpenAIAdapter, O as OpenAIAdapterParams, c as OpenAIAssistantAdapter, b as OpenAIAssistantAdapterParams, d as UnifyAdapter, U as UnifyAdapterParams } from './groq-adapter-ac43305a.js';
3
3
  export { CopilotRuntimeServerInstance, config, copilotRuntimeNextJSAppRouterEndpoint, copilotRuntimeNextJSPagesRouterEndpoint } from './lib/integrations/index.js';
4
4
  export { copilotRuntimeNodeHttpEndpoint } from './lib/integrations/node-http/index.js';
5
5
  export { copilotRuntimeNodeExpressEndpoint } from './lib/integrations/node-express/index.js';
6
6
  export { copilotRuntimeNestEndpoint } from './lib/integrations/nest/index.js';
7
7
  export { GuardrailsValidationFailureResponse, MessageStreamInterruptedResponse, UnknownErrorResponse } from './utils/index.js';
8
- export { C as CopilotServiceAdapter, a as RemoteChain, R as RemoteChainParameters } from './langserve-f021ab9c.js';
9
- export { AnthropicAdapter, AnthropicAdapterParams } from './service-adapters/index.js';
8
+ export { C as CopilotRuntimeChatCompletionRequest, a as CopilotRuntimeChatCompletionResponse, b as CopilotServiceAdapter, c as RemoteChain, R as RemoteChainParameters } from './langserve-b74e8606.js';
9
+ export { AnthropicAdapter, AnthropicAdapterParams, ExperimentalEmptyAdapter, ExperimentalOllamaAdapter } from './service-adapters/index.js';
10
10
  import '@copilotkit/shared';
11
11
  import './index-10b1c870.js';
12
12
  import './graphql/types/base/index.js';
package/dist/index.js CHANGED
@@ -44,7 +44,7 @@ var require_package = __commonJS({
44
44
  publishConfig: {
45
45
  access: "public"
46
46
  },
47
- version: "1.4.8-no-pino-redact.1",
47
+ version: "1.4.8",
48
48
  sideEffects: false,
49
49
  main: "./dist/index.js",
50
50
  module: "./dist/index.mjs",
@@ -126,6 +126,8 @@ var src_exports = {};
126
126
  __export(src_exports, {
127
127
  AnthropicAdapter: () => AnthropicAdapter,
128
128
  CopilotRuntime: () => CopilotRuntime,
129
+ ExperimentalEmptyAdapter: () => ExperimentalEmptyAdapter,
130
+ ExperimentalOllamaAdapter: () => ExperimentalOllamaAdapter,
129
131
  GoogleGenerativeAIAdapter: () => GoogleGenerativeAIAdapter,
130
132
  GroqAdapter: () => GroqAdapter,
131
133
  GuardrailsValidationFailureResponse: () => GuardrailsValidationFailureResponse,
@@ -154,7 +156,7 @@ module.exports = __toCommonJS(src_exports);
154
156
  var import_reflect_metadata = require("reflect-metadata");
155
157
 
156
158
  // src/lib/runtime/copilot-runtime.ts
157
- var import_shared10 = require("@copilotkit/shared");
159
+ var import_shared12 = require("@copilotkit/shared");
158
160
 
159
161
  // src/service-adapters/langchain/langserve.ts
160
162
  var import_remote = require("langchain/runnables/remote");
@@ -1313,12 +1315,58 @@ var FilterThinkingTextBuffer = /* @__PURE__ */ __name(class FilterThinkingTextBu
1313
1315
  }
1314
1316
  }, "FilterThinkingTextBuffer");
1315
1317
 
1318
+ // src/service-adapters/experimental/ollama/ollama-adapter.ts
1319
+ var import_ollama = require("@langchain/community/llms/ollama");
1320
+ var import_shared7 = require("@copilotkit/shared");
1321
+ var DEFAULT_MODEL4 = "llama3:latest";
1322
+ var ExperimentalOllamaAdapter = class {
1323
+ model;
1324
+ constructor(options) {
1325
+ if (options == null ? void 0 : options.model) {
1326
+ this.model = options.model;
1327
+ } else {
1328
+ this.model = DEFAULT_MODEL4;
1329
+ }
1330
+ }
1331
+ async process(request) {
1332
+ const { messages, actions, eventSource } = request;
1333
+ const ollama = new import_ollama.Ollama({
1334
+ model: this.model
1335
+ });
1336
+ const contents = messages.filter((m) => m.isTextMessage()).map((m) => m.content);
1337
+ const _stream = await ollama.stream(contents);
1338
+ eventSource.stream(async (eventStream$) => {
1339
+ eventStream$.sendTextMessageStart((0, import_shared7.randomId)());
1340
+ for await (const chunkText of _stream) {
1341
+ eventStream$.sendTextMessageContent(chunkText);
1342
+ }
1343
+ eventStream$.sendTextMessageEnd();
1344
+ eventStream$.complete();
1345
+ });
1346
+ return {
1347
+ threadId: request.threadId || (0, import_shared7.randomId)()
1348
+ };
1349
+ }
1350
+ };
1351
+ __name(ExperimentalOllamaAdapter, "ExperimentalOllamaAdapter");
1352
+
1353
+ // src/service-adapters/experimental/empty/empty-adapter.ts
1354
+ var import_shared8 = require("@copilotkit/shared");
1355
+ var ExperimentalEmptyAdapter = class {
1356
+ async process(request) {
1357
+ return {
1358
+ threadId: request.threadId || (0, import_shared8.randomId)()
1359
+ };
1360
+ }
1361
+ };
1362
+ __name(ExperimentalEmptyAdapter, "ExperimentalEmptyAdapter");
1363
+
1316
1364
  // src/service-adapters/events.ts
1317
- var import_shared9 = require("@copilotkit/shared");
1365
+ var import_shared11 = require("@copilotkit/shared");
1318
1366
  var import_rxjs2 = require("rxjs");
1319
1367
 
1320
1368
  // src/lib/telemetry-client.ts
1321
- var import_shared8 = require("@copilotkit/shared");
1369
+ var import_shared10 = require("@copilotkit/shared");
1322
1370
 
1323
1371
  // src/lib/runtime/remote-action-constructors.ts
1324
1372
  var import_node_crypto2 = require("crypto");
@@ -1351,7 +1399,7 @@ var CustomEventNames;
1351
1399
  })(CustomEventNames || (CustomEventNames = {}));
1352
1400
 
1353
1401
  // src/agents/langgraph/event-source.ts
1354
- var import_shared7 = require("@copilotkit/shared");
1402
+ var import_shared9 = require("@copilotkit/shared");
1355
1403
  var RemoteLangGraphEventSource = class {
1356
1404
  eventStream$ = new import_rxjs.ReplaySubject();
1357
1405
  shouldEmitToolCall(shouldEmitToolCalls, toolCallName) {
@@ -1537,7 +1585,7 @@ var RemoteLangGraphEventSource = class {
1537
1585
  type: RuntimeEventTypes.ActionExecutionEnd
1538
1586
  });
1539
1587
  }
1540
- const messageId = (0, import_shared7.randomId)();
1588
+ const messageId = (0, import_shared9.randomId)();
1541
1589
  events.push({
1542
1590
  type: RuntimeEventTypes.TextMessageStart,
1543
1591
  messageId
@@ -2100,6 +2148,7 @@ function constructLGCRemoteAction({ endpoint, graphqlContext, logger: logger2, m
2100
2148
  }
2101
2149
  __name(constructLGCRemoteAction, "constructLGCRemoteAction");
2102
2150
  function constructRemoteActions({ json, url, onBeforeRequest, graphqlContext, logger: logger2, messages, agentStates }) {
2151
+ const totalAgents = Array.isArray(json["agents"]) ? json["agents"].length : 0;
2103
2152
  const actions = json["actions"].map((action) => ({
2104
2153
  name: action.name,
2105
2154
  description: action.description,
@@ -2113,7 +2162,7 @@ function constructRemoteActions({ json, url, onBeforeRequest, graphqlContext, lo
2113
2162
  telemetry_client_default.capture("oss.runtime.remote_action_executed", {
2114
2163
  agentExecution: false,
2115
2164
  type: "self-hosted",
2116
- agentsAmount: json["agents"].length
2165
+ agentsAmount: totalAgents
2117
2166
  });
2118
2167
  try {
2119
2168
  const response = await fetch(`${url}/actions/execute`, {
@@ -2148,7 +2197,7 @@ function constructRemoteActions({ json, url, onBeforeRequest, graphqlContext, lo
2148
2197
  }
2149
2198
  }
2150
2199
  }));
2151
- const agents = json["agents"].map((agent) => ({
2200
+ const agents = totalAgents ? json["agents"].map((agent) => ({
2152
2201
  name: agent.name,
2153
2202
  description: agent.description,
2154
2203
  parameters: [],
@@ -2201,7 +2250,7 @@ function constructRemoteActions({ json, url, onBeforeRequest, graphqlContext, lo
2201
2250
  streamResponse(response.body, eventSource.eventStream$);
2202
2251
  return eventSource.processLangGraphEvents();
2203
2252
  }
2204
- }));
2253
+ })) : [];
2205
2254
  return [
2206
2255
  ...actions,
2207
2256
  ...agents
@@ -2378,7 +2427,7 @@ __name(setupRemoteActions, "setupRemoteActions");
2378
2427
  // src/lib/telemetry-client.ts
2379
2428
  var import_node_crypto3 = require("crypto");
2380
2429
  var packageJson = require_package();
2381
- var telemetryClient = new import_shared8.TelemetryClient({
2430
+ var telemetryClient = new import_shared10.TelemetryClient({
2382
2431
  packageName: packageJson.name,
2383
2432
  packageVersion: packageJson.version
2384
2433
  });
@@ -2512,14 +2561,14 @@ var RuntimeEventSource = class {
2512
2561
  async stream(callback) {
2513
2562
  this.callback = callback;
2514
2563
  }
2515
- sendErrorMessageToChat() {
2516
- const errorMessage = "\u274C An error occurred. Please try again.";
2564
+ sendErrorMessageToChat(message = "An error occurred. Please try again.") {
2565
+ const errorMessage = `\u274C ${message}`;
2517
2566
  if (!this.callback) {
2518
2567
  this.stream(async (eventStream$) => {
2519
- eventStream$.sendTextMessage((0, import_shared9.randomId)(), errorMessage);
2568
+ eventStream$.sendTextMessage((0, import_shared11.randomId)(), errorMessage);
2520
2569
  });
2521
2570
  } else {
2522
- this.eventStream$.sendTextMessage((0, import_shared9.randomId)(), errorMessage);
2571
+ this.eventStream$.sendTextMessage((0, import_shared11.randomId)(), errorMessage);
2523
2572
  }
2524
2573
  }
2525
2574
  processRuntimeEvents({ serverSideActions, guardrailsResult$, actionInputsWithoutAgents }) {
@@ -2786,7 +2835,7 @@ var CopilotRuntime = class {
2786
2835
  const serverSideActionsInput = serverSideActions.map((action) => ({
2787
2836
  name: action.name,
2788
2837
  description: action.description,
2789
- jsonSchema: JSON.stringify((0, import_shared10.actionParametersToJsonSchema)(action.parameters))
2838
+ jsonSchema: JSON.stringify((0, import_shared12.actionParametersToJsonSchema)(action.parameters))
2790
2839
  }));
2791
2840
  const actionInputs = flattenToolCallsNoDuplicates([
2792
2841
  ...serverSideActionsInput,
@@ -2835,13 +2884,7 @@ var CopilotRuntime = class {
2835
2884
  } catch (error) {
2836
2885
  console.error("Error getting response:", error);
2837
2886
  eventSource.sendErrorMessageToChat();
2838
- return {
2839
- threadId: threadId || (0, import_shared10.randomId)(),
2840
- runId: runId || (0, import_shared10.randomId)(),
2841
- eventSource,
2842
- serverSideActions: [],
2843
- actionInputsWithoutAgents: []
2844
- };
2887
+ throw error;
2845
2888
  }
2846
2889
  }
2847
2890
  async processAgentRequest(request) {
@@ -2857,7 +2900,7 @@ var CopilotRuntime = class {
2857
2900
  const serverSideActionsInput = serverSideActions.filter((action) => !isLangGraphAgentAction(action)).map((action) => ({
2858
2901
  name: action.name,
2859
2902
  description: action.description,
2860
- jsonSchema: JSON.stringify((0, import_shared10.actionParametersToJsonSchema)(action.parameters))
2903
+ jsonSchema: JSON.stringify((0, import_shared12.actionParametersToJsonSchema)(action.parameters))
2861
2904
  }));
2862
2905
  const actionInputsWithoutAgents = flattenToolCallsNoDuplicates([
2863
2906
  ...serverSideActionsInput,
@@ -3999,7 +4042,7 @@ var UnknownErrorResponse = class extends FailedResponseStatus {
3999
4042
  __name(UnknownErrorResponse, "UnknownErrorResponse");
4000
4043
 
4001
4044
  // src/graphql/resolvers/copilot.resolver.ts
4002
- var import_shared11 = require("@copilotkit/shared");
4045
+ var import_shared13 = require("@copilotkit/shared");
4003
4046
  function _ts_decorate14(decorators, target, key, desc) {
4004
4047
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4005
4048
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
@@ -4116,7 +4159,7 @@ var CopilotResolver = class {
4116
4159
  rejectOutputMessagesPromise = reject;
4117
4160
  });
4118
4161
  logger2.debug("Processing");
4119
- const { eventSource, threadId = (0, import_shared11.randomId)(), runId, serverSideActions, actionInputsWithoutAgents } = await copilotRuntime.processRuntimeRequest({
4162
+ const { eventSource, threadId = (0, import_shared13.randomId)(), runId, serverSideActions, actionInputsWithoutAgents } = await copilotRuntime.processRuntimeRequest({
4120
4163
  serviceAdapter,
4121
4164
  messages: data.messages,
4122
4165
  actions: data.frontend.actions.filter((action) => action.available !== ActionInputAvailability.disabled),
@@ -4161,7 +4204,7 @@ var CopilotResolver = class {
4161
4204
  });
4162
4205
  outputMessages = [
4163
4206
  (0, import_class_transformer2.plainToInstance)(TextMessage, {
4164
- id: (0, import_shared11.randomId)(),
4207
+ id: (0, import_shared13.randomId)(),
4165
4208
  createdAt: /* @__PURE__ */ new Date(),
4166
4209
  content: result.reason,
4167
4210
  role: MessageRole.assistant
@@ -4324,7 +4367,7 @@ var CopilotResolver = class {
4324
4367
  result: event.result
4325
4368
  }, "Action execution result event received");
4326
4369
  pushMessage({
4327
- id: (0, import_shared11.randomId)(),
4370
+ id: (0, import_shared13.randomId)(),
4328
4371
  status: new SuccessMessageStatus(),
4329
4372
  createdAt: /* @__PURE__ */ new Date(),
4330
4373
  actionExecutionId: event.actionExecutionId,
@@ -4332,7 +4375,7 @@ var CopilotResolver = class {
4332
4375
  result: event.result
4333
4376
  });
4334
4377
  outputMessages.push((0, import_class_transformer2.plainToInstance)(ResultMessage, {
4335
- id: (0, import_shared11.randomId)(),
4378
+ id: (0, import_shared13.randomId)(),
4336
4379
  createdAt: /* @__PURE__ */ new Date(),
4337
4380
  actionExecutionId: event.actionExecutionId,
4338
4381
  actionName: event.actionName,
@@ -4344,7 +4387,7 @@ var CopilotResolver = class {
4344
4387
  event
4345
4388
  }, "Agent message event received");
4346
4389
  pushMessage({
4347
- id: (0, import_shared11.randomId)(),
4390
+ id: (0, import_shared13.randomId)(),
4348
4391
  status: new SuccessMessageStatus(),
4349
4392
  threadId: event.threadId,
4350
4393
  agentName: event.agentName,
@@ -4357,7 +4400,7 @@ var CopilotResolver = class {
4357
4400
  createdAt: /* @__PURE__ */ new Date()
4358
4401
  });
4359
4402
  outputMessages.push((0, import_class_transformer2.plainToInstance)(AgentStateMessage, {
4360
- id: (0, import_shared11.randomId)(),
4403
+ id: (0, import_shared13.randomId)(),
4361
4404
  threadId: event.threadId,
4362
4405
  agentName: event.agentName,
4363
4406
  nodeName: event.nodeName,
@@ -4438,7 +4481,14 @@ function createLogger(options) {
4438
4481
  colorize: true
4439
4482
  });
4440
4483
  const logger2 = (0, import_pino.default)({
4441
- level: process.env.LOG_LEVEL || level || "error"
4484
+ level: process.env.LOG_LEVEL || level || "error",
4485
+ redact: {
4486
+ paths: [
4487
+ "pid",
4488
+ "hostname"
4489
+ ],
4490
+ remove: true
4491
+ }
4442
4492
  }, stream);
4443
4493
  if (component) {
4444
4494
  return logger2.child({
@@ -4641,6 +4691,8 @@ __name(copilotRuntimeNestEndpoint, "copilotRuntimeNestEndpoint");
4641
4691
  0 && (module.exports = {
4642
4692
  AnthropicAdapter,
4643
4693
  CopilotRuntime,
4694
+ ExperimentalEmptyAdapter,
4695
+ ExperimentalOllamaAdapter,
4644
4696
  GoogleGenerativeAIAdapter,
4645
4697
  GroqAdapter,
4646
4698
  GuardrailsValidationFailureResponse,