@strands-agents/sdk 0.0.1
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/LICENSE +175 -0
- package/README.md +185 -0
- package/dist/__fixtures__/model-test-helpers.d.ts +56 -0
- package/dist/__fixtures__/model-test-helpers.d.ts.map +1 -0
- package/dist/__fixtures__/model-test-helpers.js +85 -0
- package/dist/__fixtures__/model-test-helpers.js.map +1 -0
- package/dist/__fixtures__/tool-helpers.d.ts +15 -0
- package/dist/__fixtures__/tool-helpers.d.ts.map +1 -0
- package/dist/__fixtures__/tool-helpers.js +22 -0
- package/dist/__fixtures__/tool-helpers.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +20 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +27 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/errors.d.ts +22 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +25 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/models/__tests__/bedrock.test.d.ts +2 -0
- package/dist/models/__tests__/bedrock.test.d.ts.map +1 -0
- package/dist/models/__tests__/bedrock.test.js +1161 -0
- package/dist/models/__tests__/bedrock.test.js.map +1 -0
- package/dist/models/__tests__/model.test.d.ts +2 -0
- package/dist/models/__tests__/model.test.d.ts.map +1 -0
- package/dist/models/__tests__/model.test.js +297 -0
- package/dist/models/__tests__/model.test.js.map +1 -0
- package/dist/models/__tests__/openai.test.d.ts +2 -0
- package/dist/models/__tests__/openai.test.d.ts.map +1 -0
- package/dist/models/__tests__/openai.test.js +1016 -0
- package/dist/models/__tests__/openai.test.js.map +1 -0
- package/dist/models/__tests__/test-utils.d.ts +10 -0
- package/dist/models/__tests__/test-utils.d.ts.map +1 -0
- package/dist/models/__tests__/test-utils.js +17 -0
- package/dist/models/__tests__/test-utils.js.map +1 -0
- package/dist/models/bedrock.d.ts +272 -0
- package/dist/models/bedrock.d.ts.map +1 -0
- package/dist/models/bedrock.js +679 -0
- package/dist/models/bedrock.js.map +1 -0
- package/dist/models/model.d.ts +89 -0
- package/dist/models/model.d.ts.map +1 -0
- package/dist/models/model.js +122 -0
- package/dist/models/model.js.map +1 -0
- package/dist/models/openai.d.ts +262 -0
- package/dist/models/openai.d.ts.map +1 -0
- package/dist/models/openai.js +625 -0
- package/dist/models/openai.js.map +1 -0
- package/dist/models/streaming.d.ts +226 -0
- package/dist/models/streaming.d.ts.map +1 -0
- package/dist/models/streaming.js +2 -0
- package/dist/models/streaming.js.map +1 -0
- package/dist/src/__fixtures__/agent-helpers.d.ts +29 -0
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -0
- package/dist/src/__fixtures__/agent-helpers.js +19 -0
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -0
- package/dist/src/__fixtures__/environment.d.ts +12 -0
- package/dist/src/__fixtures__/environment.d.ts.map +1 -0
- package/dist/src/__fixtures__/environment.js +12 -0
- package/dist/src/__fixtures__/environment.js.map +1 -0
- package/dist/src/__fixtures__/mock-hook-provider.d.ts +14 -0
- package/dist/src/__fixtures__/mock-hook-provider.d.ts.map +1 -0
- package/dist/src/__fixtures__/mock-hook-provider.js +33 -0
- package/dist/src/__fixtures__/mock-hook-provider.js.map +1 -0
- package/dist/src/__fixtures__/mock-message-model.d.ts +93 -0
- package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -0
- package/dist/src/__fixtures__/mock-message-model.js +226 -0
- package/dist/src/__fixtures__/mock-message-model.js.map +1 -0
- package/dist/src/__fixtures__/model-test-helpers.d.ts +56 -0
- package/dist/src/__fixtures__/model-test-helpers.d.ts.map +1 -0
- package/dist/src/__fixtures__/model-test-helpers.js +85 -0
- package/dist/src/__fixtures__/model-test-helpers.js.map +1 -0
- package/dist/src/__fixtures__/tool-helpers.d.ts +37 -0
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -0
- package/dist/src/__fixtures__/tool-helpers.js +78 -0
- package/dist/src/__fixtures__/tool-helpers.js.map +1 -0
- package/dist/src/__tests__/errors.test.d.ts +2 -0
- package/dist/src/__tests__/errors.test.d.ts.map +1 -0
- package/dist/src/__tests__/errors.test.js +64 -0
- package/dist/src/__tests__/errors.test.js.map +1 -0
- package/dist/src/__tests__/index.test.d.ts +2 -0
- package/dist/src/__tests__/index.test.d.ts.map +1 -0
- package/dist/src/__tests__/index.test.js +27 -0
- package/dist/src/__tests__/index.test.js.map +1 -0
- package/dist/src/__tests__/mcp.test.d.ts +2 -0
- package/dist/src/__tests__/mcp.test.d.ts.map +1 -0
- package/dist/src/__tests__/mcp.test.js +166 -0
- package/dist/src/__tests__/mcp.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.hook.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.hook.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.hook.test.js +250 -0
- package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.test.js +414 -0
- package/dist/src/agent/__tests__/agent.test.js.map +1 -0
- package/dist/src/agent/__tests__/printer.test.d.ts +2 -0
- package/dist/src/agent/__tests__/printer.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/printer.test.js +152 -0
- package/dist/src/agent/__tests__/printer.test.js.map +1 -0
- package/dist/src/agent/__tests__/state.test.d.ts +2 -0
- package/dist/src/agent/__tests__/state.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/state.test.js +231 -0
- package/dist/src/agent/__tests__/state.test.js.map +1 -0
- package/dist/src/agent/agent.d.ts +207 -0
- package/dist/src/agent/agent.d.ts.map +1 -0
- package/dist/src/agent/agent.js +481 -0
- package/dist/src/agent/agent.js.map +1 -0
- package/dist/src/agent/printer.d.ts +73 -0
- package/dist/src/agent/printer.d.ts.map +1 -0
- package/dist/src/agent/printer.js +145 -0
- package/dist/src/agent/printer.js.map +1 -0
- package/dist/src/agent/state.d.ts +102 -0
- package/dist/src/agent/state.d.ts.map +1 -0
- package/dist/src/agent/state.js +73 -0
- package/dist/src/agent/state.js.map +1 -0
- package/dist/src/agent/streaming.d.ts +91 -0
- package/dist/src/agent/streaming.d.ts.map +1 -0
- package/dist/src/agent/streaming.js +2 -0
- package/dist/src/agent/streaming.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +10 -0
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +35 -0
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +553 -0
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -0
- package/dist/src/conversation-manager/conversation-manager.d.ts +73 -0
- package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -0
- package/dist/src/conversation-manager/conversation-manager.js +24 -0
- package/dist/src/conversation-manager/conversation-manager.js.map +1 -0
- package/dist/src/conversation-manager/index.d.ts +8 -0
- package/dist/src/conversation-manager/index.d.ts.map +1 -0
- package/dist/src/conversation-manager/index.js +8 -0
- package/dist/src/conversation-manager/index.js.map +1 -0
- package/dist/src/conversation-manager/null-conversation-manager.d.ts +23 -0
- package/dist/src/conversation-manager/null-conversation-manager.d.ts.map +1 -0
- package/dist/src/conversation-manager/null-conversation-manager.js +23 -0
- package/dist/src/conversation-manager/null-conversation-manager.js.map +1 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +105 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js +212 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -0
- package/dist/src/errors.d.ts +83 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +97 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/hooks/__tests__/events.test.d.ts +2 -0
- package/dist/src/hooks/__tests__/events.test.d.ts.map +1 -0
- package/dist/src/hooks/__tests__/events.test.js +347 -0
- package/dist/src/hooks/__tests__/events.test.js.map +1 -0
- package/dist/src/hooks/__tests__/registry.test.d.ts +2 -0
- package/dist/src/hooks/__tests__/registry.test.d.ts.map +1 -0
- package/dist/src/hooks/__tests__/registry.test.js +154 -0
- package/dist/src/hooks/__tests__/registry.test.js.map +1 -0
- package/dist/src/hooks/events.d.ts +199 -0
- package/dist/src/hooks/events.d.ts.map +1 -0
- package/dist/src/hooks/events.js +191 -0
- package/dist/src/hooks/events.js.map +1 -0
- package/dist/src/hooks/index.d.ts +11 -0
- package/dist/src/hooks/index.d.ts.map +1 -0
- package/dist/src/hooks/index.js +11 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/hooks/registry.d.ts +65 -0
- package/dist/src/hooks/registry.d.ts.map +1 -0
- package/dist/src/hooks/registry.js +65 -0
- package/dist/src/hooks/registry.js.map +1 -0
- package/dist/src/hooks/types.d.ts +49 -0
- package/dist/src/hooks/types.d.ts.map +1 -0
- package/dist/src/hooks/types.js +2 -0
- package/dist/src/hooks/types.js.map +1 -0
- package/dist/src/index.d.ts +32 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +29 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mcp.d.ts +51 -0
- package/dist/src/mcp.d.ts.map +1 -0
- package/dist/src/mcp.js +91 -0
- package/dist/src/mcp.js.map +1 -0
- package/dist/src/models/__tests__/bedrock.test.d.ts +2 -0
- package/dist/src/models/__tests__/bedrock.test.d.ts.map +1 -0
- package/dist/src/models/__tests__/bedrock.test.js +1388 -0
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -0
- package/dist/src/models/__tests__/model.test.d.ts +2 -0
- package/dist/src/models/__tests__/model.test.d.ts.map +1 -0
- package/dist/src/models/__tests__/model.test.js +342 -0
- package/dist/src/models/__tests__/model.test.js.map +1 -0
- package/dist/src/models/__tests__/openai.test.d.ts +2 -0
- package/dist/src/models/__tests__/openai.test.d.ts.map +1 -0
- package/dist/src/models/__tests__/openai.test.js +1189 -0
- package/dist/src/models/__tests__/openai.test.js.map +1 -0
- package/dist/src/models/__tests__/test-utils.d.ts +10 -0
- package/dist/src/models/__tests__/test-utils.d.ts.map +1 -0
- package/dist/src/models/__tests__/test-utils.js +17 -0
- package/dist/src/models/__tests__/test-utils.js.map +1 -0
- package/dist/src/models/bedrock.d.ts +289 -0
- package/dist/src/models/bedrock.d.ts.map +1 -0
- package/dist/src/models/bedrock.js +804 -0
- package/dist/src/models/bedrock.js.map +1 -0
- package/dist/src/models/model.d.ts +99 -0
- package/dist/src/models/model.d.ts.map +1 -0
- package/dist/src/models/model.js +169 -0
- package/dist/src/models/model.js.map +1 -0
- package/dist/src/models/openai.d.ts +262 -0
- package/dist/src/models/openai.d.ts.map +1 -0
- package/dist/src/models/openai.js +752 -0
- package/dist/src/models/openai.js.map +1 -0
- package/dist/src/models/streaming.d.ts +318 -0
- package/dist/src/models/streaming.d.ts.map +1 -0
- package/dist/src/models/streaming.js +122 -0
- package/dist/src/models/streaming.js.map +1 -0
- package/dist/src/registry/registry.d.ts +117 -0
- package/dist/src/registry/registry.d.ts.map +1 -0
- package/dist/src/registry/registry.js +298 -0
- package/dist/src/registry/registry.js.map +1 -0
- package/dist/src/registry/tool-registry.d.ts +34 -0
- package/dist/src/registry/tool-registry.d.ts.map +1 -0
- package/dist/src/registry/tool-registry.js +178 -0
- package/dist/src/registry/tool-registry.js.map +1 -0
- package/dist/src/tools/__tests__/tool.test.d.ts +2 -0
- package/dist/src/tools/__tests__/tool.test.d.ts.map +1 -0
- package/dist/src/tools/__tests__/tool.test.js +877 -0
- package/dist/src/tools/__tests__/tool.test.js.map +1 -0
- package/dist/src/tools/__tests__/zod-tool.test-d.d.ts +2 -0
- package/dist/src/tools/__tests__/zod-tool.test-d.d.ts.map +1 -0
- package/dist/src/tools/__tests__/zod-tool.test-d.js +227 -0
- package/dist/src/tools/__tests__/zod-tool.test-d.js.map +1 -0
- package/dist/src/tools/__tests__/zod-tool.test.d.ts +2 -0
- package/dist/src/tools/__tests__/zod-tool.test.d.ts.map +1 -0
- package/dist/src/tools/__tests__/zod-tool.test.js +372 -0
- package/dist/src/tools/__tests__/zod-tool.test.js.map +1 -0
- package/dist/src/tools/function-tool.d.ts +146 -0
- package/dist/src/tools/function-tool.d.ts.map +1 -0
- package/dist/src/tools/function-tool.js +188 -0
- package/dist/src/tools/function-tool.js.map +1 -0
- package/dist/src/tools/mcp-tool.d.ts +36 -0
- package/dist/src/tools/mcp-tool.d.ts.map +1 -0
- package/dist/src/tools/mcp-tool.js +78 -0
- package/dist/src/tools/mcp-tool.js.map +1 -0
- package/dist/src/tools/tool.d.ts +167 -0
- package/dist/src/tools/tool.d.ts.map +1 -0
- package/dist/src/tools/tool.js +68 -0
- package/dist/src/tools/tool.js.map +1 -0
- package/dist/src/tools/types.d.ts +62 -0
- package/dist/src/tools/types.d.ts.map +1 -0
- package/dist/src/tools/types.js +2 -0
- package/dist/src/tools/types.js.map +1 -0
- package/dist/src/tools/zod-tool.d.ts +70 -0
- package/dist/src/tools/zod-tool.d.ts.map +1 -0
- package/dist/src/tools/zod-tool.js +149 -0
- package/dist/src/tools/zod-tool.js.map +1 -0
- package/dist/src/types/__tests__/agent.test.d.ts +2 -0
- package/dist/src/types/__tests__/agent.test.d.ts.map +1 -0
- package/dist/src/types/__tests__/agent.test.js +155 -0
- package/dist/src/types/__tests__/agent.test.js.map +1 -0
- package/dist/src/types/__tests__/json.test.d.ts +2 -0
- package/dist/src/types/__tests__/json.test.d.ts.map +1 -0
- package/dist/src/types/__tests__/json.test.js +298 -0
- package/dist/src/types/__tests__/json.test.js.map +1 -0
- package/dist/src/types/__tests__/media.test.d.ts +2 -0
- package/dist/src/types/__tests__/media.test.d.ts.map +1 -0
- package/dist/src/types/__tests__/media.test.js +257 -0
- package/dist/src/types/__tests__/media.test.js.map +1 -0
- package/dist/src/types/__tests__/messages.test.d.ts +2 -0
- package/dist/src/types/__tests__/messages.test.d.ts.map +1 -0
- package/dist/src/types/__tests__/messages.test.js +364 -0
- package/dist/src/types/__tests__/messages.test.js.map +1 -0
- package/dist/src/types/__tests__/validation.test.d.ts +2 -0
- package/dist/src/types/__tests__/validation.test.d.ts.map +1 -0
- package/dist/src/types/__tests__/validation.test.js +30 -0
- package/dist/src/types/__tests__/validation.test.js.map +1 -0
- package/dist/src/types/agent.d.ts +57 -0
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js +47 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/src/types/json.d.ts +55 -0
- package/dist/src/types/json.d.ts.map +1 -0
- package/dist/src/types/json.js +72 -0
- package/dist/src/types/json.js.map +1 -0
- package/dist/src/types/media.d.ts +249 -0
- package/dist/src/types/media.d.ts.map +1 -0
- package/dist/src/types/media.js +173 -0
- package/dist/src/types/media.js.map +1 -0
- package/dist/src/types/messages.d.ts +438 -0
- package/dist/src/types/messages.d.ts.map +1 -0
- package/dist/src/types/messages.js +286 -0
- package/dist/src/types/messages.js.map +1 -0
- package/dist/src/types/validation.d.ts +10 -0
- package/dist/src/types/validation.d.ts.map +1 -0
- package/dist/src/types/validation.js +15 -0
- package/dist/src/types/validation.js.map +1 -0
- package/dist/tools/__tests__/registry.test.d.ts +2 -0
- package/dist/tools/__tests__/registry.test.d.ts.map +1 -0
- package/dist/tools/__tests__/registry.test.js +253 -0
- package/dist/tools/__tests__/registry.test.js.map +1 -0
- package/dist/tools/__tests__/tool.test.d.ts +2 -0
- package/dist/tools/__tests__/tool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/tool.test.js +761 -0
- package/dist/tools/__tests__/tool.test.js.map +1 -0
- package/dist/tools/__tests__/zod-tool.test-d.d.ts +2 -0
- package/dist/tools/__tests__/zod-tool.test-d.d.ts.map +1 -0
- package/dist/tools/__tests__/zod-tool.test-d.js +227 -0
- package/dist/tools/__tests__/zod-tool.test-d.js.map +1 -0
- package/dist/tools/__tests__/zod-tool.test.d.ts +2 -0
- package/dist/tools/__tests__/zod-tool.test.d.ts.map +1 -0
- package/dist/tools/__tests__/zod-tool.test.js +342 -0
- package/dist/tools/__tests__/zod-tool.test.js.map +1 -0
- package/dist/tools/function-tool.d.ts +156 -0
- package/dist/tools/function-tool.d.ts.map +1 -0
- package/dist/tools/function-tool.js +237 -0
- package/dist/tools/function-tool.js.map +1 -0
- package/dist/tools/registry.d.ts +43 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +82 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/tool.d.ts +157 -0
- package/dist/tools/tool.d.ts.map +1 -0
- package/dist/tools/tool.js +2 -0
- package/dist/tools/tool.js.map +1 -0
- package/dist/tools/types.d.ts +119 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/zod-tool.d.ts +70 -0
- package/dist/tools/zod-tool.d.ts.map +1 -0
- package/dist/tools/zod-tool.js +96 -0
- package/dist/tools/zod-tool.js.map +1 -0
- package/dist/types/__tests__/json.test.d.ts +2 -0
- package/dist/types/__tests__/json.test.d.ts.map +1 -0
- package/dist/types/__tests__/json.test.js +129 -0
- package/dist/types/__tests__/json.test.js.map +1 -0
- package/dist/types/__tests__/validation.test.d.ts +2 -0
- package/dist/types/__tests__/validation.test.d.ts.map +1 -0
- package/dist/types/__tests__/validation.test.js +30 -0
- package/dist/types/__tests__/validation.test.js.map +1 -0
- package/dist/types/json.d.ts +45 -0
- package/dist/types/json.d.ts.map +1 -0
- package/dist/types/json.js +17 -0
- package/dist/types/json.js.map +1 -0
- package/dist/types/messages.d.ts +160 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +2 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/validation.d.ts +10 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +15 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/vended_tools/bash/__tests__/bash.test.d.ts +2 -0
- package/dist/vended_tools/bash/__tests__/bash.test.d.ts.map +1 -0
- package/dist/vended_tools/bash/__tests__/bash.test.js +333 -0
- package/dist/vended_tools/bash/__tests__/bash.test.js.map +1 -0
- package/dist/vended_tools/bash/bash.d.ts +33 -0
- package/dist/vended_tools/bash/bash.d.ts.map +1 -0
- package/dist/vended_tools/bash/bash.js +264 -0
- package/dist/vended_tools/bash/bash.js.map +1 -0
- package/dist/vended_tools/bash/index.d.ts +7 -0
- package/dist/vended_tools/bash/index.d.ts.map +1 -0
- package/dist/vended_tools/bash/index.js +6 -0
- package/dist/vended_tools/bash/index.js.map +1 -0
- package/dist/vended_tools/bash/types.d.ts +65 -0
- package/dist/vended_tools/bash/types.d.ts.map +1 -0
- package/dist/vended_tools/bash/types.js +22 -0
- package/dist/vended_tools/bash/types.js.map +1 -0
- package/dist/vended_tools/file_editor/__tests__/file-editor.test.d.ts +2 -0
- package/dist/vended_tools/file_editor/__tests__/file-editor.test.d.ts.map +1 -0
- package/dist/vended_tools/file_editor/__tests__/file-editor.test.js +359 -0
- package/dist/vended_tools/file_editor/__tests__/file-editor.test.js.map +1 -0
- package/dist/vended_tools/file_editor/file-editor.d.ts +31 -0
- package/dist/vended_tools/file_editor/file-editor.d.ts.map +1 -0
- package/dist/vended_tools/file_editor/file-editor.js +353 -0
- package/dist/vended_tools/file_editor/file-editor.js.map +1 -0
- package/dist/vended_tools/file_editor/index.d.ts +6 -0
- package/dist/vended_tools/file_editor/index.d.ts.map +1 -0
- package/dist/vended_tools/file_editor/index.js +5 -0
- package/dist/vended_tools/file_editor/index.js.map +1 -0
- package/dist/vended_tools/file_editor/types.d.ts +61 -0
- package/dist/vended_tools/file_editor/types.d.ts.map +1 -0
- package/dist/vended_tools/file_editor/types.js +2 -0
- package/dist/vended_tools/file_editor/types.js.map +1 -0
- package/dist/vended_tools/http_request/__tests__/http-request.test.d.ts +2 -0
- package/dist/vended_tools/http_request/__tests__/http-request.test.d.ts.map +1 -0
- package/dist/vended_tools/http_request/__tests__/http-request.test.js +189 -0
- package/dist/vended_tools/http_request/__tests__/http-request.test.js.map +1 -0
- package/dist/vended_tools/http_request/http-request.d.ts +35 -0
- package/dist/vended_tools/http_request/http-request.d.ts.map +1 -0
- package/dist/vended_tools/http_request/http-request.js +95 -0
- package/dist/vended_tools/http_request/http-request.js.map +1 -0
- package/dist/vended_tools/http_request/index.d.ts +6 -0
- package/dist/vended_tools/http_request/index.d.ts.map +1 -0
- package/dist/vended_tools/http_request/index.js +5 -0
- package/dist/vended_tools/http_request/index.js.map +1 -0
- package/dist/vended_tools/http_request/types.d.ts +47 -0
- package/dist/vended_tools/http_request/types.d.ts.map +1 -0
- package/dist/vended_tools/http_request/types.js +2 -0
- package/dist/vended_tools/http_request/types.js.map +1 -0
- package/dist/vended_tools/notebook/__tests__/notebook.test.d.ts +2 -0
- package/dist/vended_tools/notebook/__tests__/notebook.test.d.ts.map +1 -0
- package/dist/vended_tools/notebook/__tests__/notebook.test.js +371 -0
- package/dist/vended_tools/notebook/__tests__/notebook.test.js.map +1 -0
- package/dist/vended_tools/notebook/index.d.ts +6 -0
- package/dist/vended_tools/notebook/index.d.ts.map +1 -0
- package/dist/vended_tools/notebook/index.js +5 -0
- package/dist/vended_tools/notebook/index.js.map +1 -0
- package/dist/vended_tools/notebook/notebook.d.ts +29 -0
- package/dist/vended_tools/notebook/notebook.d.ts.map +1 -0
- package/dist/vended_tools/notebook/notebook.js +215 -0
- package/dist/vended_tools/notebook/notebook.js.map +1 -0
- package/dist/vended_tools/notebook/types.d.ts +79 -0
- package/dist/vended_tools/notebook/types.d.ts.map +1 -0
- package/dist/vended_tools/notebook/types.js +2 -0
- package/dist/vended_tools/notebook/types.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1,679 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS Bedrock model provider implementation.
|
|
3
|
+
*
|
|
4
|
+
* This module provides integration with AWS Bedrock's Converse API,
|
|
5
|
+
* supporting streaming responses, tool use, and prompt caching.
|
|
6
|
+
*
|
|
7
|
+
* @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html
|
|
8
|
+
*/
|
|
9
|
+
import { BedrockRuntimeClient, ConverseStreamCommand, ContentBlock as BedrockContentBlock, ConverseCommand, ReasoningContentBlockDelta, ReasoningContentBlock, } from '@aws-sdk/client-bedrock-runtime';
|
|
10
|
+
import { Model } from '../models/model';
|
|
11
|
+
import { ContextWindowOverflowError } from '../errors';
|
|
12
|
+
import { ensureDefined } from '../types/validation';
|
|
13
|
+
/**
|
|
14
|
+
* Default Bedrock model ID.
|
|
15
|
+
* Uses Claude Sonnet 4.5 with global inference profile for cross-region availability.
|
|
16
|
+
*/
|
|
17
|
+
const DEFAULT_BEDROCK_MODEL_ID = 'global.anthropic.claude-sonnet-4-5-20250929-v1:0';
|
|
18
|
+
/**
|
|
19
|
+
* Models that require the status field in tool results.
|
|
20
|
+
* According to AWS Bedrock API documentation, the status field is only supported by Anthropic Claude models.
|
|
21
|
+
* @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolResultBlock.html
|
|
22
|
+
*/
|
|
23
|
+
const MODELS_INCLUDE_STATUS = ['anthropic.claude'];
|
|
24
|
+
/**
|
|
25
|
+
* Error messages that indicate context window overflow.
|
|
26
|
+
* Used to detect when input exceeds the model's context window.
|
|
27
|
+
*/
|
|
28
|
+
const BEDROCK_CONTEXT_WINDOW_OVERFLOW_MESSAGES = [
|
|
29
|
+
'Input is too long for requested model',
|
|
30
|
+
'input length and `max_tokens` exceed context limit',
|
|
31
|
+
'too many total text bytes',
|
|
32
|
+
];
|
|
33
|
+
/**
|
|
34
|
+
* Mapping of Bedrock stop reasons to SDK stop reasons.
|
|
35
|
+
*/
|
|
36
|
+
const STOP_REASON_MAP = {
|
|
37
|
+
end_turn: 'endTurn',
|
|
38
|
+
tool_use: 'toolUse',
|
|
39
|
+
max_tokens: 'maxTokens',
|
|
40
|
+
stop_sequence: 'stopSequence',
|
|
41
|
+
content_filtered: 'contentFiltered',
|
|
42
|
+
guardrail_intervened: 'guardrailIntervened',
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Converts a snake_case string to camelCase.
|
|
46
|
+
* Used for mapping unknown stop reasons from Bedrock to SDK format.
|
|
47
|
+
*
|
|
48
|
+
* @param str - Snake case string
|
|
49
|
+
* @returns Camel case string
|
|
50
|
+
*/
|
|
51
|
+
function snakeToCamel(str) {
|
|
52
|
+
return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* AWS Bedrock model provider implementation.
|
|
56
|
+
*
|
|
57
|
+
* Implements the Model interface for AWS Bedrock using the Converse Stream API.
|
|
58
|
+
* Supports streaming responses, tool use, prompt caching, and comprehensive error handling.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const provider = new BedrockModel({
|
|
63
|
+
* modelConfig: {
|
|
64
|
+
* modelId: 'global.anthropic.claude-sonnet-4-5-20250929-v1:0',
|
|
65
|
+
* maxTokens: 1024,
|
|
66
|
+
* temperature: 0.7
|
|
67
|
+
* },
|
|
68
|
+
* clientConfig: {
|
|
69
|
+
* region: 'us-west-2'
|
|
70
|
+
* }
|
|
71
|
+
* })
|
|
72
|
+
*
|
|
73
|
+
* const messages: Message[] = [
|
|
74
|
+
* { type: 'message', role: 'user', content: [{ type: 'textBlock', text: 'Hello!' }] }
|
|
75
|
+
* ]
|
|
76
|
+
*
|
|
77
|
+
* for await (const event of provider.stream(messages)) {
|
|
78
|
+
* if (event.type === 'modelContentBlockDeltaEvent' && event.delta.type === 'textDelta') {
|
|
79
|
+
* process.stdout.write(event.delta.text)
|
|
80
|
+
* }
|
|
81
|
+
* }
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export class BedrockModel extends Model {
|
|
85
|
+
_config;
|
|
86
|
+
_client;
|
|
87
|
+
/**
|
|
88
|
+
* Creates a new BedrockModel instance.
|
|
89
|
+
*
|
|
90
|
+
* @param options - Optional configuration for model and client
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* // Minimal configuration with defaults
|
|
95
|
+
* const provider = new BedrockModel({
|
|
96
|
+
* region: 'us-west-2'
|
|
97
|
+
* })
|
|
98
|
+
*
|
|
99
|
+
* // With model configuration
|
|
100
|
+
* const provider = new BedrockModel({
|
|
101
|
+
* region: 'us-west-2',
|
|
102
|
+
* modelId: 'global.anthropic.claude-sonnet-4-5-20250929-v1:0',
|
|
103
|
+
* maxTokens: 2048,
|
|
104
|
+
* temperature: 0.8,
|
|
105
|
+
* cachePrompt: 'ephemeral'
|
|
106
|
+
* })
|
|
107
|
+
*
|
|
108
|
+
* // With client configuration
|
|
109
|
+
* const provider = new BedrockModel({
|
|
110
|
+
* region: 'us-east-1',
|
|
111
|
+
* clientConfig: {
|
|
112
|
+
* credentials: myCredentials
|
|
113
|
+
* }
|
|
114
|
+
* })
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
constructor(options) {
|
|
118
|
+
super();
|
|
119
|
+
const { region, clientConfig, ...modelConfig } = options ?? {};
|
|
120
|
+
// Initialize model config with default model ID if not provided
|
|
121
|
+
this._config = {
|
|
122
|
+
modelId: DEFAULT_BEDROCK_MODEL_ID,
|
|
123
|
+
...modelConfig,
|
|
124
|
+
};
|
|
125
|
+
// Build user agent string (extend if provided, otherwise use SDK identifier)
|
|
126
|
+
const customUserAgent = clientConfig?.customUserAgent
|
|
127
|
+
? `${clientConfig.customUserAgent} strands-agents-ts-sdk`
|
|
128
|
+
: 'strands-agents-ts-sdk';
|
|
129
|
+
// Initialize Bedrock Runtime client with custom user agent
|
|
130
|
+
this._client = new BedrockRuntimeClient({
|
|
131
|
+
...(clientConfig ?? {}),
|
|
132
|
+
// region takes precedence over clientConfig
|
|
133
|
+
...(region ? { region: region } : {}),
|
|
134
|
+
customUserAgent,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Updates the model configuration.
|
|
139
|
+
* Merges the provided configuration with existing settings.
|
|
140
|
+
*
|
|
141
|
+
* @param modelConfig - Configuration object with model-specific settings to update
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```typescript
|
|
145
|
+
* // Update temperature and maxTokens
|
|
146
|
+
* provider.updateConfig({
|
|
147
|
+
* temperature: 0.9,
|
|
148
|
+
* maxTokens: 2048
|
|
149
|
+
* })
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
updateConfig(modelConfig) {
|
|
153
|
+
this._config = { ...this._config, ...modelConfig };
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Retrieves the current model configuration.
|
|
157
|
+
*
|
|
158
|
+
* @returns The current configuration object
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```typescript
|
|
162
|
+
* const config = provider.getConfig()
|
|
163
|
+
* console.log(config.modelId)
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
getConfig() {
|
|
167
|
+
return this._config;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Streams a conversation with the Bedrock model.
|
|
171
|
+
* Returns an async iterable that yields streaming events as they occur.
|
|
172
|
+
*
|
|
173
|
+
* @param messages - Array of conversation messages
|
|
174
|
+
* @param options - Optional streaming configuration
|
|
175
|
+
* @returns Async iterable of streaming events
|
|
176
|
+
*
|
|
177
|
+
* @throws \{ContextWindowOverflowError\} When input exceeds the model's context window
|
|
178
|
+
* @throws \{ModelThrottledError\} When Bedrock service throttles requests
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* const messages: Message[] = [
|
|
183
|
+
* { type: 'message', role: $1, content: [{ type: 'textBlock', text: 'What is 2+2?' }] }
|
|
184
|
+
* ]
|
|
185
|
+
*
|
|
186
|
+
* const options: StreamOptions = {
|
|
187
|
+
* systemPrompt: 'You are a helpful math assistant.',
|
|
188
|
+
* toolSpecs: [calculatorTool]
|
|
189
|
+
* }
|
|
190
|
+
*
|
|
191
|
+
* for await (const event of provider.stream(messages, options)) {
|
|
192
|
+
* if (event.type === 'modelContentBlockDeltaEvent') {
|
|
193
|
+
* console.log(event.delta)
|
|
194
|
+
* }
|
|
195
|
+
* }
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
async *stream(messages, options) {
|
|
199
|
+
try {
|
|
200
|
+
// Format the request for Bedrock
|
|
201
|
+
const request = this._formatRequest(messages, options);
|
|
202
|
+
if (this._config.stream !== false) {
|
|
203
|
+
// Create and send the command
|
|
204
|
+
const command = new ConverseStreamCommand(request);
|
|
205
|
+
const response = await this._client.send(command);
|
|
206
|
+
// Stream the response
|
|
207
|
+
if (response.stream) {
|
|
208
|
+
for await (const chunk of response.stream) {
|
|
209
|
+
// Map Bedrock events to SDK events
|
|
210
|
+
const events = this._mapStreamedBedrockEventToSDKEvent(chunk);
|
|
211
|
+
for (const event of events) {
|
|
212
|
+
yield event;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
const command = new ConverseCommand(request);
|
|
219
|
+
const response = await this._client.send(command);
|
|
220
|
+
for (const event of this._mapBedrockEventToSDKEvent(response)) {
|
|
221
|
+
yield event;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
const err = error;
|
|
227
|
+
// Check for context window overflow
|
|
228
|
+
if (BEDROCK_CONTEXT_WINDOW_OVERFLOW_MESSAGES.some((msg) => err.message.includes(msg))) {
|
|
229
|
+
throw new ContextWindowOverflowError(err.message);
|
|
230
|
+
}
|
|
231
|
+
// Re-throw other errors as-is
|
|
232
|
+
throw err;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Formats a request for the Bedrock Converse Stream API.
|
|
237
|
+
*
|
|
238
|
+
* @param messages - Conversation messages
|
|
239
|
+
* @param options - Stream options
|
|
240
|
+
* @returns Formatted Bedrock request
|
|
241
|
+
*/
|
|
242
|
+
_formatRequest(messages, options) {
|
|
243
|
+
const request = {
|
|
244
|
+
modelId: this._config.modelId,
|
|
245
|
+
messages: this._formatMessages(messages),
|
|
246
|
+
};
|
|
247
|
+
// Add system prompt with optional caching
|
|
248
|
+
if (options?.systemPrompt !== undefined) {
|
|
249
|
+
if (typeof options.systemPrompt === 'string') {
|
|
250
|
+
// String path: apply cachePrompt config if set
|
|
251
|
+
const system = [{ text: options.systemPrompt }];
|
|
252
|
+
if (this._config.cachePrompt) {
|
|
253
|
+
system.push({ cachePoint: { type: this._config.cachePrompt } });
|
|
254
|
+
}
|
|
255
|
+
request.system = system;
|
|
256
|
+
}
|
|
257
|
+
else if (options.systemPrompt.length > 0) {
|
|
258
|
+
// Array path: use as-is, but warn if cachePrompt config is also set
|
|
259
|
+
if (this._config.cachePrompt) {
|
|
260
|
+
console.warn('cachePrompt config is ignored when systemPrompt is an array. Use explicit cache points in the array instead.');
|
|
261
|
+
}
|
|
262
|
+
request.system = options.systemPrompt.map((block) => this._formatContentBlock(block));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Add tool configuration
|
|
266
|
+
if (options?.toolSpecs && options.toolSpecs.length > 0) {
|
|
267
|
+
const tools = options.toolSpecs.map((spec) => ({
|
|
268
|
+
toolSpec: {
|
|
269
|
+
name: spec.name,
|
|
270
|
+
description: spec.description,
|
|
271
|
+
inputSchema: { json: spec.inputSchema },
|
|
272
|
+
},
|
|
273
|
+
}));
|
|
274
|
+
if (this._config.cacheTools) {
|
|
275
|
+
tools.push({
|
|
276
|
+
cachePoint: { type: this._config.cacheTools },
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
const toolConfig = {
|
|
280
|
+
tools: tools,
|
|
281
|
+
};
|
|
282
|
+
if (options.toolChoice) {
|
|
283
|
+
toolConfig.toolChoice = options.toolChoice;
|
|
284
|
+
}
|
|
285
|
+
request.toolConfig = toolConfig;
|
|
286
|
+
}
|
|
287
|
+
// Add inference configuration
|
|
288
|
+
const inferenceConfig = {};
|
|
289
|
+
if (this._config.maxTokens !== undefined)
|
|
290
|
+
inferenceConfig.maxTokens = this._config.maxTokens;
|
|
291
|
+
if (this._config.temperature !== undefined)
|
|
292
|
+
inferenceConfig.temperature = this._config.temperature;
|
|
293
|
+
if (this._config.topP !== undefined)
|
|
294
|
+
inferenceConfig.topP = this._config.topP;
|
|
295
|
+
if (this._config.stopSequences !== undefined)
|
|
296
|
+
inferenceConfig.stopSequences = this._config.stopSequences;
|
|
297
|
+
if (Object.keys(inferenceConfig).length > 0) {
|
|
298
|
+
request.inferenceConfig = inferenceConfig;
|
|
299
|
+
}
|
|
300
|
+
// Add additional request fields
|
|
301
|
+
if (this._config.additionalRequestFields) {
|
|
302
|
+
request.additionalModelRequestFields = this._config.additionalRequestFields;
|
|
303
|
+
}
|
|
304
|
+
// Add additional response field paths
|
|
305
|
+
if (this._config.additionalResponseFieldPaths) {
|
|
306
|
+
request.additionalModelResponseFieldPaths = this._config.additionalResponseFieldPaths;
|
|
307
|
+
}
|
|
308
|
+
// Add additional args (spread them into the request for forward compatibility)
|
|
309
|
+
if (this._config.additionalArgs) {
|
|
310
|
+
Object.assign(request, this._config.additionalArgs);
|
|
311
|
+
}
|
|
312
|
+
return request;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Formats messages for Bedrock API.
|
|
316
|
+
*
|
|
317
|
+
* @param messages - SDK messages
|
|
318
|
+
* @returns Bedrock-formatted messages
|
|
319
|
+
*/
|
|
320
|
+
_formatMessages(messages) {
|
|
321
|
+
return messages.map((message) => ({
|
|
322
|
+
role: message.role,
|
|
323
|
+
content: message.content.map((block) => this._formatContentBlock(block)),
|
|
324
|
+
}));
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Determines whether to include the status field in tool results.
|
|
328
|
+
*
|
|
329
|
+
* Uses the includeToolResultStatus config option:
|
|
330
|
+
* - If explicitly true, always include status
|
|
331
|
+
* - If explicitly false, never include status
|
|
332
|
+
* - If 'auto' (default), check if model ID matches known patterns
|
|
333
|
+
*
|
|
334
|
+
* @returns True if status field should be included, false otherwise
|
|
335
|
+
*/
|
|
336
|
+
_shouldIncludeToolResultStatus() {
|
|
337
|
+
const includeStatus = this._config.includeToolResultStatus ?? 'auto';
|
|
338
|
+
if (includeStatus === true)
|
|
339
|
+
return true;
|
|
340
|
+
if (includeStatus === false)
|
|
341
|
+
return false;
|
|
342
|
+
// Auto-detection mode: check if modelId contains any pattern
|
|
343
|
+
const shouldInclude = MODELS_INCLUDE_STATUS.some((pattern) => this._config.modelId?.includes(pattern));
|
|
344
|
+
// Log debug message for auto-detection
|
|
345
|
+
console.debug(`Auto-detected includeToolResultStatus=${shouldInclude} for model: ${this._config.modelId}`);
|
|
346
|
+
return shouldInclude;
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Formats a content block for Bedrock API.
|
|
350
|
+
*
|
|
351
|
+
* @param block - SDK content block
|
|
352
|
+
* @returns Bedrock-formatted content block
|
|
353
|
+
*/
|
|
354
|
+
_formatContentBlock(block) {
|
|
355
|
+
switch (block.type) {
|
|
356
|
+
case 'textBlock':
|
|
357
|
+
return { text: block.text };
|
|
358
|
+
case 'toolUseBlock':
|
|
359
|
+
return {
|
|
360
|
+
toolUse: {
|
|
361
|
+
toolUseId: block.toolUseId,
|
|
362
|
+
name: block.name,
|
|
363
|
+
input: block.input,
|
|
364
|
+
},
|
|
365
|
+
};
|
|
366
|
+
case 'toolResultBlock': {
|
|
367
|
+
const content = block.content.map((content) => {
|
|
368
|
+
switch (content.type) {
|
|
369
|
+
case 'toolResultTextContent':
|
|
370
|
+
return { text: content.text };
|
|
371
|
+
case 'toolResultJsonContent':
|
|
372
|
+
return { json: content.json };
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
return {
|
|
376
|
+
toolResult: {
|
|
377
|
+
toolUseId: block.toolUseId,
|
|
378
|
+
content,
|
|
379
|
+
...(this._shouldIncludeToolResultStatus() && { status: block.status }),
|
|
380
|
+
},
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
case 'reasoningBlock': {
|
|
384
|
+
if (block.text) {
|
|
385
|
+
return {
|
|
386
|
+
reasoningContent: {
|
|
387
|
+
reasoningText: {
|
|
388
|
+
text: block.text,
|
|
389
|
+
signature: block.signature,
|
|
390
|
+
},
|
|
391
|
+
},
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
else if (block.redactedContent) {
|
|
395
|
+
return {
|
|
396
|
+
reasoningContent: {
|
|
397
|
+
redactedContent: block.redactedContent,
|
|
398
|
+
},
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
throw Error("reasoning content format incorrect. Either 'text' or 'redactedContent' must be set.");
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
case 'cachePointBlock':
|
|
406
|
+
return { cachePoint: { type: block.cacheType } };
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
_mapBedrockEventToSDKEvent(event) {
|
|
410
|
+
const events = [];
|
|
411
|
+
// Message start
|
|
412
|
+
const output = ensureDefined(event.output, 'event.output');
|
|
413
|
+
const message = ensureDefined(output.message, 'output.message');
|
|
414
|
+
const role = ensureDefined(message.role, 'message.role');
|
|
415
|
+
events.push({
|
|
416
|
+
type: 'modelMessageStartEvent',
|
|
417
|
+
role,
|
|
418
|
+
});
|
|
419
|
+
// Match on content blocks
|
|
420
|
+
const blockHandlers = {
|
|
421
|
+
text: (textBlock, index) => {
|
|
422
|
+
events.push({ type: 'modelContentBlockStartEvent', contentBlockIndex: index });
|
|
423
|
+
events.push({
|
|
424
|
+
type: 'modelContentBlockDeltaEvent',
|
|
425
|
+
contentBlockIndex: index,
|
|
426
|
+
delta: { type: 'textDelta', text: textBlock },
|
|
427
|
+
});
|
|
428
|
+
events.push({ type: 'modelContentBlockStopEvent', contentBlockIndex: index });
|
|
429
|
+
},
|
|
430
|
+
toolUse: (block, index) => {
|
|
431
|
+
events.push({
|
|
432
|
+
type: 'modelContentBlockStartEvent',
|
|
433
|
+
contentBlockIndex: index,
|
|
434
|
+
start: {
|
|
435
|
+
type: 'toolUseStart',
|
|
436
|
+
name: ensureDefined(block.name, 'toolUse.name'),
|
|
437
|
+
toolUseId: ensureDefined(block.toolUseId, 'toolUse.toolUseId'),
|
|
438
|
+
},
|
|
439
|
+
});
|
|
440
|
+
events.push({
|
|
441
|
+
type: 'modelContentBlockDeltaEvent',
|
|
442
|
+
contentBlockIndex: index,
|
|
443
|
+
delta: { type: 'toolUseInputDelta', input: JSON.stringify(ensureDefined(block.input, 'toolUse.input')) },
|
|
444
|
+
});
|
|
445
|
+
events.push({ type: 'modelContentBlockStopEvent', contentBlockIndex: index });
|
|
446
|
+
},
|
|
447
|
+
reasoningContent: (block, index) => {
|
|
448
|
+
if (!block)
|
|
449
|
+
return;
|
|
450
|
+
events.push({ type: 'modelContentBlockStartEvent', contentBlockIndex: index });
|
|
451
|
+
const delta = { type: 'reasoningContentDelta' };
|
|
452
|
+
if (block.reasoningText) {
|
|
453
|
+
delta.text = ensureDefined(block.reasoningText.text, 'reasoningText.text');
|
|
454
|
+
if (block.reasoningText.signature)
|
|
455
|
+
delta.signature = block.reasoningText.signature;
|
|
456
|
+
}
|
|
457
|
+
else if (block.redactedContent) {
|
|
458
|
+
delta.redactedContent = block.redactedContent;
|
|
459
|
+
}
|
|
460
|
+
if (Object.keys(delta).length > 1) {
|
|
461
|
+
events.push({ type: 'modelContentBlockDeltaEvent', contentBlockIndex: index, delta });
|
|
462
|
+
}
|
|
463
|
+
events.push({ type: 'modelContentBlockStopEvent', contentBlockIndex: index });
|
|
464
|
+
},
|
|
465
|
+
};
|
|
466
|
+
const content = ensureDefined(message.content, 'message.content');
|
|
467
|
+
content.forEach((block, index) => {
|
|
468
|
+
for (const key in block) {
|
|
469
|
+
if (key in blockHandlers) {
|
|
470
|
+
const handlerKey = key;
|
|
471
|
+
// @ts-expect-error - We know the value type corresponds to the handler key.
|
|
472
|
+
blockHandlers[handlerKey](block[handlerKey], index);
|
|
473
|
+
}
|
|
474
|
+
else {
|
|
475
|
+
console.warn(`Skipping unsupported block key: ${key}`);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
});
|
|
479
|
+
const stopReasonRaw = ensureDefined(event.stopReason, 'event.stopReason');
|
|
480
|
+
events.push({
|
|
481
|
+
type: 'modelMessageStopEvent',
|
|
482
|
+
stopReason: this._transformStopReason(stopReasonRaw, event),
|
|
483
|
+
});
|
|
484
|
+
const usage = ensureDefined(event.usage, 'output.usage');
|
|
485
|
+
const metadataEvent = {
|
|
486
|
+
type: 'modelMetadataEvent',
|
|
487
|
+
usage: {
|
|
488
|
+
inputTokens: ensureDefined(usage.inputTokens, 'usage.inputTokens'),
|
|
489
|
+
outputTokens: ensureDefined(usage.outputTokens, 'usage.outputTokens'),
|
|
490
|
+
totalTokens: ensureDefined(usage.totalTokens, 'usage.totalTokens'),
|
|
491
|
+
},
|
|
492
|
+
};
|
|
493
|
+
if (event.metrics) {
|
|
494
|
+
metadataEvent.metrics = {
|
|
495
|
+
latencyMs: ensureDefined(event.metrics.latencyMs, 'metrics.latencyMs'),
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
events.push(metadataEvent);
|
|
499
|
+
return events;
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Maps a Bedrock event to SDK streaming events.
|
|
503
|
+
*
|
|
504
|
+
* @param chunk - Bedrock event chunk
|
|
505
|
+
* @returns Array of SDK streaming events
|
|
506
|
+
*/
|
|
507
|
+
_mapStreamedBedrockEventToSDKEvent(chunk) {
|
|
508
|
+
const events = [];
|
|
509
|
+
// Extract the event type key
|
|
510
|
+
const eventType = ensureDefined(Object.keys(chunk)[0], 'eventType');
|
|
511
|
+
const eventData = chunk[eventType];
|
|
512
|
+
switch (eventType) {
|
|
513
|
+
case 'messageStart': {
|
|
514
|
+
const data = eventData;
|
|
515
|
+
events.push({
|
|
516
|
+
type: 'modelMessageStartEvent',
|
|
517
|
+
role: ensureDefined(data.role, 'messageStart.role'),
|
|
518
|
+
});
|
|
519
|
+
break;
|
|
520
|
+
}
|
|
521
|
+
case 'contentBlockStart': {
|
|
522
|
+
const data = eventData;
|
|
523
|
+
const event = {
|
|
524
|
+
type: 'modelContentBlockStartEvent',
|
|
525
|
+
contentBlockIndex: ensureDefined(data.contentBlockIndex, 'contentBlockStart.contentBlockIndex'),
|
|
526
|
+
};
|
|
527
|
+
if (data.start?.toolUse) {
|
|
528
|
+
const toolUse = data.start.toolUse;
|
|
529
|
+
event.start = {
|
|
530
|
+
type: 'toolUseStart',
|
|
531
|
+
name: ensureDefined(toolUse.name, 'toolUse.name'),
|
|
532
|
+
toolUseId: ensureDefined(toolUse.toolUseId, 'toolUse.toolUseId'),
|
|
533
|
+
};
|
|
534
|
+
}
|
|
535
|
+
events.push(event);
|
|
536
|
+
break;
|
|
537
|
+
}
|
|
538
|
+
case 'contentBlockDelta': {
|
|
539
|
+
const data = eventData;
|
|
540
|
+
const contentBlockIndex = ensureDefined(data.contentBlockIndex, 'contentBlockDelta.contentBlockIndex');
|
|
541
|
+
const delta = ensureDefined(data.delta, 'contentBlockDelta.delta');
|
|
542
|
+
const deltaHandlers = {
|
|
543
|
+
text: (textValue) => {
|
|
544
|
+
events.push({
|
|
545
|
+
type: 'modelContentBlockDeltaEvent',
|
|
546
|
+
contentBlockIndex,
|
|
547
|
+
delta: { type: 'textDelta', text: textValue },
|
|
548
|
+
});
|
|
549
|
+
},
|
|
550
|
+
toolUse: (toolUse) => {
|
|
551
|
+
if (!toolUse?.input)
|
|
552
|
+
return;
|
|
553
|
+
events.push({
|
|
554
|
+
type: 'modelContentBlockDeltaEvent',
|
|
555
|
+
contentBlockIndex,
|
|
556
|
+
delta: { type: 'toolUseInputDelta', input: toolUse.input },
|
|
557
|
+
});
|
|
558
|
+
},
|
|
559
|
+
reasoningContent: (reasoning) => {
|
|
560
|
+
if (!reasoning)
|
|
561
|
+
return;
|
|
562
|
+
const reasoningDelta = { type: 'reasoningContentDelta' };
|
|
563
|
+
if (reasoning.text)
|
|
564
|
+
reasoningDelta.text = reasoning.text;
|
|
565
|
+
if (reasoning.signature)
|
|
566
|
+
reasoningDelta.signature = reasoning.signature;
|
|
567
|
+
if (reasoning.redactedContent)
|
|
568
|
+
reasoningDelta.redactedContent = reasoning.redactedContent;
|
|
569
|
+
if (Object.keys(reasoningDelta).length > 1) {
|
|
570
|
+
events.push({ type: 'modelContentBlockDeltaEvent', contentBlockIndex, delta: reasoningDelta });
|
|
571
|
+
}
|
|
572
|
+
},
|
|
573
|
+
};
|
|
574
|
+
for (const key in delta) {
|
|
575
|
+
if (key in deltaHandlers) {
|
|
576
|
+
const handlerKey = key;
|
|
577
|
+
// @ts-expect-error - We know the value type corresponds to the handler key.
|
|
578
|
+
deltaHandlers[handlerKey](delta[handlerKey]);
|
|
579
|
+
}
|
|
580
|
+
else {
|
|
581
|
+
console.warn(`Skipping unsupported delta key: ${key}`);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
break;
|
|
585
|
+
}
|
|
586
|
+
case 'contentBlockStop': {
|
|
587
|
+
const data = eventData;
|
|
588
|
+
events.push({
|
|
589
|
+
type: 'modelContentBlockStopEvent',
|
|
590
|
+
contentBlockIndex: ensureDefined(data.contentBlockIndex, 'contentBlockStop.contentBlockIndex'),
|
|
591
|
+
});
|
|
592
|
+
break;
|
|
593
|
+
}
|
|
594
|
+
case 'messageStop': {
|
|
595
|
+
const data = eventData;
|
|
596
|
+
const event = {
|
|
597
|
+
type: 'modelMessageStopEvent',
|
|
598
|
+
};
|
|
599
|
+
const stopReasonRaw = ensureDefined(data.stopReason, 'messageStop.stopReason');
|
|
600
|
+
event.stopReason = this._transformStopReason(stopReasonRaw, data);
|
|
601
|
+
if (data.additionalModelResponseFields) {
|
|
602
|
+
event.additionalModelResponseFields = data.additionalModelResponseFields;
|
|
603
|
+
}
|
|
604
|
+
events.push(event);
|
|
605
|
+
break;
|
|
606
|
+
}
|
|
607
|
+
case 'metadata': {
|
|
608
|
+
const data = eventData;
|
|
609
|
+
const event = {
|
|
610
|
+
type: 'modelMetadataEvent',
|
|
611
|
+
};
|
|
612
|
+
if (data.usage) {
|
|
613
|
+
const usage = data.usage;
|
|
614
|
+
const usageInfo = {
|
|
615
|
+
inputTokens: ensureDefined(usage.inputTokens, 'usage.inputTokens'),
|
|
616
|
+
outputTokens: ensureDefined(usage.outputTokens, 'usage.outputTokens'),
|
|
617
|
+
totalTokens: ensureDefined(usage.totalTokens, 'usage.totalTokens'),
|
|
618
|
+
};
|
|
619
|
+
if (usage.cacheReadInputTokens !== undefined) {
|
|
620
|
+
usageInfo.cacheReadInputTokens = usage.cacheReadInputTokens;
|
|
621
|
+
}
|
|
622
|
+
if (usage.cacheWriteInputTokens !== undefined) {
|
|
623
|
+
usageInfo.cacheWriteInputTokens = usage.cacheWriteInputTokens;
|
|
624
|
+
}
|
|
625
|
+
event.usage = usageInfo;
|
|
626
|
+
}
|
|
627
|
+
if (data.metrics) {
|
|
628
|
+
event.metrics = {
|
|
629
|
+
latencyMs: ensureDefined(data.metrics.latencyMs, 'metrics.latencyMs'),
|
|
630
|
+
};
|
|
631
|
+
}
|
|
632
|
+
if (data.trace) {
|
|
633
|
+
event.trace = data.trace;
|
|
634
|
+
}
|
|
635
|
+
events.push(event);
|
|
636
|
+
break;
|
|
637
|
+
}
|
|
638
|
+
case 'internalServerException':
|
|
639
|
+
case 'modelStreamErrorException':
|
|
640
|
+
case 'serviceUnavailableException':
|
|
641
|
+
case 'validationException':
|
|
642
|
+
case 'throttlingException': {
|
|
643
|
+
throw eventData;
|
|
644
|
+
}
|
|
645
|
+
default:
|
|
646
|
+
// Log warning for unsupported event types (for forward compatibility)
|
|
647
|
+
console.warn(`Unsupported Bedrock event type: ${eventType}`);
|
|
648
|
+
break;
|
|
649
|
+
}
|
|
650
|
+
return events;
|
|
651
|
+
}
|
|
652
|
+
/**
|
|
653
|
+
* Transforms a Bedrock stop reason into the SDK's format.
|
|
654
|
+
*
|
|
655
|
+
* @param stopReasonRaw - The raw stop reason string from Bedrock.
|
|
656
|
+
* @param event - The full event output, used to check for tool_use adjustments.
|
|
657
|
+
* @returns The transformed stop reason string.
|
|
658
|
+
*/
|
|
659
|
+
_transformStopReason(stopReasonRaw, event) {
|
|
660
|
+
let mappedStopReason;
|
|
661
|
+
if (stopReasonRaw in STOP_REASON_MAP) {
|
|
662
|
+
mappedStopReason = STOP_REASON_MAP[stopReasonRaw];
|
|
663
|
+
}
|
|
664
|
+
else {
|
|
665
|
+
console.warn(`Unknown stop reason: "${stopReasonRaw}". Converting to camelCase: "${snakeToCamel(stopReasonRaw)}"`);
|
|
666
|
+
mappedStopReason = snakeToCamel(stopReasonRaw);
|
|
667
|
+
}
|
|
668
|
+
// Adjust for tool_use, which is sometimes incorrectly reported as end_turn
|
|
669
|
+
if (mappedStopReason === 'endTurn' &&
|
|
670
|
+
event &&
|
|
671
|
+
'output' in event &&
|
|
672
|
+
event.output?.message?.content?.some((block) => 'toolUse' in block)) {
|
|
673
|
+
mappedStopReason = 'toolUse';
|
|
674
|
+
console.warn(`Adjusting stop reason from 'end_turn' to 'tool_use' due to tool use in content blocks.`);
|
|
675
|
+
}
|
|
676
|
+
return mappedStopReason;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
//# sourceMappingURL=bedrock.js.map
|