@copilotkit/runtime 1.50.0-beta.9 → 1.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +157 -0
- package/dist/chunk-27JKTS6P.mjs +1704 -0
- package/dist/chunk-27JKTS6P.mjs.map +1 -0
- package/dist/{chunk-FMU55SEU.mjs → chunk-2GPTVDTO.mjs} +2 -2
- package/dist/chunk-3AJVKDZX.mjs +3097 -0
- package/dist/chunk-3AJVKDZX.mjs.map +1 -0
- package/dist/{chunk-BJEYMRDD.mjs → chunk-45RCC3ZS.mjs} +2 -2
- package/dist/chunk-4EHJ4XFJ.mjs +25 -0
- package/dist/chunk-4EHJ4XFJ.mjs.map +1 -0
- package/dist/chunk-4IANB4TC.mjs +25 -0
- package/dist/chunk-4IANB4TC.mjs.map +1 -0
- package/dist/{chunk-Z752VE75.mjs → chunk-4KES76K3.mjs} +2 -2
- package/dist/chunk-4OGE3SLW.mjs +3100 -0
- package/dist/chunk-4OGE3SLW.mjs.map +1 -0
- package/dist/chunk-54YJBMCP.mjs +3097 -0
- package/dist/chunk-54YJBMCP.mjs.map +1 -0
- package/dist/chunk-6ER4SZYH.mjs +74 -0
- package/dist/chunk-6ER4SZYH.mjs.map +1 -0
- package/dist/chunk-6TNSLHVR.mjs +74 -0
- package/dist/chunk-6TNSLHVR.mjs.map +1 -0
- package/dist/chunk-7V4BK7TZ.mjs +25 -0
- package/dist/chunk-7V4BK7TZ.mjs.map +1 -0
- package/dist/chunk-7YZIEXD2.mjs +74 -0
- package/dist/chunk-7YZIEXD2.mjs.map +1 -0
- package/dist/chunk-A4XHOAFU.mjs +25 -0
- package/dist/chunk-A4XHOAFU.mjs.map +1 -0
- package/dist/chunk-A555KEAD.mjs +6020 -0
- package/dist/chunk-A555KEAD.mjs.map +1 -0
- package/dist/chunk-AF73TFTX.mjs +74 -0
- package/dist/chunk-AF73TFTX.mjs.map +1 -0
- package/dist/chunk-AQG2SVCA.mjs +25 -0
- package/dist/chunk-AQG2SVCA.mjs.map +1 -0
- package/dist/chunk-BJZHMXND.mjs +74 -0
- package/dist/chunk-BJZHMXND.mjs.map +1 -0
- package/dist/chunk-CB2OJXF6.mjs +25 -0
- package/dist/chunk-CB2OJXF6.mjs.map +1 -0
- package/dist/chunk-CEOMFPJU.mjs +6020 -0
- package/dist/chunk-CEOMFPJU.mjs.map +1 -0
- package/dist/chunk-CZVLR7CC.mjs +175 -0
- package/dist/chunk-CZVLR7CC.mjs.map +1 -0
- package/dist/{chunk-SBCOROE4.mjs → chunk-DCEEHMLJ.mjs} +16 -1
- package/dist/chunk-DCEEHMLJ.mjs.map +1 -0
- package/dist/chunk-DE3CLKUG.mjs +25 -0
- package/dist/chunk-DE3CLKUG.mjs.map +1 -0
- package/dist/chunk-DTPRUTNV.mjs +25 -0
- package/dist/chunk-DTPRUTNV.mjs.map +1 -0
- package/dist/{chunk-TTUAEJLD.mjs → chunk-ERUOA47O.mjs} +11 -2
- package/dist/chunk-ERUOA47O.mjs.map +1 -0
- package/dist/chunk-ESSRC64W.mjs +74 -0
- package/dist/chunk-ESSRC64W.mjs.map +1 -0
- package/dist/chunk-GRAN6K6N.mjs +25 -0
- package/dist/chunk-GRAN6K6N.mjs.map +1 -0
- package/dist/chunk-I27F2UPA.mjs +175 -0
- package/dist/chunk-I27F2UPA.mjs.map +1 -0
- package/dist/chunk-IAZKTOQW.mjs +25 -0
- package/dist/chunk-IAZKTOQW.mjs.map +1 -0
- package/dist/chunk-J6XZ5MFB.mjs +25 -0
- package/dist/chunk-J6XZ5MFB.mjs.map +1 -0
- package/dist/chunk-JJ32MA4C.mjs +73 -0
- package/dist/chunk-JJ32MA4C.mjs.map +1 -0
- package/dist/chunk-JJY4ZTHQ.mjs +25 -0
- package/dist/chunk-JJY4ZTHQ.mjs.map +1 -0
- package/dist/chunk-KEYLBFU2.mjs +3117 -0
- package/dist/chunk-KEYLBFU2.mjs.map +1 -0
- package/dist/chunk-KQ53L4WZ.mjs +3094 -0
- package/dist/chunk-KQ53L4WZ.mjs.map +1 -0
- package/dist/chunk-KTELVQ67.mjs +3098 -0
- package/dist/chunk-KTELVQ67.mjs.map +1 -0
- package/dist/chunk-LPEPX6NH.mjs +25 -0
- package/dist/chunk-LPEPX6NH.mjs.map +1 -0
- package/dist/chunk-MDXE55DK.mjs +3117 -0
- package/dist/chunk-MDXE55DK.mjs.map +1 -0
- package/dist/chunk-MMFUVOXH.mjs +73 -0
- package/dist/chunk-MMFUVOXH.mjs.map +1 -0
- package/dist/chunk-N3Y4U66N.mjs +253 -0
- package/dist/chunk-N3Y4U66N.mjs.map +1 -0
- package/dist/chunk-O7UYB4MH.mjs +25 -0
- package/dist/chunk-O7UYB4MH.mjs.map +1 -0
- package/dist/chunk-OFNVQHNM.mjs +3089 -0
- package/dist/chunk-OFNVQHNM.mjs.map +1 -0
- package/dist/{chunk-DZV4ZIAR.mjs → chunk-OFSV5GET.mjs} +17 -6
- package/dist/chunk-OFSV5GET.mjs.map +1 -0
- package/dist/chunk-OMRST67R.mjs +25 -0
- package/dist/chunk-OMRST67R.mjs.map +1 -0
- package/dist/chunk-PRZHE74A.mjs +25 -0
- package/dist/chunk-PRZHE74A.mjs.map +1 -0
- package/dist/chunk-PTYRVXXP.mjs +80 -0
- package/dist/chunk-PTYRVXXP.mjs.map +1 -0
- package/dist/chunk-R22B5CCO.mjs +25 -0
- package/dist/chunk-R22B5CCO.mjs.map +1 -0
- package/dist/chunk-SHBDMA63.mjs +141 -0
- package/dist/chunk-SHBDMA63.mjs.map +1 -0
- package/dist/chunk-SPVXBPRA.mjs +74 -0
- package/dist/chunk-SPVXBPRA.mjs.map +1 -0
- package/dist/chunk-T72G46ME.mjs +25 -0
- package/dist/chunk-T72G46ME.mjs.map +1 -0
- package/dist/chunk-TGELROPU.mjs +25 -0
- package/dist/chunk-TGELROPU.mjs.map +1 -0
- package/dist/chunk-UNX4IAAD.mjs +25 -0
- package/dist/chunk-UNX4IAAD.mjs.map +1 -0
- package/dist/chunk-V4DHVC7M.mjs +3085 -0
- package/dist/chunk-V4DHVC7M.mjs.map +1 -0
- package/dist/chunk-VVRFOB66.mjs +25 -0
- package/dist/chunk-VVRFOB66.mjs.map +1 -0
- package/dist/chunk-W6NVBYM6.mjs +80 -0
- package/dist/chunk-W6NVBYM6.mjs.map +1 -0
- package/dist/chunk-W7MBACGC.mjs +74 -0
- package/dist/chunk-W7MBACGC.mjs.map +1 -0
- package/dist/chunk-WMD4XZZS.mjs +25 -0
- package/dist/chunk-WMD4XZZS.mjs.map +1 -0
- package/dist/chunk-WX2ZNCRT.mjs +74 -0
- package/dist/chunk-WX2ZNCRT.mjs.map +1 -0
- package/dist/chunk-Y2Z62E2T.mjs +74 -0
- package/dist/chunk-Y2Z62E2T.mjs.map +1 -0
- package/dist/chunk-YO4I6RVI.mjs +25 -0
- package/dist/chunk-YO4I6RVI.mjs.map +1 -0
- package/dist/chunk-Z6Q5IW6I.mjs +3098 -0
- package/dist/chunk-Z6Q5IW6I.mjs.map +1 -0
- package/dist/chunk-Z726O3G2.mjs +25 -0
- package/dist/chunk-Z726O3G2.mjs.map +1 -0
- package/dist/chunk-ZE4SMZZR.mjs +3097 -0
- package/dist/chunk-ZE4SMZZR.mjs.map +1 -0
- package/dist/chunk-ZULZB33C.mjs +73 -0
- package/dist/chunk-ZULZB33C.mjs.map +1 -0
- package/dist/chunk-ZVRGXMY7.mjs +25 -0
- package/dist/chunk-ZVRGXMY7.mjs.map +1 -0
- package/dist/chunk-ZZ35WBYQ.mjs +25 -0
- package/dist/chunk-ZZ35WBYQ.mjs.map +1 -0
- package/dist/graphql/types/converted/index.d.ts +1 -1
- package/dist/graphql/types/converted/index.js +16 -110
- package/dist/graphql/types/converted/index.js.map +1 -1
- package/dist/graphql/types/converted/index.mjs +2 -3
- package/dist/{groq-adapter-50bc6e4a.d.ts → groq-adapter-540da9c3.d.ts} +6 -1
- package/dist/groq-adapter-a6f5e9d2.d.ts +331 -0
- package/dist/groq-adapter-c8aec5c5.d.ts +321 -0
- package/dist/index-96b330da.d.ts +119 -0
- package/dist/index.d.ts +67 -8
- package/dist/index.js +118 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +120 -31
- package/dist/index.mjs.map +1 -1
- package/dist/langserve-0c6100e3.d.ts +257 -0
- package/dist/langserve-978d5790.d.ts +243 -0
- package/dist/{langserve-74a52292.d.ts → langserve-9fc76ce5.d.ts} +1 -0
- package/dist/lib/index.d.ts +5 -59
- package/dist/lib/index.js +3702 -803
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs +20 -18
- package/dist/lib/integrations/index.d.ts +15 -9
- package/dist/lib/integrations/index.js +215 -187
- package/dist/lib/integrations/index.js.map +1 -1
- package/dist/lib/integrations/index.mjs +8 -7
- package/dist/lib/integrations/nest/index.d.ts +5 -6
- package/dist/lib/integrations/nest/index.js +197 -175
- package/dist/lib/integrations/nest/index.js.map +1 -1
- package/dist/lib/integrations/nest/index.mjs +6 -5
- package/dist/lib/integrations/node-express/index.d.ts +5 -6
- package/dist/lib/integrations/node-express/index.js +197 -175
- package/dist/lib/integrations/node-express/index.js.map +1 -1
- package/dist/lib/integrations/node-express/index.mjs +6 -5
- package/dist/lib/integrations/node-http/index.d.ts +5 -6
- package/dist/lib/integrations/node-http/index.js +197 -175
- package/dist/lib/integrations/node-http/index.js.map +1 -1
- package/dist/lib/integrations/node-http/index.mjs +5 -4
- package/dist/service-adapters/index.d.ts +7 -11
- package/dist/service-adapters/index.js +8 -21
- package/dist/service-adapters/index.js.map +1 -1
- package/dist/service-adapters/index.mjs +2 -4
- package/dist/shared-0a7346ce.d.ts +466 -0
- package/dist/{shared-f6d43ef8.d.ts → shared-35c6eb04.d.ts} +3 -1
- package/dist/shared-9ed1dc31.d.ts +414 -0
- package/dist/shared-da5708fe.d.ts +449 -0
- package/package.json +14 -20
- package/src/lib/index.ts +7 -6
- package/src/lib/runtime/copilot-runtime.ts +62 -26
- package/src/lib/runtime/telemetry-agent-runner.ts +139 -0
- package/dist/chunk-DZV4ZIAR.mjs.map +0 -1
- package/dist/chunk-SBCOROE4.mjs.map +0 -1
- package/dist/chunk-TTUAEJLD.mjs.map +0 -1
- /package/dist/{chunk-FMU55SEU.mjs.map → chunk-2GPTVDTO.mjs.map} +0 -0
- /package/dist/{chunk-BJEYMRDD.mjs.map → chunk-45RCC3ZS.mjs.map} +0 -0
- /package/dist/{chunk-Z752VE75.mjs.map → chunk-4KES76K3.mjs.map} +0 -0
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/index.ts","../src/service-adapters/openai/utils.ts","../src/service-adapters/openai/openai-adapter.ts","../src/service-adapters/shared/error-utils.ts","../src/service-adapters/langchain/utils.ts","../src/service-adapters/langchain/langchain-adapter.ts","../src/service-adapters/google/google-genai-adapter.ts","../src/service-adapters/openai/openai-assistant-adapter.ts","../src/service-adapters/unify/unify-adapter.ts","../src/service-adapters/groq/groq-adapter.ts","../src/lib/integrations/shared.ts","../src/graphql/resolvers/copilot.resolver.ts","../src/graphql/inputs/generate-copilot-response.input.ts","../src/graphql/inputs/message.input.ts","../src/graphql/types/enums.ts","../src/graphql/types/base/index.ts","../src/graphql/inputs/frontend.input.ts","../src/graphql/inputs/action.input.ts","../src/graphql/inputs/cloud.input.ts","../src/graphql/inputs/cloud-guardrails.input.ts","../src/graphql/inputs/forwarded-parameters.input.ts","../src/graphql/inputs/agent-session.input.ts","../src/graphql/inputs/agent-state.input.ts","../src/graphql/inputs/extensions.input.ts","../src/graphql/inputs/meta-event.input.ts","../src/graphql/types/meta-events.type.ts","../src/graphql/types/copilot-response.type.ts","../src/graphql/types/message-status.type.ts","../src/graphql/types/response-status.type.ts","../src/graphql/types/extensions-response.type.ts","../src/graphql/inputs/copilot-context.input.ts","../src/service-adapters/events.ts","../src/graphql/types/converted/index.ts","../src/utils/failed-response-status-reasons.ts","../src/lib/telemetry-client.ts","../src/lib/runtime/copilot-runtime.ts","../src/graphql/message-conversion/agui-to-gql.ts","../src/lib/runtime/types.ts","../src/lib/runtime/mcp-tools-utils.ts","../src/graphql/types/agents-response.type.ts","../src/agents/langgraph/events.ts","../src/lib/logger.ts","../src/graphql/resolvers/state.resolver.ts","../src/graphql/types/load-agent-state-response.type.ts","../src/graphql/inputs/load-agent-state.input.ts","../src/lib/integrations/nextjs/app-router.ts","../src/lib/integrations/node-http/index.ts","../src/lib/integrations/nextjs/pages-router.ts","../src/lib/integrations/node-express/index.ts","../src/lib/integrations/nest/index.ts","../src/lib/index.ts","../src/service-adapters/langchain/langserve.ts","../src/service-adapters/anthropic/utils.ts","../src/service-adapters/anthropic/anthropic-adapter.ts","../src/service-adapters/experimental/ollama/ollama-adapter.ts","../src/service-adapters/bedrock/bedrock-adapter.ts","../src/service-adapters/empty/empty-adapter.ts"],"names":["parseJson","limitMessagesToTokenCount","messages","tools","model","maxTokens","maxTokensForOpenAIModel","result","toolsNumTokens","countToolsTokens","Error","message","includes","role","numTokens","countMessageTokens","cutoff","reversedMessages","reverse","unshift","maxTokensByModel","DEFAULT_MAX_TOKENS","o1","length","json","JSON","stringify","countTokens","content","text","convertActionInputToOpenAITool","action","type","function","name","description","parameters","jsonSchema","convertMessageToOpenAIMessage","options","keepSystemRole","isTextMessage","isImageMessage","image_url","url","format","bytes","isActionExecutionMessage","tool_calls","id","arguments","isResultMessage","tool_call_id","actionExecutionId","convertSystemMessageToAssistantAPI","randomUUID","CopilotKitLowLevelError","CopilotKitErrorCode","convertServiceAdapterError","error","adapterName","errorName","constructor","errorMessage","String","statusCode","status","response","responseData","data","structuredError","originalErrorType","newCode","AUTHENTICATION_ERROR","CONFIGURATION_ERROR","NETWORK_ERROR","code","extensions","DEFAULT_MODEL","OpenAIAdapter","provider","disableParallelToolCalls","_openai","openai","params","ensureOpenAI","OpenAI","require","default","process","request","threadId","threadIdFromRequest","actions","eventSource","forwardedParameters","map","validToolUseIds","Set","add","filteredMessages","filter","has","delete","openaiMessages","m","toolChoice","toolChoiceFunctionName","stream","beta","chat","completions","max_completion_tokens","stop","tool_choice","parallel_tool_calls","temperature","eventStream$","mode","currentMessageId","currentToolCallId","chunk","choices","toolCall","delta","sendTextMessageEnd","messageId","undefined","sendActionExecutionEnd","sendActionExecutionStart","parentMessageId","actionName","sendTextMessageStart","sendTextMessageContent","sendActionExecutionArgs","args","console","complete","AIMessage","HumanMessage","SystemMessage","ToolMessage","DynamicStructuredTool","randomId","convertJsonSchemaToZodSchema","convertMessageToLangChainMessage","convertActionInputToLangChainTool","actionInput","schema","parse","func","isAIMessage","Object","prototype","toString","call","isAIMessageChunk","isBaseMessageChunk","maybeSendActionExecutionResultIsMessage","actionExecution","sendActionExecutionResult","streamLangChainResponse","returnDirect","sendTextMessage","sendActionExecution","lc_kwargs","reader","getReader","toolCallDetails","index","prevIndex","done","value","read","toolCallName","toolCallId","toolCallArgs","hasToolCall","Array","isArray","tool_call_chunks","additional_kwargs","encodeResult","LangChainAdapter","runId","chainFn","awaitAllCallbacks","GoogleGenerativeAIAdapter","ChatGoogle","aiMsg","trim","apiKey","env","GOOGLE_API_KEY","modelName","apiVersion","bindTools","metadata","conversation_id","OpenAIAssistantAdapter","codeInterpreterEnabled","assistantId","fileSearchEnabled","openaiAssistantAPI","threads","create","lastMessage","at","nextRunId","submitToolOutputs","submitUserMessage","run","runs","retrieve","required_action","toolCallsIds","submit_tool_outputs","resultMessages","toolOutputs","output","submitToolOutputsStream","tool_outputs","streamResponse","instructionsMessage","shift","instructions","userMessage","openaiTools","assistant_id","getRunIdFromStream","inFunctionCall","event","step_details","Promise","resolve","reject","runIdGetter","off","on","UnifyAdapter","start","baseURL","GroqAdapter","_groq","groq","ensureGroq","Groq","max_tokens","buildSchemaSync","Arg","Ctx","Mutation","Query","Resolver","ReplaySubject","Subject","finalize","firstValueFrom","shareReplay","skipWhile","take","takeWhile","tap","Field","InputType","registerEnumType","MessageRole","CopilotRequestType","ActionInputAvailability","BaseMessageInput","createdAt","Date","MessageInput","textMessage","actionExecutionMessage","resultMessage","agentStateMessage","imageMessage","TextMessageInput","nullable","ActionExecutionMessageInput","ResultMessageInput","AgentStateMessageInput","ImageMessageInput","scope","deprecationReason","agentName","state","running","nodeName","active","Boolean","ActionInput","available","FrontendInput","toDeprecate_fullContext","GuardrailsRuleInput","allowList","denyList","GuardrailsInput","inputValidationRules","CloudInput","guardrails","ForwardedParametersInput","Number","AgentSessionInput","AgentStateInput","config","ExtensionsInput","OpenAIApiAssistantAPIInput","InterfaceType","ObjectType","createUnionType","MessageStatusCode","BaseMessageStatus","PendingMessageStatus","SuccessMessageStatus","FailedMessageStatus","reason","MessageStatusUnion","types","GraphQLJSON","ResponseStatusCode","BaseResponseStatus","resolveType","SuccessResponseStatus","FailedResponseStatus","PendingResponseStatus","implements","FailedResponseStatusReason","details","ResponseStatusUnion","ExtensionsResponse","OpenAIApiAssistantAPIResponse","BaseMessageOutput","hasOwnProperty","TextMessageOutput","ActionExecutionMessageOutput","ResultMessageOutput","AgentStateMessageOutput","ImageMessageOutput","CopilotResponse","metaEvents","BaseMetaEvent","MetaEventName","LangGraphInterruptEvent","CopilotKitLangGraphInterruptEvent","CopilotKitLangGraphInterruptEventData","MetaEventInput","CopilotContextInput","GenerateCopilotResponseMetadataInput","requestType","GenerateCopilotResponseInput","frontend","cloud","agentSession","agentState","agentStates","context","Repeater","CopilotKitError","Severity","Message","props","Success","assign","isAgentStateMessage","Role","TextMessage","ActionExecutionMessage","ResultMessage","errorObj","decodeResult","parsed","e","hasError","getError","AgentStateMessage","ImageMessage","RuntimeEventTypes","RuntimeMetaEventName","GraphQLJSONObject","plainToInstance","GraphQLError","GuardrailsValidationFailureResponse","GUARDRAILS_VALIDATION_FAILED","guardrailsReason","MessageStreamInterruptedResponse","MESSAGE_STREAM_INTERRUPTED","UnknownErrorResponse","UNKNOWN_ERROR","originalError","TelemetryClient","createHash","CopilotKitMisuseError","readBody","getZodParameters","extractAgentName","hasImageProperty","canContainImage","image","isMalformed","normalizeMessageContent","part","filename","mimeType","join","warn","aguiToGQL","coAgentStateRenders","gqlMessages","toolCallNames","push","assistant","generativeUI","render","aguiMessageWithImageToGQLMessage","toolCalls","aguiTextMessageToGQLMessage","actionExecMsg","aguiToolCallToGQLActionExecution","specificAction","values","find","wildcardAction","aguiToolMessageToGQLResultMessage","roleValue","developer","system","user","argumentsObj","resultContent","messageContent","toolName","CopilotRuntime","CopilotRuntimeVNext","InMemoryAgentRunner","InMemoryAgentRunnerVNext","EndpointType","extractParametersFromSchema","toolOrSchema","toolParameters","properties","requiredParams","required","paramName","paramDef","items","itemType","itemProperties","keys","enum","enumValues","objectProperties","convertMCPToolsToActions","mcpTools","mcpEndpoint","tool","entries","handler","execute","_isMCPTool","_mcpEndpoint","generateMcpToolInstructions","toolsMap","toolEntries","toolsDoc","paramsDoc","paramsList","propSchema","propDetails","requiredMark","typeInfo","itemProps","objectProps","BasicAgent","observability","mcpToolsCache","Map","runtimeArgs","_instance","agents","endpointAgents","assignEndpointsToAgents","remoteEndpoints","runner","beforeRequestMiddleware","createOnBeforeRequestHandler","bind","afterRequestMiddleware","createOnAfterRequestHandler","observability_c","instance","endpoints","some","endpoint","resolveEndpointType","LangGraphPlatform","handleServiceAdapter","serviceAdapter","then","agentsList","isAgentsListEmpty","hasServiceAdapter","illegalServiceAdapterNames","serviceAdapterCanBeUsedForAgent","getToolsFromMCP","assignToolsToAgents","getToolsFromActions","actionsArray","zodSchema","enrichedAgents","agentId","agent","existingConfig","Reflect","get","existingTools","updatedConfig","set","hookParams","middleware","onBeforeRequest","runtime","path","body","reduce","acc","msg","inputMessages","outputMessages","forwardedProps","onAfterRequest","logObservabilityBeforeRequest","requestData","hooks","handleRequest","logObservabilityAfterRequest","outputMessagesPromise","baseData","streamedChunks","requestStartTime","publicApiKey","progressive","latency","now","timestamp","isFinalResponse","handleResponse","logError","catch","runtimeMcpServers","mcpServers","createMCPClient","requestMcpServers","mcpEndpoints","hasAnyServers","effectiveEndpoints","byUrl","ep","from","allTools","endpointUrl","cached","client","toolDefs","dedupedByName","copilotKitEndpoint","CopilotKit","langGraphPlatformEndpoint","packageJson","telemetryClient","packageName","packageVersion","version","getRuntimeInstanceTelemetryInfo","endpointsInfo","info","endpointType","endpointTypes","agentsAmount","hashedKey","langsmithApiKey","update","digest","apiKeyProvided","actionsAmount","endpointsAmount","hashedLgcKey","baseUrl","Agent","AgentsResponse","LangGraphEventTypes","MetaEventNames","CustomEventNames","invokeGuardrails","copilotCloudPublicApiKey","onResult","onError","restOfMessages","slice","input","validTopics","invalidTopics","guardrailsResult","fetch","method","headers","ok","resultJson","CopilotResolver","hello","availableAgents","ctx","logger","child","component","debug","agentsWithEndpoints","agentWithoutEndpoint","generateCopilotResponse","telemetry","capture","_copilotkit","copilotRuntime","copilotCloudBaseUrl","publicApiKeyFromHeaders","COPILOT_CLOUD_BASE_URL","responseStatus$","interruptStreaming$","guardrailsResult$","resolveOutputMessagesPromise","rejectOutputMessagesPromise","runtimeResponse","serverSideActions","actionInputsWithoutAgents","eventStream","processRuntimeEvents","serverSideAction","pipe","eventStreamSubscription","subscribe","next","MetaEvent","OnInterrupt","err","visibility","unsubscribe","pushMessage","stopStreamingMessages","TextMessageStart","textMessageContentStream","TextMessageEnd","TextMessageContent","streamingTextStatus","pushTextChunk","stopStreamingText","textChunks","textSubscription","ActionExecutionStart","actionExecutionArgumentStream","ActionExecutionEnd","ActionExecutionArgs","streamingArgumentsStatus","pushArgumentsChunk","stopStreamingArguments","argumentChunks","actionExecutionArgumentSubscription","ActionExecutionResult","severity","useDeferStream","createPinoLogger","pretty","createLogger","level","colorize","LOG_LEVEL","redact","paths","remove","LoadAgentStateResponse","threadExists","LoadAgentStateInput","CopilotKitAgentDiscoveryError","StateResolver","loadAgentState","hasAgent","a","addCustomHeaderPlugin","onResponse","createContext","initialContext","copilotKitContext","contextLogger","buildSchema","resolvers","emitSchemaFile","getCommonConfig","logLevel","setCloudConfiguration","setGlobalProperties","userErrorCodes","AGENT_NOT_FOUND","API_NOT_FOUND","REMOTE_ENDPOINT_NOT_FOUND","MISSING_PUBLIC_API_KEY_ERROR","logging","plugins","maskedErrors","maskError","isDev","errorCode","createCopilotEndpointSingleRoute","handle","copilotRuntimeNextJSAppRouterEndpoint","commonConfig","framework","copilotRoute","basePath","Readable","readableStreamToNodeStream","webStream","Buffer","destroy","getFullUrl","req","expressPath","originalUrl","host","proto","socket","encrypted","toHeaders","rawHeaders","Headers","key","forEach","entry","append","isStreamConsumed","readableState","_readableState","readableEnded","ended","endEmitted","synthesizeBodyFromParsedBody","parsedBody","Uint8Array","contentType","isDisturbedOrLockedError","TypeError","copilotRuntimeNodeHttpEndpoint","honoApp","res","hasBody","baseHeaders","streamConsumed","canStream","requestBody","useDuplex","synthesized","buildRequest","duplex","Request","fallbackHeaders","fallbackBody","setHeader","end","api","bodyParser","copilotRuntimeNextJSPagesRouterEndpoint","copilotRuntimeNodeExpressEndpoint","copilotRuntimeNestEndpoint","LangGraphAgent","LangGraphHttpAgent","RemoteChain","chainUrl","parameterType","toAction","inferLangServeParameters","RemoteRunnable","runnable","invoke","supportedTypes","schemaUrl","replace","property","MAX_TOKENS","convertActionInputToAnthropicTool","input_schema","convertMessageToAnthropicMessage","mediaType","source","media_type","tool_use_id","AnthropicAdapter","promptCaching","_anthropic","anthropic","enabled","ensureAnthropic","Anthropic","addSystemPromptCaching","originalTextLength","log","cache_control","addIncrementalMessageCaching","finalMessage","messageNumber","finalBlock","updatedMessages","shouldGenerateFallbackResponse","endsWithToolResult","lastThree","hasRecentToolPattern","rawMessages","processedToolResultIds","anthropicMessages","hasEmptyTextOnly","limitedMessages","cachedSystemPrompt","cachedMessages","createParams","didOutputText","filterThinkingTextBuffer","FilterThinkingTextBuffer","hasReceivedContent","content_block","reset","onTextChunk","partial_json","fallbackContent","toolResult","c","THINKING_TAG","THINKING_TAG_END","buffer","didFilterThinkingTag","potentialTag","startsWith","indexOf","filteredText","ExperimentalOllamaAdapter","Ollama","ollama","contents","_stream","chunkText","BedrockAdapter","ChatBedrockConverse","region","credentials","accessKeyId","secretAccessKey","EmptyAdapter","ExperimentalEmptyAdapter"],"mappings":"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","sourcesContent":["{\n \"name\": \"@copilotkit/runtime\",\n \"private\": false,\n \"homepage\": \"https://github.com/CopilotKit/CopilotKit\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/CopilotKit/CopilotKit.git\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"version\": \"1.50.0-beta.9\",\n \"sideEffects\": false,\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\"\n },\n \"./v2\": {\n \"import\": \"./dist/v2/index.mjs\",\n \"require\": \"./dist/v2/index.js\",\n \"types\": \"./dist/v2/index.d.ts\"\n },\n \"./langgraph\": {\n \"import\": \"./dist/langgraph.mjs\",\n \"require\": \"./dist/langgraph.js\",\n \"types\": \"./dist/langgraph.d.ts\"\n }\n },\n \"types\": \"./dist/index.d.ts\",\n \"license\": \"MIT\",\n \"scripts\": {\n \"build\": \"tsup --onSuccess \\\"pnpm run generate-graphql-schema\\\"\",\n \"dev\": \"tsup --watch --onSuccess \\\"pnpm run generate-graphql-schema\\\"\",\n \"test\": \"jest --passWithNoTests\",\n \"check-types\": \"tsc --noEmit\",\n \"clean\": \"rm -rf .turbo && rm -rf node_modules && rm -rf dist && rm -rf .next && rm -rf __snapshots__\",\n \"generate-graphql-schema\": \"rm -rf __snapshots__ && ts-node ./scripts/generate-gql-schema.ts\",\n \"link:global\": \"pnpm link --global\",\n \"unlink:global\": \"pnpm unlink --global\"\n },\n \"devDependencies\": {\n \"@jest/globals\": \"^29.7.0\",\n \"@swc/core\": \"1.5.28\",\n \"@types/jest\": \"^29.5.12\",\n \"@types/node\": \"^18.11.17\",\n \"@whatwg-node/server\": \"^0.9.34\",\n \"eslint\": \"^8.56.0\",\n \"eslint-config-custom\": \"workspace:*\",\n \"jest\": \"^29.6.4\",\n \"nodemon\": \"^3.1.3\",\n \"ts-jest\": \"^29.1.1\",\n \"ts-node\": \"^10.9.2\",\n \"tsconfig\": \"workspace:*\",\n \"tsup\": \"^6.7.0\",\n \"typescript\": \"^5.2.3\",\n \"vitest\": \"^3.2.4\"\n },\n \"dependencies\": {\n \"@copilotkit/shared\": \"workspace:*\",\n \"@copilotkitnext/agent\": \"0.0.28\",\n \"@copilotkitnext/runtime\": \"0.0.28\",\n \"@graphql-yoga/plugin-defer-stream\": \"^3.3.1\",\n \"@hono/node-server\": \"^1.13.5\",\n \"@langchain/core\": \"^0.3.38\",\n \"@scarf/scarf\": \"^1.3.0\",\n \"class-transformer\": \"^0.5.1\",\n \"class-validator\": \"^0.14.1\",\n \"graphql\": \"^16.8.1\",\n \"graphql-scalars\": \"^1.23.0\",\n \"graphql-yoga\": \"^5.3.1\",\n \"hono\": \"^4.10.3\",\n \"langchain\": \"^0.3.3\",\n \"openai\": \"^4.85.1\",\n \"partial-json\": \"^0.1.7\",\n \"pino\": \"^9.2.0\",\n \"pino-pretty\": \"^11.2.1\",\n \"reflect-metadata\": \"^0.2.2\",\n \"rxjs\": \"7.8.1\",\n \"type-graphql\": \"2.0.0-rc.1\",\n \"zod\": \"^3.23.3\"\n },\n \"peerDependencies\": {\n \"@anthropic-ai/sdk\": \"^0.57.0\",\n \"@ag-ui/client\": \"^0.0.42\",\n \"@ag-ui/core\": \">=0.0.42\",\n \"@ag-ui/encoder\": \">=0.0.42\",\n \"@ag-ui/langgraph\": \">=0.0.20\",\n \"@ag-ui/proto\": \">=0.0.42\",\n \"@langchain/aws\": \"^0.1.9\",\n \"@langchain/community\": \"^0.3.58\",\n \"@langchain/google-gauth\": \"^0.1.0\",\n \"@langchain/langgraph-sdk\": \"^0.0.70\",\n \"@langchain/openai\": \"^0.4.2\",\n \"groq-sdk\": \">=0.3.0 <1.0.0\",\n \"langchain\": \"^0.3.3\",\n \"openai\": \"^4.85.1\"\n },\n \"peerDependenciesMeta\": {\n \"@anthropic-ai/sdk\": {\n \"optional\": true\n },\n \"@ag-ui/langgraph\": {\n \"optional\": true\n },\n \"@langchain/aws\": {\n \"optional\": true\n },\n \"@langchain/community\": {\n \"optional\": true\n },\n \"@langchain/google-gauth\": {\n \"optional\": true\n },\n \"@langchain/langgraph-sdk\": {\n \"optional\": true\n },\n \"@langchain/openai\": {\n \"optional\": true\n },\n \"groq-sdk\": {\n \"optional\": true\n },\n \"langchain\": {\n \"optional\": true\n },\n \"openai\": {\n \"optional\": true\n }\n },\n \"keywords\": [\n \"copilotkit\",\n \"copilot\",\n \"react\",\n \"nextjs\",\n \"nodejs\",\n \"ai\",\n \"assistant\",\n \"javascript\",\n \"automation\",\n \"textarea\"\n ]\n}\n","import \"reflect-metadata\";\nexport * from \"./lib\";\nexport * from \"./utils\";\nexport * from \"./service-adapters\";\n","import { 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\nexport function limitMessagesToTokenCount(\n messages: any[],\n tools: any[],\n model: string,\n maxTokens?: number,\n): any[] {\n maxTokens ||= maxTokensForOpenAIModel(model);\n\n const result: any[] = [];\n const toolsNumTokens = countToolsTokens(model, tools);\n if (toolsNumTokens > maxTokens) {\n throw new Error(`Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`);\n }\n maxTokens -= toolsNumTokens;\n\n for (const message of messages) {\n if ([\"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].reverse();\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(action: ActionInput): 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(message: ChatCompletionMessageParam) {\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","/**\n * Copilot Runtime adapter for OpenAI.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * organization: \"<your-organization-id>\", // optional\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new OpenAIAdapter({ openai });\n * ```\n *\n * ## Example with Azure OpenAI\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * // The name of your Azure OpenAI Instance.\n * // https://learn.microsoft.com/en-us/azure/cognitive-services/openai/how-to/create-resource?pivots=web-portal#create-a-resource\n * const instance = \"<your instance name>\";\n *\n * // Corresponds to your Model deployment within your OpenAI resource, e.g. my-gpt35-16k-deployment\n * // Navigate to the Azure OpenAI Studio to deploy a model.\n * const model = \"<your model>\";\n *\n * const apiKey = process.env[\"AZURE_OPENAI_API_KEY\"];\n * if (!apiKey) {\n * throw new Error(\"The AZURE_OPENAI_API_KEY environment variable is missing or empty.\");\n * }\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * apiKey,\n * baseURL: `https://${instance}.openai.azure.com/openai/deployments/${model}`,\n * defaultQuery: { \"api-version\": \"2024-04-01-preview\" },\n * defaultHeaders: { \"api-key\": apiKey },\n * });\n *\n * return new OpenAIAdapter({ openai });\n * ```\n */\nimport type OpenAI from \"openai\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n} from \"./utils\";\nimport { randomUUID } from \"@copilotkit/shared\";\nimport { convertServiceAdapterError } from \"../shared\";\n\nconst DEFAULT_MODEL = \"gpt-4o\";\n\nexport interface OpenAIAdapterParams {\n /**\n * An optional OpenAI instance to use. If not provided, a new instance will be\n * created.\n */\n openai?: OpenAI;\n\n /**\n * The model to use.\n */\n model?: string;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n\n /**\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 OpenAIAdapter implements CopilotServiceAdapter {\n public model: string = DEFAULT_MODEL;\n public provider = \"openai\";\n\n private disableParallelToolCalls: boolean = false;\n private _openai: OpenAI;\n private keepSystemRole: boolean = false;\n\n public get openai(): OpenAI {\n return this._openai;\n }\n public get name() {\n return \"OpenAIAdapter\";\n }\n\n constructor(params?: OpenAIAdapterParams) {\n if (params?.openai) {\n this._openai = params.openai;\n }\n // If no instance provided, we'll lazy-load in ensureOpenAI()\n\n if (params?.model) {\n this.model = params.model;\n }\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 {\n threadId: threadIdFromRequest,\n model = this.model,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToOpenAITool);\n const threadId = threadIdFromRequest ?? randomUUID();\n\n // ALLOWLIST APPROACH: Only include tool_result messages that correspond to valid tool_calls\n // Step 1: Extract valid tool_call IDs\n const validToolUseIds = new Set<string>();\n\n for (const message of messages) {\n if (message.isActionExecutionMessage()) {\n validToolUseIds.add(message.id);\n }\n }\n\n // Step 2: Filter messages, keeping only those with valid tool_call IDs\n const filteredMessages = messages.filter((message) => {\n if (message.isResultMessage()) {\n // Skip if there's no corresponding tool_call\n if (!validToolUseIds.has(message.actionExecutionId)) {\n return false;\n }\n\n // Remove this ID from valid IDs so we don't process duplicates\n validToolUseIds.delete(message.actionExecutionId);\n return true;\n }\n\n // Keep all non-tool-result messages\n return true;\n });\n\n let openaiMessages = filteredMessages.map((m) =>\n convertMessageToOpenAIMessage(m, { keepSystemRole: this.keepSystemRole }),\n );\n openaiMessages = limitMessagesToTokenCount(openaiMessages, tools, model);\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"function\",\n function: { name: forwardedParameters.toolChoiceFunctionName },\n };\n }\n\n try {\n const openai = this.ensureOpenAI();\n const stream = openai.beta.chat.completions.stream({\n model: model,\n stream: true,\n messages: openaiMessages,\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.maxTokens && {\n max_completion_tokens: forwardedParameters.maxTokens,\n }),\n ...(forwardedParameters?.stop && { stop: forwardedParameters.stop }),\n ...(toolChoice && { tool_choice: toolChoice }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n ...(forwardedParameters?.temperature && { temperature: forwardedParameters.temperature }),\n });\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n try {\n for await (const chunk of stream) {\n if (chunk.choices.length === 0) {\n continue;\n }\n\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (toolCall === undefined || toolCall?.id)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n currentToolCallId = toolCall!.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.id,\n actionName: toolCall!.function!.name,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = chunk.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: content,\n });\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCall.function.arguments,\n });\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n } catch (error) {\n console.error(\"[OpenAI] Error during API call:\", error);\n throw convertServiceAdapterError(error, \"OpenAI\");\n }\n\n eventStream$.complete();\n });\n } catch (error) {\n console.error(\"[OpenAI] Error during API call:\", error);\n throw convertServiceAdapterError(error, \"OpenAI\");\n }\n\n return {\n threadId,\n };\n }\n}\n","import { CopilotKitLowLevelError, CopilotKitErrorCode } from \"@copilotkit/shared\";\n\n/**\n * Converts service adapter errors to structured CopilotKitError format using HTTP status codes.\n * This provides consistent error classification across all service adapters.\n */\nexport function convertServiceAdapterError(\n error: any,\n adapterName: string,\n): CopilotKitLowLevelError {\n const errorName = error?.constructor?.name || error.name;\n const errorMessage = error?.message || String(error);\n const statusCode = error.status || error.statusCode || error.response?.status;\n const responseData = error.error || error.response?.data || error.data;\n\n // Create the base error with the constructor signature\n const structuredError = new CopilotKitLowLevelError({\n error: error instanceof Error ? error : new Error(errorMessage),\n url: `${adapterName} service adapter`,\n message: `${adapterName} API error: ${errorMessage}`,\n });\n\n // Add additional properties after construction\n if (statusCode) {\n (structuredError as any).statusCode = statusCode;\n }\n if (responseData) {\n (structuredError as any).responseData = responseData;\n }\n if (errorName) {\n (structuredError as any).originalErrorType = errorName;\n }\n\n // Classify error based on HTTP status codes (reliable and provider-agnostic)\n let newCode: CopilotKitErrorCode;\n\n if (statusCode === 401) {\n // 401 = Authentication/API key issues\n newCode = CopilotKitErrorCode.AUTHENTICATION_ERROR;\n } else if (statusCode >= 400 && statusCode < 500) {\n // 4xx = Client errors (bad request, invalid params, etc.) - these are configuration issues\n newCode = CopilotKitErrorCode.CONFIGURATION_ERROR;\n } else if (statusCode >= 500) {\n // 5xx = Server errors - keep as NETWORK_ERROR since it's infrastructure related\n newCode = CopilotKitErrorCode.NETWORK_ERROR;\n } else if (statusCode) {\n // Any other HTTP status with an error - likely configuration\n newCode = CopilotKitErrorCode.CONFIGURATION_ERROR;\n } else {\n // No status code - likely a genuine network/connection error\n newCode = CopilotKitErrorCode.NETWORK_ERROR;\n }\n\n // Update both the instance property and the extensions\n (structuredError as any).code = newCode;\n if ((structuredError as any).extensions) {\n (structuredError as any).extensions.code = newCode;\n }\n\n return structuredError;\n}\n","import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n HumanMessage,\n SystemMessage,\n ToolMessage,\n} from \"@langchain/core/messages\";\nimport { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { z } from \"zod\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { LangChainReturnType } from \"./types\";\nimport { RuntimeEventSubject } from \"../events\";\nimport { randomId, convertJsonSchemaToZodSchema } from \"@copilotkit/shared\";\n\nexport function convertMessageToLangChainMessage(message: Message): BaseMessage {\n if (message.isTextMessage()) {\n if (message.role == \"user\") {\n return new HumanMessage(message.content);\n } else if (message.role == \"assistant\") {\n return new AIMessage(message.content);\n } else if (message.role === \"system\") {\n return new SystemMessage(message.content);\n }\n } else if (message.isActionExecutionMessage()) {\n return new AIMessage({\n content: \"\",\n tool_calls: [\n {\n id: message.id,\n args: message.arguments,\n name: message.name,\n },\n ],\n });\n } else if (message.isResultMessage()) {\n return new ToolMessage({\n content: message.result,\n tool_call_id: message.actionExecutionId,\n });\n }\n}\n\nexport function convertActionInputToLangChainTool(actionInput: ActionInput): any {\n return new DynamicStructuredTool({\n ...actionInput,\n name: actionInput.name,\n description: actionInput.description,\n schema: convertJsonSchemaToZodSchema(\n JSON.parse(actionInput.jsonSchema),\n true,\n ) as z.ZodObject<any>,\n func: async () => {\n return \"\";\n },\n });\n}\n\ninterface StreamLangChainResponseParams {\n result: LangChainReturnType;\n eventStream$: RuntimeEventSubject;\n actionExecution?: {\n id: string;\n name: string;\n returnDirect?: boolean;\n };\n}\n\nfunction getConstructorName(object: any): string {\n if (object && typeof object === \"object\" && object.constructor && object.constructor.name) {\n return object.constructor.name;\n }\n return \"\";\n}\n\nfunction isAIMessage(message: any): message is AIMessage {\n return Object.prototype.toString.call(message) === \"[object AIMessage]\";\n}\n\nfunction isAIMessageChunk(message: any): message is AIMessageChunk {\n return Object.prototype.toString.call(message) === \"[object AIMessageChunk]\";\n}\n\nfunction isBaseMessageChunk(message: any): message is BaseMessageChunk {\n return Object.prototype.toString.call(message) === \"[object BaseMessageChunk]\";\n}\n\nfunction maybeSendActionExecutionResultIsMessage(\n eventStream$: RuntimeEventSubject,\n actionExecution?: { id: string; name: string },\n) {\n // language models need a result after the function call\n // we simply let them know that we are sending a message\n if (actionExecution) {\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: \"Sending a message\",\n });\n }\n}\n\nexport async function streamLangChainResponse({\n result,\n eventStream$,\n actionExecution,\n}: StreamLangChainResponseParams) {\n // We support several types of return values from LangChain functions:\n\n // 1. string\n\n if (typeof result === \"string\") {\n if (!actionExecution || actionExecution?.returnDirect) {\n // Just send one chunk with the string as the content.\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: result,\n });\n eventStream$.sendTextMessage(randomId(), result);\n } else {\n // Send as a result\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: result,\n });\n }\n }\n\n // 2. AIMessage\n // Send the content and function call of the AIMessage as the content of the chunk.\n else if (isAIMessage(result)) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n if (result.content) {\n eventStream$.sendTextMessage(randomId(), result.content as string);\n }\n for (const toolCall of result.tool_calls) {\n eventStream$.sendActionExecution({\n actionExecutionId: toolCall.id || randomId(),\n actionName: toolCall.name,\n args: JSON.stringify(toolCall.args),\n });\n }\n }\n\n // 3. BaseMessageChunk\n // Send the content and function call of the AIMessage as the content of the chunk.\n else if (isBaseMessageChunk(result)) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n if (result.lc_kwargs?.content) {\n eventStream$.sendTextMessage(randomId(), result.content as string);\n }\n if (result.lc_kwargs?.tool_calls) {\n for (const toolCall of result.lc_kwargs?.tool_calls) {\n eventStream$.sendActionExecution({\n actionExecutionId: toolCall.id || randomId(),\n actionName: toolCall.name,\n args: JSON.stringify(toolCall.args),\n });\n }\n }\n }\n\n // 4. IterableReadableStream\n // Stream the result of the LangChain function.\n else if (result && \"getReader\" in result) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n let reader = result.getReader();\n\n let mode: \"function\" | \"message\" | null = null;\n let currentMessageId: string;\n\n const toolCallDetails = {\n name: null,\n id: null,\n index: null,\n prevIndex: null,\n };\n\n while (true) {\n try {\n const { done, value } = await reader.read();\n\n let toolCallName: string | undefined = undefined;\n let toolCallId: string | undefined = undefined;\n let toolCallArgs: string | undefined = undefined;\n let hasToolCall: boolean = false;\n let content = \"\";\n if (value && value.content) {\n content = Array.isArray(value.content)\n ? (((value.content[0] as any)?.text ?? \"\") as string)\n : value.content;\n }\n\n if (isAIMessageChunk(value)) {\n let chunk = value.tool_call_chunks?.[0];\n toolCallArgs = chunk?.args;\n hasToolCall = chunk != undefined;\n if (chunk?.name) toolCallDetails.name = chunk.name;\n // track different index on the same tool cool\n if (chunk?.index != null) {\n toolCallDetails.index = chunk.index; // 1\n if (toolCallDetails.prevIndex == null) toolCallDetails.prevIndex = chunk.index;\n }\n // Differentiate when calling the same tool but with different index\n if (chunk?.id)\n toolCallDetails.id = chunk.index != null ? `${chunk.id}-idx-${chunk.index}` : chunk.id;\n\n // Assign to internal variables that the entire script here knows how to work with\n toolCallName = toolCallDetails.name;\n toolCallId = toolCallDetails.id;\n } else if (isBaseMessageChunk(value)) {\n let chunk = value.additional_kwargs?.tool_calls?.[0];\n toolCallName = chunk?.function?.name;\n toolCallId = chunk?.id;\n toolCallArgs = chunk?.function?.arguments;\n hasToolCall = chunk?.function != undefined;\n }\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCallName is defined, it means a new tool call starts.\n if (mode === \"message\" && (toolCallId || done)) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (!hasToolCall || done)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: toolCallId });\n }\n\n if (done) {\n break;\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (hasToolCall && toolCallId && toolCallName) {\n mode = \"function\";\n eventStream$.sendActionExecutionStart({\n actionExecutionId: toolCallId,\n actionName: toolCallName,\n parentMessageId: value.lc_kwargs?.id,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = value.lc_kwargs?.id || randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content,\n });\n } else if (mode === \"function\" && toolCallArgs) {\n // For calls of the same tool with different index, we seal last tool call and register a new one\n if (toolCallDetails.index !== toolCallDetails.prevIndex) {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: toolCallId });\n eventStream$.sendActionExecutionStart({\n actionExecutionId: toolCallId,\n actionName: toolCallName,\n parentMessageId: value.lc_kwargs?.id,\n });\n toolCallDetails.prevIndex = toolCallDetails.index;\n }\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: toolCallId,\n args: toolCallArgs,\n });\n }\n } catch (error) {\n console.error(\"Error reading from stream\", error);\n break;\n }\n }\n } else if (actionExecution) {\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: encodeResult(result),\n });\n }\n\n // unsupported type\n else {\n throw new Error(\"Invalid return type from LangChain function.\");\n }\n\n eventStream$.complete();\n}\n\nfunction encodeResult(result: any): string {\n if (result === undefined) {\n return \"\";\n } else if (typeof result === \"string\") {\n return result;\n } else {\n return JSON.stringify(result);\n }\n}\n","/**\n * Copilot Runtime adapter for LangChain.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, LangChainAdapter } from \"@copilotkit/runtime\";\n * import { ChatOpenAI } from \"@langchain/openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const model = new ChatOpenAI({\n * model: \"gpt-4o\",\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new LangChainAdapter({\n * chainFn: async ({ messages, tools }) => {\n * return model.bindTools(tools).stream(messages);\n * // or optionally enable strict mode\n * // return model.bindTools(tools, { strict: true }).stream(messages);\n * }\n * });\n * ```\n *\n * The asynchronous handler function (`chainFn`) can return any of the following:\n *\n * - A simple `string` response\n * - A LangChain stream (`IterableReadableStream`)\n * - A LangChain `BaseMessageChunk` object\n * - A LangChain `AIMessage` object\n */\n\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport { CopilotServiceAdapter } from \"../service-adapter\";\nimport {\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToLangChainTool,\n convertMessageToLangChainMessage,\n streamLangChainResponse,\n} from \"./utils\";\nimport type { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { LangChainReturnType } from \"./types\";\nimport { randomUUID } from \"@copilotkit/shared\";\n\ninterface ChainFnParameters {\n model: string;\n messages: BaseMessage[];\n tools: DynamicStructuredTool[];\n threadId?: string;\n runId?: string;\n}\n\ninterface LangChainAdapterOptions {\n /**\n * A function that uses the LangChain API to generate a response.\n */\n chainFn: (parameters: ChainFnParameters) => Promise<LangChainReturnType>;\n}\n\nexport class LangChainAdapter implements CopilotServiceAdapter {\n /**\n * To use LangChain as a backend, provide a handler function to the adapter with your custom LangChain logic.\n */\n public get name() {\n return \"LangChainAdapter\";\n }\n constructor(private options: LangChainAdapterOptions) {}\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n try {\n const {\n eventSource,\n model,\n actions,\n messages,\n runId,\n threadId: threadIdFromRequest,\n } = request;\n const threadId = threadIdFromRequest ?? randomUUID();\n const result = await this.options.chainFn({\n messages: messages.map(convertMessageToLangChainMessage),\n tools: actions.map(convertActionInputToLangChainTool),\n model,\n threadId,\n runId,\n });\n\n eventSource.stream(async (eventStream$) => {\n await streamLangChainResponse({\n result,\n eventStream$,\n });\n });\n\n return {\n threadId,\n };\n } finally {\n // Lazy require for optional peer dependency\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { awaitAllCallbacks } = require(\"@langchain/core/callbacks/promises\");\n await awaitAllCallbacks();\n }\n }\n}\n","/**\n * Copilot Runtime adapter for Google Generative AI (e.g. Gemini).\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, GoogleGenerativeAIAdapter } from \"@copilotkit/runtime\";\n * const { GoogleGenerativeAI } = require(\"@google/generative-ai\");\n *\n * const genAI = new GoogleGenerativeAI(process.env[\"GOOGLE_API_KEY\"]);\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new GoogleGenerativeAIAdapter({ model: \"gemini-1.5-pro\" });\n * ```\n */\nimport { LangChainAdapter } from \"../langchain/langchain-adapter\";\n\ninterface GoogleGenerativeAIAdapterOptions {\n /**\n * A custom Google Generative AI model to use.\n */\n model?: string;\n /**\n * The API key to use.\n */\n apiKey?: string;\n}\n\nconst DEFAULT_MODEL = \"gemini-1.5-pro\";\n\nexport class GoogleGenerativeAIAdapter extends LangChainAdapter {\n public provider = \"google\";\n public model: string = DEFAULT_MODEL;\n\n constructor(options?: GoogleGenerativeAIAdapterOptions) {\n super({\n chainFn: async ({ messages, tools, threadId }) => {\n // Lazy require for optional peer dependencies\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { ChatGoogle } = require(\"@langchain/google-gauth\");\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { AIMessage } = require(\"@langchain/core/messages\");\n\n // Filter out empty assistant messages to prevent Gemini validation errors\n // Gemini specifically rejects conversations containing AIMessages with empty content\n const filteredMessages = messages.filter((message) => {\n // Keep all non-AI messages (HumanMessage, SystemMessage, ToolMessage, etc.)\n if (!(message instanceof AIMessage)) {\n return true;\n }\n\n // For AIMessages, only keep those with non-empty content\n // Also keep AIMessages with tool_calls even if content is empty\n const aiMsg = message as any;\n return (\n (aiMsg.content && String(aiMsg.content).trim().length > 0) ||\n (aiMsg.tool_calls && aiMsg.tool_calls.length > 0)\n );\n });\n\n this.model = options?.model ?? \"gemini-1.5-pro\";\n const model = new ChatGoogle({\n apiKey: options?.apiKey ?? process.env.GOOGLE_API_KEY,\n modelName: this.model,\n apiVersion: \"v1beta\",\n }).bindTools(tools);\n\n return model.stream(filteredMessages, { metadata: { conversation_id: threadId } });\n },\n });\n }\n}\n","/**\n * Copilot Runtime adapter for the OpenAI Assistant API.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAssistantAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * organization: \"<your-organization-id>\",\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new OpenAIAssistantAdapter({\n * openai,\n * assistantId: \"<your-assistant-id>\",\n * codeInterpreterEnabled: true,\n * fileSearchEnabled: true,\n * });\n * ```\n */\nimport type OpenAI from \"openai\";\nimport type { RunSubmitToolOutputsStreamParams } from \"openai/resources/beta/threads/runs/runs\";\nimport type { AssistantStream } from \"openai/lib/AssistantStream\";\nimport type { AssistantStreamEvent, AssistantTool } from \"openai/resources/beta/assistants\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport { Message, ResultMessage, TextMessage } from \"../../graphql/types/converted\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n convertSystemMessageToAssistantAPI,\n} from \"./utils\";\nimport { 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 = 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 } = 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(threadId, runId, messages, eventSource);\n }\n // submit user message\n else if (lastMessage.isTextMessage()) {\n nextRunId = await this.submitUserMessage(\n threadId,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n );\n }\n // unsupported message\n else {\n throw new Error(\"No actionable message found in the messages\");\n }\n\n return {\n 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 openai.beta.threads.runs.retrieve(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) => message.isResultMessage() && toolCallsIds.includes(message.actionExecutionId),\n ) as ResultMessage[];\n\n if (toolCallsIds.length != resultMessages.length) {\n throw new Error(\"Number of function results does not match the number of tool calls\");\n }\n\n // submit the tool outputs\n const toolOutputs: RunSubmitToolOutputsStreamParams.ToolOutput[] = resultMessages.map(\n (message) => {\n return {\n tool_call_id: message.actionExecutionId,\n output: message.result,\n };\n },\n );\n\n const stream = openai.beta.threads.runs.submitToolOutputsStream(threadId, runId, {\n tool_outputs: toolOutputs,\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n });\n\n await this.streamResponse(stream, eventSource);\n return runId;\n }\n\n private async submitUserMessage(\n threadId: string,\n messages: Message[],\n actions: ActionInput[],\n eventSource: RuntimeEventSource,\n forwardedParameters: ForwardedParametersInput,\n ) {\n const openai = this.ensureOpenAI();\n messages = [...messages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage() ? instructionsMessage.content : \"\";\n\n // get the latest user message\n const userMessage = messages\n .map((m) => convertMessageToOpenAIMessage(m, { keepSystemRole: this.keepSystemRole }))\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 ? [{ type: \"code_interpreter\" } as AssistantTool] : []),\n ...(this.fileSearchEnabled ? [{ type: \"file_search\" } as AssistantTool] : []),\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(stream: AssistantStream, eventSource: RuntimeEventSource) {\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({ actionExecutionId: currentToolCallId });\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 = chunk.data.delta.step_details.tool_calls?.[0].function.name;\n toolCallArgs = chunk.data.delta.step_details.tool_calls?.[0].function.arguments;\n }\n\n if (toolCallName && toolCallId) {\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\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({ actionExecutionId: currentToolCallId });\n }\n eventStream$.complete();\n });\n }\n}\n\nfunction getRunIdFromStream(stream: AssistantStream): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n let runIdGetter = (event: AssistantStreamEvent) => {\n if (event.event === \"thread.run.created\") {\n const runId = event.data.id;\n stream.off(\"event\", runIdGetter);\n resolve(runId);\n }\n };\n stream.on(\"event\", runIdGetter);\n });\n}\n","/**\n * CopilotKit Adapter for Unify\n *\n * <RequestExample>\n * ```jsx CopilotRuntime Example\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(req, new UnifyAdapter());\n * ```\n * </RequestExample>\n *\n * You can easily set the model to use by passing it to the constructor.\n * ```jsx\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(\n * req,\n * new UnifyAdapter({ model: \"llama-3-8b-chat@fireworks-ai\" }),\n * );\n * ```\n */\nimport {\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n CopilotServiceAdapter,\n} from \"../service-adapter\";\nimport { randomId, randomUUID } from \"@copilotkit/shared\";\nimport { convertActionInputToOpenAITool, convertMessageToOpenAIMessage } from \"../openai/utils\";\n\nexport interface UnifyAdapterParams {\n apiKey?: string;\n model: string;\n}\n\nexport class UnifyAdapter implements CopilotServiceAdapter {\n private apiKey: string;\n public model: string;\n private start: boolean;\n public provider = \"unify\";\n\n public get name() {\n return \"UnifyAdapter\";\n }\n\n constructor(options?: UnifyAdapterParams) {\n if (options?.apiKey) {\n this.apiKey = options.apiKey;\n } else {\n this.apiKey = \"UNIFY_API_KEY\";\n }\n this.model = options?.model;\n this.start = true;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const tools = request.actions.map(convertActionInputToOpenAITool);\n // Lazy require for optional peer dependency\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const OpenAI = require(\"openai\").default;\n const openai = new OpenAI({\n apiKey: this.apiKey,\n baseURL: \"https://api.unify.ai/v0/\",\n });\n const forwardedParameters = request.forwardedParameters;\n\n const messages = request.messages.map((m) => convertMessageToOpenAIMessage(m));\n\n const stream = await openai.chat.completions.create({\n model: this.model,\n messages: messages,\n stream: true,\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.temperature && { temperature: forwardedParameters.temperature }),\n });\n\n let model = null;\n let currentMessageId: string;\n let currentToolCallId: string;\n request.eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n for await (const chunk of stream) {\n if (this.start) {\n model = chunk.model;\n currentMessageId = randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: `Model used: ${model}\\n`,\n });\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n this.start = false;\n }\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (toolCall === undefined || toolCall?.id)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n currentToolCallId = toolCall!.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n actionName: toolCall!.function!.name,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = chunk.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: content,\n });\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCall.function.arguments,\n });\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n eventStream$.complete();\n });\n\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n","/**\n * Copilot Runtime adapter for Groq.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, GroqAdapter } from \"@copilotkit/runtime\";\n * import { Groq } from \"groq-sdk\";\n *\n * const groq = new Groq({ apiKey: process.env[\"GROQ_API_KEY\"] });\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new GroqAdapter({ groq, model: \"<model-name>\" });\n * ```\n */\nimport type { Groq } from \"groq-sdk\";\nimport type { ChatCompletionMessageParam } from \"groq-sdk/resources/chat\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n} from \"../openai/utils\";\nimport { randomUUID } from \"@copilotkit/shared\";\nimport { convertServiceAdapterError } from \"../shared\";\n\nconst DEFAULT_MODEL = \"llama-3.3-70b-versatile\";\n\nexport interface GroqAdapterParams {\n /**\n * An optional Groq instance to use.\n */\n groq?: Groq;\n\n /**\n * The model to use.\n */\n model?: string;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n}\n\nexport class GroqAdapter implements CopilotServiceAdapter {\n public model: string = DEFAULT_MODEL;\n public provider = \"groq\";\n\n private disableParallelToolCalls: boolean = false;\n private _groq: Groq;\n public get groq(): Groq {\n return this._groq;\n }\n public get name() {\n return \"GroqAdapter\";\n }\n\n constructor(params?: GroqAdapterParams) {\n if (params?.groq) {\n this._groq = params.groq;\n }\n // If no instance provided, we'll lazy-load in ensureGroq()\n if (params?.model) {\n this.model = params.model;\n }\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n }\n\n private ensureGroq(): Groq {\n if (!this._groq) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { Groq } = require(\"groq-sdk\");\n this._groq = new Groq({});\n }\n return this._groq;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId,\n model = this.model,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToOpenAITool);\n\n let openaiMessages = messages.map((m) =>\n convertMessageToOpenAIMessage(m, { keepSystemRole: true }),\n );\n openaiMessages = limitMessagesToTokenCount(openaiMessages, tools, model);\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"function\",\n function: { name: forwardedParameters.toolChoiceFunctionName },\n };\n }\n let stream;\n try {\n const groq = this.ensureGroq();\n stream = await groq.chat.completions.create({\n model: model,\n stream: true,\n messages: openaiMessages as unknown as ChatCompletionMessageParam[],\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.maxTokens && {\n max_tokens: forwardedParameters.maxTokens,\n }),\n ...(forwardedParameters?.stop && { stop: forwardedParameters.stop }),\n ...(toolChoice && { tool_choice: toolChoice }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n ...(forwardedParameters?.temperature && { temperature: forwardedParameters.temperature }),\n });\n } catch (error) {\n throw convertServiceAdapterError(error, \"Groq\");\n }\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n try {\n for await (const chunk of stream) {\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (toolCall === undefined || toolCall?.id)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n currentToolCallId = toolCall!.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n actionName: toolCall!.function!.name,\n parentMessageId: chunk.id,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = chunk.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content,\n });\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCall.function.arguments,\n });\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n } catch (error) {\n throw convertServiceAdapterError(error, \"Groq\");\n }\n\n eventStream$.complete();\n });\n\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n","import { YogaInitialContext } from \"graphql-yoga\";\nimport { buildSchemaSync } from \"type-graphql\";\nimport { CopilotResolver } from \"../../graphql/resolvers/copilot.resolver\";\nimport { useDeferStream } from \"@graphql-yoga/plugin-defer-stream\";\nimport { CopilotRuntime } from \"../runtime/copilot-runtime\";\nimport { CopilotServiceAdapter } from \"../../service-adapters\";\nimport { CopilotCloudOptions } from \"../cloud\";\nimport { LogLevel, createLogger } from \"../../lib/logger\";\nimport { createYoga } from \"graphql-yoga\";\nimport telemetry from \"../telemetry-client\";\nimport { StateResolver } from \"../../graphql/resolvers/state.resolver\";\nimport * as packageJson from \"../../../package.json\";\nimport { CopilotKitError, CopilotKitErrorCode } from \"@copilotkit/shared\";\n\nconst logger = createLogger();\n\nexport const addCustomHeaderPlugin = {\n onResponse({ response }) {\n // Set your custom header; adjust the header name and value as needed\n response.headers.set(\"X-CopilotKit-Runtime-Version\", packageJson.version);\n },\n};\n\ntype AnyPrimitive = string | boolean | number | null;\nexport type CopilotRequestContextProperties = Record<\n string,\n AnyPrimitive | Record<string, AnyPrimitive>\n>;\n\nexport type GraphQLContext = YogaInitialContext & {\n _copilotkit: CreateCopilotRuntimeServerOptions;\n properties: CopilotRequestContextProperties;\n logger: typeof logger;\n};\n\nexport interface CreateCopilotRuntimeServerOptions {\n runtime: CopilotRuntime<any>;\n serviceAdapter?: CopilotServiceAdapter;\n endpoint: string;\n baseUrl?: string;\n cloud?: CopilotCloudOptions;\n properties?: CopilotRequestContextProperties;\n logLevel?: LogLevel;\n}\n\nexport async function createContext(\n initialContext: YogaInitialContext,\n copilotKitContext: CreateCopilotRuntimeServerOptions,\n contextLogger: typeof logger,\n properties: CopilotRequestContextProperties = {},\n): Promise<Partial<GraphQLContext>> {\n logger.debug({ copilotKitContext }, \"Creating GraphQL context\");\n const ctx: GraphQLContext = {\n ...initialContext,\n _copilotkit: {\n ...copilotKitContext,\n },\n properties: { ...properties },\n logger: contextLogger,\n };\n return ctx;\n}\n\nexport function buildSchema(\n options: {\n emitSchemaFile?: string;\n } = {},\n) {\n logger.debug(\"Building GraphQL schema...\");\n const schema = buildSchemaSync({\n resolvers: [CopilotResolver, StateResolver],\n emitSchemaFile: options.emitSchemaFile,\n });\n logger.debug(\"GraphQL schema built successfully\");\n return schema;\n}\n\nexport type CommonConfig = {\n logging: typeof logger;\n schema: ReturnType<typeof buildSchema>;\n plugins: Parameters<typeof createYoga>[0][\"plugins\"];\n context: (ctx: YogaInitialContext) => Promise<Partial<GraphQLContext>>;\n maskedErrors: {\n maskError: (error: any, message: string, isDev?: boolean) => any;\n };\n};\n\nexport function getCommonConfig(options: CreateCopilotRuntimeServerOptions): CommonConfig {\n const logLevel = (process.env.LOG_LEVEL as LogLevel) || (options.logLevel as LogLevel) || \"error\";\n const logger = createLogger({ level: logLevel, component: \"getCommonConfig\" });\n\n const contextLogger = createLogger({ level: logLevel });\n\n if (options.cloud) {\n telemetry.setCloudConfiguration({\n publicApiKey: options.cloud.publicApiKey,\n baseUrl: options.cloud.baseUrl,\n });\n }\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: {\n ...(options.properties._copilotkit as Record<string, any>),\n },\n });\n }\n\n telemetry.setGlobalProperties({\n runtime: {\n serviceAdapter: options.serviceAdapter.constructor.name,\n },\n });\n\n // User error codes that should not be logged as server errors\n const userErrorCodes = [\n CopilotKitErrorCode.AGENT_NOT_FOUND,\n CopilotKitErrorCode.API_NOT_FOUND,\n CopilotKitErrorCode.REMOTE_ENDPOINT_NOT_FOUND,\n CopilotKitErrorCode.CONFIGURATION_ERROR,\n CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,\n ];\n\n return {\n logging: createLogger({ component: \"Yoga GraphQL\", level: logLevel }),\n schema: buildSchema(),\n plugins: [useDeferStream(), addCustomHeaderPlugin],\n context: (ctx: YogaInitialContext): Promise<Partial<GraphQLContext>> =>\n createContext(ctx, options, contextLogger, options.properties),\n // Suppress logging for user configuration errors\n maskedErrors: {\n maskError: (error: any, message: string, isDev?: boolean) => {\n // Check if this is a user configuration error (could be wrapped in GraphQLError)\n const originalError = error.originalError || error;\n const extensions = error.extensions;\n const errorCode = extensions?.code;\n\n // Suppress logging for user errors based on error code\n if (errorCode && userErrorCodes.includes(errorCode)) {\n // Log user configuration errors at debug level instead\n console.debug(\"User configuration error:\", error.message);\n return error;\n }\n\n // Check if the original error is a user error\n if (\n originalError instanceof CopilotKitError &&\n userErrorCodes.includes(originalError.code)\n ) {\n // Log user configuration errors at debug level instead\n console.debug(\"User configuration error:\", error.message);\n return error;\n }\n\n // For application errors, log normally and mask if needed\n console.error(\"Application error:\", error);\n return error;\n },\n },\n };\n}\n","import { Arg, Ctx, Mutation, Query, Resolver } from \"type-graphql\";\nimport {\n ReplaySubject,\n Subject,\n Subscription,\n filter,\n finalize,\n firstValueFrom,\n shareReplay,\n skipWhile,\n take,\n takeWhile,\n tap,\n} from \"rxjs\";\nimport { GenerateCopilotResponseInput } from \"../inputs/generate-copilot-response.input\";\nimport { CopilotResponse } from \"../types/copilot-response.type\";\nimport {\n CopilotKitLangGraphInterruptEvent,\n LangGraphInterruptEvent,\n} from \"../types/meta-events.type\";\nimport { ActionInputAvailability, MessageRole } from \"../types/enums\";\nimport { Repeater } from \"graphql-yoga\";\nimport type { CopilotRequestContextProperties, GraphQLContext } from \"../../lib/integrations\";\nimport {\n RuntimeEvent,\n RuntimeEventTypes,\n RuntimeMetaEventName,\n} from \"../../service-adapters/events\";\nimport {\n FailedMessageStatus,\n MessageStatusCode,\n MessageStatusUnion,\n SuccessMessageStatus,\n} from \"../types/message-status.type\";\nimport { ResponseStatusUnion, SuccessResponseStatus } from \"../types/response-status.type\";\nimport { GraphQLJSONObject } from \"graphql-scalars\";\nimport { plainToInstance } from \"class-transformer\";\nimport { GuardrailsResult } from \"../types/guardrails-result.type\";\nimport { GraphQLError } from \"graphql\";\nimport {\n GuardrailsValidationFailureResponse,\n MessageStreamInterruptedResponse,\n UnknownErrorResponse,\n} from \"../../utils\";\nimport {\n ActionExecutionMessage,\n AgentStateMessage,\n Message,\n MessageType,\n ResultMessage,\n TextMessage,\n} from \"../types/converted\";\nimport telemetry from \"../../lib/telemetry-client\";\nimport { randomId } from \"@copilotkit/shared\";\nimport { AgentsResponse } from \"../types/agents-response.type\";\nimport { LangGraphEventTypes } from \"../../agents/langgraph/events\";\nimport {\n CopilotKitError,\n CopilotKitLowLevelError,\n isStructuredCopilotKitError,\n} from \"@copilotkit/shared\";\nimport { CopilotRuntime } from \"../../lib\";\n\nconst invokeGuardrails = async ({\n baseUrl,\n copilotCloudPublicApiKey,\n data,\n onResult,\n onError,\n}: {\n baseUrl: string;\n copilotCloudPublicApiKey: string;\n data: GenerateCopilotResponseInput;\n onResult: (result: GuardrailsResult) => void;\n onError: (err: Error) => void;\n}) => {\n if (\n data.messages.length &&\n data.messages[data.messages.length - 1].textMessage?.role === MessageRole.user\n ) {\n const messages = data.messages\n .filter(\n (m) =>\n m.textMessage !== undefined &&\n (m.textMessage.role === MessageRole.user || m.textMessage.role === MessageRole.assistant),\n )\n .map((m) => ({\n role: m.textMessage!.role,\n content: m.textMessage.content,\n }));\n\n const lastMessage = messages[messages.length - 1];\n const restOfMessages = messages.slice(0, -1);\n\n const body = {\n input: lastMessage.content,\n validTopics: data.cloud.guardrails.inputValidationRules.allowList,\n invalidTopics: data.cloud.guardrails.inputValidationRules.denyList,\n messages: restOfMessages,\n };\n\n const guardrailsResult = await fetch(`${baseUrl}/guardrails/validate`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CopilotCloud-Public-API-Key\": copilotCloudPublicApiKey,\n },\n body: JSON.stringify(body),\n });\n\n if (guardrailsResult.ok) {\n const resultJson: GuardrailsResult = await guardrailsResult.json();\n onResult(resultJson);\n } else {\n onError(await guardrailsResult.json());\n }\n }\n};\n\n@Resolver(() => CopilotResponse)\nexport class CopilotResolver {\n @Query(() => String)\n async hello() {\n return \"Hello World\";\n }\n\n @Query(() => AgentsResponse)\n async availableAgents(@Ctx() ctx: GraphQLContext) {\n let logger = ctx.logger.child({ component: \"CopilotResolver.availableAgents\" });\n\n logger.debug(\"Processing\");\n const agentsWithEndpoints = [];\n\n logger.debug(\"Event source created, creating response\");\n\n return {\n agents: agentsWithEndpoints.map(\n ({ endpoint, ...agentWithoutEndpoint }) => agentWithoutEndpoint,\n ),\n };\n }\n\n @Mutation(() => CopilotResponse)\n async generateCopilotResponse(\n @Ctx() ctx: GraphQLContext,\n @Arg(\"data\") data: GenerateCopilotResponseInput,\n @Arg(\"properties\", () => GraphQLJSONObject, { nullable: true })\n properties?: CopilotRequestContextProperties,\n ) {\n telemetry.capture(\"oss.runtime.copilot_request_created\", {\n \"cloud.guardrails.enabled\": data.cloud?.guardrails !== undefined,\n requestType: data.metadata.requestType,\n \"cloud.api_key_provided\": !!ctx.request.headers.get(\"x-copilotcloud-public-api-key\"),\n ...(ctx.request.headers.get(\"x-copilotcloud-public-api-key\")\n ? {\n \"cloud.public_api_key\": ctx.request.headers.get(\"x-copilotcloud-public-api-key\"),\n }\n : {}),\n ...(ctx._copilotkit.baseUrl\n ? {\n \"cloud.base_url\": ctx._copilotkit.baseUrl,\n }\n : {\n \"cloud.base_url\": \"https://api.cloud.copilotkit.ai\",\n }),\n });\n\n let logger = ctx.logger.child({ component: \"CopilotResolver.generateCopilotResponse\" });\n logger.debug({ data }, \"Generating Copilot response\");\n\n if (properties) {\n logger.debug(\"Properties provided, merging with context properties\");\n ctx.properties = { ...ctx.properties, ...properties };\n }\n\n const copilotRuntime = ctx._copilotkit.runtime as unknown as CopilotRuntime;\n const serviceAdapter = ctx._copilotkit.serviceAdapter;\n\n let copilotCloudPublicApiKey: string | null = null;\n let copilotCloudBaseUrl: string;\n\n // Extract publicApiKey from headers for both cloud and non-cloud requests\n // This enables onTrace functionality regardless of cloud configuration\n const publicApiKeyFromHeaders = ctx.request.headers.get(\"x-copilotcloud-public-api-key\");\n if (publicApiKeyFromHeaders) {\n copilotCloudPublicApiKey = publicApiKeyFromHeaders;\n }\n\n if (data.cloud) {\n logger = logger.child({ cloud: true });\n logger.debug(\"Cloud configuration provided, checking for public API key in headers\");\n\n if (!copilotCloudPublicApiKey) {\n logger.error(\"Public API key not found in headers\");\n\n throw new GraphQLError(\"X-CopilotCloud-Public-API-Key header is required\");\n }\n\n if (process.env.COPILOT_CLOUD_BASE_URL) {\n copilotCloudBaseUrl = process.env.COPILOT_CLOUD_BASE_URL;\n } else if (ctx._copilotkit.cloud?.baseUrl) {\n copilotCloudBaseUrl = ctx._copilotkit.cloud?.baseUrl;\n } else {\n copilotCloudBaseUrl = \"https://api.cloud.copilotkit.ai\";\n }\n\n logger = logger.child({ copilotCloudBaseUrl });\n }\n\n logger.debug(\"Setting up subjects\");\n const responseStatus$ = new ReplaySubject<typeof ResponseStatusUnion>();\n const interruptStreaming$ = new ReplaySubject<{ reason: string; messageId?: string }>();\n const guardrailsResult$ = new ReplaySubject<GuardrailsResult>();\n\n let outputMessages: Message[] = [];\n let resolveOutputMessagesPromise: (messages: Message[]) => void;\n let rejectOutputMessagesPromise: (err: Error) => void;\n\n const outputMessagesPromise = new Promise<Message[]>((resolve, reject) => {\n resolveOutputMessagesPromise = resolve;\n rejectOutputMessagesPromise = reject;\n });\n\n if (copilotCloudPublicApiKey) {\n ctx.properties[\"copilotCloudPublicApiKey\"] = copilotCloudPublicApiKey;\n }\n\n logger.debug(\"Processing\");\n let runtimeResponse;\n\n const {\n eventSource,\n threadId = randomId(),\n runId,\n serverSideActions,\n actionInputsWithoutAgents,\n extensions,\n } = runtimeResponse;\n\n logger.debug(\"Event source created, creating response\");\n // run and process the event stream\n const eventStream = eventSource\n .processRuntimeEvents({\n serverSideActions,\n guardrailsResult$: data.cloud?.guardrails ? guardrailsResult$ : null,\n actionInputsWithoutAgents: actionInputsWithoutAgents.filter(\n // TODO-AGENTS: do not exclude ALL server side actions\n (action) =>\n !serverSideActions.find((serverSideAction) => serverSideAction.name == action.name),\n ),\n threadId,\n })\n .pipe(\n // shareReplay() ensures that later subscribers will see the whole stream instead of\n // just the events that were emitted after the subscriber was added.\n shareReplay(),\n finalize(() => {\n logger.debug(\"Event stream finalized\");\n }),\n );\n\n const response = {\n threadId,\n runId,\n status: firstValueFrom(responseStatus$),\n extensions,\n metaEvents: new Repeater(async (push, stop) => {\n let eventStreamSubscription: Subscription;\n\n eventStreamSubscription = eventStream.subscribe({\n next: async (event) => {\n if (event.type != RuntimeEventTypes.MetaEvent) {\n return;\n }\n switch (event.name) {\n // @ts-ignore\n case LangGraphEventTypes.OnInterrupt:\n push(\n plainToInstance(LangGraphInterruptEvent, {\n // @ts-ignore\n type: event.type,\n // @ts-ignore\n name: RuntimeMetaEventName.LangGraphInterruptEvent,\n // @ts-ignore\n value: event.value,\n }),\n );\n break;\n case RuntimeMetaEventName.LangGraphInterruptEvent:\n push(\n plainToInstance(LangGraphInterruptEvent, {\n type: event.type,\n name: event.name,\n value: event.value,\n }),\n );\n break;\n case RuntimeMetaEventName.CopilotKitLangGraphInterruptEvent:\n push(\n plainToInstance(CopilotKitLangGraphInterruptEvent, {\n type: event.type,\n name: event.name,\n data: {\n value: event.data.value,\n messages: event.data.messages.map((message) => {\n if (\n message.type === \"TextMessage\" ||\n (\"content\" in message && \"role\" in message)\n ) {\n return plainToInstance(TextMessage, {\n id: message.id,\n createdAt: new Date(),\n content: [(message as TextMessage).content],\n role: (message as TextMessage).role,\n status: new SuccessMessageStatus(),\n });\n }\n if (\"arguments\" in message) {\n return plainToInstance(ActionExecutionMessage, {\n name: message.name,\n id: message.id,\n arguments: [JSON.stringify(message.arguments)],\n createdAt: new Date(),\n status: new SuccessMessageStatus(),\n });\n }\n throw new Error(\"Unknown message in metaEvents copilot resolver\");\n }),\n },\n }),\n );\n break;\n }\n },\n error: (err) => {\n // For structured CopilotKit errors, set proper error response status\n if (err?.name?.includes(\"CopilotKit\") || err?.extensions?.visibility) {\n responseStatus$.next(\n new UnknownErrorResponse({\n description: err.message || \"Agent error occurred\",\n }),\n );\n } else {\n responseStatus$.next(\n new UnknownErrorResponse({\n description: `An unknown error has occurred in the event stream`,\n }),\n );\n }\n\n eventStreamSubscription?.unsubscribe();\n stop();\n },\n complete: async () => {\n logger.debug(\"Meta events stream completed\");\n responseStatus$.next(new SuccessResponseStatus());\n eventStreamSubscription?.unsubscribe();\n stop();\n },\n });\n }),\n messages: new Repeater(async (pushMessage, stopStreamingMessages) => {\n logger.debug(\"Messages repeater created\");\n\n if (data.cloud?.guardrails) {\n logger = logger.child({ guardrails: true });\n logger.debug(\"Guardrails is enabled, validating input\");\n\n invokeGuardrails({\n baseUrl: copilotCloudBaseUrl,\n copilotCloudPublicApiKey,\n data,\n onResult: (result) => {\n logger.debug({ status: result.status }, \"Guardrails validation done\");\n guardrailsResult$.next(result);\n\n // Guardrails validation failed\n if (result.status === \"denied\") {\n // send the reason to the client and interrupt streaming\n responseStatus$.next(\n new GuardrailsValidationFailureResponse({ guardrailsReason: result.reason }),\n );\n interruptStreaming$.next({\n reason: `Interrupted due to Guardrails validation failure. Reason: ${result.reason}`,\n });\n\n // resolve messages promise to the middleware\n outputMessages = [\n plainToInstance(TextMessage, {\n id: randomId(),\n createdAt: new Date(),\n content: result.reason,\n role: MessageRole.assistant,\n }),\n ];\n resolveOutputMessagesPromise(outputMessages);\n }\n },\n onError: (err) => {\n logger.error({ err }, \"Error in guardrails validation\");\n responseStatus$.next(\n new UnknownErrorResponse({\n description: `An unknown error has occurred in the guardrails validation`,\n }),\n );\n interruptStreaming$.next({\n reason: `Interrupted due to unknown error in guardrails validation`,\n });\n\n // reject the middleware promise\n rejectOutputMessagesPromise(err);\n },\n });\n }\n\n let eventStreamSubscription: Subscription;\n\n logger.debug(\"Event stream created, subscribing to event stream\");\n\n eventStreamSubscription = eventStream.subscribe({\n next: async (event) => {\n switch (event.type) {\n case RuntimeEventTypes.MetaEvent:\n break;\n ////////////////////////////////\n // TextMessageStart\n ////////////////////////////////\n case RuntimeEventTypes.TextMessageStart:\n // create a sub stream that contains the message content\n const textMessageContentStream = eventStream.pipe(\n // skip until this message start event\n skipWhile((e: RuntimeEvent) => e !== event),\n // take until the message end event\n takeWhile(\n (e: RuntimeEvent) =>\n !(\n e.type === RuntimeEventTypes.TextMessageEnd &&\n (e as any).messageId == event.messageId\n ),\n ),\n // filter out any other message events or message ids\n filter(\n (e: RuntimeEvent) =>\n e.type == RuntimeEventTypes.TextMessageContent &&\n (e as any).messageId == event.messageId,\n ),\n );\n\n // signal when we are done streaming\n const streamingTextStatus = new Subject<typeof MessageStatusUnion>();\n\n const messageId = event.messageId;\n // push the new message\n pushMessage({\n id: messageId,\n parentMessageId: event.parentMessageId,\n status: firstValueFrom(streamingTextStatus),\n createdAt: new Date(),\n role: MessageRole.assistant,\n content: new Repeater(async (pushTextChunk, stopStreamingText) => {\n logger.debug(\"Text message content repeater created\");\n\n const textChunks: string[] = [];\n let textSubscription: Subscription;\n\n interruptStreaming$\n .pipe(\n shareReplay(),\n take(1),\n tap(({ reason, messageId }) => {\n logger.debug({ reason, messageId }, \"Text streaming interrupted\");\n\n streamingTextStatus.next(\n plainToInstance(FailedMessageStatus, { reason }),\n );\n\n responseStatus$.next(new MessageStreamInterruptedResponse({ messageId }));\n stopStreamingText();\n textSubscription?.unsubscribe();\n }),\n )\n .subscribe();\n\n logger.debug(\"Subscribing to text message content stream\");\n\n textSubscription = textMessageContentStream.subscribe({\n next: async (e: RuntimeEvent) => {\n if (e.type == RuntimeEventTypes.TextMessageContent) {\n await pushTextChunk(e.content);\n textChunks.push(e.content);\n }\n },\n error: (err) => {\n logger.error({ err }, \"Error in text message content stream\");\n interruptStreaming$.next({\n reason: \"Error streaming message content\",\n messageId,\n });\n stopStreamingText();\n textSubscription?.unsubscribe();\n },\n complete: () => {\n logger.debug(\"Text message content stream completed\");\n streamingTextStatus.next(new SuccessMessageStatus());\n stopStreamingText();\n textSubscription?.unsubscribe();\n\n outputMessages.push(\n plainToInstance(TextMessage, {\n id: messageId,\n createdAt: new Date(),\n content: textChunks.join(\"\"),\n role: MessageRole.assistant,\n }),\n );\n },\n });\n }),\n });\n break;\n ////////////////////////////////\n // ActionExecutionStart\n ////////////////////////////////\n case RuntimeEventTypes.ActionExecutionStart:\n logger.debug(\"Action execution start event received\");\n const actionExecutionArgumentStream = eventStream.pipe(\n skipWhile((e: RuntimeEvent) => e !== event),\n // take until the action execution end event\n takeWhile(\n (e: RuntimeEvent) =>\n !(\n e.type === RuntimeEventTypes.ActionExecutionEnd &&\n (e as any).actionExecutionId == event.actionExecutionId\n ),\n ),\n // filter out any other action execution events or action execution ids\n filter(\n (e: RuntimeEvent) =>\n e.type == RuntimeEventTypes.ActionExecutionArgs &&\n (e as any).actionExecutionId == event.actionExecutionId,\n ),\n );\n const streamingArgumentsStatus = new Subject<typeof MessageStatusUnion>();\n pushMessage({\n id: event.actionExecutionId,\n parentMessageId: event.parentMessageId,\n status: firstValueFrom(streamingArgumentsStatus),\n createdAt: new Date(),\n name: event.actionName,\n arguments: new Repeater(async (pushArgumentsChunk, stopStreamingArguments) => {\n logger.debug(\"Action execution argument stream created\");\n\n const argumentChunks: string[] = [];\n let actionExecutionArgumentSubscription: Subscription;\n\n actionExecutionArgumentSubscription = actionExecutionArgumentStream.subscribe({\n next: async (e: RuntimeEvent) => {\n if (e.type == RuntimeEventTypes.ActionExecutionArgs) {\n await pushArgumentsChunk(e.args);\n argumentChunks.push(e.args);\n }\n },\n error: (err) => {\n logger.error({ err }, \"Error in action execution argument stream\");\n streamingArgumentsStatus.next(\n plainToInstance(FailedMessageStatus, {\n reason:\n \"An unknown error has occurred in the action execution argument stream\",\n }),\n );\n stopStreamingArguments();\n actionExecutionArgumentSubscription?.unsubscribe();\n },\n complete: () => {\n logger.debug(\"Action execution argument stream completed\");\n streamingArgumentsStatus.next(new SuccessMessageStatus());\n stopStreamingArguments();\n actionExecutionArgumentSubscription?.unsubscribe();\n\n outputMessages.push(\n plainToInstance(ActionExecutionMessage, {\n id: event.actionExecutionId,\n createdAt: new Date(),\n name: event.actionName,\n arguments: argumentChunks.join(\"\"),\n }),\n );\n },\n });\n }),\n });\n break;\n ////////////////////////////////\n // ActionExecutionResult\n ////////////////////////////////\n case RuntimeEventTypes.ActionExecutionResult:\n logger.debug({ result: event.result }, \"Action execution result event received\");\n pushMessage({\n id: \"result-\" + event.actionExecutionId,\n status: new SuccessMessageStatus(),\n createdAt: new Date(),\n actionExecutionId: event.actionExecutionId,\n actionName: event.actionName,\n result: event.result,\n });\n\n outputMessages.push(\n plainToInstance(ResultMessage, {\n id: \"result-\" + event.actionExecutionId,\n createdAt: new Date(),\n actionExecutionId: event.actionExecutionId,\n actionName: event.actionName,\n result: event.result,\n }),\n );\n break;\n ////////////////////////////////\n // AgentStateMessage\n ////////////////////////////////\n case RuntimeEventTypes.AgentStateMessage:\n logger.debug({ event }, \"Agent message event received\");\n pushMessage({\n id: randomId(),\n status: new SuccessMessageStatus(),\n threadId: event.threadId,\n agentName: event.agentName,\n nodeName: event.nodeName,\n runId: event.runId,\n active: event.active,\n state: event.state,\n running: event.running,\n role: MessageRole.assistant,\n createdAt: new Date(),\n });\n outputMessages.push(\n plainToInstance(AgentStateMessage, {\n id: randomId(),\n threadId: event.threadId,\n agentName: event.agentName,\n nodeName: event.nodeName,\n runId: event.runId,\n active: event.active,\n state: event.state,\n running: event.running,\n role: MessageRole.assistant,\n createdAt: new Date(),\n }),\n );\n break;\n }\n },\n error: (err) => {\n // For structured CopilotKit errors, set proper error response status\n if (\n err instanceof CopilotKitError ||\n err instanceof CopilotKitLowLevelError ||\n (err instanceof Error && err.name && err.name.includes(\"CopilotKit\")) ||\n err?.extensions?.visibility\n ) {\n responseStatus$.next(\n new UnknownErrorResponse({\n description: err.message || \"Agent error occurred\",\n // Include original error information for frontend to extract\n originalError: {\n code: err.code || err.extensions?.code,\n statusCode: err.statusCode || err.extensions?.statusCode,\n severity: err.severity || err.extensions?.severity,\n visibility: err.visibility || err.extensions?.visibility,\n originalErrorType: err.originalErrorType || err.extensions?.originalErrorType,\n extensions: err.extensions,\n },\n }),\n );\n eventStreamSubscription?.unsubscribe();\n rejectOutputMessagesPromise(err);\n stopStreamingMessages();\n return;\n }\n\n responseStatus$.next(\n new UnknownErrorResponse({\n description: `An unknown error has occurred in the event stream`,\n }),\n );\n eventStreamSubscription?.unsubscribe();\n stopStreamingMessages();\n\n rejectOutputMessagesPromise(err);\n },\n complete: async () => {\n logger.debug(\"Event stream completed\");\n if (data.cloud?.guardrails) {\n logger.debug(\"Guardrails is enabled, waiting for guardrails result\");\n await firstValueFrom(guardrailsResult$);\n }\n responseStatus$.next(new SuccessResponseStatus());\n eventStreamSubscription?.unsubscribe();\n stopStreamingMessages();\n\n resolveOutputMessagesPromise(outputMessages);\n },\n });\n }),\n };\n\n return response;\n }\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MessageInput } from \"./message.input\";\nimport { FrontendInput } from \"./frontend.input\";\nimport { CloudInput } from \"./cloud.input\";\nimport { CopilotRequestType } from \"../types/enums\";\nimport { ForwardedParametersInput } from \"./forwarded-parameters.input\";\nimport { AgentSessionInput } from \"./agent-session.input\";\nimport { AgentStateInput } from \"./agent-state.input\";\nimport { ExtensionsInput } from \"./extensions.input\";\nimport { MetaEventInput } from \"./meta-event.input\";\nimport { CopilotContextInput } from \"./copilot-context.input\";\n\n@InputType()\nexport class GenerateCopilotResponseMetadataInput {\n @Field(() => CopilotRequestType, { nullable: true })\n requestType: CopilotRequestType;\n}\n\n@InputType()\nexport class GenerateCopilotResponseInput {\n @Field(() => GenerateCopilotResponseMetadataInput, { nullable: false })\n metadata: GenerateCopilotResponseMetadataInput;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n\n @Field(() => String, { nullable: true })\n runId?: string;\n\n @Field(() => [MessageInput])\n messages: MessageInput[];\n\n @Field(() => FrontendInput)\n frontend: FrontendInput;\n\n @Field(() => CloudInput, { nullable: true })\n cloud?: CloudInput;\n\n @Field(() => ForwardedParametersInput, { nullable: true })\n forwardedParameters?: ForwardedParametersInput;\n\n @Field(() => AgentSessionInput, { nullable: true })\n agentSession?: AgentSessionInput;\n\n @Field(() => AgentStateInput, { nullable: true })\n agentState?: AgentStateInput;\n\n @Field(() => [AgentStateInput], { nullable: true })\n agentStates?: AgentStateInput[];\n\n @Field(() => ExtensionsInput, { nullable: true })\n extensions?: ExtensionsInput;\n\n @Field(() => [MetaEventInput], { nullable: true })\n metaEvents?: MetaEventInput[];\n\n @Field(() => [CopilotContextInput], { nullable: true })\n context?: CopilotContextInput[];\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MessageRole } from \"../types/enums\";\nimport { BaseMessageInput } from \"../types/base\";\n\n// GraphQL does not support union types in inputs, so we need to use\n// optional fields for the different subtypes.\n@InputType()\nexport class MessageInput extends BaseMessageInput {\n @Field(() => TextMessageInput, { nullable: true })\n textMessage?: TextMessageInput;\n\n @Field(() => ActionExecutionMessageInput, { nullable: true })\n actionExecutionMessage?: ActionExecutionMessageInput;\n\n @Field(() => ResultMessageInput, { nullable: true })\n resultMessage?: ResultMessageInput;\n\n @Field(() => AgentStateMessageInput, { nullable: true })\n agentStateMessage?: AgentStateMessageInput;\n\n @Field(() => ImageMessageInput, { nullable: true })\n imageMessage?: ImageMessageInput;\n}\n\n@InputType()\nexport class TextMessageInput {\n @Field(() => String)\n content: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n}\n\n@InputType()\nexport class ActionExecutionMessageInput {\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n arguments: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => String, {\n nullable: true,\n deprecationReason: \"This field will be removed in a future version\",\n })\n scope?: String;\n}\n\n@InputType()\nexport class ResultMessageInput {\n @Field(() => String)\n actionExecutionId: string;\n\n @Field(() => String)\n actionName: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => String)\n result: string;\n}\n\n@InputType()\nexport class AgentStateMessageInput {\n @Field(() => String)\n threadId: string;\n\n @Field(() => String)\n agentName: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => String)\n state: string;\n\n @Field(() => Boolean)\n running: boolean;\n\n @Field(() => String)\n nodeName: string;\n\n @Field(() => String)\n runId: string;\n\n @Field(() => Boolean)\n active: boolean;\n}\n\n@InputType()\nexport class ImageMessageInput {\n @Field(() => String)\n format: string;\n\n @Field(() => String)\n bytes: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n}\n","import { registerEnumType } from \"type-graphql\";\n\nexport enum MessageRole {\n assistant = \"assistant\",\n developer = \"developer\",\n system = \"system\",\n tool = \"tool\",\n user = \"user\",\n}\n\nexport enum CopilotRequestType {\n Chat = \"Chat\",\n Task = \"Task\",\n TextareaCompletion = \"TextareaCompletion\",\n TextareaPopover = \"TextareaPopover\",\n Suggestion = \"Suggestion\",\n}\n\nexport enum ActionInputAvailability {\n disabled = \"disabled\",\n enabled = \"enabled\",\n remote = \"remote\",\n}\n\nregisterEnumType(MessageRole, {\n name: \"MessageRole\",\n description: \"The role of the message\",\n});\n\nregisterEnumType(CopilotRequestType, {\n name: \"CopilotRequestType\",\n description: \"The type of Copilot request\",\n});\n\nregisterEnumType(ActionInputAvailability, {\n name: \"ActionInputAvailability\",\n description: \"The availability of the frontend action\",\n});\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class BaseMessageInput {\n @Field(() => String)\n id: string;\n\n @Field(() => Date)\n createdAt: Date;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { ActionInput } from \"./action.input\";\n\n@InputType()\nexport class FrontendInput {\n @Field(() => String, { nullable: true })\n toDeprecate_fullContext?: string;\n\n @Field(() => [ActionInput])\n actions: ActionInput[];\n\n @Field(() => String, { nullable: true })\n url?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { ActionInputAvailability } from \"../types/enums\";\n@InputType()\nexport class ActionInput {\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n description: string;\n\n @Field(() => String)\n jsonSchema: string;\n\n @Field(() => ActionInputAvailability, { nullable: true })\n available?: ActionInputAvailability;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { GuardrailsInput } from \"./cloud-guardrails.input\";\n\n@InputType()\nexport class CloudInput {\n @Field(() => GuardrailsInput, { nullable: true })\n guardrails?: GuardrailsInput;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class GuardrailsRuleInput {\n @Field(() => [String], { nullable: true })\n allowList?: string[] = [];\n\n @Field(() => [String], { nullable: true })\n denyList?: string[] = [];\n}\n\n@InputType()\nexport class GuardrailsInput {\n @Field(() => GuardrailsRuleInput, { nullable: false })\n inputValidationRules: GuardrailsRuleInput;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class ForwardedParametersInput {\n @Field(() => String, { nullable: true })\n model?: string;\n\n @Field(() => Number, { nullable: true })\n maxTokens?: number;\n\n @Field(() => [String], { nullable: true })\n stop?: string[];\n\n @Field(() => String, { nullable: true })\n toolChoice?: String;\n\n @Field(() => String, { nullable: true })\n toolChoiceFunctionName?: string;\n\n @Field(() => Number, { nullable: true })\n temperature?: number;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class AgentSessionInput {\n @Field(() => String)\n agentName: string;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n\n @Field(() => String, { nullable: true })\n nodeName?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class AgentStateInput {\n @Field(() => String)\n agentName: string;\n\n @Field(() => String)\n state: string;\n\n @Field(() => String, { nullable: true })\n config?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n/**\n * The extensions input is used to pass additional information to the copilot runtime, specific to a\n * service adapter or agent framework.\n */\n\n@InputType()\nexport class ExtensionsInput {\n @Field(() => OpenAIApiAssistantAPIInput, { nullable: true })\n openaiAssistantAPI?: OpenAIApiAssistantAPIInput;\n}\n\n@InputType()\nexport class OpenAIApiAssistantAPIInput {\n @Field(() => String, { nullable: true })\n runId?: string;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MetaEventName } from \"../types/meta-events.type\";\nimport { MessageInput } from \"./message.input\";\n\n@InputType()\nexport class MetaEventInput {\n @Field(() => MetaEventName)\n name: MetaEventName;\n\n @Field(() => String)\n value?: string;\n\n @Field(() => String, { nullable: true })\n response?: string;\n\n @Field(() => [MessageInput], { nullable: true })\n messages?: MessageInput[];\n}\n","import { createUnionType, Field, InterfaceType, ObjectType, registerEnumType } from \"type-graphql\";\nimport {\n ActionExecutionMessageOutput,\n AgentStateMessageOutput,\n BaseMessageOutput,\n ResultMessageOutput,\n TextMessageOutput,\n} from \"./copilot-response.type\";\n\nexport enum MetaEventName {\n LangGraphInterruptEvent = \"LangGraphInterruptEvent\",\n CopilotKitLangGraphInterruptEvent = \"CopilotKitLangGraphInterruptEvent\",\n}\n\nregisterEnumType(MetaEventName, {\n name: \"MetaEventName\",\n description: \"Meta event types\",\n});\n\n@InterfaceType({\n resolveType(value) {\n if (value.name === MetaEventName.LangGraphInterruptEvent) {\n return LangGraphInterruptEvent;\n } else if (value.name === MetaEventName.CopilotKitLangGraphInterruptEvent) {\n return CopilotKitLangGraphInterruptEvent;\n }\n return undefined;\n },\n})\n@InterfaceType()\nexport abstract class BaseMetaEvent {\n @Field(() => String)\n type: \"MetaEvent\" = \"MetaEvent\";\n\n @Field(() => MetaEventName)\n name: MetaEventName;\n}\n\n@ObjectType()\nexport class CopilotKitLangGraphInterruptEventData {\n @Field(() => String)\n value: string;\n\n @Field(() => [BaseMessageOutput])\n messages: (typeof BaseMessageOutput)[];\n}\n\n@ObjectType({ implements: BaseMetaEvent })\nexport class LangGraphInterruptEvent {\n @Field(() => MetaEventName)\n name: MetaEventName.LangGraphInterruptEvent = MetaEventName.LangGraphInterruptEvent;\n\n @Field(() => String)\n value: string;\n\n @Field(() => String, { nullable: true })\n response?: string;\n}\n\n@ObjectType({ implements: BaseMetaEvent })\nexport class CopilotKitLangGraphInterruptEvent {\n @Field(() => MetaEventName)\n name: MetaEventName.CopilotKitLangGraphInterruptEvent =\n MetaEventName.CopilotKitLangGraphInterruptEvent;\n\n @Field(() => CopilotKitLangGraphInterruptEventData)\n data: CopilotKitLangGraphInterruptEventData;\n\n @Field(() => String, { nullable: true })\n response?: string;\n}\n","import { Field, InterfaceType, ObjectType } from \"type-graphql\";\nimport { MessageRole } from \"./enums\";\nimport { MessageStatusUnion } from \"./message-status.type\";\nimport { ResponseStatusUnion } from \"./response-status.type\";\nimport { ExtensionsResponse } from \"./extensions-response.type\";\nimport { BaseMetaEvent } from \"./meta-events.type\";\n\n@InterfaceType({\n resolveType(value) {\n if (value.hasOwnProperty(\"content\")) {\n return TextMessageOutput;\n } else if (value.hasOwnProperty(\"name\")) {\n return ActionExecutionMessageOutput;\n } else if (value.hasOwnProperty(\"result\")) {\n return ResultMessageOutput;\n } else if (value.hasOwnProperty(\"state\")) {\n return AgentStateMessageOutput;\n } else if (value.hasOwnProperty(\"format\") && value.hasOwnProperty(\"bytes\")) {\n return ImageMessageOutput;\n }\n return undefined;\n },\n})\nexport abstract class BaseMessageOutput {\n @Field(() => String)\n id: string;\n\n @Field(() => Date)\n createdAt: Date;\n\n @Field(() => MessageStatusUnion)\n status: typeof MessageStatusUnion;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class TextMessageOutput {\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => [String])\n content: string[];\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ActionExecutionMessageOutput {\n @Field(() => String)\n name: string;\n\n @Field(() => String, {\n nullable: true,\n deprecationReason: \"This field will be removed in a future version\",\n })\n scope?: string;\n\n @Field(() => [String])\n arguments: string[];\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ResultMessageOutput {\n @Field(() => String)\n actionExecutionId: string;\n\n @Field(() => String)\n actionName: string;\n\n @Field(() => String)\n result: string;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class AgentStateMessageOutput {\n @Field(() => String)\n threadId: string;\n\n @Field(() => String)\n agentName: string;\n\n @Field(() => String)\n nodeName: string;\n\n @Field(() => String)\n runId: string;\n\n @Field(() => Boolean)\n active: boolean;\n\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => String)\n state: string;\n\n @Field(() => Boolean)\n running: boolean;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ImageMessageOutput {\n @Field(() => String)\n format: string;\n\n @Field(() => String)\n bytes: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n}\n\n@ObjectType()\nexport class CopilotResponse {\n @Field(() => String)\n threadId!: string;\n\n @Field(() => ResponseStatusUnion)\n status: typeof ResponseStatusUnion;\n\n @Field({ nullable: true })\n runId?: string;\n\n @Field(() => [BaseMessageOutput])\n messages: (typeof BaseMessageOutput)[];\n\n @Field(() => ExtensionsResponse, { nullable: true })\n extensions?: ExtensionsResponse;\n\n @Field(() => [BaseMetaEvent], { nullable: true })\n metaEvents?: (typeof BaseMetaEvent)[];\n}\n","import { Field, ObjectType, createUnionType, registerEnumType } from \"type-graphql\";\n\nexport enum MessageStatusCode {\n Pending = \"pending\",\n Success = \"success\",\n Failed = \"failed\",\n}\n\nregisterEnumType(MessageStatusCode, {\n name: \"MessageStatusCode\",\n});\n\n@ObjectType()\nexport class BaseMessageStatus {\n @Field(() => MessageStatusCode)\n code: MessageStatusCode;\n}\n\n@ObjectType()\nexport class PendingMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Pending;\n}\n\n@ObjectType()\nexport class SuccessMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Success;\n}\n\n@ObjectType()\nexport class FailedMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Failed;\n\n @Field(() => String)\n reason: string;\n}\n\nexport const MessageStatusUnion = createUnionType({\n name: \"MessageStatus\",\n types: () => [PendingMessageStatus, SuccessMessageStatus, FailedMessageStatus] as const,\n});\n\nexport type MessageStatus = typeof MessageStatusUnion;\n","import { GraphQLJSON } from \"graphql-scalars\";\nimport { Field, InterfaceType, ObjectType, createUnionType, registerEnumType } from \"type-graphql\";\n\nexport enum ResponseStatusCode {\n Pending = \"pending\",\n Success = \"success\",\n Failed = \"failed\",\n}\n\nregisterEnumType(ResponseStatusCode, {\n name: \"ResponseStatusCode\",\n});\n\n@InterfaceType({\n resolveType(value) {\n if (value.code === ResponseStatusCode.Success) {\n return SuccessResponseStatus;\n } else if (value.code === ResponseStatusCode.Failed) {\n return FailedResponseStatus;\n } else if (value.code === ResponseStatusCode.Pending) {\n return PendingResponseStatus;\n }\n return undefined;\n },\n})\n@ObjectType()\nabstract class BaseResponseStatus {\n @Field(() => ResponseStatusCode)\n code: ResponseStatusCode;\n}\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class PendingResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Pending;\n}\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class SuccessResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Success;\n}\n\nexport enum FailedResponseStatusReason {\n GUARDRAILS_VALIDATION_FAILED = \"GUARDRAILS_VALIDATION_FAILED\",\n MESSAGE_STREAM_INTERRUPTED = \"MESSAGE_STREAM_INTERRUPTED\",\n UNKNOWN_ERROR = \"UNKNOWN_ERROR\",\n}\n\nregisterEnumType(FailedResponseStatusReason, {\n name: \"FailedResponseStatusReason\",\n});\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class FailedResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Failed;\n\n @Field(() => FailedResponseStatusReason)\n reason: FailedResponseStatusReason;\n\n @Field(() => GraphQLJSON, { nullable: true })\n details?: Record<string, any> = null;\n}\n\nexport const ResponseStatusUnion = createUnionType({\n name: \"ResponseStatus\",\n types: () => [PendingResponseStatus, SuccessResponseStatus, FailedResponseStatus] as const,\n});\n","import { Field, ObjectType } from \"type-graphql\";\n\n/**\n * The extensions response is used to receive additional information from the copilot runtime, specific to a\n * service adapter or agent framework.\n *\n * Next time a request to the runtime is made, the extensions response will be included in the request as input.\n */\n\n@ObjectType()\nexport class ExtensionsResponse {\n @Field(() => OpenAIApiAssistantAPIResponse, { nullable: true })\n openaiAssistantAPI?: OpenAIApiAssistantAPIResponse;\n}\n\n@ObjectType()\nexport class OpenAIApiAssistantAPIResponse {\n @Field(() => String, { nullable: true })\n runId?: string;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class CopilotContextInput {\n @Field(() => String)\n description: string;\n\n @Field(() => String)\n value: string;\n}\n","import {\n Action,\n CopilotKitError,\n CopilotKitErrorCode,\n CopilotKitLowLevelError,\n ensureStructuredError,\n randomId,\n Severity,\n} from \"@copilotkit/shared\";\nimport { plainToInstance } from \"class-transformer\";\nimport {\n catchError,\n concat,\n concatMap,\n EMPTY,\n firstValueFrom,\n from,\n of,\n ReplaySubject,\n scan,\n Subject,\n} from \"rxjs\";\nimport { ActionInput } from \"../graphql/inputs/action.input\";\nimport { ActionExecutionMessage, ResultMessage, TextMessage } from \"../graphql/types/converted\";\nimport { GuardrailsResult } from \"../graphql/types/guardrails-result.type\";\nimport { generateHelpfulErrorMessage } from \"../lib/streaming\";\nimport telemetry from \"../lib/telemetry-client\";\nimport { streamLangChainResponse } from \"./langchain/utils\";\n\nexport enum RuntimeEventTypes {\n TextMessageStart = \"TextMessageStart\",\n TextMessageContent = \"TextMessageContent\",\n TextMessageEnd = \"TextMessageEnd\",\n ActionExecutionStart = \"ActionExecutionStart\",\n ActionExecutionArgs = \"ActionExecutionArgs\",\n ActionExecutionEnd = \"ActionExecutionEnd\",\n ActionExecutionResult = \"ActionExecutionResult\",\n AgentStateMessage = \"AgentStateMessage\",\n MetaEvent = \"MetaEvent\",\n RunError = \"RunError\",\n}\n\nexport enum RuntimeMetaEventName {\n LangGraphInterruptEvent = \"LangGraphInterruptEvent\",\n LangGraphInterruptResumeEvent = \"LangGraphInterruptResumeEvent\",\n CopilotKitLangGraphInterruptEvent = \"CopilotKitLangGraphInterruptEvent\",\n}\n\nexport type RunTimeMetaEvent =\n | {\n type: RuntimeEventTypes.MetaEvent;\n name: RuntimeMetaEventName.LangGraphInterruptEvent;\n value: string;\n }\n | {\n type: RuntimeEventTypes.MetaEvent;\n name: RuntimeMetaEventName.CopilotKitLangGraphInterruptEvent;\n data: { value: string; messages: (TextMessage | ActionExecutionMessage | ResultMessage)[] };\n }\n | {\n type: RuntimeEventTypes.MetaEvent;\n name: RuntimeMetaEventName.LangGraphInterruptResumeEvent;\n data: string;\n };\n\nexport type RuntimeErrorEvent = {\n type: RuntimeEventTypes.RunError;\n message: string;\n code?: string;\n};\n\nexport type RuntimeEvent =\n | { type: RuntimeEventTypes.TextMessageStart; messageId: string; parentMessageId?: string }\n | {\n type: RuntimeEventTypes.TextMessageContent;\n messageId: string;\n content: string;\n }\n | { type: RuntimeEventTypes.TextMessageEnd; messageId: string }\n | {\n type: RuntimeEventTypes.ActionExecutionStart;\n actionExecutionId: string;\n actionName: string;\n parentMessageId?: string;\n }\n | { type: RuntimeEventTypes.ActionExecutionArgs; actionExecutionId: string; args: string }\n | { type: RuntimeEventTypes.ActionExecutionEnd; actionExecutionId: string }\n | {\n type: RuntimeEventTypes.ActionExecutionResult;\n actionName: string;\n actionExecutionId: string;\n result: string;\n }\n | {\n type: RuntimeEventTypes.AgentStateMessage;\n threadId: string;\n agentName: string;\n nodeName: string;\n runId: string;\n active: boolean;\n role: string;\n state: string;\n running: boolean;\n }\n | RunTimeMetaEvent\n | RuntimeErrorEvent;\n\ninterface RuntimeEventWithState {\n event: RuntimeEvent | null;\n callActionServerSide: boolean;\n action: Action<any> | null;\n actionExecutionId: string | null;\n args: string;\n actionExecutionParentMessageId: string | null;\n}\n\ntype EventSourceCallback = (eventStream$: RuntimeEventSubject) => Promise<void>;\n\nexport class RuntimeEventSubject extends ReplaySubject<RuntimeEvent> {\n constructor() {\n super();\n }\n\n sendTextMessageStart({\n messageId,\n parentMessageId,\n }: {\n messageId: string;\n parentMessageId?: string;\n }) {\n this.next({ type: RuntimeEventTypes.TextMessageStart, messageId, parentMessageId });\n }\n\n sendTextMessageContent({ messageId, content }: { messageId: string; content: string }) {\n this.next({ type: RuntimeEventTypes.TextMessageContent, content, messageId });\n }\n\n sendTextMessageEnd({ messageId }: { messageId: string }) {\n this.next({ type: RuntimeEventTypes.TextMessageEnd, messageId });\n }\n\n sendTextMessage(messageId: string, content: string) {\n this.sendTextMessageStart({ messageId });\n this.sendTextMessageContent({ messageId, content });\n this.sendTextMessageEnd({ messageId });\n }\n\n sendActionExecutionStart({\n actionExecutionId,\n actionName,\n parentMessageId,\n }: {\n actionExecutionId: string;\n actionName: string;\n parentMessageId?: string;\n }) {\n this.next({\n type: RuntimeEventTypes.ActionExecutionStart,\n actionExecutionId,\n actionName,\n parentMessageId,\n });\n }\n\n sendActionExecutionArgs({\n actionExecutionId,\n args,\n }: {\n actionExecutionId: string;\n args: string;\n }) {\n this.next({ type: RuntimeEventTypes.ActionExecutionArgs, args, actionExecutionId });\n }\n\n sendActionExecutionEnd({ actionExecutionId }: { actionExecutionId: string }) {\n this.next({ type: RuntimeEventTypes.ActionExecutionEnd, actionExecutionId });\n }\n\n sendActionExecution({\n actionExecutionId,\n actionName,\n args,\n parentMessageId,\n }: {\n actionExecutionId: string;\n actionName: string;\n args: string;\n parentMessageId?: string;\n }) {\n this.sendActionExecutionStart({ actionExecutionId, actionName, parentMessageId });\n this.sendActionExecutionArgs({ actionExecutionId, args });\n this.sendActionExecutionEnd({ actionExecutionId });\n }\n\n sendActionExecutionResult({\n actionExecutionId,\n actionName,\n result,\n error,\n }: {\n actionExecutionId: string;\n actionName: string;\n result?: string;\n error?: { code: string; message: string };\n }) {\n this.next({\n type: RuntimeEventTypes.ActionExecutionResult,\n actionName,\n actionExecutionId,\n result: ResultMessage.encodeResult(result, error),\n });\n }\n\n sendAgentStateMessage({\n threadId,\n agentName,\n nodeName,\n runId,\n active,\n role,\n state,\n running,\n }: {\n threadId: string;\n agentName: string;\n nodeName: string;\n runId: string;\n active: boolean;\n role: string;\n state: string;\n running: boolean;\n }) {\n this.next({\n type: RuntimeEventTypes.AgentStateMessage,\n threadId,\n agentName,\n nodeName,\n runId,\n active,\n role,\n state,\n running,\n });\n }\n}\n\nexport class RuntimeEventSource {\n private eventStream$ = new RuntimeEventSubject();\n private callback!: EventSourceCallback;\n private errorHandler?: (error: any, context: any) => Promise<void>;\n private errorContext?: any;\n\n constructor(params?: {\n errorHandler?: (error: any, context: any) => Promise<void>;\n errorContext?: any;\n }) {\n this.errorHandler = params?.errorHandler;\n this.errorContext = params?.errorContext;\n }\n\n async stream(callback: EventSourceCallback): Promise<void> {\n this.callback = callback;\n }\n}\n\nfunction convertStreamingErrorToStructured(error: any): CopilotKitError {\n // Determine a more helpful error message based on context\n let helpfulMessage = generateHelpfulErrorMessage(error, \"event streaming connection\");\n\n // For network-related errors, use CopilotKitLowLevelError to preserve the original error\n if (\n error?.message?.includes(\"fetch failed\") ||\n error?.message?.includes(\"ECONNREFUSED\") ||\n error?.message?.includes(\"ENOTFOUND\") ||\n error?.message?.includes(\"ETIMEDOUT\") ||\n error?.message?.includes(\"terminated\") ||\n error?.cause?.code === \"UND_ERR_SOCKET\" ||\n error?.message?.includes(\"other side closed\") ||\n error?.code === \"UND_ERR_SOCKET\"\n ) {\n return new CopilotKitLowLevelError({\n error: error instanceof Error ? error : new Error(String(error)),\n url: \"event streaming connection\",\n message: helpfulMessage,\n });\n }\n\n // For all other errors, preserve the raw error in a basic CopilotKitError\n return new CopilotKitError({\n message: helpfulMessage,\n code: CopilotKitErrorCode.UNKNOWN,\n severity: Severity.CRITICAL,\n });\n}\n","import { randomId } from \"@copilotkit/shared\";\nimport {\n ActionExecutionMessageInput,\n ResultMessageInput,\n TextMessageInput,\n AgentStateMessageInput,\n ImageMessageInput,\n} from \"../../inputs/message.input\";\nimport { BaseMessageInput } from \"../base\";\nimport { BaseMessageOutput } from \"../copilot-response.type\";\nimport { MessageRole } from \"../enums\";\nimport { MessageStatus, MessageStatusCode } from \"../message-status.type\";\n\nexport type MessageType =\n | \"TextMessage\"\n | \"ActionExecutionMessage\"\n | \"ResultMessage\"\n | \"AgentStateMessage\"\n | \"ImageMessage\";\n\nexport class Message {\n type: MessageType;\n id: BaseMessageOutput[\"id\"];\n createdAt: BaseMessageOutput[\"createdAt\"];\n status: MessageStatus;\n\n constructor(props: any) {\n props.id ??= randomId();\n props.status ??= { code: MessageStatusCode.Success };\n props.createdAt ??= new Date();\n Object.assign(this, props);\n }\n\n isTextMessage(): this is TextMessage {\n return this.type === \"TextMessage\";\n }\n\n isActionExecutionMessage(): this is ActionExecutionMessage {\n return this.type === \"ActionExecutionMessage\";\n }\n\n isResultMessage(): this is ResultMessage {\n return this.type === \"ResultMessage\";\n }\n\n isAgentStateMessage(): this is AgentStateMessage {\n return this.type === \"AgentStateMessage\";\n }\n\n isImageMessage(): this is ImageMessage {\n return this.type === \"ImageMessage\";\n }\n}\n\n// alias Role to MessageRole\nexport const Role = MessageRole;\n\n// when constructing any message, the base fields are optional\ntype MessageConstructorOptions = Partial<Message>;\n\ntype TextMessageConstructorOptions = MessageConstructorOptions & TextMessageInput;\n\nexport class TextMessage extends Message implements TextMessageConstructorOptions {\n content: TextMessageInput[\"content\"];\n parentMessageId: TextMessageInput[\"parentMessageId\"];\n role: TextMessageInput[\"role\"];\n type = \"TextMessage\" as const;\n\n constructor(props: TextMessageConstructorOptions) {\n super(props);\n this.type = \"TextMessage\";\n }\n}\n\nexport class ActionExecutionMessage\n extends Message\n implements Omit<ActionExecutionMessageInput, \"arguments\" | \"scope\">\n{\n type: MessageType = \"ActionExecutionMessage\";\n name: string;\n arguments: Record<string, any>;\n parentMessageId?: string;\n}\n\nexport class ResultMessage extends Message implements ResultMessageInput {\n type: MessageType = \"ResultMessage\";\n actionExecutionId: string;\n actionName: string;\n result: string;\n\n static encodeResult(\n result: any,\n error?: { code: string; message: string } | string | Error,\n ): string {\n const errorObj = error\n ? typeof error === \"string\"\n ? { code: \"ERROR\", message: error }\n : error instanceof Error\n ? { code: \"ERROR\", message: error.message }\n : error\n : undefined;\n\n if (errorObj) {\n return JSON.stringify({\n error: errorObj,\n result: result || \"\",\n });\n }\n if (result === undefined) {\n return \"\";\n }\n return typeof result === \"string\" ? result : JSON.stringify(result);\n }\n\n static decodeResult(result: string): {\n error?: { code: string; message: string };\n result: string;\n } {\n if (!result) {\n return { result: \"\" };\n }\n try {\n const parsed = JSON.parse(result);\n if (parsed && typeof parsed === \"object\") {\n if (\"error\" in parsed) {\n return {\n error: parsed.error,\n result: parsed.result || \"\",\n };\n }\n return { result: JSON.stringify(parsed) };\n }\n return { result };\n } catch (e) {\n return { result };\n }\n }\n\n hasError(): boolean {\n try {\n const { error } = ResultMessage.decodeResult(this.result);\n return !!error;\n } catch {\n return false;\n }\n }\n\n getError(): { code: string; message: string } | undefined {\n try {\n const { error } = ResultMessage.decodeResult(this.result);\n return error;\n } catch {\n return undefined;\n }\n }\n}\n\nexport class AgentStateMessage extends Message implements Omit<AgentStateMessageInput, \"state\"> {\n type: MessageType = \"AgentStateMessage\";\n threadId: string;\n agentName: string;\n nodeName: string;\n runId: string;\n active: boolean;\n role: MessageRole;\n state: any;\n running: boolean;\n}\n\nexport class ImageMessage extends Message implements ImageMessageInput {\n type: MessageType = \"ImageMessage\";\n format: string;\n bytes: string;\n role: MessageRole;\n parentMessageId?: string;\n}\n","import {\n FailedResponseStatus,\n FailedResponseStatusReason,\n} from \"../graphql/types/response-status.type\";\n\nexport class GuardrailsValidationFailureResponse extends FailedResponseStatus {\n reason = FailedResponseStatusReason.GUARDRAILS_VALIDATION_FAILED;\n declare details: {\n guardrailsReason: string;\n };\n\n constructor({ guardrailsReason }) {\n super();\n this.details = {\n guardrailsReason,\n };\n }\n}\n\nexport class MessageStreamInterruptedResponse extends FailedResponseStatus {\n reason = FailedResponseStatusReason.MESSAGE_STREAM_INTERRUPTED;\n declare details: {\n messageId: string;\n description: string;\n };\n\n constructor({ messageId }: { messageId: string }) {\n super();\n this.details = {\n messageId,\n description: \"Check the message for mode details\",\n };\n }\n}\n\nexport class UnknownErrorResponse extends FailedResponseStatus {\n reason = FailedResponseStatusReason.UNKNOWN_ERROR;\n declare details: {\n description?: string;\n originalError?: {\n code?: string;\n statusCode?: number;\n severity?: string;\n visibility?: string;\n originalErrorType?: string;\n extensions?: any;\n };\n };\n\n constructor({\n description,\n originalError,\n }: {\n description?: string;\n originalError?: {\n code?: string;\n statusCode?: number;\n severity?: string;\n visibility?: string;\n originalErrorType?: string;\n extensions?: any;\n };\n }) {\n super();\n this.details = {\n description,\n originalError,\n };\n }\n}\n","import { TelemetryClient } from \"@copilotkit/shared\";\nimport { createHash } from \"node:crypto\";\nimport { CopilotRuntime, resolveEndpointType } from \"./runtime/copilot-runtime\";\nimport { RuntimeInstanceCreatedInfo } from \"@copilotkit/shared/src/telemetry/events\";\nimport { CreateCopilotRuntimeServerOptions } from \"./integrations/shared\";\nimport { EndpointType, LangGraphPlatformEndpoint } from \"./runtime/types\";\nconst packageJson = require(\"../../package.json\");\n\nconst telemetryClient = new TelemetryClient({\n packageName: packageJson.name,\n packageVersion: packageJson.version,\n});\n\nexport function getRuntimeInstanceTelemetryInfo(\n options: CreateCopilotRuntimeServerOptions,\n): RuntimeInstanceCreatedInfo {\n const runtime = options.runtime;\n const remoteEndpoints = runtime.params?.remoteEndpoints ?? [];\n const endpointsInfo = remoteEndpoints.reduce(\n (acc, endpoint) => {\n let info = { ...acc };\n\n const endpointType = resolveEndpointType(endpoint);\n if (!info.endpointTypes.includes(endpointType)) {\n info = {\n ...info,\n endpointTypes: [...info.endpointTypes, endpointType],\n };\n }\n\n if (endpointType === EndpointType.LangGraphPlatform) {\n // When type is resolved, recreating a const with casting of type\n const ep = endpoint as LangGraphPlatformEndpoint;\n info = {\n ...info,\n agentsAmount: ep.agents.length,\n hashedKey: ep.langsmithApiKey\n ? createHash(\"sha256\").update(ep.langsmithApiKey).digest(\"hex\")\n : null,\n };\n }\n\n return info;\n },\n { endpointTypes: [], agentsAmount: null, hashedKey: null },\n );\n\n // Get public API key from options.cloud.publicApiKey\n const publicApiKey = options.cloud?.publicApiKey;\n const apiKeyProvided = !!publicApiKey && publicApiKey.trim().length > 0;\n\n return {\n actionsAmount: runtime.params?.actions?.length ?? 0,\n endpointsAmount: remoteEndpoints.length,\n endpointTypes: endpointsInfo.endpointTypes,\n agentsAmount: Object.keys(runtime.instance.agents).length,\n hashedLgcKey: endpointsInfo.hashedKey,\n \"cloud.api_key_provided\": apiKeyProvided,\n ...(apiKeyProvided ? { \"cloud.public_api_key\": publicApiKey } : {}),\n ...(options.cloud?.baseUrl ? { \"cloud.base_url\": options.cloud.baseUrl } : {}),\n } as RuntimeInstanceCreatedInfo;\n}\n\nexport default telemetryClient;\n","/**\n * <Callout type=\"info\">\n * This is the reference for the `CopilotRuntime` class. For more information and example code snippets, please see [Concept: Copilot Runtime](/concepts/copilot-runtime).\n * </Callout>\n *\n * ## Usage\n *\n * ```tsx\n * import { CopilotRuntime } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n * ```\n */\n\nimport {\n Action,\n CopilotErrorHandler,\n CopilotKitMisuseError,\n MaybePromise,\n NonEmptyRecord,\n Parameter,\n readBody,\n getZodParameters,\n PartialBy,\n} from \"@copilotkit/shared\";\nimport { type RunAgentInput } from \"@ag-ui/core\";\nimport { aguiToGQL } from \"../../graphql/message-conversion/agui-to-gql\";\nimport { CopilotServiceAdapter, RemoteChainParameters } from \"../../service-adapters\";\nimport {\n CopilotRuntime as CopilotRuntimeVNext,\n CopilotRuntimeOptions,\n CopilotRuntimeOptions as CopilotRuntimeOptionsVNext,\n InMemoryAgentRunner as InMemoryAgentRunnerVNext,\n} from \"@copilotkitnext/runtime\";\n\nimport { MessageInput } from \"../../graphql/inputs/message.input\";\nimport { Message } from \"../../graphql/types/converted\";\n\nimport {\n EndpointType,\n EndpointDefinition,\n CopilotKitEndpoint,\n LangGraphPlatformEndpoint,\n} from \"./types\";\n\nimport { CopilotObservabilityConfig, LLMRequestData, LLMResponseData } from \"../observability\";\nimport { AbstractAgent } from \"@ag-ui/client\";\n\n// +++ MCP Imports +++\nimport {\n MCPClient,\n MCPEndpointConfig,\n MCPTool,\n extractParametersFromSchema,\n} from \"./mcp-tools-utils\";\nimport { BasicAgent, BasicAgentConfiguration } from \"@copilotkitnext/agent\";\n// Define the function type alias here or import if defined elsewhere\ntype CreateMCPClientFunction = (config: MCPEndpointConfig) => Promise<MCPClient>;\n\ntype ActionsConfiguration<T extends Parameter[] | [] = []> =\n | Action<T>[]\n | ((ctx: { properties: any; url?: string }) => Action<T>[]);\n\ninterface OnBeforeRequestOptions {\n threadId?: string;\n runId?: string;\n inputMessages: Message[];\n properties: any;\n url?: string;\n}\n\ntype OnBeforeRequestHandler = (options: OnBeforeRequestOptions) => void | Promise<void>;\n\ninterface OnAfterRequestOptions {\n threadId: string;\n runId?: string;\n inputMessages: Message[];\n outputMessages: Message[];\n properties: any;\n url?: string;\n}\n\ntype OnAfterRequestHandler = (options: OnAfterRequestOptions) => void | Promise<void>;\n\ninterface OnStopGenerationOptions {\n threadId: string;\n runId?: string;\n url?: string;\n agentName?: string;\n lastMessage: MessageInput;\n}\ntype OnStopGenerationHandler = (options: OnStopGenerationOptions) => void | Promise<void>;\n\ninterface Middleware {\n /**\n * A function that is called before the request is processed.\n */\n /**\n * @deprecated This middleware hook is deprecated and will be removed in a future version.\n * Use updated middleware integration methods in CopilotRuntimeVNext instead.\n */\n onBeforeRequest?: OnBeforeRequestHandler;\n\n /**\n * A function that is called after the request is processed.\n */\n /**\n * @deprecated This middleware hook is deprecated and will be removed in a future version.\n * Use updated middleware integration methods in CopilotRuntimeVNext instead.\n */\n onAfterRequest?: OnAfterRequestHandler;\n}\n\nexport interface CopilotRuntimeConstructorParams_BASE<T extends Parameter[] | [] = []> {\n /**\n * Middleware to be used by the runtime.\n *\n * ```ts\n * onBeforeRequest: (options: {\n * threadId?: string;\n * runId?: string;\n * inputMessages: Message[];\n * properties: any;\n * }) => void | Promise<void>;\n * ```\n *\n * ```ts\n * onAfterRequest: (options: {\n * threadId?: string;\n * runId?: string;\n * inputMessages: Message[];\n * outputMessages: Message[];\n * properties: any;\n * }) => void | Promise<void>;\n * ```\n */\n /**\n * @deprecated This middleware hook is deprecated and will be removed in a future version.\n * Use updated middleware integration methods in CopilotRuntimeVNext instead.\n */\n middleware?: Middleware;\n\n /*\n * A list of server side actions that can be executed. Will be ignored when remoteActions are set\n */\n actions?: ActionsConfiguration<T>;\n\n /*\n * Deprecated: Use `remoteEndpoints`.\n */\n remoteActions?: CopilotKitEndpoint[];\n\n /*\n * A list of remote actions that can be executed.\n */\n remoteEndpoints?: EndpointDefinition[];\n\n /*\n * An array of LangServer URLs.\n */\n langserve?: RemoteChainParameters[];\n\n /*\n * A map of agent names to AGUI agents.\n * Example agent config:\n * ```ts\n * import { AbstractAgent } from \"@ag-ui/client\";\n * // ...\n * agents: {\n * \"support\": new CustomerSupportAgent(),\n * \"technical\": new TechnicalAgent()\n * }\n * ```\n */\n agents?: Record<string, AbstractAgent>;\n\n /*\n * Delegates agent state processing to the service adapter.\n *\n * When enabled, individual agent state requests will not be processed by the agent itself.\n * Instead, all processing will be handled by the service adapter.\n */\n delegateAgentProcessingToServiceAdapter?: boolean;\n\n /**\n * Configuration for LLM request/response logging.\n * Requires publicApiKey from CopilotKit component to be set:\n *\n * ```tsx\n * <CopilotKit publicApiKey=\"ck_pub_...\" />\n * ```\n *\n * Example logging config:\n * ```ts\n * logging: {\n * enabled: true, // Enable or disable logging\n * progressive: true, // Set to false for buffered logging\n * logger: {\n * logRequest: (data) => langfuse.trace({ name: \"LLM Request\", input: data }),\n * logResponse: (data) => langfuse.trace({ name: \"LLM Response\", output: data }),\n * logError: (errorData) => langfuse.trace({ name: \"LLM Error\", metadata: errorData }),\n * },\n * }\n * ```\n */\n observability_c?: CopilotObservabilityConfig;\n\n /**\n * Configuration for connecting to Model Context Protocol (MCP) servers.\n * Allows fetching and using tools defined on external MCP-compliant servers.\n * Requires providing the `createMCPClient` function during instantiation.\n * @experimental\n */\n mcpServers?: MCPEndpointConfig[];\n\n /**\n * A function that creates an MCP client instance for a given endpoint configuration.\n * This function is responsible for using the appropriate MCP client library\n * (e.g., `@copilotkit/runtime`, `ai`) to establish a connection.\n * Required if `mcpServers` is provided.\n *\n * ```typescript\n * import { experimental_createMCPClient } from \"ai\"; // Import from vercel ai library\n * // ...\n * const runtime = new CopilotRuntime({\n * mcpServers: [{ endpoint: \"...\" }],\n * async createMCPClient(config) {\n * return await experimental_createMCPClient({\n * transport: {\n * type: \"sse\",\n * url: config.endpoint,\n * headers: config.apiKey\n * ? { Authorization: `Bearer ${config.apiKey}` }\n * : undefined,\n * },\n * });\n * }\n * });\n * ```\n */\n createMCPClient?: CreateMCPClientFunction;\n\n /**\n * Optional error handler for comprehensive debugging and observability.\n *\n * **Requires publicApiKey**: Error handling only works when requests include a valid publicApiKey.\n * This is a premium Copilot Cloud feature.\n *\n * @param errorEvent - Structured error event with rich debugging context\n *\n * @example\n * ```typescript\n * const runtime = new CopilotRuntime({\n * onError: (errorEvent) => {\n * debugDashboard.capture(errorEvent);\n * }\n * });\n * ```\n */\n onError?: CopilotErrorHandler;\n\n onStopGeneration?: OnStopGenerationHandler;\n\n // /** Optional transcription service for audio processing. */\n // transcriptionService?: CopilotRuntimeOptionsVNext[\"transcriptionService\"];\n // /** Optional *before* middleware – callback function or webhook URL. */\n // beforeRequestMiddleware?: CopilotRuntimeOptionsVNext[\"beforeRequestMiddleware\"];\n // /** Optional *after* middleware – callback function or webhook URL. */\n // afterRequestMiddleware?: CopilotRuntimeOptionsVNext[\"afterRequestMiddleware\"];\n}\n\ntype BeforeRequestMiddleware = CopilotRuntimeOptionsVNext[\"beforeRequestMiddleware\"];\ntype AfterRequestMiddleware = CopilotRuntimeOptionsVNext[\"afterRequestMiddleware\"];\ntype BeforeRequestMiddlewareFn = Exclude<BeforeRequestMiddleware, string>;\ntype BeforeRequestMiddlewareFnParameters = Parameters<BeforeRequestMiddlewareFn>;\ntype BeforeRequestMiddlewareFnResult = ReturnType<BeforeRequestMiddlewareFn>;\ntype AfterRequestMiddlewareFn = Exclude<AfterRequestMiddleware, string>;\ntype AfterRequestMiddlewareFnParameters = Parameters<AfterRequestMiddlewareFn>;\n\ninterface CopilotRuntimeConstructorParams<T extends Parameter[] | [] = []>\n extends Omit<CopilotRuntimeConstructorParams_BASE<T>, \"agents\">,\n Omit<CopilotRuntimeOptionsVNext, \"agents\" | \"transcriptionService\"> {\n /**\n * TODO: un-omit `transcriptionService` above once it's supported\n *\n * This satisfies...\n * – the optional constraint in `CopilotRuntimeConstructorParams_BASE`\n * – the `MaybePromise<NonEmptyRecord<T>>` constraint in `CopilotRuntimeOptionsVNext`\n * – the `Record<string, AbstractAgent>` constraint in `both\n */\n agents?: MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>;\n}\n\n/**\n * Central runtime object passed to all request handlers.\n */\nexport class CopilotRuntime<const T extends Parameter[] | [] = []> {\n params?: CopilotRuntimeConstructorParams<T>;\n private observability?: CopilotObservabilityConfig;\n // Cache MCP tools per endpoint to avoid re-fetching repeatedly\n private mcpToolsCache: Map<string, BasicAgentConfiguration[\"tools\"]> = new Map();\n private runtimeArgs: CopilotRuntimeOptions;\n private _instance: CopilotRuntimeVNext;\n\n constructor(\n params?: CopilotRuntimeConstructorParams<T> & PartialBy<CopilotRuntimeOptions, \"agents\">,\n ) {\n const agents = params?.agents ?? {};\n const endpointAgents = this.assignEndpointsToAgents(params?.remoteEndpoints ?? []);\n\n this.runtimeArgs = {\n agents: { ...endpointAgents, ...agents },\n runner: params?.runner ?? new InMemoryAgentRunnerVNext(),\n // TODO: add support for transcriptionService from CopilotRuntimeOptionsVNext once it is ready\n // transcriptionService: params?.transcriptionService,\n\n beforeRequestMiddleware: this.createOnBeforeRequestHandler(params).bind(this),\n afterRequestMiddleware: this.createOnAfterRequestHandler(params).bind(this),\n };\n this.params = params;\n this.observability = params?.observability_c;\n }\n\n get instance() {\n if (!this._instance) {\n this._instance = new CopilotRuntimeVNext(this.runtimeArgs);\n }\n\n return this._instance;\n }\n\n private assignEndpointsToAgents(\n endpoints: CopilotRuntimeConstructorParams<T>[\"remoteEndpoints\"],\n ): Record<string, AbstractAgent> {\n let result: Record<string, AbstractAgent> = {};\n\n if (\n endpoints.some((endpoint) => resolveEndpointType(endpoint) == EndpointType.LangGraphPlatform)\n ) {\n throw new CopilotKitMisuseError({\n message:\n \"LangGraphPlatformEndpoint in remoteEndpoints is deprecated. \" +\n 'Please use the \"agents\" option instead with LangGraphAgent from \"@copilotkit/runtime/langgraph\". ' +\n 'Example: agents: { myAgent: new LangGraphAgent({ deploymentUrl: \"...\", graphId: \"...\" }) }',\n });\n }\n\n return result;\n }\n\n handleServiceAdapter(serviceAdapter: CopilotServiceAdapter) {\n this.runtimeArgs.agents = Promise.resolve(this.runtimeArgs.agents ?? {}).then(\n async (agents) => {\n let agentsList = agents;\n const isAgentsListEmpty = !Object.keys(agents).length;\n const hasServiceAdapter = Boolean(serviceAdapter);\n const illegalServiceAdapterNames = [\"EmptyAdapter\"];\n const serviceAdapterCanBeUsedForAgent = !illegalServiceAdapterNames.includes(\n serviceAdapter.name,\n );\n\n if (isAgentsListEmpty && (!hasServiceAdapter || !serviceAdapterCanBeUsedForAgent)) {\n throw new CopilotKitMisuseError({\n message:\n \"No default agent provided. Please provide a default agent in the runtime config.\",\n });\n }\n\n if (isAgentsListEmpty) {\n agentsList.default = new BasicAgent({\n model: `${serviceAdapter.provider}/${serviceAdapter.model}`,\n });\n }\n\n if (this.params.actions) {\n const mcpTools = await this.getToolsFromMCP();\n agentsList = this.assignToolsToAgents(agents, [\n ...this.getToolsFromActions(this.params.actions),\n ...mcpTools,\n ]);\n }\n\n return agentsList;\n },\n );\n }\n\n // Receive this.params.action and turn it into the AbstractAgent tools\n private getToolsFromActions(\n actions: ActionsConfiguration<any>,\n ): BasicAgentConfiguration[\"tools\"] {\n // Resolve actions to an array (handle function case)\n const actionsArray =\n typeof actions === \"function\" ? actions({ properties: {}, url: undefined }) : actions;\n\n // Convert each Action to a ToolDefinition\n return actionsArray.map((action) => {\n // Convert JSON schema to Zod schema\n const zodSchema = getZodParameters(action.parameters || []);\n\n return {\n name: action.name,\n description: action.description || \"\",\n parameters: zodSchema,\n execute: () => Promise.resolve(),\n };\n });\n }\n\n private assignToolsToAgents(\n agents: Record<string, AbstractAgent>,\n tools: BasicAgentConfiguration[\"tools\"],\n ): Record<string, AbstractAgent> {\n if (!tools?.length) {\n return agents;\n }\n\n const enrichedAgents: Record<string, AbstractAgent> = { ...agents };\n\n for (const [agentId, agent] of Object.entries(enrichedAgents)) {\n const existingConfig = (Reflect.get(agent, \"config\") ?? {}) as BasicAgentConfiguration;\n const existingTools = existingConfig.tools ?? [];\n\n const updatedConfig: BasicAgentConfiguration = {\n ...existingConfig,\n tools: [...existingTools, ...tools],\n };\n\n Reflect.set(agent, \"config\", updatedConfig);\n enrichedAgents[agentId] = agent;\n }\n\n return enrichedAgents;\n }\n\n private createOnBeforeRequestHandler(\n params?: CopilotRuntimeConstructorParams<T> & PartialBy<CopilotRuntimeOptions, \"agents\">,\n ) {\n return async (hookParams: BeforeRequestMiddlewareFnParameters[0]) => {\n // TODO: get public api key and run with expected data\n // if (this.observability?.enabled && this.params.publicApiKey) {\n // this.logObservabilityBeforeRequest()\n // }\n\n // TODO: replace hooksParams top argument type with BeforeRequestMiddlewareParameters when exported\n params?.beforeRequestMiddleware?.(hookParams);\n\n if (params?.middleware?.onBeforeRequest) {\n const { request, runtime, path } = hookParams;\n const body = (await readBody(request)) as RunAgentInput;\n const gqlMessages = (aguiToGQL(body.messages) as Message[]).reduce(\n (acc, msg) => {\n if (\"role\" in msg && msg.role === \"user\") {\n acc.inputMessages.push(msg);\n } else {\n acc.outputMessages.push(msg);\n }\n return acc;\n },\n { inputMessages: [] as Message[], outputMessages: [] as Message[] },\n );\n const { inputMessages, outputMessages } = gqlMessages;\n params.middleware.onBeforeRequest({\n threadId: body.threadId,\n runId: body.runId,\n inputMessages,\n properties: body.forwardedProps,\n url: request.url,\n } satisfies OnBeforeRequestOptions);\n }\n };\n }\n\n private createOnAfterRequestHandler(\n params?: CopilotRuntimeConstructorParams<T> & PartialBy<CopilotRuntimeOptions, \"agents\">,\n ) {\n return async (hookParams: AfterRequestMiddlewareFnParameters[0]) => {\n // TODO: get public api key and run with expected data\n // if (this.observability?.enabled && publicApiKey) {\n // this.logObservabilityAfterRequest()\n // }\n\n // TODO: replace hooksParams top argument type with AfterRequestMiddlewareParameters when exported\n params?.afterRequestMiddleware?.(hookParams);\n\n if (params?.middleware?.onAfterRequest) {\n // TODO: provide old expected params here when available\n // @ts-expect-error -- missing arguments.\n params.middleware.onAfterRequest({});\n }\n };\n }\n\n // Observability Methods\n\n /**\n * Log LLM request if observability is enabled\n */\n private async logObservabilityBeforeRequest(requestData: LLMRequestData): Promise<void> {\n try {\n await this.observability.hooks.handleRequest(requestData);\n } catch (error) {\n console.error(\"Error logging LLM request:\", error);\n }\n }\n\n /**\n * Log final LLM response after request completes\n */\n private logObservabilityAfterRequest(\n outputMessagesPromise: Promise<Message[]>,\n baseData: {\n threadId: string;\n runId?: string;\n model?: string;\n provider?: string;\n agentName?: string;\n nodeName?: string;\n },\n streamedChunks: any[],\n requestStartTime: number,\n publicApiKey?: string,\n ): void {\n try {\n outputMessagesPromise\n .then((outputMessages) => {\n const responseData: LLMResponseData = {\n threadId: baseData.threadId,\n runId: baseData.runId,\n model: baseData.model,\n // Use collected chunks for progressive mode or outputMessages for regular mode\n output: this.observability.progressive ? streamedChunks : outputMessages,\n latency: Date.now() - requestStartTime,\n timestamp: Date.now(),\n provider: baseData.provider,\n isFinalResponse: true,\n agentName: baseData.agentName,\n nodeName: baseData.nodeName,\n };\n\n try {\n this.observability.hooks.handleResponse(responseData);\n } catch (logError) {\n console.error(\"Error logging LLM response:\", logError);\n }\n })\n .catch((error) => {\n console.error(\"Failed to get output messages for logging:\", error);\n });\n } catch (error) {\n console.error(\"Error setting up logging for LLM response:\", error);\n }\n }\n\n // Resolve MCP tools to BasicAgent tool definitions\n // Optionally accepts request-scoped properties to merge request-provided mcpServers\n private async getToolsFromMCP(options?: {\n properties?: Record<string, unknown>;\n }): Promise<BasicAgentConfiguration[\"tools\"]> {\n const runtimeMcpServers = (this.params?.mcpServers ?? []) as MCPEndpointConfig[];\n const createMCPClient = this.params?.createMCPClient as CreateMCPClientFunction | undefined;\n\n // If no runtime config and no request overrides, nothing to do\n const requestMcpServers = ((\n options?.properties as { mcpServers?: MCPEndpointConfig[] } | undefined\n )?.mcpServers ??\n (options?.properties as { mcpEndpoints?: MCPEndpointConfig[] } | undefined)?.mcpEndpoints ??\n []) as MCPEndpointConfig[];\n\n const hasAnyServers =\n (runtimeMcpServers?.length ?? 0) > 0 || (requestMcpServers?.length ?? 0) > 0;\n if (!hasAnyServers) {\n return [];\n }\n\n if (!createMCPClient) {\n // Mirror legacy behavior: when servers are provided without a factory, treat as misconfiguration\n throw new CopilotKitMisuseError({\n message:\n \"MCP Integration Error: `mcpServers` were provided, but the `createMCPClient` function was not passed to the CopilotRuntime constructor. Please provide an implementation for `createMCPClient`.\",\n });\n }\n\n // Merge and dedupe endpoints by URL; request-level overrides take precedence\n const effectiveEndpoints = (() => {\n const byUrl = new Map<string, MCPEndpointConfig>();\n for (const ep of runtimeMcpServers) {\n if (ep?.endpoint) byUrl.set(ep.endpoint, ep);\n }\n for (const ep of requestMcpServers) {\n if (ep?.endpoint) byUrl.set(ep.endpoint, ep);\n }\n return Array.from(byUrl.values());\n })();\n\n const allTools: BasicAgentConfiguration[\"tools\"] = [];\n\n for (const config of effectiveEndpoints) {\n const endpointUrl = config.endpoint;\n // Return cached tool definitions when available\n const cached = this.mcpToolsCache.get(endpointUrl);\n if (cached) {\n allTools.push(...cached);\n continue;\n }\n\n try {\n const client = await createMCPClient(config);\n const toolsMap = await client.tools();\n\n const toolDefs: BasicAgentConfiguration[\"tools\"] = Object.entries(toolsMap).map(\n ([toolName, tool]: [string, MCPTool]) => {\n const params: Parameter[] = extractParametersFromSchema(tool);\n const zodSchema = getZodParameters(params);\n return {\n name: toolName,\n description: tool.description || `MCP tool: ${toolName} (from ${endpointUrl})`,\n parameters: zodSchema,\n execute: () => Promise.resolve(),\n };\n },\n );\n\n // Cache per endpoint and add to aggregate\n this.mcpToolsCache.set(endpointUrl, toolDefs);\n allTools.push(...toolDefs);\n } catch (error) {\n console.error(\n `MCP: Failed to fetch tools from endpoint ${endpointUrl}. Skipping. Error:`,\n error,\n );\n // Cache empty to prevent repeated attempts within lifecycle\n this.mcpToolsCache.set(endpointUrl, []);\n }\n }\n\n // Dedupe tools by name while preserving last-in wins (request overrides)\n const dedupedByName = new Map<string, (typeof allTools)[number]>();\n for (const tool of allTools) {\n dedupedByName.set(tool.name, tool);\n }\n\n return Array.from(dedupedByName.values());\n }\n}\n\n// The two functions below are \"factory functions\", meant to create the action objects that adhere to the expected interfaces\nexport function copilotKitEndpoint(config: Omit<CopilotKitEndpoint, \"type\">): CopilotKitEndpoint {\n return {\n ...config,\n type: EndpointType.CopilotKit,\n };\n}\n\nexport function langGraphPlatformEndpoint(\n config: Omit<LangGraphPlatformEndpoint, \"type\">,\n): LangGraphPlatformEndpoint {\n return {\n ...config,\n type: EndpointType.LangGraphPlatform,\n };\n}\n\nexport function resolveEndpointType(endpoint: EndpointDefinition) {\n if (!endpoint.type) {\n if (\"deploymentUrl\" in endpoint && \"agents\" in endpoint) {\n return EndpointType.LangGraphPlatform;\n } else {\n return EndpointType.CopilotKit;\n }\n }\n\n return endpoint.type;\n}\n","import * as gql from \"../types/converted/index\";\nimport { MessageRole } from \"../types/enums\";\nimport agui from \"@copilotkit/shared\"; // named agui for clarity, but this only includes agui message types\n\n// Helper function to extract agent name from message\nfunction extractAgentName(message: agui.Message): string {\n if (message.role !== \"assistant\") {\n throw new Error(`Cannot extract agent name from message with role ${message.role}`);\n }\n\n return message.agentName || \"unknown\";\n}\n\n// Type guard for agent state message\nfunction isAgentStateMessage(message: agui.Message): boolean {\n return message.role === \"assistant\" && \"agentName\" in message && \"state\" in message;\n}\n\n// Type guard for messages with image property\nfunction hasImageProperty(message: agui.Message): boolean {\n const canContainImage = message.role === \"assistant\" || message.role === \"user\";\n if (!canContainImage || message.image === undefined) {\n return false;\n }\n\n const isMalformed = message.image.format === undefined || message.image.bytes === undefined;\n if (isMalformed) {\n return false;\n }\n\n return true;\n}\n\nfunction normalizeMessageContent(content: agui.Message[\"content\"]): string {\n if (typeof content === \"string\" || typeof content === \"undefined\") {\n return content || \"\";\n }\n\n if (Array.isArray(content)) {\n return content\n .map((part) => {\n if (part?.type === \"text\") {\n return part.text;\n }\n if (part?.type === \"binary\") {\n return part.data || part.url || part.filename || `[binary:${part.mimeType}]`;\n }\n return \"\";\n })\n .filter(Boolean)\n .join(\"\\n\");\n }\n\n if (content && typeof content === \"object\") {\n try {\n return JSON.stringify(content);\n } catch (error) {\n console.warn(\"Failed to serialize message content\", error);\n }\n }\n\n return String(content ?? \"\");\n}\n\n/*\n ----------------------------\n AGUI Message -> GQL Message\n ----------------------------\n*/\nexport function aguiToGQL(\n messages: agui.Message[] | agui.Message,\n actions?: Record<string, any>,\n coAgentStateRenders?: Record<string, any>,\n): gql.Message[] {\n const gqlMessages: gql.Message[] = [];\n messages = Array.isArray(messages) ? messages : [messages];\n\n // Track tool call names by their IDs for use in result messages\n const toolCallNames: Record<string, string> = {};\n\n for (const message of messages) {\n // Agent state message support\n if (isAgentStateMessage(message)) {\n const agentName = extractAgentName(message);\n const state = \"state\" in message && message.state ? message.state : {};\n gqlMessages.push(\n new gql.AgentStateMessage({\n id: message.id,\n agentName,\n state,\n role: gql.Role.assistant,\n }),\n );\n // Optionally preserve render function\n if (\"generativeUI\" in message && message.generativeUI && coAgentStateRenders) {\n coAgentStateRenders[agentName] = {\n name: agentName,\n render: message.generativeUI,\n };\n }\n continue;\n }\n\n if (hasImageProperty(message)) {\n gqlMessages.push(aguiMessageWithImageToGQLMessage(message));\n continue;\n }\n\n // Action execution message support\n if (message.role === \"assistant\" && message.toolCalls) {\n gqlMessages.push(aguiTextMessageToGQLMessage(message));\n for (const toolCall of message.toolCalls) {\n // Track the tool call name by its ID\n toolCallNames[toolCall.id] = toolCall.function.name;\n\n const actionExecMsg = aguiToolCallToGQLActionExecution(toolCall, message.id);\n // Preserve render function in actions context\n if (\"generativeUI\" in message && message.generativeUI && actions) {\n const actionName = toolCall.function.name;\n // Check for specific action first, then wild card action\n const specificAction = Object.values(actions).find(\n (action: any) => action.name === actionName,\n );\n const wildcardAction = Object.values(actions).find((action: any) => action.name === \"*\");\n\n // Assign render function to the matching action (specific takes priority)\n if (specificAction) {\n specificAction.render = message.generativeUI;\n } else if (wildcardAction) {\n wildcardAction.render = message.generativeUI;\n }\n }\n gqlMessages.push(actionExecMsg);\n }\n continue;\n }\n // Regular text messages\n if (\n message.role === \"developer\" ||\n message.role === \"system\" ||\n message.role === \"assistant\" ||\n message.role === \"user\"\n ) {\n gqlMessages.push(aguiTextMessageToGQLMessage(message));\n continue;\n }\n // Tool result message\n if (message.role === \"tool\") {\n gqlMessages.push(aguiToolMessageToGQLResultMessage(message, toolCallNames));\n continue;\n }\n throw new Error(\n `Unknown message role: \"${(message as any).role}\" in message with id: ${(message as any).id}`,\n );\n }\n\n return gqlMessages;\n}\n\nexport function aguiTextMessageToGQLMessage(message: agui.Message): gql.TextMessage {\n if (\n message.role !== \"developer\" &&\n message.role !== \"system\" &&\n message.role !== \"assistant\" &&\n message.role !== \"user\"\n ) {\n throw new Error(`Cannot convert message with role ${message.role} to TextMessage`);\n }\n\n let roleValue: MessageRole;\n\n if (message.role === \"developer\") {\n roleValue = gql.Role.developer;\n } else if (message.role === \"system\") {\n roleValue = gql.Role.system;\n } else if (message.role === \"assistant\") {\n roleValue = gql.Role.assistant;\n } else {\n roleValue = gql.Role.user;\n }\n\n return new gql.TextMessage({\n id: message.id,\n content: normalizeMessageContent(message.content),\n role: roleValue,\n });\n}\n\nexport function aguiToolCallToGQLActionExecution(\n toolCall: agui.ToolCall,\n parentMessageId: string,\n): gql.ActionExecutionMessage {\n if (toolCall.type !== \"function\") {\n throw new Error(`Unsupported tool call type: ${toolCall.type}`);\n }\n\n // Handle arguments - they should be a JSON string in AGUI format,\n // but we need to convert them to an object for GQL format\n let argumentsObj: any;\n\n if (typeof toolCall.function.arguments === \"string\") {\n // Expected case: arguments is a JSON string\n try {\n argumentsObj = JSON.parse(toolCall.function.arguments);\n } catch (error) {\n console.warn(`Failed to parse tool call arguments for ${toolCall.function.name}:`, error);\n // Provide fallback empty object to prevent application crash\n argumentsObj = {};\n }\n } else if (\n typeof toolCall.function.arguments === \"object\" &&\n toolCall.function.arguments !== null\n ) {\n // Backward compatibility: arguments is already an object\n argumentsObj = toolCall.function.arguments;\n } else {\n // Fallback for undefined, null, or other types\n console.warn(\n `Invalid tool call arguments type for ${toolCall.function.name}:`,\n typeof toolCall.function.arguments,\n );\n argumentsObj = {};\n }\n\n // Always include name and arguments\n return new gql.ActionExecutionMessage({\n id: toolCall.id,\n name: toolCall.function.name,\n arguments: argumentsObj,\n parentMessageId: parentMessageId,\n });\n}\n\nexport function aguiToolMessageToGQLResultMessage(\n message: agui.Message,\n toolCallNames: Record<string, string>,\n): gql.ResultMessage {\n if (message.role !== \"tool\") {\n throw new Error(`Cannot convert message with role ${message.role} to ResultMessage`);\n }\n\n if (!message.toolCallId) {\n throw new Error(\"Tool message must have a toolCallId\");\n }\n\n const actionName = toolCallNames[message.toolCallId] || \"unknown\";\n\n // Handle result content - it could be a string or an object that needs serialization\n let resultContent: string;\n const messageContent = message.content || \"\";\n\n if (typeof messageContent === \"string\") {\n // Expected case: content is already a string\n resultContent = messageContent;\n } else if (typeof messageContent === \"object\" && messageContent !== null) {\n // Handle case where content is an object that needs to be serialized\n try {\n resultContent = JSON.stringify(messageContent);\n } catch (error) {\n console.warn(`Failed to stringify tool result for ${actionName}:`, error);\n resultContent = String(messageContent);\n }\n } else {\n // Handle other types (number, boolean, etc.)\n resultContent = String(messageContent);\n }\n\n return new gql.ResultMessage({\n id: message.id,\n result: resultContent,\n actionExecutionId: message.toolCallId,\n actionName: message.toolName || actionName,\n });\n}\n\n// New function to handle AGUI messages with render functions\nexport function aguiMessageWithRenderToGQL(\n message: agui.Message,\n actions?: Record<string, any>,\n coAgentStateRenders?: Record<string, any>,\n): gql.Message[] {\n // Handle the special case: assistant messages with render function but no tool calls\n if (\n message.role === \"assistant\" &&\n \"generativeUI\" in message &&\n message.generativeUI &&\n !message.toolCalls\n ) {\n const gqlMessages: gql.Message[] = [];\n gqlMessages.push(\n new gql.AgentStateMessage({\n id: message.id,\n agentName: \"unknown\",\n state: {},\n role: gql.Role.assistant,\n }),\n );\n if (coAgentStateRenders) {\n coAgentStateRenders.unknown = {\n name: \"unknown\",\n render: message.generativeUI,\n };\n }\n return gqlMessages;\n }\n\n // For all other cases, delegate to aguiToGQL\n return aguiToGQL([message], actions, coAgentStateRenders);\n}\n\nexport function aguiMessageWithImageToGQLMessage(message: agui.Message): gql.ImageMessage {\n if (!hasImageProperty(message)) {\n throw new Error(`Cannot convert message to ImageMessage: missing format or bytes`);\n }\n\n let roleValue: MessageRole;\n if (message.role === \"assistant\") {\n roleValue = gql.Role.assistant;\n } else {\n roleValue = gql.Role.user;\n }\n\n if (message.role !== \"assistant\" && message.role !== \"user\") {\n throw new Error(`Cannot convert message with role ${message.role} to ImageMessage`);\n }\n\n return new gql.ImageMessage({\n id: message.id,\n format: message.image!.format,\n bytes: message.image!.bytes,\n role: roleValue,\n });\n}\n","import { GraphQLContext } from \"../integrations\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { Message } from \"../../graphql/types/converted\";\nimport { MetaEventInput } from \"../../graphql/inputs/meta-event.input\";\n\nexport interface BaseEndpointDefinition<TActionType extends EndpointType> {\n type?: TActionType;\n}\n\nexport interface CopilotKitEndpoint extends BaseEndpointDefinition<EndpointType.CopilotKit> {\n url: string;\n onBeforeRequest?: ({ ctx }: { ctx: GraphQLContext }) => {\n headers?: Record<string, string> | undefined;\n };\n}\n\nexport interface LangGraphPlatformAgent {\n name: string;\n description: string;\n assistantId?: string;\n}\n\nexport interface LangGraphPlatformEndpoint\n extends BaseEndpointDefinition<EndpointType.LangGraphPlatform> {\n deploymentUrl: string;\n langsmithApiKey?: string | null;\n agents: LangGraphPlatformAgent[];\n}\n\nexport type RemoteActionInfoResponse = {\n actions: any[];\n agents: any[];\n};\n\nexport type RemoteAgentHandlerParams = {\n name: string;\n actionInputsWithoutAgents: ActionInput[];\n threadId?: string;\n nodeName?: string;\n additionalMessages?: Message[];\n metaEvents?: MetaEventInput[];\n};\n\nexport type EndpointDefinition = CopilotKitEndpoint | LangGraphPlatformEndpoint;\n\nexport enum EndpointType {\n CopilotKit = \"copilotKit\",\n LangGraphPlatform = \"langgraph-platform\",\n}\n","import { Action, Parameter } from \"@copilotkit/shared\";\n\n/**\n * Represents a tool provided by an MCP server.\n */\nexport interface MCPTool {\n description?: string;\n /** Schema defining parameters, mirroring the MCP structure. */\n schema?: {\n parameters?: {\n properties?: Record<string, any>;\n required?: string[];\n jsonSchema?: Record<string, any>;\n };\n };\n /** The function to call to execute the tool on the MCP server. */\n execute(params: any): Promise<any>;\n}\n\n/**\n * Defines the contract for *any* MCP client implementation the user might provide.\n */\nexport interface MCPClient {\n /** A method that returns a map of tool names to MCPTool objects available from the connected MCP server. */\n tools(): Promise<Record<string, MCPTool>>;\n /** An optional method for cleanup if the underlying client requires explicit disconnection. */\n close?(): Promise<void>;\n}\n\n/**\n * Configuration for connecting to an MCP endpoint.\n */\nexport interface MCPEndpointConfig {\n endpoint: string;\n apiKey?: string;\n}\n\n/**\n * Extracts CopilotKit-compatible parameters from an MCP tool schema.\n * @param toolOrSchema The schema object from an MCPTool or the full MCPTool object.\n * @returns An array of Parameter objects.\n */\nexport function extractParametersFromSchema(\n toolOrSchema?: MCPTool | MCPTool[\"schema\"],\n): Parameter[] {\n const parameters: Parameter[] = [];\n\n // Handle either full tool object or just schema\n const schema =\n \"schema\" in (toolOrSchema || {})\n ? (toolOrSchema as MCPTool).schema\n : (toolOrSchema as MCPTool[\"schema\"]);\n\n const toolParameters = schema?.parameters?.jsonSchema || schema?.parameters;\n const properties = toolParameters?.properties;\n const requiredParams = new Set(toolParameters?.required || []);\n\n if (!properties) {\n return parameters;\n }\n\n for (const paramName in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, paramName)) {\n const paramDef = properties[paramName];\n\n // Enhanced type extraction with support for complex types\n let type = paramDef.type || \"string\";\n let description = paramDef.description || \"\";\n\n // Handle arrays with items\n if (type === \"array\" && paramDef.items) {\n const itemType = paramDef.items.type || \"object\";\n if (itemType === \"object\" && paramDef.items.properties) {\n // For arrays of objects, describe the structure\n const itemProperties = Object.keys(paramDef.items.properties).join(\", \");\n description =\n description +\n (description ? \" \" : \"\") +\n `Array of objects with properties: ${itemProperties}`;\n } else {\n // For arrays of primitives\n type = `array<${itemType}>`;\n }\n }\n\n // Handle enums\n if (paramDef.enum && Array.isArray(paramDef.enum)) {\n const enumValues = paramDef.enum.join(\" | \");\n description = description + (description ? \" \" : \"\") + `Allowed values: ${enumValues}`;\n }\n\n // Handle objects with properties\n if (type === \"object\" && paramDef.properties) {\n const objectProperties = Object.keys(paramDef.properties).join(\", \");\n description =\n description + (description ? \" \" : \"\") + `Object with properties: ${objectProperties}`;\n }\n\n parameters.push({\n name: paramName,\n type: type,\n description: description,\n required: requiredParams.has(paramName),\n });\n }\n }\n\n return parameters;\n}\n\n/**\n * Converts a map of MCPTools into an array of CopilotKit Actions.\n * @param mcpTools A record mapping tool names to MCPTool objects.\n * @param mcpEndpoint The endpoint URL from which these tools were fetched.\n * @returns An array of Action<any> objects.\n */\nexport function convertMCPToolsToActions(\n mcpTools: Record<string, MCPTool>,\n mcpEndpoint: string,\n): Action<any>[] {\n const actions: Action<any>[] = [];\n\n for (const [toolName, tool] of Object.entries(mcpTools)) {\n const parameters = extractParametersFromSchema(tool);\n\n const handler = async (params: any): Promise<any> => {\n try {\n const result = await tool.execute(params);\n // Ensure the result is a string or stringify it, as required by many LLMs.\n // This might need adjustment depending on how different LLMs handle tool results.\n return typeof result === \"string\" ? result : JSON.stringify(result);\n } catch (error) {\n console.error(\n `Error executing MCP tool '${toolName}' from endpoint ${mcpEndpoint}:`,\n error,\n );\n // Re-throw or format the error for the LLM\n throw new Error(\n `Execution failed for MCP tool '${toolName}': ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n };\n\n actions.push({\n name: toolName,\n description: tool.description || `MCP tool: ${toolName} (from ${mcpEndpoint})`,\n parameters: parameters,\n handler: handler,\n // Add metadata for easier identification/debugging\n _isMCPTool: true,\n _mcpEndpoint: mcpEndpoint,\n } as Action<any> & { _isMCPTool: boolean; _mcpEndpoint: string }); // Type assertion for metadata\n }\n\n return actions;\n}\n\n/**\n * Generate better instructions for using MCP tools\n * This is used to enhance the system prompt with tool documentation\n */\nexport function generateMcpToolInstructions(toolsMap: Record<string, MCPTool>): string {\n if (!toolsMap || Object.keys(toolsMap).length === 0) {\n return \"\";\n }\n\n const toolEntries = Object.entries(toolsMap);\n\n // Generate documentation for each tool\n const toolsDoc = toolEntries\n .map(([name, tool]) => {\n // Extract schema information if available\n let paramsDoc = \" No parameters required\";\n\n try {\n if (tool.schema && typeof tool.schema === \"object\") {\n const schema = tool.schema as any;\n\n // Extract parameters from JSON Schema - check both schema.parameters.properties and schema.properties\n const toolParameters = schema.parameters?.jsonSchema || schema.parameters;\n const properties = toolParameters?.properties || schema.properties;\n const requiredParams = toolParameters?.required || schema.required || [];\n\n if (properties) {\n // Build parameter documentation from properties with enhanced type information\n const paramsList = Object.entries(properties).map(([paramName, propSchema]) => {\n const propDetails = propSchema as any;\n const requiredMark = requiredParams.includes(paramName) ? \"*\" : \"\";\n let typeInfo = propDetails.type || \"any\";\n let description = propDetails.description ? ` - ${propDetails.description}` : \"\";\n\n // Enhanced type display for complex schemas\n if (typeInfo === \"array\" && propDetails.items) {\n const itemType = propDetails.items.type || \"object\";\n if (itemType === \"object\" && propDetails.items.properties) {\n const itemProps = Object.keys(propDetails.items.properties).join(\", \");\n typeInfo = `array<object>`;\n description =\n description +\n (description ? \" \" : \" - \") +\n `Array of objects with properties: ${itemProps}`;\n } else {\n typeInfo = `array<${itemType}>`;\n }\n }\n\n // Handle enums\n if (propDetails.enum && Array.isArray(propDetails.enum)) {\n const enumValues = propDetails.enum.join(\" | \");\n description =\n description + (description ? \" \" : \" - \") + `Allowed values: ${enumValues}`;\n }\n\n // Handle objects\n if (typeInfo === \"object\" && propDetails.properties) {\n const objectProps = Object.keys(propDetails.properties).join(\", \");\n description =\n description +\n (description ? \" \" : \" - \") +\n `Object with properties: ${objectProps}`;\n }\n\n return ` - ${paramName}${requiredMark} (${typeInfo})${description}`;\n });\n\n if (paramsList.length > 0) {\n paramsDoc = paramsList.join(\"\\n\");\n }\n }\n }\n } catch (e) {\n console.error(`Error parsing schema for tool ${name}:`, e);\n }\n\n return `- ${name}: ${tool.description || \"\"}\n${paramsDoc}`;\n })\n .join(\"\\n\\n\");\n\n return `You have access to the following external tools provided by Model Context Protocol (MCP) servers:\n\n${toolsDoc}\n\nWhen using these tools:\n1. Only provide valid parameters according to their type requirements\n2. Required parameters are marked with *\n3. For array parameters, provide data in the correct array format\n4. For object parameters, include all required nested properties\n5. For enum parameters, use only the allowed values listed\n6. Format API calls correctly with the expected parameter structure\n7. Always check tool responses to determine your next action`;\n}\n","import { Field, ObjectType } from \"type-graphql\";\n\n@ObjectType()\nexport class Agent {\n @Field(() => String)\n id: string;\n\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n description?: string;\n}\n\n@ObjectType()\nexport class AgentsResponse {\n @Field(() => [Agent])\n agents: Agent[];\n}\n","import { ActionExecutionMessage, ResultMessage, TextMessage } from \"../../graphql/types/converted\";\n\nexport enum LangGraphEventTypes {\n OnChainStart = \"on_chain_start\",\n OnChainStream = \"on_chain_stream\",\n OnChainEnd = \"on_chain_end\",\n OnChatModelStart = \"on_chat_model_start\",\n OnChatModelStream = \"on_chat_model_stream\",\n OnChatModelEnd = \"on_chat_model_end\",\n OnToolStart = \"on_tool_start\",\n OnToolEnd = \"on_tool_end\",\n OnCopilotKitStateSync = \"on_copilotkit_state_sync\",\n OnCopilotKitEmitMessage = \"on_copilotkit_emit_message\",\n OnCopilotKitEmitToolCall = \"on_copilotkit_emit_tool_call\",\n OnCustomEvent = \"on_custom_event\",\n OnInterrupt = \"on_interrupt\",\n OnCopilotKitInterrupt = \"on_copilotkit_interrupt\",\n OnCopilotKitError = \"on_copilotkit_error\",\n}\n\nexport enum MetaEventNames {\n LangGraphInterruptEvent = \"LangGraphInterruptEvent\",\n CopilotKitLangGraphInterruptEvent = \"CopilotKitLangGraphInterruptEvent\",\n}\n\nexport enum CustomEventNames {\n CopilotKitManuallyEmitMessage = \"copilotkit_manually_emit_message\",\n CopilotKitManuallyEmitToolCall = \"copilotkit_manually_emit_tool_call\",\n CopilotKitManuallyEmitIntermediateState = \"copilotkit_manually_emit_intermediate_state\",\n CopilotKitExit = \"copilotkit_exit\",\n}\n\ntype LangGraphOnCopilotKitStateSyncEvent = {\n event: LangGraphEventTypes.OnCopilotKitStateSync;\n thread_id: string;\n agent_name: string;\n node_name: string;\n run_id: string;\n active: boolean;\n role: string;\n state: any;\n running: boolean;\n};\n\ntype LangGraphOnChainStartEvent = {\n event: LangGraphEventTypes.OnChainStart;\n run_id: string;\n name: string;\n tags: string[];\n metadata: { thread_id: string };\n data: {\n input: any;\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChainEndEvent = {\n event: LangGraphEventTypes.OnChainEnd;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n };\n data: {\n input: any;\n output: any;\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChatModelStartEvent = {\n event: LangGraphEventTypes.OnChatModelStart;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n ls_provider: string;\n ls_model_name: string;\n ls_model_type: string;\n ls_temperature: number;\n };\n data: {\n input: {\n messages: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string;\n type: string;\n id: string;\n };\n }[][];\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChatModelStreamEvent = {\n event: LangGraphEventTypes.OnChatModelStream;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n ls_provider: string;\n ls_model_name: string;\n ls_model_type: string;\n ls_temperature: number;\n };\n data: {\n chunk: {\n lc: number;\n type: string;\n id: string;\n kwargs: {\n content: string | { text: string; type: string; index: number }[];\n additional_kwargs: {\n tool_calls: {\n index: number;\n id: string;\n function: { arguments: string; name: string };\n type: string;\n }[];\n };\n type: string;\n id: string;\n tool_calls: { name: string; args: {}; id: string; type: string }[];\n tool_call_chunks: {\n name: string;\n args: string;\n id: string;\n index: number;\n type: string;\n }[];\n invalid_tool_calls: any[];\n };\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChatModelEndEvent = {\n event: LangGraphEventTypes.OnChatModelEnd;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n ls_provider: string;\n ls_model_name: string;\n ls_model_type: string;\n ls_temperature: number;\n };\n data: {\n input: any;\n output: {\n generations: {\n text: string;\n generation_info: {\n finish_reason: string;\n model_name: string;\n system_fingerprint: string;\n };\n type: string;\n message: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string;\n additional_kwargs: {\n tool_calls: {\n index: number;\n id: string;\n function: { arguments: string; name: string };\n type: string;\n }[];\n };\n response_metadata: {\n finish_reason: string;\n model_name: string;\n system_fingerprint: string;\n };\n type: string;\n id: string;\n tool_calls: { name: string; args: { query: string }; id: string; type: string }[];\n invalid_tool_calls: any[];\n };\n };\n }[][];\n llm_output: any;\n run: any;\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChainStreamEvent = {\n event: LangGraphEventTypes.OnChainStream;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step?: number;\n langgraph_node?: string;\n langgraph_triggers?: string[];\n langgraph_task_idx?: number;\n thread_ts?: string;\n };\n data: {\n chunk: {\n messages: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string;\n additional_kwargs?: {\n tool_calls?: {\n index: number;\n id: string;\n function: { arguments: string; name: string };\n type: string;\n }[];\n };\n response_metadata?: {\n finish_reason: string;\n model_name: string;\n system_fingerprint: string;\n };\n type: string;\n id: string;\n tool_calls?: { name: string; args: { query: string }; id: string; type: string }[];\n invalid_tool_calls?: any[];\n };\n }[];\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnToolStartEvent = {\n event: LangGraphEventTypes.OnToolStart;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n };\n data: {\n input: {\n query: string;\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnToolEndEvent = {\n event: LangGraphEventTypes.OnToolEnd;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n };\n data: {\n input: {\n query: string;\n };\n output: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string[];\n type: string;\n name: string;\n tool_call_id: string;\n status: string;\n };\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnCustomEvent = {\n event: LangGraphEventTypes.OnCustomEvent;\n run_id: string;\n name: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_path: [string, string];\n langgraph_checkpoint_ns: string;\n checkpoint_ns: string;\n };\n data: any;\n parent_ids: string[];\n};\n\ninterface LangGraphInterruptEvent {\n event: LangGraphEventTypes.OnInterrupt;\n value: string;\n}\n\ninterface CopilotKitLangGraphInterruptEvent {\n event: LangGraphEventTypes.OnCopilotKitInterrupt;\n data: { value: string; messages: (TextMessage | ActionExecutionMessage | ResultMessage)[] };\n}\n\ninterface CopilotKitLangGraphErrorEvent {\n event: LangGraphEventTypes.OnCopilotKitError;\n data: {\n error: {\n message: string;\n type: string;\n agent_name: string;\n status_code?: number;\n response_data?: any;\n };\n thread_id: string;\n agent_name: string;\n node_name: string;\n };\n}\n\nexport type LangGraphEvent =\n | LangGraphOnChainStartEvent\n | LangGraphOnChainStreamEvent\n | LangGraphOnChainEndEvent\n | LangGraphOnChatModelStartEvent\n | LangGraphOnChatModelStreamEvent\n | LangGraphOnChatModelEndEvent\n | LangGraphOnToolStartEvent\n | LangGraphOnToolEndEvent\n | LangGraphOnCopilotKitStateSyncEvent\n | LangGraphOnCustomEvent\n | LangGraphInterruptEvent\n | CopilotKitLangGraphInterruptEvent\n | CopilotKitLangGraphErrorEvent;\n","import createPinoLogger from \"pino\";\nimport pretty from \"pino-pretty\";\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport type CopilotRuntimeLogger = ReturnType<typeof createLogger>;\n\nexport function createLogger(options?: { level?: LogLevel; component?: string }) {\n const { level, component } = options || {};\n const stream = pretty({ colorize: true });\n\n const logger = createPinoLogger(\n {\n level: process.env.LOG_LEVEL || level || \"error\",\n redact: {\n paths: [\"pid\", \"hostname\"],\n remove: true,\n },\n },\n stream,\n );\n\n if (component) {\n return logger.child({ component });\n } else {\n return logger;\n }\n}\n","import { Arg, Resolver } from \"type-graphql\";\nimport { Ctx } from \"type-graphql\";\nimport { Query } from \"type-graphql\";\nimport { LoadAgentStateResponse } from \"../types/load-agent-state-response.type\";\nimport type { GraphQLContext } from \"../../lib/integrations\";\nimport { LoadAgentStateInput } from \"../inputs/load-agent-state.input\";\nimport { CopilotKitAgentDiscoveryError } from \"@copilotkit/shared\";\nimport { CopilotRuntime } from \"../../lib\";\n\n@Resolver(() => LoadAgentStateResponse)\nexport class StateResolver {\n @Query(() => LoadAgentStateResponse)\n async loadAgentState(@Ctx() ctx: GraphQLContext, @Arg(\"data\") data: LoadAgentStateInput) {\n const agents = [];\n const hasAgent = agents.some((agent) => agent.name === data.agentName);\n if (!hasAgent) {\n throw new CopilotKitAgentDiscoveryError({\n agentName: data.agentName,\n availableAgents: agents.map((a) => ({ name: a.name, id: a.name })),\n });\n }\n\n const state = {};\n\n return state;\n }\n}\n","import { Field, ObjectType } from \"type-graphql\";\nimport { BaseMessageOutput } from \"./copilot-response.type\";\n\n@ObjectType()\nexport class LoadAgentStateResponse {\n @Field(() => String)\n threadId: string;\n\n @Field(() => Boolean)\n threadExists: boolean;\n\n @Field(() => String)\n state: string;\n\n @Field(() => String)\n messages: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class LoadAgentStateInput {\n @Field(() => String)\n threadId: string;\n\n @Field(() => String)\n agentName: string;\n}\n","import { createCopilotEndpointSingleRoute } from \"@copilotkitnext/runtime\";\nimport { CreateCopilotRuntimeServerOptions, getCommonConfig } from \"../shared\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\nimport { handle } from \"hono/vercel\";\n\nexport function copilotRuntimeNextJSAppRouterEndpoint(options: CreateCopilotRuntimeServerOptions) {\n const commonConfig = getCommonConfig(options);\n\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"nextjs-app-router\",\n },\n });\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: options.properties._copilotkit,\n });\n }\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n\n const logger = commonConfig.logging;\n logger.debug(\"Creating NextJS App Router endpoint\");\n\n const serviceAdapter = options.serviceAdapter;\n if (serviceAdapter) {\n options.runtime.handleServiceAdapter(serviceAdapter);\n }\n\n const copilotRoute = createCopilotEndpointSingleRoute({\n runtime: options.runtime.instance,\n basePath: options.baseUrl ?? options.endpoint,\n });\n\n const handleRequest = handle(copilotRoute as any);\n return { handleRequest };\n}\n","import { CreateCopilotRuntimeServerOptions, getCommonConfig } from \"../shared\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\nimport { createCopilotEndpointSingleRoute } from \"@copilotkitnext/runtime\";\nimport { IncomingMessage, ServerResponse } from \"http\";\nimport { Readable } from \"node:stream\";\n\ntype IncomingWithBody = IncomingMessage & { body?: unknown; complete?: boolean };\n\nexport function readableStreamToNodeStream(webStream: ReadableStream): Readable {\n const reader = webStream.getReader();\n\n return new Readable({\n async read() {\n try {\n const { done, value } = await reader.read();\n if (done) {\n this.push(null);\n } else {\n this.push(Buffer.from(value));\n }\n } catch (err) {\n this.destroy(err as Error);\n }\n },\n });\n}\n\nfunction getFullUrl(req: IncomingMessage): string {\n const expressPath =\n (req as any).originalUrl ??\n ((req as any).baseUrl ? `${(req as any).baseUrl}${req.url ?? \"\"}` : undefined);\n const path = expressPath || req.url || \"/\";\n const host =\n (req.headers[\"x-forwarded-host\"] as string) || (req.headers.host as string) || \"localhost\";\n const proto =\n (req.headers[\"x-forwarded-proto\"] as string) ||\n ((req.socket as any).encrypted ? \"https\" : \"http\");\n\n return `${proto}://${host}${path}`;\n}\n\nfunction toHeaders(rawHeaders: IncomingMessage[\"headers\"]): Headers {\n const headers = new Headers();\n\n for (const [key, value] of Object.entries(rawHeaders)) {\n if (value === undefined) continue;\n\n if (Array.isArray(value)) {\n value.forEach((entry) => headers.append(key, entry));\n continue;\n }\n\n headers.append(key, value);\n }\n\n return headers;\n}\n\nfunction isStreamConsumed(req: IncomingWithBody): boolean {\n const readableState = (req as any)._readableState;\n\n return Boolean(\n req.readableEnded || req.complete || readableState?.ended || readableState?.endEmitted,\n );\n}\n\nfunction synthesizeBodyFromParsedBody(\n parsedBody: unknown,\n headers: Headers,\n): { body: BodyInit | null; contentType?: string } {\n if (parsedBody === null || parsedBody === undefined) {\n return { body: null };\n }\n\n if (parsedBody instanceof Buffer || parsedBody instanceof Uint8Array) {\n return { body: parsedBody };\n }\n\n if (typeof parsedBody === \"string\") {\n return { body: parsedBody, contentType: headers.get(\"content-type\") ?? \"text/plain\" };\n }\n\n return {\n body: JSON.stringify(parsedBody),\n contentType: \"application/json\",\n };\n}\n\nfunction isDisturbedOrLockedError(error: unknown): boolean {\n return (\n error instanceof TypeError &&\n typeof error.message === \"string\" &&\n (error.message.includes(\"disturbed\") || error.message.includes(\"locked\"))\n );\n}\n\nexport function copilotRuntimeNodeHttpEndpoint(options: CreateCopilotRuntimeServerOptions) {\n const commonConfig = getCommonConfig(options);\n\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"node-http\",\n },\n });\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: options.properties._copilotkit,\n });\n }\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n\n const logger = commonConfig.logging;\n logger.debug(\"Creating Node HTTP endpoint\");\n\n const serviceAdapter = options.serviceAdapter;\n if (serviceAdapter) {\n options.runtime.handleServiceAdapter(serviceAdapter);\n }\n\n const honoApp = createCopilotEndpointSingleRoute({\n runtime: options.runtime.instance,\n basePath: options.baseUrl ?? options.endpoint,\n });\n\n return async function handler(req: IncomingWithBody, res: ServerResponse) {\n const url = getFullUrl(req);\n const hasBody = req.method !== \"GET\" && req.method !== \"HEAD\";\n\n const baseHeaders = toHeaders(req.headers);\n const parsedBody = req.body;\n\n const streamConsumed = isStreamConsumed(req) || parsedBody !== undefined;\n const canStream = hasBody && !streamConsumed;\n\n let requestBody: BodyInit | null | undefined = undefined;\n let useDuplex = false;\n\n if (hasBody && canStream) {\n requestBody = req as unknown as BodyInit;\n useDuplex = true;\n }\n\n if (hasBody && streamConsumed) {\n if (parsedBody !== undefined) {\n const synthesized = synthesizeBodyFromParsedBody(parsedBody, baseHeaders);\n requestBody = synthesized.body ?? undefined;\n baseHeaders.delete(\"content-length\");\n\n if (synthesized.contentType) {\n baseHeaders.set(\"content-type\", synthesized.contentType);\n }\n\n logger.debug(\"Request stream already consumed; using parsed req.body to rebuild request.\");\n } else {\n logger.warn(\"Request stream consumed with no available body; sending empty payload.\");\n requestBody = undefined;\n }\n }\n\n const buildRequest = (body: BodyInit | null | undefined, headers: Headers, duplex: boolean) =>\n new Request(url, {\n method: req.method,\n headers,\n body,\n duplex: duplex ? \"half\" : undefined,\n } as RequestInit);\n\n let response: Response;\n try {\n response = await honoApp.fetch(buildRequest(requestBody, baseHeaders, useDuplex));\n } catch (error) {\n if (isDisturbedOrLockedError(error) && hasBody) {\n logger.warn(\n \"Encountered disturbed/locked request body; rebuilding request using parsed body or empty payload.\",\n );\n\n const fallbackHeaders = new Headers(baseHeaders);\n let fallbackBody: BodyInit | null | undefined;\n\n if (parsedBody !== undefined) {\n const synthesized = synthesizeBodyFromParsedBody(parsedBody, fallbackHeaders);\n fallbackBody = synthesized.body ?? undefined;\n fallbackHeaders.delete(\"content-length\");\n\n if (synthesized.contentType) {\n fallbackHeaders.set(\"content-type\", synthesized.contentType);\n }\n } else {\n fallbackBody = undefined;\n }\n\n response = await honoApp.fetch(buildRequest(fallbackBody, fallbackHeaders, false));\n } else {\n throw error;\n }\n }\n\n res.statusCode = response.status;\n response.headers.forEach((value, key) => {\n res.setHeader(key, value);\n });\n\n if (response.body) {\n readableStreamToNodeStream(response.body).pipe(res);\n } else {\n res.end();\n }\n };\n}\n","import { CreateCopilotRuntimeServerOptions, getCommonConfig } from \"../shared\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\nimport { copilotRuntimeNodeHttpEndpoint } from \"../node-http\";\n\nexport const config = {\n api: {\n bodyParser: false,\n },\n};\n\n// This import is needed to fix the type error\n// Fix is currently in TypeScript 5.5 beta, waiting for stable version\n// https://github.com/microsoft/TypeScript/issues/42873#issuecomment-2066874644\nexport type {} from \"@whatwg-node/server\";\n\nexport function copilotRuntimeNextJSPagesRouterEndpoint(\n options: CreateCopilotRuntimeServerOptions,\n) {\n const commonConfig = getCommonConfig(options);\n\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"nextjs-pages-router\",\n },\n });\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: options.properties._copilotkit,\n });\n }\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n\n const logger = commonConfig.logging;\n logger.debug(\"Creating NextJS Pages Router endpoint\");\n\n return copilotRuntimeNodeHttpEndpoint(options);\n}\n","import { CreateCopilotRuntimeServerOptions } from \"../shared\";\nimport { copilotRuntimeNodeHttpEndpoint } from \"../node-http\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport function copilotRuntimeNodeExpressEndpoint(options: CreateCopilotRuntimeServerOptions) {\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"node-express\",\n },\n });\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n return copilotRuntimeNodeHttpEndpoint(options);\n}\n","import { CreateCopilotRuntimeServerOptions } from \"../shared\";\nimport { copilotRuntimeNodeHttpEndpoint } from \"../node-http\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport function copilotRuntimeNestEndpoint(options: CreateCopilotRuntimeServerOptions) {\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"nest\",\n },\n });\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n return copilotRuntimeNodeHttpEndpoint(options);\n}\n","export * from \"../service-adapters/openai/openai-adapter\";\nexport * from \"../service-adapters/langchain/langchain-adapter\";\nexport * from \"../service-adapters/google/google-genai-adapter\";\nexport * from \"../service-adapters/openai/openai-assistant-adapter\";\nexport * from \"../service-adapters/unify/unify-adapter\";\nexport * from \"../service-adapters/groq/groq-adapter\";\nexport * from \"./integrations\";\nexport * from \"./logger\";\nexport * from \"./runtime/copilot-runtime\";\nexport * from \"./runtime/mcp-tools-utils\";\n\n// The below re-exports \"dummy\" classes and types, to get a deprecation warning redirecting the users to import these from the correct, new route\n\n/**\n * @deprecated LangGraphAgent import from @copilotkit/runtime is deprecated. Please import it from @copilotkit/runtime/langgraph instead\n */\nexport class LangGraphAgent {\n constructor() {\n throw new Error(\n \"LangGraphAgent import from @copilotkit/runtime is deprecated. Please import it from @copilotkit/runtime/langgraph instead\",\n );\n }\n}\n\n/**\n * @deprecated LangGraphHttpAgent import from @copilotkit/runtime is deprecated. Please import it from @copilotkit/runtime/langgraph instead\n */\nexport class LangGraphHttpAgent {\n constructor() {\n throw new Error(\n \"LangGraphHttpAgent import from @copilotkit/runtime is deprecated. Please import it from @copilotkit/runtime/langgraph instead\",\n );\n }\n}\n\n/**\n * @deprecated TextMessageEvents import from @copilotkit/runtime is deprecated. Please import it from @copilotkit/runtime/langgraph instead\n */\nexport type TextMessageEvents = any;\n/**\n * @deprecated ToolCallEvents import from @copilotkit/runtime is deprecated. Please import it from @copilotkit/runtime/langgraph instead\n */\nexport type ToolCallEvents = any;\n/**\n * @deprecated CustomEventNames import from @copilotkit/runtime is deprecated. Please import it from @copilotkit/runtime/langgraph instead\n */\nexport type CustomEventNames = any;\n/**\n * @deprecated PredictStateTool import from @copilotkit/runtime is deprecated. Please import it from @copilotkit/runtime/langgraph instead\n */\nexport type PredictStateTool = any;\n","import { Parameter, Action } from \"@copilotkit/shared\";\n\nexport interface RemoteChainParameters {\n name: string;\n description: string;\n chainUrl: string;\n parameters?: Parameter[];\n parameterType?: \"single\" | \"multi\";\n}\n\nexport class RemoteChain {\n name: string;\n description: string;\n chainUrl: string;\n parameters?: Parameter[];\n parameterType: \"single\" | \"multi\";\n\n constructor(options: RemoteChainParameters) {\n this.name = options.name;\n this.description = options.description;\n this.chainUrl = options.chainUrl;\n this.parameters = options.parameters;\n this.parameterType = options.parameterType || \"multi\";\n }\n\n async toAction(): Promise<Action<any>> {\n if (!this.parameters) {\n await this.inferLangServeParameters();\n }\n\n return {\n name: this.name,\n description: this.description,\n parameters: this.parameters!,\n handler: async (args: any) => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { RemoteRunnable } = require(\"langchain/runnables/remote\");\n const runnable = new RemoteRunnable({ url: this.chainUrl });\n let input: any;\n if (this.parameterType === \"single\") {\n input = args[Object.keys(args)[0]];\n } else {\n input = args;\n }\n return await runnable.invoke(input);\n },\n };\n }\n\n async inferLangServeParameters() {\n const supportedTypes = [\"string\", \"number\", \"boolean\"];\n\n let schemaUrl = this.chainUrl.replace(/\\/+$/, \"\") + \"/input_schema\";\n let schema = await fetch(schemaUrl)\n .then((res) => res.json())\n .catch(() => {\n throw new Error(\"Failed to fetch langserve schema at \" + schemaUrl);\n });\n // for now, don't use json schema, just do a simple conversion\n\n if (supportedTypes.includes(schema.type)) {\n this.parameterType = \"single\";\n this.parameters = [\n {\n name: \"input\",\n type: schema.type,\n description: \"The input to the chain\",\n },\n ];\n } else if (schema.type === \"object\") {\n this.parameterType = \"multi\";\n this.parameters = Object.keys(schema.properties).map((key) => {\n let property = schema.properties[key];\n if (!supportedTypes.includes(property.type)) {\n throw new Error(\"Unsupported schema type\");\n }\n return {\n name: key,\n type: property.type,\n description: property.description || \"\",\n required: schema.required?.includes(key) || false,\n };\n });\n } else {\n throw new Error(\"Unsupported schema type\");\n }\n }\n}\n","import { Anthropic } from \"@anthropic-ai/sdk\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { Message } from \"../../graphql/types/converted\";\n\nexport function limitMessagesToTokenCount(\n messages: any[],\n tools: any[],\n model: string,\n maxTokens?: number,\n): any[] {\n maxTokens ||= MAX_TOKENS;\n\n const result: any[] = [];\n const toolsNumTokens = countToolsTokens(model, tools);\n if (toolsNumTokens > maxTokens) {\n throw new Error(`Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`);\n }\n maxTokens -= toolsNumTokens;\n\n for (const message of messages) {\n if (message.role === \"system\") {\n const numTokens = countMessageTokens(model, message);\n maxTokens -= numTokens;\n\n if (maxTokens < 0) {\n throw new Error(\"Not enough tokens for system message.\");\n }\n }\n }\n\n let cutoff: boolean = false;\n\n const reversedMessages = [...messages].reverse();\n for (const message of reversedMessages) {\n if (message.role === \"system\") {\n result.unshift(message);\n continue;\n } else if (cutoff) {\n continue;\n }\n let numTokens = countMessageTokens(model, message);\n if (maxTokens < numTokens) {\n cutoff = true;\n continue;\n }\n result.unshift(message);\n maxTokens -= numTokens;\n }\n\n return result;\n}\n\nconst MAX_TOKENS = 128000;\n\nfunction countToolsTokens(model: string, tools: any[]): number {\n if (tools.length === 0) {\n return 0;\n }\n const json = JSON.stringify(tools);\n return countTokens(model, json);\n}\n\nfunction countMessageTokens(model: string, message: any): number {\n return countTokens(model, JSON.stringify(message.content) || \"\");\n}\n\nfunction countTokens(model: string, text: string): number {\n return text.length / 3;\n}\n\nexport function convertActionInputToAnthropicTool(action: ActionInput): Anthropic.Messages.Tool {\n return {\n name: action.name,\n description: action.description,\n input_schema: JSON.parse(action.jsonSchema),\n };\n}\n\nexport function convertMessageToAnthropicMessage(\n message: Message,\n): Anthropic.Messages.MessageParam {\n if (message.isTextMessage()) {\n if (message.role === \"system\") {\n return {\n role: \"assistant\",\n content: [\n { type: \"text\", text: \"THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: \" + message.content },\n ],\n };\n } else {\n return {\n role: message.role === \"user\" ? \"user\" : \"assistant\",\n content: [{ type: \"text\", text: message.content }],\n };\n }\n } else if (message.isImageMessage()) {\n let mediaType: \"image/jpeg\" | \"image/png\" | \"image/webp\" | \"image/gif\";\n switch (message.format) {\n case \"jpeg\":\n mediaType = \"image/jpeg\";\n break;\n case \"png\":\n mediaType = \"image/png\";\n break;\n case \"webp\":\n mediaType = \"image/webp\";\n break;\n case \"gif\":\n mediaType = \"image/gif\";\n break;\n default:\n throw new Error(`Unsupported image format: ${message.format}`);\n }\n\n return {\n role: \"user\",\n content: [\n {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: mediaType,\n data: message.bytes,\n },\n },\n ],\n };\n } else if (message.isActionExecutionMessage()) {\n return {\n role: \"assistant\",\n content: [\n {\n id: message.id,\n type: \"tool_use\",\n input: message.arguments,\n name: message.name,\n },\n ],\n };\n } else if (message.isResultMessage()) {\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n content: message.result || \"Action completed successfully\",\n tool_use_id: message.actionExecutionId,\n },\n ],\n };\n }\n}\n","/**\n * Copilot Runtime adapter for Anthropic.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, AnthropicAdapter } from \"@copilotkit/runtime\";\n * import Anthropic from \"@anthropic-ai/sdk\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const anthropic = new Anthropic({\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new AnthropicAdapter({\n * anthropic,\n * promptCaching: {\n * enabled: true,\n * debug: true\n * }\n * });\n * ```\n */\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToAnthropicTool,\n convertMessageToAnthropicMessage,\n limitMessagesToTokenCount,\n} from \"./utils\";\n\nimport { randomId, randomUUID } from \"@copilotkit/shared\";\nimport { convertServiceAdapterError } from \"../shared\";\n\nconst DEFAULT_MODEL = \"claude-3-5-sonnet-latest\";\n\nexport interface AnthropicPromptCachingConfig {\n /**\n * Whether to enable prompt caching.\n */\n enabled: boolean;\n\n /**\n * Whether to enable debug logging for cache operations.\n */\n debug?: boolean;\n}\n\nexport interface AnthropicAdapterParams {\n /**\n * An optional Anthropic instance to use. If not provided, a new instance will be\n * created.\n */\n anthropic?: Anthropic;\n\n /**\n * The model to use.\n */\n model?: string;\n\n /**\n * Configuration for prompt caching.\n * See: https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching\n */\n promptCaching?: AnthropicPromptCachingConfig;\n}\n\nexport class AnthropicAdapter implements CopilotServiceAdapter {\n public model: string = DEFAULT_MODEL;\n public provider = \"anthropic\";\n private promptCaching: AnthropicPromptCachingConfig;\n\n private _anthropic: Anthropic;\n public get anthropic(): Anthropic {\n return this._anthropic;\n }\n public get name() {\n return \"AnthropicAdapter\";\n }\n\n constructor(params?: AnthropicAdapterParams) {\n if (params?.anthropic) {\n this._anthropic = params.anthropic;\n }\n // If no instance provided, we'll lazy-load in ensureAnthropic()\n if (params?.model) {\n this.model = params.model;\n }\n this.promptCaching = params?.promptCaching || { enabled: false };\n }\n\n private ensureAnthropic(): Anthropic {\n if (!this._anthropic) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const Anthropic = require(\"@anthropic-ai/sdk\").default;\n this._anthropic = new Anthropic({});\n }\n return this._anthropic;\n }\n\n /**\n * Adds cache control to system prompt\n */\n private addSystemPromptCaching(\n system: string,\n debug: boolean = false,\n ): string | Array<{ type: \"text\"; text: string; cache_control?: { type: \"ephemeral\" } }> {\n if (!this.promptCaching.enabled || !system) {\n return system;\n }\n\n const originalTextLength = system.length;\n\n if (debug) {\n console.log(\n `[ANTHROPIC CACHE DEBUG] Added cache control to system prompt (${originalTextLength} chars).`,\n );\n }\n\n return [\n {\n type: \"text\",\n text: system,\n cache_control: { type: \"ephemeral\" },\n },\n ];\n }\n\n /**\n * Adds cache control to the final message\n */\n private addIncrementalMessageCaching(\n messages: Anthropic.Messages.MessageParam[],\n debug: boolean = false,\n ): any[] {\n if (!this.promptCaching.enabled || messages.length === 0) {\n return messages;\n }\n\n const finalMessage = messages[messages.length - 1];\n const messageNumber = messages.length;\n\n if (Array.isArray(finalMessage.content) && finalMessage.content.length > 0) {\n const finalBlock = finalMessage.content[finalMessage.content.length - 1];\n\n const updatedMessages = [\n ...messages.slice(0, -1),\n {\n ...finalMessage,\n content: [\n ...finalMessage.content.slice(0, -1),\n { ...finalBlock, cache_control: { type: \"ephemeral\" } } as any,\n ],\n },\n ];\n\n if (debug) {\n console.log(\n `[ANTHROPIC CACHE DEBUG] Added cache control to final message (message ${messageNumber}).`,\n );\n }\n\n return updatedMessages;\n }\n\n return messages;\n }\n\n private shouldGenerateFallbackResponse(messages: Anthropic.Messages.MessageParam[]): boolean {\n if (messages.length === 0) return false;\n\n const lastMessage = messages[messages.length - 1];\n\n // Check if the last message is a tool result\n const endsWithToolResult =\n lastMessage.role === \"user\" &&\n Array.isArray(lastMessage.content) &&\n lastMessage.content.some((content: any) => content.type === \"tool_result\");\n\n // Also check if we have a recent pattern of user message -> assistant tool use -> user tool result\n // This indicates a completed action that might not need a response\n if (messages.length >= 3 && endsWithToolResult) {\n const lastThree = messages.slice(-3);\n const hasRecentToolPattern =\n lastThree[0]?.role === \"user\" && // Initial user message\n lastThree[1]?.role === \"assistant\" && // Assistant tool use\n Array.isArray(lastThree[1].content) &&\n lastThree[1].content.some((content: any) => content.type === \"tool_use\") &&\n lastThree[2]?.role === \"user\" && // Tool result\n Array.isArray(lastThree[2].content) &&\n lastThree[2].content.some((content: any) => content.type === \"tool_result\");\n\n return hasRecentToolPattern;\n }\n\n return endsWithToolResult;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId,\n model = this.model,\n messages: rawMessages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToAnthropicTool);\n\n const messages = [...rawMessages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage() ? instructionsMessage.content : \"\";\n\n // ALLOWLIST APPROACH:\n // 1. First, identify all valid tool_use calls (from assistant)\n // 2. Then, only keep tool_result blocks that correspond to these valid tool_use IDs\n // 3. Discard any other tool_result blocks\n\n // Step 1: Extract valid tool_use IDs\n const validToolUseIds = new Set<string>();\n\n for (const message of messages) {\n if (message.isActionExecutionMessage()) {\n validToolUseIds.add(message.id);\n }\n }\n\n // Step 2: Map each message to an Anthropic message, eliminating invalid tool_results\n const processedToolResultIds = new Set<string>();\n const anthropicMessages = messages\n .map((message) => {\n // For tool results, only include if they match a valid tool_use ID AND haven't been processed\n if (message.isResultMessage()) {\n // Skip if there's no corresponding tool_use\n if (!validToolUseIds.has(message.actionExecutionId)) {\n return null; // Will be filtered out later\n }\n\n // Skip if we've already processed a result for this tool_use ID\n if (processedToolResultIds.has(message.actionExecutionId)) {\n return null; // Will be filtered out later\n }\n\n // Mark this tool result as processed\n processedToolResultIds.add(message.actionExecutionId);\n\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n content: message.result || \"Action completed successfully\",\n tool_use_id: message.actionExecutionId,\n },\n ],\n };\n }\n\n // For non-tool-result messages, convert normally\n return convertMessageToAnthropicMessage(message);\n })\n .filter(Boolean) // Remove nulls\n .filter((msg) => {\n // Filter out assistant messages with empty text content\n if (msg.role === \"assistant\" && Array.isArray(msg.content)) {\n const hasEmptyTextOnly =\n msg.content.length === 1 &&\n msg.content[0].type === \"text\" &&\n (!(msg.content[0] as any).text || (msg.content[0] as any).text.trim() === \"\");\n\n // Keep messages that have tool_use or non-empty text\n return !hasEmptyTextOnly;\n }\n return true;\n }) as Anthropic.Messages.MessageParam[];\n\n // Apply token limits\n const limitedMessages = limitMessagesToTokenCount(anthropicMessages, tools, model);\n\n // Apply prompt caching if enabled\n const cachedSystemPrompt = this.addSystemPromptCaching(instructions, this.promptCaching.debug);\n const cachedMessages = this.addIncrementalMessageCaching(\n limitedMessages,\n this.promptCaching.debug,\n );\n\n // We'll check if we need a fallback response after seeing what Anthropic returns\n // We skip grouping by role since we've already ensured uniqueness of tool_results\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"tool\",\n name: forwardedParameters.toolChoiceFunctionName,\n };\n }\n\n try {\n const createParams = {\n system: cachedSystemPrompt,\n model: this.model,\n messages: cachedMessages,\n max_tokens: forwardedParameters?.maxTokens || 1024,\n ...(forwardedParameters?.temperature\n ? { temperature: forwardedParameters.temperature }\n : {}),\n ...(tools.length > 0 && { tools }),\n ...(toolChoice && { tool_choice: toolChoice }),\n stream: true,\n };\n\n const anthropic = this.ensureAnthropic();\n const stream = await anthropic.messages.create(createParams);\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let didOutputText = false;\n let currentMessageId = randomId();\n let currentToolCallId = randomId();\n let filterThinkingTextBuffer = new FilterThinkingTextBuffer();\n let hasReceivedContent = false;\n\n try {\n for await (const chunk of stream as AsyncIterable<any>) {\n if (chunk.type === \"message_start\") {\n currentMessageId = chunk.message.id;\n } else if (chunk.type === \"content_block_start\") {\n hasReceivedContent = true;\n if (chunk.content_block.type === \"text\") {\n didOutputText = false;\n filterThinkingTextBuffer.reset();\n mode = \"message\";\n } else if (chunk.content_block.type === \"tool_use\") {\n currentToolCallId = chunk.content_block.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n actionName: chunk.content_block.name,\n parentMessageId: currentMessageId,\n });\n mode = \"function\";\n }\n } else if (chunk.type === \"content_block_delta\") {\n if (chunk.delta.type === \"text_delta\") {\n const text = filterThinkingTextBuffer.onTextChunk(chunk.delta.text);\n if (text.length > 0) {\n if (!didOutputText) {\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n didOutputText = true;\n }\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: text,\n });\n }\n } else if (chunk.delta.type === \"input_json_delta\") {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: chunk.delta.partial_json,\n });\n }\n } else if (chunk.type === \"content_block_stop\") {\n if (mode === \"message\") {\n if (didOutputText) {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n }\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n }\n }\n } catch (error) {\n throw convertServiceAdapterError(error, \"Anthropic\");\n }\n\n // Generate fallback response only if Anthropic produced no content\n if (!hasReceivedContent && this.shouldGenerateFallbackResponse(cachedMessages)) {\n // Extract the tool result content for a more contextual response\n let fallbackContent = \"Task completed successfully.\";\n const lastMessage = cachedMessages[cachedMessages.length - 1];\n if (lastMessage?.role === \"user\" && Array.isArray(lastMessage.content)) {\n const toolResult = lastMessage.content.find((c: any) => c.type === \"tool_result\");\n if (toolResult?.content && toolResult.content !== \"Action completed successfully\") {\n fallbackContent = toolResult.content;\n }\n }\n\n currentMessageId = randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: fallbackContent,\n });\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n }\n\n eventStream$.complete();\n });\n } catch (error) {\n throw convertServiceAdapterError(error, \"Anthropic\");\n }\n\n return {\n threadId: threadId || randomUUID(),\n };\n }\n}\n\nconst THINKING_TAG = \"<thinking>\";\nconst THINKING_TAG_END = \"</thinking>\";\n\nclass FilterThinkingTextBuffer {\n private buffer: string;\n private didFilterThinkingTag: boolean = false;\n\n constructor() {\n this.buffer = \"\";\n }\n\n onTextChunk(text: string): string {\n this.buffer += text;\n if (this.didFilterThinkingTag) {\n return text;\n }\n const potentialTag = this.buffer.slice(0, THINKING_TAG.length);\n if (THINKING_TAG.startsWith(potentialTag)) {\n if (this.buffer.includes(THINKING_TAG_END)) {\n const end = this.buffer.indexOf(THINKING_TAG_END);\n const filteredText = this.buffer.slice(end + THINKING_TAG_END.length);\n this.buffer = filteredText;\n this.didFilterThinkingTag = true;\n return filteredText;\n } else {\n return \"\";\n }\n }\n return text;\n }\n\n reset() {\n this.buffer = \"\";\n this.didFilterThinkingTag = false;\n }\n}\n","/**\n * CopilotKit Adapter for Ollama\n *\n * <RequestExample>\n * ```jsx CopilotRuntime Example\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(req, new OllamaAdapter());\n * ```\n * </RequestExample>\n *\n * You can easily set the model to use by passing it to the constructor.\n * ```jsx\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(\n * req,\n * new OllamaAdapter({ model: \"llama3-70b-8192\" }),\n * );\n * ```\n */\nimport { TextMessage } from \"../../../graphql/types/converted\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../../service-adapter\";\nimport { randomId, randomUUID } from \"@copilotkit/shared\";\n\nconst DEFAULT_MODEL = \"llama3:latest\";\n\ninterface OllamaAdapterOptions {\n model?: string;\n}\n\nexport class ExperimentalOllamaAdapter implements CopilotServiceAdapter {\n public model: string;\n public provider = \"ollama\";\n public get name() {\n return \"OllamaAdapter\";\n }\n\n constructor(options?: OllamaAdapterOptions) {\n if (options?.model) {\n this.model = options.model;\n } else {\n this.model = DEFAULT_MODEL;\n }\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource } = request;\n // const messages = this.transformMessages(forwardedProps.messages);\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { Ollama } = require(\"@langchain/community/llms/ollama\");\n const ollama = new Ollama({\n model: this.model,\n });\n const contents = (messages.filter((m) => m.isTextMessage()) as TextMessage[]).map(\n (m) => m.content,\n );\n const _stream = await ollama.stream(contents); // [TODO] role info is dropped...\n\n eventSource.stream(async (eventStream$) => {\n const currentMessageId = randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n for await (const chunkText of _stream) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: chunkText,\n });\n }\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n // we may need to add this later.. [nc]\n // let calls = (await result.response).functionCalls();\n\n eventStream$.complete();\n });\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n","/**\n * Copilot Runtime adapter for AWS Bedrock.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, BedrockAdapter } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new BedrockAdapter({\n * model: \"amazon.nova-lite-v1:0\",\n * region: \"us-east-1\",\n * credentials: {\n * accessKeyId: process.env.AWS_ACCESS_KEY_ID,\n * secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY\n * }\n * });\n * ```\n */\n\nimport { LangChainAdapter } from \"../langchain/langchain-adapter\";\n\nexport interface BedrockAdapterParams {\n /**\n * AWS Bedrock model ID to use.\n * @default \"amazon.nova-lite-v1:0\"\n */\n model?: string;\n\n /**\n * AWS region where Bedrock is available.\n * @default \"us-east-1\"\n */\n region?: string;\n\n /**\n * AWS credentials for Bedrock access.\n */\n credentials?: {\n accessKeyId?: string;\n secretAccessKey?: string;\n };\n}\n\nconst DEFAULT_MODEL = \"amazon.nova-lite-v1:0\";\n\nexport class BedrockAdapter extends LangChainAdapter {\n public provider = \"bedrock\";\n public model: string = DEFAULT_MODEL;\n constructor(options?: BedrockAdapterParams) {\n super({\n chainFn: async ({ messages, tools, threadId }) => {\n // Lazy require for optional peer dependency\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { ChatBedrockConverse } = require(\"@langchain/aws\");\n\n this.model = options?.model ?? \"amazon.nova-lite-v1:0\";\n const model = new ChatBedrockConverse({\n model: this.model,\n region: options?.region ?? \"us-east-1\",\n credentials: options?.credentials\n ? {\n accessKeyId: options.credentials.accessKeyId,\n secretAccessKey: options.credentials.secretAccessKey,\n }\n : undefined,\n }).bindTools(tools);\n return model.stream(messages);\n },\n });\n }\n}\n","/**\n * CopilotKit Empty Adapter\n *\n * This adapter is meant to preserve adherence to runtime requirements, while doing nothing\n * Ideal if you don't want to connect an LLM the to the runtime, and only use your LangGraph agent.\n * Be aware that Copilot Suggestions will not work if you use this adapter\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, EmptyAdapter } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new EmptyAdapter();\n * ```\n */\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport { randomUUID } from \"@copilotkit/shared\";\n\nexport class EmptyAdapter implements CopilotServiceAdapter {\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n public get name() {\n return \"EmptyAdapter\";\n }\n}\n\nexport const ExperimentalEmptyAdapter = EmptyAdapter;\n"]}
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/index.ts","../src/service-adapters/openai/utils.ts","../src/service-adapters/openai/openai-adapter.ts","../src/service-adapters/shared/error-utils.ts","../src/service-adapters/langchain/utils.ts","../src/service-adapters/langchain/langchain-adapter.ts","../src/service-adapters/google/google-genai-adapter.ts","../src/service-adapters/openai/openai-assistant-adapter.ts","../src/service-adapters/unify/unify-adapter.ts","../src/service-adapters/groq/groq-adapter.ts","../src/lib/integrations/shared.ts","../src/graphql/resolvers/copilot.resolver.ts","../src/graphql/inputs/generate-copilot-response.input.ts","../src/graphql/inputs/message.input.ts","../src/graphql/types/enums.ts","../src/graphql/types/base/index.ts","../src/graphql/inputs/frontend.input.ts","../src/graphql/inputs/action.input.ts","../src/graphql/inputs/cloud.input.ts","../src/graphql/inputs/cloud-guardrails.input.ts","../src/graphql/inputs/forwarded-parameters.input.ts","../src/graphql/inputs/agent-session.input.ts","../src/graphql/inputs/agent-state.input.ts","../src/graphql/inputs/extensions.input.ts","../src/graphql/inputs/meta-event.input.ts","../src/graphql/types/meta-events.type.ts","../src/graphql/types/copilot-response.type.ts","../src/graphql/types/message-status.type.ts","../src/graphql/types/response-status.type.ts","../src/graphql/types/extensions-response.type.ts","../src/graphql/inputs/copilot-context.input.ts","../src/service-adapters/events.ts","../src/graphql/types/converted/index.ts","../src/utils/failed-response-status-reasons.ts","../src/lib/telemetry-client.ts","../src/lib/runtime/copilot-runtime.ts","../src/graphql/message-conversion/agui-to-gql.ts","../src/lib/runtime/telemetry-agent-runner.ts","../src/lib/runtime/types.ts","../src/lib/runtime/mcp-tools-utils.ts","../src/graphql/types/agents-response.type.ts","../src/agents/langgraph/events.ts","../src/lib/logger.ts","../src/graphql/resolvers/state.resolver.ts","../src/graphql/types/load-agent-state-response.type.ts","../src/graphql/inputs/load-agent-state.input.ts","../src/lib/integrations/nextjs/app-router.ts","../src/lib/integrations/node-http/index.ts","../src/lib/integrations/nextjs/pages-router.ts","../src/lib/integrations/node-express/index.ts","../src/lib/integrations/nest/index.ts","../src/lib/index.ts","../src/service-adapters/langchain/langserve.ts","../src/service-adapters/anthropic/utils.ts","../src/service-adapters/anthropic/anthropic-adapter.ts","../src/service-adapters/experimental/ollama/ollama-adapter.ts","../src/service-adapters/bedrock/bedrock-adapter.ts","../src/service-adapters/empty/empty-adapter.ts"],"names":["parseJson","limitMessagesToTokenCount","messages","tools","model","maxTokens","maxTokensForOpenAIModel","result","toolsNumTokens","countToolsTokens","Error","message","includes","role","numTokens","countMessageTokens","cutoff","reversedMessages","reverse","unshift","maxTokensByModel","DEFAULT_MAX_TOKENS","o1","length","json","JSON","stringify","countTokens","content","text","convertActionInputToOpenAITool","action","type","function","name","description","parameters","jsonSchema","convertMessageToOpenAIMessage","options","keepSystemRole","isTextMessage","isImageMessage","image_url","url","format","bytes","isActionExecutionMessage","tool_calls","id","arguments","isResultMessage","tool_call_id","actionExecutionId","convertSystemMessageToAssistantAPI","randomUUID","CopilotKitLowLevelError","CopilotKitErrorCode","convertServiceAdapterError","error","adapterName","errorName","constructor","errorMessage","String","statusCode","status","response","responseData","data","structuredError","originalErrorType","newCode","AUTHENTICATION_ERROR","CONFIGURATION_ERROR","NETWORK_ERROR","code","extensions","DEFAULT_MODEL","OpenAIAdapter","provider","disableParallelToolCalls","_openai","openai","params","ensureOpenAI","OpenAI","require","default","process","request","threadId","threadIdFromRequest","actions","eventSource","forwardedParameters","map","validToolUseIds","Set","add","filteredMessages","filter","has","delete","openaiMessages","m","toolChoice","toolChoiceFunctionName","stream","beta","chat","completions","max_completion_tokens","stop","tool_choice","parallel_tool_calls","temperature","eventStream$","mode","currentMessageId","currentToolCallId","chunk","choices","toolCall","delta","sendTextMessageEnd","messageId","undefined","sendActionExecutionEnd","sendActionExecutionStart","parentMessageId","actionName","sendTextMessageStart","sendTextMessageContent","sendActionExecutionArgs","args","console","complete","AIMessage","HumanMessage","SystemMessage","ToolMessage","DynamicStructuredTool","randomId","convertJsonSchemaToZodSchema","convertMessageToLangChainMessage","convertActionInputToLangChainTool","actionInput","schema","parse","func","isAIMessage","Object","prototype","toString","call","isAIMessageChunk","isBaseMessageChunk","maybeSendActionExecutionResultIsMessage","actionExecution","sendActionExecutionResult","streamLangChainResponse","returnDirect","sendTextMessage","sendActionExecution","lc_kwargs","reader","getReader","toolCallDetails","index","prevIndex","done","value","read","toolCallName","toolCallId","toolCallArgs","hasToolCall","Array","isArray","tool_call_chunks","additional_kwargs","encodeResult","LangChainAdapter","runId","chainFn","awaitAllCallbacks","GoogleGenerativeAIAdapter","ChatGoogle","aiMsg","trim","apiKey","env","GOOGLE_API_KEY","modelName","apiVersion","bindTools","metadata","conversation_id","OpenAIAssistantAdapter","codeInterpreterEnabled","assistantId","fileSearchEnabled","openaiAssistantAPI","threads","create","lastMessage","at","nextRunId","submitToolOutputs","submitUserMessage","run","runs","retrieve","required_action","toolCallsIds","submit_tool_outputs","resultMessages","toolOutputs","output","submitToolOutputsStream","tool_outputs","streamResponse","instructionsMessage","shift","instructions","userMessage","openaiTools","assistant_id","getRunIdFromStream","inFunctionCall","event","step_details","Promise","resolve","reject","runIdGetter","off","on","UnifyAdapter","start","baseURL","GroqAdapter","_groq","groq","ensureGroq","Groq","max_tokens","buildSchemaSync","Arg","Ctx","Mutation","Query","Resolver","ReplaySubject","Subject","finalize","firstValueFrom","shareReplay","skipWhile","take","takeWhile","tap","Field","InputType","registerEnumType","MessageRole","CopilotRequestType","ActionInputAvailability","BaseMessageInput","createdAt","Date","MessageInput","textMessage","actionExecutionMessage","resultMessage","agentStateMessage","imageMessage","TextMessageInput","nullable","ActionExecutionMessageInput","ResultMessageInput","AgentStateMessageInput","ImageMessageInput","scope","deprecationReason","agentName","state","running","nodeName","active","Boolean","ActionInput","available","FrontendInput","toDeprecate_fullContext","GuardrailsRuleInput","allowList","denyList","GuardrailsInput","inputValidationRules","CloudInput","guardrails","ForwardedParametersInput","Number","AgentSessionInput","AgentStateInput","config","ExtensionsInput","OpenAIApiAssistantAPIInput","InterfaceType","ObjectType","createUnionType","MessageStatusCode","BaseMessageStatus","PendingMessageStatus","SuccessMessageStatus","FailedMessageStatus","reason","MessageStatusUnion","types","GraphQLJSON","ResponseStatusCode","BaseResponseStatus","resolveType","SuccessResponseStatus","FailedResponseStatus","PendingResponseStatus","implements","FailedResponseStatusReason","details","ResponseStatusUnion","ExtensionsResponse","OpenAIApiAssistantAPIResponse","BaseMessageOutput","hasOwnProperty","TextMessageOutput","ActionExecutionMessageOutput","ResultMessageOutput","AgentStateMessageOutput","ImageMessageOutput","CopilotResponse","metaEvents","BaseMetaEvent","MetaEventName","LangGraphInterruptEvent","CopilotKitLangGraphInterruptEvent","CopilotKitLangGraphInterruptEventData","MetaEventInput","CopilotContextInput","GenerateCopilotResponseMetadataInput","requestType","GenerateCopilotResponseInput","frontend","cloud","agentSession","agentState","agentStates","context","Repeater","CopilotKitError","Severity","Message","props","Success","assign","isAgentStateMessage","Role","TextMessage","ActionExecutionMessage","ResultMessage","errorObj","decodeResult","parsed","e","hasError","getError","AgentStateMessage","ImageMessage","RuntimeEventTypes","RuntimeMetaEventName","GraphQLJSONObject","plainToInstance","GraphQLError","GuardrailsValidationFailureResponse","GUARDRAILS_VALIDATION_FAILED","guardrailsReason","MessageStreamInterruptedResponse","MESSAGE_STREAM_INTERRUPTED","UnknownErrorResponse","UNKNOWN_ERROR","originalError","TelemetryClient","createHash","CopilotKitMisuseError","readBody","getZodParameters","isTelemetryDisabled","extractAgentName","hasImageProperty","canContainImage","image","isMalformed","normalizeMessageContent","part","filename","mimeType","join","warn","aguiToGQL","coAgentStateRenders","gqlMessages","toolCallNames","push","assistant","generativeUI","render","aguiMessageWithImageToGQLMessage","toolCalls","aguiTextMessageToGQLMessage","actionExecMsg","aguiToolCallToGQLActionExecution","specificAction","values","find","wildcardAction","aguiToolMessageToGQLResultMessage","roleValue","developer","system","user","argumentsObj","resultContent","messageContent","toolName","CopilotRuntime","CopilotRuntimeVNext","InMemoryAgentRunner","catchError","TelemetryAgentRunner","_runner","hashedLgcKey","runner","langsmithApiKey","update","digest","streamInfo","streamErrored","telemetry","capture","pipe","rawEvent","langgraph_host","langGraphHost","langgraph_version","langGraphVersion","connect","isRunning","EndpointType","extractParametersFromSchema","toolOrSchema","toolParameters","properties","requiredParams","required","paramName","paramDef","items","itemType","itemProperties","keys","enum","enumValues","objectProperties","convertMCPToolsToActions","mcpTools","mcpEndpoint","tool","entries","handler","execute","_isMCPTool","_mcpEndpoint","generateMcpToolInstructions","toolsMap","toolEntries","toolsDoc","paramsDoc","paramsList","propSchema","propDetails","requiredMark","typeInfo","itemProps","objectProps","BasicAgent","observability","mcpToolsCache","Map","runtimeArgs","_instance","agents","endpointAgents","assignEndpointsToAgents","remoteEndpoints","baseRunner","beforeRequestMiddleware","createOnBeforeRequestHandler","bind","afterRequestMiddleware","createOnAfterRequestHandler","observability_c","instance","endpoints","some","endpoint","resolveEndpointType","LangGraphPlatform","handleServiceAdapter","serviceAdapter","then","agentsList","isAgentsListEmpty","hasServiceAdapter","illegalServiceAdapterNames","serviceAdapterCanBeUsedForAgent","getToolsFromMCP","assignToolsToAgents","getToolsFromActions","actionsArray","zodSchema","enrichedAgents","agentId","agent","existingConfig","Reflect","get","existingTools","updatedConfig","set","hookParams","publicApiKey","headers","body","forwardedProps","cloudBaseUrl","COPILOT_CLOUD_BASE_URL","middleware","onBeforeRequest","runtime","path","reduce","acc","msg","inputMessages","outputMessages","onAfterRequest","logObservabilityBeforeRequest","requestData","hooks","handleRequest","logObservabilityAfterRequest","outputMessagesPromise","baseData","streamedChunks","requestStartTime","progressive","latency","now","timestamp","isFinalResponse","handleResponse","logError","catch","runtimeMcpServers","mcpServers","createMCPClient","requestMcpServers","mcpEndpoints","hasAnyServers","effectiveEndpoints","byUrl","ep","from","allTools","endpointUrl","cached","client","toolDefs","dedupedByName","copilotKitEndpoint","CopilotKit","langGraphPlatformEndpoint","packageJson","telemetryClient","packageName","packageVersion","version","getRuntimeInstanceTelemetryInfo","endpointsInfo","info","endpointType","endpointTypes","agentsAmount","hashedKey","apiKeyProvided","actionsAmount","endpointsAmount","baseUrl","Agent","AgentsResponse","LangGraphEventTypes","MetaEventNames","CustomEventNames","invokeGuardrails","copilotCloudPublicApiKey","onResult","onError","restOfMessages","slice","input","validTopics","invalidTopics","guardrailsResult","fetch","method","ok","resultJson","CopilotResolver","hello","availableAgents","ctx","logger","child","component","debug","agentsWithEndpoints","agentWithoutEndpoint","generateCopilotResponse","_copilotkit","copilotRuntime","copilotCloudBaseUrl","publicApiKeyFromHeaders","responseStatus$","interruptStreaming$","guardrailsResult$","resolveOutputMessagesPromise","rejectOutputMessagesPromise","runtimeResponse","serverSideActions","actionInputsWithoutAgents","eventStream","processRuntimeEvents","serverSideAction","eventStreamSubscription","subscribe","next","MetaEvent","OnInterrupt","err","visibility","unsubscribe","pushMessage","stopStreamingMessages","TextMessageStart","textMessageContentStream","TextMessageEnd","TextMessageContent","streamingTextStatus","pushTextChunk","stopStreamingText","textChunks","textSubscription","ActionExecutionStart","actionExecutionArgumentStream","ActionExecutionEnd","ActionExecutionArgs","streamingArgumentsStatus","pushArgumentsChunk","stopStreamingArguments","argumentChunks","actionExecutionArgumentSubscription","ActionExecutionResult","severity","useDeferStream","createPinoLogger","pretty","createLogger","level","colorize","LOG_LEVEL","redact","paths","remove","LoadAgentStateResponse","threadExists","LoadAgentStateInput","CopilotKitAgentDiscoveryError","StateResolver","loadAgentState","hasAgent","a","addCustomHeaderPlugin","onResponse","createContext","initialContext","copilotKitContext","contextLogger","buildSchema","resolvers","emitSchemaFile","getCommonConfig","logLevel","setCloudConfiguration","setGlobalProperties","userErrorCodes","AGENT_NOT_FOUND","API_NOT_FOUND","REMOTE_ENDPOINT_NOT_FOUND","MISSING_PUBLIC_API_KEY_ERROR","logging","plugins","maskedErrors","maskError","isDev","errorCode","createCopilotEndpointSingleRoute","handle","copilotRuntimeNextJSAppRouterEndpoint","commonConfig","framework","copilotRoute","basePath","Readable","readableStreamToNodeStream","webStream","Buffer","destroy","getFullUrl","req","expressPath","originalUrl","host","proto","socket","encrypted","toHeaders","rawHeaders","Headers","key","forEach","entry","append","isStreamConsumed","readableState","_readableState","readableEnded","ended","endEmitted","synthesizeBodyFromParsedBody","parsedBody","Uint8Array","contentType","isDisturbedOrLockedError","TypeError","copilotRuntimeNodeHttpEndpoint","honoApp","res","hasBody","baseHeaders","streamConsumed","canStream","requestBody","useDuplex","synthesized","buildRequest","duplex","Request","fallbackHeaders","fallbackBody","setHeader","end","api","bodyParser","copilotRuntimeNextJSPagesRouterEndpoint","copilotRuntimeNodeExpressEndpoint","copilotRuntimeNestEndpoint","LangGraphAgent","LangGraphHttpAgent","RemoteChain","chainUrl","parameterType","toAction","inferLangServeParameters","RemoteRunnable","runnable","invoke","supportedTypes","schemaUrl","replace","property","MAX_TOKENS","convertActionInputToAnthropicTool","input_schema","convertMessageToAnthropicMessage","mediaType","source","media_type","tool_use_id","AnthropicAdapter","promptCaching","_anthropic","anthropic","enabled","ensureAnthropic","Anthropic","addSystemPromptCaching","originalTextLength","log","cache_control","addIncrementalMessageCaching","finalMessage","messageNumber","finalBlock","updatedMessages","shouldGenerateFallbackResponse","endsWithToolResult","lastThree","hasRecentToolPattern","rawMessages","processedToolResultIds","anthropicMessages","hasEmptyTextOnly","limitedMessages","cachedSystemPrompt","cachedMessages","createParams","didOutputText","filterThinkingTextBuffer","FilterThinkingTextBuffer","hasReceivedContent","content_block","reset","onTextChunk","partial_json","fallbackContent","toolResult","c","THINKING_TAG","THINKING_TAG_END","buffer","didFilterThinkingTag","potentialTag","startsWith","indexOf","filteredText","ExperimentalOllamaAdapter","Ollama","ollama","contents","_stream","chunkText","BedrockAdapter","ChatBedrockConverse","region","credentials","accessKeyId","secretAccessKey","EmptyAdapter","ExperimentalEmptyAdapter"],"mappings":"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","sourcesContent":["{\n \"name\": \"@copilotkit/runtime\",\n \"private\": false,\n \"homepage\": \"https://github.com/CopilotKit/CopilotKit\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/CopilotKit/CopilotKit.git\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"version\": \"1.50.0\",\n \"sideEffects\": false,\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\"\n },\n \"./v2\": {\n \"import\": \"./dist/v2/index.mjs\",\n \"require\": \"./dist/v2/index.js\",\n \"types\": \"./dist/v2/index.d.ts\"\n },\n \"./langgraph\": {\n \"import\": \"./dist/langgraph.mjs\",\n \"require\": \"./dist/langgraph.js\",\n \"types\": \"./dist/langgraph.d.ts\"\n }\n },\n \"types\": \"./dist/index.d.ts\",\n \"license\": \"MIT\",\n \"scripts\": {\n \"build\": \"tsup --onSuccess \\\"pnpm run generate-graphql-schema\\\"\",\n \"dev\": \"tsup --watch --onSuccess \\\"pnpm run generate-graphql-schema\\\"\",\n \"test\": \"jest --passWithNoTests\",\n \"check-types\": \"tsc --noEmit\",\n \"clean\": \"rm -rf .turbo && rm -rf node_modules && rm -rf dist && rm -rf .next && rm -rf __snapshots__\",\n \"generate-graphql-schema\": \"rm -rf __snapshots__ && ts-node ./scripts/generate-gql-schema.ts\",\n \"link:global\": \"pnpm link --global\",\n \"unlink:global\": \"pnpm unlink --global\"\n },\n \"devDependencies\": {\n \"@jest/globals\": \"^29.7.0\",\n \"@swc/core\": \"1.5.28\",\n \"@types/jest\": \"^29.5.12\",\n \"@types/node\": \"^18.11.17\",\n \"@whatwg-node/server\": \"^0.9.34\",\n \"eslint\": \"^8.56.0\",\n \"eslint-config-custom\": \"workspace:*\",\n \"jest\": \"^29.6.4\",\n \"nodemon\": \"^3.1.3\",\n \"ts-jest\": \"^29.1.1\",\n \"ts-node\": \"^10.9.2\",\n \"tsconfig\": \"workspace:*\",\n \"tsup\": \"^6.7.0\",\n \"typescript\": \"^5.2.3\",\n \"vitest\": \"^3.2.4\"\n },\n \"dependencies\": {\n \"@ag-ui/client\": \"^0.0.42\",\n \"@ag-ui/core\": \"^0.0.42\",\n \"@ag-ui/langgraph\": \"^0.0.20\",\n \"@copilotkit/shared\": \"workspace:*\",\n \"@copilotkitnext/agent\": \"0.0.31\",\n \"@copilotkitnext/runtime\": \"0.0.31\",\n \"@graphql-yoga/plugin-defer-stream\": \"^3.3.1\",\n \"@hono/node-server\": \"^1.13.5\",\n \"@scarf/scarf\": \"^1.3.0\",\n \"class-transformer\": \"^0.5.1\",\n \"class-validator\": \"^0.14.1\",\n \"graphql\": \"^16.8.1\",\n \"graphql-scalars\": \"^1.23.0\",\n \"graphql-yoga\": \"^5.3.1\",\n \"hono\": \"^4.10.3\",\n \"openai\": \"^4.85.1\",\n \"partial-json\": \"^0.1.7\",\n \"pino\": \"^9.2.0\",\n \"pino-pretty\": \"^11.2.1\",\n \"reflect-metadata\": \"^0.2.2\",\n \"rxjs\": \"7.8.1\",\n \"type-graphql\": \"2.0.0-rc.1\",\n \"zod\": \"^3.23.3\"\n },\n \"peerDependencies\": {\n \"@anthropic-ai/sdk\": \"^0.57.0\",\n \"@langchain/aws\": \">=0.1.9\",\n \"@langchain/core\": \">=0.3.66\",\n \"@langchain/community\": \">=0.3.58\",\n \"@langchain/google-gauth\": \">=0.1.0\",\n \"@langchain/langgraph-sdk\": \">=0.1.2\",\n \"@langchain/openai\": \">=0.4.2\",\n \"groq-sdk\": \">=0.3.0 <1.0.0\",\n \"langchain\": \">=0.3.3\",\n \"openai\": \"^4.85.1\"\n },\n \"peerDependenciesMeta\": {\n \"@anthropic-ai/sdk\": {\n \"optional\": true\n },\n \"@langchain/aws\": {\n \"optional\": true\n },\n \"@langchain/community\": {\n \"optional\": true\n },\n \"@langchain/google-gauth\": {\n \"optional\": true\n },\n \"@langchain/langgraph-sdk\": {\n \"optional\": true\n },\n \"@langchain/openai\": {\n \"optional\": true\n },\n \"groq-sdk\": {\n \"optional\": true\n },\n \"langchain\": {\n \"optional\": true\n },\n \"openai\": {\n \"optional\": true\n }\n },\n \"keywords\": [\n \"copilotkit\",\n \"copilot\",\n \"react\",\n \"nextjs\",\n \"nodejs\",\n \"ai\",\n \"assistant\",\n \"javascript\",\n \"automation\",\n \"textarea\"\n ]\n}\n","import \"reflect-metadata\";\nexport * from \"./lib\";\nexport * from \"./utils\";\nexport * from \"./service-adapters\";\n","import { 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\nexport function limitMessagesToTokenCount(\n messages: any[],\n tools: any[],\n model: string,\n maxTokens?: number,\n): any[] {\n maxTokens ||= maxTokensForOpenAIModel(model);\n\n const result: any[] = [];\n const toolsNumTokens = countToolsTokens(model, tools);\n if (toolsNumTokens > maxTokens) {\n throw new Error(`Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`);\n }\n maxTokens -= toolsNumTokens;\n\n for (const message of messages) {\n if ([\"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].reverse();\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(action: ActionInput): 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(message: ChatCompletionMessageParam) {\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","/**\n * Copilot Runtime adapter for OpenAI.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * organization: \"<your-organization-id>\", // optional\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new OpenAIAdapter({ openai });\n * ```\n *\n * ## Example with Azure OpenAI\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * // The name of your Azure OpenAI Instance.\n * // https://learn.microsoft.com/en-us/azure/cognitive-services/openai/how-to/create-resource?pivots=web-portal#create-a-resource\n * const instance = \"<your instance name>\";\n *\n * // Corresponds to your Model deployment within your OpenAI resource, e.g. my-gpt35-16k-deployment\n * // Navigate to the Azure OpenAI Studio to deploy a model.\n * const model = \"<your model>\";\n *\n * const apiKey = process.env[\"AZURE_OPENAI_API_KEY\"];\n * if (!apiKey) {\n * throw new Error(\"The AZURE_OPENAI_API_KEY environment variable is missing or empty.\");\n * }\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * apiKey,\n * baseURL: `https://${instance}.openai.azure.com/openai/deployments/${model}`,\n * defaultQuery: { \"api-version\": \"2024-04-01-preview\" },\n * defaultHeaders: { \"api-key\": apiKey },\n * });\n *\n * return new OpenAIAdapter({ openai });\n * ```\n */\nimport type OpenAI from \"openai\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n} from \"./utils\";\nimport { randomUUID } from \"@copilotkit/shared\";\nimport { convertServiceAdapterError } from \"../shared\";\n\nconst DEFAULT_MODEL = \"gpt-4o\";\n\nexport interface OpenAIAdapterParams {\n /**\n * An optional OpenAI instance to use. If not provided, a new instance will be\n * created.\n */\n openai?: OpenAI;\n\n /**\n * The model to use.\n */\n model?: string;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n\n /**\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 OpenAIAdapter implements CopilotServiceAdapter {\n public model: string = DEFAULT_MODEL;\n public provider = \"openai\";\n\n private disableParallelToolCalls: boolean = false;\n private _openai: OpenAI;\n private keepSystemRole: boolean = false;\n\n public get openai(): OpenAI {\n return this._openai;\n }\n public get name() {\n return \"OpenAIAdapter\";\n }\n\n constructor(params?: OpenAIAdapterParams) {\n if (params?.openai) {\n this._openai = params.openai;\n }\n // If no instance provided, we'll lazy-load in ensureOpenAI()\n\n if (params?.model) {\n this.model = params.model;\n }\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 {\n threadId: threadIdFromRequest,\n model = this.model,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToOpenAITool);\n const threadId = threadIdFromRequest ?? randomUUID();\n\n // ALLOWLIST APPROACH: Only include tool_result messages that correspond to valid tool_calls\n // Step 1: Extract valid tool_call IDs\n const validToolUseIds = new Set<string>();\n\n for (const message of messages) {\n if (message.isActionExecutionMessage()) {\n validToolUseIds.add(message.id);\n }\n }\n\n // Step 2: Filter messages, keeping only those with valid tool_call IDs\n const filteredMessages = messages.filter((message) => {\n if (message.isResultMessage()) {\n // Skip if there's no corresponding tool_call\n if (!validToolUseIds.has(message.actionExecutionId)) {\n return false;\n }\n\n // Remove this ID from valid IDs so we don't process duplicates\n validToolUseIds.delete(message.actionExecutionId);\n return true;\n }\n\n // Keep all non-tool-result messages\n return true;\n });\n\n let openaiMessages = filteredMessages.map((m) =>\n convertMessageToOpenAIMessage(m, { keepSystemRole: this.keepSystemRole }),\n );\n openaiMessages = limitMessagesToTokenCount(openaiMessages, tools, model);\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"function\",\n function: { name: forwardedParameters.toolChoiceFunctionName },\n };\n }\n\n try {\n const openai = this.ensureOpenAI();\n const stream = openai.beta.chat.completions.stream({\n model: model,\n stream: true,\n messages: openaiMessages,\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.maxTokens && {\n max_completion_tokens: forwardedParameters.maxTokens,\n }),\n ...(forwardedParameters?.stop && { stop: forwardedParameters.stop }),\n ...(toolChoice && { tool_choice: toolChoice }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n ...(forwardedParameters?.temperature && { temperature: forwardedParameters.temperature }),\n });\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n try {\n for await (const chunk of stream) {\n if (chunk.choices.length === 0) {\n continue;\n }\n\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (toolCall === undefined || toolCall?.id)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n currentToolCallId = toolCall!.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.id,\n actionName: toolCall!.function!.name,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = chunk.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: content,\n });\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCall.function.arguments,\n });\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n } catch (error) {\n console.error(\"[OpenAI] Error during API call:\", error);\n throw convertServiceAdapterError(error, \"OpenAI\");\n }\n\n eventStream$.complete();\n });\n } catch (error) {\n console.error(\"[OpenAI] Error during API call:\", error);\n throw convertServiceAdapterError(error, \"OpenAI\");\n }\n\n return {\n threadId,\n };\n }\n}\n","import { CopilotKitLowLevelError, CopilotKitErrorCode } from \"@copilotkit/shared\";\n\n/**\n * Converts service adapter errors to structured CopilotKitError format using HTTP status codes.\n * This provides consistent error classification across all service adapters.\n */\nexport function convertServiceAdapterError(\n error: any,\n adapterName: string,\n): CopilotKitLowLevelError {\n const errorName = error?.constructor?.name || error.name;\n const errorMessage = error?.message || String(error);\n const statusCode = error.status || error.statusCode || error.response?.status;\n const responseData = error.error || error.response?.data || error.data;\n\n // Create the base error with the constructor signature\n const structuredError = new CopilotKitLowLevelError({\n error: error instanceof Error ? error : new Error(errorMessage),\n url: `${adapterName} service adapter`,\n message: `${adapterName} API error: ${errorMessage}`,\n });\n\n // Add additional properties after construction\n if (statusCode) {\n (structuredError as any).statusCode = statusCode;\n }\n if (responseData) {\n (structuredError as any).responseData = responseData;\n }\n if (errorName) {\n (structuredError as any).originalErrorType = errorName;\n }\n\n // Classify error based on HTTP status codes (reliable and provider-agnostic)\n let newCode: CopilotKitErrorCode;\n\n if (statusCode === 401) {\n // 401 = Authentication/API key issues\n newCode = CopilotKitErrorCode.AUTHENTICATION_ERROR;\n } else if (statusCode >= 400 && statusCode < 500) {\n // 4xx = Client errors (bad request, invalid params, etc.) - these are configuration issues\n newCode = CopilotKitErrorCode.CONFIGURATION_ERROR;\n } else if (statusCode >= 500) {\n // 5xx = Server errors - keep as NETWORK_ERROR since it's infrastructure related\n newCode = CopilotKitErrorCode.NETWORK_ERROR;\n } else if (statusCode) {\n // Any other HTTP status with an error - likely configuration\n newCode = CopilotKitErrorCode.CONFIGURATION_ERROR;\n } else {\n // No status code - likely a genuine network/connection error\n newCode = CopilotKitErrorCode.NETWORK_ERROR;\n }\n\n // Update both the instance property and the extensions\n (structuredError as any).code = newCode;\n if ((structuredError as any).extensions) {\n (structuredError as any).extensions.code = newCode;\n }\n\n return structuredError;\n}\n","import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n HumanMessage,\n SystemMessage,\n ToolMessage,\n} from \"@langchain/core/messages\";\nimport { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { z } from \"zod\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { LangChainReturnType } from \"./types\";\nimport { RuntimeEventSubject } from \"../events\";\nimport { randomId, convertJsonSchemaToZodSchema } from \"@copilotkit/shared\";\n\nexport function convertMessageToLangChainMessage(message: Message): BaseMessage {\n if (message.isTextMessage()) {\n if (message.role == \"user\") {\n return new HumanMessage(message.content);\n } else if (message.role == \"assistant\") {\n return new AIMessage(message.content);\n } else if (message.role === \"system\") {\n return new SystemMessage(message.content);\n }\n } else if (message.isActionExecutionMessage()) {\n return new AIMessage({\n content: \"\",\n tool_calls: [\n {\n id: message.id,\n args: message.arguments,\n name: message.name,\n },\n ],\n });\n } else if (message.isResultMessage()) {\n return new ToolMessage({\n content: message.result,\n tool_call_id: message.actionExecutionId,\n });\n }\n}\n\nexport function convertActionInputToLangChainTool(actionInput: ActionInput): any {\n return new DynamicStructuredTool({\n ...actionInput,\n name: actionInput.name,\n description: actionInput.description,\n schema: convertJsonSchemaToZodSchema(\n JSON.parse(actionInput.jsonSchema),\n true,\n ) as z.ZodObject<any>,\n func: async () => {\n return \"\";\n },\n });\n}\n\ninterface StreamLangChainResponseParams {\n result: LangChainReturnType;\n eventStream$: RuntimeEventSubject;\n actionExecution?: {\n id: string;\n name: string;\n returnDirect?: boolean;\n };\n}\n\nfunction getConstructorName(object: any): string {\n if (object && typeof object === \"object\" && object.constructor && object.constructor.name) {\n return object.constructor.name;\n }\n return \"\";\n}\n\nfunction isAIMessage(message: any): message is AIMessage {\n return Object.prototype.toString.call(message) === \"[object AIMessage]\";\n}\n\nfunction isAIMessageChunk(message: any): message is AIMessageChunk {\n return Object.prototype.toString.call(message) === \"[object AIMessageChunk]\";\n}\n\nfunction isBaseMessageChunk(message: any): message is BaseMessageChunk {\n return Object.prototype.toString.call(message) === \"[object BaseMessageChunk]\";\n}\n\nfunction maybeSendActionExecutionResultIsMessage(\n eventStream$: RuntimeEventSubject,\n actionExecution?: { id: string; name: string },\n) {\n // language models need a result after the function call\n // we simply let them know that we are sending a message\n if (actionExecution) {\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: \"Sending a message\",\n });\n }\n}\n\nexport async function streamLangChainResponse({\n result,\n eventStream$,\n actionExecution,\n}: StreamLangChainResponseParams) {\n // We support several types of return values from LangChain functions:\n\n // 1. string\n\n if (typeof result === \"string\") {\n if (!actionExecution || actionExecution?.returnDirect) {\n // Just send one chunk with the string as the content.\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: result,\n });\n eventStream$.sendTextMessage(randomId(), result);\n } else {\n // Send as a result\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: result,\n });\n }\n }\n\n // 2. AIMessage\n // Send the content and function call of the AIMessage as the content of the chunk.\n else if (isAIMessage(result)) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n if (result.content) {\n eventStream$.sendTextMessage(randomId(), result.content as string);\n }\n for (const toolCall of result.tool_calls) {\n eventStream$.sendActionExecution({\n actionExecutionId: toolCall.id || randomId(),\n actionName: toolCall.name,\n args: JSON.stringify(toolCall.args),\n });\n }\n }\n\n // 3. BaseMessageChunk\n // Send the content and function call of the AIMessage as the content of the chunk.\n else if (isBaseMessageChunk(result)) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n if (result.lc_kwargs?.content) {\n eventStream$.sendTextMessage(randomId(), result.content as string);\n }\n if (result.lc_kwargs?.tool_calls) {\n for (const toolCall of result.lc_kwargs?.tool_calls) {\n eventStream$.sendActionExecution({\n actionExecutionId: toolCall.id || randomId(),\n actionName: toolCall.name,\n args: JSON.stringify(toolCall.args),\n });\n }\n }\n }\n\n // 4. IterableReadableStream\n // Stream the result of the LangChain function.\n else if (result && \"getReader\" in result) {\n maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);\n\n let reader = result.getReader();\n\n let mode: \"function\" | \"message\" | null = null;\n let currentMessageId: string;\n\n const toolCallDetails = {\n name: null,\n id: null,\n index: null,\n prevIndex: null,\n };\n\n while (true) {\n try {\n const { done, value } = await reader.read();\n\n let toolCallName: string | undefined = undefined;\n let toolCallId: string | undefined = undefined;\n let toolCallArgs: string | undefined = undefined;\n let hasToolCall: boolean = false;\n let content = \"\";\n if (value && value.content) {\n content = Array.isArray(value.content)\n ? (((value.content[0] as any)?.text ?? \"\") as string)\n : value.content;\n }\n\n if (isAIMessageChunk(value)) {\n let chunk = value.tool_call_chunks?.[0];\n toolCallArgs = chunk?.args;\n hasToolCall = chunk != undefined;\n if (chunk?.name) toolCallDetails.name = chunk.name;\n // track different index on the same tool cool\n if (chunk?.index != null) {\n toolCallDetails.index = chunk.index; // 1\n if (toolCallDetails.prevIndex == null) toolCallDetails.prevIndex = chunk.index;\n }\n // Differentiate when calling the same tool but with different index\n if (chunk?.id)\n toolCallDetails.id = chunk.index != null ? `${chunk.id}-idx-${chunk.index}` : chunk.id;\n\n // Assign to internal variables that the entire script here knows how to work with\n toolCallName = toolCallDetails.name;\n toolCallId = toolCallDetails.id;\n } else if (isBaseMessageChunk(value)) {\n let chunk = value.additional_kwargs?.tool_calls?.[0];\n toolCallName = chunk?.function?.name;\n toolCallId = chunk?.id;\n toolCallArgs = chunk?.function?.arguments;\n hasToolCall = chunk?.function != undefined;\n }\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCallName is defined, it means a new tool call starts.\n if (mode === \"message\" && (toolCallId || done)) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (!hasToolCall || done)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: toolCallId });\n }\n\n if (done) {\n break;\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (hasToolCall && toolCallId && toolCallName) {\n mode = \"function\";\n eventStream$.sendActionExecutionStart({\n actionExecutionId: toolCallId,\n actionName: toolCallName,\n parentMessageId: value.lc_kwargs?.id,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = value.lc_kwargs?.id || randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content,\n });\n } else if (mode === \"function\" && toolCallArgs) {\n // For calls of the same tool with different index, we seal last tool call and register a new one\n if (toolCallDetails.index !== toolCallDetails.prevIndex) {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: toolCallId });\n eventStream$.sendActionExecutionStart({\n actionExecutionId: toolCallId,\n actionName: toolCallName,\n parentMessageId: value.lc_kwargs?.id,\n });\n toolCallDetails.prevIndex = toolCallDetails.index;\n }\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: toolCallId,\n args: toolCallArgs,\n });\n }\n } catch (error) {\n console.error(\"Error reading from stream\", error);\n break;\n }\n }\n } else if (actionExecution) {\n eventStream$.sendActionExecutionResult({\n actionExecutionId: actionExecution.id,\n actionName: actionExecution.name,\n result: encodeResult(result),\n });\n }\n\n // unsupported type\n else {\n throw new Error(\"Invalid return type from LangChain function.\");\n }\n\n eventStream$.complete();\n}\n\nfunction encodeResult(result: any): string {\n if (result === undefined) {\n return \"\";\n } else if (typeof result === \"string\") {\n return result;\n } else {\n return JSON.stringify(result);\n }\n}\n","/**\n * Copilot Runtime adapter for LangChain.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, LangChainAdapter } from \"@copilotkit/runtime\";\n * import { ChatOpenAI } from \"@langchain/openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const model = new ChatOpenAI({\n * model: \"gpt-4o\",\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new LangChainAdapter({\n * chainFn: async ({ messages, tools }) => {\n * return model.bindTools(tools).stream(messages);\n * // or optionally enable strict mode\n * // return model.bindTools(tools, { strict: true }).stream(messages);\n * }\n * });\n * ```\n *\n * The asynchronous handler function (`chainFn`) can return any of the following:\n *\n * - A simple `string` response\n * - A LangChain stream (`IterableReadableStream`)\n * - A LangChain `BaseMessageChunk` object\n * - A LangChain `AIMessage` object\n */\n\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport { CopilotServiceAdapter } from \"../service-adapter\";\nimport {\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToLangChainTool,\n convertMessageToLangChainMessage,\n streamLangChainResponse,\n} from \"./utils\";\nimport type { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { LangChainReturnType } from \"./types\";\nimport { randomUUID } from \"@copilotkit/shared\";\n\ninterface ChainFnParameters {\n model: string;\n messages: BaseMessage[];\n tools: DynamicStructuredTool[];\n threadId?: string;\n runId?: string;\n}\n\ninterface LangChainAdapterOptions {\n /**\n * A function that uses the LangChain API to generate a response.\n */\n chainFn: (parameters: ChainFnParameters) => Promise<LangChainReturnType>;\n}\n\nexport class LangChainAdapter implements CopilotServiceAdapter {\n /**\n * To use LangChain as a backend, provide a handler function to the adapter with your custom LangChain logic.\n */\n public get name() {\n return \"LangChainAdapter\";\n }\n constructor(private options: LangChainAdapterOptions) {}\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n try {\n const {\n eventSource,\n model,\n actions,\n messages,\n runId,\n threadId: threadIdFromRequest,\n } = request;\n const threadId = threadIdFromRequest ?? randomUUID();\n const result = await this.options.chainFn({\n messages: messages.map(convertMessageToLangChainMessage),\n tools: actions.map(convertActionInputToLangChainTool),\n model,\n threadId,\n runId,\n });\n\n eventSource.stream(async (eventStream$) => {\n await streamLangChainResponse({\n result,\n eventStream$,\n });\n });\n\n return {\n threadId,\n };\n } finally {\n // Lazy require for optional peer dependency\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { awaitAllCallbacks } = require(\"@langchain/core/callbacks/promises\");\n await awaitAllCallbacks();\n }\n }\n}\n","/**\n * Copilot Runtime adapter for Google Generative AI (e.g. Gemini).\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, GoogleGenerativeAIAdapter } from \"@copilotkit/runtime\";\n * const { GoogleGenerativeAI } = require(\"@google/generative-ai\");\n *\n * const genAI = new GoogleGenerativeAI(process.env[\"GOOGLE_API_KEY\"]);\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new GoogleGenerativeAIAdapter({ model: \"gemini-1.5-pro\" });\n * ```\n */\nimport { LangChainAdapter } from \"../langchain/langchain-adapter\";\n\ninterface GoogleGenerativeAIAdapterOptions {\n /**\n * A custom Google Generative AI model to use.\n */\n model?: string;\n /**\n * The API key to use.\n */\n apiKey?: string;\n}\n\nconst DEFAULT_MODEL = \"gemini-1.5-pro\";\n\nexport class GoogleGenerativeAIAdapter extends LangChainAdapter {\n public provider = \"google\";\n public model: string = DEFAULT_MODEL;\n\n constructor(options?: GoogleGenerativeAIAdapterOptions) {\n super({\n chainFn: async ({ messages, tools, threadId }) => {\n // Lazy require for optional peer dependencies\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { ChatGoogle } = require(\"@langchain/google-gauth\");\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { AIMessage } = require(\"@langchain/core/messages\");\n\n // Filter out empty assistant messages to prevent Gemini validation errors\n // Gemini specifically rejects conversations containing AIMessages with empty content\n const filteredMessages = messages.filter((message) => {\n // Keep all non-AI messages (HumanMessage, SystemMessage, ToolMessage, etc.)\n if (!(message instanceof AIMessage)) {\n return true;\n }\n\n // For AIMessages, only keep those with non-empty content\n // Also keep AIMessages with tool_calls even if content is empty\n const aiMsg = message as any;\n return (\n (aiMsg.content && String(aiMsg.content).trim().length > 0) ||\n (aiMsg.tool_calls && aiMsg.tool_calls.length > 0)\n );\n });\n\n this.model = options?.model ?? \"gemini-1.5-pro\";\n const model = new ChatGoogle({\n apiKey: options?.apiKey ?? process.env.GOOGLE_API_KEY,\n modelName: this.model,\n apiVersion: \"v1beta\",\n }).bindTools(tools);\n\n return model.stream(filteredMessages, { metadata: { conversation_id: threadId } });\n },\n });\n }\n}\n","/**\n * Copilot Runtime adapter for the OpenAI Assistant API.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAssistantAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * organization: \"<your-organization-id>\",\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new OpenAIAssistantAdapter({\n * openai,\n * assistantId: \"<your-assistant-id>\",\n * codeInterpreterEnabled: true,\n * fileSearchEnabled: true,\n * });\n * ```\n */\nimport type OpenAI from \"openai\";\nimport type { RunSubmitToolOutputsStreamParams } from \"openai/resources/beta/threads/runs/runs\";\nimport type { AssistantStream } from \"openai/lib/AssistantStream\";\nimport type { AssistantStreamEvent, AssistantTool } from \"openai/resources/beta/assistants\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport { Message, ResultMessage, TextMessage } from \"../../graphql/types/converted\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n convertSystemMessageToAssistantAPI,\n} from \"./utils\";\nimport { 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 = 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 } = 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(threadId, runId, messages, eventSource);\n }\n // submit user message\n else if (lastMessage.isTextMessage()) {\n nextRunId = await this.submitUserMessage(\n threadId,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n );\n }\n // unsupported message\n else {\n throw new Error(\"No actionable message found in the messages\");\n }\n\n return {\n 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 openai.beta.threads.runs.retrieve(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) => message.isResultMessage() && toolCallsIds.includes(message.actionExecutionId),\n ) as ResultMessage[];\n\n if (toolCallsIds.length != resultMessages.length) {\n throw new Error(\"Number of function results does not match the number of tool calls\");\n }\n\n // submit the tool outputs\n const toolOutputs: RunSubmitToolOutputsStreamParams.ToolOutput[] = resultMessages.map(\n (message) => {\n return {\n tool_call_id: message.actionExecutionId,\n output: message.result,\n };\n },\n );\n\n const stream = openai.beta.threads.runs.submitToolOutputsStream(threadId, runId, {\n tool_outputs: toolOutputs,\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n });\n\n await this.streamResponse(stream, eventSource);\n return runId;\n }\n\n private async submitUserMessage(\n threadId: string,\n messages: Message[],\n actions: ActionInput[],\n eventSource: RuntimeEventSource,\n forwardedParameters: ForwardedParametersInput,\n ) {\n const openai = this.ensureOpenAI();\n messages = [...messages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage() ? instructionsMessage.content : \"\";\n\n // get the latest user message\n const userMessage = messages\n .map((m) => convertMessageToOpenAIMessage(m, { keepSystemRole: this.keepSystemRole }))\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 ? [{ type: \"code_interpreter\" } as AssistantTool] : []),\n ...(this.fileSearchEnabled ? [{ type: \"file_search\" } as AssistantTool] : []),\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(stream: AssistantStream, eventSource: RuntimeEventSource) {\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({ actionExecutionId: currentToolCallId });\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 = chunk.data.delta.step_details.tool_calls?.[0].function.name;\n toolCallArgs = chunk.data.delta.step_details.tool_calls?.[0].function.arguments;\n }\n\n if (toolCallName && toolCallId) {\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\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({ actionExecutionId: currentToolCallId });\n }\n eventStream$.complete();\n });\n }\n}\n\nfunction getRunIdFromStream(stream: AssistantStream): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n let runIdGetter = (event: AssistantStreamEvent) => {\n if (event.event === \"thread.run.created\") {\n const runId = event.data.id;\n stream.off(\"event\", runIdGetter);\n resolve(runId);\n }\n };\n stream.on(\"event\", runIdGetter);\n });\n}\n","/**\n * CopilotKit Adapter for Unify\n *\n * <RequestExample>\n * ```jsx CopilotRuntime Example\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(req, new UnifyAdapter());\n * ```\n * </RequestExample>\n *\n * You can easily set the model to use by passing it to the constructor.\n * ```jsx\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(\n * req,\n * new UnifyAdapter({ model: \"llama-3-8b-chat@fireworks-ai\" }),\n * );\n * ```\n */\nimport {\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n CopilotServiceAdapter,\n} from \"../service-adapter\";\nimport { randomId, randomUUID } from \"@copilotkit/shared\";\nimport { convertActionInputToOpenAITool, convertMessageToOpenAIMessage } from \"../openai/utils\";\n\nexport interface UnifyAdapterParams {\n apiKey?: string;\n model: string;\n}\n\nexport class UnifyAdapter implements CopilotServiceAdapter {\n private apiKey: string;\n public model: string;\n private start: boolean;\n public provider = \"unify\";\n\n public get name() {\n return \"UnifyAdapter\";\n }\n\n constructor(options?: UnifyAdapterParams) {\n if (options?.apiKey) {\n this.apiKey = options.apiKey;\n } else {\n this.apiKey = \"UNIFY_API_KEY\";\n }\n this.model = options?.model;\n this.start = true;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const tools = request.actions.map(convertActionInputToOpenAITool);\n // Lazy require for optional peer dependency\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const OpenAI = require(\"openai\").default;\n const openai = new OpenAI({\n apiKey: this.apiKey,\n baseURL: \"https://api.unify.ai/v0/\",\n });\n const forwardedParameters = request.forwardedParameters;\n\n const messages = request.messages.map((m) => convertMessageToOpenAIMessage(m));\n\n const stream = await openai.chat.completions.create({\n model: this.model,\n messages: messages,\n stream: true,\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.temperature && { temperature: forwardedParameters.temperature }),\n });\n\n let model = null;\n let currentMessageId: string;\n let currentToolCallId: string;\n request.eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n for await (const chunk of stream) {\n if (this.start) {\n model = chunk.model;\n currentMessageId = randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: `Model used: ${model}\\n`,\n });\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n this.start = false;\n }\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (toolCall === undefined || toolCall?.id)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n currentToolCallId = toolCall!.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n actionName: toolCall!.function!.name,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = chunk.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: content,\n });\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCall.function.arguments,\n });\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n eventStream$.complete();\n });\n\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n","/**\n * Copilot Runtime adapter for Groq.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, GroqAdapter } from \"@copilotkit/runtime\";\n * import { Groq } from \"groq-sdk\";\n *\n * const groq = new Groq({ apiKey: process.env[\"GROQ_API_KEY\"] });\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new GroqAdapter({ groq, model: \"<model-name>\" });\n * ```\n */\nimport type { Groq } from \"groq-sdk\";\nimport type { ChatCompletionMessageParam } from \"groq-sdk/resources/chat\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n} from \"../openai/utils\";\nimport { randomUUID } from \"@copilotkit/shared\";\nimport { convertServiceAdapterError } from \"../shared\";\n\nconst DEFAULT_MODEL = \"llama-3.3-70b-versatile\";\n\nexport interface GroqAdapterParams {\n /**\n * An optional Groq instance to use.\n */\n groq?: Groq;\n\n /**\n * The model to use.\n */\n model?: string;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n}\n\nexport class GroqAdapter implements CopilotServiceAdapter {\n public model: string = DEFAULT_MODEL;\n public provider = \"groq\";\n\n private disableParallelToolCalls: boolean = false;\n private _groq: Groq;\n public get groq(): Groq {\n return this._groq;\n }\n public get name() {\n return \"GroqAdapter\";\n }\n\n constructor(params?: GroqAdapterParams) {\n if (params?.groq) {\n this._groq = params.groq;\n }\n // If no instance provided, we'll lazy-load in ensureGroq()\n if (params?.model) {\n this.model = params.model;\n }\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n }\n\n private ensureGroq(): Groq {\n if (!this._groq) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { Groq } = require(\"groq-sdk\");\n this._groq = new Groq({});\n }\n return this._groq;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId,\n model = this.model,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToOpenAITool);\n\n let openaiMessages = messages.map((m) =>\n convertMessageToOpenAIMessage(m, { keepSystemRole: true }),\n );\n openaiMessages = limitMessagesToTokenCount(openaiMessages, tools, model);\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"function\",\n function: { name: forwardedParameters.toolChoiceFunctionName },\n };\n }\n let stream;\n try {\n const groq = this.ensureGroq();\n stream = await groq.chat.completions.create({\n model: model,\n stream: true,\n messages: openaiMessages as unknown as ChatCompletionMessageParam[],\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.maxTokens && {\n max_tokens: forwardedParameters.maxTokens,\n }),\n ...(forwardedParameters?.stop && { stop: forwardedParameters.stop }),\n ...(toolChoice && { tool_choice: toolChoice }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n ...(forwardedParameters?.temperature && { temperature: forwardedParameters.temperature }),\n });\n } catch (error) {\n throw convertServiceAdapterError(error, \"Groq\");\n }\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n try {\n for await (const chunk of stream) {\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\" && (toolCall === undefined || toolCall?.id)) {\n mode = null;\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n currentToolCallId = toolCall!.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n actionName: toolCall!.function!.name,\n parentMessageId: chunk.id,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = chunk.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content,\n });\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCall.function.arguments,\n });\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n } catch (error) {\n throw convertServiceAdapterError(error, \"Groq\");\n }\n\n eventStream$.complete();\n });\n\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n","import { YogaInitialContext } from \"graphql-yoga\";\nimport { buildSchemaSync } from \"type-graphql\";\nimport { CopilotResolver } from \"../../graphql/resolvers/copilot.resolver\";\nimport { useDeferStream } from \"@graphql-yoga/plugin-defer-stream\";\nimport { CopilotRuntime } from \"../runtime/copilot-runtime\";\nimport { CopilotServiceAdapter } from \"../../service-adapters\";\nimport { CopilotCloudOptions } from \"../cloud\";\nimport { LogLevel, createLogger } from \"../../lib/logger\";\nimport { createYoga } from \"graphql-yoga\";\nimport telemetry from \"../telemetry-client\";\nimport { StateResolver } from \"../../graphql/resolvers/state.resolver\";\nimport * as packageJson from \"../../../package.json\";\nimport { CopilotKitError, CopilotKitErrorCode } from \"@copilotkit/shared\";\n\nconst logger = createLogger();\n\nexport const addCustomHeaderPlugin = {\n onResponse({ response }) {\n // Set your custom header; adjust the header name and value as needed\n response.headers.set(\"X-CopilotKit-Runtime-Version\", packageJson.version);\n },\n};\n\ntype AnyPrimitive = string | boolean | number | null;\nexport type CopilotRequestContextProperties = Record<\n string,\n AnyPrimitive | Record<string, AnyPrimitive>\n>;\n\nexport type GraphQLContext = YogaInitialContext & {\n _copilotkit: CreateCopilotRuntimeServerOptions;\n properties: CopilotRequestContextProperties;\n logger: typeof logger;\n};\n\nexport interface CreateCopilotRuntimeServerOptions {\n runtime: CopilotRuntime<any>;\n serviceAdapter?: CopilotServiceAdapter;\n endpoint: string;\n baseUrl?: string;\n cloud?: CopilotCloudOptions;\n properties?: CopilotRequestContextProperties;\n logLevel?: LogLevel;\n}\n\nexport async function createContext(\n initialContext: YogaInitialContext,\n copilotKitContext: CreateCopilotRuntimeServerOptions,\n contextLogger: typeof logger,\n properties: CopilotRequestContextProperties = {},\n): Promise<Partial<GraphQLContext>> {\n logger.debug({ copilotKitContext }, \"Creating GraphQL context\");\n const ctx: GraphQLContext = {\n ...initialContext,\n _copilotkit: {\n ...copilotKitContext,\n },\n properties: { ...properties },\n logger: contextLogger,\n };\n return ctx;\n}\n\nexport function buildSchema(\n options: {\n emitSchemaFile?: string;\n } = {},\n) {\n logger.debug(\"Building GraphQL schema...\");\n const schema = buildSchemaSync({\n resolvers: [CopilotResolver, StateResolver],\n emitSchemaFile: options.emitSchemaFile,\n });\n logger.debug(\"GraphQL schema built successfully\");\n return schema;\n}\n\nexport type CommonConfig = {\n logging: typeof logger;\n schema: ReturnType<typeof buildSchema>;\n plugins: Parameters<typeof createYoga>[0][\"plugins\"];\n context: (ctx: YogaInitialContext) => Promise<Partial<GraphQLContext>>;\n maskedErrors: {\n maskError: (error: any, message: string, isDev?: boolean) => any;\n };\n};\n\nexport function getCommonConfig(options: CreateCopilotRuntimeServerOptions): CommonConfig {\n const logLevel = (process.env.LOG_LEVEL as LogLevel) || (options.logLevel as LogLevel) || \"error\";\n const logger = createLogger({ level: logLevel, component: \"getCommonConfig\" });\n\n const contextLogger = createLogger({ level: logLevel });\n\n if (options.cloud) {\n telemetry.setCloudConfiguration({\n publicApiKey: options.cloud.publicApiKey,\n baseUrl: options.cloud.baseUrl,\n });\n }\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: {\n ...(options.properties._copilotkit as Record<string, any>),\n },\n });\n }\n\n telemetry.setGlobalProperties({\n runtime: {\n serviceAdapter: options.serviceAdapter.constructor.name,\n },\n });\n\n // User error codes that should not be logged as server errors\n const userErrorCodes = [\n CopilotKitErrorCode.AGENT_NOT_FOUND,\n CopilotKitErrorCode.API_NOT_FOUND,\n CopilotKitErrorCode.REMOTE_ENDPOINT_NOT_FOUND,\n CopilotKitErrorCode.CONFIGURATION_ERROR,\n CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,\n ];\n\n return {\n logging: createLogger({ component: \"Yoga GraphQL\", level: logLevel }),\n schema: buildSchema(),\n plugins: [useDeferStream(), addCustomHeaderPlugin],\n context: (ctx: YogaInitialContext): Promise<Partial<GraphQLContext>> =>\n createContext(ctx, options, contextLogger, options.properties),\n // Suppress logging for user configuration errors\n maskedErrors: {\n maskError: (error: any, message: string, isDev?: boolean) => {\n // Check if this is a user configuration error (could be wrapped in GraphQLError)\n const originalError = error.originalError || error;\n const extensions = error.extensions;\n const errorCode = extensions?.code;\n\n // Suppress logging for user errors based on error code\n if (errorCode && userErrorCodes.includes(errorCode)) {\n // Log user configuration errors at debug level instead\n console.debug(\"User configuration error:\", error.message);\n return error;\n }\n\n // Check if the original error is a user error\n if (\n originalError instanceof CopilotKitError &&\n userErrorCodes.includes(originalError.code)\n ) {\n // Log user configuration errors at debug level instead\n console.debug(\"User configuration error:\", error.message);\n return error;\n }\n\n // For application errors, log normally and mask if needed\n console.error(\"Application error:\", error);\n return error;\n },\n },\n };\n}\n","import { Arg, Ctx, Mutation, Query, Resolver } from \"type-graphql\";\nimport {\n ReplaySubject,\n Subject,\n Subscription,\n filter,\n finalize,\n firstValueFrom,\n shareReplay,\n skipWhile,\n take,\n takeWhile,\n tap,\n} from \"rxjs\";\nimport { GenerateCopilotResponseInput } from \"../inputs/generate-copilot-response.input\";\nimport { CopilotResponse } from \"../types/copilot-response.type\";\nimport {\n CopilotKitLangGraphInterruptEvent,\n LangGraphInterruptEvent,\n} from \"../types/meta-events.type\";\nimport { ActionInputAvailability, MessageRole } from \"../types/enums\";\nimport { Repeater } from \"graphql-yoga\";\nimport type { CopilotRequestContextProperties, GraphQLContext } from \"../../lib/integrations\";\nimport {\n RuntimeEvent,\n RuntimeEventTypes,\n RuntimeMetaEventName,\n} from \"../../service-adapters/events\";\nimport {\n FailedMessageStatus,\n MessageStatusCode,\n MessageStatusUnion,\n SuccessMessageStatus,\n} from \"../types/message-status.type\";\nimport { ResponseStatusUnion, SuccessResponseStatus } from \"../types/response-status.type\";\nimport { GraphQLJSONObject } from \"graphql-scalars\";\nimport { plainToInstance } from \"class-transformer\";\nimport { GuardrailsResult } from \"../types/guardrails-result.type\";\nimport { GraphQLError } from \"graphql\";\nimport {\n GuardrailsValidationFailureResponse,\n MessageStreamInterruptedResponse,\n UnknownErrorResponse,\n} from \"../../utils\";\nimport {\n ActionExecutionMessage,\n AgentStateMessage,\n Message,\n MessageType,\n ResultMessage,\n TextMessage,\n} from \"../types/converted\";\nimport telemetry from \"../../lib/telemetry-client\";\nimport { randomId } from \"@copilotkit/shared\";\nimport { AgentsResponse } from \"../types/agents-response.type\";\nimport { LangGraphEventTypes } from \"../../agents/langgraph/events\";\nimport {\n CopilotKitError,\n CopilotKitLowLevelError,\n isStructuredCopilotKitError,\n} from \"@copilotkit/shared\";\nimport { CopilotRuntime } from \"../../lib\";\n\nconst invokeGuardrails = async ({\n baseUrl,\n copilotCloudPublicApiKey,\n data,\n onResult,\n onError,\n}: {\n baseUrl: string;\n copilotCloudPublicApiKey: string;\n data: GenerateCopilotResponseInput;\n onResult: (result: GuardrailsResult) => void;\n onError: (err: Error) => void;\n}) => {\n if (\n data.messages.length &&\n data.messages[data.messages.length - 1].textMessage?.role === MessageRole.user\n ) {\n const messages = data.messages\n .filter(\n (m) =>\n m.textMessage !== undefined &&\n (m.textMessage.role === MessageRole.user || m.textMessage.role === MessageRole.assistant),\n )\n .map((m) => ({\n role: m.textMessage!.role,\n content: m.textMessage.content,\n }));\n\n const lastMessage = messages[messages.length - 1];\n const restOfMessages = messages.slice(0, -1);\n\n const body = {\n input: lastMessage.content,\n validTopics: data.cloud.guardrails.inputValidationRules.allowList,\n invalidTopics: data.cloud.guardrails.inputValidationRules.denyList,\n messages: restOfMessages,\n };\n\n const guardrailsResult = await fetch(`${baseUrl}/guardrails/validate`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CopilotCloud-Public-API-Key\": copilotCloudPublicApiKey,\n },\n body: JSON.stringify(body),\n });\n\n if (guardrailsResult.ok) {\n const resultJson: GuardrailsResult = await guardrailsResult.json();\n onResult(resultJson);\n } else {\n onError(await guardrailsResult.json());\n }\n }\n};\n\n@Resolver(() => CopilotResponse)\nexport class CopilotResolver {\n @Query(() => String)\n async hello() {\n return \"Hello World\";\n }\n\n @Query(() => AgentsResponse)\n async availableAgents(@Ctx() ctx: GraphQLContext) {\n let logger = ctx.logger.child({ component: \"CopilotResolver.availableAgents\" });\n\n logger.debug(\"Processing\");\n const agentsWithEndpoints = [];\n\n logger.debug(\"Event source created, creating response\");\n\n return {\n agents: agentsWithEndpoints.map(\n ({ endpoint, ...agentWithoutEndpoint }) => agentWithoutEndpoint,\n ),\n };\n }\n\n @Mutation(() => CopilotResponse)\n async generateCopilotResponse(\n @Ctx() ctx: GraphQLContext,\n @Arg(\"data\") data: GenerateCopilotResponseInput,\n @Arg(\"properties\", () => GraphQLJSONObject, { nullable: true })\n properties?: CopilotRequestContextProperties,\n ) {\n telemetry.capture(\"oss.runtime.copilot_request_created\", {\n \"cloud.guardrails.enabled\": data.cloud?.guardrails !== undefined,\n requestType: data.metadata.requestType,\n \"cloud.api_key_provided\": !!ctx.request.headers.get(\"x-copilotcloud-public-api-key\"),\n ...(ctx.request.headers.get(\"x-copilotcloud-public-api-key\")\n ? {\n \"cloud.public_api_key\": ctx.request.headers.get(\"x-copilotcloud-public-api-key\"),\n }\n : {}),\n ...(ctx._copilotkit.baseUrl\n ? {\n \"cloud.base_url\": ctx._copilotkit.baseUrl,\n }\n : {\n \"cloud.base_url\": \"https://api.cloud.copilotkit.ai\",\n }),\n });\n\n let logger = ctx.logger.child({ component: \"CopilotResolver.generateCopilotResponse\" });\n logger.debug({ data }, \"Generating Copilot response\");\n\n if (properties) {\n logger.debug(\"Properties provided, merging with context properties\");\n ctx.properties = { ...ctx.properties, ...properties };\n }\n\n const copilotRuntime = ctx._copilotkit.runtime as unknown as CopilotRuntime;\n const serviceAdapter = ctx._copilotkit.serviceAdapter;\n\n let copilotCloudPublicApiKey: string | null = null;\n let copilotCloudBaseUrl: string;\n\n // Extract publicApiKey from headers for both cloud and non-cloud requests\n // This enables onTrace functionality regardless of cloud configuration\n const publicApiKeyFromHeaders = ctx.request.headers.get(\"x-copilotcloud-public-api-key\");\n if (publicApiKeyFromHeaders) {\n copilotCloudPublicApiKey = publicApiKeyFromHeaders;\n }\n\n if (data.cloud) {\n logger = logger.child({ cloud: true });\n logger.debug(\"Cloud configuration provided, checking for public API key in headers\");\n\n if (!copilotCloudPublicApiKey) {\n logger.error(\"Public API key not found in headers\");\n\n throw new GraphQLError(\"X-CopilotCloud-Public-API-Key header is required\");\n }\n\n if (process.env.COPILOT_CLOUD_BASE_URL) {\n copilotCloudBaseUrl = process.env.COPILOT_CLOUD_BASE_URL;\n } else if (ctx._copilotkit.cloud?.baseUrl) {\n copilotCloudBaseUrl = ctx._copilotkit.cloud?.baseUrl;\n } else {\n copilotCloudBaseUrl = \"https://api.cloud.copilotkit.ai\";\n }\n\n logger = logger.child({ copilotCloudBaseUrl });\n }\n\n logger.debug(\"Setting up subjects\");\n const responseStatus$ = new ReplaySubject<typeof ResponseStatusUnion>();\n const interruptStreaming$ = new ReplaySubject<{ reason: string; messageId?: string }>();\n const guardrailsResult$ = new ReplaySubject<GuardrailsResult>();\n\n let outputMessages: Message[] = [];\n let resolveOutputMessagesPromise: (messages: Message[]) => void;\n let rejectOutputMessagesPromise: (err: Error) => void;\n\n const outputMessagesPromise = new Promise<Message[]>((resolve, reject) => {\n resolveOutputMessagesPromise = resolve;\n rejectOutputMessagesPromise = reject;\n });\n\n if (copilotCloudPublicApiKey) {\n ctx.properties[\"copilotCloudPublicApiKey\"] = copilotCloudPublicApiKey;\n }\n\n logger.debug(\"Processing\");\n let runtimeResponse;\n\n const {\n eventSource,\n threadId = randomId(),\n runId,\n serverSideActions,\n actionInputsWithoutAgents,\n extensions,\n } = runtimeResponse;\n\n logger.debug(\"Event source created, creating response\");\n // run and process the event stream\n const eventStream = eventSource\n .processRuntimeEvents({\n serverSideActions,\n guardrailsResult$: data.cloud?.guardrails ? guardrailsResult$ : null,\n actionInputsWithoutAgents: actionInputsWithoutAgents.filter(\n // TODO-AGENTS: do not exclude ALL server side actions\n (action) =>\n !serverSideActions.find((serverSideAction) => serverSideAction.name == action.name),\n ),\n threadId,\n })\n .pipe(\n // shareReplay() ensures that later subscribers will see the whole stream instead of\n // just the events that were emitted after the subscriber was added.\n shareReplay(),\n finalize(() => {\n logger.debug(\"Event stream finalized\");\n }),\n );\n\n const response = {\n threadId,\n runId,\n status: firstValueFrom(responseStatus$),\n extensions,\n metaEvents: new Repeater(async (push, stop) => {\n let eventStreamSubscription: Subscription;\n\n eventStreamSubscription = eventStream.subscribe({\n next: async (event) => {\n if (event.type != RuntimeEventTypes.MetaEvent) {\n return;\n }\n switch (event.name) {\n // @ts-ignore\n case LangGraphEventTypes.OnInterrupt:\n push(\n plainToInstance(LangGraphInterruptEvent, {\n // @ts-ignore\n type: event.type,\n // @ts-ignore\n name: RuntimeMetaEventName.LangGraphInterruptEvent,\n // @ts-ignore\n value: event.value,\n }),\n );\n break;\n case RuntimeMetaEventName.LangGraphInterruptEvent:\n push(\n plainToInstance(LangGraphInterruptEvent, {\n type: event.type,\n name: event.name,\n value: event.value,\n }),\n );\n break;\n case RuntimeMetaEventName.CopilotKitLangGraphInterruptEvent:\n push(\n plainToInstance(CopilotKitLangGraphInterruptEvent, {\n type: event.type,\n name: event.name,\n data: {\n value: event.data.value,\n messages: event.data.messages.map((message) => {\n if (\n message.type === \"TextMessage\" ||\n (\"content\" in message && \"role\" in message)\n ) {\n return plainToInstance(TextMessage, {\n id: message.id,\n createdAt: new Date(),\n content: [(message as TextMessage).content],\n role: (message as TextMessage).role,\n status: new SuccessMessageStatus(),\n });\n }\n if (\"arguments\" in message) {\n return plainToInstance(ActionExecutionMessage, {\n name: message.name,\n id: message.id,\n arguments: [JSON.stringify(message.arguments)],\n createdAt: new Date(),\n status: new SuccessMessageStatus(),\n });\n }\n throw new Error(\"Unknown message in metaEvents copilot resolver\");\n }),\n },\n }),\n );\n break;\n }\n },\n error: (err) => {\n // For structured CopilotKit errors, set proper error response status\n if (err?.name?.includes(\"CopilotKit\") || err?.extensions?.visibility) {\n responseStatus$.next(\n new UnknownErrorResponse({\n description: err.message || \"Agent error occurred\",\n }),\n );\n } else {\n responseStatus$.next(\n new UnknownErrorResponse({\n description: `An unknown error has occurred in the event stream`,\n }),\n );\n }\n\n eventStreamSubscription?.unsubscribe();\n stop();\n },\n complete: async () => {\n logger.debug(\"Meta events stream completed\");\n responseStatus$.next(new SuccessResponseStatus());\n eventStreamSubscription?.unsubscribe();\n stop();\n },\n });\n }),\n messages: new Repeater(async (pushMessage, stopStreamingMessages) => {\n logger.debug(\"Messages repeater created\");\n\n if (data.cloud?.guardrails) {\n logger = logger.child({ guardrails: true });\n logger.debug(\"Guardrails is enabled, validating input\");\n\n invokeGuardrails({\n baseUrl: copilotCloudBaseUrl,\n copilotCloudPublicApiKey,\n data,\n onResult: (result) => {\n logger.debug({ status: result.status }, \"Guardrails validation done\");\n guardrailsResult$.next(result);\n\n // Guardrails validation failed\n if (result.status === \"denied\") {\n // send the reason to the client and interrupt streaming\n responseStatus$.next(\n new GuardrailsValidationFailureResponse({ guardrailsReason: result.reason }),\n );\n interruptStreaming$.next({\n reason: `Interrupted due to Guardrails validation failure. Reason: ${result.reason}`,\n });\n\n // resolve messages promise to the middleware\n outputMessages = [\n plainToInstance(TextMessage, {\n id: randomId(),\n createdAt: new Date(),\n content: result.reason,\n role: MessageRole.assistant,\n }),\n ];\n resolveOutputMessagesPromise(outputMessages);\n }\n },\n onError: (err) => {\n logger.error({ err }, \"Error in guardrails validation\");\n responseStatus$.next(\n new UnknownErrorResponse({\n description: `An unknown error has occurred in the guardrails validation`,\n }),\n );\n interruptStreaming$.next({\n reason: `Interrupted due to unknown error in guardrails validation`,\n });\n\n // reject the middleware promise\n rejectOutputMessagesPromise(err);\n },\n });\n }\n\n let eventStreamSubscription: Subscription;\n\n logger.debug(\"Event stream created, subscribing to event stream\");\n\n eventStreamSubscription = eventStream.subscribe({\n next: async (event) => {\n switch (event.type) {\n case RuntimeEventTypes.MetaEvent:\n break;\n ////////////////////////////////\n // TextMessageStart\n ////////////////////////////////\n case RuntimeEventTypes.TextMessageStart:\n // create a sub stream that contains the message content\n const textMessageContentStream = eventStream.pipe(\n // skip until this message start event\n skipWhile((e: RuntimeEvent) => e !== event),\n // take until the message end event\n takeWhile(\n (e: RuntimeEvent) =>\n !(\n e.type === RuntimeEventTypes.TextMessageEnd &&\n (e as any).messageId == event.messageId\n ),\n ),\n // filter out any other message events or message ids\n filter(\n (e: RuntimeEvent) =>\n e.type == RuntimeEventTypes.TextMessageContent &&\n (e as any).messageId == event.messageId,\n ),\n );\n\n // signal when we are done streaming\n const streamingTextStatus = new Subject<typeof MessageStatusUnion>();\n\n const messageId = event.messageId;\n // push the new message\n pushMessage({\n id: messageId,\n parentMessageId: event.parentMessageId,\n status: firstValueFrom(streamingTextStatus),\n createdAt: new Date(),\n role: MessageRole.assistant,\n content: new Repeater(async (pushTextChunk, stopStreamingText) => {\n logger.debug(\"Text message content repeater created\");\n\n const textChunks: string[] = [];\n let textSubscription: Subscription;\n\n interruptStreaming$\n .pipe(\n shareReplay(),\n take(1),\n tap(({ reason, messageId }) => {\n logger.debug({ reason, messageId }, \"Text streaming interrupted\");\n\n streamingTextStatus.next(\n plainToInstance(FailedMessageStatus, { reason }),\n );\n\n responseStatus$.next(new MessageStreamInterruptedResponse({ messageId }));\n stopStreamingText();\n textSubscription?.unsubscribe();\n }),\n )\n .subscribe();\n\n logger.debug(\"Subscribing to text message content stream\");\n\n textSubscription = textMessageContentStream.subscribe({\n next: async (e: RuntimeEvent) => {\n if (e.type == RuntimeEventTypes.TextMessageContent) {\n await pushTextChunk(e.content);\n textChunks.push(e.content);\n }\n },\n error: (err) => {\n logger.error({ err }, \"Error in text message content stream\");\n interruptStreaming$.next({\n reason: \"Error streaming message content\",\n messageId,\n });\n stopStreamingText();\n textSubscription?.unsubscribe();\n },\n complete: () => {\n logger.debug(\"Text message content stream completed\");\n streamingTextStatus.next(new SuccessMessageStatus());\n stopStreamingText();\n textSubscription?.unsubscribe();\n\n outputMessages.push(\n plainToInstance(TextMessage, {\n id: messageId,\n createdAt: new Date(),\n content: textChunks.join(\"\"),\n role: MessageRole.assistant,\n }),\n );\n },\n });\n }),\n });\n break;\n ////////////////////////////////\n // ActionExecutionStart\n ////////////////////////////////\n case RuntimeEventTypes.ActionExecutionStart:\n logger.debug(\"Action execution start event received\");\n const actionExecutionArgumentStream = eventStream.pipe(\n skipWhile((e: RuntimeEvent) => e !== event),\n // take until the action execution end event\n takeWhile(\n (e: RuntimeEvent) =>\n !(\n e.type === RuntimeEventTypes.ActionExecutionEnd &&\n (e as any).actionExecutionId == event.actionExecutionId\n ),\n ),\n // filter out any other action execution events or action execution ids\n filter(\n (e: RuntimeEvent) =>\n e.type == RuntimeEventTypes.ActionExecutionArgs &&\n (e as any).actionExecutionId == event.actionExecutionId,\n ),\n );\n const streamingArgumentsStatus = new Subject<typeof MessageStatusUnion>();\n pushMessage({\n id: event.actionExecutionId,\n parentMessageId: event.parentMessageId,\n status: firstValueFrom(streamingArgumentsStatus),\n createdAt: new Date(),\n name: event.actionName,\n arguments: new Repeater(async (pushArgumentsChunk, stopStreamingArguments) => {\n logger.debug(\"Action execution argument stream created\");\n\n const argumentChunks: string[] = [];\n let actionExecutionArgumentSubscription: Subscription;\n\n actionExecutionArgumentSubscription = actionExecutionArgumentStream.subscribe({\n next: async (e: RuntimeEvent) => {\n if (e.type == RuntimeEventTypes.ActionExecutionArgs) {\n await pushArgumentsChunk(e.args);\n argumentChunks.push(e.args);\n }\n },\n error: (err) => {\n logger.error({ err }, \"Error in action execution argument stream\");\n streamingArgumentsStatus.next(\n plainToInstance(FailedMessageStatus, {\n reason:\n \"An unknown error has occurred in the action execution argument stream\",\n }),\n );\n stopStreamingArguments();\n actionExecutionArgumentSubscription?.unsubscribe();\n },\n complete: () => {\n logger.debug(\"Action execution argument stream completed\");\n streamingArgumentsStatus.next(new SuccessMessageStatus());\n stopStreamingArguments();\n actionExecutionArgumentSubscription?.unsubscribe();\n\n outputMessages.push(\n plainToInstance(ActionExecutionMessage, {\n id: event.actionExecutionId,\n createdAt: new Date(),\n name: event.actionName,\n arguments: argumentChunks.join(\"\"),\n }),\n );\n },\n });\n }),\n });\n break;\n ////////////////////////////////\n // ActionExecutionResult\n ////////////////////////////////\n case RuntimeEventTypes.ActionExecutionResult:\n logger.debug({ result: event.result }, \"Action execution result event received\");\n pushMessage({\n id: \"result-\" + event.actionExecutionId,\n status: new SuccessMessageStatus(),\n createdAt: new Date(),\n actionExecutionId: event.actionExecutionId,\n actionName: event.actionName,\n result: event.result,\n });\n\n outputMessages.push(\n plainToInstance(ResultMessage, {\n id: \"result-\" + event.actionExecutionId,\n createdAt: new Date(),\n actionExecutionId: event.actionExecutionId,\n actionName: event.actionName,\n result: event.result,\n }),\n );\n break;\n ////////////////////////////////\n // AgentStateMessage\n ////////////////////////////////\n case RuntimeEventTypes.AgentStateMessage:\n logger.debug({ event }, \"Agent message event received\");\n pushMessage({\n id: randomId(),\n status: new SuccessMessageStatus(),\n threadId: event.threadId,\n agentName: event.agentName,\n nodeName: event.nodeName,\n runId: event.runId,\n active: event.active,\n state: event.state,\n running: event.running,\n role: MessageRole.assistant,\n createdAt: new Date(),\n });\n outputMessages.push(\n plainToInstance(AgentStateMessage, {\n id: randomId(),\n threadId: event.threadId,\n agentName: event.agentName,\n nodeName: event.nodeName,\n runId: event.runId,\n active: event.active,\n state: event.state,\n running: event.running,\n role: MessageRole.assistant,\n createdAt: new Date(),\n }),\n );\n break;\n }\n },\n error: (err) => {\n // For structured CopilotKit errors, set proper error response status\n if (\n err instanceof CopilotKitError ||\n err instanceof CopilotKitLowLevelError ||\n (err instanceof Error && err.name && err.name.includes(\"CopilotKit\")) ||\n err?.extensions?.visibility\n ) {\n responseStatus$.next(\n new UnknownErrorResponse({\n description: err.message || \"Agent error occurred\",\n // Include original error information for frontend to extract\n originalError: {\n code: err.code || err.extensions?.code,\n statusCode: err.statusCode || err.extensions?.statusCode,\n severity: err.severity || err.extensions?.severity,\n visibility: err.visibility || err.extensions?.visibility,\n originalErrorType: err.originalErrorType || err.extensions?.originalErrorType,\n extensions: err.extensions,\n },\n }),\n );\n eventStreamSubscription?.unsubscribe();\n rejectOutputMessagesPromise(err);\n stopStreamingMessages();\n return;\n }\n\n responseStatus$.next(\n new UnknownErrorResponse({\n description: `An unknown error has occurred in the event stream`,\n }),\n );\n eventStreamSubscription?.unsubscribe();\n stopStreamingMessages();\n\n rejectOutputMessagesPromise(err);\n },\n complete: async () => {\n logger.debug(\"Event stream completed\");\n if (data.cloud?.guardrails) {\n logger.debug(\"Guardrails is enabled, waiting for guardrails result\");\n await firstValueFrom(guardrailsResult$);\n }\n responseStatus$.next(new SuccessResponseStatus());\n eventStreamSubscription?.unsubscribe();\n stopStreamingMessages();\n\n resolveOutputMessagesPromise(outputMessages);\n },\n });\n }),\n };\n\n return response;\n }\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MessageInput } from \"./message.input\";\nimport { FrontendInput } from \"./frontend.input\";\nimport { CloudInput } from \"./cloud.input\";\nimport { CopilotRequestType } from \"../types/enums\";\nimport { ForwardedParametersInput } from \"./forwarded-parameters.input\";\nimport { AgentSessionInput } from \"./agent-session.input\";\nimport { AgentStateInput } from \"./agent-state.input\";\nimport { ExtensionsInput } from \"./extensions.input\";\nimport { MetaEventInput } from \"./meta-event.input\";\nimport { CopilotContextInput } from \"./copilot-context.input\";\n\n@InputType()\nexport class GenerateCopilotResponseMetadataInput {\n @Field(() => CopilotRequestType, { nullable: true })\n requestType: CopilotRequestType;\n}\n\n@InputType()\nexport class GenerateCopilotResponseInput {\n @Field(() => GenerateCopilotResponseMetadataInput, { nullable: false })\n metadata: GenerateCopilotResponseMetadataInput;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n\n @Field(() => String, { nullable: true })\n runId?: string;\n\n @Field(() => [MessageInput])\n messages: MessageInput[];\n\n @Field(() => FrontendInput)\n frontend: FrontendInput;\n\n @Field(() => CloudInput, { nullable: true })\n cloud?: CloudInput;\n\n @Field(() => ForwardedParametersInput, { nullable: true })\n forwardedParameters?: ForwardedParametersInput;\n\n @Field(() => AgentSessionInput, { nullable: true })\n agentSession?: AgentSessionInput;\n\n @Field(() => AgentStateInput, { nullable: true })\n agentState?: AgentStateInput;\n\n @Field(() => [AgentStateInput], { nullable: true })\n agentStates?: AgentStateInput[];\n\n @Field(() => ExtensionsInput, { nullable: true })\n extensions?: ExtensionsInput;\n\n @Field(() => [MetaEventInput], { nullable: true })\n metaEvents?: MetaEventInput[];\n\n @Field(() => [CopilotContextInput], { nullable: true })\n context?: CopilotContextInput[];\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MessageRole } from \"../types/enums\";\nimport { BaseMessageInput } from \"../types/base\";\n\n// GraphQL does not support union types in inputs, so we need to use\n// optional fields for the different subtypes.\n@InputType()\nexport class MessageInput extends BaseMessageInput {\n @Field(() => TextMessageInput, { nullable: true })\n textMessage?: TextMessageInput;\n\n @Field(() => ActionExecutionMessageInput, { nullable: true })\n actionExecutionMessage?: ActionExecutionMessageInput;\n\n @Field(() => ResultMessageInput, { nullable: true })\n resultMessage?: ResultMessageInput;\n\n @Field(() => AgentStateMessageInput, { nullable: true })\n agentStateMessage?: AgentStateMessageInput;\n\n @Field(() => ImageMessageInput, { nullable: true })\n imageMessage?: ImageMessageInput;\n}\n\n@InputType()\nexport class TextMessageInput {\n @Field(() => String)\n content: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n}\n\n@InputType()\nexport class ActionExecutionMessageInput {\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n arguments: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => String, {\n nullable: true,\n deprecationReason: \"This field will be removed in a future version\",\n })\n scope?: String;\n}\n\n@InputType()\nexport class ResultMessageInput {\n @Field(() => String)\n actionExecutionId: string;\n\n @Field(() => String)\n actionName: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => String)\n result: string;\n}\n\n@InputType()\nexport class AgentStateMessageInput {\n @Field(() => String)\n threadId: string;\n\n @Field(() => String)\n agentName: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => String)\n state: string;\n\n @Field(() => Boolean)\n running: boolean;\n\n @Field(() => String)\n nodeName: string;\n\n @Field(() => String)\n runId: string;\n\n @Field(() => Boolean)\n active: boolean;\n}\n\n@InputType()\nexport class ImageMessageInput {\n @Field(() => String)\n format: string;\n\n @Field(() => String)\n bytes: string;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n}\n","import { registerEnumType } from \"type-graphql\";\n\nexport enum MessageRole {\n assistant = \"assistant\",\n developer = \"developer\",\n system = \"system\",\n tool = \"tool\",\n user = \"user\",\n}\n\nexport enum CopilotRequestType {\n Chat = \"Chat\",\n Task = \"Task\",\n TextareaCompletion = \"TextareaCompletion\",\n TextareaPopover = \"TextareaPopover\",\n Suggestion = \"Suggestion\",\n}\n\nexport enum ActionInputAvailability {\n disabled = \"disabled\",\n enabled = \"enabled\",\n remote = \"remote\",\n}\n\nregisterEnumType(MessageRole, {\n name: \"MessageRole\",\n description: \"The role of the message\",\n});\n\nregisterEnumType(CopilotRequestType, {\n name: \"CopilotRequestType\",\n description: \"The type of Copilot request\",\n});\n\nregisterEnumType(ActionInputAvailability, {\n name: \"ActionInputAvailability\",\n description: \"The availability of the frontend action\",\n});\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class BaseMessageInput {\n @Field(() => String)\n id: string;\n\n @Field(() => Date)\n createdAt: Date;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { ActionInput } from \"./action.input\";\n\n@InputType()\nexport class FrontendInput {\n @Field(() => String, { nullable: true })\n toDeprecate_fullContext?: string;\n\n @Field(() => [ActionInput])\n actions: ActionInput[];\n\n @Field(() => String, { nullable: true })\n url?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { ActionInputAvailability } from \"../types/enums\";\n@InputType()\nexport class ActionInput {\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n description: string;\n\n @Field(() => String)\n jsonSchema: string;\n\n @Field(() => ActionInputAvailability, { nullable: true })\n available?: ActionInputAvailability;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { GuardrailsInput } from \"./cloud-guardrails.input\";\n\n@InputType()\nexport class CloudInput {\n @Field(() => GuardrailsInput, { nullable: true })\n guardrails?: GuardrailsInput;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class GuardrailsRuleInput {\n @Field(() => [String], { nullable: true })\n allowList?: string[] = [];\n\n @Field(() => [String], { nullable: true })\n denyList?: string[] = [];\n}\n\n@InputType()\nexport class GuardrailsInput {\n @Field(() => GuardrailsRuleInput, { nullable: false })\n inputValidationRules: GuardrailsRuleInput;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class ForwardedParametersInput {\n @Field(() => String, { nullable: true })\n model?: string;\n\n @Field(() => Number, { nullable: true })\n maxTokens?: number;\n\n @Field(() => [String], { nullable: true })\n stop?: string[];\n\n @Field(() => String, { nullable: true })\n toolChoice?: String;\n\n @Field(() => String, { nullable: true })\n toolChoiceFunctionName?: string;\n\n @Field(() => Number, { nullable: true })\n temperature?: number;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class AgentSessionInput {\n @Field(() => String)\n agentName: string;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n\n @Field(() => String, { nullable: true })\n nodeName?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class AgentStateInput {\n @Field(() => String)\n agentName: string;\n\n @Field(() => String)\n state: string;\n\n @Field(() => String, { nullable: true })\n config?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n/**\n * The extensions input is used to pass additional information to the copilot runtime, specific to a\n * service adapter or agent framework.\n */\n\n@InputType()\nexport class ExtensionsInput {\n @Field(() => OpenAIApiAssistantAPIInput, { nullable: true })\n openaiAssistantAPI?: OpenAIApiAssistantAPIInput;\n}\n\n@InputType()\nexport class OpenAIApiAssistantAPIInput {\n @Field(() => String, { nullable: true })\n runId?: string;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\nimport { MetaEventName } from \"../types/meta-events.type\";\nimport { MessageInput } from \"./message.input\";\n\n@InputType()\nexport class MetaEventInput {\n @Field(() => MetaEventName)\n name: MetaEventName;\n\n @Field(() => String)\n value?: string;\n\n @Field(() => String, { nullable: true })\n response?: string;\n\n @Field(() => [MessageInput], { nullable: true })\n messages?: MessageInput[];\n}\n","import { createUnionType, Field, InterfaceType, ObjectType, registerEnumType } from \"type-graphql\";\nimport {\n ActionExecutionMessageOutput,\n AgentStateMessageOutput,\n BaseMessageOutput,\n ResultMessageOutput,\n TextMessageOutput,\n} from \"./copilot-response.type\";\n\nexport enum MetaEventName {\n LangGraphInterruptEvent = \"LangGraphInterruptEvent\",\n CopilotKitLangGraphInterruptEvent = \"CopilotKitLangGraphInterruptEvent\",\n}\n\nregisterEnumType(MetaEventName, {\n name: \"MetaEventName\",\n description: \"Meta event types\",\n});\n\n@InterfaceType({\n resolveType(value) {\n if (value.name === MetaEventName.LangGraphInterruptEvent) {\n return LangGraphInterruptEvent;\n } else if (value.name === MetaEventName.CopilotKitLangGraphInterruptEvent) {\n return CopilotKitLangGraphInterruptEvent;\n }\n return undefined;\n },\n})\n@InterfaceType()\nexport abstract class BaseMetaEvent {\n @Field(() => String)\n type: \"MetaEvent\" = \"MetaEvent\";\n\n @Field(() => MetaEventName)\n name: MetaEventName;\n}\n\n@ObjectType()\nexport class CopilotKitLangGraphInterruptEventData {\n @Field(() => String)\n value: string;\n\n @Field(() => [BaseMessageOutput])\n messages: (typeof BaseMessageOutput)[];\n}\n\n@ObjectType({ implements: BaseMetaEvent })\nexport class LangGraphInterruptEvent {\n @Field(() => MetaEventName)\n name: MetaEventName.LangGraphInterruptEvent = MetaEventName.LangGraphInterruptEvent;\n\n @Field(() => String)\n value: string;\n\n @Field(() => String, { nullable: true })\n response?: string;\n}\n\n@ObjectType({ implements: BaseMetaEvent })\nexport class CopilotKitLangGraphInterruptEvent {\n @Field(() => MetaEventName)\n name: MetaEventName.CopilotKitLangGraphInterruptEvent =\n MetaEventName.CopilotKitLangGraphInterruptEvent;\n\n @Field(() => CopilotKitLangGraphInterruptEventData)\n data: CopilotKitLangGraphInterruptEventData;\n\n @Field(() => String, { nullable: true })\n response?: string;\n}\n","import { Field, InterfaceType, ObjectType } from \"type-graphql\";\nimport { MessageRole } from \"./enums\";\nimport { MessageStatusUnion } from \"./message-status.type\";\nimport { ResponseStatusUnion } from \"./response-status.type\";\nimport { ExtensionsResponse } from \"./extensions-response.type\";\nimport { BaseMetaEvent } from \"./meta-events.type\";\n\n@InterfaceType({\n resolveType(value) {\n if (value.hasOwnProperty(\"content\")) {\n return TextMessageOutput;\n } else if (value.hasOwnProperty(\"name\")) {\n return ActionExecutionMessageOutput;\n } else if (value.hasOwnProperty(\"result\")) {\n return ResultMessageOutput;\n } else if (value.hasOwnProperty(\"state\")) {\n return AgentStateMessageOutput;\n } else if (value.hasOwnProperty(\"format\") && value.hasOwnProperty(\"bytes\")) {\n return ImageMessageOutput;\n }\n return undefined;\n },\n})\nexport abstract class BaseMessageOutput {\n @Field(() => String)\n id: string;\n\n @Field(() => Date)\n createdAt: Date;\n\n @Field(() => MessageStatusUnion)\n status: typeof MessageStatusUnion;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class TextMessageOutput {\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => [String])\n content: string[];\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ActionExecutionMessageOutput {\n @Field(() => String)\n name: string;\n\n @Field(() => String, {\n nullable: true,\n deprecationReason: \"This field will be removed in a future version\",\n })\n scope?: string;\n\n @Field(() => [String])\n arguments: string[];\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ResultMessageOutput {\n @Field(() => String)\n actionExecutionId: string;\n\n @Field(() => String)\n actionName: string;\n\n @Field(() => String)\n result: string;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class AgentStateMessageOutput {\n @Field(() => String)\n threadId: string;\n\n @Field(() => String)\n agentName: string;\n\n @Field(() => String)\n nodeName: string;\n\n @Field(() => String)\n runId: string;\n\n @Field(() => Boolean)\n active: boolean;\n\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => String)\n state: string;\n\n @Field(() => Boolean)\n running: boolean;\n}\n\n@ObjectType({ implements: BaseMessageOutput })\nexport class ImageMessageOutput {\n @Field(() => String)\n format: string;\n\n @Field(() => String)\n bytes: string;\n\n @Field(() => MessageRole)\n role: MessageRole;\n\n @Field(() => String, { nullable: true })\n parentMessageId?: string;\n}\n\n@ObjectType()\nexport class CopilotResponse {\n @Field(() => String)\n threadId!: string;\n\n @Field(() => ResponseStatusUnion)\n status: typeof ResponseStatusUnion;\n\n @Field({ nullable: true })\n runId?: string;\n\n @Field(() => [BaseMessageOutput])\n messages: (typeof BaseMessageOutput)[];\n\n @Field(() => ExtensionsResponse, { nullable: true })\n extensions?: ExtensionsResponse;\n\n @Field(() => [BaseMetaEvent], { nullable: true })\n metaEvents?: (typeof BaseMetaEvent)[];\n}\n","import { Field, ObjectType, createUnionType, registerEnumType } from \"type-graphql\";\n\nexport enum MessageStatusCode {\n Pending = \"pending\",\n Success = \"success\",\n Failed = \"failed\",\n}\n\nregisterEnumType(MessageStatusCode, {\n name: \"MessageStatusCode\",\n});\n\n@ObjectType()\nexport class BaseMessageStatus {\n @Field(() => MessageStatusCode)\n code: MessageStatusCode;\n}\n\n@ObjectType()\nexport class PendingMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Pending;\n}\n\n@ObjectType()\nexport class SuccessMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Success;\n}\n\n@ObjectType()\nexport class FailedMessageStatus extends BaseMessageStatus {\n code: MessageStatusCode = MessageStatusCode.Failed;\n\n @Field(() => String)\n reason: string;\n}\n\nexport const MessageStatusUnion = createUnionType({\n name: \"MessageStatus\",\n types: () => [PendingMessageStatus, SuccessMessageStatus, FailedMessageStatus] as const,\n});\n\nexport type MessageStatus = typeof MessageStatusUnion;\n","import { GraphQLJSON } from \"graphql-scalars\";\nimport { Field, InterfaceType, ObjectType, createUnionType, registerEnumType } from \"type-graphql\";\n\nexport enum ResponseStatusCode {\n Pending = \"pending\",\n Success = \"success\",\n Failed = \"failed\",\n}\n\nregisterEnumType(ResponseStatusCode, {\n name: \"ResponseStatusCode\",\n});\n\n@InterfaceType({\n resolveType(value) {\n if (value.code === ResponseStatusCode.Success) {\n return SuccessResponseStatus;\n } else if (value.code === ResponseStatusCode.Failed) {\n return FailedResponseStatus;\n } else if (value.code === ResponseStatusCode.Pending) {\n return PendingResponseStatus;\n }\n return undefined;\n },\n})\n@ObjectType()\nabstract class BaseResponseStatus {\n @Field(() => ResponseStatusCode)\n code: ResponseStatusCode;\n}\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class PendingResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Pending;\n}\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class SuccessResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Success;\n}\n\nexport enum FailedResponseStatusReason {\n GUARDRAILS_VALIDATION_FAILED = \"GUARDRAILS_VALIDATION_FAILED\",\n MESSAGE_STREAM_INTERRUPTED = \"MESSAGE_STREAM_INTERRUPTED\",\n UNKNOWN_ERROR = \"UNKNOWN_ERROR\",\n}\n\nregisterEnumType(FailedResponseStatusReason, {\n name: \"FailedResponseStatusReason\",\n});\n\n@ObjectType({ implements: BaseResponseStatus })\nexport class FailedResponseStatus extends BaseResponseStatus {\n code: ResponseStatusCode = ResponseStatusCode.Failed;\n\n @Field(() => FailedResponseStatusReason)\n reason: FailedResponseStatusReason;\n\n @Field(() => GraphQLJSON, { nullable: true })\n details?: Record<string, any> = null;\n}\n\nexport const ResponseStatusUnion = createUnionType({\n name: \"ResponseStatus\",\n types: () => [PendingResponseStatus, SuccessResponseStatus, FailedResponseStatus] as const,\n});\n","import { Field, ObjectType } from \"type-graphql\";\n\n/**\n * The extensions response is used to receive additional information from the copilot runtime, specific to a\n * service adapter or agent framework.\n *\n * Next time a request to the runtime is made, the extensions response will be included in the request as input.\n */\n\n@ObjectType()\nexport class ExtensionsResponse {\n @Field(() => OpenAIApiAssistantAPIResponse, { nullable: true })\n openaiAssistantAPI?: OpenAIApiAssistantAPIResponse;\n}\n\n@ObjectType()\nexport class OpenAIApiAssistantAPIResponse {\n @Field(() => String, { nullable: true })\n runId?: string;\n\n @Field(() => String, { nullable: true })\n threadId?: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class CopilotContextInput {\n @Field(() => String)\n description: string;\n\n @Field(() => String)\n value: string;\n}\n","import {\n Action,\n CopilotKitError,\n CopilotKitErrorCode,\n CopilotKitLowLevelError,\n ensureStructuredError,\n randomId,\n Severity,\n} from \"@copilotkit/shared\";\nimport { plainToInstance } from \"class-transformer\";\nimport {\n catchError,\n concat,\n concatMap,\n EMPTY,\n firstValueFrom,\n from,\n of,\n ReplaySubject,\n scan,\n Subject,\n} from \"rxjs\";\nimport { ActionInput } from \"../graphql/inputs/action.input\";\nimport { ActionExecutionMessage, ResultMessage, TextMessage } from \"../graphql/types/converted\";\nimport { GuardrailsResult } from \"../graphql/types/guardrails-result.type\";\nimport { generateHelpfulErrorMessage } from \"../lib/streaming\";\nimport telemetry from \"../lib/telemetry-client\";\nimport { streamLangChainResponse } from \"./langchain/utils\";\n\nexport enum RuntimeEventTypes {\n TextMessageStart = \"TextMessageStart\",\n TextMessageContent = \"TextMessageContent\",\n TextMessageEnd = \"TextMessageEnd\",\n ActionExecutionStart = \"ActionExecutionStart\",\n ActionExecutionArgs = \"ActionExecutionArgs\",\n ActionExecutionEnd = \"ActionExecutionEnd\",\n ActionExecutionResult = \"ActionExecutionResult\",\n AgentStateMessage = \"AgentStateMessage\",\n MetaEvent = \"MetaEvent\",\n RunError = \"RunError\",\n}\n\nexport enum RuntimeMetaEventName {\n LangGraphInterruptEvent = \"LangGraphInterruptEvent\",\n LangGraphInterruptResumeEvent = \"LangGraphInterruptResumeEvent\",\n CopilotKitLangGraphInterruptEvent = \"CopilotKitLangGraphInterruptEvent\",\n}\n\nexport type RunTimeMetaEvent =\n | {\n type: RuntimeEventTypes.MetaEvent;\n name: RuntimeMetaEventName.LangGraphInterruptEvent;\n value: string;\n }\n | {\n type: RuntimeEventTypes.MetaEvent;\n name: RuntimeMetaEventName.CopilotKitLangGraphInterruptEvent;\n data: { value: string; messages: (TextMessage | ActionExecutionMessage | ResultMessage)[] };\n }\n | {\n type: RuntimeEventTypes.MetaEvent;\n name: RuntimeMetaEventName.LangGraphInterruptResumeEvent;\n data: string;\n };\n\nexport type RuntimeErrorEvent = {\n type: RuntimeEventTypes.RunError;\n message: string;\n code?: string;\n};\n\nexport type RuntimeEvent =\n | { type: RuntimeEventTypes.TextMessageStart; messageId: string; parentMessageId?: string }\n | {\n type: RuntimeEventTypes.TextMessageContent;\n messageId: string;\n content: string;\n }\n | { type: RuntimeEventTypes.TextMessageEnd; messageId: string }\n | {\n type: RuntimeEventTypes.ActionExecutionStart;\n actionExecutionId: string;\n actionName: string;\n parentMessageId?: string;\n }\n | { type: RuntimeEventTypes.ActionExecutionArgs; actionExecutionId: string; args: string }\n | { type: RuntimeEventTypes.ActionExecutionEnd; actionExecutionId: string }\n | {\n type: RuntimeEventTypes.ActionExecutionResult;\n actionName: string;\n actionExecutionId: string;\n result: string;\n }\n | {\n type: RuntimeEventTypes.AgentStateMessage;\n threadId: string;\n agentName: string;\n nodeName: string;\n runId: string;\n active: boolean;\n role: string;\n state: string;\n running: boolean;\n }\n | RunTimeMetaEvent\n | RuntimeErrorEvent;\n\ninterface RuntimeEventWithState {\n event: RuntimeEvent | null;\n callActionServerSide: boolean;\n action: Action<any> | null;\n actionExecutionId: string | null;\n args: string;\n actionExecutionParentMessageId: string | null;\n}\n\ntype EventSourceCallback = (eventStream$: RuntimeEventSubject) => Promise<void>;\n\nexport class RuntimeEventSubject extends ReplaySubject<RuntimeEvent> {\n constructor() {\n super();\n }\n\n sendTextMessageStart({\n messageId,\n parentMessageId,\n }: {\n messageId: string;\n parentMessageId?: string;\n }) {\n this.next({ type: RuntimeEventTypes.TextMessageStart, messageId, parentMessageId });\n }\n\n sendTextMessageContent({ messageId, content }: { messageId: string; content: string }) {\n this.next({ type: RuntimeEventTypes.TextMessageContent, content, messageId });\n }\n\n sendTextMessageEnd({ messageId }: { messageId: string }) {\n this.next({ type: RuntimeEventTypes.TextMessageEnd, messageId });\n }\n\n sendTextMessage(messageId: string, content: string) {\n this.sendTextMessageStart({ messageId });\n this.sendTextMessageContent({ messageId, content });\n this.sendTextMessageEnd({ messageId });\n }\n\n sendActionExecutionStart({\n actionExecutionId,\n actionName,\n parentMessageId,\n }: {\n actionExecutionId: string;\n actionName: string;\n parentMessageId?: string;\n }) {\n this.next({\n type: RuntimeEventTypes.ActionExecutionStart,\n actionExecutionId,\n actionName,\n parentMessageId,\n });\n }\n\n sendActionExecutionArgs({\n actionExecutionId,\n args,\n }: {\n actionExecutionId: string;\n args: string;\n }) {\n this.next({ type: RuntimeEventTypes.ActionExecutionArgs, args, actionExecutionId });\n }\n\n sendActionExecutionEnd({ actionExecutionId }: { actionExecutionId: string }) {\n this.next({ type: RuntimeEventTypes.ActionExecutionEnd, actionExecutionId });\n }\n\n sendActionExecution({\n actionExecutionId,\n actionName,\n args,\n parentMessageId,\n }: {\n actionExecutionId: string;\n actionName: string;\n args: string;\n parentMessageId?: string;\n }) {\n this.sendActionExecutionStart({ actionExecutionId, actionName, parentMessageId });\n this.sendActionExecutionArgs({ actionExecutionId, args });\n this.sendActionExecutionEnd({ actionExecutionId });\n }\n\n sendActionExecutionResult({\n actionExecutionId,\n actionName,\n result,\n error,\n }: {\n actionExecutionId: string;\n actionName: string;\n result?: string;\n error?: { code: string; message: string };\n }) {\n this.next({\n type: RuntimeEventTypes.ActionExecutionResult,\n actionName,\n actionExecutionId,\n result: ResultMessage.encodeResult(result, error),\n });\n }\n\n sendAgentStateMessage({\n threadId,\n agentName,\n nodeName,\n runId,\n active,\n role,\n state,\n running,\n }: {\n threadId: string;\n agentName: string;\n nodeName: string;\n runId: string;\n active: boolean;\n role: string;\n state: string;\n running: boolean;\n }) {\n this.next({\n type: RuntimeEventTypes.AgentStateMessage,\n threadId,\n agentName,\n nodeName,\n runId,\n active,\n role,\n state,\n running,\n });\n }\n}\n\nexport class RuntimeEventSource {\n private eventStream$ = new RuntimeEventSubject();\n private callback!: EventSourceCallback;\n private errorHandler?: (error: any, context: any) => Promise<void>;\n private errorContext?: any;\n\n constructor(params?: {\n errorHandler?: (error: any, context: any) => Promise<void>;\n errorContext?: any;\n }) {\n this.errorHandler = params?.errorHandler;\n this.errorContext = params?.errorContext;\n }\n\n async stream(callback: EventSourceCallback): Promise<void> {\n this.callback = callback;\n }\n}\n\nfunction convertStreamingErrorToStructured(error: any): CopilotKitError {\n // Determine a more helpful error message based on context\n let helpfulMessage = generateHelpfulErrorMessage(error, \"event streaming connection\");\n\n // For network-related errors, use CopilotKitLowLevelError to preserve the original error\n if (\n error?.message?.includes(\"fetch failed\") ||\n error?.message?.includes(\"ECONNREFUSED\") ||\n error?.message?.includes(\"ENOTFOUND\") ||\n error?.message?.includes(\"ETIMEDOUT\") ||\n error?.message?.includes(\"terminated\") ||\n error?.cause?.code === \"UND_ERR_SOCKET\" ||\n error?.message?.includes(\"other side closed\") ||\n error?.code === \"UND_ERR_SOCKET\"\n ) {\n return new CopilotKitLowLevelError({\n error: error instanceof Error ? error : new Error(String(error)),\n url: \"event streaming connection\",\n message: helpfulMessage,\n });\n }\n\n // For all other errors, preserve the raw error in a basic CopilotKitError\n return new CopilotKitError({\n message: helpfulMessage,\n code: CopilotKitErrorCode.UNKNOWN,\n severity: Severity.CRITICAL,\n });\n}\n","import { randomId } from \"@copilotkit/shared\";\nimport {\n ActionExecutionMessageInput,\n ResultMessageInput,\n TextMessageInput,\n AgentStateMessageInput,\n ImageMessageInput,\n} from \"../../inputs/message.input\";\nimport { BaseMessageInput } from \"../base\";\nimport { BaseMessageOutput } from \"../copilot-response.type\";\nimport { MessageRole } from \"../enums\";\nimport { MessageStatus, MessageStatusCode } from \"../message-status.type\";\n\nexport type MessageType =\n | \"TextMessage\"\n | \"ActionExecutionMessage\"\n | \"ResultMessage\"\n | \"AgentStateMessage\"\n | \"ImageMessage\";\n\nexport class Message {\n type: MessageType;\n id: BaseMessageOutput[\"id\"];\n createdAt: BaseMessageOutput[\"createdAt\"];\n status: MessageStatus;\n\n constructor(props: any) {\n props.id ??= randomId();\n props.status ??= { code: MessageStatusCode.Success };\n props.createdAt ??= new Date();\n Object.assign(this, props);\n }\n\n isTextMessage(): this is TextMessage {\n return this.type === \"TextMessage\";\n }\n\n isActionExecutionMessage(): this is ActionExecutionMessage {\n return this.type === \"ActionExecutionMessage\";\n }\n\n isResultMessage(): this is ResultMessage {\n return this.type === \"ResultMessage\";\n }\n\n isAgentStateMessage(): this is AgentStateMessage {\n return this.type === \"AgentStateMessage\";\n }\n\n isImageMessage(): this is ImageMessage {\n return this.type === \"ImageMessage\";\n }\n}\n\n// alias Role to MessageRole\nexport const Role = MessageRole;\n\n// when constructing any message, the base fields are optional\ntype MessageConstructorOptions = Partial<Message>;\n\ntype TextMessageConstructorOptions = MessageConstructorOptions & TextMessageInput;\n\nexport class TextMessage extends Message implements TextMessageConstructorOptions {\n content: TextMessageInput[\"content\"];\n parentMessageId: TextMessageInput[\"parentMessageId\"];\n role: TextMessageInput[\"role\"];\n type = \"TextMessage\" as const;\n\n constructor(props: TextMessageConstructorOptions) {\n super(props);\n this.type = \"TextMessage\";\n }\n}\n\nexport class ActionExecutionMessage\n extends Message\n implements Omit<ActionExecutionMessageInput, \"arguments\" | \"scope\">\n{\n type: MessageType = \"ActionExecutionMessage\";\n name: string;\n arguments: Record<string, any>;\n parentMessageId?: string;\n}\n\nexport class ResultMessage extends Message implements ResultMessageInput {\n type: MessageType = \"ResultMessage\";\n actionExecutionId: string;\n actionName: string;\n result: string;\n\n static encodeResult(\n result: any,\n error?: { code: string; message: string } | string | Error,\n ): string {\n const errorObj = error\n ? typeof error === \"string\"\n ? { code: \"ERROR\", message: error }\n : error instanceof Error\n ? { code: \"ERROR\", message: error.message }\n : error\n : undefined;\n\n if (errorObj) {\n return JSON.stringify({\n error: errorObj,\n result: result || \"\",\n });\n }\n if (result === undefined) {\n return \"\";\n }\n return typeof result === \"string\" ? result : JSON.stringify(result);\n }\n\n static decodeResult(result: string): {\n error?: { code: string; message: string };\n result: string;\n } {\n if (!result) {\n return { result: \"\" };\n }\n try {\n const parsed = JSON.parse(result);\n if (parsed && typeof parsed === \"object\") {\n if (\"error\" in parsed) {\n return {\n error: parsed.error,\n result: parsed.result || \"\",\n };\n }\n return { result: JSON.stringify(parsed) };\n }\n return { result };\n } catch (e) {\n return { result };\n }\n }\n\n hasError(): boolean {\n try {\n const { error } = ResultMessage.decodeResult(this.result);\n return !!error;\n } catch {\n return false;\n }\n }\n\n getError(): { code: string; message: string } | undefined {\n try {\n const { error } = ResultMessage.decodeResult(this.result);\n return error;\n } catch {\n return undefined;\n }\n }\n}\n\nexport class AgentStateMessage extends Message implements Omit<AgentStateMessageInput, \"state\"> {\n type: MessageType = \"AgentStateMessage\";\n threadId: string;\n agentName: string;\n nodeName: string;\n runId: string;\n active: boolean;\n role: MessageRole;\n state: any;\n running: boolean;\n}\n\nexport class ImageMessage extends Message implements ImageMessageInput {\n type: MessageType = \"ImageMessage\";\n format: string;\n bytes: string;\n role: MessageRole;\n parentMessageId?: string;\n}\n","import {\n FailedResponseStatus,\n FailedResponseStatusReason,\n} from \"../graphql/types/response-status.type\";\n\nexport class GuardrailsValidationFailureResponse extends FailedResponseStatus {\n reason = FailedResponseStatusReason.GUARDRAILS_VALIDATION_FAILED;\n declare details: {\n guardrailsReason: string;\n };\n\n constructor({ guardrailsReason }) {\n super();\n this.details = {\n guardrailsReason,\n };\n }\n}\n\nexport class MessageStreamInterruptedResponse extends FailedResponseStatus {\n reason = FailedResponseStatusReason.MESSAGE_STREAM_INTERRUPTED;\n declare details: {\n messageId: string;\n description: string;\n };\n\n constructor({ messageId }: { messageId: string }) {\n super();\n this.details = {\n messageId,\n description: \"Check the message for mode details\",\n };\n }\n}\n\nexport class UnknownErrorResponse extends FailedResponseStatus {\n reason = FailedResponseStatusReason.UNKNOWN_ERROR;\n declare details: {\n description?: string;\n originalError?: {\n code?: string;\n statusCode?: number;\n severity?: string;\n visibility?: string;\n originalErrorType?: string;\n extensions?: any;\n };\n };\n\n constructor({\n description,\n originalError,\n }: {\n description?: string;\n originalError?: {\n code?: string;\n statusCode?: number;\n severity?: string;\n visibility?: string;\n originalErrorType?: string;\n extensions?: any;\n };\n }) {\n super();\n this.details = {\n description,\n originalError,\n };\n }\n}\n","import { TelemetryClient } from \"@copilotkit/shared\";\nimport { createHash } from \"node:crypto\";\nimport { CopilotRuntime, resolveEndpointType } from \"./runtime/copilot-runtime\";\nimport { RuntimeInstanceCreatedInfo } from \"@copilotkit/shared/src/telemetry/events\";\nimport { CreateCopilotRuntimeServerOptions } from \"./integrations/shared\";\nimport { EndpointType, LangGraphPlatformEndpoint } from \"./runtime/types\";\nconst packageJson = require(\"../../package.json\");\n\nconst telemetryClient = new TelemetryClient({\n packageName: packageJson.name,\n packageVersion: packageJson.version,\n});\n\nexport function getRuntimeInstanceTelemetryInfo(\n options: CreateCopilotRuntimeServerOptions,\n): RuntimeInstanceCreatedInfo {\n const runtime = options.runtime;\n const remoteEndpoints = runtime.params?.remoteEndpoints ?? [];\n const endpointsInfo = remoteEndpoints.reduce(\n (acc, endpoint) => {\n let info = { ...acc };\n\n const endpointType = resolveEndpointType(endpoint);\n if (!info.endpointTypes.includes(endpointType)) {\n info = {\n ...info,\n endpointTypes: [...info.endpointTypes, endpointType],\n };\n }\n\n if (endpointType === EndpointType.LangGraphPlatform) {\n // When type is resolved, recreating a const with casting of type\n const ep = endpoint as LangGraphPlatformEndpoint;\n info = {\n ...info,\n agentsAmount: ep.agents.length,\n hashedKey: ep.langsmithApiKey\n ? createHash(\"sha256\").update(ep.langsmithApiKey).digest(\"hex\")\n : null,\n };\n }\n\n return info;\n },\n { endpointTypes: [], agentsAmount: null, hashedKey: null },\n );\n\n // Get public API key from options.cloud.publicApiKey\n const publicApiKey = options.cloud?.publicApiKey;\n const apiKeyProvided = !!publicApiKey && publicApiKey.trim().length > 0;\n\n return {\n actionsAmount: runtime.params?.actions?.length ?? 0,\n endpointsAmount: remoteEndpoints.length,\n endpointTypes: endpointsInfo.endpointTypes,\n agentsAmount: Object.keys(runtime.instance.agents).length,\n hashedLgcKey: endpointsInfo.hashedKey,\n \"cloud.api_key_provided\": apiKeyProvided,\n ...(apiKeyProvided ? { \"cloud.public_api_key\": publicApiKey } : {}),\n ...(options.cloud?.baseUrl ? { \"cloud.base_url\": options.cloud.baseUrl } : {}),\n } as RuntimeInstanceCreatedInfo;\n}\n\nexport default telemetryClient;\n","/**\n * <Callout type=\"info\">\n * This is the reference for the `CopilotRuntime` class. For more information and example code snippets, please see [Concept: Copilot Runtime](/concepts/copilot-runtime).\n * </Callout>\n *\n * ## Usage\n *\n * ```tsx\n * import { CopilotRuntime } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n * ```\n */\n\nimport {\n type Action,\n type CopilotErrorHandler,\n CopilotKitMisuseError,\n type MaybePromise,\n type NonEmptyRecord,\n type Parameter,\n readBody,\n getZodParameters,\n type PartialBy,\n isTelemetryDisabled,\n} from \"@copilotkit/shared\";\nimport type { RunAgentInput } from \"@ag-ui/core\";\nimport { aguiToGQL } from \"../../graphql/message-conversion/agui-to-gql\";\nimport type { CopilotServiceAdapter, RemoteChainParameters } from \"../../service-adapters\";\nimport {\n CopilotRuntime as CopilotRuntimeVNext,\n type CopilotRuntimeOptions,\n type CopilotRuntimeOptions as CopilotRuntimeOptionsVNext,\n InMemoryAgentRunner,\n} from \"@copilotkitnext/runtime\";\nimport { TelemetryAgentRunner } from \"./telemetry-agent-runner\";\nimport telemetry from \"../telemetry-client\";\n\nimport type { MessageInput } from \"../../graphql/inputs/message.input\";\nimport type { Message } from \"../../graphql/types/converted\";\n\nimport {\n EndpointType,\n type EndpointDefinition,\n type CopilotKitEndpoint,\n type LangGraphPlatformEndpoint,\n} from \"./types\";\n\nimport type { CopilotObservabilityConfig, LLMRequestData, LLMResponseData } from \"../observability\";\nimport type { AbstractAgent } from \"@ag-ui/client\";\n\n// +++ MCP Imports +++\nimport {\n type MCPClient,\n type MCPEndpointConfig,\n type MCPTool,\n extractParametersFromSchema,\n} from \"./mcp-tools-utils\";\nimport { BasicAgent, type BasicAgentConfiguration } from \"@copilotkitnext/agent\";\n// Define the function type alias here or import if defined elsewhere\ntype CreateMCPClientFunction = (config: MCPEndpointConfig) => Promise<MCPClient>;\n\ntype ActionsConfiguration<T extends Parameter[] | [] = []> =\n | Action<T>[]\n | ((ctx: { properties: any; url?: string }) => Action<T>[]);\n\ninterface OnBeforeRequestOptions {\n threadId?: string;\n runId?: string;\n inputMessages: Message[];\n properties: any;\n url?: string;\n}\n\ntype OnBeforeRequestHandler = (options: OnBeforeRequestOptions) => void | Promise<void>;\n\ninterface OnAfterRequestOptions {\n threadId: string;\n runId?: string;\n inputMessages: Message[];\n outputMessages: Message[];\n properties: any;\n url?: string;\n}\n\ntype OnAfterRequestHandler = (options: OnAfterRequestOptions) => void | Promise<void>;\n\ninterface OnStopGenerationOptions {\n threadId: string;\n runId?: string;\n url?: string;\n agentName?: string;\n lastMessage: MessageInput;\n}\ntype OnStopGenerationHandler = (options: OnStopGenerationOptions) => void | Promise<void>;\n\ninterface Middleware {\n /**\n * A function that is called before the request is processed.\n */\n /**\n * @deprecated This middleware hook is deprecated and will be removed in a future version.\n * Use updated middleware integration methods in CopilotRuntimeVNext instead.\n */\n onBeforeRequest?: OnBeforeRequestHandler;\n\n /**\n * A function that is called after the request is processed.\n */\n /**\n * @deprecated This middleware hook is deprecated and will be removed in a future version.\n * Use updated middleware integration methods in CopilotRuntimeVNext instead.\n */\n onAfterRequest?: OnAfterRequestHandler;\n}\n\nexport interface CopilotRuntimeConstructorParams_BASE<T extends Parameter[] | [] = []> {\n /**\n * Middleware to be used by the runtime.\n *\n * ```ts\n * onBeforeRequest: (options: {\n * threadId?: string;\n * runId?: string;\n * inputMessages: Message[];\n * properties: any;\n * }) => void | Promise<void>;\n * ```\n *\n * ```ts\n * onAfterRequest: (options: {\n * threadId?: string;\n * runId?: string;\n * inputMessages: Message[];\n * outputMessages: Message[];\n * properties: any;\n * }) => void | Promise<void>;\n * ```\n */\n /**\n * @deprecated This middleware hook is deprecated and will be removed in a future version.\n * Use updated middleware integration methods in CopilotRuntimeVNext instead.\n */\n middleware?: Middleware;\n\n /*\n * A list of server side actions that can be executed. Will be ignored when remoteActions are set\n */\n actions?: ActionsConfiguration<T>;\n\n /*\n * Deprecated: Use `remoteEndpoints`.\n */\n remoteActions?: CopilotKitEndpoint[];\n\n /*\n * A list of remote actions that can be executed.\n */\n remoteEndpoints?: EndpointDefinition[];\n\n /*\n * An array of LangServer URLs.\n */\n langserve?: RemoteChainParameters[];\n\n /*\n * A map of agent names to AGUI agents.\n * Example agent config:\n * ```ts\n * import { AbstractAgent } from \"@ag-ui/client\";\n * // ...\n * agents: {\n * \"support\": new CustomerSupportAgent(),\n * \"technical\": new TechnicalAgent()\n * }\n * ```\n */\n agents?: Record<string, AbstractAgent>;\n\n /*\n * Delegates agent state processing to the service adapter.\n *\n * When enabled, individual agent state requests will not be processed by the agent itself.\n * Instead, all processing will be handled by the service adapter.\n */\n delegateAgentProcessingToServiceAdapter?: boolean;\n\n /**\n * Configuration for LLM request/response logging.\n * Requires publicApiKey from CopilotKit component to be set:\n *\n * ```tsx\n * <CopilotKit publicApiKey=\"ck_pub_...\" />\n * ```\n *\n * Example logging config:\n * ```ts\n * logging: {\n * enabled: true, // Enable or disable logging\n * progressive: true, // Set to false for buffered logging\n * logger: {\n * logRequest: (data) => langfuse.trace({ name: \"LLM Request\", input: data }),\n * logResponse: (data) => langfuse.trace({ name: \"LLM Response\", output: data }),\n * logError: (errorData) => langfuse.trace({ name: \"LLM Error\", metadata: errorData }),\n * },\n * }\n * ```\n */\n observability_c?: CopilotObservabilityConfig;\n\n /**\n * Configuration for connecting to Model Context Protocol (MCP) servers.\n * Allows fetching and using tools defined on external MCP-compliant servers.\n * Requires providing the `createMCPClient` function during instantiation.\n * @experimental\n */\n mcpServers?: MCPEndpointConfig[];\n\n /**\n * A function that creates an MCP client instance for a given endpoint configuration.\n * This function is responsible for using the appropriate MCP client library\n * (e.g., `@copilotkit/runtime`, `ai`) to establish a connection.\n * Required if `mcpServers` is provided.\n *\n * ```typescript\n * import { experimental_createMCPClient } from \"ai\"; // Import from vercel ai library\n * // ...\n * const runtime = new CopilotRuntime({\n * mcpServers: [{ endpoint: \"...\" }],\n * async createMCPClient(config) {\n * return await experimental_createMCPClient({\n * transport: {\n * type: \"sse\",\n * url: config.endpoint,\n * headers: config.apiKey\n * ? { Authorization: `Bearer ${config.apiKey}` }\n * : undefined,\n * },\n * });\n * }\n * });\n * ```\n */\n createMCPClient?: CreateMCPClientFunction;\n\n /**\n * Optional error handler for comprehensive debugging and observability.\n *\n * **Requires publicApiKey**: Error handling only works when requests include a valid publicApiKey.\n * This is a premium Copilot Cloud feature.\n *\n * @param errorEvent - Structured error event with rich debugging context\n *\n * @example\n * ```typescript\n * const runtime = new CopilotRuntime({\n * onError: (errorEvent) => {\n * debugDashboard.capture(errorEvent);\n * }\n * });\n * ```\n */\n onError?: CopilotErrorHandler;\n\n onStopGeneration?: OnStopGenerationHandler;\n\n // /** Optional transcription service for audio processing. */\n // transcriptionService?: CopilotRuntimeOptionsVNext[\"transcriptionService\"];\n // /** Optional *before* middleware – callback function or webhook URL. */\n // beforeRequestMiddleware?: CopilotRuntimeOptionsVNext[\"beforeRequestMiddleware\"];\n // /** Optional *after* middleware – callback function or webhook URL. */\n // afterRequestMiddleware?: CopilotRuntimeOptionsVNext[\"afterRequestMiddleware\"];\n}\n\ntype BeforeRequestMiddleware = CopilotRuntimeOptionsVNext[\"beforeRequestMiddleware\"];\ntype AfterRequestMiddleware = CopilotRuntimeOptionsVNext[\"afterRequestMiddleware\"];\ntype BeforeRequestMiddlewareFn = Exclude<BeforeRequestMiddleware, string>;\ntype BeforeRequestMiddlewareFnParameters = Parameters<BeforeRequestMiddlewareFn>;\ntype BeforeRequestMiddlewareFnResult = ReturnType<BeforeRequestMiddlewareFn>;\ntype AfterRequestMiddlewareFn = Exclude<AfterRequestMiddleware, string>;\ntype AfterRequestMiddlewareFnParameters = Parameters<AfterRequestMiddlewareFn>;\n\ninterface CopilotRuntimeConstructorParams<T extends Parameter[] | [] = []>\n extends Omit<CopilotRuntimeConstructorParams_BASE<T>, \"agents\">,\n Omit<CopilotRuntimeOptionsVNext, \"agents\" | \"transcriptionService\"> {\n /**\n * TODO: un-omit `transcriptionService` above once it's supported\n *\n * This satisfies...\n * – the optional constraint in `CopilotRuntimeConstructorParams_BASE`\n * – the `MaybePromise<NonEmptyRecord<T>>` constraint in `CopilotRuntimeOptionsVNext`\n * – the `Record<string, AbstractAgent>` constraint in `both\n */\n agents?: MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>;\n}\n\n/**\n * Central runtime object passed to all request handlers.\n */\nexport class CopilotRuntime<const T extends Parameter[] | [] = []> {\n params?: CopilotRuntimeConstructorParams<T>;\n private observability?: CopilotObservabilityConfig;\n // Cache MCP tools per endpoint to avoid re-fetching repeatedly\n private mcpToolsCache: Map<string, BasicAgentConfiguration[\"tools\"]> = new Map();\n private runtimeArgs: CopilotRuntimeOptions;\n private _instance: CopilotRuntimeVNext;\n\n constructor(\n params?: CopilotRuntimeConstructorParams<T> & PartialBy<CopilotRuntimeOptions, \"agents\">,\n ) {\n const agents = params?.agents ?? {};\n const endpointAgents = this.assignEndpointsToAgents(params?.remoteEndpoints ?? []);\n\n // Determine the base runner (user-provided or default)\n const baseRunner = params?.runner ?? new InMemoryAgentRunner();\n\n // Wrap with TelemetryAgentRunner unless telemetry is disabled\n // This ensures we always capture agent execution telemetry when enabled,\n // even if the user provides their own custom runner\n const runner = isTelemetryDisabled()\n ? baseRunner\n : new TelemetryAgentRunner({ runner: baseRunner });\n\n this.runtimeArgs = {\n agents: { ...endpointAgents, ...agents },\n runner,\n // TODO: add support for transcriptionService from CopilotRuntimeOptionsVNext once it is ready\n // transcriptionService: params?.transcriptionService,\n\n beforeRequestMiddleware: this.createOnBeforeRequestHandler(params).bind(this),\n afterRequestMiddleware: this.createOnAfterRequestHandler(params).bind(this),\n };\n this.params = params;\n this.observability = params?.observability_c;\n }\n\n get instance() {\n if (!this._instance) {\n this._instance = new CopilotRuntimeVNext(this.runtimeArgs);\n }\n\n return this._instance;\n }\n\n private assignEndpointsToAgents(\n endpoints: CopilotRuntimeConstructorParams<T>[\"remoteEndpoints\"],\n ): Record<string, AbstractAgent> {\n let result: Record<string, AbstractAgent> = {};\n\n if (\n endpoints.some((endpoint) => resolveEndpointType(endpoint) == EndpointType.LangGraphPlatform)\n ) {\n throw new CopilotKitMisuseError({\n message:\n \"LangGraphPlatformEndpoint in remoteEndpoints is deprecated. \" +\n 'Please use the \"agents\" option instead with LangGraphAgent from \"@copilotkit/runtime/langgraph\". ' +\n 'Example: agents: { myAgent: new LangGraphAgent({ deploymentUrl: \"...\", graphId: \"...\" }) }',\n });\n }\n\n return result;\n }\n\n handleServiceAdapter(serviceAdapter: CopilotServiceAdapter) {\n this.runtimeArgs.agents = Promise.resolve(this.runtimeArgs.agents ?? {}).then(\n async (agents) => {\n let agentsList = agents;\n const isAgentsListEmpty = !Object.keys(agents).length;\n const hasServiceAdapter = Boolean(serviceAdapter);\n const illegalServiceAdapterNames = [\"EmptyAdapter\"];\n const serviceAdapterCanBeUsedForAgent = !illegalServiceAdapterNames.includes(\n serviceAdapter.name,\n );\n\n if (isAgentsListEmpty && (!hasServiceAdapter || !serviceAdapterCanBeUsedForAgent)) {\n throw new CopilotKitMisuseError({\n message:\n \"No default agent provided. Please provide a default agent in the runtime config.\",\n });\n }\n\n if (isAgentsListEmpty) {\n agentsList.default = new BasicAgent({\n model: `${serviceAdapter.provider}/${serviceAdapter.model}`,\n });\n }\n\n const actions = this.params?.actions;\n if (actions) {\n const mcpTools = await this.getToolsFromMCP();\n agentsList = this.assignToolsToAgents(agents, [\n ...this.getToolsFromActions(actions),\n ...mcpTools,\n ]);\n }\n\n return agentsList;\n },\n );\n }\n\n // Receive this.params.action and turn it into the AbstractAgent tools\n private getToolsFromActions(\n actions: ActionsConfiguration<any>,\n ): BasicAgentConfiguration[\"tools\"] {\n // Resolve actions to an array (handle function case)\n const actionsArray =\n typeof actions === \"function\" ? actions({ properties: {}, url: undefined }) : actions;\n\n // Convert each Action to a ToolDefinition\n return actionsArray.map((action) => {\n // Convert JSON schema to Zod schema\n const zodSchema = getZodParameters(action.parameters || []);\n\n return {\n name: action.name,\n description: action.description || \"\",\n parameters: zodSchema,\n execute: () => Promise.resolve(),\n };\n });\n }\n\n private assignToolsToAgents(\n agents: Record<string, AbstractAgent>,\n tools: BasicAgentConfiguration[\"tools\"],\n ): Record<string, AbstractAgent> {\n if (!tools?.length) {\n return agents;\n }\n\n const enrichedAgents: Record<string, AbstractAgent> = { ...agents };\n\n for (const [agentId, agent] of Object.entries(enrichedAgents)) {\n const existingConfig = (Reflect.get(agent, \"config\") ?? {}) as BasicAgentConfiguration;\n const existingTools = existingConfig.tools ?? [];\n\n const updatedConfig: BasicAgentConfiguration = {\n ...existingConfig,\n tools: [...existingTools, ...tools],\n };\n\n Reflect.set(agent, \"config\", updatedConfig);\n enrichedAgents[agentId] = agent;\n }\n\n return enrichedAgents;\n }\n\n private createOnBeforeRequestHandler(\n params?: CopilotRuntimeConstructorParams<T> & PartialBy<CopilotRuntimeOptions, \"agents\">,\n ) {\n return async (hookParams: BeforeRequestMiddlewareFnParameters[0]) => {\n const { request } = hookParams;\n\n // Capture telemetry for copilot request creation\n const publicApiKey = request.headers.get(\"x-copilotcloud-public-api-key\");\n const body = (await readBody(request)) as RunAgentInput;\n const forwardedProps = body.forwardedProps as\n | {\n cloud?: { guardrails?: unknown };\n metadata?: { requestType?: string };\n }\n | undefined;\n\n // Get cloud base URL from environment or default\n const cloudBaseUrl = process.env.COPILOT_CLOUD_BASE_URL || \"https://api.cloud.copilotkit.ai\";\n\n telemetry.capture(\"oss.runtime.copilot_request_created\", {\n \"cloud.guardrails.enabled\": forwardedProps?.cloud?.guardrails !== undefined,\n requestType: forwardedProps?.metadata?.requestType ?? \"unknown\",\n \"cloud.api_key_provided\": !!publicApiKey,\n ...(publicApiKey ? { \"cloud.public_api_key\": publicApiKey } : {}),\n \"cloud.base_url\": cloudBaseUrl,\n });\n\n // TODO: get public api key and run with expected data\n // if (this.observability?.enabled && this.params.publicApiKey) {\n // this.logObservabilityBeforeRequest()\n // }\n\n // TODO: replace hooksParams top argument type with BeforeRequestMiddlewareParameters when exported\n params?.beforeRequestMiddleware?.(hookParams);\n\n if (params?.middleware?.onBeforeRequest) {\n const { request, runtime, path } = hookParams;\n const gqlMessages = (aguiToGQL(body.messages) as Message[]).reduce(\n (acc, msg) => {\n if (\"role\" in msg && msg.role === \"user\") {\n acc.inputMessages.push(msg);\n } else {\n acc.outputMessages.push(msg);\n }\n return acc;\n },\n { inputMessages: [] as Message[], outputMessages: [] as Message[] },\n );\n const { inputMessages, outputMessages } = gqlMessages;\n params.middleware.onBeforeRequest({\n threadId: body.threadId,\n runId: body.runId,\n inputMessages,\n properties: body.forwardedProps,\n url: request.url,\n } satisfies OnBeforeRequestOptions);\n }\n };\n }\n\n private createOnAfterRequestHandler(\n params?: CopilotRuntimeConstructorParams<T> & PartialBy<CopilotRuntimeOptions, \"agents\">,\n ) {\n return async (hookParams: AfterRequestMiddlewareFnParameters[0]) => {\n // TODO: get public api key and run with expected data\n // if (this.observability?.enabled && publicApiKey) {\n // this.logObservabilityAfterRequest()\n // }\n\n // TODO: replace hooksParams top argument type with AfterRequestMiddlewareParameters when exported\n params?.afterRequestMiddleware?.(hookParams);\n\n if (params?.middleware?.onAfterRequest) {\n // TODO: provide old expected params here when available\n // @ts-expect-error -- missing arguments.\n params.middleware.onAfterRequest({});\n }\n };\n }\n\n // Observability Methods\n\n /**\n * Log LLM request if observability is enabled\n */\n private async logObservabilityBeforeRequest(requestData: LLMRequestData): Promise<void> {\n try {\n await this.observability.hooks.handleRequest(requestData);\n } catch (error) {\n console.error(\"Error logging LLM request:\", error);\n }\n }\n\n /**\n * Log final LLM response after request completes\n */\n private logObservabilityAfterRequest(\n outputMessagesPromise: Promise<Message[]>,\n baseData: {\n threadId: string;\n runId?: string;\n model?: string;\n provider?: string;\n agentName?: string;\n nodeName?: string;\n },\n streamedChunks: any[],\n requestStartTime: number,\n publicApiKey?: string,\n ): void {\n try {\n outputMessagesPromise\n .then((outputMessages) => {\n const responseData: LLMResponseData = {\n threadId: baseData.threadId,\n runId: baseData.runId,\n model: baseData.model,\n // Use collected chunks for progressive mode or outputMessages for regular mode\n output: this.observability.progressive ? streamedChunks : outputMessages,\n latency: Date.now() - requestStartTime,\n timestamp: Date.now(),\n provider: baseData.provider,\n isFinalResponse: true,\n agentName: baseData.agentName,\n nodeName: baseData.nodeName,\n };\n\n try {\n this.observability.hooks.handleResponse(responseData);\n } catch (logError) {\n console.error(\"Error logging LLM response:\", logError);\n }\n })\n .catch((error) => {\n console.error(\"Failed to get output messages for logging:\", error);\n });\n } catch (error) {\n console.error(\"Error setting up logging for LLM response:\", error);\n }\n }\n\n // Resolve MCP tools to BasicAgent tool definitions\n // Optionally accepts request-scoped properties to merge request-provided mcpServers\n private async getToolsFromMCP(options?: {\n properties?: Record<string, unknown>;\n }): Promise<BasicAgentConfiguration[\"tools\"]> {\n const runtimeMcpServers = (this.params?.mcpServers ?? []) as MCPEndpointConfig[];\n const createMCPClient = this.params?.createMCPClient as CreateMCPClientFunction | undefined;\n\n // If no runtime config and no request overrides, nothing to do\n const requestMcpServers = ((\n options?.properties as { mcpServers?: MCPEndpointConfig[] } | undefined\n )?.mcpServers ??\n (options?.properties as { mcpEndpoints?: MCPEndpointConfig[] } | undefined)?.mcpEndpoints ??\n []) as MCPEndpointConfig[];\n\n const hasAnyServers =\n (runtimeMcpServers?.length ?? 0) > 0 || (requestMcpServers?.length ?? 0) > 0;\n if (!hasAnyServers) {\n return [];\n }\n\n if (!createMCPClient) {\n // Mirror legacy behavior: when servers are provided without a factory, treat as misconfiguration\n throw new CopilotKitMisuseError({\n message:\n \"MCP Integration Error: `mcpServers` were provided, but the `createMCPClient` function was not passed to the CopilotRuntime constructor. Please provide an implementation for `createMCPClient`.\",\n });\n }\n\n // Merge and dedupe endpoints by URL; request-level overrides take precedence\n const effectiveEndpoints = (() => {\n const byUrl = new Map<string, MCPEndpointConfig>();\n for (const ep of runtimeMcpServers) {\n if (ep?.endpoint) byUrl.set(ep.endpoint, ep);\n }\n for (const ep of requestMcpServers) {\n if (ep?.endpoint) byUrl.set(ep.endpoint, ep);\n }\n return Array.from(byUrl.values());\n })();\n\n const allTools: BasicAgentConfiguration[\"tools\"] = [];\n\n for (const config of effectiveEndpoints) {\n const endpointUrl = config.endpoint;\n // Return cached tool definitions when available\n const cached = this.mcpToolsCache.get(endpointUrl);\n if (cached) {\n allTools.push(...cached);\n continue;\n }\n\n try {\n const client = await createMCPClient(config);\n const toolsMap = await client.tools();\n\n const toolDefs: BasicAgentConfiguration[\"tools\"] = Object.entries(toolsMap).map(\n ([toolName, tool]: [string, MCPTool]) => {\n const params: Parameter[] = extractParametersFromSchema(tool);\n const zodSchema = getZodParameters(params);\n return {\n name: toolName,\n description: tool.description || `MCP tool: ${toolName} (from ${endpointUrl})`,\n parameters: zodSchema,\n execute: () => Promise.resolve(),\n };\n },\n );\n\n // Cache per endpoint and add to aggregate\n this.mcpToolsCache.set(endpointUrl, toolDefs);\n allTools.push(...toolDefs);\n } catch (error) {\n console.error(\n `MCP: Failed to fetch tools from endpoint ${endpointUrl}. Skipping. Error:`,\n error,\n );\n // Cache empty to prevent repeated attempts within lifecycle\n this.mcpToolsCache.set(endpointUrl, []);\n }\n }\n\n // Dedupe tools by name while preserving last-in wins (request overrides)\n const dedupedByName = new Map<string, (typeof allTools)[number]>();\n for (const tool of allTools) {\n dedupedByName.set(tool.name, tool);\n }\n\n return Array.from(dedupedByName.values());\n }\n}\n\n// The two functions below are \"factory functions\", meant to create the action objects that adhere to the expected interfaces\nexport function copilotKitEndpoint(config: Omit<CopilotKitEndpoint, \"type\">): CopilotKitEndpoint {\n return {\n ...config,\n type: EndpointType.CopilotKit,\n };\n}\n\nexport function langGraphPlatformEndpoint(\n config: Omit<LangGraphPlatformEndpoint, \"type\">,\n): LangGraphPlatformEndpoint {\n return {\n ...config,\n type: EndpointType.LangGraphPlatform,\n };\n}\n\nexport function resolveEndpointType(endpoint: EndpointDefinition) {\n if (!endpoint.type) {\n if (\"deploymentUrl\" in endpoint && \"agents\" in endpoint) {\n return EndpointType.LangGraphPlatform;\n } else {\n return EndpointType.CopilotKit;\n }\n }\n\n return endpoint.type;\n}\n","import * as gql from \"../types/converted/index\";\nimport { MessageRole } from \"../types/enums\";\nimport agui from \"@copilotkit/shared\"; // named agui for clarity, but this only includes agui message types\n\n// Helper function to extract agent name from message\nfunction extractAgentName(message: agui.Message): string {\n if (message.role !== \"assistant\") {\n throw new Error(`Cannot extract agent name from message with role ${message.role}`);\n }\n\n return message.agentName || \"unknown\";\n}\n\n// Type guard for agent state message\nfunction isAgentStateMessage(message: agui.Message): boolean {\n return message.role === \"assistant\" && \"agentName\" in message && \"state\" in message;\n}\n\n// Type guard for messages with image property\nfunction hasImageProperty(message: agui.Message): boolean {\n const canContainImage = message.role === \"assistant\" || message.role === \"user\";\n if (!canContainImage || message.image === undefined) {\n return false;\n }\n\n const isMalformed = message.image.format === undefined || message.image.bytes === undefined;\n if (isMalformed) {\n return false;\n }\n\n return true;\n}\n\nfunction normalizeMessageContent(content: agui.Message[\"content\"]): string {\n if (typeof content === \"string\" || typeof content === \"undefined\") {\n return content || \"\";\n }\n\n if (Array.isArray(content)) {\n return content\n .map((part) => {\n if (part?.type === \"text\") {\n return part.text;\n }\n if (part?.type === \"binary\") {\n return part.data || part.url || part.filename || `[binary:${part.mimeType}]`;\n }\n return \"\";\n })\n .filter(Boolean)\n .join(\"\\n\");\n }\n\n if (content && typeof content === \"object\") {\n try {\n return JSON.stringify(content);\n } catch (error) {\n console.warn(\"Failed to serialize message content\", error);\n }\n }\n\n return String(content ?? \"\");\n}\n\n/*\n ----------------------------\n AGUI Message -> GQL Message\n ----------------------------\n*/\nexport function aguiToGQL(\n messages: agui.Message[] | agui.Message,\n actions?: Record<string, any>,\n coAgentStateRenders?: Record<string, any>,\n): gql.Message[] {\n const gqlMessages: gql.Message[] = [];\n messages = Array.isArray(messages) ? messages : [messages];\n\n // Track tool call names by their IDs for use in result messages\n const toolCallNames: Record<string, string> = {};\n\n for (const message of messages) {\n // Agent state message support\n if (isAgentStateMessage(message)) {\n const agentName = extractAgentName(message);\n const state = \"state\" in message && message.state ? message.state : {};\n gqlMessages.push(\n new gql.AgentStateMessage({\n id: message.id,\n agentName,\n state,\n role: gql.Role.assistant,\n }),\n );\n // Optionally preserve render function\n if (\"generativeUI\" in message && message.generativeUI && coAgentStateRenders) {\n coAgentStateRenders[agentName] = {\n name: agentName,\n render: message.generativeUI,\n };\n }\n continue;\n }\n\n if (hasImageProperty(message)) {\n gqlMessages.push(aguiMessageWithImageToGQLMessage(message));\n continue;\n }\n\n // Action execution message support\n if (message.role === \"assistant\" && message.toolCalls) {\n gqlMessages.push(aguiTextMessageToGQLMessage(message));\n for (const toolCall of message.toolCalls) {\n // Track the tool call name by its ID\n toolCallNames[toolCall.id] = toolCall.function.name;\n\n const actionExecMsg = aguiToolCallToGQLActionExecution(toolCall, message.id);\n // Preserve render function in actions context\n if (\"generativeUI\" in message && message.generativeUI && actions) {\n const actionName = toolCall.function.name;\n // Check for specific action first, then wild card action\n const specificAction = Object.values(actions).find(\n (action: any) => action.name === actionName,\n );\n const wildcardAction = Object.values(actions).find((action: any) => action.name === \"*\");\n\n // Assign render function to the matching action (specific takes priority)\n if (specificAction) {\n specificAction.render = message.generativeUI;\n } else if (wildcardAction) {\n wildcardAction.render = message.generativeUI;\n }\n }\n gqlMessages.push(actionExecMsg);\n }\n continue;\n }\n // Regular text messages\n if (\n message.role === \"developer\" ||\n message.role === \"system\" ||\n message.role === \"assistant\" ||\n message.role === \"user\"\n ) {\n gqlMessages.push(aguiTextMessageToGQLMessage(message));\n continue;\n }\n // Tool result message\n if (message.role === \"tool\") {\n gqlMessages.push(aguiToolMessageToGQLResultMessage(message, toolCallNames));\n continue;\n }\n throw new Error(\n `Unknown message role: \"${(message as any).role}\" in message with id: ${(message as any).id}`,\n );\n }\n\n return gqlMessages;\n}\n\nexport function aguiTextMessageToGQLMessage(message: agui.Message): gql.TextMessage {\n if (\n message.role !== \"developer\" &&\n message.role !== \"system\" &&\n message.role !== \"assistant\" &&\n message.role !== \"user\"\n ) {\n throw new Error(`Cannot convert message with role ${message.role} to TextMessage`);\n }\n\n let roleValue: MessageRole;\n\n if (message.role === \"developer\") {\n roleValue = gql.Role.developer;\n } else if (message.role === \"system\") {\n roleValue = gql.Role.system;\n } else if (message.role === \"assistant\") {\n roleValue = gql.Role.assistant;\n } else {\n roleValue = gql.Role.user;\n }\n\n return new gql.TextMessage({\n id: message.id,\n content: normalizeMessageContent(message.content),\n role: roleValue,\n });\n}\n\nexport function aguiToolCallToGQLActionExecution(\n toolCall: agui.ToolCall,\n parentMessageId: string,\n): gql.ActionExecutionMessage {\n if (toolCall.type !== \"function\") {\n throw new Error(`Unsupported tool call type: ${toolCall.type}`);\n }\n\n // Handle arguments - they should be a JSON string in AGUI format,\n // but we need to convert them to an object for GQL format\n let argumentsObj: any;\n\n if (typeof toolCall.function.arguments === \"string\") {\n // Expected case: arguments is a JSON string\n try {\n argumentsObj = JSON.parse(toolCall.function.arguments);\n } catch (error) {\n console.warn(`Failed to parse tool call arguments for ${toolCall.function.name}:`, error);\n // Provide fallback empty object to prevent application crash\n argumentsObj = {};\n }\n } else if (\n typeof toolCall.function.arguments === \"object\" &&\n toolCall.function.arguments !== null\n ) {\n // Backward compatibility: arguments is already an object\n argumentsObj = toolCall.function.arguments;\n } else {\n // Fallback for undefined, null, or other types\n console.warn(\n `Invalid tool call arguments type for ${toolCall.function.name}:`,\n typeof toolCall.function.arguments,\n );\n argumentsObj = {};\n }\n\n // Always include name and arguments\n return new gql.ActionExecutionMessage({\n id: toolCall.id,\n name: toolCall.function.name,\n arguments: argumentsObj,\n parentMessageId: parentMessageId,\n });\n}\n\nexport function aguiToolMessageToGQLResultMessage(\n message: agui.Message,\n toolCallNames: Record<string, string>,\n): gql.ResultMessage {\n if (message.role !== \"tool\") {\n throw new Error(`Cannot convert message with role ${message.role} to ResultMessage`);\n }\n\n if (!message.toolCallId) {\n throw new Error(\"Tool message must have a toolCallId\");\n }\n\n const actionName = toolCallNames[message.toolCallId] || \"unknown\";\n\n // Handle result content - it could be a string or an object that needs serialization\n let resultContent: string;\n const messageContent = message.content || \"\";\n\n if (typeof messageContent === \"string\") {\n // Expected case: content is already a string\n resultContent = messageContent;\n } else if (typeof messageContent === \"object\" && messageContent !== null) {\n // Handle case where content is an object that needs to be serialized\n try {\n resultContent = JSON.stringify(messageContent);\n } catch (error) {\n console.warn(`Failed to stringify tool result for ${actionName}:`, error);\n resultContent = String(messageContent);\n }\n } else {\n // Handle other types (number, boolean, etc.)\n resultContent = String(messageContent);\n }\n\n return new gql.ResultMessage({\n id: message.id,\n result: resultContent,\n actionExecutionId: message.toolCallId,\n actionName: message.toolName || actionName,\n });\n}\n\n// New function to handle AGUI messages with render functions\nexport function aguiMessageWithRenderToGQL(\n message: agui.Message,\n actions?: Record<string, any>,\n coAgentStateRenders?: Record<string, any>,\n): gql.Message[] {\n // Handle the special case: assistant messages with render function but no tool calls\n if (\n message.role === \"assistant\" &&\n \"generativeUI\" in message &&\n message.generativeUI &&\n !message.toolCalls\n ) {\n const gqlMessages: gql.Message[] = [];\n gqlMessages.push(\n new gql.AgentStateMessage({\n id: message.id,\n agentName: \"unknown\",\n state: {},\n role: gql.Role.assistant,\n }),\n );\n if (coAgentStateRenders) {\n coAgentStateRenders.unknown = {\n name: \"unknown\",\n render: message.generativeUI,\n };\n }\n return gqlMessages;\n }\n\n // For all other cases, delegate to aguiToGQL\n return aguiToGQL([message], actions, coAgentStateRenders);\n}\n\nexport function aguiMessageWithImageToGQLMessage(message: agui.Message): gql.ImageMessage {\n if (!hasImageProperty(message)) {\n throw new Error(`Cannot convert message to ImageMessage: missing format or bytes`);\n }\n\n let roleValue: MessageRole;\n if (message.role === \"assistant\") {\n roleValue = gql.Role.assistant;\n } else {\n roleValue = gql.Role.user;\n }\n\n if (message.role !== \"assistant\" && message.role !== \"user\") {\n throw new Error(`Cannot convert message with role ${message.role} to ImageMessage`);\n }\n\n return new gql.ImageMessage({\n id: message.id,\n format: message.image!.format,\n bytes: message.image!.bytes,\n role: roleValue,\n });\n}\n","/**\n * TelemetryAgentRunner - A wrapper around AgentRunner that adds telemetry\n * for agent execution streams.\n *\n * This captures the following telemetry events:\n * - oss.runtime.agent_execution_stream_started - when an agent execution starts\n * - oss.runtime.agent_execution_stream_ended - when an agent execution completes\n * - oss.runtime.agent_execution_stream_errored - when an agent execution fails\n */\n\nimport { type AgentRunner, InMemoryAgentRunner } from \"@copilotkitnext/runtime\";\nimport { createHash } from \"node:crypto\";\nimport { tap, catchError, finalize } from \"rxjs\";\nimport telemetry from \"../telemetry-client\";\nimport type { AgentExecutionResponseInfo } from \"@copilotkit/shared/src/telemetry/events\";\n\n/**\n * Configuration options for TelemetryAgentRunner\n */\nexport interface TelemetryAgentRunnerConfig {\n /**\n * The underlying runner to delegate to\n * If not provided, defaults to InMemoryAgentRunner\n */\n runner?: AgentRunner;\n\n /**\n * Optional LangSmith API key (will be hashed for telemetry)\n */\n langsmithApiKey?: string;\n}\n\n/**\n * An AgentRunner wrapper that adds telemetry tracking for agent executions.\n *\n * Usage:\n * ```ts\n * const runtime = new CopilotRuntime({\n * runner: new TelemetryAgentRunner(),\n * // or with custom runner:\n * runner: new TelemetryAgentRunner({ runner: customRunner }),\n * });\n * ```\n */\nexport class TelemetryAgentRunner implements AgentRunner {\n private readonly _runner: AgentRunner;\n private readonly hashedLgcKey: string | undefined;\n\n constructor(config?: TelemetryAgentRunnerConfig) {\n this._runner = config?.runner ?? new InMemoryAgentRunner();\n this.hashedLgcKey = config?.langsmithApiKey\n ? createHash(\"sha256\").update(config.langsmithApiKey).digest(\"hex\")\n : undefined;\n }\n\n /**\n * Runs an agent with telemetry tracking.\n * Wraps the underlying runner's Observable stream with telemetry events.\n */\n run(...args: Parameters<AgentRunner[\"run\"]>): ReturnType<AgentRunner[\"run\"]> {\n const streamInfo: AgentExecutionResponseInfo = {\n hashedLgcKey: this.hashedLgcKey,\n };\n let streamErrored = false;\n\n // Capture stream started event\n telemetry.capture(\"oss.runtime.agent_execution_stream_started\", {\n hashedLgcKey: this.hashedLgcKey,\n });\n\n // Delegate to the underlying runner and wrap with telemetry\n return this._runner.run(...args).pipe(\n // Extract metadata from events if available\n tap((event) => {\n // Try to extract provider/model info from raw events\n const rawEvent = (\n event as {\n rawEvent?: { metadata?: Record<string, unknown>; data?: Record<string, unknown> };\n }\n ).rawEvent;\n if (rawEvent?.data) {\n const data = rawEvent.data as { output?: { model?: string } };\n if (data?.output?.model) {\n streamInfo.model = data.output.model;\n streamInfo.provider = data.output.model;\n }\n }\n if (rawEvent?.metadata) {\n const metadata = rawEvent.metadata as {\n langgraph_host?: string;\n langgraph_version?: string;\n };\n if (metadata?.langgraph_host) {\n streamInfo.langGraphHost = metadata.langgraph_host;\n }\n if (metadata?.langgraph_version) {\n streamInfo.langGraphVersion = metadata.langgraph_version;\n }\n }\n }),\n catchError((error) => {\n // Capture stream error event\n streamErrored = true;\n telemetry.capture(\"oss.runtime.agent_execution_stream_errored\", {\n ...streamInfo,\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }),\n finalize(() => {\n // Capture stream ended event (only if not errored)\n if (!streamErrored) {\n telemetry.capture(\"oss.runtime.agent_execution_stream_ended\", streamInfo);\n }\n }),\n );\n }\n\n /**\n * Delegates to the underlying runner's connect method\n */\n connect(...args: Parameters<AgentRunner[\"connect\"]>): ReturnType<AgentRunner[\"connect\"]> {\n return this._runner.connect(...args);\n }\n\n /**\n * Delegates to the underlying runner's isRunning method\n */\n isRunning(...args: Parameters<AgentRunner[\"isRunning\"]>): ReturnType<AgentRunner[\"isRunning\"]> {\n return this._runner.isRunning(...args);\n }\n\n /**\n * Delegates to the underlying runner's stop method\n */\n stop(...args: Parameters<AgentRunner[\"stop\"]>): ReturnType<AgentRunner[\"stop\"]> {\n return this._runner.stop(...args);\n }\n}\n","import { GraphQLContext } from \"../integrations\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { Message } from \"../../graphql/types/converted\";\nimport { MetaEventInput } from \"../../graphql/inputs/meta-event.input\";\n\nexport interface BaseEndpointDefinition<TActionType extends EndpointType> {\n type?: TActionType;\n}\n\nexport interface CopilotKitEndpoint extends BaseEndpointDefinition<EndpointType.CopilotKit> {\n url: string;\n onBeforeRequest?: ({ ctx }: { ctx: GraphQLContext }) => {\n headers?: Record<string, string> | undefined;\n };\n}\n\nexport interface LangGraphPlatformAgent {\n name: string;\n description: string;\n assistantId?: string;\n}\n\nexport interface LangGraphPlatformEndpoint\n extends BaseEndpointDefinition<EndpointType.LangGraphPlatform> {\n deploymentUrl: string;\n langsmithApiKey?: string | null;\n agents: LangGraphPlatformAgent[];\n}\n\nexport type RemoteActionInfoResponse = {\n actions: any[];\n agents: any[];\n};\n\nexport type RemoteAgentHandlerParams = {\n name: string;\n actionInputsWithoutAgents: ActionInput[];\n threadId?: string;\n nodeName?: string;\n additionalMessages?: Message[];\n metaEvents?: MetaEventInput[];\n};\n\nexport type EndpointDefinition = CopilotKitEndpoint | LangGraphPlatformEndpoint;\n\nexport enum EndpointType {\n CopilotKit = \"copilotKit\",\n LangGraphPlatform = \"langgraph-platform\",\n}\n","import { Action, Parameter } from \"@copilotkit/shared\";\n\n/**\n * Represents a tool provided by an MCP server.\n */\nexport interface MCPTool {\n description?: string;\n /** Schema defining parameters, mirroring the MCP structure. */\n schema?: {\n parameters?: {\n properties?: Record<string, any>;\n required?: string[];\n jsonSchema?: Record<string, any>;\n };\n };\n /** The function to call to execute the tool on the MCP server. */\n execute(params: any): Promise<any>;\n}\n\n/**\n * Defines the contract for *any* MCP client implementation the user might provide.\n */\nexport interface MCPClient {\n /** A method that returns a map of tool names to MCPTool objects available from the connected MCP server. */\n tools(): Promise<Record<string, MCPTool>>;\n /** An optional method for cleanup if the underlying client requires explicit disconnection. */\n close?(): Promise<void>;\n}\n\n/**\n * Configuration for connecting to an MCP endpoint.\n */\nexport interface MCPEndpointConfig {\n endpoint: string;\n apiKey?: string;\n}\n\n/**\n * Extracts CopilotKit-compatible parameters from an MCP tool schema.\n * @param toolOrSchema The schema object from an MCPTool or the full MCPTool object.\n * @returns An array of Parameter objects.\n */\nexport function extractParametersFromSchema(\n toolOrSchema?: MCPTool | MCPTool[\"schema\"],\n): Parameter[] {\n const parameters: Parameter[] = [];\n\n // Handle either full tool object or just schema\n const schema =\n \"schema\" in (toolOrSchema || {})\n ? (toolOrSchema as MCPTool).schema\n : (toolOrSchema as MCPTool[\"schema\"]);\n\n const toolParameters = schema?.parameters?.jsonSchema || schema?.parameters;\n const properties = toolParameters?.properties;\n const requiredParams = new Set(toolParameters?.required || []);\n\n if (!properties) {\n return parameters;\n }\n\n for (const paramName in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, paramName)) {\n const paramDef = properties[paramName];\n\n // Enhanced type extraction with support for complex types\n let type = paramDef.type || \"string\";\n let description = paramDef.description || \"\";\n\n // Handle arrays with items\n if (type === \"array\" && paramDef.items) {\n const itemType = paramDef.items.type || \"object\";\n if (itemType === \"object\" && paramDef.items.properties) {\n // For arrays of objects, describe the structure\n const itemProperties = Object.keys(paramDef.items.properties).join(\", \");\n description =\n description +\n (description ? \" \" : \"\") +\n `Array of objects with properties: ${itemProperties}`;\n } else {\n // For arrays of primitives\n type = `array<${itemType}>`;\n }\n }\n\n // Handle enums\n if (paramDef.enum && Array.isArray(paramDef.enum)) {\n const enumValues = paramDef.enum.join(\" | \");\n description = description + (description ? \" \" : \"\") + `Allowed values: ${enumValues}`;\n }\n\n // Handle objects with properties\n if (type === \"object\" && paramDef.properties) {\n const objectProperties = Object.keys(paramDef.properties).join(\", \");\n description =\n description + (description ? \" \" : \"\") + `Object with properties: ${objectProperties}`;\n }\n\n parameters.push({\n name: paramName,\n type: type,\n description: description,\n required: requiredParams.has(paramName),\n });\n }\n }\n\n return parameters;\n}\n\n/**\n * Converts a map of MCPTools into an array of CopilotKit Actions.\n * @param mcpTools A record mapping tool names to MCPTool objects.\n * @param mcpEndpoint The endpoint URL from which these tools were fetched.\n * @returns An array of Action<any> objects.\n */\nexport function convertMCPToolsToActions(\n mcpTools: Record<string, MCPTool>,\n mcpEndpoint: string,\n): Action<any>[] {\n const actions: Action<any>[] = [];\n\n for (const [toolName, tool] of Object.entries(mcpTools)) {\n const parameters = extractParametersFromSchema(tool);\n\n const handler = async (params: any): Promise<any> => {\n try {\n const result = await tool.execute(params);\n // Ensure the result is a string or stringify it, as required by many LLMs.\n // This might need adjustment depending on how different LLMs handle tool results.\n return typeof result === \"string\" ? result : JSON.stringify(result);\n } catch (error) {\n console.error(\n `Error executing MCP tool '${toolName}' from endpoint ${mcpEndpoint}:`,\n error,\n );\n // Re-throw or format the error for the LLM\n throw new Error(\n `Execution failed for MCP tool '${toolName}': ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n };\n\n actions.push({\n name: toolName,\n description: tool.description || `MCP tool: ${toolName} (from ${mcpEndpoint})`,\n parameters: parameters,\n handler: handler,\n // Add metadata for easier identification/debugging\n _isMCPTool: true,\n _mcpEndpoint: mcpEndpoint,\n } as Action<any> & { _isMCPTool: boolean; _mcpEndpoint: string }); // Type assertion for metadata\n }\n\n return actions;\n}\n\n/**\n * Generate better instructions for using MCP tools\n * This is used to enhance the system prompt with tool documentation\n */\nexport function generateMcpToolInstructions(toolsMap: Record<string, MCPTool>): string {\n if (!toolsMap || Object.keys(toolsMap).length === 0) {\n return \"\";\n }\n\n const toolEntries = Object.entries(toolsMap);\n\n // Generate documentation for each tool\n const toolsDoc = toolEntries\n .map(([name, tool]) => {\n // Extract schema information if available\n let paramsDoc = \" No parameters required\";\n\n try {\n if (tool.schema && typeof tool.schema === \"object\") {\n const schema = tool.schema as any;\n\n // Extract parameters from JSON Schema - check both schema.parameters.properties and schema.properties\n const toolParameters = schema.parameters?.jsonSchema || schema.parameters;\n const properties = toolParameters?.properties || schema.properties;\n const requiredParams = toolParameters?.required || schema.required || [];\n\n if (properties) {\n // Build parameter documentation from properties with enhanced type information\n const paramsList = Object.entries(properties).map(([paramName, propSchema]) => {\n const propDetails = propSchema as any;\n const requiredMark = requiredParams.includes(paramName) ? \"*\" : \"\";\n let typeInfo = propDetails.type || \"any\";\n let description = propDetails.description ? ` - ${propDetails.description}` : \"\";\n\n // Enhanced type display for complex schemas\n if (typeInfo === \"array\" && propDetails.items) {\n const itemType = propDetails.items.type || \"object\";\n if (itemType === \"object\" && propDetails.items.properties) {\n const itemProps = Object.keys(propDetails.items.properties).join(\", \");\n typeInfo = `array<object>`;\n description =\n description +\n (description ? \" \" : \" - \") +\n `Array of objects with properties: ${itemProps}`;\n } else {\n typeInfo = `array<${itemType}>`;\n }\n }\n\n // Handle enums\n if (propDetails.enum && Array.isArray(propDetails.enum)) {\n const enumValues = propDetails.enum.join(\" | \");\n description =\n description + (description ? \" \" : \" - \") + `Allowed values: ${enumValues}`;\n }\n\n // Handle objects\n if (typeInfo === \"object\" && propDetails.properties) {\n const objectProps = Object.keys(propDetails.properties).join(\", \");\n description =\n description +\n (description ? \" \" : \" - \") +\n `Object with properties: ${objectProps}`;\n }\n\n return ` - ${paramName}${requiredMark} (${typeInfo})${description}`;\n });\n\n if (paramsList.length > 0) {\n paramsDoc = paramsList.join(\"\\n\");\n }\n }\n }\n } catch (e) {\n console.error(`Error parsing schema for tool ${name}:`, e);\n }\n\n return `- ${name}: ${tool.description || \"\"}\n${paramsDoc}`;\n })\n .join(\"\\n\\n\");\n\n return `You have access to the following external tools provided by Model Context Protocol (MCP) servers:\n\n${toolsDoc}\n\nWhen using these tools:\n1. Only provide valid parameters according to their type requirements\n2. Required parameters are marked with *\n3. For array parameters, provide data in the correct array format\n4. For object parameters, include all required nested properties\n5. For enum parameters, use only the allowed values listed\n6. Format API calls correctly with the expected parameter structure\n7. Always check tool responses to determine your next action`;\n}\n","import { Field, ObjectType } from \"type-graphql\";\n\n@ObjectType()\nexport class Agent {\n @Field(() => String)\n id: string;\n\n @Field(() => String)\n name: string;\n\n @Field(() => String)\n description?: string;\n}\n\n@ObjectType()\nexport class AgentsResponse {\n @Field(() => [Agent])\n agents: Agent[];\n}\n","import { ActionExecutionMessage, ResultMessage, TextMessage } from \"../../graphql/types/converted\";\n\nexport enum LangGraphEventTypes {\n OnChainStart = \"on_chain_start\",\n OnChainStream = \"on_chain_stream\",\n OnChainEnd = \"on_chain_end\",\n OnChatModelStart = \"on_chat_model_start\",\n OnChatModelStream = \"on_chat_model_stream\",\n OnChatModelEnd = \"on_chat_model_end\",\n OnToolStart = \"on_tool_start\",\n OnToolEnd = \"on_tool_end\",\n OnCopilotKitStateSync = \"on_copilotkit_state_sync\",\n OnCopilotKitEmitMessage = \"on_copilotkit_emit_message\",\n OnCopilotKitEmitToolCall = \"on_copilotkit_emit_tool_call\",\n OnCustomEvent = \"on_custom_event\",\n OnInterrupt = \"on_interrupt\",\n OnCopilotKitInterrupt = \"on_copilotkit_interrupt\",\n OnCopilotKitError = \"on_copilotkit_error\",\n}\n\nexport enum MetaEventNames {\n LangGraphInterruptEvent = \"LangGraphInterruptEvent\",\n CopilotKitLangGraphInterruptEvent = \"CopilotKitLangGraphInterruptEvent\",\n}\n\nexport enum CustomEventNames {\n CopilotKitManuallyEmitMessage = \"copilotkit_manually_emit_message\",\n CopilotKitManuallyEmitToolCall = \"copilotkit_manually_emit_tool_call\",\n CopilotKitManuallyEmitIntermediateState = \"copilotkit_manually_emit_intermediate_state\",\n CopilotKitExit = \"copilotkit_exit\",\n}\n\ntype LangGraphOnCopilotKitStateSyncEvent = {\n event: LangGraphEventTypes.OnCopilotKitStateSync;\n thread_id: string;\n agent_name: string;\n node_name: string;\n run_id: string;\n active: boolean;\n role: string;\n state: any;\n running: boolean;\n};\n\ntype LangGraphOnChainStartEvent = {\n event: LangGraphEventTypes.OnChainStart;\n run_id: string;\n name: string;\n tags: string[];\n metadata: { thread_id: string };\n data: {\n input: any;\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChainEndEvent = {\n event: LangGraphEventTypes.OnChainEnd;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n };\n data: {\n input: any;\n output: any;\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChatModelStartEvent = {\n event: LangGraphEventTypes.OnChatModelStart;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n ls_provider: string;\n ls_model_name: string;\n ls_model_type: string;\n ls_temperature: number;\n };\n data: {\n input: {\n messages: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string;\n type: string;\n id: string;\n };\n }[][];\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChatModelStreamEvent = {\n event: LangGraphEventTypes.OnChatModelStream;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n ls_provider: string;\n ls_model_name: string;\n ls_model_type: string;\n ls_temperature: number;\n };\n data: {\n chunk: {\n lc: number;\n type: string;\n id: string;\n kwargs: {\n content: string | { text: string; type: string; index: number }[];\n additional_kwargs: {\n tool_calls: {\n index: number;\n id: string;\n function: { arguments: string; name: string };\n type: string;\n }[];\n };\n type: string;\n id: string;\n tool_calls: { name: string; args: {}; id: string; type: string }[];\n tool_call_chunks: {\n name: string;\n args: string;\n id: string;\n index: number;\n type: string;\n }[];\n invalid_tool_calls: any[];\n };\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChatModelEndEvent = {\n event: LangGraphEventTypes.OnChatModelEnd;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n ls_provider: string;\n ls_model_name: string;\n ls_model_type: string;\n ls_temperature: number;\n };\n data: {\n input: any;\n output: {\n generations: {\n text: string;\n generation_info: {\n finish_reason: string;\n model_name: string;\n system_fingerprint: string;\n };\n type: string;\n message: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string;\n additional_kwargs: {\n tool_calls: {\n index: number;\n id: string;\n function: { arguments: string; name: string };\n type: string;\n }[];\n };\n response_metadata: {\n finish_reason: string;\n model_name: string;\n system_fingerprint: string;\n };\n type: string;\n id: string;\n tool_calls: { name: string; args: { query: string }; id: string; type: string }[];\n invalid_tool_calls: any[];\n };\n };\n }[][];\n llm_output: any;\n run: any;\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnChainStreamEvent = {\n event: LangGraphEventTypes.OnChainStream;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step?: number;\n langgraph_node?: string;\n langgraph_triggers?: string[];\n langgraph_task_idx?: number;\n thread_ts?: string;\n };\n data: {\n chunk: {\n messages: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string;\n additional_kwargs?: {\n tool_calls?: {\n index: number;\n id: string;\n function: { arguments: string; name: string };\n type: string;\n }[];\n };\n response_metadata?: {\n finish_reason: string;\n model_name: string;\n system_fingerprint: string;\n };\n type: string;\n id: string;\n tool_calls?: { name: string; args: { query: string }; id: string; type: string }[];\n invalid_tool_calls?: any[];\n };\n }[];\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnToolStartEvent = {\n event: LangGraphEventTypes.OnToolStart;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n };\n data: {\n input: {\n query: string;\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnToolEndEvent = {\n event: LangGraphEventTypes.OnToolEnd;\n name: string;\n run_id: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_task_idx: number;\n thread_ts: string;\n };\n data: {\n input: {\n query: string;\n };\n output: {\n lc: number;\n type: string;\n id: string[];\n kwargs: {\n content: string[];\n type: string;\n name: string;\n tool_call_id: string;\n status: string;\n };\n };\n };\n parent_ids: string[];\n};\n\ntype LangGraphOnCustomEvent = {\n event: LangGraphEventTypes.OnCustomEvent;\n run_id: string;\n name: string;\n tags: string[];\n metadata: {\n thread_id: string;\n langgraph_step: number;\n langgraph_node: string;\n langgraph_triggers: string[];\n langgraph_path: [string, string];\n langgraph_checkpoint_ns: string;\n checkpoint_ns: string;\n };\n data: any;\n parent_ids: string[];\n};\n\ninterface LangGraphInterruptEvent {\n event: LangGraphEventTypes.OnInterrupt;\n value: string;\n}\n\ninterface CopilotKitLangGraphInterruptEvent {\n event: LangGraphEventTypes.OnCopilotKitInterrupt;\n data: { value: string; messages: (TextMessage | ActionExecutionMessage | ResultMessage)[] };\n}\n\ninterface CopilotKitLangGraphErrorEvent {\n event: LangGraphEventTypes.OnCopilotKitError;\n data: {\n error: {\n message: string;\n type: string;\n agent_name: string;\n status_code?: number;\n response_data?: any;\n };\n thread_id: string;\n agent_name: string;\n node_name: string;\n };\n}\n\nexport type LangGraphEvent =\n | LangGraphOnChainStartEvent\n | LangGraphOnChainStreamEvent\n | LangGraphOnChainEndEvent\n | LangGraphOnChatModelStartEvent\n | LangGraphOnChatModelStreamEvent\n | LangGraphOnChatModelEndEvent\n | LangGraphOnToolStartEvent\n | LangGraphOnToolEndEvent\n | LangGraphOnCopilotKitStateSyncEvent\n | LangGraphOnCustomEvent\n | LangGraphInterruptEvent\n | CopilotKitLangGraphInterruptEvent\n | CopilotKitLangGraphErrorEvent;\n","import createPinoLogger from \"pino\";\nimport pretty from \"pino-pretty\";\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport type CopilotRuntimeLogger = ReturnType<typeof createLogger>;\n\nexport function createLogger(options?: { level?: LogLevel; component?: string }) {\n const { level, component } = options || {};\n const stream = pretty({ colorize: true });\n\n const logger = createPinoLogger(\n {\n level: process.env.LOG_LEVEL || level || \"error\",\n redact: {\n paths: [\"pid\", \"hostname\"],\n remove: true,\n },\n },\n stream,\n );\n\n if (component) {\n return logger.child({ component });\n } else {\n return logger;\n }\n}\n","import { Arg, Resolver } from \"type-graphql\";\nimport { Ctx } from \"type-graphql\";\nimport { Query } from \"type-graphql\";\nimport { LoadAgentStateResponse } from \"../types/load-agent-state-response.type\";\nimport type { GraphQLContext } from \"../../lib/integrations\";\nimport { LoadAgentStateInput } from \"../inputs/load-agent-state.input\";\nimport { CopilotKitAgentDiscoveryError } from \"@copilotkit/shared\";\nimport { CopilotRuntime } from \"../../lib\";\n\n@Resolver(() => LoadAgentStateResponse)\nexport class StateResolver {\n @Query(() => LoadAgentStateResponse)\n async loadAgentState(@Ctx() ctx: GraphQLContext, @Arg(\"data\") data: LoadAgentStateInput) {\n const agents = [];\n const hasAgent = agents.some((agent) => agent.name === data.agentName);\n if (!hasAgent) {\n throw new CopilotKitAgentDiscoveryError({\n agentName: data.agentName,\n availableAgents: agents.map((a) => ({ name: a.name, id: a.name })),\n });\n }\n\n const state = {};\n\n return state;\n }\n}\n","import { Field, ObjectType } from \"type-graphql\";\nimport { BaseMessageOutput } from \"./copilot-response.type\";\n\n@ObjectType()\nexport class LoadAgentStateResponse {\n @Field(() => String)\n threadId: string;\n\n @Field(() => Boolean)\n threadExists: boolean;\n\n @Field(() => String)\n state: string;\n\n @Field(() => String)\n messages: string;\n}\n","import { Field, InputType } from \"type-graphql\";\n\n@InputType()\nexport class LoadAgentStateInput {\n @Field(() => String)\n threadId: string;\n\n @Field(() => String)\n agentName: string;\n}\n","import { createCopilotEndpointSingleRoute } from \"@copilotkitnext/runtime\";\nimport { CreateCopilotRuntimeServerOptions, getCommonConfig } from \"../shared\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\nimport { handle } from \"hono/vercel\";\n\nexport function copilotRuntimeNextJSAppRouterEndpoint(options: CreateCopilotRuntimeServerOptions) {\n const commonConfig = getCommonConfig(options);\n\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"nextjs-app-router\",\n },\n });\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: options.properties._copilotkit,\n });\n }\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n\n const logger = commonConfig.logging;\n logger.debug(\"Creating NextJS App Router endpoint\");\n\n const serviceAdapter = options.serviceAdapter;\n if (serviceAdapter) {\n options.runtime.handleServiceAdapter(serviceAdapter);\n }\n\n const copilotRoute = createCopilotEndpointSingleRoute({\n runtime: options.runtime.instance,\n basePath: options.baseUrl ?? options.endpoint,\n });\n\n const handleRequest = handle(copilotRoute as any);\n return { handleRequest };\n}\n","import { CreateCopilotRuntimeServerOptions, getCommonConfig } from \"../shared\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\nimport { createCopilotEndpointSingleRoute } from \"@copilotkitnext/runtime\";\nimport { IncomingMessage, ServerResponse } from \"http\";\nimport { Readable } from \"node:stream\";\n\ntype IncomingWithBody = IncomingMessage & { body?: unknown; complete?: boolean };\n\nexport function readableStreamToNodeStream(webStream: ReadableStream): Readable {\n const reader = webStream.getReader();\n\n return new Readable({\n async read() {\n try {\n const { done, value } = await reader.read();\n if (done) {\n this.push(null);\n } else {\n this.push(Buffer.from(value));\n }\n } catch (err) {\n this.destroy(err as Error);\n }\n },\n });\n}\n\nfunction getFullUrl(req: IncomingMessage): string {\n const expressPath =\n (req as any).originalUrl ??\n ((req as any).baseUrl ? `${(req as any).baseUrl}${req.url ?? \"\"}` : undefined);\n const path = expressPath || req.url || \"/\";\n const host =\n (req.headers[\"x-forwarded-host\"] as string) || (req.headers.host as string) || \"localhost\";\n const proto =\n (req.headers[\"x-forwarded-proto\"] as string) ||\n ((req.socket as any).encrypted ? \"https\" : \"http\");\n\n return `${proto}://${host}${path}`;\n}\n\nfunction toHeaders(rawHeaders: IncomingMessage[\"headers\"]): Headers {\n const headers = new Headers();\n\n for (const [key, value] of Object.entries(rawHeaders)) {\n if (value === undefined) continue;\n\n if (Array.isArray(value)) {\n value.forEach((entry) => headers.append(key, entry));\n continue;\n }\n\n headers.append(key, value);\n }\n\n return headers;\n}\n\nfunction isStreamConsumed(req: IncomingWithBody): boolean {\n const readableState = (req as any)._readableState;\n\n return Boolean(\n req.readableEnded || req.complete || readableState?.ended || readableState?.endEmitted,\n );\n}\n\nfunction synthesizeBodyFromParsedBody(\n parsedBody: unknown,\n headers: Headers,\n): { body: BodyInit | null; contentType?: string } {\n if (parsedBody === null || parsedBody === undefined) {\n return { body: null };\n }\n\n if (parsedBody instanceof Buffer || parsedBody instanceof Uint8Array) {\n return { body: parsedBody };\n }\n\n if (typeof parsedBody === \"string\") {\n return { body: parsedBody, contentType: headers.get(\"content-type\") ?? \"text/plain\" };\n }\n\n return {\n body: JSON.stringify(parsedBody),\n contentType: \"application/json\",\n };\n}\n\nfunction isDisturbedOrLockedError(error: unknown): boolean {\n return (\n error instanceof TypeError &&\n typeof error.message === \"string\" &&\n (error.message.includes(\"disturbed\") || error.message.includes(\"locked\"))\n );\n}\n\nexport function copilotRuntimeNodeHttpEndpoint(options: CreateCopilotRuntimeServerOptions) {\n const commonConfig = getCommonConfig(options);\n\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"node-http\",\n },\n });\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: options.properties._copilotkit,\n });\n }\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n\n const logger = commonConfig.logging;\n logger.debug(\"Creating Node HTTP endpoint\");\n\n const serviceAdapter = options.serviceAdapter;\n if (serviceAdapter) {\n options.runtime.handleServiceAdapter(serviceAdapter);\n }\n\n const honoApp = createCopilotEndpointSingleRoute({\n runtime: options.runtime.instance,\n basePath: options.baseUrl ?? options.endpoint,\n });\n\n return async function handler(req: IncomingWithBody, res: ServerResponse) {\n const url = getFullUrl(req);\n const hasBody = req.method !== \"GET\" && req.method !== \"HEAD\";\n\n const baseHeaders = toHeaders(req.headers);\n const parsedBody = req.body;\n\n const streamConsumed = isStreamConsumed(req) || parsedBody !== undefined;\n const canStream = hasBody && !streamConsumed;\n\n let requestBody: BodyInit | null | undefined = undefined;\n let useDuplex = false;\n\n if (hasBody && canStream) {\n requestBody = req as unknown as BodyInit;\n useDuplex = true;\n }\n\n if (hasBody && streamConsumed) {\n if (parsedBody !== undefined) {\n const synthesized = synthesizeBodyFromParsedBody(parsedBody, baseHeaders);\n requestBody = synthesized.body ?? undefined;\n baseHeaders.delete(\"content-length\");\n\n if (synthesized.contentType) {\n baseHeaders.set(\"content-type\", synthesized.contentType);\n }\n\n logger.debug(\"Request stream already consumed; using parsed req.body to rebuild request.\");\n } else {\n logger.warn(\"Request stream consumed with no available body; sending empty payload.\");\n requestBody = undefined;\n }\n }\n\n const buildRequest = (body: BodyInit | null | undefined, headers: Headers, duplex: boolean) =>\n new Request(url, {\n method: req.method,\n headers,\n body,\n duplex: duplex ? \"half\" : undefined,\n } as RequestInit);\n\n let response: Response;\n try {\n response = await honoApp.fetch(buildRequest(requestBody, baseHeaders, useDuplex));\n } catch (error) {\n if (isDisturbedOrLockedError(error) && hasBody) {\n logger.warn(\n \"Encountered disturbed/locked request body; rebuilding request using parsed body or empty payload.\",\n );\n\n const fallbackHeaders = new Headers(baseHeaders);\n let fallbackBody: BodyInit | null | undefined;\n\n if (parsedBody !== undefined) {\n const synthesized = synthesizeBodyFromParsedBody(parsedBody, fallbackHeaders);\n fallbackBody = synthesized.body ?? undefined;\n fallbackHeaders.delete(\"content-length\");\n\n if (synthesized.contentType) {\n fallbackHeaders.set(\"content-type\", synthesized.contentType);\n }\n } else {\n fallbackBody = undefined;\n }\n\n response = await honoApp.fetch(buildRequest(fallbackBody, fallbackHeaders, false));\n } else {\n throw error;\n }\n }\n\n res.statusCode = response.status;\n response.headers.forEach((value, key) => {\n res.setHeader(key, value);\n });\n\n if (response.body) {\n readableStreamToNodeStream(response.body).pipe(res);\n } else {\n res.end();\n }\n };\n}\n","import { CreateCopilotRuntimeServerOptions, getCommonConfig } from \"../shared\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\nimport { copilotRuntimeNodeHttpEndpoint } from \"../node-http\";\n\nexport const config = {\n api: {\n bodyParser: false,\n },\n};\n\n// This import is needed to fix the type error\n// Fix is currently in TypeScript 5.5 beta, waiting for stable version\n// https://github.com/microsoft/TypeScript/issues/42873#issuecomment-2066874644\nexport type {} from \"@whatwg-node/server\";\n\nexport function copilotRuntimeNextJSPagesRouterEndpoint(\n options: CreateCopilotRuntimeServerOptions,\n) {\n const commonConfig = getCommonConfig(options);\n\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"nextjs-pages-router\",\n },\n });\n\n if (options.properties?._copilotkit) {\n telemetry.setGlobalProperties({\n _copilotkit: options.properties._copilotkit,\n });\n }\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n\n const logger = commonConfig.logging;\n logger.debug(\"Creating NextJS Pages Router endpoint\");\n\n return copilotRuntimeNodeHttpEndpoint(options);\n}\n","import { CreateCopilotRuntimeServerOptions } from \"../shared\";\nimport { copilotRuntimeNodeHttpEndpoint } from \"../node-http\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport function copilotRuntimeNodeExpressEndpoint(options: CreateCopilotRuntimeServerOptions) {\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"node-express\",\n },\n });\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n return copilotRuntimeNodeHttpEndpoint(options);\n}\n","import { CreateCopilotRuntimeServerOptions } from \"../shared\";\nimport { copilotRuntimeNodeHttpEndpoint } from \"../node-http\";\nimport telemetry, { getRuntimeInstanceTelemetryInfo } from \"../../telemetry-client\";\n\nexport function copilotRuntimeNestEndpoint(options: CreateCopilotRuntimeServerOptions) {\n telemetry.setGlobalProperties({\n runtime: {\n framework: \"nest\",\n },\n });\n\n telemetry.capture(\"oss.runtime.instance_created\", getRuntimeInstanceTelemetryInfo(options));\n return copilotRuntimeNodeHttpEndpoint(options);\n}\n","export * from \"../service-adapters/openai/openai-adapter\";\nexport * from \"../service-adapters/langchain/langchain-adapter\";\nexport * from \"../service-adapters/google/google-genai-adapter\";\nexport * from \"../service-adapters/openai/openai-assistant-adapter\";\nexport * from \"../service-adapters/unify/unify-adapter\";\nexport * from \"../service-adapters/groq/groq-adapter\";\nexport * from \"./integrations\";\nexport * from \"./logger\";\nexport * from \"./runtime/copilot-runtime\";\nexport * from \"./runtime/mcp-tools-utils\";\nexport * from \"./runtime/telemetry-agent-runner\";\n\n// The below re-exports \"dummy\" classes and types, to get a deprecation warning redirecting the users to import these from the correct, new route\n\n/**\n * @deprecated LangGraphAgent import from `@copilotkit/runtime` is deprecated. Please import it from `@copilotkit/runtime/langgraph` instead\n */\nexport class LangGraphAgent {\n constructor() {\n throw new Error(\n \"LangGraphAgent import from @copilotkit/runtime is deprecated. Please import it from @copilotkit/runtime/langgraph instead\",\n );\n }\n}\n\n/**\n * @deprecated LangGraphHttpAgent import from `@copilotkit/runtime` is deprecated. Please import it from `@copilotkit/runtime/langgraph` instead\n */\nexport class LangGraphHttpAgent {\n constructor() {\n throw new Error(\n \"LangGraphHttpAgent import from @copilotkit/runtime is deprecated. Please import it from @copilotkit/runtime/langgraph instead\",\n );\n }\n}\n\n/**\n * @deprecated TextMessageEvents import from `@copilotkit/runtime` is deprecated. Please import it from `@copilotkit/runtime/langgraph` instead\n */\nexport type TextMessageEvents = any;\n/**\n * @deprecated ToolCallEvents import from `@copilotkit/runtime` is deprecated. Please import it from `@copilotkit/runtime/langgraph` instead\n */\nexport type ToolCallEvents = any;\n/**\n * @deprecated CustomEventNames import from `@copilotkit/runtime` is deprecated. Please import it from `@copilotkit/runtime/langgraph` instead\n */\nexport type CustomEventNames = any;\n/**\n * @deprecated PredictStateTool import from `@copilotkit/runtime` is deprecated. Please import it from `@copilotkit/runtime/langgraph` instead\n */\nexport type PredictStateTool = any;\n","import { Parameter, Action } from \"@copilotkit/shared\";\n\nexport interface RemoteChainParameters {\n name: string;\n description: string;\n chainUrl: string;\n parameters?: Parameter[];\n parameterType?: \"single\" | \"multi\";\n}\n\nexport class RemoteChain {\n name: string;\n description: string;\n chainUrl: string;\n parameters?: Parameter[];\n parameterType: \"single\" | \"multi\";\n\n constructor(options: RemoteChainParameters) {\n this.name = options.name;\n this.description = options.description;\n this.chainUrl = options.chainUrl;\n this.parameters = options.parameters;\n this.parameterType = options.parameterType || \"multi\";\n }\n\n async toAction(): Promise<Action<any>> {\n if (!this.parameters) {\n await this.inferLangServeParameters();\n }\n\n return {\n name: this.name,\n description: this.description,\n parameters: this.parameters!,\n handler: async (args: any) => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { RemoteRunnable } = require(\"langchain/runnables/remote\");\n const runnable = new RemoteRunnable({ url: this.chainUrl });\n let input: any;\n if (this.parameterType === \"single\") {\n input = args[Object.keys(args)[0]];\n } else {\n input = args;\n }\n return await runnable.invoke(input);\n },\n };\n }\n\n async inferLangServeParameters() {\n const supportedTypes = [\"string\", \"number\", \"boolean\"];\n\n let schemaUrl = this.chainUrl.replace(/\\/+$/, \"\") + \"/input_schema\";\n let schema = await fetch(schemaUrl)\n .then((res) => res.json())\n .catch(() => {\n throw new Error(\"Failed to fetch langserve schema at \" + schemaUrl);\n });\n // for now, don't use json schema, just do a simple conversion\n\n if (supportedTypes.includes(schema.type)) {\n this.parameterType = \"single\";\n this.parameters = [\n {\n name: \"input\",\n type: schema.type,\n description: \"The input to the chain\",\n },\n ];\n } else if (schema.type === \"object\") {\n this.parameterType = \"multi\";\n this.parameters = Object.keys(schema.properties).map((key) => {\n let property = schema.properties[key];\n if (!supportedTypes.includes(property.type)) {\n throw new Error(\"Unsupported schema type\");\n }\n return {\n name: key,\n type: property.type,\n description: property.description || \"\",\n required: schema.required?.includes(key) || false,\n };\n });\n } else {\n throw new Error(\"Unsupported schema type\");\n }\n }\n}\n","import { Anthropic } from \"@anthropic-ai/sdk\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { Message } from \"../../graphql/types/converted\";\n\nexport function limitMessagesToTokenCount(\n messages: any[],\n tools: any[],\n model: string,\n maxTokens?: number,\n): any[] {\n maxTokens ||= MAX_TOKENS;\n\n const result: any[] = [];\n const toolsNumTokens = countToolsTokens(model, tools);\n if (toolsNumTokens > maxTokens) {\n throw new Error(`Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`);\n }\n maxTokens -= toolsNumTokens;\n\n for (const message of messages) {\n if (message.role === \"system\") {\n const numTokens = countMessageTokens(model, message);\n maxTokens -= numTokens;\n\n if (maxTokens < 0) {\n throw new Error(\"Not enough tokens for system message.\");\n }\n }\n }\n\n let cutoff: boolean = false;\n\n const reversedMessages = [...messages].reverse();\n for (const message of reversedMessages) {\n if (message.role === \"system\") {\n result.unshift(message);\n continue;\n } else if (cutoff) {\n continue;\n }\n let numTokens = countMessageTokens(model, message);\n if (maxTokens < numTokens) {\n cutoff = true;\n continue;\n }\n result.unshift(message);\n maxTokens -= numTokens;\n }\n\n return result;\n}\n\nconst MAX_TOKENS = 128000;\n\nfunction countToolsTokens(model: string, tools: any[]): number {\n if (tools.length === 0) {\n return 0;\n }\n const json = JSON.stringify(tools);\n return countTokens(model, json);\n}\n\nfunction countMessageTokens(model: string, message: any): number {\n return countTokens(model, JSON.stringify(message.content) || \"\");\n}\n\nfunction countTokens(model: string, text: string): number {\n return text.length / 3;\n}\n\nexport function convertActionInputToAnthropicTool(action: ActionInput): Anthropic.Messages.Tool {\n return {\n name: action.name,\n description: action.description,\n input_schema: JSON.parse(action.jsonSchema),\n };\n}\n\nexport function convertMessageToAnthropicMessage(\n message: Message,\n): Anthropic.Messages.MessageParam {\n if (message.isTextMessage()) {\n if (message.role === \"system\") {\n return {\n role: \"assistant\",\n content: [\n { type: \"text\", text: \"THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: \" + message.content },\n ],\n };\n } else {\n return {\n role: message.role === \"user\" ? \"user\" : \"assistant\",\n content: [{ type: \"text\", text: message.content }],\n };\n }\n } else if (message.isImageMessage()) {\n let mediaType: \"image/jpeg\" | \"image/png\" | \"image/webp\" | \"image/gif\";\n switch (message.format) {\n case \"jpeg\":\n mediaType = \"image/jpeg\";\n break;\n case \"png\":\n mediaType = \"image/png\";\n break;\n case \"webp\":\n mediaType = \"image/webp\";\n break;\n case \"gif\":\n mediaType = \"image/gif\";\n break;\n default:\n throw new Error(`Unsupported image format: ${message.format}`);\n }\n\n return {\n role: \"user\",\n content: [\n {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: mediaType,\n data: message.bytes,\n },\n },\n ],\n };\n } else if (message.isActionExecutionMessage()) {\n return {\n role: \"assistant\",\n content: [\n {\n id: message.id,\n type: \"tool_use\",\n input: message.arguments,\n name: message.name,\n },\n ],\n };\n } else if (message.isResultMessage()) {\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n content: message.result || \"Action completed successfully\",\n tool_use_id: message.actionExecutionId,\n },\n ],\n };\n }\n}\n","/**\n * Copilot Runtime adapter for Anthropic.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, AnthropicAdapter } from \"@copilotkit/runtime\";\n * import Anthropic from \"@anthropic-ai/sdk\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const anthropic = new Anthropic({\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new AnthropicAdapter({\n * anthropic,\n * promptCaching: {\n * enabled: true,\n * debug: true\n * }\n * });\n * ```\n */\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToAnthropicTool,\n convertMessageToAnthropicMessage,\n limitMessagesToTokenCount,\n} from \"./utils\";\n\nimport { randomId, randomUUID } from \"@copilotkit/shared\";\nimport { convertServiceAdapterError } from \"../shared\";\n\nconst DEFAULT_MODEL = \"claude-3-5-sonnet-latest\";\n\nexport interface AnthropicPromptCachingConfig {\n /**\n * Whether to enable prompt caching.\n */\n enabled: boolean;\n\n /**\n * Whether to enable debug logging for cache operations.\n */\n debug?: boolean;\n}\n\nexport interface AnthropicAdapterParams {\n /**\n * An optional Anthropic instance to use. If not provided, a new instance will be\n * created.\n */\n anthropic?: Anthropic;\n\n /**\n * The model to use.\n */\n model?: string;\n\n /**\n * Configuration for prompt caching.\n * See: https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching\n */\n promptCaching?: AnthropicPromptCachingConfig;\n}\n\nexport class AnthropicAdapter implements CopilotServiceAdapter {\n public model: string = DEFAULT_MODEL;\n public provider = \"anthropic\";\n private promptCaching: AnthropicPromptCachingConfig;\n\n private _anthropic: Anthropic;\n public get anthropic(): Anthropic {\n return this._anthropic;\n }\n public get name() {\n return \"AnthropicAdapter\";\n }\n\n constructor(params?: AnthropicAdapterParams) {\n if (params?.anthropic) {\n this._anthropic = params.anthropic;\n }\n // If no instance provided, we'll lazy-load in ensureAnthropic()\n if (params?.model) {\n this.model = params.model;\n }\n this.promptCaching = params?.promptCaching || { enabled: false };\n }\n\n private ensureAnthropic(): Anthropic {\n if (!this._anthropic) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const Anthropic = require(\"@anthropic-ai/sdk\").default;\n this._anthropic = new Anthropic({});\n }\n return this._anthropic;\n }\n\n /**\n * Adds cache control to system prompt\n */\n private addSystemPromptCaching(\n system: string,\n debug: boolean = false,\n ): string | Array<{ type: \"text\"; text: string; cache_control?: { type: \"ephemeral\" } }> {\n if (!this.promptCaching.enabled || !system) {\n return system;\n }\n\n const originalTextLength = system.length;\n\n if (debug) {\n console.log(\n `[ANTHROPIC CACHE DEBUG] Added cache control to system prompt (${originalTextLength} chars).`,\n );\n }\n\n return [\n {\n type: \"text\",\n text: system,\n cache_control: { type: \"ephemeral\" },\n },\n ];\n }\n\n /**\n * Adds cache control to the final message\n */\n private addIncrementalMessageCaching(\n messages: Anthropic.Messages.MessageParam[],\n debug: boolean = false,\n ): any[] {\n if (!this.promptCaching.enabled || messages.length === 0) {\n return messages;\n }\n\n const finalMessage = messages[messages.length - 1];\n const messageNumber = messages.length;\n\n if (Array.isArray(finalMessage.content) && finalMessage.content.length > 0) {\n const finalBlock = finalMessage.content[finalMessage.content.length - 1];\n\n const updatedMessages = [\n ...messages.slice(0, -1),\n {\n ...finalMessage,\n content: [\n ...finalMessage.content.slice(0, -1),\n { ...finalBlock, cache_control: { type: \"ephemeral\" } } as any,\n ],\n },\n ];\n\n if (debug) {\n console.log(\n `[ANTHROPIC CACHE DEBUG] Added cache control to final message (message ${messageNumber}).`,\n );\n }\n\n return updatedMessages;\n }\n\n return messages;\n }\n\n private shouldGenerateFallbackResponse(messages: Anthropic.Messages.MessageParam[]): boolean {\n if (messages.length === 0) return false;\n\n const lastMessage = messages[messages.length - 1];\n\n // Check if the last message is a tool result\n const endsWithToolResult =\n lastMessage.role === \"user\" &&\n Array.isArray(lastMessage.content) &&\n lastMessage.content.some((content: any) => content.type === \"tool_result\");\n\n // Also check if we have a recent pattern of user message -> assistant tool use -> user tool result\n // This indicates a completed action that might not need a response\n if (messages.length >= 3 && endsWithToolResult) {\n const lastThree = messages.slice(-3);\n const hasRecentToolPattern =\n lastThree[0]?.role === \"user\" && // Initial user message\n lastThree[1]?.role === \"assistant\" && // Assistant tool use\n Array.isArray(lastThree[1].content) &&\n lastThree[1].content.some((content: any) => content.type === \"tool_use\") &&\n lastThree[2]?.role === \"user\" && // Tool result\n Array.isArray(lastThree[2].content) &&\n lastThree[2].content.some((content: any) => content.type === \"tool_result\");\n\n return hasRecentToolPattern;\n }\n\n return endsWithToolResult;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId,\n model = this.model,\n messages: rawMessages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToAnthropicTool);\n\n const messages = [...rawMessages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage() ? instructionsMessage.content : \"\";\n\n // ALLOWLIST APPROACH:\n // 1. First, identify all valid tool_use calls (from assistant)\n // 2. Then, only keep tool_result blocks that correspond to these valid tool_use IDs\n // 3. Discard any other tool_result blocks\n\n // Step 1: Extract valid tool_use IDs\n const validToolUseIds = new Set<string>();\n\n for (const message of messages) {\n if (message.isActionExecutionMessage()) {\n validToolUseIds.add(message.id);\n }\n }\n\n // Step 2: Map each message to an Anthropic message, eliminating invalid tool_results\n const processedToolResultIds = new Set<string>();\n const anthropicMessages = messages\n .map((message) => {\n // For tool results, only include if they match a valid tool_use ID AND haven't been processed\n if (message.isResultMessage()) {\n // Skip if there's no corresponding tool_use\n if (!validToolUseIds.has(message.actionExecutionId)) {\n return null; // Will be filtered out later\n }\n\n // Skip if we've already processed a result for this tool_use ID\n if (processedToolResultIds.has(message.actionExecutionId)) {\n return null; // Will be filtered out later\n }\n\n // Mark this tool result as processed\n processedToolResultIds.add(message.actionExecutionId);\n\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n content: message.result || \"Action completed successfully\",\n tool_use_id: message.actionExecutionId,\n },\n ],\n };\n }\n\n // For non-tool-result messages, convert normally\n return convertMessageToAnthropicMessage(message);\n })\n .filter(Boolean) // Remove nulls\n .filter((msg) => {\n // Filter out assistant messages with empty text content\n if (msg.role === \"assistant\" && Array.isArray(msg.content)) {\n const hasEmptyTextOnly =\n msg.content.length === 1 &&\n msg.content[0].type === \"text\" &&\n (!(msg.content[0] as any).text || (msg.content[0] as any).text.trim() === \"\");\n\n // Keep messages that have tool_use or non-empty text\n return !hasEmptyTextOnly;\n }\n return true;\n }) as Anthropic.Messages.MessageParam[];\n\n // Apply token limits\n const limitedMessages = limitMessagesToTokenCount(anthropicMessages, tools, model);\n\n // Apply prompt caching if enabled\n const cachedSystemPrompt = this.addSystemPromptCaching(instructions, this.promptCaching.debug);\n const cachedMessages = this.addIncrementalMessageCaching(\n limitedMessages,\n this.promptCaching.debug,\n );\n\n // We'll check if we need a fallback response after seeing what Anthropic returns\n // We skip grouping by role since we've already ensured uniqueness of tool_results\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"tool\",\n name: forwardedParameters.toolChoiceFunctionName,\n };\n }\n\n try {\n const createParams = {\n system: cachedSystemPrompt,\n model: this.model,\n messages: cachedMessages,\n max_tokens: forwardedParameters?.maxTokens || 1024,\n ...(forwardedParameters?.temperature\n ? { temperature: forwardedParameters.temperature }\n : {}),\n ...(tools.length > 0 && { tools }),\n ...(toolChoice && { tool_choice: toolChoice }),\n stream: true,\n };\n\n const anthropic = this.ensureAnthropic();\n const stream = await anthropic.messages.create(createParams);\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let didOutputText = false;\n let currentMessageId = randomId();\n let currentToolCallId = randomId();\n let filterThinkingTextBuffer = new FilterThinkingTextBuffer();\n let hasReceivedContent = false;\n\n try {\n for await (const chunk of stream as AsyncIterable<any>) {\n if (chunk.type === \"message_start\") {\n currentMessageId = chunk.message.id;\n } else if (chunk.type === \"content_block_start\") {\n hasReceivedContent = true;\n if (chunk.content_block.type === \"text\") {\n didOutputText = false;\n filterThinkingTextBuffer.reset();\n mode = \"message\";\n } else if (chunk.content_block.type === \"tool_use\") {\n currentToolCallId = chunk.content_block.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n actionName: chunk.content_block.name,\n parentMessageId: currentMessageId,\n });\n mode = \"function\";\n }\n } else if (chunk.type === \"content_block_delta\") {\n if (chunk.delta.type === \"text_delta\") {\n const text = filterThinkingTextBuffer.onTextChunk(chunk.delta.text);\n if (text.length > 0) {\n if (!didOutputText) {\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n didOutputText = true;\n }\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: text,\n });\n }\n } else if (chunk.delta.type === \"input_json_delta\") {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: chunk.delta.partial_json,\n });\n }\n } else if (chunk.type === \"content_block_stop\") {\n if (mode === \"message\") {\n if (didOutputText) {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n }\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });\n }\n }\n }\n } catch (error) {\n throw convertServiceAdapterError(error, \"Anthropic\");\n }\n\n // Generate fallback response only if Anthropic produced no content\n if (!hasReceivedContent && this.shouldGenerateFallbackResponse(cachedMessages)) {\n // Extract the tool result content for a more contextual response\n let fallbackContent = \"Task completed successfully.\";\n const lastMessage = cachedMessages[cachedMessages.length - 1];\n if (lastMessage?.role === \"user\" && Array.isArray(lastMessage.content)) {\n const toolResult = lastMessage.content.find((c: any) => c.type === \"tool_result\");\n if (toolResult?.content && toolResult.content !== \"Action completed successfully\") {\n fallbackContent = toolResult.content;\n }\n }\n\n currentMessageId = randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: fallbackContent,\n });\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n }\n\n eventStream$.complete();\n });\n } catch (error) {\n throw convertServiceAdapterError(error, \"Anthropic\");\n }\n\n return {\n threadId: threadId || randomUUID(),\n };\n }\n}\n\nconst THINKING_TAG = \"<thinking>\";\nconst THINKING_TAG_END = \"</thinking>\";\n\nclass FilterThinkingTextBuffer {\n private buffer: string;\n private didFilterThinkingTag: boolean = false;\n\n constructor() {\n this.buffer = \"\";\n }\n\n onTextChunk(text: string): string {\n this.buffer += text;\n if (this.didFilterThinkingTag) {\n return text;\n }\n const potentialTag = this.buffer.slice(0, THINKING_TAG.length);\n if (THINKING_TAG.startsWith(potentialTag)) {\n if (this.buffer.includes(THINKING_TAG_END)) {\n const end = this.buffer.indexOf(THINKING_TAG_END);\n const filteredText = this.buffer.slice(end + THINKING_TAG_END.length);\n this.buffer = filteredText;\n this.didFilterThinkingTag = true;\n return filteredText;\n } else {\n return \"\";\n }\n }\n return text;\n }\n\n reset() {\n this.buffer = \"\";\n this.didFilterThinkingTag = false;\n }\n}\n","/**\n * CopilotKit Adapter for Ollama\n *\n * <RequestExample>\n * ```jsx CopilotRuntime Example\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(req, new OllamaAdapter());\n * ```\n * </RequestExample>\n *\n * You can easily set the model to use by passing it to the constructor.\n * ```jsx\n * const copilotKit = new CopilotRuntime();\n * return copilotKit.response(\n * req,\n * new OllamaAdapter({ model: \"llama3-70b-8192\" }),\n * );\n * ```\n */\nimport { TextMessage } from \"../../../graphql/types/converted\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../../service-adapter\";\nimport { randomId, randomUUID } from \"@copilotkit/shared\";\n\nconst DEFAULT_MODEL = \"llama3:latest\";\n\ninterface OllamaAdapterOptions {\n model?: string;\n}\n\nexport class ExperimentalOllamaAdapter implements CopilotServiceAdapter {\n public model: string;\n public provider = \"ollama\";\n public get name() {\n return \"OllamaAdapter\";\n }\n\n constructor(options?: OllamaAdapterOptions) {\n if (options?.model) {\n this.model = options.model;\n } else {\n this.model = DEFAULT_MODEL;\n }\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource } = request;\n // const messages = this.transformMessages(forwardedProps.messages);\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { Ollama } = require(\"@langchain/community/llms/ollama\");\n const ollama = new Ollama({\n model: this.model,\n });\n const contents = (messages.filter((m) => m.isTextMessage()) as TextMessage[]).map(\n (m) => m.content,\n );\n const _stream = await ollama.stream(contents); // [TODO] role info is dropped...\n\n eventSource.stream(async (eventStream$) => {\n const currentMessageId = randomId();\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n for await (const chunkText of _stream) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: chunkText,\n });\n }\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n // we may need to add this later.. [nc]\n // let calls = (await result.response).functionCalls();\n\n eventStream$.complete();\n });\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n}\n","/**\n * Copilot Runtime adapter for AWS Bedrock.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, BedrockAdapter } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new BedrockAdapter({\n * model: \"amazon.nova-lite-v1:0\",\n * region: \"us-east-1\",\n * credentials: {\n * accessKeyId: process.env.AWS_ACCESS_KEY_ID,\n * secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY\n * }\n * });\n * ```\n */\n\nimport { LangChainAdapter } from \"../langchain/langchain-adapter\";\n\nexport interface BedrockAdapterParams {\n /**\n * AWS Bedrock model ID to use.\n * @default \"amazon.nova-lite-v1:0\"\n */\n model?: string;\n\n /**\n * AWS region where Bedrock is available.\n * @default \"us-east-1\"\n */\n region?: string;\n\n /**\n * AWS credentials for Bedrock access.\n */\n credentials?: {\n accessKeyId?: string;\n secretAccessKey?: string;\n };\n}\n\nconst DEFAULT_MODEL = \"amazon.nova-lite-v1:0\";\n\nexport class BedrockAdapter extends LangChainAdapter {\n public provider = \"bedrock\";\n public model: string = DEFAULT_MODEL;\n constructor(options?: BedrockAdapterParams) {\n super({\n chainFn: async ({ messages, tools, threadId }) => {\n // Lazy require for optional peer dependency\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { ChatBedrockConverse } = require(\"@langchain/aws\");\n\n this.model = options?.model ?? \"amazon.nova-lite-v1:0\";\n const model = new ChatBedrockConverse({\n model: this.model,\n region: options?.region ?? \"us-east-1\",\n credentials: options?.credentials\n ? {\n accessKeyId: options.credentials.accessKeyId,\n secretAccessKey: options.credentials.secretAccessKey,\n }\n : undefined,\n }).bindTools(tools);\n return model.stream(messages);\n },\n });\n }\n}\n","/**\n * CopilotKit Empty Adapter\n *\n * This adapter is meant to preserve adherence to runtime requirements, while doing nothing\n * Ideal if you don't want to connect an LLM the to the runtime, and only use your LangGraph agent.\n * Be aware that Copilot Suggestions will not work if you use this adapter\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, EmptyAdapter } from \"@copilotkit/runtime\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * return new EmptyAdapter();\n * ```\n */\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport { randomUUID } from \"@copilotkit/shared\";\n\nexport class EmptyAdapter implements CopilotServiceAdapter {\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n return {\n threadId: request.threadId || randomUUID(),\n };\n }\n public get name() {\n return \"EmptyAdapter\";\n }\n}\n\nexport const ExperimentalEmptyAdapter = EmptyAdapter;\n"]}
|