@copilotkit/runtime 1.61.1 → 1.61.2

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 (81) hide show
  1. package/dist/agent/converters/aisdk.cjs +52 -1
  2. package/dist/agent/converters/aisdk.cjs.map +1 -1
  3. package/dist/agent/converters/aisdk.d.cts +6 -2
  4. package/dist/agent/converters/aisdk.d.cts.map +1 -1
  5. package/dist/agent/converters/aisdk.d.mts +6 -2
  6. package/dist/agent/converters/aisdk.d.mts.map +1 -1
  7. package/dist/agent/converters/aisdk.mjs +52 -1
  8. package/dist/agent/converters/aisdk.mjs.map +1 -1
  9. package/dist/agent/converters/tanstack.cjs +17 -1
  10. package/dist/agent/converters/tanstack.cjs.map +1 -1
  11. package/dist/agent/converters/tanstack.d.cts +6 -2
  12. package/dist/agent/converters/tanstack.d.cts.map +1 -1
  13. package/dist/agent/converters/tanstack.d.mts +6 -2
  14. package/dist/agent/converters/tanstack.d.mts.map +1 -1
  15. package/dist/agent/converters/tanstack.mjs +17 -1
  16. package/dist/agent/converters/tanstack.mjs.map +1 -1
  17. package/dist/agent/index.cjs +165 -39
  18. package/dist/agent/index.cjs.map +1 -1
  19. package/dist/agent/index.d.cts +42 -4
  20. package/dist/agent/index.d.cts.map +1 -1
  21. package/dist/agent/index.d.mts +42 -4
  22. package/dist/agent/index.d.mts.map +1 -1
  23. package/dist/agent/index.mjs +165 -40
  24. package/dist/agent/index.mjs.map +1 -1
  25. package/dist/graphql/message-conversion/agui-to-gql.cjs +5 -3
  26. package/dist/graphql/message-conversion/agui-to-gql.cjs.map +1 -1
  27. package/dist/graphql/message-conversion/agui-to-gql.mjs +5 -3
  28. package/dist/graphql/message-conversion/agui-to-gql.mjs.map +1 -1
  29. package/dist/lib/integrations/node-http/request-handler.cjs.map +1 -1
  30. package/dist/lib/integrations/node-http/request-handler.mjs.map +1 -1
  31. package/dist/lib/runtime/copilot-runtime.cjs +1 -1
  32. package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
  33. package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
  34. package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
  35. package/dist/lib/runtime/copilot-runtime.mjs +1 -1
  36. package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
  37. package/dist/package.cjs +1 -1
  38. package/dist/package.mjs +1 -1
  39. package/dist/service-adapters/openai/openai-assistant-adapter.cjs.map +1 -1
  40. package/dist/service-adapters/openai/openai-assistant-adapter.d.cts.map +1 -1
  41. package/dist/service-adapters/openai/openai-assistant-adapter.d.mts.map +1 -1
  42. package/dist/service-adapters/openai/openai-assistant-adapter.mjs.map +1 -1
  43. package/dist/service-adapters/openai/utils.cjs.map +1 -1
  44. package/dist/service-adapters/openai/utils.mjs.map +1 -1
  45. package/dist/v2/index.cjs +1 -0
  46. package/dist/v2/index.d.cts +2 -2
  47. package/dist/v2/index.d.mts +2 -2
  48. package/dist/v2/index.mjs +2 -2
  49. package/dist/v2/runtime/core/runtime.cjs.map +1 -1
  50. package/dist/v2/runtime/core/runtime.d.cts +3 -3
  51. package/dist/v2/runtime/core/runtime.d.cts.map +1 -1
  52. package/dist/v2/runtime/core/runtime.d.mts +3 -3
  53. package/dist/v2/runtime/core/runtime.d.mts.map +1 -1
  54. package/dist/v2/runtime/core/runtime.mjs.map +1 -1
  55. package/dist/v2/runtime/endpoints/express-fetch-bridge.cjs.map +1 -1
  56. package/dist/v2/runtime/endpoints/express-fetch-bridge.mjs.map +1 -1
  57. package/dist/v2/runtime/endpoints/single-route-helpers.cjs +1 -1
  58. package/dist/v2/runtime/endpoints/single-route-helpers.cjs.map +1 -1
  59. package/dist/v2/runtime/endpoints/single-route-helpers.mjs +1 -1
  60. package/dist/v2/runtime/endpoints/single-route-helpers.mjs.map +1 -1
  61. package/dist/v2/runtime/handlers/handle-run.cjs +4 -3
  62. package/dist/v2/runtime/handlers/handle-run.cjs.map +1 -1
  63. package/dist/v2/runtime/handlers/handle-run.mjs +4 -3
  64. package/dist/v2/runtime/handlers/handle-run.mjs.map +1 -1
  65. package/dist/v2/runtime/handlers/intelligence/thread-names.cjs +0 -2
  66. package/dist/v2/runtime/handlers/intelligence/thread-names.cjs.map +1 -1
  67. package/dist/v2/runtime/handlers/intelligence/thread-names.mjs +0 -2
  68. package/dist/v2/runtime/handlers/intelligence/thread-names.mjs.map +1 -1
  69. package/dist/v2/runtime/handlers/shared/agent-utils.cjs +8 -4
  70. package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -1
  71. package/dist/v2/runtime/handlers/shared/agent-utils.mjs +8 -4
  72. package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -1
  73. package/dist/v2/runtime/runner/in-memory.cjs.map +1 -1
  74. package/dist/v2/runtime/runner/in-memory.d.cts.map +1 -1
  75. package/dist/v2/runtime/runner/in-memory.d.mts.map +1 -1
  76. package/dist/v2/runtime/runner/in-memory.mjs.map +1 -1
  77. package/dist/v2/runtime/runner/intelligence.cjs.map +1 -1
  78. package/dist/v2/runtime/runner/intelligence.d.cts.map +1 -1
  79. package/dist/v2/runtime/runner/intelligence.d.mts.map +1 -1
  80. package/dist/v2/runtime/runner/intelligence.mjs.map +1 -1
  81. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"openai-assistant-adapter.cjs","names":["retrieveThreadRun","submitToolOutputsStream","convertMessageToOpenAIMessage","convertSystemMessageToAssistantAPI","convertActionInputToOpenAITool"],"sources":["../../../src/service-adapters/openai/openai-assistant-adapter.ts"],"sourcesContent":["/**\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 type OpenAI from \"openai\";\nimport type { RunSubmitToolOutputsStreamParams } from \"openai/resources/beta/threads/runs/runs\";\nimport type { AssistantStream } from \"openai/lib/AssistantStream\";\nimport type {\n AssistantStreamEvent,\n AssistantTool,\n} from \"openai/resources/beta/assistants\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n convertSystemMessageToAssistantAPI,\n retrieveThreadRun,\n submitToolOutputsStream,\n} from \"./utils\";\nimport { RuntimeEventSource } from \"../events\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\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 /**\n * Whether to keep the role in system messages as \"System\".\n * By default, it is converted to \"developer\", which is used by newer OpenAI models\n *\n * @default false\n */\n keepSystemRole?: 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 private keepSystemRole: boolean = false;\n\n public get name() {\n return \"OpenAIAssistantAdapter\";\n }\n\n constructor(params: OpenAIAssistantAdapterParams) {\n if (params.openai) {\n this._openai = params.openai;\n }\n // If no instance provided, we'll lazy-load in ensureOpenAI()\n this.codeInterpreterEnabled =\n params.codeInterpreterEnabled === false || true;\n this.fileSearchEnabled = params.fileSearchEnabled === false || true;\n this.assistantId = params.assistantId;\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n this.keepSystemRole = params?.keepSystemRole ?? false;\n }\n\n private ensureOpenAI(): OpenAI {\n if (!this._openai) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const OpenAI = require(\"openai\").default;\n this._openai = new OpenAI({});\n }\n return this._openai;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource, runId, forwardedParameters } =\n request;\n\n // if we don't have a threadId, create a new thread\n let threadId = request.extensions?.openaiAssistantAPI?.threadId;\n const openai = this.ensureOpenAI();\n\n if (!threadId) {\n threadId = (await openai.beta.threads.create()).id;\n }\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(\n threadId,\n runId,\n messages,\n eventSource,\n );\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 runId: nextRunId,\n threadId,\n extensions: {\n ...request.extensions,\n openaiAssistantAPI: {\n threadId: threadId,\n runId: nextRunId,\n },\n },\n };\n }\n\n private async submitToolOutputs(\n threadId: string,\n runId: string,\n messages: Message[],\n eventSource: RuntimeEventSource,\n ) {\n const openai = this.ensureOpenAI();\n let run = await retrieveThreadRun(openai, threadId, runId);\n\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.isResultMessage() &&\n toolCallsIds.includes(message.actionExecutionId),\n ) as ResultMessage[];\n\n if (toolCallsIds.length != resultMessages.length) {\n throw new Error(\n \"Number of function results does not match the number of tool calls\",\n );\n }\n\n // submit the tool outputs\n const toolOutputs: RunSubmitToolOutputsStreamParams.ToolOutput[] =\n resultMessages.map((message) => {\n return {\n tool_call_id: message.actionExecutionId,\n output: message.result,\n };\n });\n\n const stream = submitToolOutputsStream(openai, 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 const openai = this.ensureOpenAI();\n messages = [...messages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage()\n ? instructionsMessage.content\n : \"\";\n\n // get the latest user message\n const userMessage = messages\n .map((m) =>\n convertMessageToOpenAIMessage(m, {\n keepSystemRole: this.keepSystemRole,\n }),\n )\n .map(convertSystemMessageToAssistantAPI)\n .at(-1);\n\n if (userMessage.role !== \"user\") {\n throw new Error(\"No user message found\");\n }\n\n await 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\n ? [{ type: \"code_interpreter\" } as AssistantTool]\n : []),\n ...(this.fileSearchEnabled\n ? [{ type: \"file_search\" } as AssistantTool]\n : []),\n ];\n\n let stream = 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(\n stream: AssistantStream,\n eventSource: RuntimeEventSource,\n ) {\n eventSource.stream(async (eventStream$) => {\n let inFunctionCall = false;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n for await (const chunk of stream) {\n switch (chunk.event) {\n case \"thread.message.created\":\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n currentMessageId = chunk.data.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n break;\n case \"thread.message.delta\":\n if (chunk.data.delta.content?.[0].type === \"text\") {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: chunk.data.delta.content?.[0].text.value,\n });\n }\n break;\n case \"thread.message.completed\":\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\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 =\n chunk.data.delta.step_details.tool_calls?.[0].function.name;\n toolCallArgs =\n chunk.data.delta.step_details.tool_calls?.[0].function\n .arguments;\n }\n\n if (toolCallName && toolCallId) {\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n inFunctionCall = true;\n currentToolCallId = toolCallId;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.data.id,\n actionName: toolCallName,\n });\n } else if (toolCallArgs) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCallArgs,\n });\n }\n break;\n }\n }\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\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"],"mappings":"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"}
