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