@copilotkit/runtime 1.57.3 → 1.58.0-canary.thread-id-propagation
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/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/copilot-runtime.cjs +2 -0
- package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.mjs +2 -0
- package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
- package/dist/package.cjs +5 -8
- package/dist/package.mjs +5 -8
- package/dist/v2/runtime/core/runtime.cjs +4 -1
- 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 +4 -1
- package/dist/v2/runtime/core/runtime.mjs.map +1 -1
- package/dist/v2/runtime/handlers/get-runtime-info.cjs +1 -1
- package/dist/v2/runtime/handlers/get-runtime-info.mjs +1 -1
- package/dist/v2/runtime/handlers/handle-connect.cjs +1 -1
- package/dist/v2/runtime/handlers/handle-connect.mjs +1 -1
- package/dist/v2/runtime/handlers/handle-run.cjs +1 -1
- package/dist/v2/runtime/handlers/handle-run.mjs +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/telemetry/telemetry-client.cjs +22 -6
- package/dist/v2/runtime/telemetry/telemetry-client.cjs.map +1 -1
- package/dist/v2/runtime/telemetry/telemetry-client.mjs +27 -11
- package/dist/v2/runtime/telemetry/telemetry-client.mjs.map +1 -1
- package/package.json +9 -19
- package/skills/runtime/SKILL.md +98 -0
- package/skills/runtime/references/agent-runners-custom.md +161 -0
- package/skills/runtime/references/agent-runners-in-memory.md +64 -0
- package/skills/runtime/references/agent-runners-sqlite.md +90 -0
- package/skills/runtime/references/agent-runners.md +304 -0
- package/skills/runtime/references/built-in-agent-factory-modes.md +232 -0
- package/skills/runtime/references/built-in-agent-helper-utilities.md +123 -0
- package/skills/runtime/references/built-in-agent-model-identifiers.md +59 -0
- package/skills/runtime/references/built-in-agent.md +523 -0
- package/skills/runtime/references/intelligence-mode.md +336 -0
- package/skills/runtime/references/middleware.md +376 -0
- package/skills/runtime/references/server-side-tools.md +414 -0
- package/skills/runtime/references/setup-endpoint.md +503 -0
- package/skills/runtime/references/transcription.md +287 -0
- package/skills/runtime/references/wiring-a2a.md +40 -0
- package/skills/runtime/references/wiring-adk.md +45 -0
- package/skills/runtime/references/wiring-ag2.md +41 -0
- package/skills/runtime/references/wiring-agno.md +39 -0
- package/skills/runtime/references/wiring-aws-strands.md +59 -0
- package/skills/runtime/references/wiring-crewai-crews.md +51 -0
- package/skills/runtime/references/wiring-crewai-flows.md +45 -0
- package/skills/runtime/references/wiring-external-agents.md +348 -0
- package/skills/runtime/references/wiring-langgraph.md +50 -0
- package/skills/runtime/references/wiring-llamaindex.md +39 -0
- package/skills/runtime/references/wiring-mastra.md +70 -0
- package/skills/runtime/references/wiring-mcp-apps-middleware.md +68 -0
- package/skills/runtime/references/wiring-ms-agent-framework.md +41 -0
- package/skills/runtime/references/wiring-pydantic-ai.md +45 -0
- package/CHANGELOG.md +0 -3624
- package/__snapshots__/schema/schema.graphql +0 -371
- package/dist/v2/runtime/telemetry/scarf-client.cjs +0 -32
- package/dist/v2/runtime/telemetry/scarf-client.cjs.map +0 -1
- package/dist/v2/runtime/telemetry/scarf-client.mjs +0 -32
- package/dist/v2/runtime/telemetry/scarf-client.mjs.map +0 -1
- package/scripts/generate-gql-schema.ts +0 -16
- package/src/agent/__tests__/agent-test-helpers.ts +0 -476
- package/src/agent/__tests__/agent.test.ts +0 -593
- package/src/agent/__tests__/ai-sdk-v6-compat.test.ts +0 -116
- package/src/agent/__tests__/basic-agent.test.ts +0 -1698
- package/src/agent/__tests__/capabilities.test.ts +0 -81
- package/src/agent/__tests__/config-tools-execution.test.ts +0 -516
- package/src/agent/__tests__/converter-aisdk.test.ts +0 -692
- package/src/agent/__tests__/converter-custom.test.ts +0 -319
- package/src/agent/__tests__/converter-tanstack-input.test.ts +0 -211
- package/src/agent/__tests__/converter-tanstack.test.ts +0 -594
- package/src/agent/__tests__/mcp-clients.test.ts +0 -246
- package/src/agent/__tests__/mcp-servers-integration.test.ts +0 -373
- package/src/agent/__tests__/multimodal-tanstack.test.ts +0 -284
- package/src/agent/__tests__/multimodal.test.ts +0 -176
- package/src/agent/__tests__/property-overrides.test.ts +0 -598
- package/src/agent/__tests__/provider-id-collision.test.ts +0 -195
- package/src/agent/__tests__/standard-schema-tools.test.ts +0 -313
- package/src/agent/__tests__/standard-schema-types.test.ts +0 -158
- package/src/agent/__tests__/state-tools.test.ts +0 -436
- package/src/agent/__tests__/test-helpers.ts +0 -197
- package/src/agent/__tests__/utils.test.ts +0 -536
- package/src/agent/__tests__/zod-regression.test.ts +0 -350
- package/src/agent/converters/aisdk.ts +0 -326
- package/src/agent/converters/index.ts +0 -7
- package/src/agent/converters/tanstack.ts +0 -451
- package/src/agent/index.ts +0 -1743
- package/src/agents/langgraph/__tests__/event-source.test.ts +0 -256
- package/src/agents/langgraph/event-source.ts +0 -365
- package/src/agents/langgraph/events.ts +0 -394
- package/src/graphql/inputs/action.input.ts +0 -16
- package/src/graphql/inputs/agent-session.input.ts +0 -13
- package/src/graphql/inputs/agent-state.input.ts +0 -13
- package/src/graphql/inputs/cloud-guardrails.input.ts +0 -16
- package/src/graphql/inputs/cloud.input.ts +0 -8
- package/src/graphql/inputs/context-property.input.ts +0 -10
- package/src/graphql/inputs/copilot-context.input.ts +0 -10
- package/src/graphql/inputs/custom-property.input.ts +0 -15
- package/src/graphql/inputs/extensions.input.ts +0 -21
- package/src/graphql/inputs/forwarded-parameters.input.ts +0 -22
- package/src/graphql/inputs/frontend.input.ts +0 -14
- package/src/graphql/inputs/generate-copilot-response.input.ts +0 -59
- package/src/graphql/inputs/load-agent-state.input.ts +0 -10
- package/src/graphql/inputs/message.input.ts +0 -110
- package/src/graphql/inputs/meta-event.input.ts +0 -18
- package/src/graphql/message-conversion/agui-to-gql.test.ts +0 -1384
- package/src/graphql/message-conversion/agui-to-gql.ts +0 -384
- package/src/graphql/message-conversion/gql-to-agui.test.ts +0 -1653
- package/src/graphql/message-conversion/gql-to-agui.ts +0 -297
- package/src/graphql/message-conversion/index.ts +0 -2
- package/src/graphql/message-conversion/roundtrip-conversion.test.ts +0 -561
- package/src/graphql/resolvers/__tests__/resolve-message-id.test.ts +0 -25
- package/src/graphql/resolvers/copilot.resolver.ts +0 -785
- package/src/graphql/resolvers/resolve-message-id.ts +0 -14
- package/src/graphql/resolvers/state.resolver.ts +0 -30
- package/src/graphql/types/agents-response.type.ts +0 -19
- package/src/graphql/types/base/index.ts +0 -10
- package/src/graphql/types/converted/index.ts +0 -183
- package/src/graphql/types/copilot-response.type.ts +0 -141
- package/src/graphql/types/enums.ts +0 -38
- package/src/graphql/types/extensions-response.type.ts +0 -23
- package/src/graphql/types/guardrails-result.type.ts +0 -20
- package/src/graphql/types/load-agent-state-response.type.ts +0 -17
- package/src/graphql/types/message-status.type.ts +0 -48
- package/src/graphql/types/meta-events.type.ts +0 -78
- package/src/graphql/types/response-status.type.ts +0 -77
- package/src/index.ts +0 -3
- package/src/langgraph.ts +0 -1
- package/src/lib/__tests__/telemetry-disclosure.test.ts +0 -55
- package/src/lib/cloud/index.ts +0 -4
- package/src/lib/error-messages.ts +0 -211
- package/src/lib/index.ts +0 -52
- package/src/lib/integrations/index.ts +0 -6
- package/src/lib/integrations/nest/index.ts +0 -21
- package/src/lib/integrations/nextjs/app-router.ts +0 -47
- package/src/lib/integrations/nextjs/pages-router.ts +0 -45
- package/src/lib/integrations/node-express/index.ts +0 -21
- package/src/lib/integrations/node-http/__tests__/request-duck-type.test.ts +0 -66
- package/src/lib/integrations/node-http/index.ts +0 -187
- package/src/lib/integrations/node-http/request-handler.ts +0 -128
- package/src/lib/integrations/shared.ts +0 -112
- package/src/lib/logger.ts +0 -31
- package/src/lib/observability.ts +0 -167
- package/src/lib/runtime/__tests__/copilot-runtime-error.test.ts +0 -183
- package/src/lib/runtime/__tests__/handle-service-adapter.test.ts +0 -108
- package/src/lib/runtime/__tests__/mcp-tools-utils.test.ts +0 -499
- package/src/lib/runtime/__tests__/on-after-request.test.ts +0 -122
- package/src/lib/runtime/__tests__/retry-utils.test.ts +0 -137
- package/src/lib/runtime/__tests__/v1-agent-factory.test.ts +0 -109
- package/src/lib/runtime/agent-integrations/langgraph/__tests__/dispatch-event-filtering.test.ts +0 -345
- package/src/lib/runtime/agent-integrations/langgraph/__tests__/run-message-filtering.test.ts +0 -156
- package/src/lib/runtime/agent-integrations/langgraph/agent.ts +0 -263
- package/src/lib/runtime/agent-integrations/langgraph/consts.ts +0 -37
- package/src/lib/runtime/agent-integrations/langgraph/index.ts +0 -2
- package/src/lib/runtime/copilot-runtime.ts +0 -863
- package/src/lib/runtime/mcp-tools-utils.ts +0 -313
- package/src/lib/runtime/retry-utils.ts +0 -141
- package/src/lib/runtime/telemetry-agent-runner.ts +0 -151
- package/src/lib/runtime/types.ts +0 -48
- package/src/lib/runtime/utils.ts +0 -93
- package/src/lib/streaming.ts +0 -220
- package/src/lib/telemetry-client.ts +0 -66
- package/src/lib/telemetry-disclosure.ts +0 -53
- package/src/service-adapters/anthropic/anthropic-adapter.ts +0 -532
- package/src/service-adapters/anthropic/utils.ts +0 -219
- package/src/service-adapters/bedrock/bedrock-adapter.ts +0 -73
- package/src/service-adapters/conversion.test.ts +0 -56
- package/src/service-adapters/conversion.ts +0 -69
- package/src/service-adapters/empty/empty-adapter.ts +0 -38
- package/src/service-adapters/events.ts +0 -337
- package/src/service-adapters/experimental/ollama/ollama-adapter.ts +0 -84
- package/src/service-adapters/google/google-genai-adapter.test.ts +0 -151
- package/src/service-adapters/google/google-genai-adapter.ts +0 -95
- package/src/service-adapters/groq/groq-adapter.ts +0 -229
- package/src/service-adapters/index.ts +0 -18
- package/src/service-adapters/langchain/langchain-adapter.ts +0 -113
- package/src/service-adapters/langchain/langserve.ts +0 -88
- package/src/service-adapters/langchain/types.ts +0 -20
- package/src/service-adapters/langchain/utils.ts +0 -330
- package/src/service-adapters/openai/__tests__/openai-v5-compat.test.ts +0 -177
- package/src/service-adapters/openai/openai-adapter.ts +0 -324
- package/src/service-adapters/openai/openai-assistant-adapter.ts +0 -385
- package/src/service-adapters/openai/utils.ts +0 -305
- package/src/service-adapters/service-adapter.ts +0 -50
- package/src/service-adapters/shared/error-utils.ts +0 -64
- package/src/service-adapters/shared/index.ts +0 -2
- package/src/service-adapters/shared/sdk-client-utils.ts +0 -19
- package/src/service-adapters/unify/unify-adapter.ts +0 -165
- package/src/utils/failed-response-status-reasons.ts +0 -70
- package/src/utils/index.ts +0 -1
- package/src/v2/express.ts +0 -1
- package/src/v2/hono.ts +0 -1
- package/src/v2/index.ts +0 -5
- package/src/v2/node.ts +0 -1
- package/src/v2/runtime/__tests__/agents-factory.test.ts +0 -136
- package/src/v2/runtime/__tests__/backward-compat.test.ts +0 -261
- package/src/v2/runtime/__tests__/code-review-fixes.test.ts +0 -500
- package/src/v2/runtime/__tests__/cors-credentials.test.ts +0 -320
- package/src/v2/runtime/__tests__/debug-sse-response.test.ts +0 -302
- package/src/v2/runtime/__tests__/express-adapter.test.ts +0 -188
- package/src/v2/runtime/__tests__/express-body-order.test.ts +0 -76
- package/src/v2/runtime/__tests__/express-fetch-bridge.test.ts +0 -344
- package/src/v2/runtime/__tests__/express-single-sse.test.ts +0 -122
- package/src/v2/runtime/__tests__/express-single-telemetry.integration.test.ts +0 -65
- package/src/v2/runtime/__tests__/express-telemetry.integration.test.ts +0 -101
- package/src/v2/runtime/__tests__/fetch-cors.test.ts +0 -205
- package/src/v2/runtime/__tests__/fetch-handler-validation.test.ts +0 -440
- package/src/v2/runtime/__tests__/fetch-handler.test.ts +0 -456
- package/src/v2/runtime/__tests__/fetch-router.test.ts +0 -276
- package/src/v2/runtime/__tests__/get-runtime-info.test.ts +0 -335
- package/src/v2/runtime/__tests__/handle-connect.test.ts +0 -585
- package/src/v2/runtime/__tests__/handle-run.test.ts +0 -1388
- package/src/v2/runtime/__tests__/handle-threads.test.ts +0 -930
- package/src/v2/runtime/__tests__/handle-transcribe.test.ts +0 -301
- package/src/v2/runtime/__tests__/header-utils.test.ts +0 -88
- package/src/v2/runtime/__tests__/hono-adapter.test.ts +0 -150
- package/src/v2/runtime/__tests__/hono-single-telemetry.integration.test.ts +0 -46
- package/src/v2/runtime/__tests__/hono-telemetry.integration.test.ts +0 -99
- package/src/v2/runtime/__tests__/hooks-edge-cases.test.ts +0 -457
- package/src/v2/runtime/__tests__/hooks.test.ts +0 -557
- package/src/v2/runtime/__tests__/in-process-agent-runner-messages.test.ts +0 -230
- package/src/v2/runtime/__tests__/in-process-agent-runner.test.ts +0 -1030
- package/src/v2/runtime/__tests__/integration/bun/bun-servers.integration.test.ts +0 -27
- package/src/v2/runtime/__tests__/integration/bun/elysia-multi.ts +0 -32
- package/src/v2/runtime/__tests__/integration/bun/elysia-single.ts +0 -33
- package/src/v2/runtime/__tests__/integration/bun/hono-bun-multi.ts +0 -25
- package/src/v2/runtime/__tests__/integration/bun/hono-bun-single.ts +0 -32
- package/src/v2/runtime/__tests__/integration/helpers/create-test-runtime.ts +0 -15
- package/src/v2/runtime/__tests__/integration/helpers/sse-reader.ts +0 -45
- package/src/v2/runtime/__tests__/integration/helpers/test-agent.ts +0 -58
- package/src/v2/runtime/__tests__/integration/node-servers.integration.test.ts +0 -58
- package/src/v2/runtime/__tests__/integration/servers/express-multi.ts +0 -35
- package/src/v2/runtime/__tests__/integration/servers/express-single.ts +0 -36
- package/src/v2/runtime/__tests__/integration/servers/fetch-direct.ts +0 -39
- package/src/v2/runtime/__tests__/integration/servers/hono-multi.ts +0 -30
- package/src/v2/runtime/__tests__/integration/servers/hono-single.ts +0 -37
- package/src/v2/runtime/__tests__/integration/servers/node-multi.ts +0 -45
- package/src/v2/runtime/__tests__/integration/servers/node-single.ts +0 -46
- package/src/v2/runtime/__tests__/integration/servers/types.ts +0 -18
- package/src/v2/runtime/__tests__/integration/suites/debug-events.suite.ts +0 -253
- package/src/v2/runtime/__tests__/integration/suites/multi-endpoint.suite.ts +0 -358
- package/src/v2/runtime/__tests__/integration/suites/single-endpoint.suite.ts +0 -363
- package/src/v2/runtime/__tests__/intelligence-run-telemetry.test.ts +0 -194
- package/src/v2/runtime/__tests__/mcp-apps-middleware-integration.test.ts +0 -275
- package/src/v2/runtime/__tests__/middleware-express.test.ts +0 -208
- package/src/v2/runtime/__tests__/middleware-single-express.test.ts +0 -213
- package/src/v2/runtime/__tests__/middleware-single.test.ts +0 -225
- package/src/v2/runtime/__tests__/middleware-sse-parser.test.ts +0 -237
- package/src/v2/runtime/__tests__/middleware.test.ts +0 -250
- package/src/v2/runtime/__tests__/node-fetch-handler.test.ts +0 -157
- package/src/v2/runtime/__tests__/open-generative-ui-middleware.e2e.test.ts +0 -728
- package/src/v2/runtime/__tests__/router-edge-cases.test.ts +0 -217
- package/src/v2/runtime/__tests__/routing-express.test.ts +0 -174
- package/src/v2/runtime/__tests__/routing-single-express.test.ts +0 -168
- package/src/v2/runtime/__tests__/routing-single.test.ts +0 -193
- package/src/v2/runtime/__tests__/routing.test.ts +0 -257
- package/src/v2/runtime/__tests__/runtime.test.ts +0 -234
- package/src/v2/runtime/__tests__/sse-response-telemetry.test.ts +0 -108
- package/src/v2/runtime/__tests__/telemetry.test.ts +0 -167
- package/src/v2/runtime/__tests__/thread-names.test.ts +0 -188
- package/src/v2/runtime/core/__tests__/debug-event-bus.test.ts +0 -156
- package/src/v2/runtime/core/debug-event-bus.ts +0 -45
- package/src/v2/runtime/core/fetch-cors.ts +0 -136
- package/src/v2/runtime/core/fetch-handler.ts +0 -492
- package/src/v2/runtime/core/fetch-router.ts +0 -203
- package/src/v2/runtime/core/hooks.ts +0 -160
- package/src/v2/runtime/core/middleware-sse-parser.ts +0 -210
- package/src/v2/runtime/core/middleware.ts +0 -115
- package/src/v2/runtime/core/runtime.ts +0 -432
- package/src/v2/runtime/endpoints/express-fetch-bridge.ts +0 -137
- package/src/v2/runtime/endpoints/express-single.ts +0 -54
- package/src/v2/runtime/endpoints/express.ts +0 -179
- package/src/v2/runtime/endpoints/hono-single.ts +0 -60
- package/src/v2/runtime/endpoints/hono.ts +0 -89
- package/src/v2/runtime/endpoints/index.ts +0 -4
- package/src/v2/runtime/endpoints/node-fetch-handler.ts +0 -48
- package/src/v2/runtime/endpoints/node.ts +0 -28
- package/src/v2/runtime/endpoints/single-route-helpers.ts +0 -125
- package/src/v2/runtime/express.ts +0 -2
- package/src/v2/runtime/handlers/__tests__/handle-debug-events.test.ts +0 -176
- package/src/v2/runtime/handlers/get-runtime-info.ts +0 -101
- package/src/v2/runtime/handlers/handle-connect.ts +0 -80
- package/src/v2/runtime/handlers/handle-debug-events.ts +0 -52
- package/src/v2/runtime/handlers/handle-run.ts +0 -111
- package/src/v2/runtime/handlers/handle-stop.ts +0 -77
- package/src/v2/runtime/handlers/handle-threads.ts +0 -11
- package/src/v2/runtime/handlers/handle-transcribe.ts +0 -269
- package/src/v2/runtime/handlers/header-utils.ts +0 -24
- package/src/v2/runtime/handlers/intelligence/connect.ts +0 -102
- package/src/v2/runtime/handlers/intelligence/run.ts +0 -351
- package/src/v2/runtime/handlers/intelligence/thread-names.ts +0 -246
- package/src/v2/runtime/handlers/intelligence/threads.ts +0 -420
- package/src/v2/runtime/handlers/shared/agent-utils.ts +0 -154
- package/src/v2/runtime/handlers/shared/intelligence-utils.ts +0 -41
- package/src/v2/runtime/handlers/shared/json-response.ts +0 -9
- package/src/v2/runtime/handlers/shared/resolve-intelligence-user.ts +0 -28
- package/src/v2/runtime/handlers/shared/sse-response.ts +0 -215
- package/src/v2/runtime/handlers/sse/__tests__/sse-connect-agent-id.test.ts +0 -71
- package/src/v2/runtime/handlers/sse/connect.ts +0 -30
- package/src/v2/runtime/handlers/sse/run.ts +0 -40
- package/src/v2/runtime/hono.ts +0 -2
- package/src/v2/runtime/index.ts +0 -51
- package/src/v2/runtime/intelligence-platform/__tests__/client.test.ts +0 -601
- package/src/v2/runtime/intelligence-platform/__tests__/intelligence-mcp-helper.test.ts +0 -246
- package/src/v2/runtime/intelligence-platform/client.ts +0 -818
- package/src/v2/runtime/intelligence-platform/index.ts +0 -10
- package/src/v2/runtime/node.ts +0 -6
- package/src/v2/runtime/open-generative-ui-middleware.ts +0 -373
- package/src/v2/runtime/runner/__tests__/finalize-events.test.ts +0 -109
- package/src/v2/runtime/runner/__tests__/in-memory-runner.e2e.test.ts +0 -775
- package/src/v2/runtime/runner/__tests__/in-memory-runner.test.ts +0 -777
- package/src/v2/runtime/runner/__tests__/intelligence-runner.test.ts +0 -1039
- package/src/v2/runtime/runner/agent-runner.ts +0 -35
- package/src/v2/runtime/runner/in-memory.ts +0 -467
- package/src/v2/runtime/runner/index.ts +0 -4
- package/src/v2/runtime/runner/intelligence.ts +0 -498
- package/src/v2/runtime/telemetry/__tests__/instance-created.test.ts +0 -96
- package/src/v2/runtime/telemetry/events.ts +0 -35
- package/src/v2/runtime/telemetry/index.ts +0 -7
- package/src/v2/runtime/telemetry/instance-created.ts +0 -44
- package/src/v2/runtime/telemetry/scarf-client.ts +0 -39
- package/src/v2/runtime/telemetry/telemetry-client.ts +0 -70
- package/src/v2/runtime/transcription-service/transcription-service.ts +0 -11
- package/tests/global.d.ts +0 -1
- package/tests/service-adapters/anthropic/allowlist-approach.test.ts +0 -259
- package/tests/service-adapters/anthropic/anthropic-adapter-language-model.test.ts +0 -101
- package/tests/service-adapters/anthropic/anthropic-adapter.test.ts +0 -645
- package/tests/service-adapters/anthropic/utils-token-trimming.test.ts +0 -301
- package/tests/service-adapters/groq/groq-adapter-language-model.test.ts +0 -102
- package/tests/service-adapters/openai/allowlist-approach.test.ts +0 -294
- package/tests/service-adapters/openai/openai-adapter-language-model.test.ts +0 -122
- package/tests/service-adapters/openai/openai-adapter.test.ts +0 -291
- package/tests/service-adapters/shared/sdk-client-utils.test.ts +0 -36
- package/tests/setup.vitest.ts +0 -8
- package/tests/tsconfig.json +0 -10
- package/tsconfig.json +0 -20
- package/tsdown.config.ts +0 -45
- package/typedoc.json +0 -4
- package/vitest.config.mjs +0 -13
|
@@ -1,532 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copilot Runtime adapter for Anthropic.
|
|
3
|
-
*
|
|
4
|
-
* ## Example
|
|
5
|
-
*
|
|
6
|
-
* ```ts
|
|
7
|
-
* import { CopilotRuntime, AnthropicAdapter } from "@copilotkit/runtime";
|
|
8
|
-
* import Anthropic from "@anthropic-ai/sdk";
|
|
9
|
-
*
|
|
10
|
-
* const copilotKit = new CopilotRuntime();
|
|
11
|
-
*
|
|
12
|
-
* const anthropic = new Anthropic({
|
|
13
|
-
* apiKey: "<your-api-key>",
|
|
14
|
-
* });
|
|
15
|
-
*
|
|
16
|
-
* return new AnthropicAdapter({
|
|
17
|
-
* anthropic,
|
|
18
|
-
* promptCaching: {
|
|
19
|
-
* enabled: true,
|
|
20
|
-
* debug: true
|
|
21
|
-
* }
|
|
22
|
-
* });
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
import type { LanguageModel } from "ai";
|
|
26
|
-
import { createAnthropic } from "@ai-sdk/anthropic";
|
|
27
|
-
import type Anthropic from "@anthropic-ai/sdk";
|
|
28
|
-
import {
|
|
29
|
-
CopilotServiceAdapter,
|
|
30
|
-
CopilotRuntimeChatCompletionRequest,
|
|
31
|
-
CopilotRuntimeChatCompletionResponse,
|
|
32
|
-
} from "../service-adapter";
|
|
33
|
-
import {
|
|
34
|
-
convertActionInputToAnthropicTool,
|
|
35
|
-
convertMessageToAnthropicMessage,
|
|
36
|
-
limitMessagesToTokenCount,
|
|
37
|
-
} from "./utils";
|
|
38
|
-
|
|
39
|
-
import { randomId, randomUUID } from "@copilotkit/shared";
|
|
40
|
-
import { convertServiceAdapterError, getSdkClientOptions } from "../shared";
|
|
41
|
-
|
|
42
|
-
const DEFAULT_MODEL = "claude-3-5-sonnet-latest";
|
|
43
|
-
|
|
44
|
-
export interface AnthropicPromptCachingConfig {
|
|
45
|
-
/**
|
|
46
|
-
* Whether to enable prompt caching.
|
|
47
|
-
*/
|
|
48
|
-
enabled: boolean;
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Whether to enable debug logging for cache operations.
|
|
52
|
-
*/
|
|
53
|
-
debug?: boolean;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export interface AnthropicAdapterParams {
|
|
57
|
-
/**
|
|
58
|
-
* An optional Anthropic instance to use. If not provided, a new instance will be
|
|
59
|
-
* created.
|
|
60
|
-
*/
|
|
61
|
-
anthropic?: Anthropic;
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* The model to use.
|
|
65
|
-
*/
|
|
66
|
-
model?: string;
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Configuration for prompt caching.
|
|
70
|
-
* See: https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching
|
|
71
|
-
*/
|
|
72
|
-
promptCaching?: AnthropicPromptCachingConfig;
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Optional maximum input token limit. Overrides the default limit
|
|
76
|
-
* used when trimming messages to fit the context window.
|
|
77
|
-
*/
|
|
78
|
-
maxInputTokens?: number;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export class AnthropicAdapter implements CopilotServiceAdapter {
|
|
82
|
-
public model: string = DEFAULT_MODEL;
|
|
83
|
-
public provider = "anthropic";
|
|
84
|
-
private promptCaching: AnthropicPromptCachingConfig;
|
|
85
|
-
private maxInputTokens?: number;
|
|
86
|
-
|
|
87
|
-
private _anthropic: Anthropic;
|
|
88
|
-
public get anthropic(): Anthropic {
|
|
89
|
-
return this._anthropic;
|
|
90
|
-
}
|
|
91
|
-
public get name() {
|
|
92
|
-
return "AnthropicAdapter";
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
constructor(params?: AnthropicAdapterParams) {
|
|
96
|
-
if (params?.anthropic) {
|
|
97
|
-
this._anthropic = params.anthropic;
|
|
98
|
-
}
|
|
99
|
-
// If no instance provided, we'll lazy-load in ensureAnthropic()
|
|
100
|
-
if (params?.model) {
|
|
101
|
-
this.model = params.model;
|
|
102
|
-
}
|
|
103
|
-
this.promptCaching = params?.promptCaching || { enabled: false };
|
|
104
|
-
this.maxInputTokens = params?.maxInputTokens;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
getLanguageModel(): LanguageModel {
|
|
108
|
-
const anthropic = this.ensureAnthropic();
|
|
109
|
-
const options = getSdkClientOptions(anthropic);
|
|
110
|
-
const provider = createAnthropic({
|
|
111
|
-
baseURL: anthropic.baseURL,
|
|
112
|
-
apiKey: anthropic.apiKey,
|
|
113
|
-
headers: options.defaultHeaders,
|
|
114
|
-
fetch: options.fetch,
|
|
115
|
-
});
|
|
116
|
-
return provider(this.model);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
private ensureAnthropic(): Anthropic {
|
|
120
|
-
if (!this._anthropic) {
|
|
121
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
122
|
-
const Anthropic = require("@anthropic-ai/sdk").default;
|
|
123
|
-
this._anthropic = new Anthropic({});
|
|
124
|
-
}
|
|
125
|
-
return this._anthropic;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Adds cache control to system prompt
|
|
130
|
-
*/
|
|
131
|
-
private addSystemPromptCaching(
|
|
132
|
-
system: string,
|
|
133
|
-
debug: boolean = false,
|
|
134
|
-
):
|
|
135
|
-
| string
|
|
136
|
-
| Array<{
|
|
137
|
-
type: "text";
|
|
138
|
-
text: string;
|
|
139
|
-
cache_control?: { type: "ephemeral" };
|
|
140
|
-
}> {
|
|
141
|
-
if (!this.promptCaching.enabled || !system) {
|
|
142
|
-
return system;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
const originalTextLength = system.length;
|
|
146
|
-
|
|
147
|
-
if (debug) {
|
|
148
|
-
console.log(
|
|
149
|
-
`[ANTHROPIC CACHE DEBUG] Added cache control to system prompt (${originalTextLength} chars).`,
|
|
150
|
-
);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return [
|
|
154
|
-
{
|
|
155
|
-
type: "text",
|
|
156
|
-
text: system,
|
|
157
|
-
cache_control: { type: "ephemeral" },
|
|
158
|
-
},
|
|
159
|
-
];
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Adds cache control to the final message
|
|
164
|
-
*/
|
|
165
|
-
private addIncrementalMessageCaching(
|
|
166
|
-
messages: Anthropic.Messages.MessageParam[],
|
|
167
|
-
debug: boolean = false,
|
|
168
|
-
): any[] {
|
|
169
|
-
if (!this.promptCaching.enabled || messages.length === 0) {
|
|
170
|
-
return messages;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
const finalMessage = messages[messages.length - 1];
|
|
174
|
-
const messageNumber = messages.length;
|
|
175
|
-
|
|
176
|
-
if (
|
|
177
|
-
Array.isArray(finalMessage.content) &&
|
|
178
|
-
finalMessage.content.length > 0
|
|
179
|
-
) {
|
|
180
|
-
const finalBlock = finalMessage.content[finalMessage.content.length - 1];
|
|
181
|
-
|
|
182
|
-
const updatedMessages = [
|
|
183
|
-
...messages.slice(0, -1),
|
|
184
|
-
{
|
|
185
|
-
...finalMessage,
|
|
186
|
-
content: [
|
|
187
|
-
...finalMessage.content.slice(0, -1),
|
|
188
|
-
{ ...finalBlock, cache_control: { type: "ephemeral" } } as any,
|
|
189
|
-
],
|
|
190
|
-
},
|
|
191
|
-
];
|
|
192
|
-
|
|
193
|
-
if (debug) {
|
|
194
|
-
console.log(
|
|
195
|
-
`[ANTHROPIC CACHE DEBUG] Added cache control to final message (message ${messageNumber}).`,
|
|
196
|
-
);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
return updatedMessages;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
return messages;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
private shouldGenerateFallbackResponse(
|
|
206
|
-
messages: Anthropic.Messages.MessageParam[],
|
|
207
|
-
): boolean {
|
|
208
|
-
if (messages.length === 0) return false;
|
|
209
|
-
|
|
210
|
-
const lastMessage = messages[messages.length - 1];
|
|
211
|
-
|
|
212
|
-
// Check if the last message is a tool result
|
|
213
|
-
const endsWithToolResult =
|
|
214
|
-
lastMessage.role === "user" &&
|
|
215
|
-
Array.isArray(lastMessage.content) &&
|
|
216
|
-
lastMessage.content.some(
|
|
217
|
-
(content: any) => content.type === "tool_result",
|
|
218
|
-
);
|
|
219
|
-
|
|
220
|
-
// Also check if we have a recent pattern of user message -> assistant tool use -> user tool result
|
|
221
|
-
// This indicates a completed action that might not need a response
|
|
222
|
-
if (messages.length >= 3 && endsWithToolResult) {
|
|
223
|
-
const lastThree = messages.slice(-3);
|
|
224
|
-
const hasRecentToolPattern =
|
|
225
|
-
lastThree[0]?.role === "user" && // Initial user message
|
|
226
|
-
lastThree[1]?.role === "assistant" && // Assistant tool use
|
|
227
|
-
Array.isArray(lastThree[1].content) &&
|
|
228
|
-
lastThree[1].content.some(
|
|
229
|
-
(content: any) => content.type === "tool_use",
|
|
230
|
-
) &&
|
|
231
|
-
lastThree[2]?.role === "user" && // Tool result
|
|
232
|
-
Array.isArray(lastThree[2].content) &&
|
|
233
|
-
lastThree[2].content.some(
|
|
234
|
-
(content: any) => content.type === "tool_result",
|
|
235
|
-
);
|
|
236
|
-
|
|
237
|
-
return hasRecentToolPattern;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
return endsWithToolResult;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
async process(
|
|
244
|
-
request: CopilotRuntimeChatCompletionRequest,
|
|
245
|
-
): Promise<CopilotRuntimeChatCompletionResponse> {
|
|
246
|
-
const {
|
|
247
|
-
threadId,
|
|
248
|
-
model = this.model,
|
|
249
|
-
messages: rawMessages,
|
|
250
|
-
actions,
|
|
251
|
-
eventSource,
|
|
252
|
-
forwardedParameters,
|
|
253
|
-
} = request;
|
|
254
|
-
const tools = actions.map(convertActionInputToAnthropicTool);
|
|
255
|
-
const knownActionNames = new Set(actions.map((a) => a.name));
|
|
256
|
-
|
|
257
|
-
const messages = [...rawMessages];
|
|
258
|
-
|
|
259
|
-
// get the instruction message
|
|
260
|
-
const instructionsMessage = messages.shift();
|
|
261
|
-
const instructions = instructionsMessage.isTextMessage()
|
|
262
|
-
? instructionsMessage.content
|
|
263
|
-
: "";
|
|
264
|
-
|
|
265
|
-
// ALLOWLIST APPROACH:
|
|
266
|
-
// 1. First, identify all valid tool_use calls (from assistant)
|
|
267
|
-
// 2. Then, only keep tool_result blocks that correspond to these valid tool_use IDs
|
|
268
|
-
// 3. Discard any other tool_result blocks
|
|
269
|
-
|
|
270
|
-
// Step 1: Extract valid tool_use IDs
|
|
271
|
-
const validToolUseIds = new Set<string>();
|
|
272
|
-
|
|
273
|
-
for (const message of messages) {
|
|
274
|
-
if (message.isActionExecutionMessage()) {
|
|
275
|
-
validToolUseIds.add(message.id);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
// Step 2: Map each message to an Anthropic message, eliminating invalid tool_results
|
|
280
|
-
const processedToolResultIds = new Set<string>();
|
|
281
|
-
const anthropicMessages = messages
|
|
282
|
-
.map((message) => {
|
|
283
|
-
// For tool results, only include if they match a valid tool_use ID AND haven't been processed
|
|
284
|
-
if (message.isResultMessage()) {
|
|
285
|
-
// Skip if there's no corresponding tool_use
|
|
286
|
-
if (!validToolUseIds.has(message.actionExecutionId)) {
|
|
287
|
-
return null; // Will be filtered out later
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
// Skip if we've already processed a result for this tool_use ID
|
|
291
|
-
if (processedToolResultIds.has(message.actionExecutionId)) {
|
|
292
|
-
return null; // Will be filtered out later
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// Mark this tool result as processed
|
|
296
|
-
processedToolResultIds.add(message.actionExecutionId);
|
|
297
|
-
|
|
298
|
-
return {
|
|
299
|
-
role: "user",
|
|
300
|
-
content: [
|
|
301
|
-
{
|
|
302
|
-
type: "tool_result",
|
|
303
|
-
content: message.result || "Action completed successfully",
|
|
304
|
-
tool_use_id: message.actionExecutionId,
|
|
305
|
-
},
|
|
306
|
-
],
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
// For non-tool-result messages, convert normally
|
|
311
|
-
return convertMessageToAnthropicMessage(message);
|
|
312
|
-
})
|
|
313
|
-
.filter(Boolean) // Remove nulls
|
|
314
|
-
.filter((msg) => {
|
|
315
|
-
// Filter out assistant messages with empty text content
|
|
316
|
-
if (msg.role === "assistant" && Array.isArray(msg.content)) {
|
|
317
|
-
const hasEmptyTextOnly =
|
|
318
|
-
msg.content.length === 1 &&
|
|
319
|
-
msg.content[0].type === "text" &&
|
|
320
|
-
(!(msg.content[0] as any).text ||
|
|
321
|
-
(msg.content[0] as any).text.trim() === "");
|
|
322
|
-
|
|
323
|
-
// Keep messages that have tool_use or non-empty text
|
|
324
|
-
return !hasEmptyTextOnly;
|
|
325
|
-
}
|
|
326
|
-
return true;
|
|
327
|
-
}) as Anthropic.Messages.MessageParam[];
|
|
328
|
-
|
|
329
|
-
// Apply token limits
|
|
330
|
-
const limitedMessages = limitMessagesToTokenCount(
|
|
331
|
-
anthropicMessages,
|
|
332
|
-
tools,
|
|
333
|
-
model,
|
|
334
|
-
this.maxInputTokens,
|
|
335
|
-
);
|
|
336
|
-
|
|
337
|
-
// Apply prompt caching if enabled
|
|
338
|
-
const cachedSystemPrompt = this.addSystemPromptCaching(
|
|
339
|
-
instructions,
|
|
340
|
-
this.promptCaching.debug,
|
|
341
|
-
);
|
|
342
|
-
const cachedMessages = this.addIncrementalMessageCaching(
|
|
343
|
-
limitedMessages,
|
|
344
|
-
this.promptCaching.debug,
|
|
345
|
-
);
|
|
346
|
-
|
|
347
|
-
// We'll check if we need a fallback response after seeing what Anthropic returns
|
|
348
|
-
// We skip grouping by role since we've already ensured uniqueness of tool_results
|
|
349
|
-
|
|
350
|
-
let toolChoice: any = forwardedParameters?.toolChoice;
|
|
351
|
-
if (forwardedParameters?.toolChoice === "function") {
|
|
352
|
-
toolChoice = {
|
|
353
|
-
type: "tool",
|
|
354
|
-
name: forwardedParameters.toolChoiceFunctionName,
|
|
355
|
-
};
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
try {
|
|
359
|
-
const createParams = {
|
|
360
|
-
system: cachedSystemPrompt,
|
|
361
|
-
model: this.model,
|
|
362
|
-
messages: cachedMessages,
|
|
363
|
-
max_tokens: forwardedParameters?.maxTokens || 4096,
|
|
364
|
-
...(forwardedParameters?.temperature
|
|
365
|
-
? { temperature: forwardedParameters.temperature }
|
|
366
|
-
: {}),
|
|
367
|
-
...(tools.length > 0 && { tools }),
|
|
368
|
-
...(toolChoice && { tool_choice: toolChoice }),
|
|
369
|
-
stream: true,
|
|
370
|
-
};
|
|
371
|
-
|
|
372
|
-
const anthropic = this.ensureAnthropic();
|
|
373
|
-
const stream = await anthropic.messages.create(createParams);
|
|
374
|
-
|
|
375
|
-
eventSource.stream(async (eventStream$) => {
|
|
376
|
-
let mode: "function" | "message" | null = null;
|
|
377
|
-
let didOutputText = false;
|
|
378
|
-
let currentMessageId = randomId();
|
|
379
|
-
let currentToolCallId = randomId();
|
|
380
|
-
let filterThinkingTextBuffer = new FilterThinkingTextBuffer();
|
|
381
|
-
let hasReceivedContent = false;
|
|
382
|
-
|
|
383
|
-
try {
|
|
384
|
-
for await (const chunk of stream as AsyncIterable<any>) {
|
|
385
|
-
if (chunk.type === "message_start") {
|
|
386
|
-
currentMessageId = chunk.message.id;
|
|
387
|
-
} else if (chunk.type === "content_block_start") {
|
|
388
|
-
if (chunk.content_block.type === "text") {
|
|
389
|
-
hasReceivedContent = true;
|
|
390
|
-
didOutputText = false;
|
|
391
|
-
filterThinkingTextBuffer.reset();
|
|
392
|
-
mode = "message";
|
|
393
|
-
} else if (chunk.content_block.type === "tool_use") {
|
|
394
|
-
if (!knownActionNames.has(chunk.content_block.name)) {
|
|
395
|
-
// Unknown tool - skip execution to prevent crashes
|
|
396
|
-
mode = null;
|
|
397
|
-
continue;
|
|
398
|
-
}
|
|
399
|
-
hasReceivedContent = true;
|
|
400
|
-
currentToolCallId = chunk.content_block.id;
|
|
401
|
-
eventStream$.sendActionExecutionStart({
|
|
402
|
-
actionExecutionId: currentToolCallId,
|
|
403
|
-
actionName: chunk.content_block.name,
|
|
404
|
-
parentMessageId: currentMessageId,
|
|
405
|
-
});
|
|
406
|
-
mode = "function";
|
|
407
|
-
}
|
|
408
|
-
} else if (chunk.type === "content_block_delta") {
|
|
409
|
-
if (mode === null) {
|
|
410
|
-
// Skip deltas for unknown/skipped content blocks
|
|
411
|
-
continue;
|
|
412
|
-
}
|
|
413
|
-
if (chunk.delta.type === "text_delta") {
|
|
414
|
-
const text = filterThinkingTextBuffer.onTextChunk(
|
|
415
|
-
chunk.delta.text,
|
|
416
|
-
);
|
|
417
|
-
if (text.length > 0) {
|
|
418
|
-
if (!didOutputText) {
|
|
419
|
-
eventStream$.sendTextMessageStart({
|
|
420
|
-
messageId: currentMessageId,
|
|
421
|
-
});
|
|
422
|
-
didOutputText = true;
|
|
423
|
-
}
|
|
424
|
-
eventStream$.sendTextMessageContent({
|
|
425
|
-
messageId: currentMessageId,
|
|
426
|
-
content: text,
|
|
427
|
-
});
|
|
428
|
-
}
|
|
429
|
-
} else if (chunk.delta.type === "input_json_delta") {
|
|
430
|
-
eventStream$.sendActionExecutionArgs({
|
|
431
|
-
actionExecutionId: currentToolCallId,
|
|
432
|
-
args: chunk.delta.partial_json,
|
|
433
|
-
});
|
|
434
|
-
}
|
|
435
|
-
} else if (chunk.type === "content_block_stop") {
|
|
436
|
-
if (mode === "message") {
|
|
437
|
-
if (didOutputText) {
|
|
438
|
-
eventStream$.sendTextMessageEnd({
|
|
439
|
-
messageId: currentMessageId,
|
|
440
|
-
});
|
|
441
|
-
}
|
|
442
|
-
} else if (mode === "function") {
|
|
443
|
-
eventStream$.sendActionExecutionEnd({
|
|
444
|
-
actionExecutionId: currentToolCallId,
|
|
445
|
-
});
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
} catch (error) {
|
|
450
|
-
throw convertServiceAdapterError(error, "Anthropic");
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
// Generate fallback response only if Anthropic produced no content
|
|
454
|
-
if (
|
|
455
|
-
!hasReceivedContent &&
|
|
456
|
-
this.shouldGenerateFallbackResponse(cachedMessages)
|
|
457
|
-
) {
|
|
458
|
-
// Extract the tool result content for a more contextual response
|
|
459
|
-
let fallbackContent = "Task completed successfully.";
|
|
460
|
-
const lastMessage = cachedMessages[cachedMessages.length - 1];
|
|
461
|
-
if (
|
|
462
|
-
lastMessage?.role === "user" &&
|
|
463
|
-
Array.isArray(lastMessage.content)
|
|
464
|
-
) {
|
|
465
|
-
const toolResult = lastMessage.content.find(
|
|
466
|
-
(c: any) => c.type === "tool_result",
|
|
467
|
-
);
|
|
468
|
-
if (
|
|
469
|
-
toolResult?.content &&
|
|
470
|
-
toolResult.content !== "Action completed successfully"
|
|
471
|
-
) {
|
|
472
|
-
fallbackContent = toolResult.content;
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
currentMessageId = randomId();
|
|
477
|
-
eventStream$.sendTextMessageStart({ messageId: currentMessageId });
|
|
478
|
-
eventStream$.sendTextMessageContent({
|
|
479
|
-
messageId: currentMessageId,
|
|
480
|
-
content: fallbackContent,
|
|
481
|
-
});
|
|
482
|
-
eventStream$.sendTextMessageEnd({ messageId: currentMessageId });
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
eventStream$.complete();
|
|
486
|
-
});
|
|
487
|
-
} catch (error) {
|
|
488
|
-
throw convertServiceAdapterError(error, "Anthropic");
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
return {
|
|
492
|
-
threadId: threadId || randomUUID(),
|
|
493
|
-
};
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
const THINKING_TAG = "<thinking>";
|
|
498
|
-
const THINKING_TAG_END = "</thinking>";
|
|
499
|
-
|
|
500
|
-
class FilterThinkingTextBuffer {
|
|
501
|
-
private buffer: string;
|
|
502
|
-
private didFilterThinkingTag: boolean = false;
|
|
503
|
-
|
|
504
|
-
constructor() {
|
|
505
|
-
this.buffer = "";
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
onTextChunk(text: string): string {
|
|
509
|
-
this.buffer += text;
|
|
510
|
-
if (this.didFilterThinkingTag) {
|
|
511
|
-
return text;
|
|
512
|
-
}
|
|
513
|
-
const potentialTag = this.buffer.slice(0, THINKING_TAG.length);
|
|
514
|
-
if (THINKING_TAG.startsWith(potentialTag)) {
|
|
515
|
-
if (this.buffer.includes(THINKING_TAG_END)) {
|
|
516
|
-
const end = this.buffer.indexOf(THINKING_TAG_END);
|
|
517
|
-
const filteredText = this.buffer.slice(end + THINKING_TAG_END.length);
|
|
518
|
-
this.buffer = filteredText;
|
|
519
|
-
this.didFilterThinkingTag = true;
|
|
520
|
-
return filteredText;
|
|
521
|
-
} else {
|
|
522
|
-
return "";
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
return text;
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
reset() {
|
|
529
|
-
this.buffer = "";
|
|
530
|
-
this.didFilterThinkingTag = false;
|
|
531
|
-
}
|
|
532
|
-
}
|