1
+ {"version":3,"file":"openai-assistant-adapter.cjs","names":["retrieveThreadRun","submitToolOutputsStream","convertMessageToOpenAIMessage","convertSystemMessageToAssistantAPI","convertActionInputToOpenAITool"],"sources":["../../../src/service-adapters/openai/openai-assistant-adapter.ts"],"sourcesContent":["/**\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 type OpenAI from \"openai\";\nimport type { AssistantStream } from \"openai/lib/AssistantStream\";\nimport type {\n AssistantStreamEvent,\n AssistantTool,\n} from \"openai/resources/beta/assistants\";\nimport type {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport type { Message, ResultMessage } from \"../../graphql/types/converted\";\nimport { TextMessage } from \"../../graphql/types/converted\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n convertSystemMessageToAssistantAPI,\n retrieveThreadRun,\n submitToolOutputsStream,\n} from \"./utils\";\nimport type { RuntimeEventSource } from \"../events\";\nimport type { ActionInput } from \"../../graphql/inputs/action.input\";\nimport type { 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 /**\n * Whether to keep the role in system messages as \"System\".\n * By default, it is converted to \"developer\", which is used by newer OpenAI models\n *\n * @default false\n */\n keepSystemRole?: 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 private keepSystemRole: boolean = false;\n\n public get name() {\n return \"OpenAIAssistantAdapter\";\n }\n\n constructor(params: OpenAIAssistantAdapterParams) {\n if (params.openai) {\n this._openai = params.openai;\n }\n // If no instance provided, we'll lazy-load in ensureOpenAI()\n this.codeInterpreterEnabled =\n params.codeInterpreterEnabled === false || true;\n this.fileSearchEnabled = params.fileSearchEnabled === false || true;\n this.assistantId = params.assistantId;\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n this.keepSystemRole = params?.keepSystemRole ?? false;\n }\n\n private ensureOpenAI(): OpenAI {\n if (!this._openai) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const OpenAI = require(\"openai\").default;\n this._openai = new OpenAI({});\n }\n return this._openai;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource, runId, forwardedParameters } =\n request;\n\n // if we don't have a threadId, create a new thread\n let threadId = request.extensions?.openaiAssistantAPI?.threadId;\n const openai = this.ensureOpenAI();\n\n if (!threadId) {\n threadId = (await openai.beta.threads.create()).id;\n }\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(\n threadId,\n runId,\n messages,\n eventSource,\n );\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 runId: nextRunId,\n threadId,\n extensions: {\n ...request.extensions,\n openaiAssistantAPI: {\n threadId: threadId,\n runId: nextRunId,\n },\n },\n };\n }\n\n private async submitToolOutputs(\n threadId: string,\n runId: string,\n messages: Message[],\n eventSource: RuntimeEventSource,\n ) {\n const openai = this.ensureOpenAI();\n let run = await retrieveThreadRun(openai, threadId, runId);\n\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.isResultMessage() &&\n toolCallsIds.includes(message.actionExecutionId),\n ) as ResultMessage[];\n\n if (toolCallsIds.length != resultMessages.length) {\n throw new Error(\n \"Number of function results does not match the number of tool calls\",\n );\n }\n\n // submit the tool outputs\n const toolOutputs: { tool_call_id: string; output: string }[] =\n resultMessages.map((message) => {\n return {\n tool_call_id: message.actionExecutionId,\n output: message.result,\n };\n });\n\n const stream = submitToolOutputsStream(openai, 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 const openai = this.ensureOpenAI();\n messages = [...messages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage()\n ? instructionsMessage.content\n : \"\";\n\n // get the latest user message\n const userMessage = messages\n .map((m) =>\n convertMessageToOpenAIMessage(m, {\n keepSystemRole: this.keepSystemRole,\n }),\n )\n .map(convertSystemMessageToAssistantAPI)\n .at(-1);\n\n if (userMessage.role !== \"user\") {\n throw new Error(\"No user message found\");\n }\n\n await 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\n ? [{ type: \"code_interpreter\" } as AssistantTool]\n : []),\n ...(this.fileSearchEnabled\n ? [{ type: \"file_search\" } as AssistantTool]\n : []),\n ];\n\n let stream = 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(\n stream: AssistantStream,\n eventSource: RuntimeEventSource,\n ) {\n eventSource.stream(async (eventStream$) => {\n let inFunctionCall = false;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n for await (const chunk of stream) {\n switch (chunk.event) {\n case \"thread.message.created\":\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n currentMessageId = chunk.data.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n break;\n case \"thread.message.delta\":\n if (chunk.data.delta.content?.[0].type === \"text\") {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: chunk.data.delta.content?.[0].text.value,\n });\n }\n break;\n case \"thread.message.completed\":\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\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 =\n chunk.data.delta.step_details.tool_calls?.[0].function.name;\n toolCallArgs =\n chunk.data.delta.step_details.tool_calls?.[0].function\n .arguments;\n }\n\n if (toolCallName && toolCallId) {\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n inFunctionCall = true;\n currentToolCallId = toolCallId;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.data.id,\n actionName: toolCallName,\n });\n } else if (toolCallArgs) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCallArgs,\n });\n }\n break;\n }\n }\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\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"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai-assistant-adapter.d.cts","names":[],"sources":["../../../src/service-adapters/openai/openai-assistant-adapter.ts"],"mappings":";;;;;UAoDiB,4BAAA;EA0C8B;;;EAtC7C,WAAA;EA0CQ;;;EArCR,MAAA,GAAS,MAAA;;;;;EAMT,sBAAA;EA8DW;;;;EAxDX,iBAAA;EA+Jc;;;;;;;;EArJd,wBAAA;;;;;;;EAQA,cAAA;AAAA;AAAA,cAGW,sBAAA,YAAkC,qBAAA;EAAA,QACrC,OAAA;EAAA,QACA,sBAAA;EAAA,QACA,WAAA;EAAA,QACA,iBAAA;EAAA,QACA,wBAAA;EAAA,QACA,cAAA;EAAA,IAEG,IAAA,CAAA;cAIC,MAAA,EAAQ,4BAAA;EAAA,QAaZ,YAAA;EASF,OAAA,CACJ,OAAA,EAAS,mCAAA,GACR,OAAA,CAAQ,oCAAA;EAAA,QAqDG,iBAAA;EAAA,QAiDA,iBAAA;EAAA,QA8DA,cAAA;AAAA"}
1
+ {"version":3,"file":"openai-assistant-adapter.d.cts","names":[],"sources":["../../../src/service-adapters/openai/openai-assistant-adapter.ts"],"mappings":";;;;;UAgDiB,4BAAA;EA0C8B;;;EAtC7C,WAAA;EA0CQ;;;EArCR,MAAA,GAAS,MAAA;;;;;EAMT,sBAAA;EA8DW;;;;EAxDX,iBAAA;EA+Jc;;;;;;;;EArJd,wBAAA;;;;;;;EAQA,cAAA;AAAA;AAAA,cAGW,sBAAA,YAAkC,qBAAA;EAAA,QACrC,OAAA;EAAA,QACA,sBAAA;EAAA,QACA,WAAA;EAAA,QACA,iBAAA;EAAA,QACA,wBAAA;EAAA,QACA,cAAA;EAAA,IAEG,IAAA,CAAA;cAIC,MAAA,EAAQ,4BAAA;EAAA,QAaZ,YAAA;EASF,OAAA,CACJ,OAAA,EAAS,mCAAA,GACR,OAAA,CAAQ,oCAAA;EAAA,QAqDG,iBAAA;EAAA,QAiDA,iBAAA;EAAA,QA8DA,cAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai-assistant-adapter.d.mts","names":[],"sources":["../../../src/service-adapters/openai/openai-assistant-adapter.ts"],"mappings":";;;;;UAoDiB,4BAAA;EA0C8B;;;EAtC7C,WAAA;EA0CQ;;;EArCR,MAAA,GAAS,MAAA;;;;;EAMT,sBAAA;EA8DW;;;;EAxDX,iBAAA;EA+Jc;;;;;;;;EArJd,wBAAA;;;;;;;EAQA,cAAA;AAAA;AAAA,cAGW,sBAAA,YAAkC,qBAAA;EAAA,QACrC,OAAA;EAAA,QACA,sBAAA;EAAA,QACA,WAAA;EAAA,QACA,iBAAA;EAAA,QACA,wBAAA;EAAA,QACA,cAAA;EAAA,IAEG,IAAA,CAAA;cAIC,MAAA,EAAQ,4BAAA;EAAA,QAaZ,YAAA;EASF,OAAA,CACJ,OAAA,EAAS,mCAAA,GACR,OAAA,CAAQ,oCAAA;EAAA,QAqDG,iBAAA;EAAA,QAiDA,iBAAA;EAAA,QA8DA,cAAA;AAAA"}
1
+ {"version":3,"file":"openai-assistant-adapter.d.mts","names":[],"sources":["../../../src/service-adapters/openai/openai-assistant-adapter.ts"],"mappings":";;;;;UAgDiB,4BAAA;EA0C8B;;;EAtC7C,WAAA;EA0CQ;;;EArCR,MAAA,GAAS,MAAA;;;;;EAMT,sBAAA;EA8DW;;;;EAxDX,iBAAA;EA+Jc;;;;;;;;EArJd,wBAAA;;;;;;;EAQA,cAAA;AAAA;AAAA,cAGW,sBAAA,YAAkC,qBAAA;EAAA,QACrC,OAAA;EAAA,QACA,sBAAA;EAAA,QACA,WAAA;EAAA,QACA,iBAAA;EAAA,QACA,wBAAA;EAAA,QACA,cAAA;EAAA,IAEG,IAAA,CAAA;cAIC,MAAA,EAAQ,4BAAA;EAAA,QAaZ,YAAA;EASF,OAAA,CACJ,OAAA,EAAS,mCAAA,GACR,OAAA,CAAQ,oCAAA;EAAA,QAqDG,iBAAA;EAAA,QAiDA,iBAAA;EAAA,QA8DA,cAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai-assistant-adapter.mjs","names":[],"sources":["../../../src/service-adapters/openai/openai-assistant-adapter.ts"],"sourcesContent":["/**\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 type OpenAI from \"openai\";\nimport type { RunSubmitToolOutputsStreamParams } from \"openai/resources/beta/threads/runs/runs\";\nimport type { AssistantStream } from \"openai/lib/AssistantStream\";\nimport type {\n AssistantStreamEvent,\n AssistantTool,\n} from \"openai/resources/beta/assistants\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n convertSystemMessageToAssistantAPI,\n retrieveThreadRun,\n submitToolOutputsStream,\n} from \"./utils\";\nimport { RuntimeEventSource } from \"../events\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\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 /**\n * Whether to keep the role in system messages as \"System\".\n * By default, it is converted to \"developer\", which is used by newer OpenAI models\n *\n * @default false\n */\n keepSystemRole?: 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 private keepSystemRole: boolean = false;\n\n public get name() {\n return \"OpenAIAssistantAdapter\";\n }\n\n constructor(params: OpenAIAssistantAdapterParams) {\n if (params.openai) {\n this._openai = params.openai;\n }\n // If no instance provided, we'll lazy-load in ensureOpenAI()\n this.codeInterpreterEnabled =\n params.codeInterpreterEnabled === false || true;\n this.fileSearchEnabled = params.fileSearchEnabled === false || true;\n this.assistantId = params.assistantId;\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n this.keepSystemRole = params?.keepSystemRole ?? false;\n }\n\n private ensureOpenAI(): OpenAI {\n if (!this._openai) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const OpenAI = require(\"openai\").default;\n this._openai = new OpenAI({});\n }\n return this._openai;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource, runId, forwardedParameters } =\n request;\n\n // if we don't have a threadId, create a new thread\n let threadId = request.extensions?.openaiAssistantAPI?.threadId;\n const openai = this.ensureOpenAI();\n\n if (!threadId) {\n threadId = (await openai.beta.threads.create()).id;\n }\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(\n threadId,\n runId,\n messages,\n eventSource,\n );\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 runId: nextRunId,\n threadId,\n extensions: {\n ...request.extensions,\n openaiAssistantAPI: {\n threadId: threadId,\n runId: nextRunId,\n },\n },\n };\n }\n\n private async submitToolOutputs(\n threadId: string,\n runId: string,\n messages: Message[],\n eventSource: RuntimeEventSource,\n ) {\n const openai = this.ensureOpenAI();\n let run = await retrieveThreadRun(openai, threadId, runId);\n\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.isResultMessage() &&\n toolCallsIds.includes(message.actionExecutionId),\n ) as ResultMessage[];\n\n if (toolCallsIds.length != resultMessages.length) {\n throw new Error(\n \"Number of function results does not match the number of tool calls\",\n );\n }\n\n // submit the tool outputs\n const toolOutputs: RunSubmitToolOutputsStreamParams.ToolOutput[] =\n resultMessages.map((message) => {\n return {\n tool_call_id: message.actionExecutionId,\n output: message.result,\n };\n });\n\n const stream = submitToolOutputsStream(openai, 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 const openai = this.ensureOpenAI();\n messages = [...messages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage()\n ? instructionsMessage.content\n : \"\";\n\n // get the latest user message\n const userMessage = messages\n .map((m) =>\n convertMessageToOpenAIMessage(m, {\n keepSystemRole: this.keepSystemRole,\n }),\n )\n .map(convertSystemMessageToAssistantAPI)\n .at(-1);\n\n if (userMessage.role !== \"user\") {\n throw new Error(\"No user message found\");\n }\n\n await 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\n ? [{ type: \"code_interpreter\" } as AssistantTool]\n : []),\n ...(this.fileSearchEnabled\n ? [{ type: \"file_search\" } as AssistantTool]\n : []),\n ];\n\n let stream = 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(\n stream: AssistantStream,\n eventSource: RuntimeEventSource,\n ) {\n eventSource.stream(async (eventStream$) => {\n let inFunctionCall = false;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n for await (const chunk of stream) {\n switch (chunk.event) {\n case \"thread.message.created\":\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n currentMessageId = chunk.data.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n break;\n case \"thread.message.delta\":\n if (chunk.data.delta.content?.[0].type === \"text\") {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: chunk.data.delta.content?.[0].text.value,\n });\n }\n break;\n case \"thread.message.completed\":\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\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 =\n chunk.data.delta.step_details.tool_calls?.[0].function.name;\n toolCallArgs =\n chunk.data.delta.step_details.tool_calls?.[0].function\n .arguments;\n }\n\n if (toolCallName && toolCallId) {\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n inFunctionCall = true;\n currentToolCallId = toolCallId;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.data.id,\n actionName: toolCallName,\n });\n } else if (toolCallArgs) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCallArgs,\n });\n }\n break;\n }\n }\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\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"],"mappings":"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"}
1
+ {"version":3,"file":"openai-assistant-adapter.mjs","names":[],"sources":["../../../src/service-adapters/openai/openai-assistant-adapter.ts"],"sourcesContent":["/**\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 type OpenAI from \"openai\";\nimport type { AssistantStream } from \"openai/lib/AssistantStream\";\nimport type {\n AssistantStreamEvent,\n AssistantTool,\n} from \"openai/resources/beta/assistants\";\nimport type {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport type { Message, ResultMessage } from \"../../graphql/types/converted\";\nimport { TextMessage } from \"../../graphql/types/converted\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n convertSystemMessageToAssistantAPI,\n retrieveThreadRun,\n submitToolOutputsStream,\n} from \"./utils\";\nimport type { RuntimeEventSource } from \"../events\";\nimport type { ActionInput } from \"../../graphql/inputs/action.input\";\nimport type { 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 /**\n * Whether to keep the role in system messages as \"System\".\n * By default, it is converted to \"developer\", which is used by newer OpenAI models\n *\n * @default false\n */\n keepSystemRole?: 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 private keepSystemRole: boolean = false;\n\n public get name() {\n return \"OpenAIAssistantAdapter\";\n }\n\n constructor(params: OpenAIAssistantAdapterParams) {\n if (params.openai) {\n this._openai = params.openai;\n }\n // If no instance provided, we'll lazy-load in ensureOpenAI()\n this.codeInterpreterEnabled =\n params.codeInterpreterEnabled === false || true;\n this.fileSearchEnabled = params.fileSearchEnabled === false || true;\n this.assistantId = params.assistantId;\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n this.keepSystemRole = params?.keepSystemRole ?? false;\n }\n\n private ensureOpenAI(): OpenAI {\n if (!this._openai) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const OpenAI = require(\"openai\").default;\n this._openai = new OpenAI({});\n }\n return this._openai;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource, runId, forwardedParameters } =\n request;\n\n // if we don't have a threadId, create a new thread\n let threadId = request.extensions?.openaiAssistantAPI?.threadId;\n const openai = this.ensureOpenAI();\n\n if (!threadId) {\n threadId = (await openai.beta.threads.create()).id;\n }\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(\n threadId,\n runId,\n messages,\n eventSource,\n );\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 runId: nextRunId,\n threadId,\n extensions: {\n ...request.extensions,\n openaiAssistantAPI: {\n threadId: threadId,\n runId: nextRunId,\n },\n },\n };\n }\n\n private async submitToolOutputs(\n threadId: string,\n runId: string,\n messages: Message[],\n eventSource: RuntimeEventSource,\n ) {\n const openai = this.ensureOpenAI();\n let run = await retrieveThreadRun(openai, threadId, runId);\n\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.isResultMessage() &&\n toolCallsIds.includes(message.actionExecutionId),\n ) as ResultMessage[];\n\n if (toolCallsIds.length != resultMessages.length) {\n throw new Error(\n \"Number of function results does not match the number of tool calls\",\n );\n }\n\n // submit the tool outputs\n const toolOutputs: { tool_call_id: string; output: string }[] =\n resultMessages.map((message) => {\n return {\n tool_call_id: message.actionExecutionId,\n output: message.result,\n };\n });\n\n const stream = submitToolOutputsStream(openai, 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 const openai = this.ensureOpenAI();\n messages = [...messages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage()\n ? instructionsMessage.content\n : \"\";\n\n // get the latest user message\n const userMessage = messages\n .map((m) =>\n convertMessageToOpenAIMessage(m, {\n keepSystemRole: this.keepSystemRole,\n }),\n )\n .map(convertSystemMessageToAssistantAPI)\n .at(-1);\n\n if (userMessage.role !== \"user\") {\n throw new Error(\"No user message found\");\n }\n\n await 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\n ? [{ type: \"code_interpreter\" } as AssistantTool]\n : []),\n ...(this.fileSearchEnabled\n ? [{ type: \"file_search\" } as AssistantTool]\n : []),\n ];\n\n let stream = 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(\n stream: AssistantStream,\n eventSource: RuntimeEventSource,\n ) {\n eventSource.stream(async (eventStream$) => {\n let inFunctionCall = false;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n for await (const chunk of stream) {\n switch (chunk.event) {\n case \"thread.message.created\":\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n currentMessageId = chunk.data.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n break;\n case \"thread.message.delta\":\n if (chunk.data.delta.content?.[0].type === \"text\") {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: chunk.data.delta.content?.[0].text.value,\n });\n }\n break;\n case \"thread.message.completed\":\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\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 =\n chunk.data.delta.step_details.tool_calls?.[0].function.name;\n toolCallArgs =\n chunk.data.delta.step_details.tool_calls?.[0].function\n .arguments;\n }\n\n if (toolCallName && toolCallId) {\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n inFunctionCall = true;\n currentToolCallId = toolCallId;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.data.id,\n actionName: toolCallName,\n });\n } else if (toolCallArgs) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCallArgs,\n });\n }\n break;\n }\n }\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\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"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","names":[],"sources":["../../../src/service-adapters/openai/utils.ts"],"sourcesContent":["import type OpenAI from \"openai\";\nimport { Message } from \"../../graphql/types/converted\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport {\n ChatCompletionAssistantMessageParam,\n ChatCompletionMessageParam,\n ChatCompletionSystemMessageParam,\n ChatCompletionTool,\n ChatCompletionUserMessageParam,\n ChatCompletionDeveloperMessageParam,\n} from \"openai/resources/chat\";\nimport { parseJson } from \"@copilotkit/shared\";\n\n/**\n * OpenAI v4 exposes streaming completions under `beta.chat.completions`.\n * v5 removed `beta.chat` and promoted streaming to `chat.completions`.\n * These interfaces model the v4-specific shape so we can detect and access\n * the beta namespace safely without `as any`.\n */\ninterface OpenAIV4BetaChat {\n chat: {\n completions: OpenAI[\"chat\"][\"completions\"];\n };\n}\n\ninterface OpenAIV4Beta extends OpenAI.Beta {\n chat: OpenAIV4BetaChat[\"chat\"];\n}\n\n/**\n * Type guard: checks whether the OpenAI client has the v4-era `beta.chat`\n * namespace. Returns `false` for v5+ clients where `beta.chat` was removed.\n */\nfunction hasV4BetaChat(beta: OpenAI[\"beta\"] | undefined): beta is OpenAIV4Beta {\n return beta != null && \"chat\" in beta && (beta as OpenAIV4Beta).chat != null;\n}\n\n/**\n * Detects whether the provided OpenAI client is v5+ by checking for the\n * removal of the `beta.chat` namespace (which was promoted to `chat` in v5).\n */\nexport function isOpenAIV5(openai: OpenAI): boolean {\n return !hasV4BetaChat(openai.beta);\n}\n\n/**\n * Returns the chat completions object that supports `.stream()`.\n * In v4 this lives under `openai.beta.chat.completions`;\n * in v5 it was promoted to `openai.chat.completions`.\n */\nexport function getChatCompletionsForStreaming(\n openai: OpenAI,\n): OpenAI[\"chat\"][\"completions\"] {\n if (hasV4BetaChat(openai.beta)) {\n return openai.beta.chat.completions;\n }\n return openai.chat.completions;\n}\n\n/**\n * Retrieves a thread run, handling the v4→v5 API signature change.\n * v4: retrieve(threadId, runId)\n * v5: retrieve(runId, { thread_id: threadId })\n */\nexport async function retrieveThreadRun(\n openai: OpenAI,\n threadId: string,\n runId: string,\n): Promise<OpenAI.Beta.Threads.Runs.Run> {\n if (isOpenAIV5(openai)) {\n // v5 switched to named path params. The type definitions from whichever\n // SDK version is installed won't match both signatures, so we call through\n // a generic function reference. This is the one unavoidable boundary\n // between two incompatible SDK type surfaces.\n const retrieve = openai.beta.threads.runs.retrieve as {\n (...args: unknown[]): Promise<OpenAI.Beta.Threads.Runs.Run>;\n };\n return retrieve(runId, { thread_id: threadId });\n }\n return openai.beta.threads.runs.retrieve(threadId, runId);\n}\n\n/**\n * Submits tool outputs as a stream, handling the v4→v5 API signature change.\n * v4: submitToolOutputsStream(threadId, runId, body)\n * v5: submitToolOutputsStream(runId, { thread_id, ...body })\n */\nexport function submitToolOutputsStream(\n openai: OpenAI,\n threadId: string,\n runId: string,\n body: {\n tool_outputs: Array<{ tool_call_id: string; output: string }>;\n parallel_tool_calls?: false;\n },\n) {\n if (isOpenAIV5(openai)) {\n // Same boundary as retrieveThreadRun — v5 uses named path params.\n const submit = openai.beta.threads.runs.submitToolOutputsStream as {\n (\n ...args: unknown[]\n ): ReturnType<typeof openai.beta.threads.runs.submitToolOutputsStream>;\n };\n return submit(runId, { thread_id: threadId, ...body });\n }\n return openai.beta.threads.runs.submitToolOutputsStream(\n threadId,\n runId,\n body,\n );\n}\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(\n `Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`,\n );\n }\n maxTokens -= toolsNumTokens;\n\n for (const message of messages) {\n if ([\"system\", \"developer\"].includes(message.role)) {\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].toReversed();\n for (const message of reversedMessages) {\n if ([\"system\", \"developer\"].includes(message.role)) {\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 // o1\n o1: 200000,\n \"o1-2024-12-17\": 200000,\n \"o1-mini\": 128000,\n \"o1-mini-2024-09-12\": 128000,\n \"o1-preview\": 128000,\n \"o1-preview-2024-09-12\": 128000,\n // o3-mini\n \"o3-mini\": 200000,\n \"o3-mini-2025-01-31\": 200000,\n // GPT-4\n \"gpt-4o\": 128000,\n \"chatgpt-4o-latest\": 128000,\n \"gpt-4o-2024-08-06\": 128000,\n \"gpt-4o-2024-05-13\": 128000,\n \"gpt-4o-mini\": 128000,\n \"gpt-4o-mini-2024-07-18\": 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(\n action: ActionInput,\n): ChatCompletionTool {\n return {\n type: \"function\",\n function: {\n name: action.name,\n description: action.description,\n parameters: parseJson(action.jsonSchema, {}),\n },\n };\n}\n\ntype UsedMessageParams =\n | ChatCompletionUserMessageParam\n | ChatCompletionAssistantMessageParam\n | ChatCompletionDeveloperMessageParam\n | ChatCompletionSystemMessageParam;\nexport function convertMessageToOpenAIMessage(\n message: Message,\n options?: { keepSystemRole: boolean },\n): ChatCompletionMessageParam {\n const { keepSystemRole } = options || { keepSystemRole: false };\n if (message.isTextMessage()) {\n let role = message.role as UsedMessageParams[\"role\"];\n if (message.role === \"system\" && !keepSystemRole) {\n role = \"developer\";\n }\n return {\n role,\n content: message.content,\n } satisfies UsedMessageParams;\n } else if (message.isImageMessage()) {\n return {\n role: \"user\",\n content: [\n {\n type: \"image_url\",\n image_url: {\n url: `data:image/${message.format};base64,${message.bytes}`,\n },\n },\n ],\n } satisfies UsedMessageParams;\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(\n message: ChatCompletionMessageParam,\n) {\n return {\n ...message,\n ...([\"system\", \"developer\"].includes(message.role) && {\n role: \"assistant\",\n content: \"THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: \" + message.content,\n }),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utils.cjs","names":[],"sources":["../../../src/service-adapters/openai/utils.ts"],"sourcesContent":["import type OpenAI from \"openai\";\nimport type { Message } from \"../../graphql/types/converted\";\nimport type { ActionInput } from \"../../graphql/inputs/action.input\";\nimport type {\n ChatCompletionAssistantMessageParam,\n ChatCompletionMessageParam,\n ChatCompletionSystemMessageParam,\n ChatCompletionTool,\n ChatCompletionUserMessageParam,\n ChatCompletionDeveloperMessageParam,\n} from \"openai/resources/chat\";\nimport { parseJson } from \"@copilotkit/shared\";\n\n/**\n * OpenAI v4 exposes streaming completions under `beta.chat.completions`.\n * v5 removed `beta.chat` and promoted streaming to `chat.completions`.\n * These types model the v4-specific shape so we can detect and access\n * the beta namespace safely without `as any`.\n */\ntype StreamingChatCompletions = OpenAI[\"beta\"][\"chat\"][\"completions\"];\n\ninterface OpenAIV4BetaChat {\n chat: {\n completions: StreamingChatCompletions;\n };\n}\n\ntype OpenAIV4Beta = OpenAI[\"beta\"] & OpenAIV4BetaChat;\n\n/**\n * Type guard: checks whether the OpenAI client has the v4-era `beta.chat`\n * namespace. Returns `false` for v5+ clients where `beta.chat` was removed.\n */\nfunction hasV4BetaChat(beta: OpenAI[\"beta\"] | undefined): beta is OpenAIV4Beta {\n return beta != null && \"chat\" in beta && (beta as OpenAIV4Beta).chat != null;\n}\n\n/**\n * Detects whether the provided OpenAI client is v5+ by checking for the\n * removal of the `beta.chat` namespace (which was promoted to `chat` in v5).\n */\nexport function isOpenAIV5(openai: OpenAI): boolean {\n return !hasV4BetaChat(openai.beta);\n}\n\n/**\n * Returns the chat completions object that supports `.stream()`.\n * In v4 this lives under `openai.beta.chat.completions`;\n * in v5 it was promoted to `openai.chat.completions`.\n */\nexport function getChatCompletionsForStreaming(\n openai: OpenAI,\n): StreamingChatCompletions {\n if (hasV4BetaChat(openai.beta)) {\n return openai.beta.chat.completions;\n }\n // v5+ runtime: streaming was promoted to `chat.completions`, which the\n // installed v4 type definitions don't model — same boundary between two\n // incompatible SDK type surfaces as retrieveThreadRun below.\n return openai.chat.completions as unknown as StreamingChatCompletions;\n}\n\n/**\n * Retrieves a thread run, handling the v4→v5 API signature change.\n * v4: retrieve(threadId, runId)\n * v5: retrieve(runId, { thread_id: threadId })\n */\nexport async function retrieveThreadRun(\n openai: OpenAI,\n threadId: string,\n runId: string,\n): Promise<OpenAI.Beta.Threads.Runs.Run> {\n if (isOpenAIV5(openai)) {\n // v5 switched to named path params. The type definitions from whichever\n // SDK version is installed won't match both signatures, so we call through\n // a generic function reference. This is the one unavoidable boundary\n // between two incompatible SDK type surfaces.\n const retrieve = openai.beta.threads.runs.retrieve as {\n (...args: unknown[]): Promise<OpenAI.Beta.Threads.Runs.Run>;\n };\n return retrieve(runId, { thread_id: threadId });\n }\n return openai.beta.threads.runs.retrieve(threadId, runId);\n}\n\n/**\n * Submits tool outputs as a stream, handling the v4→v5 API signature change.\n * v4: submitToolOutputsStream(threadId, runId, body)\n * v5: submitToolOutputsStream(runId, { thread_id, ...body })\n */\nexport function submitToolOutputsStream(\n openai: OpenAI,\n threadId: string,\n runId: string,\n body: {\n tool_outputs: Array<{ tool_call_id: string; output: string }>;\n parallel_tool_calls?: false;\n },\n) {\n if (isOpenAIV5(openai)) {\n // Same boundary as retrieveThreadRun — v5 uses named path params.\n const submit = openai.beta.threads.runs.submitToolOutputsStream as {\n (\n ...args: unknown[]\n ): ReturnType<typeof openai.beta.threads.runs.submitToolOutputsStream>;\n };\n return submit(runId, { thread_id: threadId, ...body });\n }\n return openai.beta.threads.runs.submitToolOutputsStream(\n threadId,\n runId,\n body,\n );\n}\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(\n `Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`,\n );\n }\n maxTokens -= toolsNumTokens;\n\n for (const message of messages) {\n if ([\"system\", \"developer\"].includes(message.role)) {\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].toReversed();\n for (const message of reversedMessages) {\n if ([\"system\", \"developer\"].includes(message.role)) {\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 // o1\n o1: 200000,\n \"o1-2024-12-17\": 200000,\n \"o1-mini\": 128000,\n \"o1-mini-2024-09-12\": 128000,\n \"o1-preview\": 128000,\n \"o1-preview-2024-09-12\": 128000,\n // o3-mini\n \"o3-mini\": 200000,\n \"o3-mini-2025-01-31\": 200000,\n // GPT-4\n \"gpt-4o\": 128000,\n \"chatgpt-4o-latest\": 128000,\n \"gpt-4o-2024-08-06\": 128000,\n \"gpt-4o-2024-05-13\": 128000,\n \"gpt-4o-mini\": 128000,\n \"gpt-4o-mini-2024-07-18\": 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(\n action: ActionInput,\n): ChatCompletionTool {\n return {\n type: \"function\",\n function: {\n name: action.name,\n description: action.description,\n parameters: parseJson(action.jsonSchema, {}),\n },\n };\n}\n\ntype UsedMessageParams =\n | ChatCompletionUserMessageParam\n | ChatCompletionAssistantMessageParam\n | ChatCompletionDeveloperMessageParam\n | ChatCompletionSystemMessageParam;\nexport function convertMessageToOpenAIMessage(\n message: Message,\n options?: { keepSystemRole: boolean },\n): ChatCompletionMessageParam {\n const { keepSystemRole } = options || { keepSystemRole: false };\n if (message.isTextMessage()) {\n let role = message.role as UsedMessageParams[\"role\"];\n if (message.role === \"system\" && !keepSystemRole) {\n role = \"developer\";\n }\n return {\n role,\n content: message.content,\n } satisfies UsedMessageParams;\n } else if (message.isImageMessage()) {\n return {\n role: \"user\",\n content: [\n {\n type: \"image_url\",\n image_url: {\n url: `data:image/${message.format};base64,${message.bytes}`,\n },\n },\n ],\n } satisfies UsedMessageParams;\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(\n message: ChatCompletionMessageParam,\n) {\n return {\n ...message,\n ...([\"system\", \"developer\"].includes(message.role) && {\n role: \"assistant\",\n content: \"THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: \" + message.content,\n }),\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","names":[],"sources":["../../../src/service-adapters/openai/utils.ts"],"sourcesContent":["import type OpenAI from \"openai\";\nimport { Message } from \"../../graphql/types/converted\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport {\n ChatCompletionAssistantMessageParam,\n ChatCompletionMessageParam,\n ChatCompletionSystemMessageParam,\n ChatCompletionTool,\n ChatCompletionUserMessageParam,\n ChatCompletionDeveloperMessageParam,\n} from \"openai/resources/chat\";\nimport { parseJson } from \"@copilotkit/shared\";\n\n/**\n * OpenAI v4 exposes streaming completions under `beta.chat.completions`.\n * v5 removed `beta.chat` and promoted streaming to `chat.completions`.\n * These interfaces model the v4-specific shape so we can detect and access\n * the beta namespace safely without `as any`.\n */\ninterface OpenAIV4BetaChat {\n chat: {\n completions: OpenAI[\"chat\"][\"completions\"];\n };\n}\n\ninterface OpenAIV4Beta extends OpenAI.Beta {\n chat: OpenAIV4BetaChat[\"chat\"];\n}\n\n/**\n * Type guard: checks whether the OpenAI client has the v4-era `beta.chat`\n * namespace. Returns `false` for v5+ clients where `beta.chat` was removed.\n */\nfunction hasV4BetaChat(beta: OpenAI[\"beta\"] | undefined): beta is OpenAIV4Beta {\n return beta != null && \"chat\" in beta && (beta as OpenAIV4Beta).chat != null;\n}\n\n/**\n * Detects whether the provided OpenAI client is v5+ by checking for the\n * removal of the `beta.chat` namespace (which was promoted to `chat` in v5).\n */\nexport function isOpenAIV5(openai: OpenAI): boolean {\n return !hasV4BetaChat(openai.beta);\n}\n\n/**\n * Returns the chat completions object that supports `.stream()`.\n * In v4 this lives under `openai.beta.chat.completions`;\n * in v5 it was promoted to `openai.chat.completions`.\n */\nexport function getChatCompletionsForStreaming(\n openai: OpenAI,\n): OpenAI[\"chat\"][\"completions\"] {\n if (hasV4BetaChat(openai.beta)) {\n return openai.beta.chat.completions;\n }\n return openai.chat.completions;\n}\n\n/**\n * Retrieves a thread run, handling the v4→v5 API signature change.\n * v4: retrieve(threadId, runId)\n * v5: retrieve(runId, { thread_id: threadId })\n */\nexport async function retrieveThreadRun(\n openai: OpenAI,\n threadId: string,\n runId: string,\n): Promise<OpenAI.Beta.Threads.Runs.Run> {\n if (isOpenAIV5(openai)) {\n // v5 switched to named path params. The type definitions from whichever\n // SDK version is installed won't match both signatures, so we call through\n // a generic function reference. This is the one unavoidable boundary\n // between two incompatible SDK type surfaces.\n const retrieve = openai.beta.threads.runs.retrieve as {\n (...args: unknown[]): Promise<OpenAI.Beta.Threads.Runs.Run>;\n };\n return retrieve(runId, { thread_id: threadId });\n }\n return openai.beta.threads.runs.retrieve(threadId, runId);\n}\n\n/**\n * Submits tool outputs as a stream, handling the v4→v5 API signature change.\n * v4: submitToolOutputsStream(threadId, runId, body)\n * v5: submitToolOutputsStream(runId, { thread_id, ...body })\n */\nexport function submitToolOutputsStream(\n openai: OpenAI,\n threadId: string,\n runId: string,\n body: {\n tool_outputs: Array<{ tool_call_id: string; output: string }>;\n parallel_tool_calls?: false;\n },\n) {\n if (isOpenAIV5(openai)) {\n // Same boundary as retrieveThreadRun — v5 uses named path params.\n const submit = openai.beta.threads.runs.submitToolOutputsStream as {\n (\n ...args: unknown[]\n ): ReturnType<typeof openai.beta.threads.runs.submitToolOutputsStream>;\n };\n return submit(runId, { thread_id: threadId, ...body });\n }\n return openai.beta.threads.runs.submitToolOutputsStream(\n threadId,\n runId,\n body,\n );\n}\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(\n `Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`,\n );\n }\n maxTokens -= toolsNumTokens;\n\n for (const message of messages) {\n if ([\"system\", \"developer\"].includes(message.role)) {\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].toReversed();\n for (const message of reversedMessages) {\n if ([\"system\", \"developer\"].includes(message.role)) {\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 // o1\n o1: 200000,\n \"o1-2024-12-17\": 200000,\n \"o1-mini\": 128000,\n \"o1-mini-2024-09-12\": 128000,\n \"o1-preview\": 128000,\n \"o1-preview-2024-09-12\": 128000,\n // o3-mini\n \"o3-mini\": 200000,\n \"o3-mini-2025-01-31\": 200000,\n // GPT-4\n \"gpt-4o\": 128000,\n \"chatgpt-4o-latest\": 128000,\n \"gpt-4o-2024-08-06\": 128000,\n \"gpt-4o-2024-05-13\": 128000,\n \"gpt-4o-mini\": 128000,\n \"gpt-4o-mini-2024-07-18\": 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(\n action: ActionInput,\n): ChatCompletionTool {\n return {\n type: \"function\",\n function: {\n name: action.name,\n description: action.description,\n parameters: parseJson(action.jsonSchema, {}),\n },\n };\n}\n\ntype UsedMessageParams =\n | ChatCompletionUserMessageParam\n | ChatCompletionAssistantMessageParam\n | ChatCompletionDeveloperMessageParam\n | ChatCompletionSystemMessageParam;\nexport function convertMessageToOpenAIMessage(\n message: Message,\n options?: { keepSystemRole: boolean },\n): ChatCompletionMessageParam {\n const { keepSystemRole } = options || { keepSystemRole: false };\n if (message.isTextMessage()) {\n let role = message.role as UsedMessageParams[\"role\"];\n if (message.role === \"system\" && !keepSystemRole) {\n role = \"developer\";\n }\n return {\n role,\n content: message.content,\n } satisfies UsedMessageParams;\n } else if (message.isImageMessage()) {\n return {\n role: \"user\",\n content: [\n {\n type: \"image_url\",\n image_url: {\n url: `data:image/${message.format};base64,${message.bytes}`,\n },\n },\n ],\n } satisfies UsedMessageParams;\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(\n message: ChatCompletionMessageParam,\n) {\n return {\n ...message,\n ...([\"system\", \"developer\"].includes(message.role) && {\n role: \"assistant\",\n content: \"THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: \" + message.content,\n }),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utils.mjs","names":[],"sources":["../../../src/service-adapters/openai/utils.ts"],"sourcesContent":["import type OpenAI from \"openai\";\nimport type { Message } from \"../../graphql/types/converted\";\nimport type { ActionInput } from \"../../graphql/inputs/action.input\";\nimport type {\n ChatCompletionAssistantMessageParam,\n ChatCompletionMessageParam,\n ChatCompletionSystemMessageParam,\n ChatCompletionTool,\n ChatCompletionUserMessageParam,\n ChatCompletionDeveloperMessageParam,\n} from \"openai/resources/chat\";\nimport { parseJson } from \"@copilotkit/shared\";\n\n/**\n * OpenAI v4 exposes streaming completions under `beta.chat.completions`.\n * v5 removed `beta.chat` and promoted streaming to `chat.completions`.\n * These types model the v4-specific shape so we can detect and access\n * the beta namespace safely without `as any`.\n */\ntype StreamingChatCompletions = OpenAI[\"beta\"][\"chat\"][\"completions\"];\n\ninterface OpenAIV4BetaChat {\n chat: {\n completions: StreamingChatCompletions;\n };\n}\n\ntype OpenAIV4Beta = OpenAI[\"beta\"] & OpenAIV4BetaChat;\n\n/**\n * Type guard: checks whether the OpenAI client has the v4-era `beta.chat`\n * namespace. Returns `false` for v5+ clients where `beta.chat` was removed.\n */\nfunction hasV4BetaChat(beta: OpenAI[\"beta\"] | undefined): beta is OpenAIV4Beta {\n return beta != null && \"chat\" in beta && (beta as OpenAIV4Beta).chat != null;\n}\n\n/**\n * Detects whether the provided OpenAI client is v5+ by checking for the\n * removal of the `beta.chat` namespace (which was promoted to `chat` in v5).\n */\nexport function isOpenAIV5(openai: OpenAI): boolean {\n return !hasV4BetaChat(openai.beta);\n}\n\n/**\n * Returns the chat completions object that supports `.stream()`.\n * In v4 this lives under `openai.beta.chat.completions`;\n * in v5 it was promoted to `openai.chat.completions`.\n */\nexport function getChatCompletionsForStreaming(\n openai: OpenAI,\n): StreamingChatCompletions {\n if (hasV4BetaChat(openai.beta)) {\n return openai.beta.chat.completions;\n }\n // v5+ runtime: streaming was promoted to `chat.completions`, which the\n // installed v4 type definitions don't model — same boundary between two\n // incompatible SDK type surfaces as retrieveThreadRun below.\n return openai.chat.completions as unknown as StreamingChatCompletions;\n}\n\n/**\n * Retrieves a thread run, handling the v4→v5 API signature change.\n * v4: retrieve(threadId, runId)\n * v5: retrieve(runId, { thread_id: threadId })\n */\nexport async function retrieveThreadRun(\n openai: OpenAI,\n threadId: string,\n runId: string,\n): Promise<OpenAI.Beta.Threads.Runs.Run> {\n if (isOpenAIV5(openai)) {\n // v5 switched to named path params. The type definitions from whichever\n // SDK version is installed won't match both signatures, so we call through\n // a generic function reference. This is the one unavoidable boundary\n // between two incompatible SDK type surfaces.\n const retrieve = openai.beta.threads.runs.retrieve as {\n (...args: unknown[]): Promise<OpenAI.Beta.Threads.Runs.Run>;\n };\n return retrieve(runId, { thread_id: threadId });\n }\n return openai.beta.threads.runs.retrieve(threadId, runId);\n}\n\n/**\n * Submits tool outputs as a stream, handling the v4→v5 API signature change.\n * v4: submitToolOutputsStream(threadId, runId, body)\n * v5: submitToolOutputsStream(runId, { thread_id, ...body })\n */\nexport function submitToolOutputsStream(\n openai: OpenAI,\n threadId: string,\n runId: string,\n body: {\n tool_outputs: Array<{ tool_call_id: string; output: string }>;\n parallel_tool_calls?: false;\n },\n) {\n if (isOpenAIV5(openai)) {\n // Same boundary as retrieveThreadRun — v5 uses named path params.\n const submit = openai.beta.threads.runs.submitToolOutputsStream as {\n (\n ...args: unknown[]\n ): ReturnType<typeof openai.beta.threads.runs.submitToolOutputsStream>;\n };\n return submit(runId, { thread_id: threadId, ...body });\n }\n return openai.beta.threads.runs.submitToolOutputsStream(\n threadId,\n runId,\n body,\n );\n}\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(\n `Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`,\n );\n }\n maxTokens -= toolsNumTokens;\n\n for (const message of messages) {\n if ([\"system\", \"developer\"].includes(message.role)) {\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].toReversed();\n for (const message of reversedMessages) {\n if ([\"system\", \"developer\"].includes(message.role)) {\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 // o1\n o1: 200000,\n \"o1-2024-12-17\": 200000,\n \"o1-mini\": 128000,\n \"o1-mini-2024-09-12\": 128000,\n \"o1-preview\": 128000,\n \"o1-preview-2024-09-12\": 128000,\n // o3-mini\n \"o3-mini\": 200000,\n \"o3-mini-2025-01-31\": 200000,\n // GPT-4\n \"gpt-4o\": 128000,\n \"chatgpt-4o-latest\": 128000,\n \"gpt-4o-2024-08-06\": 128000,\n \"gpt-4o-2024-05-13\": 128000,\n \"gpt-4o-mini\": 128000,\n \"gpt-4o-mini-2024-07-18\": 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(\n action: ActionInput,\n): ChatCompletionTool {\n return {\n type: \"function\",\n function: {\n name: action.name,\n description: action.description,\n parameters: parseJson(action.jsonSchema, {}),\n },\n };\n}\n\ntype UsedMessageParams =\n | ChatCompletionUserMessageParam\n | ChatCompletionAssistantMessageParam\n | ChatCompletionDeveloperMessageParam\n | ChatCompletionSystemMessageParam;\nexport function convertMessageToOpenAIMessage(\n message: Message,\n options?: { keepSystemRole: boolean },\n): ChatCompletionMessageParam {\n const { keepSystemRole } = options || { keepSystemRole: false };\n if (message.isTextMessage()) {\n let role = message.role as UsedMessageParams[\"role\"];\n if (message.role === \"system\" && !keepSystemRole) {\n role = \"developer\";\n }\n return {\n role,\n content: message.content,\n } satisfies UsedMessageParams;\n } else if (message.isImageMessage()) {\n return {\n role: \"user\",\n content: [\n {\n type: \"image_url\",\n image_url: {\n url: `data:image/${message.format};base64,${message.bytes}`,\n },\n },\n ],\n } satisfies UsedMessageParams;\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(\n message: ChatCompletionMessageParam,\n) {\n return {\n ...message,\n ...([\"system\", \"developer\"].includes(message.role) && {\n role: \"assistant\",\n content: \"THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: \" + message.content,\n }),\n };\n}\n"],"mappings":"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"}
package/dist/v2/index.cjs CHANGED
@@ -26,6 +26,7 @@ exports.CopilotRuntime = require_runtime$1.CopilotRuntime;
26
26
  exports.CopilotSseRuntime = require_runtime$1.CopilotSseRuntime;
27
27
  exports.InMemoryAgentRunner = require_in_memory.InMemoryAgentRunner;
28
28
  exports.IntelligenceAgentRunner = require_intelligence.IntelligenceAgentRunner;
29
+ exports.InterruptSignal = require_index.InterruptSignal;
29
30
  exports.TranscriptionService = require_transcription_service.TranscriptionService;
30
31
  exports.VERSION = require_runtime$1.VERSION;
31
32
  exports.convertAISDKStream = require_aisdk.convertAISDKStream;
@@ -16,5 +16,5 @@ import { CopilotRuntimeFetchHandler, CopilotRuntimeHandlerOptions, createCopilot
16
16
  import { CopilotKitRequestHandler, MCPClient, MCPTransport } from "./runtime/index.cjs";
17
17
  import { convertAISDKStream } from "../agent/converters/aisdk.cjs";
18
18
  import { TanStackChatMessage, TanStackInputResult, convertInputToTanStackAI, convertTanStackStream } from "../agent/converters/tanstack.cjs";
19
- import { BasicAgent, BasicAgentConfiguration, BuiltInAgent, BuiltInAgentAISDKFactoryConfig, BuiltInAgentClassicConfig, BuiltInAgentConfiguration, BuiltInAgentCustomFactoryConfig, BuiltInAgentFactoryConfig, BuiltInAgentModel, BuiltInAgentTanStackFactoryConfig, MCPClientConfig, MCPClientConfigHTTP, MCPClientConfigSSE, MCPClientProvider, MessageConversionOptions, ModelSpecifier, OverridableProperty, ToolDefinition, convertJsonSchemaToZodSchema, convertMessagesToVercelAISDKMessages, convertToolDefinitionsToVercelAITools, convertToolsToVercelAITools, defineTool, resolveModel } from "../agent/index.cjs";
20
- export { AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest, AgentsConfig, AgentsFactory, BasicAgent, BasicAgentConfiguration, BuiltInAgent, BuiltInAgentAISDKFactoryConfig, BuiltInAgentClassicConfig, BuiltInAgentConfiguration, BuiltInAgentCustomFactoryConfig, BuiltInAgentFactoryConfig, BuiltInAgentModel, BuiltInAgentTanStackFactoryConfig, CopilotCorsConfig, CopilotEndpointCorsConfig, CopilotExpressEndpointParams, CopilotIntelligenceRuntime, CopilotIntelligenceRuntimeLike, CopilotIntelligenceRuntimeOptions, CopilotKitIntelligence, CopilotKitIntelligenceConfig, CopilotKitRequestHandler, CopilotRuntime, CopilotRuntimeFetchHandler, CopilotRuntimeHandlerOptions, CopilotRuntimeHooks, CopilotRuntimeLike, CopilotRuntimeOptions, CopilotRuntimeUser, CopilotSseRuntime, CopilotSseRuntimeLike, CopilotSseRuntimeOptions, CreateThreadRequest, ErrorHookContext, HandlerHookContext, HookContext, IdentifyUserCallback, InMemoryAgentRunner, InMemoryThread, IntelligenceAgentRunner, IntelligenceAgentRunnerOptions, ListThreadsResponse, LocalThreadEndpointRecord, LocalThreadEndpointRunner, MCPClient, MCPClientConfig, MCPClientConfigHTTP, MCPClientConfigSSE, MCPClientProvider, MCPTransport, McpAppsConfig, McpAppsServerConfig, MessageConversionOptions, ModelSpecifier, OpenGenerativeUIConfig, OpenGenerativeUIOptions, OverridableProperty, ResponseHookContext, RouteInfo, RunnerStartupBoundary, SubscribeToThreadsRequest, SubscribeToThreadsResponse, TanStackChatMessage, TanStackInputResult, ThreadSummary, ToolDefinition, TranscribeFileOptions, TranscriptionService, UpdateThreadRequest, VERSION, convertAISDKStream, convertInputToTanStackAI, convertJsonSchemaToZodSchema, convertMessagesToVercelAISDKMessages, convertTanStackStream, convertToolDefinitionsToVercelAITools, convertToolsToVercelAITools, createCopilotEndpoint, createCopilotExpressHandler as createCopilotEndpointExpress, createCopilotExpressHandler, createCopilotEndpointSingleRoute, createCopilotEndpointSingleRouteExpress, createCopilotHonoHandler, createCopilotRuntimeHandler, defineTool, finalizeRunEvents, isA2UIEnabled, isIntelligenceRuntime, resolveAgents, resolveModel, supportsLocalThreadEndpoints, toFetchCorsConfig };
19
+ import { BasicAgent, BasicAgentConfiguration, BuiltInAgent, BuiltInAgentAISDKFactoryConfig, BuiltInAgentClassicConfig, BuiltInAgentConfiguration, BuiltInAgentCustomFactoryConfig, BuiltInAgentFactoryConfig, BuiltInAgentModel, BuiltInAgentTanStackFactoryConfig, InterruptSignal, MCPClientConfig, MCPClientConfigHTTP, MCPClientConfigSSE, MCPClientProvider, MessageConversionOptions, ModelSpecifier, OverridableProperty, ToolDefinition, convertJsonSchemaToZodSchema, convertMessagesToVercelAISDKMessages, convertToolDefinitionsToVercelAITools, convertToolsToVercelAITools, defineTool, resolveModel } from "../agent/index.cjs";
20
+ export { type AgentFactoryContext, AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest, AgentsConfig, AgentsFactory, BasicAgent, BasicAgentConfiguration, BuiltInAgent, BuiltInAgentAISDKFactoryConfig, BuiltInAgentClassicConfig, BuiltInAgentConfiguration, BuiltInAgentCustomFactoryConfig, BuiltInAgentFactoryConfig, BuiltInAgentModel, BuiltInAgentTanStackFactoryConfig, CopilotCorsConfig, CopilotEndpointCorsConfig, CopilotExpressEndpointParams, CopilotIntelligenceRuntime, CopilotIntelligenceRuntimeLike, CopilotIntelligenceRuntimeOptions, CopilotKitIntelligence, CopilotKitIntelligenceConfig, CopilotKitRequestHandler, CopilotRuntime, CopilotRuntimeFetchHandler, CopilotRuntimeHandlerOptions, CopilotRuntimeHooks, CopilotRuntimeLike, CopilotRuntimeOptions, CopilotRuntimeUser, CopilotSseRuntime, CopilotSseRuntimeLike, CopilotSseRuntimeOptions, CreateThreadRequest, ErrorHookContext, HandlerHookContext, HookContext, IdentifyUserCallback, InMemoryAgentRunner, InMemoryThread, IntelligenceAgentRunner, IntelligenceAgentRunnerOptions, InterruptSignal, ListThreadsResponse, LocalThreadEndpointRecord, LocalThreadEndpointRunner, MCPClient, MCPClientConfig, MCPClientConfigHTTP, MCPClientConfigSSE, MCPClientProvider, MCPTransport, McpAppsConfig, McpAppsServerConfig, MessageConversionOptions, ModelSpecifier, OpenGenerativeUIConfig, OpenGenerativeUIOptions, OverridableProperty, ResponseHookContext, RouteInfo, RunnerStartupBoundary, SubscribeToThreadsRequest, SubscribeToThreadsResponse, TanStackChatMessage, TanStackInputResult, ThreadSummary, ToolDefinition, TranscribeFileOptions, TranscriptionService, UpdateThreadRequest, VERSION, convertAISDKStream, convertInputToTanStackAI, convertJsonSchemaToZodSchema, convertMessagesToVercelAISDKMessages, convertTanStackStream, convertToolDefinitionsToVercelAITools, convertToolsToVercelAITools, createCopilotEndpoint, createCopilotExpressHandler as createCopilotEndpointExpress, createCopilotExpressHandler, createCopilotEndpointSingleRoute, createCopilotEndpointSingleRouteExpress, createCopilotHonoHandler, createCopilotRuntimeHandler, defineTool, finalizeRunEvents, isA2UIEnabled, isIntelligenceRuntime, resolveAgents, resolveModel, supportsLocalThreadEndpoints, toFetchCorsConfig };
@@ -16,5 +16,5 @@ import { CopilotRuntimeFetchHandler, CopilotRuntimeHandlerOptions, createCopilot
16
16
  import { CopilotKitRequestHandler, MCPClient, MCPTransport } from "./runtime/index.mjs";
17
17
  import { convertAISDKStream } from "../agent/converters/aisdk.mjs";
18
18
  import { TanStackChatMessage, TanStackInputResult, convertInputToTanStackAI, convertTanStackStream } from "../agent/converters/tanstack.mjs";
19
- import { BasicAgent, BasicAgentConfiguration, BuiltInAgent, BuiltInAgentAISDKFactoryConfig, BuiltInAgentClassicConfig, BuiltInAgentConfiguration, BuiltInAgentCustomFactoryConfig, BuiltInAgentFactoryConfig, BuiltInAgentModel, BuiltInAgentTanStackFactoryConfig, MCPClientConfig, MCPClientConfigHTTP, MCPClientConfigSSE, MCPClientProvider, MessageConversionOptions, ModelSpecifier, OverridableProperty, ToolDefinition, convertJsonSchemaToZodSchema, convertMessagesToVercelAISDKMessages, convertToolDefinitionsToVercelAITools, convertToolsToVercelAITools, defineTool, resolveModel } from "../agent/index.mjs";
20
- export { AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest, AgentsConfig, AgentsFactory, BasicAgent, BasicAgentConfiguration, BuiltInAgent, BuiltInAgentAISDKFactoryConfig, BuiltInAgentClassicConfig, BuiltInAgentConfiguration, BuiltInAgentCustomFactoryConfig, BuiltInAgentFactoryConfig, BuiltInAgentModel, BuiltInAgentTanStackFactoryConfig, CopilotCorsConfig, CopilotEndpointCorsConfig, CopilotExpressEndpointParams, CopilotIntelligenceRuntime, CopilotIntelligenceRuntimeLike, CopilotIntelligenceRuntimeOptions, CopilotKitIntelligence, CopilotKitIntelligenceConfig, CopilotKitRequestHandler, CopilotRuntime, CopilotRuntimeFetchHandler, CopilotRuntimeHandlerOptions, CopilotRuntimeHooks, CopilotRuntimeLike, CopilotRuntimeOptions, CopilotRuntimeUser, CopilotSseRuntime, CopilotSseRuntimeLike, CopilotSseRuntimeOptions, CreateThreadRequest, ErrorHookContext, HandlerHookContext, HookContext, IdentifyUserCallback, InMemoryAgentRunner, InMemoryThread, IntelligenceAgentRunner, IntelligenceAgentRunnerOptions, ListThreadsResponse, LocalThreadEndpointRecord, LocalThreadEndpointRunner, MCPClient, MCPClientConfig, MCPClientConfigHTTP, MCPClientConfigSSE, MCPClientProvider, MCPTransport, McpAppsConfig, McpAppsServerConfig, MessageConversionOptions, ModelSpecifier, OpenGenerativeUIConfig, OpenGenerativeUIOptions, OverridableProperty, ResponseHookContext, RouteInfo, RunnerStartupBoundary, SubscribeToThreadsRequest, SubscribeToThreadsResponse, TanStackChatMessage, TanStackInputResult, ThreadSummary, ToolDefinition, TranscribeFileOptions, TranscriptionService, UpdateThreadRequest, VERSION, convertAISDKStream, convertInputToTanStackAI, convertJsonSchemaToZodSchema, convertMessagesToVercelAISDKMessages, convertTanStackStream, convertToolDefinitionsToVercelAITools, convertToolsToVercelAITools, createCopilotEndpoint, createCopilotExpressHandler as createCopilotEndpointExpress, createCopilotExpressHandler, createCopilotEndpointSingleRoute, createCopilotEndpointSingleRouteExpress, createCopilotHonoHandler, createCopilotRuntimeHandler, defineTool, finalizeRunEvents, isA2UIEnabled, isIntelligenceRuntime, resolveAgents, resolveModel, supportsLocalThreadEndpoints, toFetchCorsConfig };
19
+ import { BasicAgent, BasicAgentConfiguration, BuiltInAgent, BuiltInAgentAISDKFactoryConfig, BuiltInAgentClassicConfig, BuiltInAgentConfiguration, BuiltInAgentCustomFactoryConfig, BuiltInAgentFactoryConfig, BuiltInAgentModel, BuiltInAgentTanStackFactoryConfig, InterruptSignal, MCPClientConfig, MCPClientConfigHTTP, MCPClientConfigSSE, MCPClientProvider, MessageConversionOptions, ModelSpecifier, OverridableProperty, ToolDefinition, convertJsonSchemaToZodSchema, convertMessagesToVercelAISDKMessages, convertToolDefinitionsToVercelAITools, convertToolsToVercelAITools, defineTool, resolveModel } from "../agent/index.mjs";
20
+ export { type AgentFactoryContext, AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest, AgentsConfig, AgentsFactory, BasicAgent, BasicAgentConfiguration, BuiltInAgent, BuiltInAgentAISDKFactoryConfig, BuiltInAgentClassicConfig, BuiltInAgentConfiguration, BuiltInAgentCustomFactoryConfig, BuiltInAgentFactoryConfig, BuiltInAgentModel, BuiltInAgentTanStackFactoryConfig, CopilotCorsConfig, CopilotEndpointCorsConfig, CopilotExpressEndpointParams, CopilotIntelligenceRuntime, CopilotIntelligenceRuntimeLike, CopilotIntelligenceRuntimeOptions, CopilotKitIntelligence, CopilotKitIntelligenceConfig, CopilotKitRequestHandler, CopilotRuntime, CopilotRuntimeFetchHandler, CopilotRuntimeHandlerOptions, CopilotRuntimeHooks, CopilotRuntimeLike, CopilotRuntimeOptions, CopilotRuntimeUser, CopilotSseRuntime, CopilotSseRuntimeLike, CopilotSseRuntimeOptions, CreateThreadRequest, ErrorHookContext, HandlerHookContext, HookContext, IdentifyUserCallback, InMemoryAgentRunner, InMemoryThread, IntelligenceAgentRunner, IntelligenceAgentRunnerOptions, InterruptSignal, ListThreadsResponse, LocalThreadEndpointRecord, LocalThreadEndpointRunner, MCPClient, MCPClientConfig, MCPClientConfigHTTP, MCPClientConfigSSE, MCPClientProvider, MCPTransport, McpAppsConfig, McpAppsServerConfig, MessageConversionOptions, ModelSpecifier, OpenGenerativeUIConfig, OpenGenerativeUIOptions, OverridableProperty, ResponseHookContext, RouteInfo, RunnerStartupBoundary, SubscribeToThreadsRequest, SubscribeToThreadsResponse, TanStackChatMessage, TanStackInputResult, ThreadSummary, ToolDefinition, TranscribeFileOptions, TranscriptionService, UpdateThreadRequest, VERSION, convertAISDKStream, convertInputToTanStackAI, convertJsonSchemaToZodSchema, convertMessagesToVercelAISDKMessages, convertTanStackStream, convertToolDefinitionsToVercelAITools, convertToolsToVercelAITools, createCopilotEndpoint, createCopilotExpressHandler as createCopilotEndpointExpress, createCopilotExpressHandler, createCopilotEndpointSingleRoute, createCopilotEndpointSingleRouteExpress, createCopilotHonoHandler, createCopilotRuntimeHandler, defineTool, finalizeRunEvents, isA2UIEnabled, isIntelligenceRuntime, resolveAgents, resolveModel, supportsLocalThreadEndpoints, toFetchCorsConfig };
package/dist/v2/index.mjs CHANGED
@@ -13,6 +13,6 @@ import { finalizeRunEvents } from "./runtime/runner/index.mjs";
13
13
  import { TranscriptionService } from "./runtime/transcription-service/transcription-service.mjs";
14
14
  import { convertAISDKStream } from "../agent/converters/aisdk.mjs";
15
15
  import { convertInputToTanStackAI, convertTanStackStream } from "../agent/converters/tanstack.mjs";
16
- import { BasicAgent, BuiltInAgent, convertJsonSchemaToZodSchema, convertMessagesToVercelAISDKMessages, convertToolDefinitionsToVercelAITools, convertToolsToVercelAITools, defineTool, resolveModel } from "../agent/index.mjs";
16
+ import { BasicAgent, BuiltInAgent, InterruptSignal, convertJsonSchemaToZodSchema, convertMessagesToVercelAISDKMessages, convertToolDefinitionsToVercelAITools, convertToolsToVercelAITools, defineTool, resolveModel } from "../agent/index.mjs";
17
17
 
18
- export { AgentRunner, BasicAgent, BuiltInAgent, CopilotIntelligenceRuntime, CopilotKitIntelligence, CopilotRuntime, CopilotSseRuntime, InMemoryAgentRunner, IntelligenceAgentRunner, TranscriptionService, VERSION, convertAISDKStream, convertInputToTanStackAI, convertJsonSchemaToZodSchema, convertMessagesToVercelAISDKMessages, convertTanStackStream, convertToolDefinitionsToVercelAITools, convertToolsToVercelAITools, createCopilotEndpoint, createCopilotExpressHandler as createCopilotEndpointExpress, createCopilotExpressHandler, createCopilotEndpointSingleRoute, createCopilotEndpointSingleRouteExpress, createCopilotHonoHandler, createCopilotRuntimeHandler, defineTool, finalizeRunEvents, isA2UIEnabled, isIntelligenceRuntime, resolveAgents, resolveModel, supportsLocalThreadEndpoints, toFetchCorsConfig };
18
+ export { AgentRunner, BasicAgent, BuiltInAgent, CopilotIntelligenceRuntime, CopilotKitIntelligence, CopilotRuntime, CopilotSseRuntime, InMemoryAgentRunner, IntelligenceAgentRunner, InterruptSignal, TranscriptionService, VERSION, convertAISDKStream, convertInputToTanStackAI, convertJsonSchemaToZodSchema, convertMessagesToVercelAISDKMessages, convertTanStackStream, convertToolDefinitionsToVercelAITools, convertToolsToVercelAITools, createCopilotEndpoint, createCopilotExpressHandler as createCopilotEndpointExpress, createCopilotExpressHandler, createCopilotEndpointSingleRoute, createCopilotEndpointSingleRouteExpress, createCopilotHonoHandler, createCopilotRuntimeHandler, defineTool, finalizeRunEvents, isA2UIEnabled, isIntelligenceRuntime, resolveAgents, resolveModel, supportsLocalThreadEndpoints, toFetchCorsConfig };
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.cjs","names":["pkg","DebugEventBus","createLogger","InMemoryAgentRunner","RUNTIME_MODE_SSE","IntelligenceAgentRunner","RUNTIME_MODE_INTELLIGENCE"],"sources":["../../../../src/v2/runtime/core/runtime.ts"],"sourcesContent":["import type {\n MaybePromise,\n NonEmptyRecord,\n RuntimeMode,\n} from \"@copilotkit/shared\";\nimport {\n RUNTIME_MODE_SSE,\n RUNTIME_MODE_INTELLIGENCE,\n} from \"@copilotkit/shared\";\nimport { createLicenseChecker } from \"@copilotkit/license-verifier\";\nimport type { LicenseChecker } from \"@copilotkit/license-verifier\";\nimport { resolveDebugConfig } from \"@copilotkit/shared\";\nimport type { ResolvedDebugConfig, DebugConfig } from \"@copilotkit/shared\";\nimport type { AbstractAgent } from \"@ag-ui/client\";\nimport type { MCPClientConfig } from \"@ag-ui/mcp-apps-middleware\";\nimport type { A2UIMiddlewareConfig } from \"@ag-ui/a2ui-middleware\";\nimport pkg from \"../../../../package.json\";\nimport type {\n BeforeRequestMiddleware,\n AfterRequestMiddleware,\n} from \"./middleware\";\nimport { createLogger } from \"../../../lib/logger\";\nimport type { CopilotRuntimeLogger } from \"../../../lib/logger\";\nimport { logRuntimeTelemetryDisclosure } from \"../../../lib/telemetry-disclosure\";\nimport type { TranscriptionService } from \"../transcription-service/transcription-service\";\nimport { DebugEventBus } from \"./debug-event-bus\";\nimport type { AgentRunner } from \"../runner/agent-runner\";\nimport { InMemoryAgentRunner } from \"../runner/in-memory\";\nimport { IntelligenceAgentRunner } from \"../runner/intelligence\";\nimport type { CopilotKitIntelligence } from \"../intelligence-platform\";\nimport telemetry from \"../telemetry/telemetry-client\";\n\nexport const VERSION = pkg.version;\n\ninterface BaseCopilotRuntimeMiddlewareOptions {\n /** If set, middleware only applies to these named agents. Applies to all agents if omitted. */\n agents?: string[];\n}\n\nexport type McpAppsServerConfig = MCPClientConfig & {\n /** Agent to bind this server to. If omitted, the server is available to all agents. */\n agentId?: string;\n};\n\nexport interface McpAppsConfig {\n /** List of MCP server configurations. */\n servers: McpAppsServerConfig[];\n}\n\nexport interface OpenGenerativeUIOptions extends BaseCopilotRuntimeMiddlewareOptions {}\n\nexport type OpenGenerativeUIConfig = boolean | OpenGenerativeUIOptions;\n\ninterface CopilotRuntimeMiddlewares {\n /**\n * Auto-apply A2UIMiddleware to agents at run time.\n * Pass an object to enable and customise behaviour, or omit to disable.\n */\n a2ui?: BaseCopilotRuntimeMiddlewareOptions &\n A2UIMiddlewareConfig & {\n /**\n * Explicit on/off switch. Omit (or set `true`) to enable; set `false`\n * to disable A2UI for this runtime while keeping the rest of the config\n * (e.g. a `schema`/`catalog`) in place. A bare `a2ui: {}` stays enabled\n * for backwards compatibility.\n */\n enabled?: boolean;\n };\n /** Auto-apply MCPAppsMiddleware to agents at run time. */\n mcpApps?: McpAppsConfig;\n /** Auto-apply OpenGenerativeUIMiddleware to agents at run time. */\n openGenerativeUI?: OpenGenerativeUIConfig;\n}\n\n/**\n * Context passed to agent factory functions for per-request agent resolution.\n */\nexport interface AgentFactoryContext {\n /** The incoming HTTP request. */\n request: Request;\n}\n\n/**\n * A function that dynamically creates agents on a per-request basis.\n * Useful for multi-tenant scenarios or request-scoped agent configuration.\n */\nexport type AgentsFactory = (\n ctx: AgentFactoryContext,\n) => MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>;\n\n/**\n * Agents can be provided as:\n * - A static record of agents\n * - A Promise that resolves to a record of agents\n * - A factory function that receives request context and returns agents (or a Promise of agents)\n */\nexport type AgentsConfig =\n | MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>\n | AgentsFactory;\n\n/**\n * Resolve an AgentsConfig value to a concrete record of agents.\n * If the config is a factory function, it is called with the given request context.\n * Otherwise it is awaited directly (static record or Promise).\n */\nexport async function resolveAgents(\n agents: AgentsConfig,\n request?: Request,\n): Promise<Record<string, AbstractAgent>> {\n if (typeof agents === \"function\") {\n if (!request) {\n throw new Error(\n \"Agent factory function requires a request context, but none was provided.\",\n );\n }\n return agents({ request });\n }\n return agents;\n}\n\ninterface BaseCopilotRuntimeOptions extends CopilotRuntimeMiddlewares {\n /**\n * Map of available agents, or a factory function for per-request agent resolution.\n *\n * Static record:\n * ```ts\n * agents: { support: new SupportAgent(), technical: new TechnicalAgent() }\n * ```\n *\n * Factory function (called per-request):\n * ```ts\n * agents: ({ request }) => {\n * const tenantId = request.headers.get(\"x-tenant-id\");\n * return { default: createAgentForTenant(tenantId) };\n * }\n * ```\n */\n agents: AgentsConfig;\n /** Optional transcription service for audio processing. */\n transcriptionService?: TranscriptionService;\n /** Optional *before* middleware – callback function or webhook URL. */\n beforeRequestMiddleware?: BeforeRequestMiddleware;\n /** Optional *after* middleware – callback function or webhook URL. */\n afterRequestMiddleware?: AfterRequestMiddleware;\n /** Signed license token for server-side feature verification. Falls back to COPILOTKIT_LICENSE_TOKEN env var. */\n licenseToken?: string;\n /** Enable debug logging for the event pipeline. */\n debug?: DebugConfig;\n}\n\nexport interface CopilotRuntimeUser {\n id: string;\n name: string;\n}\n\nexport type IdentifyUserCallback = (\n request: Request,\n) => MaybePromise<CopilotRuntimeUser>;\n\nexport interface CopilotSseRuntimeOptions extends BaseCopilotRuntimeOptions {\n /** The runner to use for running agents in SSE mode. */\n runner?: AgentRunner;\n intelligence?: undefined;\n generateThreadNames?: undefined;\n}\n\nexport interface CopilotIntelligenceRuntimeOptions extends BaseCopilotRuntimeOptions {\n /** Configures Intelligence mode for durable threads and realtime events. */\n intelligence: CopilotKitIntelligence;\n /** Resolves the authenticated user for intelligence requests. */\n identifyUser: IdentifyUserCallback;\n /** Auto-generate short names for newly created threads. */\n generateThreadNames?: boolean;\n /** Max delay (ms) for WebSocket reconnect backoff. @default 10_000 */\n maxReconnectMs?: number;\n /** Max delay (ms) for channel rejoin backoff. @default 30_000 */\n maxRejoinMs?: number;\n /** Lock TTL in seconds. Clamped to a maximum of 3600 (1 hour). @default 20 */\n lockTtlSeconds?: number;\n /** Custom Redis key prefix for the thread lock. */\n lockKeyPrefix?: string;\n /** Interval in seconds at which the runtime renews the thread lock. Clamped to a maximum of 3000 (50 minutes). @default 15 */\n lockHeartbeatIntervalSeconds?: number;\n}\n\nexport type CopilotRuntimeOptions =\n | CopilotSseRuntimeOptions\n | CopilotIntelligenceRuntimeOptions;\n\nexport interface CopilotRuntimeLike {\n agents: CopilotRuntimeOptions[\"agents\"];\n transcriptionService: CopilotRuntimeOptions[\"transcriptionService\"];\n beforeRequestMiddleware: CopilotRuntimeOptions[\"beforeRequestMiddleware\"];\n afterRequestMiddleware: CopilotRuntimeOptions[\"afterRequestMiddleware\"];\n runner: AgentRunner;\n a2ui: CopilotRuntimeOptions[\"a2ui\"];\n mcpApps: CopilotRuntimeOptions[\"mcpApps\"];\n openGenerativeUI: CopilotRuntimeOptions[\"openGenerativeUI\"];\n intelligence?: CopilotKitIntelligence;\n identifyUser?: IdentifyUserCallback;\n mode: RuntimeMode;\n licenseChecker?: LicenseChecker;\n debugEventBus?: DebugEventBus;\n debug: ResolvedDebugConfig;\n debugLogger?: CopilotRuntimeLogger;\n}\n\nexport interface CopilotSseRuntimeLike extends CopilotRuntimeLike {\n intelligence?: undefined;\n mode: RUNTIME_MODE_SSE;\n}\n\nexport interface CopilotIntelligenceRuntimeLike extends CopilotRuntimeLike {\n intelligence: CopilotKitIntelligence;\n identifyUser: IdentifyUserCallback;\n generateThreadNames: boolean;\n lockTtlSeconds: number;\n lockKeyPrefix?: string;\n lockHeartbeatIntervalSeconds: number;\n mode: RUNTIME_MODE_INTELLIGENCE;\n}\n\nabstract class BaseCopilotRuntime implements CopilotRuntimeLike {\n public agents: CopilotRuntimeOptions[\"agents\"];\n public transcriptionService: CopilotRuntimeOptions[\"transcriptionService\"];\n public beforeRequestMiddleware: CopilotRuntimeOptions[\"beforeRequestMiddleware\"];\n public afterRequestMiddleware: CopilotRuntimeOptions[\"afterRequestMiddleware\"];\n public runner: AgentRunner;\n public a2ui: CopilotRuntimeOptions[\"a2ui\"];\n public mcpApps: CopilotRuntimeOptions[\"mcpApps\"];\n public openGenerativeUI: CopilotRuntimeOptions[\"openGenerativeUI\"];\n public licenseChecker?: LicenseChecker;\n public readonly debugEventBus?: DebugEventBus;\n public debug: ResolvedDebugConfig;\n public debugLogger?: CopilotRuntimeLogger;\n\n /**\n * License token resolved once with the env fallback, so telemetry\n * attribution (below) and subclass feature gating\n * (CopilotIntelligenceRuntime's licenseChecker) read the exact same value\n * instead of each re-applying `?? COPILOTKIT_LICENSE_TOKEN`.\n */\n protected readonly resolvedLicenseToken?: string;\n\n abstract readonly intelligence?: CopilotKitIntelligence;\n abstract readonly mode: RuntimeMode;\n\n constructor(options: BaseCopilotRuntimeOptions, runner: AgentRunner) {\n logRuntimeTelemetryDisclosure();\n\n const {\n agents,\n transcriptionService,\n beforeRequestMiddleware,\n afterRequestMiddleware,\n a2ui,\n mcpApps,\n openGenerativeUI,\n } = options;\n\n this.agents = agents;\n this.transcriptionService = transcriptionService;\n this.beforeRequestMiddleware = beforeRequestMiddleware;\n this.afterRequestMiddleware = afterRequestMiddleware;\n this.a2ui = a2ui || undefined;\n this.mcpApps = mcpApps;\n this.openGenerativeUI = openGenerativeUI;\n this.runner = runner;\n\n // Resolve the license token once (matching the license-verifier's env\n // fallback) so telemetry attribution and subclass feature gating share\n // one value.\n this.resolvedLicenseToken =\n options.licenseToken ?? process.env.COPILOTKIT_LICENSE_TOKEN;\n\n // Attribute telemetry to the licensed customer for *every* runtime mode.\n // Done in the shared base (not the subclasses) so SSE and Intelligence\n // runtimes behave identically — previously only CopilotIntelligenceRuntime\n // set this, so self-hosted SSE users never got a telemetry_id on their\n // runtime events even with a license token configured.\n if (this.resolvedLicenseToken) {\n telemetry.setLicenseToken(this.resolvedLicenseToken);\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n this.debugEventBus = new DebugEventBus();\n }\n this.debug = resolveDebugConfig(options.debug);\n if (this.debug.enabled) {\n this.debugLogger = createLogger({\n level: \"debug\",\n component: \"copilotkit-debug\",\n });\n }\n }\n}\n\nexport class CopilotSseRuntime\n extends BaseCopilotRuntime\n implements CopilotSseRuntimeLike\n{\n readonly intelligence = undefined;\n readonly mode = RUNTIME_MODE_SSE;\n\n constructor(options: CopilotSseRuntimeOptions) {\n super(options, options.runner ?? new InMemoryAgentRunner());\n }\n}\n\nexport class CopilotIntelligenceRuntime\n extends BaseCopilotRuntime\n implements CopilotIntelligenceRuntimeLike\n{\n readonly intelligence: CopilotKitIntelligence;\n readonly identifyUser: IdentifyUserCallback;\n readonly generateThreadNames: boolean;\n readonly lockTtlSeconds: number;\n readonly lockKeyPrefix?: string;\n readonly lockHeartbeatIntervalSeconds: number;\n readonly mode = RUNTIME_MODE_INTELLIGENCE;\n\n /** Maximum allowed lock TTL in seconds (1 hour). */\n static readonly MAX_LOCK_TTL_SECONDS = 3_600;\n /** Maximum allowed heartbeat interval in seconds (50 minutes). */\n static readonly MAX_HEARTBEAT_INTERVAL_SECONDS = 3_000;\n\n constructor(options: CopilotIntelligenceRuntimeOptions) {\n super(\n options,\n new IntelligenceAgentRunner({\n url: options.intelligence.ɵgetRunnerWsUrl(),\n authToken: options.intelligence.ɵgetRunnerAuthToken(),\n maxReconnectMs: options.maxReconnectMs,\n maxRejoinMs: options.maxRejoinMs,\n }),\n );\n this.intelligence = options.intelligence;\n this.identifyUser = options.identifyUser;\n this.generateThreadNames = options.generateThreadNames ?? true;\n // Telemetry attribution is handled by the base constructor for all modes;\n // here we only need the token for feature gating. Reuse the base-resolved\n // value so gating and attribution can never disagree.\n this.licenseChecker = createLicenseChecker(this.resolvedLicenseToken);\n this.lockTtlSeconds = Math.min(\n options.lockTtlSeconds ?? 20,\n CopilotIntelligenceRuntime.MAX_LOCK_TTL_SECONDS,\n );\n this.lockKeyPrefix = options.lockKeyPrefix;\n this.lockHeartbeatIntervalSeconds = Math.min(\n options.lockHeartbeatIntervalSeconds ?? 15,\n CopilotIntelligenceRuntime.MAX_HEARTBEAT_INTERVAL_SECONDS,\n );\n }\n}\n\nfunction hasIntelligenceOptions(\n options: CopilotRuntimeOptions,\n): options is CopilotIntelligenceRuntimeOptions {\n return \"intelligence\" in options && !!options.intelligence;\n}\n\nexport function isIntelligenceRuntime(\n runtime: CopilotRuntimeLike,\n): runtime is CopilotIntelligenceRuntimeLike {\n return runtime.mode === RUNTIME_MODE_INTELLIGENCE && !!runtime.intelligence;\n}\n\n/**\n * Single source of truth for \"is A2UI on for this runtime?\". Both the run path\n * (which applies `A2UIMiddleware`) and the `/info` response (which tells the\n * client whether to mount the A2UI renderer + catalog context) MUST go through\n * this, so they can never disagree — the divergence between them was the root\n * of CopilotKit/CopilotKit#5369.\n *\n * Backwards compatible: any config object is enabled (matching the historical\n * `!!runtime.a2ui`); only an explicit `enabled: false` turns it off.\n */\nexport function isA2UIEnabled(\n a2ui: CopilotRuntimeOptions[\"a2ui\"],\n): a2ui is NonNullable<CopilotRuntimeOptions[\"a2ui\"]> {\n return !!a2ui && a2ui.enabled !== false;\n}\n\n/**\n * Compatibility shim that preserves the legacy `CopilotRuntime` entrypoint.\n * New code should prefer `CopilotSseRuntime` or `CopilotIntelligenceRuntime`.\n */\nexport class CopilotRuntime implements CopilotRuntimeLike {\n private delegate: CopilotRuntimeLike;\n\n constructor(options: CopilotRuntimeOptions) {\n this.delegate = hasIntelligenceOptions(options)\n ? new CopilotIntelligenceRuntime(options)\n : new CopilotSseRuntime(options);\n }\n\n get agents(): CopilotRuntimeOptions[\"agents\"] {\n return this.delegate.agents;\n }\n\n get transcriptionService(): CopilotRuntimeOptions[\"transcriptionService\"] {\n return this.delegate.transcriptionService;\n }\n\n get beforeRequestMiddleware(): CopilotRuntimeOptions[\"beforeRequestMiddleware\"] {\n return this.delegate.beforeRequestMiddleware;\n }\n\n get afterRequestMiddleware(): CopilotRuntimeOptions[\"afterRequestMiddleware\"] {\n return this.delegate.afterRequestMiddleware;\n }\n\n get runner(): AgentRunner {\n return this.delegate.runner;\n }\n\n get a2ui(): CopilotRuntimeOptions[\"a2ui\"] {\n return this.delegate.a2ui;\n }\n\n get mcpApps(): CopilotRuntimeOptions[\"mcpApps\"] {\n return this.delegate.mcpApps;\n }\n\n get openGenerativeUI(): CopilotRuntimeOptions[\"openGenerativeUI\"] {\n return this.delegate.openGenerativeUI;\n }\n\n get intelligence(): CopilotKitIntelligence | undefined {\n return this.delegate.intelligence;\n }\n\n get generateThreadNames(): boolean | undefined {\n return isIntelligenceRuntime(this.delegate)\n ? this.delegate.generateThreadNames\n : undefined;\n }\n\n get identifyUser(): IdentifyUserCallback | undefined {\n return isIntelligenceRuntime(this.delegate)\n ? this.delegate.identifyUser\n : undefined;\n }\n\n get lockTtlSeconds(): number | undefined {\n return isIntelligenceRuntime(this.delegate)\n ? this.delegate.lockTtlSeconds\n : undefined;\n }\n\n get lockKeyPrefix(): string | undefined {\n return isIntelligenceRuntime(this.delegate)\n ? this.delegate.lockKeyPrefix\n : undefined;\n }\n\n get lockHeartbeatIntervalSeconds(): number | undefined {\n return isIntelligenceRuntime(this.delegate)\n ? this.delegate.lockHeartbeatIntervalSeconds\n : undefined;\n }\n\n get mode(): RuntimeMode {\n return this.delegate.mode;\n }\n\n get licenseChecker() {\n return this.delegate.licenseChecker;\n }\n\n get debugEventBus() {\n return this.delegate.debugEventBus;\n }\n\n get debug(): ResolvedDebugConfig {\n return this.delegate.debug;\n }\n\n get debugLogger(): CopilotRuntimeLogger | undefined {\n return this.delegate.debugLogger;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"runtime.cjs","names":["pkg","DebugEventBus","createLogger","InMemoryAgentRunner","RUNTIME_MODE_SSE","IntelligenceAgentRunner","RUNTIME_MODE_INTELLIGENCE"],"sources":["../../../../src/v2/runtime/core/runtime.ts"],"sourcesContent":["import type {\n MaybePromise,\n NonEmptyRecord,\n RuntimeMode,\n} from \"@copilotkit/shared\";\nimport {\n RUNTIME_MODE_SSE,\n RUNTIME_MODE_INTELLIGENCE,\n} from \"@copilotkit/shared\";\nimport { createLicenseChecker } from \"@copilotkit/license-verifier\";\nimport type { LicenseChecker } from \"@copilotkit/license-verifier\";\nimport { resolveDebugConfig } from \"@copilotkit/shared\";\nimport type { ResolvedDebugConfig, DebugConfig } from \"@copilotkit/shared\";\nimport type { AbstractAgent } from \"@ag-ui/client\";\nimport type { MCPClientConfig } from \"@ag-ui/mcp-apps-middleware\";\nimport type { A2UIMiddlewareConfig } from \"@ag-ui/a2ui-middleware\";\nimport pkg from \"../../../../package.json\";\nimport type {\n BeforeRequestMiddleware,\n AfterRequestMiddleware,\n} from \"./middleware\";\nimport { createLogger } from \"../../../lib/logger\";\nimport type { CopilotRuntimeLogger } from \"../../../lib/logger\";\nimport { logRuntimeTelemetryDisclosure } from \"../../../lib/telemetry-disclosure\";\nimport type { TranscriptionService } from \"../transcription-service/transcription-service\";\nimport { DebugEventBus } from \"./debug-event-bus\";\nimport type { AgentRunner } from \"../runner/agent-runner\";\nimport { InMemoryAgentRunner } from \"../runner/in-memory\";\nimport { IntelligenceAgentRunner } from \"../runner/intelligence\";\nimport type { CopilotKitIntelligence } from \"../intelligence-platform\";\nimport telemetry from \"../telemetry/telemetry-client\";\n\nexport const VERSION = pkg.version;\n\ninterface BaseCopilotRuntimeMiddlewareOptions {\n /** If set, middleware only applies to these named agents. Applies to all agents if omitted. */\n agents?: string[];\n}\n\nexport type McpAppsServerConfig = MCPClientConfig & {\n /** Agent to bind this server to. If omitted, the server is available to all agents. */\n agentId?: string;\n};\n\nexport interface McpAppsConfig {\n /** List of MCP server configurations. */\n servers: McpAppsServerConfig[];\n}\n\nexport interface OpenGenerativeUIOptions extends BaseCopilotRuntimeMiddlewareOptions {}\n\nexport type OpenGenerativeUIConfig = boolean | OpenGenerativeUIOptions;\n\ninterface CopilotRuntimeMiddlewares {\n /**\n * Auto-apply A2UIMiddleware to agents at run time.\n * Pass an object to enable and customise behaviour, or omit to disable.\n */\n a2ui?: BaseCopilotRuntimeMiddlewareOptions &\n A2UIMiddlewareConfig & {\n /**\n * Explicit on/off switch. Omit (or set `true`) to enable; set `false`\n * to disable A2UI for this runtime while keeping the rest of the config\n * (e.g. a `schema`/`catalog`) in place. A bare `a2ui: {}` stays enabled\n * for backwards compatibility.\n */\n enabled?: boolean;\n };\n /** Auto-apply MCPAppsMiddleware to agents at run time. */\n mcpApps?: McpAppsConfig;\n /** Auto-apply OpenGenerativeUIMiddleware to agents at run time. */\n openGenerativeUI?: OpenGenerativeUIConfig;\n}\n\n/**\n * Context passed to agent factory functions for per-request agent resolution.\n */\nexport interface AgentFactoryContext {\n /** The incoming HTTP request. */\n request: Request;\n}\n\n/**\n * A function that dynamically creates agents on a per-request basis.\n * Useful for multi-tenant scenarios or request-scoped agent configuration.\n */\nexport type AgentsFactory = (\n ctx: AgentFactoryContext,\n) => MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>;\n\n/**\n * Agents can be provided as:\n * - A static record of agents\n * - A Promise that resolves to a record of agents\n * - A factory function that receives request context and returns agents (or a Promise of agents)\n */\nexport type AgentsConfig =\n | MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>\n | AgentsFactory;\n\n/**\n * Resolve an AgentsConfig value to a concrete record of agents.\n * If the config is a factory function, it is called with the given request context.\n * Otherwise it is awaited directly (static record or Promise).\n */\nexport async function resolveAgents(\n agents: AgentsConfig,\n request?: Request,\n): Promise<Record<string, AbstractAgent>> {\n if (typeof agents === \"function\") {\n if (!request) {\n throw new Error(\n \"Agent factory function requires a request context, but none was provided.\",\n );\n }\n return agents({ request });\n }\n return agents;\n}\n\ninterface BaseCopilotRuntimeOptions extends CopilotRuntimeMiddlewares {\n /**\n * Map of available agents, or a factory function for per-request agent resolution.\n *\n * Static record:\n * ```ts\n * agents: { support: new SupportAgent(), technical: new TechnicalAgent() }\n * ```\n *\n * Factory function (called per-request):\n * ```ts\n * agents: ({ request }) => {\n * const tenantId = request.headers.get(\"x-tenant-id\");\n * return { default: createAgentForTenant(tenantId) };\n * }\n * ```\n */\n agents: AgentsConfig;\n /** Optional transcription service for audio processing. */\n transcriptionService?: TranscriptionService;\n /** Optional *before* middleware – callback function or webhook URL. */\n beforeRequestMiddleware?: BeforeRequestMiddleware;\n /** Optional *after* middleware – callback function or webhook URL. */\n afterRequestMiddleware?: AfterRequestMiddleware;\n /** Signed license token for server-side feature verification. Falls back to COPILOTKIT_LICENSE_TOKEN env var. */\n licenseToken?: string;\n /** Enable debug logging for the event pipeline. */\n debug?: DebugConfig;\n}\n\nexport interface CopilotRuntimeUser {\n id: string;\n name: string;\n}\n\nexport type IdentifyUserCallback = (\n request: Request,\n) => MaybePromise<CopilotRuntimeUser>;\n\nexport interface CopilotSseRuntimeOptions extends BaseCopilotRuntimeOptions {\n /** The runner to use for running agents in SSE mode. */\n runner?: AgentRunner;\n intelligence?: undefined;\n generateThreadNames?: undefined;\n}\n\nexport interface CopilotIntelligenceRuntimeOptions extends BaseCopilotRuntimeOptions {\n /** Configures Intelligence mode for durable threads and realtime events. */\n intelligence: CopilotKitIntelligence;\n /** Resolves the authenticated user for intelligence requests. */\n identifyUser: IdentifyUserCallback;\n /** Auto-generate short names for newly created threads. */\n generateThreadNames?: boolean;\n /** Max delay (ms) for WebSocket reconnect backoff. @default 10_000 */\n maxReconnectMs?: number;\n /** Max delay (ms) for channel rejoin backoff. @default 30_000 */\n maxRejoinMs?: number;\n /** Lock TTL in seconds. Clamped to a maximum of 3600 (1 hour). @default 20 */\n lockTtlSeconds?: number;\n /** Custom Redis key prefix for the thread lock. */\n lockKeyPrefix?: string;\n /** Interval in seconds at which the runtime renews the thread lock. Clamped to a maximum of 3000 (50 minutes). @default 15 */\n lockHeartbeatIntervalSeconds?: number;\n}\n\nexport type CopilotRuntimeOptions =\n | CopilotSseRuntimeOptions\n | CopilotIntelligenceRuntimeOptions;\n\nexport interface CopilotRuntimeLike {\n agents: CopilotRuntimeOptions[\"agents\"];\n transcriptionService: CopilotRuntimeOptions[\"transcriptionService\"];\n beforeRequestMiddleware: CopilotRuntimeOptions[\"beforeRequestMiddleware\"];\n afterRequestMiddleware: CopilotRuntimeOptions[\"afterRequestMiddleware\"];\n runner: AgentRunner;\n a2ui: CopilotRuntimeOptions[\"a2ui\"];\n mcpApps: CopilotRuntimeOptions[\"mcpApps\"];\n openGenerativeUI: CopilotRuntimeOptions[\"openGenerativeUI\"];\n intelligence?: CopilotKitIntelligence;\n identifyUser?: IdentifyUserCallback;\n mode: RuntimeMode;\n licenseChecker?: LicenseChecker;\n debugEventBus?: DebugEventBus;\n debug: ResolvedDebugConfig;\n debugLogger?: CopilotRuntimeLogger;\n}\n\nexport interface CopilotSseRuntimeLike extends CopilotRuntimeLike {\n intelligence?: undefined;\n mode: typeof RUNTIME_MODE_SSE;\n}\n\nexport interface CopilotIntelligenceRuntimeLike extends CopilotRuntimeLike {\n intelligence: CopilotKitIntelligence;\n identifyUser: IdentifyUserCallback;\n generateThreadNames: boolean;\n lockTtlSeconds: number;\n lockKeyPrefix?: string;\n lockHeartbeatIntervalSeconds: number;\n mode: typeof RUNTIME_MODE_INTELLIGENCE;\n}\n\nabstract class BaseCopilotRuntime implements CopilotRuntimeLike {\n public agents: CopilotRuntimeOptions[\"agents\"];\n public transcriptionService: CopilotRuntimeOptions[\"transcriptionService\"];\n public beforeRequestMiddleware: CopilotRuntimeOptions[\"beforeRequestMiddleware\"];\n public afterRequestMiddleware: CopilotRuntimeOptions[\"afterRequestMiddleware\"];\n public runner: AgentRunner;\n public a2ui: CopilotRuntimeOptions[\"a2ui\"];\n public mcpApps: CopilotRuntimeOptions[\"mcpApps\"];\n public openGenerativeUI: CopilotRuntimeOptions[\"openGenerativeUI\"];\n public licenseChecker?: LicenseChecker;\n public readonly debugEventBus?: DebugEventBus;\n public debug: ResolvedDebugConfig;\n public debugLogger?: CopilotRuntimeLogger;\n\n /**\n * License token resolved once with the env fallback, so telemetry\n * attribution (below) and subclass feature gating\n * (CopilotIntelligenceRuntime's licenseChecker) read the exact same value\n * instead of each re-applying `?? COPILOTKIT_LICENSE_TOKEN`.\n */\n protected readonly resolvedLicenseToken?: string;\n\n abstract readonly intelligence?: CopilotKitIntelligence;\n abstract readonly mode: RuntimeMode;\n\n constructor(options: BaseCopilotRuntimeOptions, runner: AgentRunner) {\n logRuntimeTelemetryDisclosure();\n\n const {\n agents,\n transcriptionService,\n beforeRequestMiddleware,\n afterRequestMiddleware,\n a2ui,\n mcpApps,\n openGenerativeUI,\n } = options;\n\n this.agents = agents;\n this.transcriptionService = transcriptionService;\n this.beforeRequestMiddleware = beforeRequestMiddleware;\n this.afterRequestMiddleware = afterRequestMiddleware;\n this.a2ui = a2ui || undefined;\n this.mcpApps = mcpApps;\n this.openGenerativeUI = openGenerativeUI;\n this.runner = runner;\n\n // Resolve the license token once (matching the license-verifier's env\n // fallback) so telemetry attribution and subclass feature gating share\n // one value.\n this.resolvedLicenseToken =\n options.licenseToken ?? process.env.COPILOTKIT_LICENSE_TOKEN;\n\n // Attribute telemetry to the licensed customer for *every* runtime mode.\n // Done in the shared base (not the subclasses) so SSE and Intelligence\n // runtimes behave identically — previously only CopilotIntelligenceRuntime\n // set this, so self-hosted SSE users never got a telemetry_id on their\n // runtime events even with a license token configured.\n if (this.resolvedLicenseToken) {\n telemetry.setLicenseToken(this.resolvedLicenseToken);\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n this.debugEventBus = new DebugEventBus();\n }\n this.debug = resolveDebugConfig(options.debug);\n if (this.debug.enabled) {\n this.debugLogger = createLogger({\n level: \"debug\",\n component: \"copilotkit-debug\",\n });\n }\n }\n}\n\nexport class CopilotSseRuntime\n extends BaseCopilotRuntime\n implements CopilotSseRuntimeLike\n{\n readonly intelligence = undefined;\n readonly mode = RUNTIME_MODE_SSE;\n\n constructor(options: CopilotSseRuntimeOptions) {\n super(options, options.runner ?? new InMemoryAgentRunner());\n }\n}\n\nexport class CopilotIntelligenceRuntime\n extends BaseCopilotRuntime\n implements CopilotIntelligenceRuntimeLike\n{\n readonly intelligence: CopilotKitIntelligence;\n readonly identifyUser: IdentifyUserCallback;\n readonly generateThreadNames: boolean;\n readonly lockTtlSeconds: number;\n readonly lockKeyPrefix?: string;\n readonly lockHeartbeatIntervalSeconds: number;\n readonly mode = RUNTIME_MODE_INTELLIGENCE;\n\n /** Maximum allowed lock TTL in seconds (1 hour). */\n static readonly MAX_LOCK_TTL_SECONDS = 3_600;\n /** Maximum allowed heartbeat interval in seconds (50 minutes). */\n static readonly MAX_HEARTBEAT_INTERVAL_SECONDS = 3_000;\n\n constructor(options: CopilotIntelligenceRuntimeOptions) {\n super(\n options,\n new IntelligenceAgentRunner({\n url: options.intelligence.ɵgetRunnerWsUrl(),\n authToken: options.intelligence.ɵgetRunnerAuthToken(),\n maxReconnectMs: options.maxReconnectMs,\n maxRejoinMs: options.maxRejoinMs,\n }),\n );\n this.intelligence = options.intelligence;\n this.identifyUser = options.identifyUser;\n this.generateThreadNames = options.generateThreadNames ?? true;\n // Telemetry attribution is handled by the base constructor for all modes;\n // here we only need the token for feature gating. Reuse the base-resolved\n // value so gating and attribution can never disagree.\n this.licenseChecker = createLicenseChecker(this.resolvedLicenseToken);\n this.lockTtlSeconds = Math.min(\n options.lockTtlSeconds ?? 20,\n CopilotIntelligenceRuntime.MAX_LOCK_TTL_SECONDS,\n );\n this.lockKeyPrefix = options.lockKeyPrefix;\n this.lockHeartbeatIntervalSeconds = Math.min(\n options.lockHeartbeatIntervalSeconds ?? 15,\n CopilotIntelligenceRuntime.MAX_HEARTBEAT_INTERVAL_SECONDS,\n );\n }\n}\n\nfunction hasIntelligenceOptions(\n options: CopilotRuntimeOptions,\n): options is CopilotIntelligenceRuntimeOptions {\n return \"intelligence\" in options && !!options.intelligence;\n}\n\nexport function isIntelligenceRuntime(\n runtime: CopilotRuntimeLike,\n): runtime is CopilotIntelligenceRuntimeLike {\n return runtime.mode === RUNTIME_MODE_INTELLIGENCE && !!runtime.intelligence;\n}\n\n/**\n * Single source of truth for \"is A2UI on for this runtime?\". Both the run path\n * (which applies `A2UIMiddleware`) and the `/info` response (which tells the\n * client whether to mount the A2UI renderer + catalog context) MUST go through\n * this, so they can never disagree — the divergence between them was the root\n * of CopilotKit/CopilotKit#5369.\n *\n * Backwards compatible: any config object is enabled (matching the historical\n * `!!runtime.a2ui`); only an explicit `enabled: false` turns it off.\n */\nexport function isA2UIEnabled(\n a2ui: CopilotRuntimeOptions[\"a2ui\"],\n): a2ui is NonNullable<CopilotRuntimeOptions[\"a2ui\"]> {\n return !!a2ui && a2ui.enabled !== false;\n}\n\n/**\n * Compatibility shim that preserves the legacy `CopilotRuntime` entrypoint.\n * New code should prefer `CopilotSseRuntime` or `CopilotIntelligenceRuntime`.\n */\nexport class CopilotRuntime implements CopilotRuntimeLike {\n private delegate: CopilotRuntimeLike;\n\n constructor(options: CopilotRuntimeOptions) {\n this.delegate = hasIntelligenceOptions(options)\n ? new CopilotIntelligenceRuntime(options)\n : new CopilotSseRuntime(options);\n }\n\n get agents(): CopilotRuntimeOptions[\"agents\"] {\n return this.delegate.agents;\n }\n\n get transcriptionService(): CopilotRuntimeOptions[\"transcriptionService\"] {\n return this.delegate.transcriptionService;\n }\n\n get beforeRequestMiddleware(): CopilotRuntimeOptions[\"beforeRequestMiddleware\"] {\n return this.delegate.beforeRequestMiddleware;\n }\n\n get afterRequestMiddleware(): CopilotRuntimeOptions[\"afterRequestMiddleware\"] {\n return this.delegate.afterRequestMiddleware;\n }\n\n get runner(): AgentRunner {\n return this.delegate.runner;\n }\n\n get a2ui(): CopilotRuntimeOptions[\"a2ui\"] {\n return this.delegate.a2ui;\n }\n\n get mcpApps(): CopilotRuntimeOptions[\"mcpApps\"] {\n return this.delegate.mcpApps;\n }\n\n get openGenerativeUI(): CopilotRuntimeOptions[\"openGenerativeUI\"] {\n return this.delegate.openGenerativeUI;\n }\n\n get intelligence(): CopilotKitIntelligence | undefined {\n return this.delegate.intelligence;\n }\n\n get generateThreadNames(): boolean | undefined {\n return isIntelligenceRuntime(this.delegate)\n ? this.delegate.generateThreadNames\n : undefined;\n }\n\n get identifyUser(): IdentifyUserCallback | undefined {\n return isIntelligenceRuntime(this.delegate)\n ? this.delegate.identifyUser\n : undefined;\n }\n\n get lockTtlSeconds(): number | undefined {\n return isIntelligenceRuntime(this.delegate)\n ? this.delegate.lockTtlSeconds\n : undefined;\n }\n\n get lockKeyPrefix(): string | undefined {\n return isIntelligenceRuntime(this.delegate)\n ? this.delegate.lockKeyPrefix\n : undefined;\n }\n\n get lockHeartbeatIntervalSeconds(): number | undefined {\n return isIntelligenceRuntime(this.delegate)\n ? this.delegate.lockHeartbeatIntervalSeconds\n : undefined;\n }\n\n get mode(): RuntimeMode {\n return this.delegate.mode;\n }\n\n get licenseChecker() {\n return this.delegate.licenseChecker;\n }\n\n get debugEventBus() {\n return this.delegate.debugEventBus;\n }\n\n get debug(): ResolvedDebugConfig {\n return this.delegate.debug;\n }\n\n get debugLogger(): CopilotRuntimeLogger | undefined {\n return this.delegate.debugLogger;\n }\n}\n"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { TranscriptionService } from "../transcription-service/transcription-ser
5
5
  import { DebugEventBus } from "./debug-event-bus.cjs";
6
6
  import { AgentRunner } from "../runner/agent-runner.cjs";
7
7
  import { CopilotKitIntelligence } from "../intelligence-platform/client.cjs";
8
- import { DebugConfig, MaybePromise, NonEmptyRecord, ResolvedDebugConfig, RuntimeMode } from "@copilotkit/shared";
8
+ import { DebugConfig, MaybePromise, NonEmptyRecord, RUNTIME_MODE_INTELLIGENCE, RUNTIME_MODE_SSE, ResolvedDebugConfig, RuntimeMode } from "@copilotkit/shared";
9
9
  import { LicenseChecker } from "@copilotkit/license-verifier";
10
10
  import { AbstractAgent } from "@ag-ui/client";
11
11
  import { MCPClientConfig } from "@ag-ui/mcp-apps-middleware";
@@ -148,7 +148,7 @@ interface CopilotRuntimeLike {
148
148
  }
149
149
  interface CopilotSseRuntimeLike extends CopilotRuntimeLike {
150
150
  intelligence?: undefined;
151
- mode: RUNTIME_MODE_SSE;
151
+ mode: typeof RUNTIME_MODE_SSE;
152
152
  }
153
153
  interface CopilotIntelligenceRuntimeLike extends CopilotRuntimeLike {
154
154
  intelligence: CopilotKitIntelligence;
@@ -157,7 +157,7 @@ interface CopilotIntelligenceRuntimeLike extends CopilotRuntimeLike {
157
157
  lockTtlSeconds: number;
158
158
  lockKeyPrefix?: string;
159
159
  lockHeartbeatIntervalSeconds: number;
160
- mode: RUNTIME_MODE_INTELLIGENCE;
160
+ mode: typeof RUNTIME_MODE_INTELLIGENCE;
161
161
  }
162
162
  declare abstract class BaseCopilotRuntime implements CopilotRuntimeLike {
163
163
  agents: CopilotRuntimeOptions["agents"];
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.cts","names":[],"sources":["../../../../src/v2/runtime/core/runtime.ts"],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.cts","names":[],"sources":["../../../../src/v2/runtime/core/runtime.ts"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { TranscriptionService } from "../transcription-service/transcription-ser
5
5
  import { DebugEventBus } from "./debug-event-bus.mjs";
6
6
  import { AgentRunner } from "../runner/agent-runner.mjs";
7
7
  import { CopilotKitIntelligence } from "../intelligence-platform/client.mjs";
8
- import { DebugConfig, MaybePromise, NonEmptyRecord, ResolvedDebugConfig, RuntimeMode } from "@copilotkit/shared";
8
+ import { DebugConfig, MaybePromise, NonEmptyRecord, RUNTIME_MODE_INTELLIGENCE, RUNTIME_MODE_SSE, ResolvedDebugConfig, RuntimeMode } from "@copilotkit/shared";
9
9
  import { LicenseChecker } from "@copilotkit/license-verifier";
10
10
  import { AbstractAgent } from "@ag-ui/client";
11
11
  import { A2UIMiddlewareConfig } from "@ag-ui/a2ui-middleware";
@@ -148,7 +148,7 @@ interface CopilotRuntimeLike {
148
148
  }
149
149
  interface CopilotSseRuntimeLike extends CopilotRuntimeLike {
150
150
  intelligence?: undefined;
151
- mode: RUNTIME_MODE_SSE;
151
+ mode: typeof RUNTIME_MODE_SSE;
152
152
  }
153
153
  interface CopilotIntelligenceRuntimeLike extends CopilotRuntimeLike {
154
154
  intelligence: CopilotKitIntelligence;
@@ -157,7 +157,7 @@ interface CopilotIntelligenceRuntimeLike extends CopilotRuntimeLike {
157
157
  lockTtlSeconds: number;
158
158
  lockKeyPrefix?: string;
159
159
  lockHeartbeatIntervalSeconds: number;
160
- mode: RUNTIME_MODE_INTELLIGENCE;
160
+ mode: typeof RUNTIME_MODE_INTELLIGENCE;
161
161
  }
162
162
  declare abstract class BaseCopilotRuntime implements CopilotRuntimeLike {
163
163
  agents: CopilotRuntimeOptions["agents"];
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.mts","names":[],"sources":["../../../../src/v2/runtime/core/runtime.ts"],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.mts","names":[],"sources":["../../../../src/v2/runtime/core/runtime.ts"],"mappings":"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"}