@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,625 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI model provider implementation.
|
|
3
|
+
*
|
|
4
|
+
* This module provides integration with OpenAI's Chat Completions API,
|
|
5
|
+
* supporting streaming responses, tool use, and configurable model parameters.
|
|
6
|
+
*
|
|
7
|
+
* @see https://platform.openai.com/docs/api-reference/chat/create
|
|
8
|
+
*/
|
|
9
|
+
import OpenAI, {} from 'openai';
|
|
10
|
+
import { Model } from '../models/model';
|
|
11
|
+
import { ContextWindowOverflowError } from '../errors';
|
|
12
|
+
/**
|
|
13
|
+
* Error message patterns that indicate context window overflow.
|
|
14
|
+
* Used to detect when input exceeds the model's context window.
|
|
15
|
+
*
|
|
16
|
+
* @see https://platform.openai.com/docs/guides/error-codes
|
|
17
|
+
*/
|
|
18
|
+
const OPENAI_CONTEXT_WINDOW_OVERFLOW_PATTERNS = [
|
|
19
|
+
'maximum context length',
|
|
20
|
+
'context_length_exceeded',
|
|
21
|
+
'too many tokens',
|
|
22
|
+
'context length',
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* OpenAI model provider implementation.
|
|
26
|
+
*
|
|
27
|
+
* Implements the Model interface for OpenAI using the Chat Completions API.
|
|
28
|
+
* Supports streaming responses, tool use, and comprehensive configuration.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const provider = new OpenAIModel({
|
|
33
|
+
* apiKey: 'sk-...',
|
|
34
|
+
* modelId: 'gpt-4o',
|
|
35
|
+
* temperature: 0.7,
|
|
36
|
+
* maxTokens: 1024
|
|
37
|
+
* })
|
|
38
|
+
*
|
|
39
|
+
* const messages: Message[] = [
|
|
40
|
+
* { role: 'user', content: [{ type: 'textBlock', text: 'Hello!' }] }
|
|
41
|
+
* ]
|
|
42
|
+
*
|
|
43
|
+
* for await (const event of provider.stream(messages)) {
|
|
44
|
+
* if (event.type === 'modelContentBlockDeltaEvent' && event.delta.type === 'textDelta') {
|
|
45
|
+
* process.stdout.write(event.delta.text)
|
|
46
|
+
* }
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export class OpenAIModel extends Model {
|
|
51
|
+
_config;
|
|
52
|
+
_client;
|
|
53
|
+
/**
|
|
54
|
+
* Creates a new OpenAIModel instance.
|
|
55
|
+
*
|
|
56
|
+
* @param options - Configuration for model and client (modelId is required)
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* // Minimal configuration with API key and model ID
|
|
61
|
+
* const provider = new OpenAIModel({
|
|
62
|
+
* modelId: 'gpt-4o',
|
|
63
|
+
* apiKey: 'sk-...'
|
|
64
|
+
* })
|
|
65
|
+
*
|
|
66
|
+
* // With additional model configuration
|
|
67
|
+
* const provider = new OpenAIModel({
|
|
68
|
+
* modelId: 'gpt-4o',
|
|
69
|
+
* apiKey: 'sk-...',
|
|
70
|
+
* temperature: 0.8,
|
|
71
|
+
* maxTokens: 2048
|
|
72
|
+
* })
|
|
73
|
+
*
|
|
74
|
+
* // Using environment variable for API key
|
|
75
|
+
* const provider = new OpenAIModel({
|
|
76
|
+
* modelId: 'gpt-3.5-turbo'
|
|
77
|
+
* })
|
|
78
|
+
*
|
|
79
|
+
* // Using a pre-configured client instance
|
|
80
|
+
* const client = new OpenAI({ apiKey: 'sk-...', timeout: 60000 })
|
|
81
|
+
* const provider = new OpenAIModel({
|
|
82
|
+
* modelId: 'gpt-4o',
|
|
83
|
+
* client
|
|
84
|
+
* })
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
constructor(options) {
|
|
88
|
+
super();
|
|
89
|
+
const { apiKey, client, clientConfig, ...modelConfig } = options;
|
|
90
|
+
// Initialize model config
|
|
91
|
+
this._config = modelConfig;
|
|
92
|
+
// Use provided client or create a new one
|
|
93
|
+
if (client) {
|
|
94
|
+
this._client = client;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// Check if API key is available when creating a new client
|
|
98
|
+
// In browsers, apiKey must be provided directly
|
|
99
|
+
// In Node.js, can use OPENAI_API_KEY environment variable as fallback
|
|
100
|
+
const hasEnvKey = typeof process !== 'undefined' && typeof process.env !== 'undefined' && process.env.OPENAI_API_KEY;
|
|
101
|
+
if (!apiKey && !hasEnvKey) {
|
|
102
|
+
throw new Error("OpenAI API key is required. Provide it via the 'apiKey' option or set the OPENAI_API_KEY environment variable.");
|
|
103
|
+
}
|
|
104
|
+
// Initialize OpenAI client
|
|
105
|
+
// Only include apiKey if explicitly provided, otherwise let client use env var
|
|
106
|
+
this._client = new OpenAI({
|
|
107
|
+
...(apiKey ? { apiKey } : {}),
|
|
108
|
+
...clientConfig,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Updates the model configuration.
|
|
114
|
+
* Merges the provided configuration with existing settings.
|
|
115
|
+
*
|
|
116
|
+
* @param modelConfig - Configuration object with model-specific settings to update
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* // Update temperature and maxTokens
|
|
121
|
+
* provider.updateConfig({
|
|
122
|
+
* temperature: 0.9,
|
|
123
|
+
* maxTokens: 2048
|
|
124
|
+
* })
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
updateConfig(modelConfig) {
|
|
128
|
+
this._config = { ...this._config, ...modelConfig };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Retrieves the current model configuration.
|
|
132
|
+
*
|
|
133
|
+
* @returns The current configuration object
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```typescript
|
|
137
|
+
* const config = provider.getConfig()
|
|
138
|
+
* console.log(config.modelId)
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
getConfig() {
|
|
142
|
+
return this._config;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Streams a conversation with the OpenAI model.
|
|
146
|
+
* Returns an async iterable that yields streaming events as they occur.
|
|
147
|
+
*
|
|
148
|
+
* @param messages - Array of conversation messages
|
|
149
|
+
* @param options - Optional streaming configuration
|
|
150
|
+
* @returns Async iterable of streaming events
|
|
151
|
+
*
|
|
152
|
+
* @throws \{ContextWindowOverflowError\} When input exceeds the model's context window
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```typescript
|
|
156
|
+
* const provider = new OpenAIModel({ modelId: 'gpt-4o', apiKey: 'sk-...' })
|
|
157
|
+
* const messages: Message[] = [
|
|
158
|
+
* { role: 'user', content: [{ type: 'textBlock', text: 'What is 2+2?' }] }
|
|
159
|
+
* ]
|
|
160
|
+
*
|
|
161
|
+
* for await (const event of provider.stream(messages)) {
|
|
162
|
+
* if (event.type === 'modelContentBlockDeltaEvent' && event.delta.type === 'textDelta') {
|
|
163
|
+
* process.stdout.write(event.delta.text)
|
|
164
|
+
* }
|
|
165
|
+
* }
|
|
166
|
+
* ```
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```typescript
|
|
170
|
+
* // With tool use
|
|
171
|
+
* const options: StreamOptions = {
|
|
172
|
+
* systemPrompt: 'You are a helpful assistant',
|
|
173
|
+
* toolSpecs: [calculatorTool]
|
|
174
|
+
* }
|
|
175
|
+
*
|
|
176
|
+
* for await (const event of provider.stream(messages, options)) {
|
|
177
|
+
* if (event.type === 'modelMessageStopEvent' && event.stopReason === 'toolUse') {
|
|
178
|
+
* console.log('Model wants to use a tool')
|
|
179
|
+
* }
|
|
180
|
+
* }
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
async *stream(messages, options) {
|
|
184
|
+
// Validate messages array is not empty
|
|
185
|
+
if (!messages || messages.length === 0) {
|
|
186
|
+
throw new Error('At least one message is required');
|
|
187
|
+
}
|
|
188
|
+
try {
|
|
189
|
+
// Format the request
|
|
190
|
+
const request = this._formatRequest(messages, options);
|
|
191
|
+
// Create streaming request with usage tracking
|
|
192
|
+
const stream = await this._client.chat.completions.create(request);
|
|
193
|
+
// Track streaming state (Use mutable object for proper state tracking)
|
|
194
|
+
const streamState = {
|
|
195
|
+
messageStarted: false,
|
|
196
|
+
textContentBlockStarted: false,
|
|
197
|
+
};
|
|
198
|
+
// Track active tool calls for stop events
|
|
199
|
+
const activeToolCalls = new Map();
|
|
200
|
+
// Buffer usage to emit before message stop
|
|
201
|
+
let bufferedUsage = null;
|
|
202
|
+
// Process streaming response
|
|
203
|
+
for await (const chunk of stream) {
|
|
204
|
+
if (!chunk.choices || chunk.choices.length === 0) {
|
|
205
|
+
// Handle usage chunk (no choices)
|
|
206
|
+
// Buffer usage to emit before message stop
|
|
207
|
+
if (chunk.usage) {
|
|
208
|
+
bufferedUsage = {
|
|
209
|
+
type: 'modelMetadataEvent',
|
|
210
|
+
usage: {
|
|
211
|
+
inputTokens: chunk.usage.prompt_tokens ?? 0,
|
|
212
|
+
outputTokens: chunk.usage.completion_tokens ?? 0,
|
|
213
|
+
totalTokens: chunk.usage.total_tokens ?? 0,
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
// Map chunk to SDK events
|
|
220
|
+
const events = this._mapOpenAIChunkToSDKEvents(chunk, streamState, activeToolCalls);
|
|
221
|
+
for (const event of events) {
|
|
222
|
+
// Emit buffered usage before message stop
|
|
223
|
+
if (event.type === 'modelMessageStopEvent' && bufferedUsage) {
|
|
224
|
+
yield bufferedUsage;
|
|
225
|
+
bufferedUsage = null;
|
|
226
|
+
}
|
|
227
|
+
yield event;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Emit any remaining buffered usage
|
|
231
|
+
if (bufferedUsage) {
|
|
232
|
+
yield bufferedUsage;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
const err = error;
|
|
237
|
+
// Check for context window overflow using simple pattern matching
|
|
238
|
+
if (OPENAI_CONTEXT_WINDOW_OVERFLOW_PATTERNS.some((pattern) => err.message?.toLowerCase().includes(pattern))) {
|
|
239
|
+
throw new ContextWindowOverflowError(err.message);
|
|
240
|
+
}
|
|
241
|
+
// Re-throw other errors unchanged
|
|
242
|
+
throw err;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Formats a request for the OpenAI Chat Completions API.
|
|
247
|
+
*
|
|
248
|
+
* @param messages - Conversation messages
|
|
249
|
+
* @param options - Stream options
|
|
250
|
+
* @returns Formatted OpenAI request
|
|
251
|
+
*/
|
|
252
|
+
_formatRequest(messages, options) {
|
|
253
|
+
// Start with required fields
|
|
254
|
+
const request = {
|
|
255
|
+
model: this._config.modelId,
|
|
256
|
+
messages: [],
|
|
257
|
+
stream: true,
|
|
258
|
+
stream_options: { include_usage: true },
|
|
259
|
+
};
|
|
260
|
+
// Handle system prompt (string or array format)
|
|
261
|
+
if (options?.systemPrompt !== undefined) {
|
|
262
|
+
if (typeof options.systemPrompt === 'string') {
|
|
263
|
+
// String path: validate and add as-is
|
|
264
|
+
if (options.systemPrompt.trim().length > 0) {
|
|
265
|
+
request.messages.push({
|
|
266
|
+
role: 'system',
|
|
267
|
+
content: options.systemPrompt,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
else if (Array.isArray(options.systemPrompt) && options.systemPrompt.length > 0) {
|
|
272
|
+
// Array path: extract text blocks and warn about cache points
|
|
273
|
+
const textBlocks = [];
|
|
274
|
+
let hasCachePoints = false;
|
|
275
|
+
for (const block of options.systemPrompt) {
|
|
276
|
+
if (block.type === 'textBlock') {
|
|
277
|
+
textBlocks.push(block.text);
|
|
278
|
+
}
|
|
279
|
+
else if (block.type === 'cachePointBlock') {
|
|
280
|
+
hasCachePoints = true;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
if (hasCachePoints) {
|
|
284
|
+
console.warn('Cache points are not supported in OpenAI system prompts and will be ignored.');
|
|
285
|
+
}
|
|
286
|
+
if (textBlocks.length > 0) {
|
|
287
|
+
request.messages.push({
|
|
288
|
+
role: 'system',
|
|
289
|
+
content: textBlocks.join(''),
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// Add formatted messages
|
|
295
|
+
const formattedMessages = this._formatMessages(messages);
|
|
296
|
+
request.messages.push(...formattedMessages);
|
|
297
|
+
// Add model configuration parameters
|
|
298
|
+
if (this._config.temperature !== undefined) {
|
|
299
|
+
request.temperature = this._config.temperature;
|
|
300
|
+
}
|
|
301
|
+
if (this._config.maxTokens !== undefined) {
|
|
302
|
+
request.max_tokens = this._config.maxTokens;
|
|
303
|
+
}
|
|
304
|
+
if (this._config.topP !== undefined) {
|
|
305
|
+
request.top_p = this._config.topP;
|
|
306
|
+
}
|
|
307
|
+
if (this._config.frequencyPenalty !== undefined) {
|
|
308
|
+
request.frequency_penalty = this._config.frequencyPenalty;
|
|
309
|
+
}
|
|
310
|
+
if (this._config.presencePenalty !== undefined) {
|
|
311
|
+
request.presence_penalty = this._config.presencePenalty;
|
|
312
|
+
}
|
|
313
|
+
// Add tool specifications with validation
|
|
314
|
+
if (options?.toolSpecs && options.toolSpecs.length > 0) {
|
|
315
|
+
request.tools = options.toolSpecs.map((spec) => {
|
|
316
|
+
if (!spec.name || !spec.description) {
|
|
317
|
+
throw new Error('Tool specification must have both name and description');
|
|
318
|
+
}
|
|
319
|
+
return {
|
|
320
|
+
type: 'function',
|
|
321
|
+
function: {
|
|
322
|
+
name: spec.name,
|
|
323
|
+
description: spec.description,
|
|
324
|
+
parameters: spec.inputSchema,
|
|
325
|
+
},
|
|
326
|
+
};
|
|
327
|
+
});
|
|
328
|
+
// Add tool choice if specified
|
|
329
|
+
if (options.toolChoice) {
|
|
330
|
+
if ('auto' in options.toolChoice) {
|
|
331
|
+
request.tool_choice = 'auto';
|
|
332
|
+
}
|
|
333
|
+
else if ('any' in options.toolChoice) {
|
|
334
|
+
request.tool_choice = 'required';
|
|
335
|
+
}
|
|
336
|
+
else if ('tool' in options.toolChoice) {
|
|
337
|
+
request.tool_choice = {
|
|
338
|
+
type: 'function',
|
|
339
|
+
function: { name: options.toolChoice.tool.name },
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
// Spread params object last for forward compatibility
|
|
345
|
+
if (this._config.params) {
|
|
346
|
+
Object.assign(request, this._config.params);
|
|
347
|
+
}
|
|
348
|
+
// Validate n parameter (number of completions) - only n=1 supported for streaming
|
|
349
|
+
if ('n' in request && request.n !== undefined && request.n !== null && request.n > 1) {
|
|
350
|
+
throw new Error('Streaming with n > 1 is not supported');
|
|
351
|
+
}
|
|
352
|
+
return request;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Formats messages for OpenAI API.
|
|
356
|
+
* Handles splitting tool results into separate messages.
|
|
357
|
+
*
|
|
358
|
+
* @param messages - SDK messages
|
|
359
|
+
* @returns OpenAI-formatted messages
|
|
360
|
+
*/
|
|
361
|
+
_formatMessages(messages) {
|
|
362
|
+
const openAIMessages = [];
|
|
363
|
+
for (const message of messages) {
|
|
364
|
+
if (message.role === 'user') {
|
|
365
|
+
// Separate tool results from other content
|
|
366
|
+
const toolResults = message.content.filter((b) => b.type === 'toolResultBlock');
|
|
367
|
+
const otherContent = message.content.filter((b) => b.type !== 'toolResultBlock');
|
|
368
|
+
// Add non-tool-result content as user message
|
|
369
|
+
if (otherContent.length > 0) {
|
|
370
|
+
const contentText = otherContent
|
|
371
|
+
.map((block) => {
|
|
372
|
+
if (block.type === 'textBlock') {
|
|
373
|
+
return block.text;
|
|
374
|
+
}
|
|
375
|
+
else if (block.type === 'reasoningBlock') {
|
|
376
|
+
throw new Error('Reasoning blocks are not supported by OpenAI. ' + 'This feature is specific to AWS Bedrock models.');
|
|
377
|
+
}
|
|
378
|
+
return '';
|
|
379
|
+
})
|
|
380
|
+
.join('');
|
|
381
|
+
// Validate content is not empty before adding
|
|
382
|
+
if (contentText.trim().length > 0) {
|
|
383
|
+
openAIMessages.push({
|
|
384
|
+
role: 'user',
|
|
385
|
+
content: contentText,
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
// Add each tool result as separate tool message
|
|
390
|
+
// OpenAI only supports text content in tool result messages, not JSON
|
|
391
|
+
for (const toolResult of toolResults) {
|
|
392
|
+
if (toolResult.type === 'toolResultBlock') {
|
|
393
|
+
// Format tool result content - convert all to text string
|
|
394
|
+
// Note: OpenAI tool messages only accept string content (not structured JSON)
|
|
395
|
+
const contentText = toolResult.content
|
|
396
|
+
.map((c) => {
|
|
397
|
+
if (c.type === 'toolResultTextContent') {
|
|
398
|
+
return c.text;
|
|
399
|
+
}
|
|
400
|
+
else if (c.type === 'toolResultJsonContent') {
|
|
401
|
+
try {
|
|
402
|
+
return JSON.stringify(c.json);
|
|
403
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
404
|
+
}
|
|
405
|
+
catch (error) {
|
|
406
|
+
const dataPreview = typeof c.json === 'object' && c.json !== null
|
|
407
|
+
? `object with keys: ${Object.keys(c.json).slice(0, 5).join(', ')}`
|
|
408
|
+
: typeof c.json;
|
|
409
|
+
return `[JSON Serialization Error: ${error.message}. Data type: ${dataPreview}]`;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
return '';
|
|
413
|
+
})
|
|
414
|
+
.join('');
|
|
415
|
+
// Validate content is not empty
|
|
416
|
+
if (!contentText || contentText.trim().length === 0) {
|
|
417
|
+
throw new Error(`Tool result for toolUseId "${toolResult.toolUseId}" has empty content. ` +
|
|
418
|
+
'OpenAI requires tool messages to have non-empty content.');
|
|
419
|
+
}
|
|
420
|
+
// Prepend error indicator if status is error
|
|
421
|
+
const finalContent = toolResult.status === 'error' ? `[ERROR] ${contentText}` : contentText;
|
|
422
|
+
openAIMessages.push({
|
|
423
|
+
role: 'tool',
|
|
424
|
+
tool_call_id: toolResult.toolUseId,
|
|
425
|
+
content: finalContent,
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
// Handle assistant messages
|
|
432
|
+
const toolUseCalls = [];
|
|
433
|
+
// Use array + join pattern for efficient string concatenation
|
|
434
|
+
const textParts = [];
|
|
435
|
+
for (const block of message.content) {
|
|
436
|
+
if (block.type === 'textBlock') {
|
|
437
|
+
textParts.push(block.text);
|
|
438
|
+
}
|
|
439
|
+
else if (block.type === 'toolUseBlock') {
|
|
440
|
+
try {
|
|
441
|
+
toolUseCalls.push({
|
|
442
|
+
id: block.toolUseId,
|
|
443
|
+
type: 'function',
|
|
444
|
+
function: {
|
|
445
|
+
name: block.name,
|
|
446
|
+
arguments: JSON.stringify(block.input),
|
|
447
|
+
},
|
|
448
|
+
});
|
|
449
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
450
|
+
}
|
|
451
|
+
catch (error) {
|
|
452
|
+
throw new Error(`Failed to serialize tool input for "${block.name}": ${error.message}`);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
else if (block.type === 'reasoningBlock') {
|
|
456
|
+
throw new Error('Reasoning blocks are not supported by OpenAI. ' + 'This feature is specific to AWS Bedrock models.');
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
// Trim text content to avoid whitespace-only messages
|
|
460
|
+
const textContent = textParts.join('').trim();
|
|
461
|
+
const assistantMessage = {
|
|
462
|
+
role: 'assistant',
|
|
463
|
+
content: textContent,
|
|
464
|
+
};
|
|
465
|
+
if (toolUseCalls.length > 0) {
|
|
466
|
+
assistantMessage.tool_calls = toolUseCalls;
|
|
467
|
+
}
|
|
468
|
+
// Only add if message has content or tool calls
|
|
469
|
+
if (textContent.length > 0 || toolUseCalls.length > 0) {
|
|
470
|
+
openAIMessages.push(assistantMessage);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
return openAIMessages;
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Converts a snake_case string to camelCase.
|
|
478
|
+
* Used for mapping OpenAI stop reasons to SDK format.
|
|
479
|
+
*
|
|
480
|
+
* @param str - Snake case string (e.g., 'content_filter')
|
|
481
|
+
* @returns Camel case string (e.g., 'contentFilter')
|
|
482
|
+
*
|
|
483
|
+
* @example
|
|
484
|
+
* ```typescript
|
|
485
|
+
* _snakeToCamel('context_length_exceeded') // => 'contextLengthExceeded'
|
|
486
|
+
* _snakeToCamel('tool_calls') // => 'toolCalls'
|
|
487
|
+
* ```
|
|
488
|
+
*/
|
|
489
|
+
_snakeToCamel(str) {
|
|
490
|
+
return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Maps an OpenAI chunk to SDK streaming events.
|
|
494
|
+
*
|
|
495
|
+
* @param chunk - OpenAI chunk
|
|
496
|
+
* @param streamState - Mutable state object tracking message and content block state
|
|
497
|
+
* @param activeToolCalls - Map tracking active tool calls by index
|
|
498
|
+
* @returns Array of SDK streaming events
|
|
499
|
+
*/
|
|
500
|
+
_mapOpenAIChunkToSDKEvents(chunk, streamState, activeToolCalls) {
|
|
501
|
+
const events = [];
|
|
502
|
+
// Use named constant for text content block index
|
|
503
|
+
const TEXT_CONTENT_BLOCK_INDEX = 0;
|
|
504
|
+
// Validate choices array has at least one element
|
|
505
|
+
if (!chunk.choices || chunk.choices.length === 0) {
|
|
506
|
+
return events;
|
|
507
|
+
}
|
|
508
|
+
const choice = chunk.choices[0];
|
|
509
|
+
// Validate choice is an object
|
|
510
|
+
if (!choice || typeof choice !== 'object') {
|
|
511
|
+
console.warn('Invalid choice format in OpenAI chunk:', choice);
|
|
512
|
+
return events;
|
|
513
|
+
}
|
|
514
|
+
// Process first choice (OpenAI typically returns one choice in streaming)
|
|
515
|
+
const typedChoice = choice;
|
|
516
|
+
if (!typedChoice.delta && !typedChoice.finish_reason) {
|
|
517
|
+
return events;
|
|
518
|
+
}
|
|
519
|
+
const delta = typedChoice.delta;
|
|
520
|
+
// Handle message start (role appears) - update mutable state
|
|
521
|
+
if (delta?.role && !streamState.messageStarted) {
|
|
522
|
+
streamState.messageStarted = true;
|
|
523
|
+
events.push({
|
|
524
|
+
type: 'modelMessageStartEvent',
|
|
525
|
+
role: delta.role,
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
// Handle text content delta with contentBlockIndex and start event
|
|
529
|
+
if (delta?.content && delta.content.length > 0) {
|
|
530
|
+
// Emit start event on first text delta
|
|
531
|
+
if (!streamState.textContentBlockStarted) {
|
|
532
|
+
streamState.textContentBlockStarted = true;
|
|
533
|
+
events.push({
|
|
534
|
+
type: 'modelContentBlockStartEvent',
|
|
535
|
+
contentBlockIndex: TEXT_CONTENT_BLOCK_INDEX,
|
|
536
|
+
});
|
|
537
|
+
}
|
|
538
|
+
// Include contentBlockIndex for text deltas
|
|
539
|
+
events.push({
|
|
540
|
+
type: 'modelContentBlockDeltaEvent',
|
|
541
|
+
contentBlockIndex: TEXT_CONTENT_BLOCK_INDEX,
|
|
542
|
+
delta: {
|
|
543
|
+
type: 'textDelta',
|
|
544
|
+
text: delta.content,
|
|
545
|
+
},
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
// Handle tool calls
|
|
549
|
+
if (delta?.tool_calls && delta.tool_calls.length > 0) {
|
|
550
|
+
for (const toolCall of delta.tool_calls) {
|
|
551
|
+
// Validate tool call index
|
|
552
|
+
if (toolCall.index === undefined || typeof toolCall.index !== 'number') {
|
|
553
|
+
console.warn('Received tool call with invalid index:', toolCall);
|
|
554
|
+
continue;
|
|
555
|
+
}
|
|
556
|
+
// If tool call has id and name, it's the start of a new tool call
|
|
557
|
+
if (toolCall.id && toolCall.function?.name) {
|
|
558
|
+
events.push({
|
|
559
|
+
type: 'modelContentBlockStartEvent',
|
|
560
|
+
contentBlockIndex: toolCall.index,
|
|
561
|
+
start: {
|
|
562
|
+
type: 'toolUseStart',
|
|
563
|
+
name: toolCall.function.name,
|
|
564
|
+
toolUseId: toolCall.id,
|
|
565
|
+
},
|
|
566
|
+
});
|
|
567
|
+
// Track active tool calls
|
|
568
|
+
activeToolCalls.set(toolCall.index, true);
|
|
569
|
+
}
|
|
570
|
+
// If tool call has arguments, it's a delta
|
|
571
|
+
if (toolCall.function?.arguments) {
|
|
572
|
+
events.push({
|
|
573
|
+
type: 'modelContentBlockDeltaEvent',
|
|
574
|
+
contentBlockIndex: toolCall.index,
|
|
575
|
+
delta: {
|
|
576
|
+
type: 'toolUseInputDelta',
|
|
577
|
+
input: toolCall.function.arguments,
|
|
578
|
+
},
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
// Handle finish reason (message stop)
|
|
584
|
+
if (typedChoice.finish_reason) {
|
|
585
|
+
// Emit stop event for text content if it was started
|
|
586
|
+
if (streamState.textContentBlockStarted) {
|
|
587
|
+
events.push({
|
|
588
|
+
type: 'modelContentBlockStopEvent',
|
|
589
|
+
contentBlockIndex: TEXT_CONTENT_BLOCK_INDEX,
|
|
590
|
+
});
|
|
591
|
+
streamState.textContentBlockStarted = false;
|
|
592
|
+
}
|
|
593
|
+
// Emit stop events for all active tool calls and delete during iteration
|
|
594
|
+
for (const [index] of activeToolCalls) {
|
|
595
|
+
events.push({
|
|
596
|
+
type: 'modelContentBlockStopEvent',
|
|
597
|
+
contentBlockIndex: index,
|
|
598
|
+
});
|
|
599
|
+
activeToolCalls.delete(index);
|
|
600
|
+
}
|
|
601
|
+
// Map OpenAI stop reason to SDK stop reason
|
|
602
|
+
const stopReasonMap = {
|
|
603
|
+
stop: 'endTurn',
|
|
604
|
+
tool_calls: 'toolUse',
|
|
605
|
+
length: 'maxTokens',
|
|
606
|
+
content_filter: 'contentFiltered',
|
|
607
|
+
};
|
|
608
|
+
// Log unknown stop reasons
|
|
609
|
+
let stopReason = stopReasonMap[typedChoice.finish_reason];
|
|
610
|
+
if (!stopReason) {
|
|
611
|
+
const fallbackReason = this._snakeToCamel(typedChoice.finish_reason);
|
|
612
|
+
console.warn(`Unknown OpenAI stop reason: "${typedChoice.finish_reason}". ` +
|
|
613
|
+
`Using camelCase conversion as fallback: "${fallbackReason}". ` +
|
|
614
|
+
'Please report this to update the stop reason mapping.');
|
|
615
|
+
stopReason = fallbackReason;
|
|
616
|
+
}
|
|
617
|
+
events.push({
|
|
618
|
+
type: 'modelMessageStopEvent',
|
|
619
|
+
stopReason,
|
|
620
|
+
});
|
|
621
|
+
}
|
|
622
|
+
return events;
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/models/openai.ts"],"names":[],"mappings":"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"}
|