@copilotkit/runtime 1.69.0 → 1.69.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.mjs +1 -15
- package/dist/agents/langgraph/events.cjs +1 -1
- package/dist/agents/langgraph/events.cjs.map +1 -1
- package/dist/agents/langgraph/events.mjs +1 -1
- package/dist/agents/langgraph/events.mjs.map +1 -1
- package/dist/graphql/inputs/action.input.cjs +1 -1
- package/dist/graphql/inputs/action.input.cjs.map +1 -1
- package/dist/graphql/inputs/action.input.d.cts +1 -1
- package/dist/graphql/inputs/action.input.d.cts.map +1 -1
- package/dist/graphql/inputs/action.input.d.mts +1 -1
- package/dist/graphql/inputs/action.input.d.mts.map +1 -1
- package/dist/graphql/inputs/action.input.mjs +1 -1
- package/dist/graphql/inputs/action.input.mjs.map +1 -1
- package/dist/graphql/inputs/agent-session.input.cjs +1 -1
- package/dist/graphql/inputs/agent-session.input.cjs.map +1 -1
- package/dist/graphql/inputs/agent-session.input.d.cts +1 -1
- package/dist/graphql/inputs/agent-session.input.d.cts.map +1 -1
- package/dist/graphql/inputs/agent-session.input.d.mts +1 -1
- package/dist/graphql/inputs/agent-session.input.d.mts.map +1 -1
- package/dist/graphql/inputs/agent-session.input.mjs +1 -1
- package/dist/graphql/inputs/agent-session.input.mjs.map +1 -1
- package/dist/graphql/inputs/agent-state.input.cjs +1 -1
- package/dist/graphql/inputs/agent-state.input.cjs.map +1 -1
- package/dist/graphql/inputs/agent-state.input.d.cts +1 -1
- package/dist/graphql/inputs/agent-state.input.d.cts.map +1 -1
- package/dist/graphql/inputs/agent-state.input.d.mts +1 -1
- package/dist/graphql/inputs/agent-state.input.d.mts.map +1 -1
- package/dist/graphql/inputs/agent-state.input.mjs +1 -1
- package/dist/graphql/inputs/agent-state.input.mjs.map +1 -1
- package/dist/graphql/inputs/cloud-guardrails.input.cjs +1 -1
- package/dist/graphql/inputs/cloud-guardrails.input.cjs.map +1 -1
- package/dist/graphql/inputs/cloud-guardrails.input.mjs +1 -1
- package/dist/graphql/inputs/cloud-guardrails.input.mjs.map +1 -1
- package/dist/graphql/inputs/cloud.input.cjs +1 -1
- package/dist/graphql/inputs/cloud.input.cjs.map +1 -1
- package/dist/graphql/inputs/cloud.input.mjs +1 -1
- package/dist/graphql/inputs/cloud.input.mjs.map +1 -1
- package/dist/graphql/inputs/copilot-context.input.cjs +1 -1
- package/dist/graphql/inputs/copilot-context.input.cjs.map +1 -1
- package/dist/graphql/inputs/copilot-context.input.mjs +1 -1
- package/dist/graphql/inputs/copilot-context.input.mjs.map +1 -1
- package/dist/graphql/inputs/extensions.input.cjs +1 -1
- package/dist/graphql/inputs/extensions.input.cjs.map +1 -1
- package/dist/graphql/inputs/extensions.input.d.cts +1 -1
- package/dist/graphql/inputs/extensions.input.d.cts.map +1 -1
- package/dist/graphql/inputs/extensions.input.d.mts +1 -1
- package/dist/graphql/inputs/extensions.input.d.mts.map +1 -1
- package/dist/graphql/inputs/extensions.input.mjs +1 -1
- package/dist/graphql/inputs/extensions.input.mjs.map +1 -1
- package/dist/graphql/inputs/forwarded-parameters.input.cjs +2 -3
- package/dist/graphql/inputs/forwarded-parameters.input.cjs.map +1 -1
- package/dist/graphql/inputs/forwarded-parameters.input.d.cts +2 -2
- package/dist/graphql/inputs/forwarded-parameters.input.d.cts.map +1 -1
- package/dist/graphql/inputs/forwarded-parameters.input.d.mts +2 -2
- package/dist/graphql/inputs/forwarded-parameters.input.d.mts.map +1 -1
- package/dist/graphql/inputs/forwarded-parameters.input.mjs +2 -3
- package/dist/graphql/inputs/forwarded-parameters.input.mjs.map +1 -1
- package/dist/graphql/inputs/frontend.input.cjs +1 -1
- package/dist/graphql/inputs/frontend.input.cjs.map +1 -1
- package/dist/graphql/inputs/frontend.input.mjs +1 -1
- package/dist/graphql/inputs/frontend.input.mjs.map +1 -1
- package/dist/graphql/inputs/generate-copilot-response.input.cjs +1 -1
- package/dist/graphql/inputs/generate-copilot-response.input.cjs.map +1 -1
- package/dist/graphql/inputs/generate-copilot-response.input.mjs +1 -1
- package/dist/graphql/inputs/generate-copilot-response.input.mjs.map +1 -1
- package/dist/graphql/inputs/load-agent-state.input.cjs +1 -1
- package/dist/graphql/inputs/load-agent-state.input.cjs.map +1 -1
- package/dist/graphql/inputs/load-agent-state.input.mjs +1 -1
- package/dist/graphql/inputs/load-agent-state.input.mjs.map +1 -1
- package/dist/graphql/inputs/message.input.cjs +10 -10
- package/dist/graphql/inputs/message.input.cjs.map +1 -1
- package/dist/graphql/inputs/message.input.d.cts +2 -2
- package/dist/graphql/inputs/message.input.d.cts.map +1 -1
- package/dist/graphql/inputs/message.input.d.mts +2 -2
- package/dist/graphql/inputs/message.input.d.mts.map +1 -1
- package/dist/graphql/inputs/message.input.mjs +10 -10
- package/dist/graphql/inputs/message.input.mjs.map +1 -1
- package/dist/graphql/inputs/meta-event.input.cjs +1 -1
- package/dist/graphql/inputs/meta-event.input.cjs.map +1 -1
- package/dist/graphql/inputs/meta-event.input.mjs +1 -1
- package/dist/graphql/inputs/meta-event.input.mjs.map +1 -1
- package/dist/graphql/message-conversion/agui-to-gql.cjs +1 -1
- package/dist/graphql/message-conversion/agui-to-gql.cjs.map +1 -1
- package/dist/graphql/message-conversion/agui-to-gql.mjs +1 -1
- package/dist/graphql/message-conversion/agui-to-gql.mjs.map +1 -1
- package/dist/graphql/resolvers/copilot.resolver.cjs +1 -1
- package/dist/graphql/resolvers/copilot.resolver.cjs.map +1 -1
- package/dist/graphql/resolvers/copilot.resolver.mjs +1 -1
- package/dist/graphql/resolvers/copilot.resolver.mjs.map +1 -1
- package/dist/graphql/resolvers/resolve-message-id.cjs +1 -1
- package/dist/graphql/resolvers/resolve-message-id.cjs.map +1 -1
- package/dist/graphql/resolvers/resolve-message-id.mjs +1 -1
- package/dist/graphql/resolvers/resolve-message-id.mjs.map +1 -1
- package/dist/graphql/resolvers/state.resolver.cjs +1 -1
- package/dist/graphql/resolvers/state.resolver.cjs.map +1 -1
- package/dist/graphql/resolvers/state.resolver.mjs +1 -1
- package/dist/graphql/resolvers/state.resolver.mjs.map +1 -1
- package/dist/graphql/types/agents-response.type.cjs +1 -1
- package/dist/graphql/types/agents-response.type.cjs.map +1 -1
- package/dist/graphql/types/agents-response.type.mjs +1 -1
- package/dist/graphql/types/agents-response.type.mjs.map +1 -1
- package/dist/graphql/types/base/index.cjs +1 -1
- package/dist/graphql/types/base/index.cjs.map +1 -1
- package/dist/graphql/types/base/index.d.cts +1 -1
- package/dist/graphql/types/base/index.d.cts.map +1 -1
- package/dist/graphql/types/base/index.d.mts +1 -1
- package/dist/graphql/types/base/index.d.mts.map +1 -1
- package/dist/graphql/types/base/index.mjs +1 -1
- package/dist/graphql/types/base/index.mjs.map +1 -1
- package/dist/graphql/types/converted/index.cjs +2 -2
- package/dist/graphql/types/converted/index.cjs.map +1 -1
- package/dist/graphql/types/converted/index.d.cts +1 -1
- package/dist/graphql/types/converted/index.d.cts.map +1 -1
- package/dist/graphql/types/converted/index.d.mts +1 -1
- package/dist/graphql/types/converted/index.d.mts.map +1 -1
- package/dist/graphql/types/converted/index.mjs +2 -2
- package/dist/graphql/types/converted/index.mjs.map +1 -1
- package/dist/graphql/types/copilot-response.type.cjs +1 -1
- package/dist/graphql/types/copilot-response.type.cjs.map +1 -1
- package/dist/graphql/types/copilot-response.type.d.cts +1 -1
- package/dist/graphql/types/copilot-response.type.d.cts.map +1 -1
- package/dist/graphql/types/copilot-response.type.d.mts +1 -1
- package/dist/graphql/types/copilot-response.type.d.mts.map +1 -1
- package/dist/graphql/types/copilot-response.type.mjs +1 -1
- package/dist/graphql/types/copilot-response.type.mjs.map +1 -1
- package/dist/graphql/types/enums.cjs +1 -1
- package/dist/graphql/types/enums.cjs.map +1 -1
- package/dist/graphql/types/enums.d.cts +1 -1
- package/dist/graphql/types/enums.d.cts.map +1 -1
- package/dist/graphql/types/enums.d.mts +1 -1
- package/dist/graphql/types/enums.d.mts.map +1 -1
- package/dist/graphql/types/enums.mjs +1 -1
- package/dist/graphql/types/enums.mjs.map +1 -1
- package/dist/graphql/types/extensions-response.type.cjs +1 -1
- package/dist/graphql/types/extensions-response.type.cjs.map +1 -1
- package/dist/graphql/types/extensions-response.type.d.cts +1 -1
- package/dist/graphql/types/extensions-response.type.d.cts.map +1 -1
- package/dist/graphql/types/extensions-response.type.d.mts +1 -1
- package/dist/graphql/types/extensions-response.type.d.mts.map +1 -1
- package/dist/graphql/types/extensions-response.type.mjs +1 -1
- package/dist/graphql/types/extensions-response.type.mjs.map +1 -1
- package/dist/graphql/types/load-agent-state-response.type.cjs +1 -1
- package/dist/graphql/types/load-agent-state-response.type.cjs.map +1 -1
- package/dist/graphql/types/load-agent-state-response.type.mjs +1 -1
- package/dist/graphql/types/load-agent-state-response.type.mjs.map +1 -1
- package/dist/graphql/types/message-status.type.cjs +1 -1
- package/dist/graphql/types/message-status.type.cjs.map +1 -1
- package/dist/graphql/types/message-status.type.d.cts +1 -1
- package/dist/graphql/types/message-status.type.d.cts.map +1 -1
- package/dist/graphql/types/message-status.type.d.mts +1 -1
- package/dist/graphql/types/message-status.type.d.mts.map +1 -1
- package/dist/graphql/types/message-status.type.mjs +1 -1
- package/dist/graphql/types/message-status.type.mjs.map +1 -1
- package/dist/graphql/types/meta-events.type.cjs +2 -2
- package/dist/graphql/types/meta-events.type.cjs.map +1 -1
- package/dist/graphql/types/meta-events.type.mjs +2 -2
- package/dist/graphql/types/meta-events.type.mjs.map +1 -1
- package/dist/graphql/types/response-status.type.cjs +1 -1
- package/dist/graphql/types/response-status.type.cjs.map +1 -1
- package/dist/graphql/types/response-status.type.d.cts +1 -1
- package/dist/graphql/types/response-status.type.d.cts.map +1 -1
- package/dist/graphql/types/response-status.type.d.mts +1 -1
- package/dist/graphql/types/response-status.type.d.mts.map +1 -1
- package/dist/graphql/types/response-status.type.mjs +1 -1
- package/dist/graphql/types/response-status.type.mjs.map +1 -1
- package/dist/index.d.cts +618 -4
- package/dist/index.d.mts +618 -4
- package/dist/langgraph.d.cts +54 -1
- package/dist/langgraph.d.mts +54 -1
- package/dist/lib/cloud/index.d.cts +1 -1
- package/dist/lib/cloud/index.d.cts.map +1 -1
- package/dist/lib/cloud/index.d.mts +1 -1
- package/dist/lib/cloud/index.d.mts.map +1 -1
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.cjs.map +1 -1
- package/dist/lib/index.d.cts +2 -2
- package/dist/lib/index.d.cts.map +1 -1
- package/dist/lib/index.d.mts +2 -2
- package/dist/lib/index.d.mts.map +1 -1
- package/dist/lib/index.mjs +1 -1
- package/dist/lib/index.mjs.map +1 -1
- package/dist/lib/integrations/index.d.cts +1 -1
- package/dist/lib/integrations/index.d.mts +1 -1
- package/dist/lib/integrations/nest/index.cjs +1 -1
- package/dist/lib/integrations/nest/index.cjs.map +1 -1
- package/dist/lib/integrations/nest/index.d.cts +1 -1
- package/dist/lib/integrations/nest/index.d.cts.map +1 -1
- package/dist/lib/integrations/nest/index.d.mts +1 -1
- package/dist/lib/integrations/nest/index.d.mts.map +1 -1
- package/dist/lib/integrations/nest/index.mjs +1 -1
- package/dist/lib/integrations/nest/index.mjs.map +1 -1
- package/dist/lib/integrations/nextjs/app-router.cjs +1 -1
- package/dist/lib/integrations/nextjs/app-router.cjs.map +1 -1
- package/dist/lib/integrations/nextjs/app-router.d.cts +1 -1
- package/dist/lib/integrations/nextjs/app-router.d.cts.map +1 -1
- package/dist/lib/integrations/nextjs/app-router.d.mts +1 -1
- package/dist/lib/integrations/nextjs/app-router.d.mts.map +1 -1
- package/dist/lib/integrations/nextjs/app-router.mjs +1 -1
- package/dist/lib/integrations/nextjs/app-router.mjs.map +1 -1
- package/dist/lib/integrations/nextjs/pages-router.cjs +1 -1
- package/dist/lib/integrations/nextjs/pages-router.cjs.map +1 -1
- package/dist/lib/integrations/nextjs/pages-router.d.cts +1 -2
- package/dist/lib/integrations/nextjs/pages-router.d.cts.map +1 -1
- package/dist/lib/integrations/nextjs/pages-router.d.mts +1 -2
- package/dist/lib/integrations/nextjs/pages-router.d.mts.map +1 -1
- package/dist/lib/integrations/nextjs/pages-router.mjs +1 -1
- package/dist/lib/integrations/nextjs/pages-router.mjs.map +1 -1
- package/dist/lib/integrations/node-express/index.cjs +1 -1
- package/dist/lib/integrations/node-express/index.cjs.map +1 -1
- package/dist/lib/integrations/node-express/index.d.cts +1 -1
- package/dist/lib/integrations/node-express/index.d.cts.map +1 -1
- package/dist/lib/integrations/node-express/index.d.mts +1 -1
- package/dist/lib/integrations/node-express/index.d.mts.map +1 -1
- package/dist/lib/integrations/node-express/index.mjs +1 -1
- package/dist/lib/integrations/node-express/index.mjs.map +1 -1
- package/dist/lib/integrations/node-http/index.cjs +1 -1
- package/dist/lib/integrations/node-http/index.cjs.map +1 -1
- package/dist/lib/integrations/node-http/index.d.cts +1 -1
- package/dist/lib/integrations/node-http/index.d.cts.map +1 -1
- package/dist/lib/integrations/node-http/index.d.mts +1 -1
- package/dist/lib/integrations/node-http/index.d.mts.map +1 -1
- package/dist/lib/integrations/node-http/index.mjs +1 -1
- package/dist/lib/integrations/node-http/index.mjs.map +1 -1
- package/dist/lib/integrations/node-http/request-handler.cjs +1 -1
- package/dist/lib/integrations/node-http/request-handler.cjs.map +1 -1
- package/dist/lib/integrations/node-http/request-handler.mjs +1 -1
- package/dist/lib/integrations/node-http/request-handler.mjs.map +1 -1
- package/dist/lib/integrations/shared.cjs +1 -1
- package/dist/lib/integrations/shared.cjs.map +1 -1
- package/dist/lib/integrations/shared.d.cts +30 -4
- package/dist/lib/integrations/shared.d.cts.map +1 -1
- package/dist/lib/integrations/shared.d.mts +30 -4
- package/dist/lib/integrations/shared.d.mts.map +1 -1
- package/dist/lib/integrations/shared.mjs +1 -1
- package/dist/lib/integrations/shared.mjs.map +1 -1
- package/dist/lib/logger.cjs +1 -1
- package/dist/lib/logger.cjs.map +1 -1
- package/dist/lib/logger.d.cts +1 -1
- package/dist/lib/logger.d.cts.map +1 -1
- package/dist/lib/logger.d.mts +1 -1
- package/dist/lib/logger.d.mts.map +1 -1
- package/dist/lib/logger.mjs +1 -1
- package/dist/lib/logger.mjs.map +1 -1
- package/dist/lib/observability.d.cts +1 -1
- package/dist/lib/observability.d.cts.map +1 -1
- package/dist/lib/observability.d.mts +1 -1
- package/dist/lib/observability.d.mts.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.cjs +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.cjs.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts +13 -3
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.mts +13 -3
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.mts.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.mjs +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.mjs.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/consts.cjs +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/consts.cjs.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/consts.d.cts +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/consts.d.cts.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/consts.d.mts +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/consts.d.mts.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/consts.mjs +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/consts.mjs.map +1 -1
- package/dist/lib/runtime/copilot-runtime.cjs +9 -1
- package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.cts +9 -1
- package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.mts +9 -1
- package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.mjs +9 -1
- package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
- package/dist/lib/runtime/mcp-tools-utils.cjs +1 -1
- package/dist/lib/runtime/mcp-tools-utils.cjs.map +1 -1
- package/dist/lib/runtime/mcp-tools-utils.d.cts +1 -1
- package/dist/lib/runtime/mcp-tools-utils.d.cts.map +1 -1
- package/dist/lib/runtime/mcp-tools-utils.d.mts +1 -1
- package/dist/lib/runtime/mcp-tools-utils.d.mts.map +1 -1
- package/dist/lib/runtime/mcp-tools-utils.mjs +1 -1
- package/dist/lib/runtime/mcp-tools-utils.mjs.map +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.cjs +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.cjs.map +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.d.cts +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.d.cts.map +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.d.mts +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.d.mts.map +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.mjs +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.mjs.map +1 -1
- package/dist/lib/runtime/types.cjs +1 -1
- package/dist/lib/runtime/types.cjs.map +1 -1
- package/dist/lib/runtime/types.d.cts +1 -1
- package/dist/lib/runtime/types.d.cts.map +1 -1
- package/dist/lib/runtime/types.d.mts +1 -1
- package/dist/lib/runtime/types.d.mts.map +1 -1
- package/dist/lib/runtime/types.mjs +1 -1
- package/dist/lib/runtime/types.mjs.map +1 -1
- package/dist/lib/telemetry-client.cjs +1 -1
- package/dist/lib/telemetry-client.cjs.map +1 -1
- package/dist/lib/telemetry-client.mjs +2 -2
- package/dist/lib/telemetry-client.mjs.map +1 -1
- package/dist/lib/telemetry-disclosure.cjs +1 -1
- package/dist/lib/telemetry-disclosure.cjs.map +1 -1
- package/dist/lib/telemetry-disclosure.mjs +1 -1
- package/dist/lib/telemetry-disclosure.mjs.map +1 -1
- package/dist/package.cjs +5 -5
- package/dist/{runtime/package.mjs → package.mjs} +6 -6
- package/dist/package.mjs.map +1 -0
- package/dist/service-adapters/anthropic/anthropic-adapter.cjs +1 -1
- package/dist/service-adapters/anthropic/anthropic-adapter.cjs.map +1 -1
- package/dist/service-adapters/anthropic/anthropic-adapter.d.cts +4 -4
- package/dist/service-adapters/anthropic/anthropic-adapter.d.cts.map +1 -1
- package/dist/service-adapters/anthropic/anthropic-adapter.d.mts +5 -4
- package/dist/service-adapters/anthropic/anthropic-adapter.d.mts.map +1 -1
- package/dist/service-adapters/anthropic/anthropic-adapter.mjs +1 -1
- package/dist/service-adapters/anthropic/anthropic-adapter.mjs.map +1 -1
- package/dist/service-adapters/anthropic/utils.cjs +1 -1
- package/dist/service-adapters/anthropic/utils.cjs.map +1 -1
- package/dist/service-adapters/anthropic/utils.mjs +1 -1
- package/dist/service-adapters/anthropic/utils.mjs.map +1 -1
- package/dist/service-adapters/bedrock/bedrock-adapter.cjs +1 -1
- package/dist/service-adapters/bedrock/bedrock-adapter.cjs.map +1 -1
- package/dist/service-adapters/bedrock/bedrock-adapter.d.cts +1 -1
- package/dist/service-adapters/bedrock/bedrock-adapter.d.cts.map +1 -1
- package/dist/service-adapters/bedrock/bedrock-adapter.d.mts +1 -1
- package/dist/service-adapters/bedrock/bedrock-adapter.d.mts.map +1 -1
- package/dist/service-adapters/bedrock/bedrock-adapter.mjs +1 -1
- package/dist/service-adapters/bedrock/bedrock-adapter.mjs.map +1 -1
- package/dist/service-adapters/empty/empty-adapter.cjs +1 -1
- package/dist/service-adapters/empty/empty-adapter.cjs.map +1 -1
- package/dist/service-adapters/empty/empty-adapter.d.cts +1 -1
- package/dist/service-adapters/empty/empty-adapter.d.cts.map +1 -1
- package/dist/service-adapters/empty/empty-adapter.d.mts +1 -1
- package/dist/service-adapters/empty/empty-adapter.d.mts.map +1 -1
- package/dist/service-adapters/empty/empty-adapter.mjs +1 -1
- package/dist/service-adapters/empty/empty-adapter.mjs.map +1 -1
- package/dist/service-adapters/events.cjs +1 -1
- package/dist/service-adapters/events.cjs.map +1 -1
- package/dist/service-adapters/events.d.cts +1 -1
- package/dist/service-adapters/events.d.cts.map +1 -1
- package/dist/service-adapters/events.d.mts +1 -1
- package/dist/service-adapters/events.d.mts.map +1 -1
- package/dist/service-adapters/events.mjs +1 -1
- package/dist/service-adapters/events.mjs.map +1 -1
- package/dist/service-adapters/experimental/ollama/ollama-adapter.cjs +1 -1
- package/dist/service-adapters/experimental/ollama/ollama-adapter.cjs.map +1 -1
- package/dist/service-adapters/experimental/ollama/ollama-adapter.d.cts +1 -1
- package/dist/service-adapters/experimental/ollama/ollama-adapter.d.cts.map +1 -1
- package/dist/service-adapters/experimental/ollama/ollama-adapter.d.mts +1 -1
- package/dist/service-adapters/experimental/ollama/ollama-adapter.d.mts.map +1 -1
- package/dist/service-adapters/experimental/ollama/ollama-adapter.mjs +1 -1
- package/dist/service-adapters/experimental/ollama/ollama-adapter.mjs.map +1 -1
- package/dist/service-adapters/google/google-genai-adapter.cjs +1 -1
- package/dist/service-adapters/google/google-genai-adapter.cjs.map +1 -1
- package/dist/service-adapters/google/google-genai-adapter.d.cts +1 -1
- package/dist/service-adapters/google/google-genai-adapter.d.cts.map +1 -1
- package/dist/service-adapters/google/google-genai-adapter.d.mts +1 -1
- package/dist/service-adapters/google/google-genai-adapter.d.mts.map +1 -1
- package/dist/service-adapters/google/google-genai-adapter.mjs +1 -1
- package/dist/service-adapters/google/google-genai-adapter.mjs.map +1 -1
- package/dist/service-adapters/groq/groq-adapter.cjs +1 -1
- package/dist/service-adapters/groq/groq-adapter.cjs.map +1 -1
- package/dist/service-adapters/groq/groq-adapter.d.cts +4 -4
- package/dist/service-adapters/groq/groq-adapter.d.cts.map +1 -1
- package/dist/service-adapters/groq/groq-adapter.d.mts +5 -4
- package/dist/service-adapters/groq/groq-adapter.d.mts.map +1 -1
- package/dist/service-adapters/groq/groq-adapter.mjs +1 -1
- package/dist/service-adapters/groq/groq-adapter.mjs.map +1 -1
- package/dist/service-adapters/index.d.cts +2 -2
- package/dist/service-adapters/index.d.mts +3 -3
- package/dist/service-adapters/langchain/langchain-adapter.cjs +1 -1
- package/dist/service-adapters/langchain/langchain-adapter.cjs.map +1 -1
- package/dist/service-adapters/langchain/langchain-adapter.d.cts +1 -1
- package/dist/service-adapters/langchain/langchain-adapter.d.cts.map +1 -1
- package/dist/service-adapters/langchain/langchain-adapter.d.mts +1 -1
- package/dist/service-adapters/langchain/langchain-adapter.d.mts.map +1 -1
- package/dist/service-adapters/langchain/langchain-adapter.mjs +1 -1
- package/dist/service-adapters/langchain/langchain-adapter.mjs.map +1 -1
- package/dist/service-adapters/langchain/langserve.cjs +1 -1
- package/dist/service-adapters/langchain/langserve.cjs.map +1 -1
- package/dist/service-adapters/langchain/langserve.d.cts +1 -1
- package/dist/service-adapters/langchain/langserve.d.cts.map +1 -1
- package/dist/service-adapters/langchain/langserve.d.mts +1 -1
- package/dist/service-adapters/langchain/langserve.d.mts.map +1 -1
- package/dist/service-adapters/langchain/langserve.mjs +1 -1
- package/dist/service-adapters/langchain/langserve.mjs.map +1 -1
- package/dist/service-adapters/langchain/types.d.cts +1 -1
- package/dist/service-adapters/langchain/types.d.cts.map +1 -1
- package/dist/service-adapters/langchain/types.d.mts +1 -1
- package/dist/service-adapters/langchain/types.d.mts.map +1 -1
- package/dist/service-adapters/langchain/utils.cjs +1 -1
- package/dist/service-adapters/langchain/utils.cjs.map +1 -1
- package/dist/service-adapters/langchain/utils.mjs +1 -1
- package/dist/service-adapters/langchain/utils.mjs.map +1 -1
- package/dist/service-adapters/openai/openai-adapter.cjs +1 -1
- package/dist/service-adapters/openai/openai-adapter.cjs.map +1 -1
- package/dist/service-adapters/openai/openai-adapter.d.cts +1 -1
- package/dist/service-adapters/openai/openai-adapter.d.cts.map +1 -1
- package/dist/service-adapters/openai/openai-adapter.d.mts +1 -1
- package/dist/service-adapters/openai/openai-adapter.d.mts.map +1 -1
- package/dist/service-adapters/openai/openai-adapter.mjs +1 -1
- package/dist/service-adapters/openai/openai-adapter.mjs.map +1 -1
- package/dist/service-adapters/openai/openai-assistant-adapter.cjs +1 -1
- package/dist/service-adapters/openai/openai-assistant-adapter.cjs.map +1 -1
- package/dist/service-adapters/openai/openai-assistant-adapter.d.cts +1 -1
- package/dist/service-adapters/openai/openai-assistant-adapter.d.cts.map +1 -1
- package/dist/service-adapters/openai/openai-assistant-adapter.d.mts +1 -1
- package/dist/service-adapters/openai/openai-assistant-adapter.d.mts.map +1 -1
- package/dist/service-adapters/openai/openai-assistant-adapter.mjs +1 -1
- package/dist/service-adapters/openai/openai-assistant-adapter.mjs.map +1 -1
- package/dist/service-adapters/openai/utils.cjs +1 -1
- package/dist/service-adapters/openai/utils.cjs.map +1 -1
- package/dist/service-adapters/openai/utils.mjs +1 -1
- package/dist/service-adapters/openai/utils.mjs.map +1 -1
- package/dist/service-adapters/service-adapter.d.cts +1 -1
- package/dist/service-adapters/service-adapter.d.cts.map +1 -1
- package/dist/service-adapters/service-adapter.d.mts +1 -1
- package/dist/service-adapters/service-adapter.d.mts.map +1 -1
- package/dist/service-adapters/shared/error-utils.cjs +1 -1
- package/dist/service-adapters/shared/error-utils.cjs.map +1 -1
- package/dist/service-adapters/shared/error-utils.d.cts +1 -1
- package/dist/service-adapters/shared/error-utils.d.cts.map +1 -1
- package/dist/service-adapters/shared/error-utils.d.mts +1 -1
- package/dist/service-adapters/shared/error-utils.d.mts.map +1 -1
- package/dist/service-adapters/shared/error-utils.mjs +1 -1
- package/dist/service-adapters/shared/error-utils.mjs.map +1 -1
- package/dist/service-adapters/shared/index.d.mts +1 -1
- package/dist/service-adapters/shared/sdk-client-utils.cjs +1 -1
- package/dist/service-adapters/shared/sdk-client-utils.cjs.map +1 -1
- package/dist/service-adapters/shared/sdk-client-utils.d.cts +21 -2
- package/dist/service-adapters/shared/sdk-client-utils.d.cts.map +1 -1
- package/dist/service-adapters/shared/sdk-client-utils.d.mts +21 -2
- package/dist/service-adapters/shared/sdk-client-utils.d.mts.map +1 -1
- package/dist/service-adapters/shared/sdk-client-utils.mjs +1 -1
- package/dist/service-adapters/shared/sdk-client-utils.mjs.map +1 -1
- package/dist/service-adapters/unify/unify-adapter.cjs +1 -1
- package/dist/service-adapters/unify/unify-adapter.cjs.map +1 -1
- package/dist/service-adapters/unify/unify-adapter.d.cts +1 -1
- package/dist/service-adapters/unify/unify-adapter.d.cts.map +1 -1
- package/dist/service-adapters/unify/unify-adapter.d.mts +1 -1
- package/dist/service-adapters/unify/unify-adapter.d.mts.map +1 -1
- package/dist/service-adapters/unify/unify-adapter.mjs +1 -1
- package/dist/service-adapters/unify/unify-adapter.mjs.map +1 -1
- package/dist/utils/failed-response-status-reasons.cjs +1 -1
- package/dist/utils/failed-response-status-reasons.cjs.map +1 -1
- package/dist/utils/failed-response-status-reasons.d.cts +1 -1
- package/dist/utils/failed-response-status-reasons.d.cts.map +1 -1
- package/dist/utils/failed-response-status-reasons.d.mts +1 -1
- package/dist/utils/failed-response-status-reasons.d.mts.map +1 -1
- package/dist/utils/failed-response-status-reasons.mjs +1 -1
- package/dist/utils/failed-response-status-reasons.mjs.map +1 -1
- package/dist/v2/runtime/core/channel-activation-config.cjs.map +1 -1
- package/dist/v2/runtime/core/channel-activation-config.d.cts +2 -2
- package/dist/v2/runtime/core/channel-activation-config.d.cts.map +1 -1
- package/dist/v2/runtime/core/channel-activation-config.d.mts +2 -2
- package/dist/v2/runtime/core/channel-activation-config.d.mts.map +1 -1
- package/dist/v2/runtime/core/channel-activation-config.mjs.map +1 -1
- package/dist/v2/runtime/core/channel-manager.cjs.map +1 -1
- package/dist/v2/runtime/core/channel-manager.d.cts +2 -2
- package/dist/v2/runtime/core/channel-manager.d.cts.map +1 -1
- package/dist/v2/runtime/core/channel-manager.d.mts +2 -2
- package/dist/v2/runtime/core/channel-manager.d.mts.map +1 -1
- package/dist/v2/runtime/core/channel-manager.mjs.map +1 -1
- package/dist/v2/runtime/core/runtime.cjs +1 -0
- package/dist/v2/runtime/core/runtime.cjs.map +1 -1
- package/dist/v2/runtime/core/runtime.d.cts.map +1 -1
- package/dist/v2/runtime/core/runtime.d.mts.map +1 -1
- package/dist/v2/runtime/core/runtime.mjs +2 -1
- package/dist/v2/runtime/core/runtime.mjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/memories.cjs +1 -1
- package/dist/v2/runtime/handlers/intelligence/memories.cjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/memories.mjs +1 -1
- package/dist/v2/runtime/handlers/intelligence/memories.mjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/threads.cjs +1 -1
- package/dist/v2/runtime/handlers/intelligence/threads.cjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/threads.mjs +1 -1
- package/dist/v2/runtime/handlers/intelligence/threads.mjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/sse-response.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/sse-response.mjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/run.cjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/run.mjs.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.cjs +14 -9
- package/dist/v2/runtime/intelligence-platform/client.cjs.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.cts +16 -11
- package/dist/v2/runtime/intelligence-platform/client.d.cts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.mts +16 -11
- package/dist/v2/runtime/intelligence-platform/client.d.mts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.mjs +14 -9
- package/dist/v2/runtime/intelligence-platform/client.mjs.map +1 -1
- package/dist/v2/runtime/runner/in-memory.cjs +3 -3
- package/dist/v2/runtime/runner/in-memory.cjs.map +1 -1
- package/dist/v2/runtime/runner/in-memory.d.cts +4 -4
- package/dist/v2/runtime/runner/in-memory.d.mts +4 -4
- package/dist/v2/runtime/runner/in-memory.mjs +3 -3
- package/dist/v2/runtime/runner/in-memory.mjs.map +1 -1
- package/dist/v2/runtime/telemetry/telemetry-client.mjs +1 -1
- package/package.json +7 -7
- package/skills/runtime/SKILL.md +1 -1
- package/skills/runtime/references/agent-runners-custom.md +1 -1
- package/skills/runtime/references/agent-runners.md +11 -5
- package/skills/runtime/references/intelligence-mode.md +1 -1
- package/dist/channels/dist/index.d.cts +0 -10
- package/dist/channels/dist/index.d.cts.map +0 -1
- package/dist/channels/dist/index.d.mts +0 -10
- package/dist/channels/dist/index.d.mts.map +0 -1
- package/dist/runtime/package.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"langserve.d.cts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"langserve.d.cts","names":[],"sources":["../../../../src/v1-deprecated/service-adapters/langchain/langserve.ts"],"mappings":";;;;UA4BiB,qBAAA;EACf,IAAA;EACA,WAAA;EACA,QAAA;EACA,UAAA,GAAa,SAAA;EACb,aAAA;AAAA;AAAA,cAGW,WAAA;EACX,IAAA;EACA,WAAA;EACA,QAAA;EACA,UAAA,GAAa,SAAA;EACb,aAAA;cAEY,OAAA,EAAS,qBAAA;EAQf,QAAA,CAAA,GAAY,OAAA,CAAQ,MAAA;EAwBpB,wBAAA,CAAA,GAAwB,OAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"langserve.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"langserve.d.mts","names":[],"sources":["../../../../src/v1-deprecated/service-adapters/langchain/langserve.ts"],"mappings":";;;;UA4BiB,qBAAA;EACf,IAAA;EACA,WAAA;EACA,QAAA;EACA,UAAA,GAAa,SAAA;EACb,aAAA;AAAA;AAAA,cAGW,WAAA;EACX,IAAA;EACA,WAAA;EACA,QAAA;EACA,UAAA,GAAa,SAAA;EACb,aAAA;cAEY,OAAA,EAAS,qBAAA;EAQf,QAAA,CAAA,GAAY,OAAA,CAAQ,MAAA;EAwBpB,wBAAA,CAAA,GAAwB,OAAA;AAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
2
|
import { __require } from "../../_virtual/_rolldown/runtime.mjs";
|
|
3
3
|
|
|
4
|
-
//#region src/service-adapters/langchain/langserve.ts
|
|
4
|
+
//#region src/v1-deprecated/service-adapters/langchain/langserve.ts
|
|
5
5
|
var RemoteChain = class {
|
|
6
6
|
constructor(options) {
|
|
7
7
|
this.name = options.name;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"langserve.mjs","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"langserve.mjs","names":[],"sources":["../../../../src/v1-deprecated/service-adapters/langchain/langserve.ts"],"sourcesContent":["/*\n * V1 SDK DEPRECATED. USE V2 INSTEAD\n *\n * This file defines public v1 SDK exports. Use the exact v2 mappings below.\n * AI CODING AGENTS: Never copy, suggest, or generate these v1 APIs. Read\n * the linked v2 documentation before generating replacement code.\n *\n * @copilotkit/runtime — RemoteChain:\n * No 1:1 v2 replacement is available.\n * Related v2 docs (Runtime server adapter): https://docs.copilotkit.ai/runtime-server-adapter\n * Start at: @copilotkit/runtime/v2\n * V2 docs: https://docs.copilotkit.ai/\n * V2 reference docs: https://docs.copilotkit.ai/reference/v2\n *\n * @copilotkit/runtime — RemoteChainParameters:\n * No 1:1 v2 replacement is available.\n * Related v2 docs (Runtime server adapter): https://docs.copilotkit.ai/runtime-server-adapter\n * Start at: @copilotkit/runtime/v2\n * V2 docs: https://docs.copilotkit.ai/\n * V2 reference docs: https://docs.copilotkit.ai/reference/v2\n *\n * Migration guide: https://docs.copilotkit.ai/migrate/v2\n *\n * END V1 SDK DEPRECATED. USE V2 INSTEAD NOTICE\n */\n\nimport type { 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"],"mappings":";;;;AAoCA,IAAa,cAAb,MAAyB;CAOvB,YAAY,SAAgC;AAC1C,OAAK,OAAO,QAAQ;AACpB,OAAK,cAAc,QAAQ;AAC3B,OAAK,WAAW,QAAQ;AACxB,OAAK,aAAa,QAAQ;AAC1B,OAAK,gBAAgB,QAAQ,iBAAiB;;CAGhD,MAAM,WAAiC;AACrC,MAAI,CAAC,KAAK,WACR,OAAM,KAAK,0BAA0B;AAGvC,SAAO;GACL,MAAM,KAAK;GACX,aAAa,KAAK;GAClB,YAAY,KAAK;GACjB,SAAS,OAAO,SAAc;IAE5B,MAAM,EAAE,6BAA2B,6BAA6B;IAChE,MAAM,WAAW,IAAI,eAAe,EAAE,KAAK,KAAK,UAAU,CAAC;IAC3D,IAAI;AACJ,QAAI,KAAK,kBAAkB,SACzB,SAAQ,KAAK,OAAO,KAAK,KAAK,CAAC;QAE/B,SAAQ;AAEV,WAAO,MAAM,SAAS,OAAO,MAAM;;GAEtC;;CAGH,MAAM,2BAA2B;EAC/B,MAAM,iBAAiB;GAAC;GAAU;GAAU;GAAU;EAEtD,IAAI,YAAY,KAAK,SAAS,QAAQ,QAAQ,GAAG,GAAG;EACpD,IAAI,SAAS,MAAM,MAAM,UAAU,CAChC,MAAM,QAAQ,IAAI,MAAM,CAAC,CACzB,YAAY;AACX,SAAM,IAAI,MAAM,yCAAyC,UAAU;IACnE;AAGJ,MAAI,eAAe,SAAS,OAAO,KAAK,EAAE;AACxC,QAAK,gBAAgB;AACrB,QAAK,aAAa,CAChB;IACE,MAAM;IACN,MAAM,OAAO;IACb,aAAa;IACd,CACF;aACQ,OAAO,SAAS,UAAU;AACnC,QAAK,gBAAgB;AACrB,QAAK,aAAa,OAAO,KAAK,OAAO,WAAW,CAAC,KAAK,QAAQ;IAC5D,IAAI,WAAW,OAAO,WAAW;AACjC,QAAI,CAAC,eAAe,SAAS,SAAS,KAAK,CACzC,OAAM,IAAI,MAAM,0BAA0B;AAE5C,WAAO;KACL,MAAM;KACN,MAAM,SAAS;KACf,aAAa,SAAS,eAAe;KACrC,UAAU,OAAO,UAAU,SAAS,IAAI,IAAI;KAC7C;KACD;QAEF,OAAM,IAAI,MAAM,0BAA0B"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { AIMessage, AIMessageChunk, BaseMessageChunk } from "@langchain/core/messages";
|
|
3
3
|
import { IterableReadableStream, IterableReadableStreamInterface } from "@langchain/core/utils/stream";
|
|
4
4
|
|
|
5
|
-
//#region src/service-adapters/langchain/types.d.ts
|
|
5
|
+
//#region src/v1-deprecated/service-adapters/langchain/types.d.ts
|
|
6
6
|
type LangChainBaseMessageChunkStream = IterableReadableStream<BaseMessageChunk>;
|
|
7
7
|
type LangChainAIMessageChunkStream = IterableReadableStreamInterface<AIMessageChunk>;
|
|
8
8
|
type LangChainReturnType = LangChainBaseMessageChunkStream | LangChainAIMessageChunkStream | BaseMessageChunk | string | AIMessage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.cts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"types.d.cts","names":[],"sources":["../../../../src/v1-deprecated/service-adapters/langchain/types.ts"],"mappings":";;;;;KAUY,+BAAA,GACV,sBAAA,CAAuB,gBAAA;AAAA,KACb,6BAAA,GACV,+BAAA,CAAgC,cAAA;AAAA,KACtB,mBAAA,GACR,+BAAA,GACA,6BAAA,GACA,gBAAA,YAEA,SAAA"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { AIMessage, AIMessageChunk, BaseMessageChunk } from "@langchain/core/messages";
|
|
3
3
|
import { IterableReadableStream, IterableReadableStreamInterface } from "@langchain/core/utils/stream";
|
|
4
4
|
|
|
5
|
-
//#region src/service-adapters/langchain/types.d.ts
|
|
5
|
+
//#region src/v1-deprecated/service-adapters/langchain/types.d.ts
|
|
6
6
|
type LangChainBaseMessageChunkStream = IterableReadableStream<BaseMessageChunk>;
|
|
7
7
|
type LangChainAIMessageChunkStream = IterableReadableStreamInterface<AIMessageChunk>;
|
|
8
8
|
type LangChainReturnType = LangChainBaseMessageChunkStream | LangChainAIMessageChunkStream | BaseMessageChunk | string | AIMessage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../../../../src/v1-deprecated/service-adapters/langchain/types.ts"],"mappings":";;;;;KAUY,+BAAA,GACV,sBAAA,CAAuB,gBAAA;AAAA,KACb,6BAAA,GACV,+BAAA,CAAgC,cAAA;AAAA,KACtB,mBAAA,GACR,+BAAA,GACA,6BAAA,GACA,gBAAA,YAEA,SAAA"}
|
|
@@ -4,7 +4,7 @@ let _copilotkit_shared = require("@copilotkit/shared");
|
|
|
4
4
|
let _langchain_core_messages = require("@langchain/core/messages");
|
|
5
5
|
let _langchain_core_tools = require("@langchain/core/tools");
|
|
6
6
|
|
|
7
|
-
//#region src/service-adapters/langchain/utils.ts
|
|
7
|
+
//#region src/v1-deprecated/service-adapters/langchain/utils.ts
|
|
8
8
|
function convertMessageToLangChainMessage(message) {
|
|
9
9
|
if (message.isTextMessage()) {
|
|
10
10
|
if (message.role == "user") return new _langchain_core_messages.HumanMessage(message.content);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","names":["HumanMessage","AIMessage","SystemMessage","ToolMessage","DynamicStructuredTool"],"sources":["../../../src/service-adapters/langchain/utils.ts"],"sourcesContent":["import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n HumanMessage,\n SystemMessage,\n ToolMessage,\n} from \"@langchain/core/messages\";\nimport { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { z } from \"zod\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { LangChainReturnType } from \"./types\";\nimport { RuntimeEventSubject } from \"../events\";\nimport { randomId, convertJsonSchemaToZodSchema } from \"@copilotkit/shared\";\n\nexport function convertMessageToLangChainMessage(\n message: Message,\n): 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(\n actionInput: ActionInput,\n): 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 (\n object &&\n typeof object === \"object\" &&\n object.constructor &&\n object.constructor.name\n ) {\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 (\n Object.prototype.toString.call(message) === \"[object BaseMessageChunk]\"\n );\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)\n toolCallDetails.prevIndex = chunk.index;\n }\n // Differentiate when calling the same tool but with different index\n if (chunk?.id)\n toolCallDetails.id =\n 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({\n actionExecutionId: toolCallId,\n });\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 = 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({\n actionExecutionId: toolCallId,\n });\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.cjs","names":["HumanMessage","AIMessage","SystemMessage","ToolMessage","DynamicStructuredTool"],"sources":["../../../../src/v1-deprecated/service-adapters/langchain/utils.ts"],"sourcesContent":["import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n HumanMessage,\n SystemMessage,\n ToolMessage,\n} from \"@langchain/core/messages\";\nimport { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { z } from \"zod\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { LangChainReturnType } from \"./types\";\nimport { RuntimeEventSubject } from \"../events\";\nimport { randomId, convertJsonSchemaToZodSchema } from \"@copilotkit/shared\";\n\nexport function convertMessageToLangChainMessage(\n message: Message,\n): 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(\n actionInput: ActionInput,\n): 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 (\n object &&\n typeof object === \"object\" &&\n object.constructor &&\n object.constructor.name\n ) {\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 (\n Object.prototype.toString.call(message) === \"[object BaseMessageChunk]\"\n );\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)\n toolCallDetails.prevIndex = chunk.index;\n }\n // Differentiate when calling the same tool but with different index\n if (chunk?.id)\n toolCallDetails.id =\n 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({\n actionExecutionId: toolCallId,\n });\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 = 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({\n actionExecutionId: toolCallId,\n });\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"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { convertJsonSchemaToZodSchema, randomId } from "@copilotkit/shared";
|
|
|
3
3
|
import { AIMessage, HumanMessage, SystemMessage, ToolMessage } from "@langchain/core/messages";
|
|
4
4
|
import { DynamicStructuredTool } from "@langchain/core/tools";
|
|
5
5
|
|
|
6
|
-
//#region src/service-adapters/langchain/utils.ts
|
|
6
|
+
//#region src/v1-deprecated/service-adapters/langchain/utils.ts
|
|
7
7
|
function convertMessageToLangChainMessage(message) {
|
|
8
8
|
if (message.isTextMessage()) {
|
|
9
9
|
if (message.role == "user") return new HumanMessage(message.content);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","names":[],"sources":["../../../src/service-adapters/langchain/utils.ts"],"sourcesContent":["import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n HumanMessage,\n SystemMessage,\n ToolMessage,\n} from \"@langchain/core/messages\";\nimport { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { z } from \"zod\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { LangChainReturnType } from \"./types\";\nimport { RuntimeEventSubject } from \"../events\";\nimport { randomId, convertJsonSchemaToZodSchema } from \"@copilotkit/shared\";\n\nexport function convertMessageToLangChainMessage(\n message: Message,\n): 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(\n actionInput: ActionInput,\n): 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 (\n object &&\n typeof object === \"object\" &&\n object.constructor &&\n object.constructor.name\n ) {\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 (\n Object.prototype.toString.call(message) === \"[object BaseMessageChunk]\"\n );\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)\n toolCallDetails.prevIndex = chunk.index;\n }\n // Differentiate when calling the same tool but with different index\n if (chunk?.id)\n toolCallDetails.id =\n 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({\n actionExecutionId: toolCallId,\n });\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 = 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({\n actionExecutionId: toolCallId,\n });\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.mjs","names":[],"sources":["../../../../src/v1-deprecated/service-adapters/langchain/utils.ts"],"sourcesContent":["import {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n HumanMessage,\n SystemMessage,\n ToolMessage,\n} from \"@langchain/core/messages\";\nimport { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { z } from \"zod\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { LangChainReturnType } from \"./types\";\nimport { RuntimeEventSubject } from \"../events\";\nimport { randomId, convertJsonSchemaToZodSchema } from \"@copilotkit/shared\";\n\nexport function convertMessageToLangChainMessage(\n message: Message,\n): 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(\n actionInput: ActionInput,\n): 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 (\n object &&\n typeof object === \"object\" &&\n object.constructor &&\n object.constructor.name\n ) {\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 (\n Object.prototype.toString.call(message) === \"[object BaseMessageChunk]\"\n );\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)\n toolCallDetails.prevIndex = chunk.index;\n }\n // Differentiate when calling the same tool but with different index\n if (chunk?.id)\n toolCallDetails.id =\n 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({\n actionExecutionId: toolCallId,\n });\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 = 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({\n actionExecutionId: toolCallId,\n });\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"],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ let openai = require("openai");
|
|
|
8
8
|
openai = require_runtime.__toESM(openai);
|
|
9
9
|
let _copilotkit_shared = require("@copilotkit/shared");
|
|
10
10
|
|
|
11
|
-
//#region src/service-adapters/openai/openai-adapter.ts
|
|
11
|
+
//#region src/v1-deprecated/service-adapters/openai/openai-adapter.ts
|
|
12
12
|
const DEFAULT_MODEL = "gpt-4o";
|
|
13
13
|
var OpenAIAdapter = class {
|
|
14
14
|
get openai() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-adapter.cjs","names":["openai","getSdkClientOptions","Openai","convertActionInputToOpenAITool","convertMessageToOpenAIMessage","limitMessagesToTokenCount","getChatCompletionsForStreaming","convertServiceAdapterError"],"sources":["../../../src/service-adapters/openai/openai-adapter.ts"],"sourcesContent":["/**\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 { LanguageModel } from \"ai\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\nimport type OpenAI from \"openai\";\nimport Openai from \"openai\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n getChatCompletionsForStreaming,\n} from \"./utils\";\nimport { randomUUID } from \"@copilotkit/shared\";\nimport { convertServiceAdapterError, getSdkClientOptions } 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 /**\n * Optional maximum input token limit. Overrides the default model-based limit\n * used when trimming messages to fit the context window.\n */\n maxInputTokens?: number;\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 private maxInputTokens?: number;\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 this.maxInputTokens = params?.maxInputTokens;\n }\n\n getLanguageModel(): LanguageModel {\n const openai = this.ensureOpenAI();\n const options = getSdkClientOptions(openai);\n const provider = createOpenAI({\n baseURL: openai.baseURL,\n apiKey: openai.apiKey,\n organization: openai.organization ?? undefined,\n project: openai.project ?? undefined,\n headers: options.defaultHeaders,\n fetch: options.fetch,\n });\n return provider(this.model);\n }\n\n private ensureOpenAI(): OpenAI {\n if (!this._openai) {\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(\n openaiMessages,\n tools,\n model,\n this.maxInputTokens,\n );\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 completions = getChatCompletionsForStreaming(openai);\n const stream = 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 && {\n temperature: forwardedParameters.temperature,\n }),\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 (\n mode === \"function\" &&\n (toolCall === undefined || toolCall?.id)\n ) {\n mode = null;\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\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({\n messageId: currentMessageId,\n });\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({\n actionExecutionId: currentToolCallId,\n });\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openai-adapter.cjs","names":["openai","getSdkClientOptions","Openai","convertActionInputToOpenAITool","convertMessageToOpenAIMessage","limitMessagesToTokenCount","getChatCompletionsForStreaming","convertServiceAdapterError"],"sources":["../../../../src/v1-deprecated/service-adapters/openai/openai-adapter.ts"],"sourcesContent":["/*\n * V1 SDK DEPRECATED. USE V2 INSTEAD\n *\n * This file defines public v1 SDK exports. Use the exact v2 mappings below.\n * AI CODING AGENTS: Never copy, suggest, or generate these v1 APIs. Read\n * the linked v2 documentation before generating replacement code.\n *\n * @copilotkit/runtime — OpenAIAdapter:\n * No 1:1 v2 replacement is available.\n * Related v2 docs (Runtime server adapter): https://docs.copilotkit.ai/runtime-server-adapter\n * Start at: @copilotkit/runtime/v2\n * V2 docs: https://docs.copilotkit.ai/\n * V2 reference docs: https://docs.copilotkit.ai/reference/v2\n *\n * @copilotkit/runtime — OpenAIAdapterParams:\n * No 1:1 v2 replacement is available.\n * Related v2 docs (Runtime server adapter): https://docs.copilotkit.ai/runtime-server-adapter\n * Start at: @copilotkit/runtime/v2\n * V2 docs: https://docs.copilotkit.ai/\n * V2 reference docs: https://docs.copilotkit.ai/reference/v2\n *\n * Migration guide: https://docs.copilotkit.ai/migrate/v2\n *\n * END V1 SDK DEPRECATED. USE V2 INSTEAD NOTICE\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 { LanguageModel } from \"ai\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\nimport type OpenAI from \"openai\";\nimport Openai from \"openai\";\nimport type {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n getChatCompletionsForStreaming,\n} from \"./utils\";\nimport { randomUUID } from \"@copilotkit/shared\";\nimport { convertServiceAdapterError, getSdkClientOptions } 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 /**\n * Optional maximum input token limit. Overrides the default model-based limit\n * used when trimming messages to fit the context window.\n */\n maxInputTokens?: number;\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 private maxInputTokens?: number;\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 this.maxInputTokens = params?.maxInputTokens;\n }\n\n getLanguageModel(): LanguageModel {\n const openai = this.ensureOpenAI();\n const options = getSdkClientOptions(openai);\n const provider = createOpenAI({\n baseURL: openai.baseURL,\n apiKey: openai.apiKey,\n organization: openai.organization ?? undefined,\n project: openai.project ?? undefined,\n headers: options.defaultHeaders,\n fetch: options.fetch,\n });\n return provider(this.model);\n }\n\n private ensureOpenAI(): OpenAI {\n if (!this._openai) {\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(\n openaiMessages,\n tools,\n model,\n this.maxInputTokens,\n );\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 completions = getChatCompletionsForStreaming(openai);\n const stream = 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 && {\n temperature: forwardedParameters.temperature,\n }),\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 (\n mode === \"function\" &&\n (toolCall === undefined || toolCall?.id)\n ) {\n mode = null;\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\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({\n messageId: currentMessageId,\n });\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({\n actionExecutionId: currentToolCallId,\n });\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"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { CopilotRuntimeChatCompletionRequest, CopilotRuntimeChatCompletionRespon
|
|
|
3
3
|
import { LanguageModel } from "ai";
|
|
4
4
|
import OpenAI from "openai";
|
|
5
5
|
|
|
6
|
-
//#region src/service-adapters/openai/openai-adapter.d.ts
|
|
6
|
+
//#region src/v1-deprecated/service-adapters/openai/openai-adapter.d.ts
|
|
7
7
|
interface OpenAIAdapterParams {
|
|
8
8
|
/**
|
|
9
9
|
* An optional OpenAI instance to use. If not provided, a new instance will be
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-adapter.d.cts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"openai-adapter.d.cts","names":[],"sources":["../../../../src/v1-deprecated/service-adapters/openai/openai-adapter.ts"],"mappings":";;;;;;UAgGiB,mBAAA;;;;;EAKf,MAAA,GAAS,MAAA;;;;EAKT,KAAA;;;;;;;;;EAUA,wBAAA;;;;;;;EAQA,cAAA;;;;;EAMA,cAAA;AAAA;AAAA,cAGW,aAAA,YAAyB,qBAAA;EAC7B,KAAA;EACA,QAAA;EAAA,QAEC,wBAAA;EAAA,QACA,OAAA;EAAA,QACA,cAAA;EAAA,QACA,cAAA;EAAA,IAEG,MAAA,CAAA,GAAU,MAAA;EAAA,IAGV,IAAA,CAAA;cAIC,MAAA,GAAS,mBAAA;EAcrB,gBAAA,CAAA,GAAoB,aAAA;EAAA,QAcZ,YAAA;EAOF,OAAA,CACJ,OAAA,EAAS,mCAAA,GACR,OAAA,CAAQ,oCAAA;AAAA"}
|
|
@@ -3,7 +3,7 @@ import { CopilotRuntimeChatCompletionRequest, CopilotRuntimeChatCompletionRespon
|
|
|
3
3
|
import Openai from "openai";
|
|
4
4
|
import { LanguageModel } from "ai";
|
|
5
5
|
|
|
6
|
-
//#region src/service-adapters/openai/openai-adapter.d.ts
|
|
6
|
+
//#region src/v1-deprecated/service-adapters/openai/openai-adapter.d.ts
|
|
7
7
|
interface OpenAIAdapterParams {
|
|
8
8
|
/**
|
|
9
9
|
* An optional OpenAI instance to use. If not provided, a new instance will be
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-adapter.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"openai-adapter.d.mts","names":[],"sources":["../../../../src/v1-deprecated/service-adapters/openai/openai-adapter.ts"],"mappings":";;;;;;UAgGiB,mBAAA;;;;;EAKf,MAAA,GAAS,MAAA;;;;EAKT,KAAA;;;;;;;;;EAUA,wBAAA;;;;;;;EAQA,cAAA;;;;;EAMA,cAAA;AAAA;AAAA,cAGW,aAAA,YAAyB,qBAAA;EAC7B,KAAA;EACA,QAAA;EAAA,QAEC,wBAAA;EAAA,QACA,OAAA;EAAA,QACA,cAAA;EAAA,QACA,cAAA;EAAA,IAEG,MAAA,CAAA,GAAU,MAAA;EAAA,IAGV,IAAA,CAAA;cAIC,MAAA,GAAS,mBAAA;EAcrB,gBAAA,CAAA,GAAoB,aAAA;EAAA,QAcZ,YAAA;EAOF,OAAA,CACJ,OAAA,EAAS,mCAAA,GACR,OAAA,CAAQ,oCAAA;AAAA"}
|
|
@@ -6,7 +6,7 @@ import { createOpenAI } from "@ai-sdk/openai";
|
|
|
6
6
|
import Openai from "openai";
|
|
7
7
|
import { randomUUID } from "@copilotkit/shared";
|
|
8
8
|
|
|
9
|
-
//#region src/service-adapters/openai/openai-adapter.ts
|
|
9
|
+
//#region src/v1-deprecated/service-adapters/openai/openai-adapter.ts
|
|
10
10
|
const DEFAULT_MODEL = "gpt-4o";
|
|
11
11
|
var OpenAIAdapter = class {
|
|
12
12
|
get openai() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-adapter.mjs","names":[],"sources":["../../../src/service-adapters/openai/openai-adapter.ts"],"sourcesContent":["/**\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 { LanguageModel } from \"ai\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\nimport type OpenAI from \"openai\";\nimport Openai from \"openai\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n getChatCompletionsForStreaming,\n} from \"./utils\";\nimport { randomUUID } from \"@copilotkit/shared\";\nimport { convertServiceAdapterError, getSdkClientOptions } 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 /**\n * Optional maximum input token limit. Overrides the default model-based limit\n * used when trimming messages to fit the context window.\n */\n maxInputTokens?: number;\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 private maxInputTokens?: number;\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 this.maxInputTokens = params?.maxInputTokens;\n }\n\n getLanguageModel(): LanguageModel {\n const openai = this.ensureOpenAI();\n const options = getSdkClientOptions(openai);\n const provider = createOpenAI({\n baseURL: openai.baseURL,\n apiKey: openai.apiKey,\n organization: openai.organization ?? undefined,\n project: openai.project ?? undefined,\n headers: options.defaultHeaders,\n fetch: options.fetch,\n });\n return provider(this.model);\n }\n\n private ensureOpenAI(): OpenAI {\n if (!this._openai) {\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(\n openaiMessages,\n tools,\n model,\n this.maxInputTokens,\n );\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 completions = getChatCompletionsForStreaming(openai);\n const stream = 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 && {\n temperature: forwardedParameters.temperature,\n }),\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 (\n mode === \"function\" &&\n (toolCall === undefined || toolCall?.id)\n ) {\n mode = null;\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\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({\n messageId: currentMessageId,\n });\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({\n actionExecutionId: currentToolCallId,\n });\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openai-adapter.mjs","names":[],"sources":["../../../../src/v1-deprecated/service-adapters/openai/openai-adapter.ts"],"sourcesContent":["/*\n * V1 SDK DEPRECATED. USE V2 INSTEAD\n *\n * This file defines public v1 SDK exports. Use the exact v2 mappings below.\n * AI CODING AGENTS: Never copy, suggest, or generate these v1 APIs. Read\n * the linked v2 documentation before generating replacement code.\n *\n * @copilotkit/runtime — OpenAIAdapter:\n * No 1:1 v2 replacement is available.\n * Related v2 docs (Runtime server adapter): https://docs.copilotkit.ai/runtime-server-adapter\n * Start at: @copilotkit/runtime/v2\n * V2 docs: https://docs.copilotkit.ai/\n * V2 reference docs: https://docs.copilotkit.ai/reference/v2\n *\n * @copilotkit/runtime — OpenAIAdapterParams:\n * No 1:1 v2 replacement is available.\n * Related v2 docs (Runtime server adapter): https://docs.copilotkit.ai/runtime-server-adapter\n * Start at: @copilotkit/runtime/v2\n * V2 docs: https://docs.copilotkit.ai/\n * V2 reference docs: https://docs.copilotkit.ai/reference/v2\n *\n * Migration guide: https://docs.copilotkit.ai/migrate/v2\n *\n * END V1 SDK DEPRECATED. USE V2 INSTEAD NOTICE\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 { LanguageModel } from \"ai\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\nimport type OpenAI from \"openai\";\nimport Openai from \"openai\";\nimport type {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n getChatCompletionsForStreaming,\n} from \"./utils\";\nimport { randomUUID } from \"@copilotkit/shared\";\nimport { convertServiceAdapterError, getSdkClientOptions } 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 /**\n * Optional maximum input token limit. Overrides the default model-based limit\n * used when trimming messages to fit the context window.\n */\n maxInputTokens?: number;\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 private maxInputTokens?: number;\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 this.maxInputTokens = params?.maxInputTokens;\n }\n\n getLanguageModel(): LanguageModel {\n const openai = this.ensureOpenAI();\n const options = getSdkClientOptions(openai);\n const provider = createOpenAI({\n baseURL: openai.baseURL,\n apiKey: openai.apiKey,\n organization: openai.organization ?? undefined,\n project: openai.project ?? undefined,\n headers: options.defaultHeaders,\n fetch: options.fetch,\n });\n return provider(this.model);\n }\n\n private ensureOpenAI(): OpenAI {\n if (!this._openai) {\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(\n openaiMessages,\n tools,\n model,\n this.maxInputTokens,\n );\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 completions = getChatCompletionsForStreaming(openai);\n const stream = 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 && {\n temperature: forwardedParameters.temperature,\n }),\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 (\n mode === \"function\" &&\n (toolCall === undefined || toolCall?.id)\n ) {\n mode = null;\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\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({\n messageId: currentMessageId,\n });\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({\n actionExecutionId: currentToolCallId,\n });\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"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require("reflect-metadata");
|
|
2
2
|
const require_utils = require('./utils.cjs');
|
|
3
3
|
|
|
4
|
-
//#region src/service-adapters/openai/openai-assistant-adapter.ts
|
|
4
|
+
//#region src/v1-deprecated/service-adapters/openai/openai-assistant-adapter.ts
|
|
5
5
|
var OpenAIAssistantAdapter = class {
|
|
6
6
|
get name() {
|
|
7
7
|
return "OpenAIAssistantAdapter";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-assistant-adapter.cjs","names":["retrieveThreadRun","submitToolOutputsStream","convertMessageToOpenAIMessage","convertSystemMessageToAssistantAPI","convertActionInputToOpenAITool"],"sources":["../../../src/service-adapters/openai/openai-assistant-adapter.ts"],"sourcesContent":["/**\n * Copilot Runtime adapter for the OpenAI Assistant API.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAssistantAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * organization: \"<your-organization-id>\",\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new OpenAIAssistantAdapter({\n * openai,\n * assistantId: \"<your-assistant-id>\",\n * codeInterpreterEnabled: true,\n * fileSearchEnabled: true,\n * });\n * ```\n */\nimport type OpenAI from \"openai\";\nimport type { AssistantStream } from \"openai/lib/AssistantStream\";\nimport type {\n AssistantStreamEvent,\n AssistantTool,\n} from \"openai/resources/beta/assistants\";\nimport type {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport type { Message, ResultMessage } from \"../../graphql/types/converted\";\nimport { TextMessage } from \"../../graphql/types/converted\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n convertSystemMessageToAssistantAPI,\n retrieveThreadRun,\n submitToolOutputsStream,\n} from \"./utils\";\nimport type { RuntimeEventSource } from \"../events\";\nimport type { ActionInput } from \"../../graphql/inputs/action.input\";\nimport type { ForwardedParametersInput } from \"../../graphql/inputs/forwarded-parameters.input\";\n\nexport interface OpenAIAssistantAdapterParams {\n /**\n * The ID of the assistant to use.\n */\n assistantId: string;\n\n /**\n * An optional OpenAI instance to use. If not provided, a new instance will be created.\n */\n openai?: OpenAI;\n\n /**\n * Whether to enable code interpretation.\n * @default true\n */\n codeInterpreterEnabled?: boolean;\n\n /**\n * Whether to enable file search.\n * @default true\n */\n fileSearchEnabled?: boolean;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n\n /**\n * Whether to keep the role in system messages as \"System\".\n * By default, it is converted to \"developer\", which is used by newer OpenAI models\n *\n * @default false\n */\n keepSystemRole?: boolean;\n}\n\nexport class OpenAIAssistantAdapter implements CopilotServiceAdapter {\n private _openai: OpenAI;\n private codeInterpreterEnabled: boolean;\n private assistantId: string;\n private fileSearchEnabled: boolean;\n private disableParallelToolCalls: boolean;\n private keepSystemRole: boolean = false;\n\n public get name() {\n return \"OpenAIAssistantAdapter\";\n }\n\n constructor(params: OpenAIAssistantAdapterParams) {\n if (params.openai) {\n this._openai = params.openai;\n }\n // If no instance provided, we'll lazy-load in ensureOpenAI()\n this.codeInterpreterEnabled =\n params.codeInterpreterEnabled === false || true;\n this.fileSearchEnabled = params.fileSearchEnabled === false || true;\n this.assistantId = params.assistantId;\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n this.keepSystemRole = params?.keepSystemRole ?? false;\n }\n\n private ensureOpenAI(): OpenAI {\n if (!this._openai) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const OpenAI = require(\"openai\").default;\n this._openai = new OpenAI({});\n }\n return this._openai;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource, runId, forwardedParameters } =\n request;\n\n // if we don't have a threadId, create a new thread\n let threadId = request.extensions?.openaiAssistantAPI?.threadId;\n const openai = this.ensureOpenAI();\n\n if (!threadId) {\n threadId = (await openai.beta.threads.create()).id;\n }\n\n const lastMessage = messages.at(-1);\n\n let nextRunId: string | undefined = undefined;\n\n // submit function outputs\n if (lastMessage.isResultMessage() && runId) {\n nextRunId = await this.submitToolOutputs(\n threadId,\n runId,\n messages,\n eventSource,\n );\n }\n // submit user message\n else if (lastMessage.isTextMessage()) {\n nextRunId = await this.submitUserMessage(\n threadId,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n );\n }\n // unsupported message\n else {\n throw new Error(\"No actionable message found in the messages\");\n }\n\n return {\n runId: nextRunId,\n threadId,\n extensions: {\n ...request.extensions,\n openaiAssistantAPI: {\n threadId: threadId,\n runId: nextRunId,\n },\n },\n };\n }\n\n private async submitToolOutputs(\n threadId: string,\n runId: string,\n messages: Message[],\n eventSource: RuntimeEventSource,\n ) {\n const openai = this.ensureOpenAI();\n let run = await retrieveThreadRun(openai, threadId, runId);\n\n if (!run.required_action) {\n throw new Error(\"No tool outputs required\");\n }\n\n // get the required tool call ids\n const toolCallsIds = run.required_action.submit_tool_outputs.tool_calls.map(\n (toolCall) => toolCall.id,\n );\n\n // search for these tool calls\n const resultMessages = messages.filter(\n (message) =>\n message.isResultMessage() &&\n toolCallsIds.includes(message.actionExecutionId),\n ) as ResultMessage[];\n\n if (toolCallsIds.length != resultMessages.length) {\n throw new Error(\n \"Number of function results does not match the number of tool calls\",\n );\n }\n\n // submit the tool outputs\n const toolOutputs: { tool_call_id: string; output: string }[] =\n resultMessages.map((message) => {\n return {\n tool_call_id: message.actionExecutionId,\n output: message.result,\n };\n });\n\n const stream = submitToolOutputsStream(openai, threadId, runId, {\n tool_outputs: toolOutputs,\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n });\n\n await this.streamResponse(stream, eventSource);\n return runId;\n }\n\n private async submitUserMessage(\n threadId: string,\n messages: Message[],\n actions: ActionInput[],\n eventSource: RuntimeEventSource,\n forwardedParameters: ForwardedParametersInput,\n ) {\n const openai = this.ensureOpenAI();\n messages = [...messages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage()\n ? instructionsMessage.content\n : \"\";\n\n // get the latest user message\n const userMessage = messages\n .map((m) =>\n convertMessageToOpenAIMessage(m, {\n keepSystemRole: this.keepSystemRole,\n }),\n )\n .map(convertSystemMessageToAssistantAPI)\n .at(-1);\n\n if (userMessage.role !== \"user\") {\n throw new Error(\"No user message found\");\n }\n\n await openai.beta.threads.messages.create(threadId, {\n role: \"user\",\n content: userMessage.content,\n });\n\n const openaiTools = actions.map(convertActionInputToOpenAITool);\n\n const tools = [\n ...openaiTools,\n ...(this.codeInterpreterEnabled\n ? [{ type: \"code_interpreter\" } as AssistantTool]\n : []),\n ...(this.fileSearchEnabled\n ? [{ type: \"file_search\" } as AssistantTool]\n : []),\n ];\n\n let stream = openai.beta.threads.runs.stream(threadId, {\n assistant_id: this.assistantId,\n instructions,\n tools: tools,\n ...(forwardedParameters?.maxTokens && {\n max_completion_tokens: forwardedParameters.maxTokens,\n }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n });\n\n await this.streamResponse(stream, eventSource);\n\n return getRunIdFromStream(stream);\n }\n\n private async streamResponse(\n stream: AssistantStream,\n eventSource: RuntimeEventSource,\n ) {\n eventSource.stream(async (eventStream$) => {\n let inFunctionCall = false;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n for await (const chunk of stream) {\n switch (chunk.event) {\n case \"thread.message.created\":\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n currentMessageId = chunk.data.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n break;\n case \"thread.message.delta\":\n if (chunk.data.delta.content?.[0].type === \"text\") {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: chunk.data.delta.content?.[0].text.value,\n });\n }\n break;\n case \"thread.message.completed\":\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n break;\n case \"thread.run.step.delta\":\n let toolCallId: string | undefined;\n let toolCallName: string | undefined;\n let toolCallArgs: string | undefined;\n if (\n chunk.data.delta.step_details.type === \"tool_calls\" &&\n chunk.data.delta.step_details.tool_calls?.[0].type === \"function\"\n ) {\n toolCallId = chunk.data.delta.step_details.tool_calls?.[0].id;\n toolCallName =\n chunk.data.delta.step_details.tool_calls?.[0].function.name;\n toolCallArgs =\n chunk.data.delta.step_details.tool_calls?.[0].function\n .arguments;\n }\n\n if (toolCallName && toolCallId) {\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n inFunctionCall = true;\n currentToolCallId = toolCallId;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.data.id,\n actionName: toolCallName,\n });\n } else if (toolCallArgs) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCallArgs,\n });\n }\n break;\n }\n }\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n eventStream$.complete();\n });\n }\n}\n\nfunction getRunIdFromStream(stream: AssistantStream): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n let runIdGetter = (event: AssistantStreamEvent) => {\n if (event.event === \"thread.run.created\") {\n const runId = event.data.id;\n stream.off(\"event\", runIdGetter);\n resolve(runId);\n }\n };\n stream.on(\"event\", runIdGetter);\n });\n}\n"],"mappings":";;;;AA0FA,IAAa,yBAAb,MAAqE;CAQnE,IAAW,OAAO;AAChB,SAAO;;CAGT,YAAY,QAAsC;wBANhB;AAOhC,MAAI,OAAO,OACT,MAAK,UAAU,OAAO;AAGxB,OAAK,yBACH,OAAO,2BAA2B,SAAS;AAC7C,OAAK,oBAAoB,OAAO,sBAAsB,SAAS;AAC/D,OAAK,cAAc,OAAO;AAC1B,OAAK,2BAA2B,QAAQ,4BAA4B;AACpE,OAAK,iBAAiB,QAAQ,kBAAkB;;CAGlD,AAAQ,eAAuB;AAC7B,MAAI,CAAC,KAAK,SAAS;GAEjB,MAAM,SAAS,QAAQ,SAAS,CAAC;AACjC,QAAK,UAAU,IAAI,OAAO,EAAE,CAAC;;AAE/B,SAAO,KAAK;;CAGd,MAAM,QACJ,SAC+C;EAC/C,MAAM,EAAE,UAAU,SAAS,aAAa,OAAO,wBAC7C;EAGF,IAAI,WAAW,QAAQ,YAAY,oBAAoB;EACvD,MAAM,SAAS,KAAK,cAAc;AAElC,MAAI,CAAC,SACH,aAAY,MAAM,OAAO,KAAK,QAAQ,QAAQ,EAAE;EAGlD,MAAM,cAAc,SAAS,GAAG,GAAG;EAEnC,IAAI,YAAgC;AAGpC,MAAI,YAAY,iBAAiB,IAAI,MACnC,aAAY,MAAM,KAAK,kBACrB,UACA,OACA,UACA,YACD;WAGM,YAAY,eAAe,CAClC,aAAY,MAAM,KAAK,kBACrB,UACA,UACA,SACA,aACA,oBACD;MAID,OAAM,IAAI,MAAM,8CAA8C;AAGhE,SAAO;GACL,OAAO;GACP;GACA,YAAY;IACV,GAAG,QAAQ;IACX,oBAAoB;KACR;KACV,OAAO;KACR;IACF;GACF;;CAGH,MAAc,kBACZ,UACA,OACA,UACA,aACA;EACA,MAAM,SAAS,KAAK,cAAc;EAClC,IAAI,MAAM,MAAMA,gCAAkB,QAAQ,UAAU,MAAM;AAE1D,MAAI,CAAC,IAAI,gBACP,OAAM,IAAI,MAAM,2BAA2B;EAI7C,MAAM,eAAe,IAAI,gBAAgB,oBAAoB,WAAW,KACrE,aAAa,SAAS,GACxB;EAGD,MAAM,iBAAiB,SAAS,QAC7B,YACC,QAAQ,iBAAiB,IACzB,aAAa,SAAS,QAAQ,kBAAkB,CACnD;AAED,MAAI,aAAa,UAAU,eAAe,OACxC,OAAM,IAAI,MACR,qEACD;EAYH,MAAM,SAASC,sCAAwB,QAAQ,UAAU,OAAO;GAC9D,cARA,eAAe,KAAK,YAAY;AAC9B,WAAO;KACL,cAAc,QAAQ;KACtB,QAAQ,QAAQ;KACjB;KACD;GAIF,GAAI,KAAK,4BAA4B,EAAE,qBAAqB,OAAO;GACpE,CAAC;AAEF,QAAM,KAAK,eAAe,QAAQ,YAAY;AAC9C,SAAO;;CAGT,MAAc,kBACZ,UACA,UACA,SACA,aACA,qBACA;EACA,MAAM,SAAS,KAAK,cAAc;AAClC,aAAW,CAAC,GAAG,SAAS;EAGxB,MAAM,sBAAsB,SAAS,OAAO;EAC5C,MAAM,eAAe,oBAAoB,eAAe,GACpD,oBAAoB,UACpB;EAGJ,MAAM,cAAc,SACjB,KAAK,MACJC,4CAA8B,GAAG,EAC/B,gBAAgB,KAAK,gBACtB,CAAC,CACH,CACA,IAAIC,iDAAmC,CACvC,GAAG,GAAG;AAET,MAAI,YAAY,SAAS,OACvB,OAAM,IAAI,MAAM,wBAAwB;AAG1C,QAAM,OAAO,KAAK,QAAQ,SAAS,OAAO,UAAU;GAClD,MAAM;GACN,SAAS,YAAY;GACtB,CAAC;EAIF,MAAM,QAAQ;GACZ,GAHkB,QAAQ,IAAIC,6CAA+B;GAI7D,GAAI,KAAK,yBACL,CAAC,EAAE,MAAM,oBAAoB,CAAkB,GAC/C,EAAE;GACN,GAAI,KAAK,oBACL,CAAC,EAAE,MAAM,eAAe,CAAkB,GAC1C,EAAE;GACP;EAED,IAAI,SAAS,OAAO,KAAK,QAAQ,KAAK,OAAO,UAAU;GACrD,cAAc,KAAK;GACnB;GACO;GACP,GAAI,qBAAqB,aAAa,EACpC,uBAAuB,oBAAoB,WAC5C;GACD,GAAI,KAAK,4BAA4B,EAAE,qBAAqB,OAAO;GACpE,CAAC;AAEF,QAAM,KAAK,eAAe,QAAQ,YAAY;AAE9C,SAAO,mBAAmB,OAAO;;CAGnC,MAAc,eACZ,QACA,aACA;AACA,cAAY,OAAO,OAAO,iBAAiB;GACzC,IAAI,iBAAiB;GACrB,IAAI;GACJ,IAAI;AAEJ,cAAW,MAAM,SAAS,OACxB,SAAQ,MAAM,OAAd;IACE,KAAK;AACH,SAAI,eACF,cAAa,uBAAuB,EAClC,mBAAmB,mBACpB,CAAC;AAEJ,wBAAmB,MAAM,KAAK;AAC9B,kBAAa,qBAAqB,EAAE,WAAW,kBAAkB,CAAC;AAClE;IACF,KAAK;AACH,SAAI,MAAM,KAAK,MAAM,UAAU,GAAG,SAAS,OACzC,cAAa,uBAAuB;MAClC,WAAW;MACX,SAAS,MAAM,KAAK,MAAM,UAAU,GAAG,KAAK;MAC7C,CAAC;AAEJ;IACF,KAAK;AACH,kBAAa,mBAAmB,EAAE,WAAW,kBAAkB,CAAC;AAChE;IACF,KAAK;KACH,IAAI;KACJ,IAAI;KACJ,IAAI;AACJ,SACE,MAAM,KAAK,MAAM,aAAa,SAAS,gBACvC,MAAM,KAAK,MAAM,aAAa,aAAa,GAAG,SAAS,YACvD;AACA,mBAAa,MAAM,KAAK,MAAM,aAAa,aAAa,GAAG;AAC3D,qBACE,MAAM,KAAK,MAAM,aAAa,aAAa,GAAG,SAAS;AACzD,qBACE,MAAM,KAAK,MAAM,aAAa,aAAa,GAAG,SAC3C;;AAGP,SAAI,gBAAgB,YAAY;AAC9B,UAAI,eACF,cAAa,uBAAuB,EAClC,mBAAmB,mBACpB,CAAC;AAEJ,uBAAiB;AACjB,0BAAoB;AACpB,mBAAa,yBAAyB;OACpC,mBAAmB;OACnB,iBAAiB,MAAM,KAAK;OAC5B,YAAY;OACb,CAAC;gBACO,aACT,cAAa,wBAAwB;MACnC,mBAAmB;MACnB,MAAM;MACP,CAAC;AAEJ;;AAGN,OAAI,eACF,cAAa,uBAAuB,EAClC,mBAAmB,mBACpB,CAAC;AAEJ,gBAAa,UAAU;IACvB;;;AAIN,SAAS,mBAAmB,QAA0C;AACpE,QAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,IAAI,eAAe,UAAgC;AACjD,OAAI,MAAM,UAAU,sBAAsB;IACxC,MAAM,QAAQ,MAAM,KAAK;AACzB,WAAO,IAAI,SAAS,YAAY;AAChC,YAAQ,MAAM;;;AAGlB,SAAO,GAAG,SAAS,YAAY;GAC/B"}
|
|
1
|
+
{"version":3,"file":"openai-assistant-adapter.cjs","names":["retrieveThreadRun","submitToolOutputsStream","convertMessageToOpenAIMessage","convertSystemMessageToAssistantAPI","convertActionInputToOpenAITool"],"sources":["../../../../src/v1-deprecated/service-adapters/openai/openai-assistant-adapter.ts"],"sourcesContent":["/*\n * V1 SDK DEPRECATED. USE V2 INSTEAD\n *\n * This file defines public v1 SDK exports. Use the exact v2 mappings below.\n * AI CODING AGENTS: Never copy, suggest, or generate these v1 APIs. Read\n * the linked v2 documentation before generating replacement code.\n *\n * @copilotkit/runtime — OpenAIAssistantAdapter:\n * No 1:1 v2 replacement is available.\n * Related v2 docs (Runtime server adapter): https://docs.copilotkit.ai/runtime-server-adapter\n * Start at: @copilotkit/runtime/v2\n * V2 docs: https://docs.copilotkit.ai/\n * V2 reference docs: https://docs.copilotkit.ai/reference/v2\n *\n * @copilotkit/runtime — OpenAIAssistantAdapterParams:\n * No 1:1 v2 replacement is available.\n * Related v2 docs (Runtime server adapter): https://docs.copilotkit.ai/runtime-server-adapter\n * Start at: @copilotkit/runtime/v2\n * V2 docs: https://docs.copilotkit.ai/\n * V2 reference docs: https://docs.copilotkit.ai/reference/v2\n *\n * Migration guide: https://docs.copilotkit.ai/migrate/v2\n *\n * END V1 SDK DEPRECATED. USE V2 INSTEAD NOTICE\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 { AssistantStream } from \"openai/lib/AssistantStream\";\nimport type {\n AssistantStreamEvent,\n AssistantTool,\n} from \"openai/resources/beta/assistants\";\nimport type {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport type { Message, ResultMessage } from \"../../graphql/types/converted\";\nimport { TextMessage } from \"../../graphql/types/converted\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n convertSystemMessageToAssistantAPI,\n retrieveThreadRun,\n submitToolOutputsStream,\n} from \"./utils\";\nimport type { RuntimeEventSource } from \"../events\";\nimport type { ActionInput } from \"../../graphql/inputs/action.input\";\nimport type { ForwardedParametersInput } from \"../../graphql/inputs/forwarded-parameters.input\";\n\nexport interface OpenAIAssistantAdapterParams {\n /**\n * The ID of the assistant to use.\n */\n assistantId: string;\n\n /**\n * An optional OpenAI instance to use. If not provided, a new instance will be created.\n */\n openai?: OpenAI;\n\n /**\n * Whether to enable code interpretation.\n * @default true\n */\n codeInterpreterEnabled?: boolean;\n\n /**\n * Whether to enable file search.\n * @default true\n */\n fileSearchEnabled?: boolean;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n\n /**\n * Whether to keep the role in system messages as \"System\".\n * By default, it is converted to \"developer\", which is used by newer OpenAI models\n *\n * @default false\n */\n keepSystemRole?: boolean;\n}\n\nexport class OpenAIAssistantAdapter implements CopilotServiceAdapter {\n private _openai: OpenAI;\n private codeInterpreterEnabled: boolean;\n private assistantId: string;\n private fileSearchEnabled: boolean;\n private disableParallelToolCalls: boolean;\n private keepSystemRole: boolean = false;\n\n public get name() {\n return \"OpenAIAssistantAdapter\";\n }\n\n constructor(params: OpenAIAssistantAdapterParams) {\n if (params.openai) {\n this._openai = params.openai;\n }\n // If no instance provided, we'll lazy-load in ensureOpenAI()\n this.codeInterpreterEnabled =\n params.codeInterpreterEnabled === false || true;\n this.fileSearchEnabled = params.fileSearchEnabled === false || true;\n this.assistantId = params.assistantId;\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n this.keepSystemRole = params?.keepSystemRole ?? false;\n }\n\n private ensureOpenAI(): OpenAI {\n if (!this._openai) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const OpenAI = require(\"openai\").default;\n this._openai = new OpenAI({});\n }\n return this._openai;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource, runId, forwardedParameters } =\n request;\n\n // if we don't have a threadId, create a new thread\n let threadId = request.extensions?.openaiAssistantAPI?.threadId;\n const openai = this.ensureOpenAI();\n\n if (!threadId) {\n threadId = (await openai.beta.threads.create()).id;\n }\n\n const lastMessage = messages.at(-1);\n\n let nextRunId: string | undefined = undefined;\n\n // submit function outputs\n if (lastMessage.isResultMessage() && runId) {\n nextRunId = await this.submitToolOutputs(\n threadId,\n runId,\n messages,\n eventSource,\n );\n }\n // submit user message\n else if (lastMessage.isTextMessage()) {\n nextRunId = await this.submitUserMessage(\n threadId,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n );\n }\n // unsupported message\n else {\n throw new Error(\"No actionable message found in the messages\");\n }\n\n return {\n runId: nextRunId,\n threadId,\n extensions: {\n ...request.extensions,\n openaiAssistantAPI: {\n threadId: threadId,\n runId: nextRunId,\n },\n },\n };\n }\n\n private async submitToolOutputs(\n threadId: string,\n runId: string,\n messages: Message[],\n eventSource: RuntimeEventSource,\n ) {\n const openai = this.ensureOpenAI();\n let run = await retrieveThreadRun(openai, threadId, runId);\n\n if (!run.required_action) {\n throw new Error(\"No tool outputs required\");\n }\n\n // get the required tool call ids\n const toolCallsIds = run.required_action.submit_tool_outputs.tool_calls.map(\n (toolCall) => toolCall.id,\n );\n\n // search for these tool calls\n const resultMessages = messages.filter(\n (message) =>\n message.isResultMessage() &&\n toolCallsIds.includes(message.actionExecutionId),\n ) as ResultMessage[];\n\n if (toolCallsIds.length != resultMessages.length) {\n throw new Error(\n \"Number of function results does not match the number of tool calls\",\n );\n }\n\n // submit the tool outputs\n const toolOutputs: { tool_call_id: string; output: string }[] =\n resultMessages.map((message) => {\n return {\n tool_call_id: message.actionExecutionId,\n output: message.result,\n };\n });\n\n const stream = submitToolOutputsStream(openai, threadId, runId, {\n tool_outputs: toolOutputs,\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n });\n\n await this.streamResponse(stream, eventSource);\n return runId;\n }\n\n private async submitUserMessage(\n threadId: string,\n messages: Message[],\n actions: ActionInput[],\n eventSource: RuntimeEventSource,\n forwardedParameters: ForwardedParametersInput,\n ) {\n const openai = this.ensureOpenAI();\n messages = [...messages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage()\n ? instructionsMessage.content\n : \"\";\n\n // get the latest user message\n const userMessage = messages\n .map((m) =>\n convertMessageToOpenAIMessage(m, {\n keepSystemRole: this.keepSystemRole,\n }),\n )\n .map(convertSystemMessageToAssistantAPI)\n .at(-1);\n\n if (userMessage.role !== \"user\") {\n throw new Error(\"No user message found\");\n }\n\n await openai.beta.threads.messages.create(threadId, {\n role: \"user\",\n content: userMessage.content,\n });\n\n const openaiTools = actions.map(convertActionInputToOpenAITool);\n\n const tools = [\n ...openaiTools,\n ...(this.codeInterpreterEnabled\n ? [{ type: \"code_interpreter\" } as AssistantTool]\n : []),\n ...(this.fileSearchEnabled\n ? [{ type: \"file_search\" } as AssistantTool]\n : []),\n ];\n\n let stream = openai.beta.threads.runs.stream(threadId, {\n assistant_id: this.assistantId,\n instructions,\n tools: tools,\n ...(forwardedParameters?.maxTokens && {\n max_completion_tokens: forwardedParameters.maxTokens,\n }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n });\n\n await this.streamResponse(stream, eventSource);\n\n return getRunIdFromStream(stream);\n }\n\n private async streamResponse(\n stream: AssistantStream,\n eventSource: RuntimeEventSource,\n ) {\n eventSource.stream(async (eventStream$) => {\n let inFunctionCall = false;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n for await (const chunk of stream) {\n switch (chunk.event) {\n case \"thread.message.created\":\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n currentMessageId = chunk.data.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n break;\n case \"thread.message.delta\":\n if (chunk.data.delta.content?.[0].type === \"text\") {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: chunk.data.delta.content?.[0].text.value,\n });\n }\n break;\n case \"thread.message.completed\":\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n break;\n case \"thread.run.step.delta\":\n let toolCallId: string | undefined;\n let toolCallName: string | undefined;\n let toolCallArgs: string | undefined;\n if (\n chunk.data.delta.step_details.type === \"tool_calls\" &&\n chunk.data.delta.step_details.tool_calls?.[0].type === \"function\"\n ) {\n toolCallId = chunk.data.delta.step_details.tool_calls?.[0].id;\n toolCallName =\n chunk.data.delta.step_details.tool_calls?.[0].function.name;\n toolCallArgs =\n chunk.data.delta.step_details.tool_calls?.[0].function\n .arguments;\n }\n\n if (toolCallName && toolCallId) {\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n inFunctionCall = true;\n currentToolCallId = toolCallId;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.data.id,\n actionName: toolCallName,\n });\n } else if (toolCallArgs) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCallArgs,\n });\n }\n break;\n }\n }\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n eventStream$.complete();\n });\n }\n}\n\nfunction getRunIdFromStream(stream: AssistantStream): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n let runIdGetter = (event: AssistantStreamEvent) => {\n if (event.event === \"thread.run.created\") {\n const runId = event.data.id;\n stream.off(\"event\", runIdGetter);\n resolve(runId);\n }\n };\n stream.on(\"event\", runIdGetter);\n });\n}\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { CopilotRuntimeChatCompletionRequest, CopilotRuntimeChatCompletionResponse, CopilotServiceAdapter } from "../service-adapter.cjs";
|
|
3
3
|
import OpenAI from "openai";
|
|
4
4
|
|
|
5
|
-
//#region src/service-adapters/openai/openai-assistant-adapter.d.ts
|
|
5
|
+
//#region src/v1-deprecated/service-adapters/openai/openai-assistant-adapter.d.ts
|
|
6
6
|
interface OpenAIAssistantAdapterParams {
|
|
7
7
|
/**
|
|
8
8
|
* The ID of the assistant to use.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-assistant-adapter.d.cts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"openai-assistant-adapter.d.cts","names":[],"sources":["../../../../src/v1-deprecated/service-adapters/openai/openai-assistant-adapter.ts"],"mappings":";;;;;UA0EiB,4BAAA;EA0C8B;;;EAtC7C,WAAA;EA0CQ;;;EArCR,MAAA,GAAS,MAAA;;;;;EAMT,sBAAA;EA8DW;;;;EAxDX,iBAAA;EA+Jc;;;;;;;;EArJd,wBAAA;;;;;;;EAQA,cAAA;AAAA;AAAA,cAGW,sBAAA,YAAkC,qBAAA;EAAA,QACrC,OAAA;EAAA,QACA,sBAAA;EAAA,QACA,WAAA;EAAA,QACA,iBAAA;EAAA,QACA,wBAAA;EAAA,QACA,cAAA;EAAA,IAEG,IAAA,CAAA;cAIC,MAAA,EAAQ,4BAAA;EAAA,QAaZ,YAAA;EASF,OAAA,CACJ,OAAA,EAAS,mCAAA,GACR,OAAA,CAAQ,oCAAA;EAAA,QAqDG,iBAAA;EAAA,QAiDA,iBAAA;EAAA,QA8DA,cAAA;AAAA"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { CopilotRuntimeChatCompletionRequest, CopilotRuntimeChatCompletionResponse, CopilotServiceAdapter } from "../service-adapter.mjs";
|
|
3
3
|
import Openai from "openai";
|
|
4
4
|
|
|
5
|
-
//#region src/service-adapters/openai/openai-assistant-adapter.d.ts
|
|
5
|
+
//#region src/v1-deprecated/service-adapters/openai/openai-assistant-adapter.d.ts
|
|
6
6
|
interface OpenAIAssistantAdapterParams {
|
|
7
7
|
/**
|
|
8
8
|
* The ID of the assistant to use.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-assistant-adapter.d.mts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"openai-assistant-adapter.d.mts","names":[],"sources":["../../../../src/v1-deprecated/service-adapters/openai/openai-assistant-adapter.ts"],"mappings":";;;;;UA0EiB,4BAAA;EA0C8B;;;EAtC7C,WAAA;EA0CQ;;;EArCR,MAAA,GAAS,MAAA;;;;;EAMT,sBAAA;EA8DW;;;;EAxDX,iBAAA;EA+Jc;;;;;;;;EArJd,wBAAA;;;;;;;EAQA,cAAA;AAAA;AAAA,cAGW,sBAAA,YAAkC,qBAAA;EAAA,QACrC,OAAA;EAAA,QACA,sBAAA;EAAA,QACA,WAAA;EAAA,QACA,iBAAA;EAAA,QACA,wBAAA;EAAA,QACA,cAAA;EAAA,IAEG,IAAA,CAAA;cAIC,MAAA,EAAQ,4BAAA;EAAA,QAaZ,YAAA;EASF,OAAA,CACJ,OAAA,EAAS,mCAAA,GACR,OAAA,CAAQ,oCAAA;EAAA,QAqDG,iBAAA;EAAA,QAiDA,iBAAA;EAAA,QA8DA,cAAA;AAAA"}
|