@anthropic-ai/sdk 0.125.0 → 0.127.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +88 -0
- package/client.d.mts +12 -11
- package/client.d.mts.map +1 -1
- package/client.d.ts +12 -11
- package/client.d.ts.map +1 -1
- package/client.js +865 -845
- package/client.js.map +1 -1
- package/client.mjs +866 -840
- package/client.mjs.map +1 -1
- package/core/api-promise.js +71 -68
- package/core/api-promise.js.map +1 -1
- package/core/api-promise.mjs +71 -64
- package/core/api-promise.mjs.map +1 -1
- package/core/error.js +5 -2
- package/core/error.js.map +1 -1
- package/core/error.mjs +5 -2
- package/core/error.mjs.map +1 -1
- package/core/pagination.js +56 -50
- package/core/pagination.js.map +1 -1
- package/core/pagination.mjs +56 -41
- package/core/pagination.mjs.map +1 -1
- package/core/streaming.js +212 -209
- package/core/streaming.js.map +1 -1
- package/core/streaming.mjs +212 -209
- package/core/streaming.mjs.map +1 -1
- package/helpers/beta/mcp.js +14 -19
- package/helpers/beta/mcp.js.map +1 -1
- package/helpers/beta/mcp.mjs +14 -13
- package/helpers/beta/mcp.mjs.map +1 -1
- package/internal/constants.js +1 -1
- package/internal/constants.js.map +1 -1
- package/internal/decoders/jsonl.js +27 -24
- package/internal/decoders/jsonl.js.map +1 -1
- package/internal/decoders/jsonl.mjs +27 -24
- package/internal/decoders/jsonl.mjs.map +1 -1
- package/internal/decoders/line.js +52 -49
- package/internal/decoders/line.js.map +1 -1
- package/internal/decoders/line.mjs +52 -43
- package/internal/decoders/line.mjs.map +1 -1
- package/internal/file-store.js +256 -258
- package/internal/file-store.js.map +1 -1
- package/internal/file-store.mjs +256 -243
- package/internal/file-store.mjs.map +1 -1
- package/internal/node.browser.d.mts.map +1 -1
- package/internal/node.browser.d.ts.map +1 -1
- package/internal/node.browser.js.map +1 -1
- package/internal/node.browser.mjs +7 -7
- package/internal/node.browser.mjs.map +1 -1
- package/internal/parse.d.mts.map +1 -1
- package/internal/parse.d.ts.map +1 -1
- package/internal/parse.js +2 -2
- package/internal/parse.js.map +1 -1
- package/internal/parse.mjs +3 -3
- package/internal/parse.mjs.map +1 -1
- package/internal/shim-types.js +0 -6
- package/internal/shim-types.js.map +1 -1
- package/internal/shim-types.mjs +0 -6
- package/internal/shim-types.mjs.map +1 -1
- package/internal/shims.d.mts +3 -3
- package/internal/shims.d.mts.map +1 -1
- package/internal/shims.d.ts +3 -3
- package/internal/shims.d.ts.map +1 -1
- package/internal/shims.js +0 -6
- package/internal/shims.js.map +1 -1
- package/internal/shims.mjs +0 -6
- package/internal/shims.mjs.map +1 -1
- package/internal/stainless-helper-header.js +6 -6
- package/internal/stainless-helper-header.js.map +1 -1
- package/internal/utils/async-queue.js +66 -63
- package/internal/utils/async-queue.js.map +1 -1
- package/internal/utils/async-queue.mjs +66 -56
- package/internal/utils/async-queue.mjs.map +1 -1
- package/internal/utils/bytes.d.mts +1 -1
- package/internal/utils/bytes.d.mts.map +1 -1
- package/internal/utils/bytes.d.ts +1 -1
- package/internal/utils/bytes.d.ts.map +1 -1
- package/internal/utils/log.d.mts +7 -12
- package/internal/utils/log.d.mts.map +1 -1
- package/internal/utils/log.d.ts +7 -12
- package/internal/utils/log.d.ts.map +1 -1
- package/internal/utils/log.js +12 -0
- package/internal/utils/log.js.map +1 -1
- package/internal/utils/log.mjs +11 -0
- package/internal/utils/log.mjs.map +1 -1
- package/lib/BetaMessageStream.d.mts.map +1 -1
- package/lib/BetaMessageStream.d.ts.map +1 -1
- package/lib/BetaMessageStream.js +595 -590
- package/lib/BetaMessageStream.js.map +1 -1
- package/lib/BetaMessageStream.mjs +595 -590
- package/lib/BetaMessageStream.mjs.map +1 -1
- package/lib/MessageStream.js +544 -541
- package/lib/MessageStream.js.map +1 -1
- package/lib/MessageStream.mjs +544 -541
- package/lib/MessageStream.mjs.map +1 -1
- package/lib/beta-parser.d.mts +1 -3
- package/lib/beta-parser.d.mts.map +1 -1
- package/lib/beta-parser.d.ts +1 -3
- package/lib/beta-parser.d.ts.map +1 -1
- package/lib/beta-parser.js.map +1 -1
- package/lib/beta-parser.mjs.map +1 -1
- package/lib/environments/poller.js +180 -174
- package/lib/environments/poller.js.map +1 -1
- package/lib/environments/poller.mjs +180 -153
- package/lib/environments/poller.mjs.map +1 -1
- package/lib/environments/worker.js +375 -369
- package/lib/environments/worker.js.map +1 -1
- package/lib/environments/worker.mjs +374 -329
- package/lib/environments/worker.mjs.map +1 -1
- package/lib/internal/stub.d.mts +2 -0
- package/lib/internal/stub.d.mts.map +1 -0
- package/lib/internal/stub.d.ts +2 -0
- package/lib/internal/stub.d.ts.map +1 -0
- package/lib/internal/stub.js +6 -0
- package/lib/internal/stub.js.map +1 -0
- package/lib/internal/stub.mjs +3 -0
- package/lib/internal/stub.mjs.map +1 -0
- package/lib/internal/types.d.mts +5 -0
- package/lib/internal/types.d.mts.map +1 -0
- package/lib/internal/types.d.ts +5 -0
- package/lib/internal/types.d.ts.map +1 -0
- package/lib/internal/types.js +3 -0
- package/lib/internal/types.js.map +1 -0
- package/lib/internal/types.mjs +2 -0
- package/lib/internal/types.mjs.map +1 -0
- package/lib/middleware.js +6 -1
- package/lib/middleware.js.map +1 -1
- package/lib/middleware.mjs +6 -1
- package/lib/middleware.mjs.map +1 -1
- package/lib/parser.d.mts +1 -3
- package/lib/parser.d.mts.map +1 -1
- package/lib/parser.d.ts +1 -3
- package/lib/parser.d.ts.map +1 -1
- package/lib/parser.js.map +1 -1
- package/lib/parser.mjs.map +1 -1
- package/lib/tools/BetaToolRunner.d.mts +21 -6
- package/lib/tools/BetaToolRunner.d.mts.map +1 -1
- package/lib/tools/BetaToolRunner.d.ts +21 -6
- package/lib/tools/BetaToolRunner.d.ts.map +1 -1
- package/lib/tools/BetaToolRunner.js +415 -310
- package/lib/tools/BetaToolRunner.js.map +1 -1
- package/lib/tools/BetaToolRunner.mjs +414 -303
- package/lib/tools/BetaToolRunner.mjs.map +1 -1
- package/lib/tools/SessionToolRunner.js +241 -235
- package/lib/tools/SessionToolRunner.js.map +1 -1
- package/lib/tools/SessionToolRunner.mjs +241 -192
- package/lib/tools/SessionToolRunner.mjs.map +1 -1
- package/lib/tools/ToolError.js +39 -36
- package/lib/tools/ToolError.js.map +1 -1
- package/lib/tools/ToolError.mjs +39 -13
- package/lib/tools/ToolError.mjs.map +1 -1
- package/lib/transform-json-schema.js +7 -5
- package/lib/transform-json-schema.js.map +1 -1
- package/lib/transform-json-schema.mjs +7 -5
- package/lib/transform-json-schema.mjs.map +1 -1
- package/package.json +4 -3
- package/resources/beta/agents/agents.js +135 -132
- package/resources/beta/agents/agents.js.map +1 -1
- package/resources/beta/agents/agents.mjs +135 -132
- package/resources/beta/agents/agents.mjs.map +1 -1
- package/resources/beta/beta.d.mts +5 -5
- package/resources/beta/beta.d.mts.map +1 -1
- package/resources/beta/beta.d.ts +5 -5
- package/resources/beta/beta.d.ts.map +1 -1
- package/resources/beta/beta.js +39 -36
- package/resources/beta/beta.js.map +1 -1
- package/resources/beta/beta.mjs +39 -36
- package/resources/beta/beta.mjs.map +1 -1
- package/resources/beta/deployment-runs.d.mts +4 -0
- package/resources/beta/deployment-runs.d.mts.map +1 -1
- package/resources/beta/deployment-runs.d.ts +4 -0
- package/resources/beta/deployment-runs.d.ts.map +1 -1
- package/resources/beta/deployments.d.mts +5 -0
- package/resources/beta/deployments.d.mts.map +1 -1
- package/resources/beta/deployments.d.ts +5 -0
- package/resources/beta/deployments.d.ts.map +1 -1
- package/resources/beta/dreams.d.mts +19 -28
- package/resources/beta/dreams.d.mts.map +1 -1
- package/resources/beta/dreams.d.ts +19 -28
- package/resources/beta/dreams.d.ts.map +1 -1
- package/resources/beta/environments/environments.js +157 -154
- package/resources/beta/environments/environments.js.map +1 -1
- package/resources/beta/environments/environments.mjs +157 -154
- package/resources/beta/environments/environments.mjs.map +1 -1
- package/resources/beta/environments/work.js +255 -252
- package/resources/beta/environments/work.js.map +1 -1
- package/resources/beta/environments/work.mjs +255 -252
- package/resources/beta/environments/work.mjs.map +1 -1
- package/resources/beta/index.d.mts +2 -2
- package/resources/beta/index.d.mts.map +1 -1
- package/resources/beta/index.d.ts +2 -2
- package/resources/beta/index.d.ts.map +1 -1
- package/resources/beta/index.js.map +1 -1
- package/resources/beta/index.mjs.map +1 -1
- package/resources/beta/memory-stores/memories.d.mts +6 -0
- package/resources/beta/memory-stores/memories.d.mts.map +1 -1
- package/resources/beta/memory-stores/memories.d.ts +6 -0
- package/resources/beta/memory-stores/memories.d.ts.map +1 -1
- package/resources/beta/memory-stores/memory-stores.js +150 -147
- package/resources/beta/memory-stores/memory-stores.js.map +1 -1
- package/resources/beta/memory-stores/memory-stores.mjs +150 -147
- package/resources/beta/memory-stores/memory-stores.mjs.map +1 -1
- package/resources/beta/memory-stores/memory-versions.d.mts +7 -0
- package/resources/beta/memory-stores/memory-versions.d.mts.map +1 -1
- package/resources/beta/memory-stores/memory-versions.d.ts +7 -0
- package/resources/beta/memory-stores/memory-versions.d.ts.map +1 -1
- package/resources/beta/messages/batches.d.mts +12 -1
- package/resources/beta/messages/batches.d.mts.map +1 -1
- package/resources/beta/messages/batches.d.ts +12 -1
- package/resources/beta/messages/batches.d.ts.map +1 -1
- package/resources/beta/messages/index.d.mts +1 -1
- package/resources/beta/messages/index.d.mts.map +1 -1
- package/resources/beta/messages/index.d.ts +1 -1
- package/resources/beta/messages/index.d.ts.map +1 -1
- package/resources/beta/messages/index.js.map +1 -1
- package/resources/beta/messages/index.mjs.map +1 -1
- package/resources/beta/messages/messages.d.mts +239 -101
- package/resources/beta/messages/messages.d.mts.map +1 -1
- package/resources/beta/messages/messages.d.ts +239 -101
- package/resources/beta/messages/messages.d.ts.map +1 -1
- package/resources/beta/messages/messages.js +113 -110
- package/resources/beta/messages/messages.js.map +1 -1
- package/resources/beta/messages/messages.mjs +113 -110
- package/resources/beta/messages/messages.mjs.map +1 -1
- package/resources/beta/models.d.mts +22 -1
- package/resources/beta/models.d.mts.map +1 -1
- package/resources/beta/models.d.ts +22 -1
- package/resources/beta/models.d.ts.map +1 -1
- package/resources/beta/organization/federation/federation.js +11 -8
- package/resources/beta/organization/federation/federation.js.map +1 -1
- package/resources/beta/organization/federation/federation.mjs +11 -8
- package/resources/beta/organization/federation/federation.mjs.map +1 -1
- package/resources/beta/organization/federation/rules/rules.js +187 -184
- package/resources/beta/organization/federation/rules/rules.js.map +1 -1
- package/resources/beta/organization/federation/rules/rules.mjs +187 -184
- package/resources/beta/organization/federation/rules/rules.mjs.map +1 -1
- package/resources/beta/organization/index.d.mts +1 -1
- package/resources/beta/organization/index.d.mts.map +1 -1
- package/resources/beta/organization/index.d.ts +1 -1
- package/resources/beta/organization/index.d.ts.map +1 -1
- package/resources/beta/organization/index.js.map +1 -1
- package/resources/beta/organization/index.mjs.map +1 -1
- package/resources/beta/organization/organization.d.mts +2 -2
- package/resources/beta/organization/organization.d.mts.map +1 -1
- package/resources/beta/organization/organization.d.ts +2 -2
- package/resources/beta/organization/organization.d.ts.map +1 -1
- package/resources/beta/organization/organization.js +38 -35
- package/resources/beta/organization/organization.js.map +1 -1
- package/resources/beta/organization/organization.mjs +38 -35
- package/resources/beta/organization/organization.mjs.map +1 -1
- package/resources/beta/organization/rate-limits.d.mts +87 -5
- package/resources/beta/organization/rate-limits.d.mts.map +1 -1
- package/resources/beta/organization/rate-limits.d.ts +87 -5
- package/resources/beta/organization/rate-limits.d.ts.map +1 -1
- package/resources/beta/organization/service-accounts/service-accounts.js +163 -160
- package/resources/beta/organization/service-accounts/service-accounts.js.map +1 -1
- package/resources/beta/organization/service-accounts/service-accounts.mjs +163 -160
- package/resources/beta/organization/service-accounts/service-accounts.mjs.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.d.mts +9 -4
- package/resources/beta/organization/workspaces/rate-limits.d.mts.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.d.ts +9 -4
- package/resources/beta/organization/workspaces/rate-limits.d.ts.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.js.map +1 -1
- package/resources/beta/organization/workspaces/rate-limits.mjs.map +1 -1
- package/resources/beta/organization/workspaces/workspaces.d.mts +3 -3
- package/resources/beta/organization/workspaces/workspaces.d.mts.map +1 -1
- package/resources/beta/organization/workspaces/workspaces.d.ts +3 -3
- package/resources/beta/organization/workspaces/workspaces.d.ts.map +1 -1
- package/resources/beta/organization/workspaces/workspaces.js +97 -94
- package/resources/beta/organization/workspaces/workspaces.js.map +1 -1
- package/resources/beta/organization/workspaces/workspaces.mjs +97 -94
- package/resources/beta/organization/workspaces/workspaces.mjs.map +1 -1
- package/resources/beta/sessions/events.d.mts +12 -21
- package/resources/beta/sessions/events.d.mts.map +1 -1
- package/resources/beta/sessions/events.d.ts +12 -21
- package/resources/beta/sessions/events.d.ts.map +1 -1
- package/resources/beta/sessions/events.js +118 -115
- package/resources/beta/sessions/events.js.map +1 -1
- package/resources/beta/sessions/events.mjs +118 -115
- package/resources/beta/sessions/events.mjs.map +1 -1
- package/resources/beta/sessions/resources.d.mts +0 -3
- package/resources/beta/sessions/resources.d.mts.map +1 -1
- package/resources/beta/sessions/resources.d.ts +0 -3
- package/resources/beta/sessions/resources.d.ts.map +1 -1
- package/resources/beta/sessions/sessions.d.mts +8 -2
- package/resources/beta/sessions/sessions.d.mts.map +1 -1
- package/resources/beta/sessions/sessions.d.ts +8 -2
- package/resources/beta/sessions/sessions.d.ts.map +1 -1
- package/resources/beta/sessions/sessions.js +161 -158
- package/resources/beta/sessions/sessions.js.map +1 -1
- package/resources/beta/sessions/sessions.mjs +161 -158
- package/resources/beta/sessions/sessions.mjs.map +1 -1
- package/resources/beta/sessions/threads/threads.js +86 -83
- package/resources/beta/sessions/threads/threads.js.map +1 -1
- package/resources/beta/sessions/threads/threads.mjs +86 -83
- package/resources/beta/sessions/threads/threads.mjs.map +1 -1
- package/resources/beta/skills/skills.js +104 -101
- package/resources/beta/skills/skills.js.map +1 -1
- package/resources/beta/skills/skills.mjs +104 -101
- package/resources/beta/skills/skills.mjs.map +1 -1
- package/resources/beta/tunnels/certificates.d.mts +2 -2
- package/resources/beta/tunnels/certificates.d.ts +2 -2
- package/resources/beta/tunnels/tunnels.js +188 -185
- package/resources/beta/tunnels/tunnels.js.map +1 -1
- package/resources/beta/tunnels/tunnels.mjs +188 -185
- package/resources/beta/tunnels/tunnels.mjs.map +1 -1
- package/resources/beta/user-profiles.d.mts +45 -0
- package/resources/beta/user-profiles.d.mts.map +1 -1
- package/resources/beta/user-profiles.d.ts +45 -0
- package/resources/beta/user-profiles.d.ts.map +1 -1
- package/resources/beta/user-profiles.js +25 -10
- package/resources/beta/user-profiles.js.map +1 -1
- package/resources/beta/user-profiles.mjs +25 -10
- package/resources/beta/user-profiles.mjs.map +1 -1
- package/resources/beta/vaults/credentials.d.mts +19 -19
- package/resources/beta/vaults/credentials.d.mts.map +1 -1
- package/resources/beta/vaults/credentials.d.ts +19 -19
- package/resources/beta/vaults/credentials.d.ts.map +1 -1
- package/resources/beta/vaults/vaults.js +156 -153
- package/resources/beta/vaults/vaults.js.map +1 -1
- package/resources/beta/vaults/vaults.mjs +156 -153
- package/resources/beta/vaults/vaults.mjs.map +1 -1
- package/resources/completions.d.mts +1 -1
- package/resources/completions.d.ts +1 -1
- package/resources/index.d.mts +1 -1
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +1 -1
- package/resources/index.d.ts.map +1 -1
- package/resources/index.js.map +1 -1
- package/resources/index.mjs.map +1 -1
- package/resources/messages/index.d.mts +1 -1
- package/resources/messages/index.d.mts.map +1 -1
- package/resources/messages/index.d.ts +1 -1
- package/resources/messages/index.d.ts.map +1 -1
- package/resources/messages/index.js.map +1 -1
- package/resources/messages/index.mjs.map +1 -1
- package/resources/messages/messages.d.mts +100 -63
- package/resources/messages/messages.d.mts.map +1 -1
- package/resources/messages/messages.d.ts +100 -63
- package/resources/messages/messages.d.ts.map +1 -1
- package/resources/messages/messages.js +115 -112
- package/resources/messages/messages.js.map +1 -1
- package/resources/messages/messages.mjs +115 -112
- package/resources/messages/messages.mjs.map +1 -1
- package/resources/skills/skills.js +88 -85
- package/resources/skills/skills.js.map +1 -1
- package/resources/skills/skills.mjs +88 -85
- package/resources/skills/skills.mjs.map +1 -1
- package/resources/top-level.js +0 -1
- package/resources/top-level.js.map +1 -1
- package/resources/top-level.mjs +0 -1
- package/resources/top-level.mjs.map +1 -1
- package/src/client.ts +95 -72
- package/src/internal/node.browser.ts +7 -7
- package/src/internal/parse.ts +8 -11
- package/src/internal/shims.ts +4 -3
- package/src/internal/utils/bytes.ts +1 -1
- package/src/internal/utils/log.ts +16 -2
- package/src/lib/BetaMessageStream.ts +7 -5
- package/src/lib/beta-parser.ts +1 -3
- package/src/lib/internal/stub.ts +2 -0
- package/src/lib/internal/types.ts +2 -0
- package/src/lib/middleware.ts +6 -1
- package/src/lib/parser.ts +1 -3
- package/src/lib/tools/BetaToolRunner.ts +157 -24
- package/src/lib/transform-json-schema.ts +8 -6
- package/src/resources/beta/beta.ts +24 -1
- package/src/resources/beta/deployment-runs.ts +4 -0
- package/src/resources/beta/deployments.ts +5 -0
- package/src/resources/beta/dreams.ts +19 -28
- package/src/resources/beta/index.ts +11 -0
- package/src/resources/beta/memory-stores/memories.ts +6 -0
- package/src/resources/beta/memory-stores/memory-versions.ts +7 -0
- package/src/resources/beta/messages/batches.ts +13 -1
- package/src/resources/beta/messages/index.ts +10 -0
- package/src/resources/beta/messages/messages.ts +289 -100
- package/src/resources/beta/models.ts +25 -0
- package/src/resources/beta/organization/index.ts +6 -0
- package/src/resources/beta/organization/organization.ts +12 -0
- package/src/resources/beta/organization/rate-limits.ts +112 -4
- package/src/resources/beta/organization/workspaces/rate-limits.ts +16 -4
- package/src/resources/beta/organization/workspaces/workspaces.ts +3 -3
- package/src/resources/beta/sessions/events.ts +12 -21
- package/src/resources/beta/sessions/resources.ts +0 -3
- package/src/resources/beta/sessions/sessions.ts +8 -2
- package/src/resources/beta/tunnels/certificates.ts +2 -2
- package/src/resources/beta/user-profiles.ts +75 -10
- package/src/resources/beta/vaults/credentials.ts +19 -19
- package/src/resources/completions.ts +1 -1
- package/src/resources/index.ts +6 -0
- package/src/resources/messages/index.ts +6 -0
- package/src/resources/messages/messages.ts +128 -62
- package/src/tsconfig.json +13 -3
- package/src/version.ts +1 -1
- package/tools/agent-toolset/fs-util.js +0 -6
- package/tools/agent-toolset/fs-util.js.map +1 -1
- package/tools/agent-toolset/fs-util.mjs +0 -6
- package/tools/agent-toolset/fs-util.mjs.map +1 -1
- package/tools/agent-toolset/memories.js +4 -4
- package/tools/agent-toolset/memories.js.map +1 -1
- package/tools/agent-toolset/memories.mjs +2 -2
- package/tools/agent-toolset/memories.mjs.map +1 -1
- package/tools/agent-toolset/node.browser.js +12 -12
- package/tools/agent-toolset/node.browser.js.map +1 -1
- package/tools/agent-toolset/node.js +142 -139
- package/tools/agent-toolset/node.js.map +1 -1
- package/tools/agent-toolset/node.mjs +132 -125
- package/tools/agent-toolset/node.mjs.map +1 -1
- package/tools/agent-toolset/skills.js +5 -5
- package/tools/agent-toolset/skills.js.map +1 -1
- package/tools/agent-toolset/sync-interval.js +3 -3
- package/tools/agent-toolset/sync-interval.js.map +1 -1
- package/tools/memory/node.browser.js +2 -2
- package/tools/memory/node.browser.js.map +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
package/lib/MessageStream.mjs
CHANGED
|
@@ -10,592 +10,595 @@ import { JSON_BUF_PROPERTY, withLazyInput } from "../internal/message-stream-uti
|
|
|
10
10
|
function tracksToolInput(content) {
|
|
11
11
|
return content.type === 'tool_use' || content.type === 'server_tool_use';
|
|
12
12
|
}
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
__classPrivateFieldSet(this,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
__classPrivateFieldSet(this,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
get response() {
|
|
74
|
-
return __classPrivateFieldGet(this, _MessageStream_response, "f");
|
|
75
|
-
}
|
|
76
|
-
get request_id() {
|
|
77
|
-
return __classPrivateFieldGet(this, _MessageStream_request_id, "f");
|
|
78
|
-
}
|
|
79
|
-
get workspace_id() {
|
|
80
|
-
return __classPrivateFieldGet(this, _MessageStream_workspace_id, "f");
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Returns the `MessageStream` data, the raw `Response` instance and the ID of the request,
|
|
84
|
-
* returned vie the `request-id` header which is useful for debugging requests and resporting
|
|
85
|
-
* issues to Anthropic.
|
|
86
|
-
*
|
|
87
|
-
* This is the same as the `APIPromise.withResponse()` method.
|
|
88
|
-
*
|
|
89
|
-
* This method will raise an error if you created the stream using `MessageStream.fromReadableStream`
|
|
90
|
-
* as no `Response` is available.
|
|
91
|
-
*/
|
|
92
|
-
async withResponse() {
|
|
93
|
-
__classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
|
|
94
|
-
const response = await __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f");
|
|
95
|
-
if (!response) {
|
|
96
|
-
throw new Error('Could not resolve a `Response` object');
|
|
13
|
+
export var MessageStream = /* @__PURE__ */ (() => {
|
|
14
|
+
class MessageStream {
|
|
15
|
+
constructor(params, opts) {
|
|
16
|
+
_MessageStream_instances.add(this);
|
|
17
|
+
this.messages = [];
|
|
18
|
+
this.receivedMessages = [];
|
|
19
|
+
_MessageStream_currentMessageSnapshot.set(this, void 0);
|
|
20
|
+
_MessageStream_params.set(this, null);
|
|
21
|
+
this.controller = new AbortController();
|
|
22
|
+
_MessageStream_connectedPromise.set(this, void 0);
|
|
23
|
+
_MessageStream_resolveConnectedPromise.set(this, () => { });
|
|
24
|
+
_MessageStream_rejectConnectedPromise.set(this, () => { });
|
|
25
|
+
_MessageStream_endPromise.set(this, void 0);
|
|
26
|
+
_MessageStream_resolveEndPromise.set(this, () => { });
|
|
27
|
+
_MessageStream_rejectEndPromise.set(this, () => { });
|
|
28
|
+
_MessageStream_listeners.set(this, {});
|
|
29
|
+
_MessageStream_ended.set(this, false);
|
|
30
|
+
_MessageStream_errored.set(this, false);
|
|
31
|
+
_MessageStream_aborted.set(this, false);
|
|
32
|
+
_MessageStream_catchingPromiseCreated.set(this, false);
|
|
33
|
+
_MessageStream_response.set(this, void 0);
|
|
34
|
+
_MessageStream_request_id.set(this, void 0);
|
|
35
|
+
_MessageStream_workspace_id.set(this, void 0);
|
|
36
|
+
_MessageStream_logger.set(this, void 0);
|
|
37
|
+
_MessageStream_handleError.set(this, (error) => {
|
|
38
|
+
__classPrivateFieldSet(this, _MessageStream_errored, true, "f");
|
|
39
|
+
if (isAbortError(error)) {
|
|
40
|
+
error = new APIUserAbortError();
|
|
41
|
+
}
|
|
42
|
+
if (error instanceof APIUserAbortError) {
|
|
43
|
+
__classPrivateFieldSet(this, _MessageStream_aborted, true, "f");
|
|
44
|
+
return this._emit('abort', error);
|
|
45
|
+
}
|
|
46
|
+
if (error instanceof AnthropicError) {
|
|
47
|
+
return this._emit('error', error);
|
|
48
|
+
}
|
|
49
|
+
if (error instanceof Error) {
|
|
50
|
+
const anthropicError = new AnthropicError(error.message);
|
|
51
|
+
// @ts-ignore
|
|
52
|
+
anthropicError.cause = error;
|
|
53
|
+
return this._emit('error', anthropicError);
|
|
54
|
+
}
|
|
55
|
+
return this._emit('error', new AnthropicError(String(error)));
|
|
56
|
+
});
|
|
57
|
+
__classPrivateFieldSet(this, _MessageStream_connectedPromise, new Promise((resolve, reject) => {
|
|
58
|
+
__classPrivateFieldSet(this, _MessageStream_resolveConnectedPromise, resolve, "f");
|
|
59
|
+
__classPrivateFieldSet(this, _MessageStream_rejectConnectedPromise, reject, "f");
|
|
60
|
+
}), "f");
|
|
61
|
+
__classPrivateFieldSet(this, _MessageStream_endPromise, new Promise((resolve, reject) => {
|
|
62
|
+
__classPrivateFieldSet(this, _MessageStream_resolveEndPromise, resolve, "f");
|
|
63
|
+
__classPrivateFieldSet(this, _MessageStream_rejectEndPromise, reject, "f");
|
|
64
|
+
}), "f");
|
|
65
|
+
// Don't let these promises cause unhandled rejection errors.
|
|
66
|
+
// we will manually cause an unhandled rejection error later
|
|
67
|
+
// if the user hasn't registered any error listener or called
|
|
68
|
+
// any promise-returning method.
|
|
69
|
+
__classPrivateFieldGet(this, _MessageStream_connectedPromise, "f").catch(() => { });
|
|
70
|
+
__classPrivateFieldGet(this, _MessageStream_endPromise, "f").catch(() => { });
|
|
71
|
+
__classPrivateFieldSet(this, _MessageStream_params, params, "f");
|
|
72
|
+
__classPrivateFieldSet(this, _MessageStream_logger, opts?.logger ?? console, "f");
|
|
97
73
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
response,
|
|
101
|
-
request_id: response.headers.get('request-id'),
|
|
102
|
-
workspace_id: response.headers.get('anthropic-workspace-id'),
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Intended for use on the frontend, consuming a stream produced with
|
|
107
|
-
* `.toReadableStream()` on the backend.
|
|
108
|
-
*
|
|
109
|
-
* Note that messages sent to the model do not appear in `.on('message')`
|
|
110
|
-
* in this context.
|
|
111
|
-
*/
|
|
112
|
-
static fromReadableStream(stream) {
|
|
113
|
-
const runner = new MessageStream(null);
|
|
114
|
-
runner._run(() => runner._fromReadableStream(stream));
|
|
115
|
-
return runner;
|
|
116
|
-
}
|
|
117
|
-
static createMessage(messages, params, options, { logger } = {}) {
|
|
118
|
-
const runner = new MessageStream(params, { logger });
|
|
119
|
-
for (const message of params.messages) {
|
|
120
|
-
runner._addMessageParam(message);
|
|
74
|
+
get response() {
|
|
75
|
+
return __classPrivateFieldGet(this, _MessageStream_response, "f");
|
|
121
76
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
return runner;
|
|
125
|
-
}
|
|
126
|
-
_run(executor) {
|
|
127
|
-
executor().then(() => {
|
|
128
|
-
this._emitFinal();
|
|
129
|
-
this._emit('end');
|
|
130
|
-
}, __classPrivateFieldGet(this, _MessageStream_handleError, "f"));
|
|
131
|
-
}
|
|
132
|
-
_addMessageParam(message) {
|
|
133
|
-
this.messages.push(message);
|
|
134
|
-
}
|
|
135
|
-
_addMessage(message, emit = true) {
|
|
136
|
-
this.receivedMessages.push(message);
|
|
137
|
-
if (emit) {
|
|
138
|
-
this._emit('message', message);
|
|
77
|
+
get request_id() {
|
|
78
|
+
return __classPrivateFieldGet(this, _MessageStream_request_id, "f");
|
|
139
79
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const signal = options?.signal;
|
|
143
|
-
let abortHandler;
|
|
144
|
-
if (signal) {
|
|
145
|
-
if (signal.aborted)
|
|
146
|
-
this.controller.abort();
|
|
147
|
-
abortHandler = this.controller.abort.bind(this.controller);
|
|
148
|
-
signal.addEventListener('abort', abortHandler);
|
|
80
|
+
get workspace_id() {
|
|
81
|
+
return __classPrivateFieldGet(this, _MessageStream_workspace_id, "f");
|
|
149
82
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
83
|
+
/**
|
|
84
|
+
* Returns the `MessageStream` data, the raw `Response` instance and the ID of the request,
|
|
85
|
+
* returned vie the `request-id` header which is useful for debugging requests and resporting
|
|
86
|
+
* issues to Anthropic.
|
|
87
|
+
*
|
|
88
|
+
* This is the same as the `APIPromise.withResponse()` method.
|
|
89
|
+
*
|
|
90
|
+
* This method will raise an error if you created the stream using `MessageStream.fromReadableStream`
|
|
91
|
+
* as no `Response` is available.
|
|
92
|
+
*/
|
|
93
|
+
async withResponse() {
|
|
94
|
+
__classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
|
|
95
|
+
const response = await __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f");
|
|
96
|
+
if (!response) {
|
|
97
|
+
throw new Error('Could not resolve a `Response` object');
|
|
161
98
|
}
|
|
162
|
-
|
|
99
|
+
return {
|
|
100
|
+
data: this,
|
|
101
|
+
response,
|
|
102
|
+
request_id: response.headers.get('request-id'),
|
|
103
|
+
workspace_id: response.headers.get('anthropic-workspace-id'),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Intended for use on the frontend, consuming a stream produced with
|
|
108
|
+
* `.toReadableStream()` on the backend.
|
|
109
|
+
*
|
|
110
|
+
* Note that messages sent to the model do not appear in `.on('message')`
|
|
111
|
+
* in this context.
|
|
112
|
+
*/
|
|
113
|
+
static fromReadableStream(stream) {
|
|
114
|
+
const runner = new MessageStream(null);
|
|
115
|
+
runner._run(() => runner._fromReadableStream(stream));
|
|
116
|
+
return runner;
|
|
163
117
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
118
|
+
static createMessage(messages, params, options, { logger } = {}) {
|
|
119
|
+
const runner = new MessageStream(params, { logger });
|
|
120
|
+
for (const message of params.messages) {
|
|
121
|
+
runner._addMessageParam(message);
|
|
167
122
|
}
|
|
123
|
+
__classPrivateFieldSet(runner, _MessageStream_params, { ...params, stream: true }, "f");
|
|
124
|
+
runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [STAINLESS_HELPER_METHOD_HEADER]: 'stream' } }));
|
|
125
|
+
return runner;
|
|
168
126
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
__classPrivateFieldSet(this, _MessageStream_request_id, response?.headers.get('request-id'), "f");
|
|
175
|
-
__classPrivateFieldSet(this, _MessageStream_workspace_id, response?.headers.get('anthropic-workspace-id'), "f");
|
|
176
|
-
__classPrivateFieldGet(this, _MessageStream_resolveConnectedPromise, "f").call(this, response);
|
|
177
|
-
this._emit('connect');
|
|
178
|
-
}
|
|
179
|
-
get ended() {
|
|
180
|
-
return __classPrivateFieldGet(this, _MessageStream_ended, "f");
|
|
181
|
-
}
|
|
182
|
-
get errored() {
|
|
183
|
-
return __classPrivateFieldGet(this, _MessageStream_errored, "f");
|
|
184
|
-
}
|
|
185
|
-
get aborted() {
|
|
186
|
-
return __classPrivateFieldGet(this, _MessageStream_aborted, "f");
|
|
187
|
-
}
|
|
188
|
-
abort() {
|
|
189
|
-
this.controller.abort();
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Adds the listener function to the end of the listeners array for the event.
|
|
193
|
-
* No checks are made to see if the listener has already been added. Multiple calls passing
|
|
194
|
-
* the same combination of event and listener will result in the listener being added, and
|
|
195
|
-
* called, multiple times.
|
|
196
|
-
* @returns this MessageStream, so that calls can be chained
|
|
197
|
-
*/
|
|
198
|
-
on(event, listener) {
|
|
199
|
-
const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []);
|
|
200
|
-
listeners.push({ listener });
|
|
201
|
-
return this;
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Removes the specified listener from the listener array for the event.
|
|
205
|
-
* off() will remove, at most, one instance of a listener from the listener array. If any single
|
|
206
|
-
* listener has been added multiple times to the listener array for the specified event, then
|
|
207
|
-
* off() must be called multiple times to remove each instance.
|
|
208
|
-
* @returns this MessageStream, so that calls can be chained
|
|
209
|
-
*/
|
|
210
|
-
off(event, listener) {
|
|
211
|
-
const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event];
|
|
212
|
-
if (!listeners)
|
|
213
|
-
return this;
|
|
214
|
-
const index = listeners.findIndex((l) => l.listener === listener);
|
|
215
|
-
if (index >= 0)
|
|
216
|
-
listeners.splice(index, 1);
|
|
217
|
-
return this;
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Adds a one-time listener function for the event. The next time the event is triggered,
|
|
221
|
-
* this listener is removed and then invoked.
|
|
222
|
-
* @returns this MessageStream, so that calls can be chained
|
|
223
|
-
*/
|
|
224
|
-
once(event, listener) {
|
|
225
|
-
const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []);
|
|
226
|
-
listeners.push({ listener, once: true });
|
|
227
|
-
return this;
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* This is similar to `.once()`, but returns a Promise that resolves the next time
|
|
231
|
-
* the event is triggered, instead of calling a listener callback.
|
|
232
|
-
* @returns a Promise that resolves the next time given event is triggered,
|
|
233
|
-
* or rejects if an error is emitted. (If you request the 'error' event,
|
|
234
|
-
* returns a promise that resolves with the error).
|
|
235
|
-
*
|
|
236
|
-
* Example:
|
|
237
|
-
*
|
|
238
|
-
* const message = await stream.emitted('message') // rejects if the stream errors
|
|
239
|
-
*/
|
|
240
|
-
emitted(event) {
|
|
241
|
-
return new Promise((resolve, reject) => {
|
|
242
|
-
__classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
|
|
243
|
-
if (event !== 'error')
|
|
244
|
-
this.once('error', reject);
|
|
245
|
-
this.once(event, resolve);
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
async done() {
|
|
249
|
-
__classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
|
|
250
|
-
await __classPrivateFieldGet(this, _MessageStream_endPromise, "f");
|
|
251
|
-
}
|
|
252
|
-
get currentMessage() {
|
|
253
|
-
return __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* @returns a promise that resolves with the the final assistant Message response,
|
|
257
|
-
* or rejects if an error occurred or the stream ended prematurely without producing a Message.
|
|
258
|
-
* If structured outputs were used, this will be a ParsedMessage with a `parsed_output` field.
|
|
259
|
-
*/
|
|
260
|
-
async finalMessage() {
|
|
261
|
-
await this.done();
|
|
262
|
-
return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this);
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* @returns a promise that resolves with the the final assistant Message's text response, concatenated
|
|
266
|
-
* together if there are more than one text blocks.
|
|
267
|
-
* Rejects if an error occurred or the stream ended prematurely without producing a Message.
|
|
268
|
-
*/
|
|
269
|
-
async finalText() {
|
|
270
|
-
await this.done();
|
|
271
|
-
return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalText).call(this);
|
|
272
|
-
}
|
|
273
|
-
_emit(event, ...args) {
|
|
274
|
-
// make sure we don't emit any MessageStreamEvents after end
|
|
275
|
-
if (__classPrivateFieldGet(this, _MessageStream_ended, "f"))
|
|
276
|
-
return;
|
|
277
|
-
if (event === 'end') {
|
|
278
|
-
__classPrivateFieldSet(this, _MessageStream_ended, true, "f");
|
|
279
|
-
__classPrivateFieldGet(this, _MessageStream_resolveEndPromise, "f").call(this);
|
|
127
|
+
_run(executor) {
|
|
128
|
+
executor().then(() => {
|
|
129
|
+
this._emitFinal();
|
|
130
|
+
this._emit('end');
|
|
131
|
+
}, __classPrivateFieldGet(this, _MessageStream_handleError, "f"));
|
|
280
132
|
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once);
|
|
284
|
-
listeners.forEach(({ listener }) => listener(...args));
|
|
133
|
+
_addMessageParam(message) {
|
|
134
|
+
this.messages.push(message);
|
|
285
135
|
}
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
if (
|
|
289
|
-
|
|
136
|
+
_addMessage(message, emit = true) {
|
|
137
|
+
this.receivedMessages.push(message);
|
|
138
|
+
if (emit) {
|
|
139
|
+
this._emit('message', message);
|
|
290
140
|
}
|
|
291
|
-
__classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error);
|
|
292
|
-
__classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error);
|
|
293
|
-
this._emit('end');
|
|
294
|
-
return;
|
|
295
141
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
if (
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
142
|
+
async _createMessage(messages, params, options) {
|
|
143
|
+
const signal = options?.signal;
|
|
144
|
+
let abortHandler;
|
|
145
|
+
if (signal) {
|
|
146
|
+
if (signal.aborted)
|
|
147
|
+
this.controller.abort();
|
|
148
|
+
abortHandler = this.controller.abort.bind(this.controller);
|
|
149
|
+
signal.addEventListener('abort', abortHandler);
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this);
|
|
153
|
+
const { response, data: stream } = await messages
|
|
154
|
+
.create({ ...params, stream: true }, { ...options, signal: this.controller.signal })
|
|
155
|
+
.withResponse();
|
|
156
|
+
this._connected(response);
|
|
157
|
+
for await (const event of stream) {
|
|
158
|
+
__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event);
|
|
159
|
+
}
|
|
160
|
+
if (stream.controller.signal?.aborted) {
|
|
161
|
+
throw new APIUserAbortError();
|
|
162
|
+
}
|
|
163
|
+
__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this);
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
if (signal && abortHandler) {
|
|
167
|
+
signal.removeEventListener('abort', abortHandler);
|
|
168
|
+
}
|
|
307
169
|
}
|
|
308
|
-
__classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error);
|
|
309
|
-
__classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error);
|
|
310
|
-
this._emit('end');
|
|
311
170
|
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
this.
|
|
171
|
+
_connected(response) {
|
|
172
|
+
if (this.ended)
|
|
173
|
+
return;
|
|
174
|
+
__classPrivateFieldSet(this, _MessageStream_response, response, "f");
|
|
175
|
+
__classPrivateFieldSet(this, _MessageStream_request_id, response?.headers.get('request-id'), "f");
|
|
176
|
+
__classPrivateFieldSet(this, _MessageStream_workspace_id, response?.headers.get('anthropic-workspace-id'), "f");
|
|
177
|
+
__classPrivateFieldGet(this, _MessageStream_resolveConnectedPromise, "f").call(this, response);
|
|
178
|
+
this._emit('connect');
|
|
317
179
|
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
const signal = options?.signal;
|
|
321
|
-
let abortHandler;
|
|
322
|
-
if (signal) {
|
|
323
|
-
if (signal.aborted)
|
|
324
|
-
this.controller.abort();
|
|
325
|
-
abortHandler = this.controller.abort.bind(this.controller);
|
|
326
|
-
signal.addEventListener('abort', abortHandler);
|
|
180
|
+
get ended() {
|
|
181
|
+
return __classPrivateFieldGet(this, _MessageStream_ended, "f");
|
|
327
182
|
}
|
|
328
|
-
|
|
329
|
-
__classPrivateFieldGet(this,
|
|
330
|
-
this._connected(null);
|
|
331
|
-
const stream = Stream.fromReadableStream(readableStream, this.controller);
|
|
332
|
-
for await (const event of stream) {
|
|
333
|
-
__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event);
|
|
334
|
-
}
|
|
335
|
-
if (stream.controller.signal?.aborted) {
|
|
336
|
-
throw new APIUserAbortError();
|
|
337
|
-
}
|
|
338
|
-
__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this);
|
|
183
|
+
get errored() {
|
|
184
|
+
return __classPrivateFieldGet(this, _MessageStream_errored, "f");
|
|
339
185
|
}
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
signal.removeEventListener('abort', abortHandler);
|
|
343
|
-
}
|
|
186
|
+
get aborted() {
|
|
187
|
+
return __classPrivateFieldGet(this, _MessageStream_aborted, "f");
|
|
344
188
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
if (this.receivedMessages.length === 0) {
|
|
348
|
-
throw new AnthropicError('stream ended without producing a Message with role=assistant');
|
|
189
|
+
abort() {
|
|
190
|
+
this.controller.abort();
|
|
349
191
|
}
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
192
|
+
/**
|
|
193
|
+
* Adds the listener function to the end of the listeners array for the event.
|
|
194
|
+
* No checks are made to see if the listener has already been added. Multiple calls passing
|
|
195
|
+
* the same combination of event and listener will result in the listener being added, and
|
|
196
|
+
* called, multiple times.
|
|
197
|
+
* @returns this MessageStream, so that calls can be chained
|
|
198
|
+
*/
|
|
199
|
+
on(event, listener) {
|
|
200
|
+
const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []);
|
|
201
|
+
listeners.push({ listener });
|
|
202
|
+
return this;
|
|
354
203
|
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
204
|
+
/**
|
|
205
|
+
* Removes the specified listener from the listener array for the event.
|
|
206
|
+
* off() will remove, at most, one instance of a listener from the listener array. If any single
|
|
207
|
+
* listener has been added multiple times to the listener array for the specified event, then
|
|
208
|
+
* off() must be called multiple times to remove each instance.
|
|
209
|
+
* @returns this MessageStream, so that calls can be chained
|
|
210
|
+
*/
|
|
211
|
+
off(event, listener) {
|
|
212
|
+
const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event];
|
|
213
|
+
if (!listeners)
|
|
214
|
+
return this;
|
|
215
|
+
const index = listeners.findIndex((l) => l.listener === listener);
|
|
216
|
+
if (index >= 0)
|
|
217
|
+
listeners.splice(index, 1);
|
|
218
|
+
return this;
|
|
361
219
|
}
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
this._emit('streamEvent', event, messageSnapshot);
|
|
372
|
-
switch (event.type) {
|
|
373
|
-
case 'content_block_delta': {
|
|
374
|
-
const content = messageSnapshot.content.at(-1);
|
|
375
|
-
switch (event.delta.type) {
|
|
376
|
-
case 'text_delta': {
|
|
377
|
-
if (content.type === 'text') {
|
|
378
|
-
this._emit('text', event.delta.text, content.text || '');
|
|
379
|
-
}
|
|
380
|
-
break;
|
|
381
|
-
}
|
|
382
|
-
case 'citations_delta': {
|
|
383
|
-
if (content.type === 'text') {
|
|
384
|
-
this._emit('citation', event.delta.citation, content.citations ?? []);
|
|
385
|
-
}
|
|
386
|
-
break;
|
|
387
|
-
}
|
|
388
|
-
case 'input_json_delta': {
|
|
389
|
-
if (tracksToolInput(content) && __classPrivateFieldGet(this, _MessageStream_listeners, "f").inputJson?.length) {
|
|
390
|
-
this._emit('inputJson', event.delta.partial_json, content.input);
|
|
391
|
-
}
|
|
392
|
-
break;
|
|
393
|
-
}
|
|
394
|
-
case 'thinking_delta': {
|
|
395
|
-
if (content.type === 'thinking') {
|
|
396
|
-
this._emit('thinking', event.delta.thinking, content.thinking);
|
|
397
|
-
}
|
|
398
|
-
break;
|
|
399
|
-
}
|
|
400
|
-
case 'signature_delta': {
|
|
401
|
-
if (content.type === 'thinking') {
|
|
402
|
-
this._emit('signature', content.signature);
|
|
403
|
-
}
|
|
404
|
-
break;
|
|
405
|
-
}
|
|
406
|
-
default:
|
|
407
|
-
checkNever(event.delta);
|
|
408
|
-
}
|
|
409
|
-
break;
|
|
410
|
-
}
|
|
411
|
-
case 'message_stop': {
|
|
412
|
-
this._addMessageParam(messageSnapshot);
|
|
413
|
-
this._addMessage(maybeParseMessage(messageSnapshot, __classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _MessageStream_logger, "f") }), true);
|
|
414
|
-
break;
|
|
415
|
-
}
|
|
416
|
-
case 'content_block_stop': {
|
|
417
|
-
this._emit('contentBlock', messageSnapshot.content.at(-1));
|
|
418
|
-
break;
|
|
419
|
-
}
|
|
420
|
-
case 'message_start': {
|
|
421
|
-
__classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, messageSnapshot, "f");
|
|
422
|
-
break;
|
|
423
|
-
}
|
|
424
|
-
case 'content_block_start':
|
|
425
|
-
case 'message_delta':
|
|
426
|
-
break;
|
|
220
|
+
/**
|
|
221
|
+
* Adds a one-time listener function for the event. The next time the event is triggered,
|
|
222
|
+
* this listener is removed and then invoked.
|
|
223
|
+
* @returns this MessageStream, so that calls can be chained
|
|
224
|
+
*/
|
|
225
|
+
once(event, listener) {
|
|
226
|
+
const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []);
|
|
227
|
+
listeners.push({ listener, once: true });
|
|
228
|
+
return this;
|
|
427
229
|
}
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
230
|
+
/**
|
|
231
|
+
* This is similar to `.once()`, but returns a Promise that resolves the next time
|
|
232
|
+
* the event is triggered, instead of calling a listener callback.
|
|
233
|
+
* @returns a Promise that resolves the next time given event is triggered,
|
|
234
|
+
* or rejects if an error is emitted. (If you request the 'error' event,
|
|
235
|
+
* returns a promise that resolves with the error).
|
|
236
|
+
*
|
|
237
|
+
* Example:
|
|
238
|
+
*
|
|
239
|
+
* const message = await stream.emitted('message') // rejects if the stream errors
|
|
240
|
+
*/
|
|
241
|
+
emitted(event) {
|
|
242
|
+
return new Promise((resolve, reject) => {
|
|
243
|
+
__classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
|
|
244
|
+
if (event !== 'error')
|
|
245
|
+
this.once('error', reject);
|
|
246
|
+
this.once(event, resolve);
|
|
247
|
+
});
|
|
431
248
|
}
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
249
|
+
async done() {
|
|
250
|
+
__classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
|
|
251
|
+
await __classPrivateFieldGet(this, _MessageStream_endPromise, "f");
|
|
435
252
|
}
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
}, _MessageStream_accumulateMessage = function _MessageStream_accumulateMessage(event) {
|
|
439
|
-
let snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
|
|
440
|
-
if (event.type === 'message_start') {
|
|
441
|
-
if (snapshot) {
|
|
442
|
-
throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`);
|
|
443
|
-
}
|
|
444
|
-
return event.message;
|
|
253
|
+
get currentMessage() {
|
|
254
|
+
return __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
|
|
445
255
|
}
|
|
446
|
-
|
|
447
|
-
|
|
256
|
+
/**
|
|
257
|
+
* @returns a promise that resolves with the the final assistant Message response,
|
|
258
|
+
* or rejects if an error occurred or the stream ended prematurely without producing a Message.
|
|
259
|
+
* If structured outputs were used, this will be a ParsedMessage with a `parsed_output` field.
|
|
260
|
+
*/
|
|
261
|
+
async finalMessage() {
|
|
262
|
+
await this.done();
|
|
263
|
+
return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this);
|
|
448
264
|
}
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
265
|
+
/**
|
|
266
|
+
* @returns a promise that resolves with the the final assistant Message's text response, concatenated
|
|
267
|
+
* together if there are more than one text blocks.
|
|
268
|
+
* Rejects if an error occurred or the stream ended prematurely without producing a Message.
|
|
269
|
+
*/
|
|
270
|
+
async finalText() {
|
|
271
|
+
await this.done();
|
|
272
|
+
return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalText).call(this);
|
|
273
|
+
}
|
|
274
|
+
_emit(event, ...args) {
|
|
275
|
+
// make sure we don't emit any MessageStreamEvents after end
|
|
276
|
+
if (__classPrivateFieldGet(this, _MessageStream_ended, "f"))
|
|
277
|
+
return;
|
|
278
|
+
if (event === 'end') {
|
|
279
|
+
__classPrivateFieldSet(this, _MessageStream_ended, true, "f");
|
|
280
|
+
__classPrivateFieldGet(this, _MessageStream_resolveEndPromise, "f").call(this);
|
|
281
|
+
}
|
|
282
|
+
const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event];
|
|
283
|
+
if (listeners) {
|
|
284
|
+
__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once);
|
|
285
|
+
listeners.forEach(({ listener }) => listener(...args));
|
|
286
|
+
}
|
|
287
|
+
if (event === 'abort') {
|
|
288
|
+
const error = args[0];
|
|
289
|
+
if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
|
|
290
|
+
Promise.reject(error);
|
|
464
291
|
}
|
|
465
|
-
|
|
466
|
-
|
|
292
|
+
__classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error);
|
|
293
|
+
__classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error);
|
|
294
|
+
this._emit('end');
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
if (event === 'error') {
|
|
298
|
+
// NOTE: _emit('error', error) should only be called from #handleError().
|
|
299
|
+
const error = args[0];
|
|
300
|
+
if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
|
|
301
|
+
// Trigger an unhandled rejection if the user hasn't registered any error handlers.
|
|
302
|
+
// If you are seeing stack traces here, make sure to handle errors via either:
|
|
303
|
+
// - runner.on('error', () => ...)
|
|
304
|
+
// - await runner.done()
|
|
305
|
+
// - await runner.final...()
|
|
306
|
+
// - etc.
|
|
307
|
+
Promise.reject(error);
|
|
467
308
|
}
|
|
468
|
-
|
|
469
|
-
|
|
309
|
+
__classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error);
|
|
310
|
+
__classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error);
|
|
311
|
+
this._emit('end');
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
_emitFinal() {
|
|
315
|
+
const finalMessage = this.receivedMessages.at(-1);
|
|
316
|
+
if (finalMessage) {
|
|
317
|
+
this._emit('finalMessage', __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this));
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
async _fromReadableStream(readableStream, options) {
|
|
321
|
+
const signal = options?.signal;
|
|
322
|
+
let abortHandler;
|
|
323
|
+
if (signal) {
|
|
324
|
+
if (signal.aborted)
|
|
325
|
+
this.controller.abort();
|
|
326
|
+
abortHandler = this.controller.abort.bind(this.controller);
|
|
327
|
+
signal.addEventListener('abort', abortHandler);
|
|
328
|
+
}
|
|
329
|
+
try {
|
|
330
|
+
__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this);
|
|
331
|
+
this._connected(null);
|
|
332
|
+
const stream = Stream.fromReadableStream(readableStream, this.controller);
|
|
333
|
+
for await (const event of stream) {
|
|
334
|
+
__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event);
|
|
470
335
|
}
|
|
471
|
-
if (
|
|
472
|
-
|
|
336
|
+
if (stream.controller.signal?.aborted) {
|
|
337
|
+
throw new APIUserAbortError();
|
|
473
338
|
}
|
|
474
|
-
|
|
475
|
-
|
|
339
|
+
__classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this);
|
|
340
|
+
}
|
|
341
|
+
finally {
|
|
342
|
+
if (signal && abortHandler) {
|
|
343
|
+
signal.removeEventListener('abort', abortHandler);
|
|
476
344
|
}
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
[(_MessageStream_currentMessageSnapshot = new WeakMap(), _MessageStream_params = new WeakMap(), _MessageStream_connectedPromise = new WeakMap(), _MessageStream_resolveConnectedPromise = new WeakMap(), _MessageStream_rejectConnectedPromise = new WeakMap(), _MessageStream_endPromise = new WeakMap(), _MessageStream_resolveEndPromise = new WeakMap(), _MessageStream_rejectEndPromise = new WeakMap(), _MessageStream_listeners = new WeakMap(), _MessageStream_ended = new WeakMap(), _MessageStream_errored = new WeakMap(), _MessageStream_aborted = new WeakMap(), _MessageStream_catchingPromiseCreated = new WeakMap(), _MessageStream_response = new WeakMap(), _MessageStream_request_id = new WeakMap(), _MessageStream_workspace_id = new WeakMap(), _MessageStream_logger = new WeakMap(), _MessageStream_handleError = new WeakMap(), _MessageStream_instances = new WeakSet(), _MessageStream_getFinalMessage = function _MessageStream_getFinalMessage() {
|
|
348
|
+
if (this.receivedMessages.length === 0) {
|
|
349
|
+
throw new AnthropicError('stream ended without producing a Message with role=assistant');
|
|
350
|
+
}
|
|
351
|
+
return this.receivedMessages.at(-1);
|
|
352
|
+
}, _MessageStream_getFinalText = function _MessageStream_getFinalText() {
|
|
353
|
+
if (this.receivedMessages.length === 0) {
|
|
354
|
+
throw new AnthropicError('stream ended without producing a Message with role=assistant');
|
|
355
|
+
}
|
|
356
|
+
const textBlocks = this.receivedMessages
|
|
357
|
+
.at(-1)
|
|
358
|
+
.content.filter((block) => block.type === 'text')
|
|
359
|
+
.map((block) => block.text);
|
|
360
|
+
if (textBlocks.length === 0) {
|
|
361
|
+
throw new AnthropicError('stream ended without producing a content block with type=text');
|
|
362
|
+
}
|
|
363
|
+
return textBlocks.join(' ');
|
|
364
|
+
}, _MessageStream_beginRequest = function _MessageStream_beginRequest() {
|
|
365
|
+
if (this.ended)
|
|
366
|
+
return;
|
|
367
|
+
__classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, "f");
|
|
368
|
+
}, _MessageStream_addStreamEvent = function _MessageStream_addStreamEvent(event) {
|
|
369
|
+
if (this.ended)
|
|
370
|
+
return;
|
|
371
|
+
const messageSnapshot = __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_accumulateMessage).call(this, event);
|
|
372
|
+
this._emit('streamEvent', event, messageSnapshot);
|
|
373
|
+
switch (event.type) {
|
|
374
|
+
case 'content_block_delta': {
|
|
375
|
+
const content = messageSnapshot.content.at(-1);
|
|
376
|
+
switch (event.delta.type) {
|
|
377
|
+
case 'text_delta': {
|
|
378
|
+
if (content.type === 'text') {
|
|
379
|
+
this._emit('text', event.delta.text, content.text || '');
|
|
380
|
+
}
|
|
381
|
+
break;
|
|
490
382
|
}
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
...snapshotContent,
|
|
497
|
-
citations: [...(snapshotContent.citations ?? []), event.delta.citation],
|
|
498
|
-
};
|
|
383
|
+
case 'citations_delta': {
|
|
384
|
+
if (content.type === 'text') {
|
|
385
|
+
this._emit('citation', event.delta.citation, content.citations ?? []);
|
|
386
|
+
}
|
|
387
|
+
break;
|
|
499
388
|
}
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
snapshot.content[event.index] = withLazyInput(snapshotContent, jsonBuf);
|
|
389
|
+
case 'input_json_delta': {
|
|
390
|
+
if (tracksToolInput(content) && __classPrivateFieldGet(this, _MessageStream_listeners, "f").inputJson?.length) {
|
|
391
|
+
this._emit('inputJson', event.delta.partial_json, content.input);
|
|
392
|
+
}
|
|
393
|
+
break;
|
|
506
394
|
}
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
...snapshotContent,
|
|
513
|
-
thinking: snapshotContent.thinking + event.delta.thinking,
|
|
514
|
-
};
|
|
395
|
+
case 'thinking_delta': {
|
|
396
|
+
if (content.type === 'thinking') {
|
|
397
|
+
this._emit('thinking', event.delta.thinking, content.thinking);
|
|
398
|
+
}
|
|
399
|
+
break;
|
|
515
400
|
}
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
...snapshotContent,
|
|
522
|
-
signature: event.delta.signature,
|
|
523
|
-
};
|
|
401
|
+
case 'signature_delta': {
|
|
402
|
+
if (content.type === 'thinking') {
|
|
403
|
+
this._emit('signature', content.signature);
|
|
404
|
+
}
|
|
405
|
+
break;
|
|
524
406
|
}
|
|
525
|
-
|
|
407
|
+
default:
|
|
408
|
+
checkNever(event.delta);
|
|
526
409
|
}
|
|
527
|
-
|
|
528
|
-
checkNever(event.delta);
|
|
410
|
+
break;
|
|
529
411
|
}
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
if (snapshotContent && tracksToolInput(snapshotContent) && JSON_BUF_PROPERTY in snapshotContent) {
|
|
535
|
-
Object.defineProperty(snapshotContent, 'input', {
|
|
536
|
-
value: snapshotContent.input,
|
|
537
|
-
enumerable: true,
|
|
538
|
-
configurable: true,
|
|
539
|
-
writable: true,
|
|
540
|
-
});
|
|
412
|
+
case 'message_stop': {
|
|
413
|
+
this._addMessageParam(messageSnapshot);
|
|
414
|
+
this._addMessage(maybeParseMessage(messageSnapshot, __classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _MessageStream_logger, "f") }), true);
|
|
415
|
+
break;
|
|
541
416
|
}
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
417
|
+
case 'content_block_stop': {
|
|
418
|
+
this._emit('contentBlock', messageSnapshot.content.at(-1));
|
|
419
|
+
break;
|
|
420
|
+
}
|
|
421
|
+
case 'message_start': {
|
|
422
|
+
__classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, messageSnapshot, "f");
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
case 'content_block_start':
|
|
426
|
+
case 'message_delta':
|
|
427
|
+
break;
|
|
553
428
|
}
|
|
554
|
-
|
|
555
|
-
|
|
429
|
+
}, _MessageStream_endRequest = function _MessageStream_endRequest() {
|
|
430
|
+
if (this.ended) {
|
|
431
|
+
throw new AnthropicError(`stream has ended, this shouldn't happen`);
|
|
556
432
|
}
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
for (const reader of readQueue) {
|
|
561
|
-
reader.resolve(undefined);
|
|
433
|
+
const snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
|
|
434
|
+
if (!snapshot) {
|
|
435
|
+
throw new AnthropicError(`request ended without sending any chunks`);
|
|
562
436
|
}
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
437
|
+
__classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, "f");
|
|
438
|
+
return maybeParseMessage(snapshot, __classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _MessageStream_logger, "f") });
|
|
439
|
+
}, _MessageStream_accumulateMessage = function _MessageStream_accumulateMessage(event) {
|
|
440
|
+
let snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
|
|
441
|
+
if (event.type === 'message_start') {
|
|
442
|
+
if (snapshot) {
|
|
443
|
+
throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`);
|
|
444
|
+
}
|
|
445
|
+
return event.message;
|
|
569
446
|
}
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
this.on('error', (err) => {
|
|
573
|
-
done = true;
|
|
574
|
-
for (const reader of readQueue) {
|
|
575
|
-
reader.reject(err);
|
|
447
|
+
if (!snapshot) {
|
|
448
|
+
throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`);
|
|
576
449
|
}
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
450
|
+
switch (event.type) {
|
|
451
|
+
case 'message_stop':
|
|
452
|
+
return snapshot;
|
|
453
|
+
case 'message_delta':
|
|
454
|
+
snapshot.stop_reason = event.delta.stop_reason;
|
|
455
|
+
snapshot.stop_sequence = event.delta.stop_sequence;
|
|
456
|
+
snapshot.stop_details = event.delta.stop_details;
|
|
457
|
+
snapshot.usage.output_tokens = event.usage.output_tokens;
|
|
458
|
+
if (event.delta.container != null) {
|
|
459
|
+
snapshot.container = event.delta.container;
|
|
460
|
+
}
|
|
461
|
+
// The remaining usage counters are cumulative whole-message totals that are
|
|
462
|
+
// omitted when they don't apply, so overwrite when present and never add.
|
|
463
|
+
if (event.usage.input_tokens != null) {
|
|
464
|
+
snapshot.usage.input_tokens = event.usage.input_tokens;
|
|
465
|
+
}
|
|
466
|
+
if (event.usage.cache_creation_input_tokens != null) {
|
|
467
|
+
snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens;
|
|
468
|
+
}
|
|
469
|
+
if (event.usage.cache_read_input_tokens != null) {
|
|
470
|
+
snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens;
|
|
471
|
+
}
|
|
472
|
+
if (event.usage.server_tool_use != null) {
|
|
473
|
+
snapshot.usage.server_tool_use = event.usage.server_tool_use;
|
|
474
|
+
}
|
|
475
|
+
if (event.usage.output_tokens_details != null) {
|
|
476
|
+
snapshot.usage.output_tokens_details = event.usage.output_tokens_details;
|
|
477
|
+
}
|
|
478
|
+
return snapshot;
|
|
479
|
+
case 'content_block_start':
|
|
480
|
+
snapshot.content.push({ ...event.content_block });
|
|
481
|
+
return snapshot;
|
|
482
|
+
case 'content_block_delta': {
|
|
483
|
+
const snapshotContent = snapshot.content.at(event.index);
|
|
484
|
+
switch (event.delta.type) {
|
|
485
|
+
case 'text_delta': {
|
|
486
|
+
if (snapshotContent?.type === 'text') {
|
|
487
|
+
snapshot.content[event.index] = {
|
|
488
|
+
...snapshotContent,
|
|
489
|
+
text: (snapshotContent.text || '') + event.delta.text,
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
break;
|
|
493
|
+
}
|
|
494
|
+
case 'citations_delta': {
|
|
495
|
+
if (snapshotContent?.type === 'text') {
|
|
496
|
+
snapshot.content[event.index] = {
|
|
497
|
+
...snapshotContent,
|
|
498
|
+
citations: [...(snapshotContent.citations ?? []), event.delta.citation],
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
break;
|
|
502
|
+
}
|
|
503
|
+
case 'input_json_delta': {
|
|
504
|
+
if (snapshotContent && tracksToolInput(snapshotContent)) {
|
|
505
|
+
const jsonBuf = (snapshotContent[JSON_BUF_PROPERTY] || '') + event.delta.partial_json;
|
|
506
|
+
snapshot.content[event.index] = withLazyInput(snapshotContent, jsonBuf);
|
|
507
|
+
}
|
|
508
|
+
break;
|
|
509
|
+
}
|
|
510
|
+
case 'thinking_delta': {
|
|
511
|
+
if (snapshotContent?.type === 'thinking') {
|
|
512
|
+
snapshot.content[event.index] = {
|
|
513
|
+
...snapshotContent,
|
|
514
|
+
thinking: snapshotContent.thinking + event.delta.thinking,
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
break;
|
|
518
|
+
}
|
|
519
|
+
case 'signature_delta': {
|
|
520
|
+
if (snapshotContent?.type === 'thinking') {
|
|
521
|
+
snapshot.content[event.index] = {
|
|
522
|
+
...snapshotContent,
|
|
523
|
+
signature: event.delta.signature,
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
break;
|
|
527
|
+
}
|
|
528
|
+
default:
|
|
529
|
+
checkNever(event.delta);
|
|
584
530
|
}
|
|
585
|
-
return
|
|
531
|
+
return snapshot;
|
|
586
532
|
}
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
533
|
+
case 'content_block_stop': {
|
|
534
|
+
const snapshotContent = snapshot.content.at(event.index);
|
|
535
|
+
if (snapshotContent && tracksToolInput(snapshotContent) && JSON_BUF_PROPERTY in snapshotContent) {
|
|
536
|
+
Object.defineProperty(snapshotContent, 'input', {
|
|
537
|
+
value: snapshotContent.input,
|
|
538
|
+
enumerable: true,
|
|
539
|
+
configurable: true,
|
|
540
|
+
writable: true,
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
return snapshot;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
}, Symbol.asyncIterator)]() {
|
|
547
|
+
const pushQueue = [];
|
|
548
|
+
const readQueue = [];
|
|
549
|
+
let done = false;
|
|
550
|
+
this.on('streamEvent', (event) => {
|
|
551
|
+
const reader = readQueue.shift();
|
|
552
|
+
if (reader) {
|
|
553
|
+
reader.resolve(event);
|
|
554
|
+
}
|
|
555
|
+
else {
|
|
556
|
+
pushQueue.push(event);
|
|
557
|
+
}
|
|
558
|
+
});
|
|
559
|
+
this.on('end', () => {
|
|
560
|
+
done = true;
|
|
561
|
+
for (const reader of readQueue) {
|
|
562
|
+
reader.resolve(undefined);
|
|
563
|
+
}
|
|
564
|
+
readQueue.length = 0;
|
|
565
|
+
});
|
|
566
|
+
this.on('abort', (err) => {
|
|
567
|
+
done = true;
|
|
568
|
+
for (const reader of readQueue) {
|
|
569
|
+
reader.reject(err);
|
|
570
|
+
}
|
|
571
|
+
readQueue.length = 0;
|
|
572
|
+
});
|
|
573
|
+
this.on('error', (err) => {
|
|
574
|
+
done = true;
|
|
575
|
+
for (const reader of readQueue) {
|
|
576
|
+
reader.reject(err);
|
|
577
|
+
}
|
|
578
|
+
readQueue.length = 0;
|
|
579
|
+
});
|
|
580
|
+
return {
|
|
581
|
+
next: async () => {
|
|
582
|
+
if (!pushQueue.length) {
|
|
583
|
+
if (done) {
|
|
584
|
+
return { value: undefined, done: true };
|
|
585
|
+
}
|
|
586
|
+
return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));
|
|
587
|
+
}
|
|
588
|
+
const chunk = pushQueue.shift();
|
|
589
|
+
return { value: chunk, done: false };
|
|
590
|
+
},
|
|
591
|
+
return: async () => {
|
|
592
|
+
this.abort();
|
|
593
|
+
return { value: undefined, done: true };
|
|
594
|
+
},
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
toReadableStream() {
|
|
598
|
+
const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);
|
|
599
|
+
return stream.toReadableStream();
|
|
600
|
+
}
|
|
599
601
|
}
|
|
600
|
-
|
|
602
|
+
return MessageStream;
|
|
603
|
+
})();
|
|
601
604
|
//# sourceMappingURL=MessageStream.mjs.map
|