@dexto/core 1.2.6 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -13
- package/dist/agent/DextoAgent.cjs +627 -228
- package/dist/agent/DextoAgent.d.ts +157 -34
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +625 -227
- package/dist/agent/agentCard.js +1 -1
- package/dist/agent/error-codes.cjs +1 -0
- package/dist/agent/error-codes.d.ts +2 -1
- package/dist/agent/error-codes.d.ts.map +1 -1
- package/dist/agent/error-codes.js +2 -1
- package/dist/agent/errors.cjs +13 -0
- package/dist/agent/errors.d.ts +4 -0
- package/dist/agent/errors.d.ts.map +1 -1
- package/dist/agent/errors.js +14 -1
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/schemas.cjs +4 -1
- package/dist/agent/schemas.d.ts +92 -55
- package/dist/agent/schemas.d.ts.map +1 -1
- package/dist/agent/schemas.js +7 -3
- package/dist/agent/state-manager.cjs +5 -5
- package/dist/agent/state-manager.d.ts +4 -4
- package/dist/agent/state-manager.js +6 -6
- package/dist/agent/types.d.ts +24 -11
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/approval/error-codes.js +1 -1
- package/dist/approval/errors.js +1 -1
- package/dist/approval/factory.js +1 -1
- package/dist/approval/index.js +1 -1
- package/dist/approval/manager.cjs +69 -3
- package/dist/approval/manager.d.ts +41 -3
- package/dist/approval/manager.d.ts.map +1 -1
- package/dist/approval/manager.js +70 -4
- package/dist/approval/schemas.cjs +20 -5
- package/dist/approval/schemas.d.ts +127 -52
- package/dist/approval/schemas.d.ts.map +1 -1
- package/dist/approval/schemas.js +21 -6
- package/dist/approval/types.d.ts +6 -0
- package/dist/approval/types.d.ts.map +1 -1
- package/dist/approval/types.js +1 -1
- package/dist/{chunk-C6A6W6XS.js → chunk-PTJYTZNU.js} +44 -1
- package/dist/{llm/tokenizer/factory.cjs → context/compression/overflow.cjs} +20 -21
- package/dist/context/compression/overflow.d.ts +33 -0
- package/dist/context/compression/overflow.d.ts.map +1 -0
- package/dist/context/compression/overflow.js +19 -0
- package/dist/context/compression/reactive-overflow.cjs +201 -0
- package/dist/context/compression/reactive-overflow.d.ts +81 -0
- package/dist/context/compression/reactive-overflow.d.ts.map +1 -0
- package/dist/context/compression/reactive-overflow.js +178 -0
- package/dist/context/compression/types.d.ts +9 -7
- package/dist/context/compression/types.d.ts.map +1 -1
- package/dist/context/error-codes.cjs +3 -0
- package/dist/context/error-codes.d.ts +4 -1
- package/dist/context/error-codes.d.ts.map +1 -1
- package/dist/context/error-codes.js +4 -1
- package/dist/context/errors.cjs +28 -0
- package/dist/context/errors.d.ts +7 -0
- package/dist/context/errors.d.ts.map +1 -1
- package/dist/context/errors.js +29 -1
- package/dist/context/index.js +1 -1
- package/dist/context/manager.cjs +287 -323
- package/dist/context/manager.d.ts +65 -111
- package/dist/context/manager.d.ts.map +1 -1
- package/dist/context/manager.js +287 -328
- package/dist/context/media-helpers.js +1 -1
- package/dist/context/types.cjs +49 -0
- package/dist/context/types.d.ts +185 -72
- package/dist/context/types.d.ts.map +1 -1
- package/dist/context/types.js +35 -0
- package/dist/context/utils.cjs +266 -283
- package/dist/context/utils.d.ts +32 -18
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/context/utils.js +266 -283
- package/dist/errors/DextoBaseError.js +1 -1
- package/dist/errors/DextoRuntimeError.js +1 -1
- package/dist/errors/DextoValidationError.js +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/errors/result-bridge.js +1 -1
- package/dist/errors/types.cjs +1 -0
- package/dist/errors/types.d.ts +4 -2
- package/dist/errors/types.d.ts.map +1 -1
- package/dist/errors/types.js +2 -1
- package/dist/events/index.cjs +22 -2
- package/dist/events/index.d.ts +170 -62
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +23 -3
- package/dist/filesystem/error-codes.js +1 -1
- package/dist/filesystem/errors.js +1 -1
- package/dist/filesystem/filesystem-service.js +1 -1
- package/dist/filesystem/index.js +1 -1
- package/dist/filesystem/path-validator.js +1 -1
- package/dist/index.browser.cjs +23 -8
- package/dist/index.browser.d.ts +4 -3
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +20 -3
- package/dist/index.js +1 -1
- package/dist/llm/error-codes.cjs +0 -1
- package/dist/llm/error-codes.d.ts +0 -1
- package/dist/llm/error-codes.d.ts.map +1 -1
- package/dist/llm/error-codes.js +1 -2
- package/dist/llm/errors.cjs +10 -10
- package/dist/llm/errors.d.ts +5 -6
- package/dist/llm/errors.d.ts.map +1 -1
- package/dist/llm/errors.js +12 -12
- package/dist/llm/executor/stream-processor.cjs +367 -0
- package/dist/llm/executor/stream-processor.d.ts +55 -0
- package/dist/llm/executor/stream-processor.d.ts.map +1 -0
- package/dist/llm/executor/stream-processor.js +344 -0
- package/dist/llm/executor/tool-output-truncator.cjs +75 -0
- package/dist/llm/executor/tool-output-truncator.d.ts +27 -0
- package/dist/llm/executor/tool-output-truncator.d.ts.map +1 -0
- package/dist/llm/executor/tool-output-truncator.js +48 -0
- package/dist/llm/executor/turn-executor.cjs +753 -0
- package/dist/llm/executor/turn-executor.d.ts +166 -0
- package/dist/llm/executor/turn-executor.d.ts.map +1 -0
- package/dist/llm/executor/turn-executor.js +684 -0
- package/dist/llm/executor/types.d.ts +27 -0
- package/dist/llm/executor/types.d.ts.map +1 -0
- package/dist/llm/formatters/vercel.cjs +20 -186
- package/dist/llm/formatters/vercel.d.ts +2 -14
- package/dist/llm/formatters/vercel.d.ts.map +1 -1
- package/dist/llm/formatters/vercel.js +19 -185
- package/dist/llm/registry.cjs +36 -45
- package/dist/llm/registry.d.ts +53 -39
- package/dist/llm/registry.d.ts.map +1 -1
- package/dist/llm/registry.js +34 -42
- package/dist/llm/resolver.cjs +1 -31
- package/dist/llm/resolver.d.ts.map +1 -1
- package/dist/llm/resolver.js +2 -34
- package/dist/llm/schemas.cjs +2 -17
- package/dist/llm/schemas.d.ts +10 -23
- package/dist/llm/schemas.d.ts.map +1 -1
- package/dist/llm/schemas.js +5 -22
- package/dist/llm/services/factory.cjs +3 -92
- package/dist/llm/services/factory.d.ts +14 -4
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +4 -83
- package/dist/llm/services/test-utils.integration.cjs +6 -8
- package/dist/llm/services/test-utils.integration.d.ts.map +1 -1
- package/dist/llm/services/test-utils.integration.js +7 -9
- package/dist/llm/services/types.d.ts +1 -28
- package/dist/llm/services/types.d.ts.map +1 -1
- package/dist/llm/services/vercel.cjs +54 -468
- package/dist/llm/services/vercel.d.ts +38 -21
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +56 -475
- package/dist/llm/types.cjs +0 -3
- package/dist/llm/types.d.ts +8 -8
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/llm/types.js +1 -3
- package/dist/llm/validation.js +1 -1
- package/dist/logger/browser.js +1 -1
- package/dist/logger/factory.js +1 -1
- package/dist/logger/index.js +1 -1
- package/dist/logger/logger.js +1 -1
- package/dist/logger/v2/dexto-logger.cjs +34 -6
- package/dist/logger/v2/dexto-logger.d.ts +20 -2
- package/dist/logger/v2/dexto-logger.d.ts.map +1 -1
- package/dist/logger/v2/dexto-logger.js +35 -7
- package/dist/logger/v2/error-codes.js +1 -1
- package/dist/logger/v2/errors.js +1 -1
- package/dist/logger/v2/schemas.cjs +1 -1
- package/dist/logger/v2/schemas.js +2 -2
- package/dist/logger/v2/test-utils.cjs +70 -0
- package/dist/logger/v2/test-utils.d.ts +17 -0
- package/dist/logger/v2/test-utils.d.ts.map +1 -0
- package/dist/logger/v2/test-utils.js +46 -0
- package/dist/logger/v2/transport-factory.js +1 -1
- package/dist/logger/v2/transports/console-transport.js +1 -1
- package/dist/logger/v2/transports/file-transport.cjs +6 -0
- package/dist/logger/v2/transports/file-transport.d.ts +4 -0
- package/dist/logger/v2/transports/file-transport.d.ts.map +1 -1
- package/dist/logger/v2/transports/file-transport.js +7 -1
- package/dist/logger/v2/types.cjs +1 -0
- package/dist/logger/v2/types.d.ts +18 -2
- package/dist/logger/v2/types.d.ts.map +1 -1
- package/dist/logger/v2/types.js +2 -1
- package/dist/mcp/error-codes.cjs +1 -0
- package/dist/mcp/error-codes.d.ts +1 -0
- package/dist/mcp/error-codes.d.ts.map +1 -1
- package/dist/mcp/error-codes.js +2 -1
- package/dist/mcp/errors.cjs +13 -0
- package/dist/mcp/errors.d.ts +7 -0
- package/dist/mcp/errors.d.ts.map +1 -1
- package/dist/mcp/errors.js +14 -1
- package/dist/mcp/manager.cjs +4 -0
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +5 -1
- package/dist/mcp/mcp-client.js +1 -1
- package/dist/mcp/resolver.js +1 -1
- package/dist/mcp/schemas.cjs +6 -0
- package/dist/mcp/schemas.d.ts +52 -0
- package/dist/mcp/schemas.d.ts.map +1 -1
- package/dist/mcp/schemas.js +6 -1
- package/dist/memory/error-codes.js +1 -1
- package/dist/memory/errors.js +1 -1
- package/dist/memory/index.js +1 -1
- package/dist/memory/manager.js +1 -1
- package/dist/memory/schemas.d.ts +2 -2
- package/dist/memory/schemas.js +1 -1
- package/dist/plugins/builtins/content-policy.js +1 -1
- package/dist/plugins/builtins/response-sanitizer.js +1 -1
- package/dist/plugins/error-codes.cjs +1 -0
- package/dist/plugins/error-codes.d.ts +3 -1
- package/dist/plugins/error-codes.d.ts.map +1 -1
- package/dist/plugins/error-codes.js +2 -1
- package/dist/plugins/index.js +1 -1
- package/dist/plugins/loader.cjs +25 -5
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +26 -6
- package/dist/plugins/manager.js +1 -1
- package/dist/plugins/registrations/builtins.js +1 -1
- package/dist/plugins/schemas.d.ts +3 -3
- package/dist/plugins/schemas.js +1 -1
- package/dist/plugins/types.d.ts +0 -1
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/process/command-validator.js +1 -1
- package/dist/process/error-codes.js +1 -1
- package/dist/process/errors.js +1 -1
- package/dist/process/index.js +1 -1
- package/dist/process/process-service.cjs +78 -26
- package/dist/process/process-service.d.ts +6 -1
- package/dist/process/process-service.d.ts.map +1 -1
- package/dist/process/process-service.js +79 -27
- package/dist/process/types.d.ts +2 -2
- package/dist/process/types.d.ts.map +1 -1
- package/dist/prompts/error-codes.cjs +1 -0
- package/dist/prompts/error-codes.d.ts +2 -1
- package/dist/prompts/error-codes.d.ts.map +1 -1
- package/dist/prompts/error-codes.js +2 -1
- package/dist/prompts/errors.cjs +15 -0
- package/dist/prompts/errors.d.ts +4 -0
- package/dist/prompts/errors.d.ts.map +1 -1
- package/dist/prompts/errors.js +16 -1
- package/dist/prompts/index.js +1 -1
- package/dist/prompts/name-validation.js +1 -1
- package/dist/prompts/prompt-manager.cjs +13 -2
- package/dist/prompts/prompt-manager.d.ts +7 -0
- package/dist/prompts/prompt-manager.d.ts.map +1 -1
- package/dist/prompts/prompt-manager.js +14 -3
- package/dist/prompts/providers/config-prompt-provider.cjs +12 -3
- package/dist/prompts/providers/config-prompt-provider.d.ts +2 -1
- package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/config-prompt-provider.js +13 -4
- package/dist/prompts/providers/custom-prompt-provider.cjs +2 -2
- package/dist/prompts/providers/custom-prompt-provider.d.ts +1 -1
- package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/custom-prompt-provider.js +3 -3
- package/dist/prompts/providers/mcp-prompt-provider.js +1 -1
- package/dist/prompts/schemas.d.ts +12 -0
- package/dist/prompts/schemas.d.ts.map +1 -1
- package/dist/prompts/schemas.js +1 -1
- package/dist/prompts/types.d.ts +2 -0
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/prompts/utils.js +1 -1
- package/dist/resources/error-codes.js +1 -1
- package/dist/resources/errors.js +1 -1
- package/dist/resources/handlers/blob-handler.js +1 -1
- package/dist/resources/handlers/factory.js +1 -1
- package/dist/resources/handlers/filesystem-handler.js +1 -1
- package/dist/resources/index.js +1 -1
- package/dist/resources/internal-provider.js +1 -1
- package/dist/resources/manager.js +1 -1
- package/dist/resources/reference-parser.js +1 -1
- package/dist/resources/schemas.js +1 -1
- package/dist/search/index.js +1 -1
- package/dist/search/search-service.js +1 -1
- package/dist/session/chat-session.cjs +149 -51
- package/dist/session/chat-session.d.ts +69 -29
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/chat-session.js +150 -52
- package/dist/session/error-codes.js +1 -1
- package/dist/session/errors.js +1 -1
- package/dist/session/history/database.cjs +134 -21
- package/dist/session/history/database.d.ts +37 -8
- package/dist/session/history/database.d.ts.map +1 -1
- package/dist/session/history/database.js +135 -22
- package/dist/session/history/factory.js +1 -1
- package/dist/session/history/memory.cjs +18 -0
- package/dist/session/history/memory.d.ts +8 -0
- package/dist/session/history/memory.d.ts.map +1 -1
- package/dist/session/history/memory.js +19 -1
- package/dist/session/history/types.d.ts +13 -1
- package/dist/session/history/types.d.ts.map +1 -1
- package/dist/session/index.cjs +3 -0
- package/dist/session/index.d.ts +3 -0
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +3 -1
- package/dist/session/message-queue.cjs +201 -0
- package/dist/session/message-queue.d.ts +114 -0
- package/dist/session/message-queue.d.ts.map +1 -0
- package/dist/session/message-queue.js +178 -0
- package/dist/session/schemas.js +1 -1
- package/dist/session/session-manager.cjs +57 -7
- package/dist/session/session-manager.d.ts +18 -0
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +58 -8
- package/dist/session/title-generator.cjs +4 -8
- package/dist/session/title-generator.d.ts +1 -2
- package/dist/session/title-generator.d.ts.map +1 -1
- package/dist/session/title-generator.js +5 -9
- package/dist/session/types.cjs +16 -0
- package/dist/session/types.d.ts +14 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +0 -0
- package/dist/storage/blob/factory.js +1 -1
- package/dist/storage/blob/local-blob-store.js +1 -1
- package/dist/storage/blob/memory-blob-store.js +1 -1
- package/dist/storage/blob/schemas.js +1 -1
- package/dist/storage/cache/factory.cjs +6 -2
- package/dist/storage/cache/factory.d.ts +2 -1
- package/dist/storage/cache/factory.d.ts.map +1 -1
- package/dist/storage/cache/factory.js +7 -3
- package/dist/storage/cache/memory-cache-store.js +1 -1
- package/dist/storage/cache/redis-store.js +1 -1
- package/dist/storage/cache/schemas.js +1 -1
- package/dist/storage/database/factory.cjs +11 -17
- package/dist/storage/database/factory.d.ts +2 -1
- package/dist/storage/database/factory.d.ts.map +1 -1
- package/dist/storage/database/factory.js +12 -18
- package/dist/storage/database/memory-database-store.js +1 -1
- package/dist/storage/database/postgres-store.cjs +12 -0
- package/dist/storage/database/postgres-store.d.ts.map +1 -1
- package/dist/storage/database/postgres-store.js +13 -1
- package/dist/storage/database/schemas.js +1 -1
- package/dist/storage/database/sqlite-store.cjs +8 -0
- package/dist/storage/database/sqlite-store.d.ts.map +1 -1
- package/dist/storage/database/sqlite-store.js +9 -1
- package/dist/storage/error-codes.cjs +1 -0
- package/dist/storage/error-codes.d.ts +1 -0
- package/dist/storage/error-codes.d.ts.map +1 -1
- package/dist/storage/error-codes.js +2 -1
- package/dist/storage/errors.cjs +17 -0
- package/dist/storage/errors.d.ts +9 -0
- package/dist/storage/errors.d.ts.map +1 -1
- package/dist/storage/errors.js +18 -1
- package/dist/storage/index.js +1 -1
- package/dist/storage/schemas.js +1 -1
- package/dist/storage/storage-manager.js +1 -1
- package/dist/systemPrompt/contributors.js +1 -1
- package/dist/systemPrompt/error-codes.js +1 -1
- package/dist/systemPrompt/errors.js +1 -1
- package/dist/systemPrompt/in-built-prompts.js +1 -1
- package/dist/systemPrompt/index.js +1 -1
- package/dist/systemPrompt/manager.js +1 -1
- package/dist/systemPrompt/registry.js +1 -1
- package/dist/systemPrompt/schemas.d.ts +5 -5
- package/dist/systemPrompt/schemas.js +1 -1
- package/dist/telemetry/decorators.js +1 -1
- package/dist/{llm/tokenizer/default.cjs → telemetry/error-codes.cjs} +14 -19
- package/dist/telemetry/error-codes.d.ts +13 -0
- package/dist/telemetry/error-codes.d.ts.map +1 -0
- package/dist/telemetry/error-codes.js +13 -0
- package/dist/telemetry/errors.cjs +105 -0
- package/dist/telemetry/errors.d.ts +28 -0
- package/dist/telemetry/errors.d.ts.map +1 -0
- package/dist/telemetry/errors.js +82 -0
- package/dist/telemetry/exporters.js +1 -1
- package/dist/telemetry/index.js +1 -1
- package/dist/telemetry/schemas.js +1 -1
- package/dist/telemetry/telemetry.cjs +92 -26
- package/dist/telemetry/telemetry.d.ts +1 -1
- package/dist/telemetry/telemetry.d.ts.map +1 -1
- package/dist/telemetry/telemetry.js +75 -19
- package/dist/telemetry/utils.js +1 -1
- package/dist/tools/bash-pattern-utils.cjs +91 -0
- package/dist/tools/bash-pattern-utils.d.ts +58 -0
- package/dist/tools/bash-pattern-utils.d.ts.map +1 -0
- package/dist/tools/bash-pattern-utils.js +64 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.js +1 -1
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.js +1 -1
- package/dist/tools/confirmation/allowed-tools-provider/storage.js +1 -1
- package/dist/tools/display-types.cjs +60 -0
- package/dist/tools/display-types.d.ts +133 -0
- package/dist/tools/display-types.d.ts.map +1 -0
- package/dist/tools/display-types.js +32 -0
- package/dist/tools/error-codes.cjs +2 -0
- package/dist/tools/error-codes.d.ts +3 -1
- package/dist/tools/error-codes.d.ts.map +1 -1
- package/dist/tools/error-codes.js +3 -1
- package/dist/tools/errors.cjs +30 -0
- package/dist/tools/errors.d.ts +16 -0
- package/dist/tools/errors.d.ts.map +1 -1
- package/dist/tools/errors.js +31 -1
- package/dist/tools/index.cjs +2 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -1
- package/dist/tools/internal-tools/constants.js +1 -1
- package/dist/tools/internal-tools/implementations/ask-user-tool.cjs +1 -1
- package/dist/tools/internal-tools/implementations/ask-user-tool.js +2 -2
- package/dist/tools/internal-tools/implementations/bash-exec-tool.cjs +42 -18
- package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts +3 -3
- package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts.map +1 -1
- package/dist/tools/internal-tools/implementations/bash-exec-tool.js +43 -19
- package/dist/tools/internal-tools/implementations/bash-output-tool.js +1 -1
- package/dist/tools/internal-tools/implementations/delegate-to-url-tool.js +1 -1
- package/dist/tools/internal-tools/implementations/edit-file-tool.cjs +66 -1
- package/dist/tools/internal-tools/implementations/edit-file-tool.d.ts.map +1 -1
- package/dist/tools/internal-tools/implementations/edit-file-tool.js +67 -2
- package/dist/tools/internal-tools/implementations/glob-files-tool.cjs +14 -1
- package/dist/tools/internal-tools/implementations/glob-files-tool.d.ts.map +1 -1
- package/dist/tools/internal-tools/implementations/glob-files-tool.js +15 -2
- package/dist/tools/internal-tools/implementations/grep-content-tool.cjs +16 -1
- package/dist/tools/internal-tools/implementations/grep-content-tool.d.ts.map +1 -1
- package/dist/tools/internal-tools/implementations/grep-content-tool.js +17 -2
- package/dist/tools/internal-tools/implementations/kill-process-tool.js +1 -1
- package/dist/tools/internal-tools/implementations/read-file-tool.cjs +9 -1
- package/dist/tools/internal-tools/implementations/read-file-tool.d.ts.map +1 -1
- package/dist/tools/internal-tools/implementations/read-file-tool.js +10 -2
- package/dist/tools/internal-tools/implementations/search-history-tool.js +1 -1
- package/dist/tools/internal-tools/implementations/write-file-tool.cjs +69 -1
- package/dist/tools/internal-tools/implementations/write-file-tool.d.ts.map +1 -1
- package/dist/tools/internal-tools/implementations/write-file-tool.js +72 -2
- package/dist/tools/internal-tools/provider.cjs +27 -10
- package/dist/tools/internal-tools/provider.d.ts +8 -5
- package/dist/tools/internal-tools/provider.d.ts.map +1 -1
- package/dist/tools/internal-tools/provider.js +28 -11
- package/dist/tools/internal-tools/registry.cjs +4 -3
- package/dist/tools/internal-tools/registry.d.ts +28 -7
- package/dist/tools/internal-tools/registry.d.ts.map +1 -1
- package/dist/tools/internal-tools/registry.js +5 -4
- package/dist/tools/schemas.cjs +17 -7
- package/dist/tools/schemas.d.ts +31 -4
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +15 -7
- package/dist/tools/tool-manager.cjs +140 -18
- package/dist/tools/tool-manager.d.ts +23 -1
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +145 -19
- package/dist/tools/types.d.ts +20 -11
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/api-key-resolver.js +1 -1
- package/dist/utils/async-context.js +1 -1
- package/dist/utils/debug.js +1 -1
- package/dist/{llm/tokenizer/types.cjs → utils/defer.cjs} +19 -10
- package/dist/utils/defer.d.ts +63 -0
- package/dist/utils/defer.d.ts.map +1 -0
- package/dist/utils/defer.js +19 -0
- package/dist/utils/env-file.js +1 -1
- package/dist/utils/error-conversion.js +1 -1
- package/dist/utils/execution-context.js +1 -1
- package/dist/utils/fs-walk.js +1 -1
- package/dist/utils/index.cjs +3 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/path.js +1 -1
- package/dist/utils/redactor.js +1 -1
- package/dist/utils/result.js +1 -1
- package/dist/utils/safe-stringify.js +1 -1
- package/dist/utils/schema-metadata.js +1 -1
- package/dist/utils/schema.d.ts +6 -0
- package/dist/utils/schema.d.ts.map +1 -1
- package/dist/utils/schema.js +1 -1
- package/dist/utils/service-initializer.cjs +6 -2
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +7 -3
- package/dist/utils/user-info.js +1 -1
- package/dist/utils/zod-schema-converter.js +1 -1
- package/package.json +54 -17
- package/dist/context/compression/middle-removal.cjs +0 -95
- package/dist/context/compression/middle-removal.d.ts +0 -47
- package/dist/context/compression/middle-removal.d.ts.map +0 -1
- package/dist/context/compression/middle-removal.js +0 -72
- package/dist/context/compression/oldest-removal.cjs +0 -83
- package/dist/context/compression/oldest-removal.d.ts +0 -42
- package/dist/context/compression/oldest-removal.d.ts.map +0 -1
- package/dist/context/compression/oldest-removal.js +0 -60
- package/dist/llm/formatters/anthropic.cjs +0 -257
- package/dist/llm/formatters/anthropic.d.ts +0 -46
- package/dist/llm/formatters/anthropic.d.ts.map +0 -1
- package/dist/llm/formatters/anthropic.js +0 -239
- package/dist/llm/formatters/factory.cjs +0 -50
- package/dist/llm/formatters/factory.d.ts +0 -10
- package/dist/llm/formatters/factory.d.ts.map +0 -1
- package/dist/llm/formatters/factory.js +0 -27
- package/dist/llm/formatters/openai.cjs +0 -196
- package/dist/llm/formatters/openai.d.ts +0 -39
- package/dist/llm/formatters/openai.d.ts.map +0 -1
- package/dist/llm/formatters/openai.js +0 -177
- package/dist/llm/formatters/types.d.ts +0 -41
- package/dist/llm/formatters/types.d.ts.map +0 -1
- package/dist/llm/services/anthropic.cjs +0 -511
- package/dist/llm/services/anthropic.d.ts +0 -48
- package/dist/llm/services/anthropic.d.ts.map +0 -1
- package/dist/llm/services/anthropic.js +0 -447
- package/dist/llm/services/openai.cjs +0 -611
- package/dist/llm/services/openai.d.ts +0 -48
- package/dist/llm/services/openai.d.ts.map +0 -1
- package/dist/llm/services/openai.js +0 -547
- package/dist/llm/tokenizer/anthropic.cjs +0 -43
- package/dist/llm/tokenizer/anthropic.d.ts +0 -19
- package/dist/llm/tokenizer/anthropic.d.ts.map +0 -1
- package/dist/llm/tokenizer/anthropic.js +0 -20
- package/dist/llm/tokenizer/default.d.ts +0 -14
- package/dist/llm/tokenizer/default.d.ts.map +0 -1
- package/dist/llm/tokenizer/default.js +0 -18
- package/dist/llm/tokenizer/factory.d.ts +0 -12
- package/dist/llm/tokenizer/factory.d.ts.map +0 -1
- package/dist/llm/tokenizer/factory.js +0 -21
- package/dist/llm/tokenizer/google.cjs +0 -52
- package/dist/llm/tokenizer/google.d.ts +0 -29
- package/dist/llm/tokenizer/google.d.ts.map +0 -1
- package/dist/llm/tokenizer/google.js +0 -29
- package/dist/llm/tokenizer/openai.cjs +0 -115
- package/dist/llm/tokenizer/openai.d.ts +0 -33
- package/dist/llm/tokenizer/openai.d.ts.map +0 -1
- package/dist/llm/tokenizer/openai.js +0 -91
- package/dist/llm/tokenizer/types.d.ts +0 -18
- package/dist/llm/tokenizer/types.d.ts.map +0 -1
- package/dist/llm/tokenizer/types.js +0 -10
- /package/dist/llm/{formatters → executor}/types.cjs +0 -0
- /package/dist/llm/{formatters → executor}/types.js +0 -0
|
@@ -1,547 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
__decorateElement,
|
|
3
|
-
__decoratorStart,
|
|
4
|
-
__runInitializers
|
|
5
|
-
} from "../../chunk-C6A6W6XS.js";
|
|
6
|
-
var _OpenAIService_decorators, _init;
|
|
7
|
-
import { DextoLogComponent } from "../../logger/v2/types.js";
|
|
8
|
-
import { ContextManager } from "../../context/manager.js";
|
|
9
|
-
import { getMaxInputTokensForModel, getEffectiveMaxInputTokens } from "../registry.js";
|
|
10
|
-
import { DextoRuntimeError } from "../../errors/DextoRuntimeError.js";
|
|
11
|
-
import { LLMErrorCode } from "../error-codes.js";
|
|
12
|
-
import { OpenAIMessageFormatter } from "../formatters/openai.js";
|
|
13
|
-
import { createTokenizer } from "../tokenizer/factory.js";
|
|
14
|
-
import { shouldIncludeRawToolResult } from "../../utils/debug.js";
|
|
15
|
-
import { InstrumentClass } from "../../telemetry/decorators.js";
|
|
16
|
-
import { trace, context, propagation } from "@opentelemetry/api";
|
|
17
|
-
_OpenAIService_decorators = [InstrumentClass({
|
|
18
|
-
prefix: "llm.openai",
|
|
19
|
-
excludeMethods: ["getAllTools", "formatToolsForOpenAI", "getConfig", "getContextManager"]
|
|
20
|
-
})];
|
|
21
|
-
class OpenAIService {
|
|
22
|
-
openai;
|
|
23
|
-
config;
|
|
24
|
-
toolManager;
|
|
25
|
-
contextManager;
|
|
26
|
-
sessionEventBus;
|
|
27
|
-
sessionId;
|
|
28
|
-
logger;
|
|
29
|
-
constructor(toolManager, openai, systemPromptManager, historyProvider, sessionEventBus, config, sessionId, resourceManager, logger) {
|
|
30
|
-
this.logger = logger.createChild(DextoLogComponent.LLM);
|
|
31
|
-
this.config = config;
|
|
32
|
-
this.openai = openai;
|
|
33
|
-
this.toolManager = toolManager;
|
|
34
|
-
this.sessionEventBus = sessionEventBus;
|
|
35
|
-
this.sessionId = sessionId;
|
|
36
|
-
const formatter = new OpenAIMessageFormatter(this.logger);
|
|
37
|
-
const tokenizer = createTokenizer(config.provider, config.model, this.logger);
|
|
38
|
-
const maxInputTokens = getEffectiveMaxInputTokens(config, this.logger);
|
|
39
|
-
this.contextManager = new ContextManager(
|
|
40
|
-
config,
|
|
41
|
-
formatter,
|
|
42
|
-
systemPromptManager,
|
|
43
|
-
maxInputTokens,
|
|
44
|
-
tokenizer,
|
|
45
|
-
historyProvider,
|
|
46
|
-
sessionId,
|
|
47
|
-
resourceManager,
|
|
48
|
-
this.logger
|
|
49
|
-
// compressionStrategies uses default
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
getAllTools() {
|
|
53
|
-
return this.toolManager.getAllTools();
|
|
54
|
-
}
|
|
55
|
-
async completeTask(textInput, options, imageData, fileData, stream) {
|
|
56
|
-
const activeSpan = trace.getActiveSpan();
|
|
57
|
-
const currentContext = context.active();
|
|
58
|
-
const provider = this.config.provider;
|
|
59
|
-
const model = this.config.model;
|
|
60
|
-
if (activeSpan) {
|
|
61
|
-
activeSpan.setAttribute("llm.provider", provider);
|
|
62
|
-
activeSpan.setAttribute("llm.model", model);
|
|
63
|
-
}
|
|
64
|
-
const existingBaggage = propagation.getBaggage(currentContext);
|
|
65
|
-
const baggageEntries = {};
|
|
66
|
-
if (existingBaggage) {
|
|
67
|
-
existingBaggage.getAllEntries().forEach(([key, entry]) => {
|
|
68
|
-
baggageEntries[key] = entry;
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
baggageEntries["llm.provider"] = { value: provider };
|
|
72
|
-
baggageEntries["llm.model"] = { value: model };
|
|
73
|
-
const updatedContext = propagation.setBaggage(
|
|
74
|
-
currentContext,
|
|
75
|
-
propagation.createBaggage(baggageEntries)
|
|
76
|
-
);
|
|
77
|
-
return await context.with(updatedContext, async () => {
|
|
78
|
-
await this.contextManager.addUserMessage(textInput, imageData, fileData);
|
|
79
|
-
const rawTools = await this.toolManager.getAllTools();
|
|
80
|
-
const formattedTools = this.formatToolsForOpenAI(rawTools);
|
|
81
|
-
this.logger.silly(`Formatted tools: ${JSON.stringify(formattedTools, null, 2)}`);
|
|
82
|
-
this.sessionEventBus.emit("llm:thinking");
|
|
83
|
-
let iterationCount = 0;
|
|
84
|
-
let totalTokens = 0;
|
|
85
|
-
let inputTokens = 0;
|
|
86
|
-
let outputTokens = 0;
|
|
87
|
-
let reasoningTokens = 0;
|
|
88
|
-
let fullResponse = "";
|
|
89
|
-
const contextStr = stream ? "OpenAI streaming API call" : "OpenAI API call";
|
|
90
|
-
try {
|
|
91
|
-
while (iterationCount < this.config.maxIterations) {
|
|
92
|
-
if (options?.signal?.aborted) {
|
|
93
|
-
throw Object.assign(new Error("Aborted"), {
|
|
94
|
-
name: "AbortError",
|
|
95
|
-
aborted: true
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
iterationCount++;
|
|
99
|
-
const { message, usage } = stream ? await this.getAIStreamingResponseWithRetries(
|
|
100
|
-
formattedTools,
|
|
101
|
-
options?.signal
|
|
102
|
-
) : await this.getAIResponseWithRetries(formattedTools, options?.signal);
|
|
103
|
-
if (usage) {
|
|
104
|
-
totalTokens += usage.total_tokens ?? 0;
|
|
105
|
-
inputTokens += usage.prompt_tokens ?? 0;
|
|
106
|
-
outputTokens += usage.completion_tokens ?? 0;
|
|
107
|
-
reasoningTokens += usage.completion_tokens_details?.reasoning_tokens ?? 0;
|
|
108
|
-
}
|
|
109
|
-
if (!message.tool_calls || message.tool_calls.length === 0) {
|
|
110
|
-
const responseText = message.content || "";
|
|
111
|
-
const finalContent = stream ? fullResponse + responseText : responseText;
|
|
112
|
-
await this.contextManager.addAssistantMessage(finalContent, void 0, {
|
|
113
|
-
tokenUsage: totalTokens > 0 ? {
|
|
114
|
-
totalTokens,
|
|
115
|
-
inputTokens,
|
|
116
|
-
outputTokens,
|
|
117
|
-
reasoningTokens
|
|
118
|
-
} : void 0
|
|
119
|
-
});
|
|
120
|
-
if (totalTokens > 0) {
|
|
121
|
-
this.contextManager.updateActualTokenCount(totalTokens);
|
|
122
|
-
}
|
|
123
|
-
this.sessionEventBus.emit("llm:response", {
|
|
124
|
-
content: finalContent,
|
|
125
|
-
provider: this.config.provider,
|
|
126
|
-
model: this.config.model,
|
|
127
|
-
router: "in-built",
|
|
128
|
-
tokenUsage: { totalTokens, inputTokens, outputTokens, reasoningTokens }
|
|
129
|
-
});
|
|
130
|
-
const activeSpan3 = trace.getActiveSpan();
|
|
131
|
-
if (activeSpan3 && totalTokens > 0) {
|
|
132
|
-
const attributes = {
|
|
133
|
-
"gen_ai.usage.total_tokens": totalTokens
|
|
134
|
-
};
|
|
135
|
-
if (inputTokens > 0) {
|
|
136
|
-
attributes["gen_ai.usage.input_tokens"] = inputTokens;
|
|
137
|
-
}
|
|
138
|
-
if (outputTokens > 0) {
|
|
139
|
-
attributes["gen_ai.usage.output_tokens"] = outputTokens;
|
|
140
|
-
}
|
|
141
|
-
if (reasoningTokens > 0) {
|
|
142
|
-
attributes["gen_ai.usage.reasoning_tokens"] = reasoningTokens;
|
|
143
|
-
}
|
|
144
|
-
activeSpan3.setAttributes(attributes);
|
|
145
|
-
}
|
|
146
|
-
return finalContent;
|
|
147
|
-
}
|
|
148
|
-
const functionToolCalls = message.tool_calls.filter(
|
|
149
|
-
(toolCall) => {
|
|
150
|
-
this.logger.debug(`Tool call type received: ${toolCall.type}`);
|
|
151
|
-
return toolCall.type === "function";
|
|
152
|
-
}
|
|
153
|
-
);
|
|
154
|
-
if (message.tool_calls.length > functionToolCalls.length) {
|
|
155
|
-
this.logger.warn(
|
|
156
|
-
`Filtered out ${message.tool_calls.length - functionToolCalls.length} non-function tool calls`
|
|
157
|
-
);
|
|
158
|
-
}
|
|
159
|
-
await this.contextManager.addAssistantMessage(
|
|
160
|
-
message.content,
|
|
161
|
-
functionToolCalls.length > 0 ? functionToolCalls : void 0,
|
|
162
|
-
{}
|
|
163
|
-
);
|
|
164
|
-
if (stream && message.content) {
|
|
165
|
-
fullResponse += message.content;
|
|
166
|
-
}
|
|
167
|
-
for (const toolCall of functionToolCalls) {
|
|
168
|
-
if (options?.signal?.aborted) {
|
|
169
|
-
throw Object.assign(new Error("Aborted"), {
|
|
170
|
-
name: "AbortError",
|
|
171
|
-
aborted: true
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
this.logger.debug(`Tool call initiated - Type: ${toolCall.type}`);
|
|
175
|
-
this.logger.debug(
|
|
176
|
-
`Tool call details: ${JSON.stringify(toolCall, null, 2)}`
|
|
177
|
-
);
|
|
178
|
-
const toolName = toolCall.function.name;
|
|
179
|
-
let args = {};
|
|
180
|
-
try {
|
|
181
|
-
args = JSON.parse(toolCall.function.arguments);
|
|
182
|
-
} catch (e) {
|
|
183
|
-
this.logger.error(`Error parsing arguments for ${toolName}:`, {
|
|
184
|
-
error: e instanceof Error ? e.message : String(e)
|
|
185
|
-
});
|
|
186
|
-
const sanitized = await this.contextManager.addToolResult(
|
|
187
|
-
toolCall.id,
|
|
188
|
-
toolName,
|
|
189
|
-
{ error: `Failed to parse arguments: ${e}` },
|
|
190
|
-
{ success: false }
|
|
191
|
-
);
|
|
192
|
-
this.sessionEventBus.emit("llm:tool-result", {
|
|
193
|
-
toolName,
|
|
194
|
-
callId: toolCall.id,
|
|
195
|
-
success: false,
|
|
196
|
-
sanitized,
|
|
197
|
-
...shouldIncludeRawToolResult() ? { rawResult: { error: `Failed to parse arguments: ${e}` } } : {}
|
|
198
|
-
});
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
201
|
-
this.sessionEventBus.emit("llm:tool-call", {
|
|
202
|
-
toolName,
|
|
203
|
-
args,
|
|
204
|
-
callId: toolCall.id
|
|
205
|
-
});
|
|
206
|
-
try {
|
|
207
|
-
const result = await this.toolManager.executeTool(
|
|
208
|
-
toolName,
|
|
209
|
-
args,
|
|
210
|
-
this.sessionId
|
|
211
|
-
);
|
|
212
|
-
const sanitized = await this.contextManager.addToolResult(
|
|
213
|
-
toolCall.id,
|
|
214
|
-
toolName,
|
|
215
|
-
result,
|
|
216
|
-
{ success: true }
|
|
217
|
-
);
|
|
218
|
-
this.sessionEventBus.emit("llm:tool-result", {
|
|
219
|
-
toolName,
|
|
220
|
-
callId: toolCall.id,
|
|
221
|
-
success: true,
|
|
222
|
-
sanitized,
|
|
223
|
-
...shouldIncludeRawToolResult() ? { rawResult: result } : {}
|
|
224
|
-
});
|
|
225
|
-
} catch (error) {
|
|
226
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
227
|
-
this.logger.error(
|
|
228
|
-
`Tool execution error for ${toolName}: ${errorMessage}`
|
|
229
|
-
);
|
|
230
|
-
const sanitized = await this.contextManager.addToolResult(
|
|
231
|
-
toolCall.id,
|
|
232
|
-
toolName,
|
|
233
|
-
{ error: errorMessage },
|
|
234
|
-
{ success: false }
|
|
235
|
-
);
|
|
236
|
-
this.sessionEventBus.emit("llm:tool-result", {
|
|
237
|
-
toolName,
|
|
238
|
-
callId: toolCall.id,
|
|
239
|
-
success: false,
|
|
240
|
-
sanitized,
|
|
241
|
-
...shouldIncludeRawToolResult() ? { rawResult: { error: errorMessage } } : {}
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
this.logger.warn(
|
|
247
|
-
`Reached maximum iterations (${this.config.maxIterations}) for task.`
|
|
248
|
-
);
|
|
249
|
-
const finalResponse = fullResponse || "Task completed but reached maximum tool call iterations.";
|
|
250
|
-
await this.contextManager.addAssistantMessage(finalResponse, void 0, {
|
|
251
|
-
tokenUsage: totalTokens > 0 ? {
|
|
252
|
-
totalTokens,
|
|
253
|
-
inputTokens,
|
|
254
|
-
outputTokens,
|
|
255
|
-
reasoningTokens
|
|
256
|
-
} : void 0
|
|
257
|
-
});
|
|
258
|
-
if (totalTokens > 0) {
|
|
259
|
-
this.contextManager.updateActualTokenCount(totalTokens);
|
|
260
|
-
}
|
|
261
|
-
this.sessionEventBus.emit("llm:response", {
|
|
262
|
-
content: finalResponse,
|
|
263
|
-
provider: this.config.provider,
|
|
264
|
-
model: this.config.model,
|
|
265
|
-
router: "in-built",
|
|
266
|
-
tokenUsage: { totalTokens, inputTokens, outputTokens, reasoningTokens }
|
|
267
|
-
});
|
|
268
|
-
const activeSpan2 = trace.getActiveSpan();
|
|
269
|
-
if (activeSpan2 && totalTokens > 0) {
|
|
270
|
-
const attributes = {
|
|
271
|
-
"gen_ai.usage.total_tokens": totalTokens
|
|
272
|
-
};
|
|
273
|
-
if (inputTokens > 0) {
|
|
274
|
-
attributes["gen_ai.usage.input_tokens"] = inputTokens;
|
|
275
|
-
}
|
|
276
|
-
if (outputTokens > 0) {
|
|
277
|
-
attributes["gen_ai.usage.output_tokens"] = outputTokens;
|
|
278
|
-
}
|
|
279
|
-
if (reasoningTokens > 0) {
|
|
280
|
-
attributes["gen_ai.usage.reasoning_tokens"] = reasoningTokens;
|
|
281
|
-
}
|
|
282
|
-
activeSpan2.setAttributes(attributes);
|
|
283
|
-
}
|
|
284
|
-
return finalResponse;
|
|
285
|
-
} catch (error) {
|
|
286
|
-
if (error instanceof Error && (error.name === "AbortError" || error.aborted === true)) {
|
|
287
|
-
throw error;
|
|
288
|
-
}
|
|
289
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
290
|
-
this.logger.error(`Error in ${contextStr}: ${errorMessage}`, { error });
|
|
291
|
-
if (!stream) {
|
|
292
|
-
this.logger.warn(
|
|
293
|
-
`If this error is due to token overflow, consider configuring 'maxInputTokens' in your LLMConfig.`
|
|
294
|
-
);
|
|
295
|
-
}
|
|
296
|
-
this.sessionEventBus.emit("llm:error", {
|
|
297
|
-
error: error instanceof Error ? error : new Error(errorMessage),
|
|
298
|
-
context: contextStr,
|
|
299
|
-
recoverable: false
|
|
300
|
-
});
|
|
301
|
-
const errorResponse = `Error processing ${stream ? "streaming " : ""}request: ${errorMessage}`;
|
|
302
|
-
await this.contextManager.addAssistantMessage(errorResponse, void 0, {});
|
|
303
|
-
return errorResponse;
|
|
304
|
-
}
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* Get configuration information about the LLM service
|
|
309
|
-
* @returns Configuration object with provider and model information
|
|
310
|
-
*/
|
|
311
|
-
getConfig() {
|
|
312
|
-
const configuredMaxInputTokens = this.contextManager.getMaxInputTokens();
|
|
313
|
-
let modelMaxInputTokens;
|
|
314
|
-
try {
|
|
315
|
-
modelMaxInputTokens = getMaxInputTokensForModel(
|
|
316
|
-
this.config.provider,
|
|
317
|
-
this.config.model,
|
|
318
|
-
this.logger
|
|
319
|
-
);
|
|
320
|
-
} catch (error) {
|
|
321
|
-
if (error instanceof DextoRuntimeError && error.code === LLMErrorCode.MODEL_UNKNOWN) {
|
|
322
|
-
modelMaxInputTokens = configuredMaxInputTokens;
|
|
323
|
-
this.logger.debug(
|
|
324
|
-
`Could not find model ${this.config.model} in LLM registry to get max tokens. Using configured max tokens: ${configuredMaxInputTokens}.`
|
|
325
|
-
);
|
|
326
|
-
} else {
|
|
327
|
-
throw error;
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
return {
|
|
331
|
-
router: "in-built",
|
|
332
|
-
provider: this.config.provider,
|
|
333
|
-
model: this.config.model,
|
|
334
|
-
configuredMaxInputTokens,
|
|
335
|
-
modelMaxInputTokens
|
|
336
|
-
};
|
|
337
|
-
}
|
|
338
|
-
// Helper methods
|
|
339
|
-
async getAIResponseWithRetries(tools, signal) {
|
|
340
|
-
let attempts = 0;
|
|
341
|
-
const MAX_ATTEMPTS = 3;
|
|
342
|
-
this.logger.debug(`Tools size in getAIResponseWithRetries: ${tools.length}`);
|
|
343
|
-
while (attempts < MAX_ATTEMPTS) {
|
|
344
|
-
attempts++;
|
|
345
|
-
try {
|
|
346
|
-
const {
|
|
347
|
-
formattedMessages,
|
|
348
|
-
systemPrompt: _systemPrompt,
|
|
349
|
-
tokensUsed
|
|
350
|
-
} = await this.contextManager.getFormattedMessagesWithCompression(
|
|
351
|
-
{ mcpManager: this.toolManager.getMcpManager() },
|
|
352
|
-
{ provider: this.config.provider, model: this.config.model }
|
|
353
|
-
);
|
|
354
|
-
this.logger.silly(
|
|
355
|
-
`Message history (potentially compressed) in getAIResponseWithRetries: ${JSON.stringify(formattedMessages, null, 2)}`
|
|
356
|
-
);
|
|
357
|
-
this.logger.debug(`Estimated tokens being sent to OpenAI: ${tokensUsed}`);
|
|
358
|
-
const response = await this.openai.chat.completions.create(
|
|
359
|
-
{
|
|
360
|
-
model: this.config.model,
|
|
361
|
-
messages: formattedMessages,
|
|
362
|
-
tools: attempts === 1 ? tools : [],
|
|
363
|
-
// Only offer tools on first attempt
|
|
364
|
-
tool_choice: attempts === 1 ? "auto" : "none"
|
|
365
|
-
// Disable tool choice on retry
|
|
366
|
-
},
|
|
367
|
-
signal ? { signal } : void 0
|
|
368
|
-
);
|
|
369
|
-
this.logger.silly(
|
|
370
|
-
`OPENAI CHAT COMPLETION RESPONSE: ${JSON.stringify(response, null, 2)}`
|
|
371
|
-
);
|
|
372
|
-
const message = response.choices[0]?.message;
|
|
373
|
-
if (!message) {
|
|
374
|
-
throw new Error("Received empty message from OpenAI API");
|
|
375
|
-
}
|
|
376
|
-
const usage = response.usage;
|
|
377
|
-
return { message, ...usage && { usage } };
|
|
378
|
-
} catch (error) {
|
|
379
|
-
if (error instanceof Error && (error.name === "AbortError" || error.aborted === true)) {
|
|
380
|
-
throw error;
|
|
381
|
-
}
|
|
382
|
-
const apiError = error;
|
|
383
|
-
this.logger.error(
|
|
384
|
-
`Error in OpenAI API call (Attempt ${attempts}/${MAX_ATTEMPTS}): ${apiError.message || JSON.stringify(apiError, null, 2)}`,
|
|
385
|
-
{ status: apiError.status, headers: apiError.headers }
|
|
386
|
-
);
|
|
387
|
-
if (apiError.status === 400 && apiError.code === "context_length_exceeded") {
|
|
388
|
-
this.logger.warn(
|
|
389
|
-
`Context length exceeded. ContextManager compression might not be sufficient. Error details: ${JSON.stringify(apiError.error)}`
|
|
390
|
-
);
|
|
391
|
-
}
|
|
392
|
-
if (attempts >= MAX_ATTEMPTS) {
|
|
393
|
-
this.logger.error(
|
|
394
|
-
`Failed to get response from OpenAI after ${MAX_ATTEMPTS} attempts.`
|
|
395
|
-
);
|
|
396
|
-
throw error;
|
|
397
|
-
}
|
|
398
|
-
await new Promise((resolve) => setTimeout(resolve, 500 * attempts));
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
throw new Error("Failed to get response after maximum retry attempts");
|
|
402
|
-
}
|
|
403
|
-
async getAIStreamingResponseWithRetries(tools, signal) {
|
|
404
|
-
let attempts = 0;
|
|
405
|
-
const MAX_ATTEMPTS = 3;
|
|
406
|
-
while (attempts < MAX_ATTEMPTS) {
|
|
407
|
-
attempts++;
|
|
408
|
-
try {
|
|
409
|
-
const {
|
|
410
|
-
formattedMessages,
|
|
411
|
-
systemPrompt: _systemPrompt,
|
|
412
|
-
tokensUsed
|
|
413
|
-
} = await this.contextManager.getFormattedMessagesWithCompression(
|
|
414
|
-
{ mcpManager: this.toolManager.getMcpManager() },
|
|
415
|
-
{ provider: this.config.provider, model: this.config.model }
|
|
416
|
-
);
|
|
417
|
-
this.logger.silly(
|
|
418
|
-
`Streaming message history (potentially compressed): ${JSON.stringify(formattedMessages, null, 2)}`
|
|
419
|
-
);
|
|
420
|
-
this.logger.debug(`Estimated tokens being sent to OpenAI streaming: ${tokensUsed}`);
|
|
421
|
-
const stream = await this.openai.chat.completions.create(
|
|
422
|
-
{
|
|
423
|
-
model: this.config.model,
|
|
424
|
-
messages: formattedMessages,
|
|
425
|
-
tools: attempts === 1 ? tools : [],
|
|
426
|
-
// Only offer tools on first attempt
|
|
427
|
-
tool_choice: attempts === 1 ? "auto" : "none",
|
|
428
|
-
// Disable tool choice on retry
|
|
429
|
-
stream: true,
|
|
430
|
-
stream_options: {
|
|
431
|
-
include_usage: true
|
|
432
|
-
}
|
|
433
|
-
},
|
|
434
|
-
signal ? { signal } : void 0
|
|
435
|
-
);
|
|
436
|
-
let content = "";
|
|
437
|
-
let toolCalls = [];
|
|
438
|
-
let usage;
|
|
439
|
-
for await (const chunk of stream) {
|
|
440
|
-
if (signal?.aborted) {
|
|
441
|
-
throw Object.assign(new Error("Aborted"), {
|
|
442
|
-
name: "AbortError",
|
|
443
|
-
aborted: true
|
|
444
|
-
});
|
|
445
|
-
}
|
|
446
|
-
const delta = chunk.choices[0]?.delta;
|
|
447
|
-
if (delta?.content) {
|
|
448
|
-
content += delta.content;
|
|
449
|
-
this.sessionEventBus.emit("llm:chunk", {
|
|
450
|
-
chunkType: "text",
|
|
451
|
-
content: delta.content,
|
|
452
|
-
isComplete: false
|
|
453
|
-
});
|
|
454
|
-
}
|
|
455
|
-
if (delta?.tool_calls) {
|
|
456
|
-
for (const toolCall of delta.tool_calls) {
|
|
457
|
-
const index = toolCall.index;
|
|
458
|
-
if (typeof index !== "number") {
|
|
459
|
-
continue;
|
|
460
|
-
}
|
|
461
|
-
if (!toolCalls[index]) {
|
|
462
|
-
toolCalls[index] = {
|
|
463
|
-
id: `pending-${index}`,
|
|
464
|
-
type: "function",
|
|
465
|
-
function: { name: "", arguments: "" }
|
|
466
|
-
};
|
|
467
|
-
}
|
|
468
|
-
if (toolCall.id) {
|
|
469
|
-
toolCalls[index].id = toolCall.id;
|
|
470
|
-
}
|
|
471
|
-
const existingToolCall = toolCalls[index];
|
|
472
|
-
if (existingToolCall.type === "function" && toolCall.function) {
|
|
473
|
-
if (toolCall.function.name) {
|
|
474
|
-
existingToolCall.function.name = toolCall.function.name;
|
|
475
|
-
}
|
|
476
|
-
if (toolCall.function.arguments) {
|
|
477
|
-
existingToolCall.function.arguments += toolCall.function.arguments;
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
if (chunk.usage) {
|
|
483
|
-
usage = chunk.usage;
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
if (content) {
|
|
487
|
-
this.sessionEventBus.emit("llm:chunk", {
|
|
488
|
-
chunkType: "text",
|
|
489
|
-
content: "",
|
|
490
|
-
isComplete: true
|
|
491
|
-
});
|
|
492
|
-
}
|
|
493
|
-
const message = {
|
|
494
|
-
role: "assistant",
|
|
495
|
-
content: content || null,
|
|
496
|
-
refusal: null,
|
|
497
|
-
...toolCalls.length > 0 && { tool_calls: toolCalls }
|
|
498
|
-
};
|
|
499
|
-
this.logger.debug(`OpenAI streaming completed. Usage info: ${usage}`);
|
|
500
|
-
return { message, ...usage && { usage } };
|
|
501
|
-
} catch (error) {
|
|
502
|
-
const apiError = error;
|
|
503
|
-
this.logger.error(
|
|
504
|
-
`Error in OpenAI streaming API call (Attempt ${attempts}/${MAX_ATTEMPTS}): ${apiError.message || JSON.stringify(apiError, null, 2)}`,
|
|
505
|
-
{ status: apiError.status, headers: apiError.headers }
|
|
506
|
-
);
|
|
507
|
-
if (apiError.status === 400 && apiError.message?.includes("maximum context length")) {
|
|
508
|
-
this.logger.warn(
|
|
509
|
-
`Context length exceeded in streaming. ContextManager compression might not be sufficient. Error details: ${JSON.stringify(apiError.error)}`
|
|
510
|
-
);
|
|
511
|
-
}
|
|
512
|
-
if (attempts >= MAX_ATTEMPTS) {
|
|
513
|
-
this.logger.error(
|
|
514
|
-
`Failed to get streaming response from OpenAI after ${MAX_ATTEMPTS} attempts.`
|
|
515
|
-
);
|
|
516
|
-
throw error;
|
|
517
|
-
}
|
|
518
|
-
await new Promise((resolve) => setTimeout(resolve, 500 * attempts));
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
throw new Error("Failed to get streaming response after maximum retry attempts");
|
|
522
|
-
}
|
|
523
|
-
formatToolsForOpenAI(tools) {
|
|
524
|
-
return Object.entries(tools).map(([name, tool]) => {
|
|
525
|
-
return {
|
|
526
|
-
type: "function",
|
|
527
|
-
function: {
|
|
528
|
-
name,
|
|
529
|
-
description: tool.description || "",
|
|
530
|
-
parameters: tool.parameters
|
|
531
|
-
}
|
|
532
|
-
};
|
|
533
|
-
});
|
|
534
|
-
}
|
|
535
|
-
/**
|
|
536
|
-
* Get the context manager for external access
|
|
537
|
-
*/
|
|
538
|
-
getContextManager() {
|
|
539
|
-
return this.contextManager;
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
_init = __decoratorStart(null);
|
|
543
|
-
OpenAIService = __decorateElement(_init, 0, "OpenAIService", _OpenAIService_decorators, OpenAIService);
|
|
544
|
-
__runInitializers(_init, 1, OpenAIService);
|
|
545
|
-
export {
|
|
546
|
-
OpenAIService
|
|
547
|
-
};
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var anthropic_exports = {};
|
|
20
|
-
__export(anthropic_exports, {
|
|
21
|
-
AnthropicTokenizer: () => AnthropicTokenizer
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(anthropic_exports);
|
|
24
|
-
class AnthropicTokenizer {
|
|
25
|
-
/**
|
|
26
|
-
* TODO: Replace with a better implementation for anthropic
|
|
27
|
-
* Approximates token count for Anthropic models.
|
|
28
|
-
* Assumes roughly 4 characters per token.
|
|
29
|
-
* @param text Text content to count tokens for
|
|
30
|
-
* @returns Approximate number of tokens
|
|
31
|
-
*/
|
|
32
|
-
countTokens(text) {
|
|
33
|
-
if (!text) return 0;
|
|
34
|
-
return Math.ceil(text.length / 4);
|
|
35
|
-
}
|
|
36
|
-
getProviderName() {
|
|
37
|
-
return "anthropic";
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
41
|
-
0 && (module.exports = {
|
|
42
|
-
AnthropicTokenizer
|
|
43
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { ITokenizer } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Placeholder tokenizer for Anthropic models.
|
|
4
|
-
* Uses a rough approximation based on character count.
|
|
5
|
-
* TODO: IMPORTANT: This is not accurate and should be replaced
|
|
6
|
-
* with a better implementation or official library when available.
|
|
7
|
-
*/
|
|
8
|
-
export declare class AnthropicTokenizer implements ITokenizer {
|
|
9
|
-
/**
|
|
10
|
-
* TODO: Replace with a better implementation for anthropic
|
|
11
|
-
* Approximates token count for Anthropic models.
|
|
12
|
-
* Assumes roughly 4 characters per token.
|
|
13
|
-
* @param text Text content to count tokens for
|
|
14
|
-
* @returns Approximate number of tokens
|
|
15
|
-
*/
|
|
16
|
-
countTokens(text: string): number;
|
|
17
|
-
getProviderName(): string;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/llm/tokenizer/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACjD;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAMjC,eAAe,IAAI,MAAM;CAG5B"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import "../../chunk-C6A6W6XS.js";
|
|
2
|
-
class AnthropicTokenizer {
|
|
3
|
-
/**
|
|
4
|
-
* TODO: Replace with a better implementation for anthropic
|
|
5
|
-
* Approximates token count for Anthropic models.
|
|
6
|
-
* Assumes roughly 4 characters per token.
|
|
7
|
-
* @param text Text content to count tokens for
|
|
8
|
-
* @returns Approximate number of tokens
|
|
9
|
-
*/
|
|
10
|
-
countTokens(text) {
|
|
11
|
-
if (!text) return 0;
|
|
12
|
-
return Math.ceil(text.length / 4);
|
|
13
|
-
}
|
|
14
|
-
getProviderName() {
|
|
15
|
-
return "anthropic";
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
export {
|
|
19
|
-
AnthropicTokenizer
|
|
20
|
-
};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { ITokenizer } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Placeholder tokenizer for unknown models
|
|
4
|
-
*/
|
|
5
|
-
export declare class DefaultTokenizer implements ITokenizer {
|
|
6
|
-
/**
|
|
7
|
-
* Assumes roughly 4 characters per token.
|
|
8
|
-
* @param text Text content to count tokens for
|
|
9
|
-
* @returns Approximate number of tokens
|
|
10
|
-
*/
|
|
11
|
-
countTokens(text: string): number;
|
|
12
|
-
getProviderName(): string;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=default.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../src/llm/tokenizer/default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;GAEG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IAC/C;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKjC,eAAe,IAAI,MAAM;CAG5B"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import "../../chunk-C6A6W6XS.js";
|
|
2
|
-
class DefaultTokenizer {
|
|
3
|
-
/**
|
|
4
|
-
* Assumes roughly 4 characters per token.
|
|
5
|
-
* @param text Text content to count tokens for
|
|
6
|
-
* @returns Approximate number of tokens
|
|
7
|
-
*/
|
|
8
|
-
countTokens(text) {
|
|
9
|
-
if (!text) return 0;
|
|
10
|
-
return Math.ceil(text.length / 4);
|
|
11
|
-
}
|
|
12
|
-
getProviderName() {
|
|
13
|
-
return "default";
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
export {
|
|
17
|
-
DefaultTokenizer
|
|
18
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { ITokenizer } from './types.js';
|
|
2
|
-
import type { LLMProvider } from '../types.js';
|
|
3
|
-
import type { IDextoLogger } from '../../logger/v2/types.js';
|
|
4
|
-
/**
|
|
5
|
-
* Creates the appropriate tokenizer for the specified provider and model
|
|
6
|
-
* @param provider The LLM provider name (case-insensitive)
|
|
7
|
-
* @param model The specific model name (used by some tokenizers)
|
|
8
|
-
* @param logger The logger instance for logging
|
|
9
|
-
* @returns An appropriate tokenizer implementation, or DefaultTokenizer if no specific implementation exists
|
|
10
|
-
*/
|
|
11
|
-
export declare function createTokenizer(provider: LLMProvider, model: string, logger: IDextoLogger): ITokenizer;
|
|
12
|
-
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/llm/tokenizer/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAKxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,GACrB,UAAU,CAcZ"}
|