@dexto/core 1.1.4 → 1.1.6
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 +125 -0
- package/dist/agent/DextoAgent.cjs +793 -0
- package/dist/agent/DextoAgent.d.cts +473 -0
- package/dist/agent/DextoAgent.d.ts +473 -0
- package/dist/agent/DextoAgent.js +774 -0
- package/dist/agent/agentCard.cjs +44 -0
- package/dist/agent/agentCard.d.cts +20 -0
- package/dist/agent/agentCard.d.ts +20 -0
- package/dist/agent/agentCard.js +20 -0
- package/dist/agent/error-codes.cjs +35 -0
- package/dist/agent/error-codes.d.cts +14 -0
- package/dist/agent/error-codes.d.ts +14 -0
- package/dist/agent/error-codes.js +11 -0
- package/dist/agent/errors.cjs +84 -0
- package/dist/agent/errors.d.cts +40 -0
- package/dist/agent/errors.d.ts +40 -0
- package/dist/agent/errors.js +60 -0
- package/dist/agent/index.cjs +44 -0
- package/dist/agent/index.d.cts +60 -0
- package/dist/agent/index.d.ts +60 -0
- package/dist/agent/index.js +13 -0
- package/dist/agent/registry/error-codes.cjs +42 -0
- package/dist/agent/registry/error-codes.d.cts +20 -0
- package/dist/agent/registry/error-codes.d.ts +20 -0
- package/dist/agent/registry/error-codes.js +18 -0
- package/dist/agent/registry/errors.cjs +158 -0
- package/dist/agent/registry/errors.d.cts +67 -0
- package/dist/agent/registry/errors.d.ts +67 -0
- package/dist/{chunk-PI6XFMEW.js → agent/registry/errors.js} +43 -50
- package/dist/agent/registry/registry.cjs +291 -0
- package/dist/agent/registry/registry.d.cts +67 -0
- package/dist/agent/registry/registry.d.ts +67 -0
- package/dist/agent/registry/registry.js +256 -0
- package/dist/agent/registry/types.cjs +41 -0
- package/dist/agent/registry/types.d.cts +100 -0
- package/dist/agent/registry/types.d.ts +100 -0
- package/dist/agent/registry/types.js +16 -0
- package/dist/agent/schemas.cjs +113 -0
- package/dist/agent/schemas.d.cts +1502 -0
- package/dist/agent/schemas.d.ts +1502 -0
- package/dist/agent/schemas.js +88 -0
- package/dist/agent/state-manager.cjs +214 -0
- package/dist/agent/state-manager.d.cts +97 -0
- package/dist/agent/state-manager.d.ts +97 -0
- package/dist/agent/state-manager.js +190 -0
- package/dist/config/agent-resolver.cjs +153 -0
- package/dist/config/agent-resolver.d.cts +15 -0
- package/dist/config/agent-resolver.d.ts +15 -0
- package/dist/config/agent-resolver.js +122 -0
- package/dist/config/error-codes.cjs +39 -0
- package/dist/config/error-codes.d.cts +17 -0
- package/dist/config/error-codes.d.ts +17 -0
- package/dist/config/error-codes.js +15 -0
- package/dist/config/errors.cjs +126 -0
- package/dist/config/errors.d.cts +49 -0
- package/dist/config/errors.d.ts +49 -0
- package/dist/config/errors.js +102 -0
- package/dist/config/index.cjs +26 -0
- package/dist/config/index.d.cts +7 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.js +3 -0
- package/dist/config/loader.cjs +119 -0
- package/dist/config/loader.d.cts +19 -0
- package/dist/config/loader.d.ts +19 -0
- package/dist/config/loader.js +85 -0
- package/dist/config/writer.cjs +182 -0
- package/dist/config/writer.d.cts +38 -0
- package/dist/config/writer.d.ts +38 -0
- package/dist/config/writer.js +146 -0
- package/dist/context/compression/middle-removal.cjs +95 -0
- package/dist/context/compression/middle-removal.d.cts +48 -0
- package/dist/context/compression/middle-removal.d.ts +48 -0
- package/dist/context/compression/middle-removal.js +71 -0
- package/dist/context/compression/oldest-removal.cjs +70 -0
- package/dist/context/compression/oldest-removal.d.cts +43 -0
- package/dist/context/compression/oldest-removal.d.ts +43 -0
- package/dist/context/compression/oldest-removal.js +46 -0
- package/dist/context/compression/types.cjs +16 -0
- package/dist/context/compression/types.d.cts +21 -0
- package/dist/context/compression/types.d.ts +21 -0
- package/dist/context/compression/types.js +0 -0
- package/dist/context/error-codes.cjs +41 -0
- package/dist/context/error-codes.d.cts +19 -0
- package/dist/context/error-codes.d.ts +19 -0
- package/dist/context/error-codes.js +17 -0
- package/dist/context/errors.cjs +146 -0
- package/dist/context/errors.d.cts +36 -0
- package/dist/context/errors.d.ts +36 -0
- package/dist/context/errors.js +122 -0
- package/dist/context/index.cjs +24 -0
- package/dist/context/index.d.cts +19 -0
- package/dist/context/index.d.ts +19 -0
- package/dist/context/index.js +2 -0
- package/dist/context/manager.cjs +516 -0
- package/dist/context/manager.d.cts +254 -0
- package/dist/context/manager.d.ts +254 -0
- package/dist/context/manager.js +492 -0
- package/dist/context/types.cjs +16 -0
- package/dist/context/types.d.cts +113 -0
- package/dist/context/types.d.ts +113 -0
- package/dist/context/types.js +0 -0
- package/dist/context/utils.cjs +406 -0
- package/dist/context/utils.d.cts +79 -0
- package/dist/context/utils.d.ts +79 -0
- package/dist/context/utils.js +374 -0
- package/dist/errors/DextoBaseError.cjs +36 -0
- package/dist/errors/DextoBaseError.d.cts +15 -0
- package/dist/errors/DextoBaseError.d.ts +15 -0
- package/dist/errors/DextoBaseError.js +12 -0
- package/dist/errors/DextoRuntimeError.cjs +50 -0
- package/dist/errors/DextoRuntimeError.d.cts +37 -0
- package/dist/errors/DextoRuntimeError.d.ts +37 -0
- package/dist/errors/DextoRuntimeError.js +26 -0
- package/dist/errors/DextoValidationError.cjs +118 -0
- package/dist/errors/DextoValidationError.d.cts +65 -0
- package/dist/errors/DextoValidationError.d.ts +65 -0
- package/dist/{chunk-XFQLRBHE.js → errors/DextoValidationError.js} +4 -32
- package/dist/errors/index.cjs +42 -0
- package/dist/errors/index.d.cts +18 -0
- package/dist/errors/index.d.ts +18 -0
- package/dist/errors/index.js +13 -0
- package/dist/errors/result-bridge.cjs +38 -0
- package/dist/errors/result-bridge.d.cts +39 -0
- package/dist/errors/result-bridge.d.ts +39 -0
- package/dist/errors/result-bridge.js +14 -0
- package/dist/errors/types.cjs +54 -0
- package/dist/errors/types.d.cts +62 -0
- package/dist/errors/types.d.ts +62 -0
- package/dist/errors/types.js +29 -0
- package/dist/events/index.cjs +169 -0
- package/dist/events/index.d.cts +272 -0
- package/dist/events/index.d.ts +272 -0
- package/dist/events/index.js +136 -0
- package/dist/index.browser.cjs +9 -220
- package/dist/index.browser.d.cts +53 -379
- package/dist/index.browser.d.ts +53 -379
- package/dist/index.browser.js +4 -210
- package/dist/index.cjs +31 -15266
- package/dist/index.d.cts +89 -6842
- package/dist/index.d.ts +89 -6842
- package/dist/index.js +14 -9914
- package/dist/llm/error-codes.cjs +48 -0
- package/dist/llm/error-codes.d.cts +26 -0
- package/dist/llm/error-codes.d.ts +26 -0
- package/dist/llm/error-codes.js +24 -0
- package/dist/llm/errors.cjs +108 -0
- package/dist/llm/errors.d.cts +58 -0
- package/dist/llm/errors.d.ts +58 -0
- package/dist/llm/errors.js +84 -0
- package/dist/llm/formatters/anthropic.cjs +246 -0
- package/dist/llm/formatters/anthropic.d.cts +45 -0
- package/dist/llm/formatters/anthropic.d.ts +45 -0
- package/dist/llm/formatters/anthropic.js +227 -0
- package/dist/llm/formatters/factory.cjs +51 -0
- package/dist/llm/formatters/factory.d.cts +12 -0
- package/dist/llm/formatters/factory.d.ts +12 -0
- package/dist/llm/formatters/factory.js +27 -0
- package/dist/llm/formatters/openai.cjs +167 -0
- package/dist/llm/formatters/openai.d.cts +38 -0
- package/dist/llm/formatters/openai.d.ts +38 -0
- package/dist/llm/formatters/openai.js +147 -0
- package/dist/llm/formatters/types.cjs +16 -0
- package/dist/llm/formatters/types.d.cts +43 -0
- package/dist/llm/formatters/types.d.ts +43 -0
- package/dist/llm/formatters/types.js +0 -0
- package/dist/llm/formatters/vercel.cjs +411 -0
- package/dist/llm/formatters/vercel.d.cts +48 -0
- package/dist/llm/formatters/vercel.d.ts +48 -0
- package/dist/llm/formatters/vercel.js +387 -0
- package/dist/llm/index.cjs +34 -0
- package/dist/llm/index.d.cts +39 -0
- package/dist/llm/index.d.ts +39 -0
- package/dist/llm/index.js +7 -0
- package/dist/llm/registry.cjs +881 -0
- package/dist/llm/registry.d.cts +176 -0
- package/dist/llm/registry.d.ts +176 -0
- package/dist/{chunk-J6AXCN3H.js → llm/registry.js} +25 -455
- package/dist/llm/resolver.cjs +154 -0
- package/dist/llm/resolver.d.cts +34 -0
- package/dist/llm/resolver.d.ts +34 -0
- package/dist/llm/resolver.js +136 -0
- package/dist/llm/schemas.cjs +188 -0
- package/dist/llm/schemas.d.cts +111 -0
- package/dist/llm/schemas.d.ts +111 -0
- package/dist/llm/schemas.js +172 -0
- package/dist/llm/services/anthropic.cjs +398 -0
- package/dist/llm/services/anthropic.d.cts +65 -0
- package/dist/llm/services/anthropic.d.ts +65 -0
- package/dist/llm/services/anthropic.js +374 -0
- package/dist/llm/services/factory.cjs +164 -0
- package/dist/llm/services/factory.d.cts +39 -0
- package/dist/llm/services/factory.d.ts +39 -0
- package/dist/llm/services/factory.js +130 -0
- package/dist/llm/services/index.cjs +22 -0
- package/dist/llm/services/index.d.cts +21 -0
- package/dist/llm/services/index.d.ts +21 -0
- package/dist/llm/services/index.js +1 -0
- package/dist/llm/services/openai.cjs +470 -0
- package/dist/llm/services/openai.d.cts +65 -0
- package/dist/llm/services/openai.d.ts +65 -0
- package/dist/llm/services/openai.js +446 -0
- package/dist/llm/services/test-utils.integration.cjs +169 -0
- package/dist/llm/services/test-utils.integration.d.cts +83 -0
- package/dist/llm/services/test-utils.integration.d.ts +83 -0
- package/dist/llm/services/test-utils.integration.js +142 -0
- package/dist/llm/services/types.cjs +16 -0
- package/dist/llm/services/types.d.cts +56 -0
- package/dist/llm/services/types.d.ts +56 -0
- package/dist/llm/services/types.js +0 -0
- package/dist/llm/services/vercel.cjs +525 -0
- package/dist/llm/services/vercel.d.cts +72 -0
- package/dist/llm/services/vercel.d.ts +72 -0
- package/dist/llm/services/vercel.js +506 -0
- package/dist/llm/tokenizer/anthropic.cjs +43 -0
- package/dist/llm/tokenizer/anthropic.d.cts +21 -0
- package/dist/llm/tokenizer/anthropic.d.ts +21 -0
- package/dist/llm/tokenizer/anthropic.js +19 -0
- package/dist/llm/tokenizer/default.cjs +41 -0
- package/dist/llm/tokenizer/default.d.cts +16 -0
- package/dist/llm/tokenizer/default.d.ts +16 -0
- package/dist/llm/tokenizer/default.js +17 -0
- package/dist/llm/tokenizer/factory.cjs +44 -0
- package/dist/llm/tokenizer/factory.d.cts +12 -0
- package/dist/llm/tokenizer/factory.d.ts +12 -0
- package/dist/llm/tokenizer/factory.js +20 -0
- package/dist/llm/tokenizer/google.cjs +52 -0
- package/dist/llm/tokenizer/google.d.cts +31 -0
- package/dist/llm/tokenizer/google.d.ts +31 -0
- package/dist/llm/tokenizer/google.js +28 -0
- package/dist/llm/tokenizer/openai.cjs +108 -0
- package/dist/llm/tokenizer/openai.d.cts +32 -0
- package/dist/llm/tokenizer/openai.d.ts +32 -0
- package/dist/llm/tokenizer/openai.js +83 -0
- package/dist/llm/tokenizer/types.cjs +33 -0
- package/dist/llm/tokenizer/types.d.cts +19 -0
- package/dist/llm/tokenizer/types.d.ts +19 -0
- package/dist/llm/tokenizer/types.js +9 -0
- package/dist/llm/types.cjs +42 -0
- package/dist/llm/types.d.cts +29 -0
- package/dist/llm/types.d.ts +29 -0
- package/dist/llm/types.js +16 -0
- package/dist/llm/validation.cjs +162 -0
- package/dist/llm/validation.d.cts +60 -0
- package/dist/llm/validation.d.ts +60 -0
- package/dist/llm/validation.js +138 -0
- package/dist/logger/browser.cjs +86 -0
- package/dist/logger/browser.d.cts +29 -0
- package/dist/logger/browser.d.ts +29 -0
- package/dist/logger/browser.js +61 -0
- package/dist/logger/index.cjs +22 -0
- package/dist/logger/index.d.cts +1 -0
- package/dist/logger/index.d.ts +1 -0
- package/dist/logger/index.js +1 -0
- package/dist/logger/logger.cjs +362 -0
- package/dist/logger/logger.d.cts +52 -0
- package/dist/logger/logger.d.ts +52 -0
- package/dist/logger/logger.js +327 -0
- package/dist/mcp/error-codes.cjs +38 -0
- package/dist/mcp/error-codes.d.cts +16 -0
- package/dist/mcp/error-codes.d.ts +16 -0
- package/dist/mcp/error-codes.js +14 -0
- package/dist/mcp/errors.cjs +131 -0
- package/dist/mcp/errors.d.cts +72 -0
- package/dist/mcp/errors.d.ts +72 -0
- package/dist/mcp/errors.js +107 -0
- package/dist/mcp/index.cjs +34 -0
- package/dist/mcp/index.d.cts +26 -0
- package/dist/mcp/index.d.ts +26 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/manager.cjs +473 -0
- package/dist/mcp/manager.d.cts +163 -0
- package/dist/mcp/manager.d.ts +163 -0
- package/dist/mcp/manager.js +449 -0
- package/dist/mcp/mcp-client.cjs +420 -0
- package/dist/mcp/mcp-client.d.cts +108 -0
- package/dist/mcp/mcp-client.d.ts +108 -0
- package/dist/mcp/mcp-client.js +396 -0
- package/dist/mcp/resolver.cjs +78 -0
- package/dist/mcp/resolver.d.cts +22 -0
- package/dist/mcp/resolver.d.ts +22 -0
- package/dist/mcp/resolver.js +56 -0
- package/dist/mcp/schemas.cjs +82 -0
- package/dist/mcp/schemas.d.cts +266 -0
- package/dist/mcp/schemas.d.ts +266 -0
- package/dist/mcp/schemas.js +54 -0
- package/dist/mcp/types.cjs +16 -0
- package/dist/mcp/types.d.cts +21 -0
- package/dist/mcp/types.d.ts +21 -0
- package/dist/mcp/types.js +0 -0
- package/dist/preferences/constants.cjs +28 -0
- package/dist/preferences/constants.d.cts +3 -0
- package/dist/preferences/constants.d.ts +3 -0
- package/dist/preferences/constants.js +4 -0
- package/dist/preferences/error-codes.cjs +35 -0
- package/dist/preferences/error-codes.d.cts +9 -0
- package/dist/preferences/error-codes.d.ts +9 -0
- package/dist/preferences/error-codes.js +11 -0
- package/dist/preferences/errors.cjs +75 -0
- package/dist/preferences/errors.d.cts +33 -0
- package/dist/preferences/errors.d.ts +33 -0
- package/dist/preferences/errors.js +50 -0
- package/dist/preferences/index.cjs +55 -0
- package/dist/preferences/index.d.cts +21 -0
- package/dist/preferences/index.d.ts +21 -0
- package/dist/preferences/index.js +31 -0
- package/dist/preferences/loader.cjs +136 -0
- package/dist/preferences/loader.d.cts +45 -0
- package/dist/preferences/loader.d.ts +45 -0
- package/dist/preferences/loader.js +107 -0
- package/dist/preferences/schemas.cjs +74 -0
- package/dist/preferences/schemas.d.cts +104 -0
- package/dist/preferences/schemas.d.ts +104 -0
- package/dist/preferences/schemas.js +47 -0
- package/dist/search/index.cjs +28 -0
- package/dist/search/index.d.cts +5 -0
- package/dist/search/index.d.ts +5 -0
- package/dist/search/index.js +4 -0
- package/dist/search/search-service.cjs +245 -0
- package/dist/search/search-service.d.cts +47 -0
- package/dist/search/search-service.d.ts +47 -0
- package/dist/search/search-service.js +221 -0
- package/dist/search/types.cjs +16 -0
- package/dist/search/types.d.cts +78 -0
- package/dist/search/types.d.ts +78 -0
- package/dist/search/types.js +0 -0
- package/dist/session/chat-session.cjs +354 -0
- package/dist/session/chat-session.d.cts +284 -0
- package/dist/session/chat-session.d.ts +284 -0
- package/dist/session/chat-session.js +333 -0
- package/dist/session/error-codes.cjs +35 -0
- package/dist/session/error-codes.d.cts +13 -0
- package/dist/session/error-codes.d.ts +13 -0
- package/dist/session/error-codes.js +11 -0
- package/dist/session/errors.cjs +93 -0
- package/dist/session/errors.d.cts +58 -0
- package/dist/session/errors.d.ts +58 -0
- package/dist/session/errors.js +69 -0
- package/dist/session/history/database.cjs +95 -0
- package/dist/session/history/database.d.cts +28 -0
- package/dist/session/history/database.d.ts +28 -0
- package/dist/session/history/database.js +71 -0
- package/dist/session/history/factory.cjs +31 -0
- package/dist/session/history/factory.d.cts +11 -0
- package/dist/session/history/factory.d.ts +11 -0
- package/dist/session/history/factory.js +7 -0
- package/dist/session/history/types.cjs +16 -0
- package/dist/session/history/types.d.cts +17 -0
- package/dist/session/history/types.d.ts +17 -0
- package/dist/session/history/types.js +0 -0
- package/dist/session/index.cjs +37 -0
- package/dist/session/index.d.cts +53 -0
- package/dist/session/index.d.ts +53 -0
- package/dist/session/index.js +10 -0
- package/dist/session/schemas.cjs +32 -0
- package/dist/session/schemas.d.cts +16 -0
- package/dist/session/schemas.d.ts +16 -0
- package/dist/session/schemas.js +8 -0
- package/dist/session/session-manager.cjs +481 -0
- package/dist/session/session-manager.d.cts +219 -0
- package/dist/session/session-manager.d.ts +219 -0
- package/dist/session/session-manager.js +457 -0
- package/dist/storage/backend/cache-backend.cjs +16 -0
- package/dist/storage/backend/cache-backend.d.cts +15 -0
- package/dist/storage/backend/cache-backend.d.ts +15 -0
- package/dist/storage/backend/cache-backend.js +0 -0
- package/dist/storage/backend/database-backend.cjs +16 -0
- package/dist/storage/backend/database-backend.d.cts +19 -0
- package/dist/storage/backend/database-backend.d.ts +19 -0
- package/dist/storage/backend/database-backend.js +0 -0
- package/dist/storage/backend/memory-backend.cjs +140 -0
- package/dist/storage/backend/memory-backend.d.cts +34 -0
- package/dist/storage/backend/memory-backend.d.ts +34 -0
- package/dist/storage/backend/memory-backend.js +116 -0
- package/dist/storage/backend/postgres-backend.cjs +231 -0
- package/dist/storage/backend/postgres-backend.d.cts +37 -0
- package/dist/storage/backend/postgres-backend.d.ts +37 -0
- package/dist/{postgres-backend-WMWS7RAT.js → storage/backend/postgres-backend.js} +3 -12
- package/dist/storage/backend/redis-backend.cjs +184 -0
- package/dist/storage/backend/redis-backend.d.cts +36 -0
- package/dist/storage/backend/redis-backend.d.ts +36 -0
- package/dist/{redis-backend-BNLN3XHX.js → storage/backend/redis-backend.js} +3 -12
- package/dist/storage/backend/sqlite-backend.cjs +271 -0
- package/dist/storage/backend/sqlite-backend.d.cts +35 -0
- package/dist/storage/backend/sqlite-backend.d.ts +35 -0
- package/dist/{sqlite-backend-AR6XNK2Q.js → storage/backend/sqlite-backend.js} +6 -17
- package/dist/storage/backend/types.cjs +16 -0
- package/dist/storage/backend/types.d.cts +14 -0
- package/dist/storage/backend/types.d.ts +14 -0
- package/dist/storage/backend/types.js +0 -0
- package/dist/storage/error-codes.cjs +36 -0
- package/dist/storage/error-codes.d.cts +14 -0
- package/dist/storage/error-codes.d.ts +14 -0
- package/dist/storage/error-codes.js +12 -0
- package/dist/storage/errors.cjs +104 -0
- package/dist/storage/errors.d.cts +63 -0
- package/dist/storage/errors.d.ts +63 -0
- package/dist/{chunk-F2QFAECT.js → storage/errors.js} +23 -30
- package/dist/storage/index.cjs +33 -0
- package/dist/storage/index.d.cts +7 -0
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.js +7 -0
- package/dist/storage/schemas.cjs +113 -0
- package/dist/storage/schemas.d.cts +856 -0
- package/dist/storage/schemas.d.ts +856 -0
- package/dist/storage/schemas.js +89 -0
- package/dist/storage/storage-manager.cjs +208 -0
- package/dist/storage/storage-manager.d.cts +52 -0
- package/dist/storage/storage-manager.d.ts +52 -0
- package/dist/storage/storage-manager.js +173 -0
- package/dist/storage/types.cjs +16 -0
- package/dist/storage/types.d.cts +5 -0
- package/dist/storage/types.d.ts +5 -0
- package/dist/storage/types.js +0 -0
- package/dist/systemPrompt/contributors.cjs +146 -0
- package/dist/systemPrompt/contributors.d.cts +44 -0
- package/dist/systemPrompt/contributors.d.ts +44 -0
- package/dist/systemPrompt/contributors.js +120 -0
- package/dist/systemPrompt/error-codes.cjs +35 -0
- package/dist/systemPrompt/error-codes.d.cts +13 -0
- package/dist/systemPrompt/error-codes.d.ts +13 -0
- package/dist/systemPrompt/error-codes.js +11 -0
- package/dist/systemPrompt/errors.cjs +93 -0
- package/dist/systemPrompt/errors.d.cts +55 -0
- package/dist/systemPrompt/errors.d.ts +55 -0
- package/dist/systemPrompt/errors.js +69 -0
- package/dist/systemPrompt/in-built-prompts.cjs +68 -0
- package/dist/systemPrompt/in-built-prompts.d.cts +28 -0
- package/dist/systemPrompt/in-built-prompts.d.ts +28 -0
- package/dist/systemPrompt/in-built-prompts.js +42 -0
- package/dist/systemPrompt/index.cjs +30 -0
- package/dist/systemPrompt/index.d.cts +14 -0
- package/dist/systemPrompt/index.d.ts +14 -0
- package/dist/systemPrompt/index.js +5 -0
- package/dist/systemPrompt/manager.cjs +93 -0
- package/dist/systemPrompt/manager.d.cts +31 -0
- package/dist/systemPrompt/manager.d.ts +31 -0
- package/dist/systemPrompt/manager.js +69 -0
- package/dist/systemPrompt/registry.cjs +51 -0
- package/dist/systemPrompt/registry.d.cts +20 -0
- package/dist/systemPrompt/registry.d.ts +20 -0
- package/dist/systemPrompt/registry.js +15 -0
- package/dist/systemPrompt/schemas.cjs +107 -0
- package/dist/systemPrompt/schemas.d.cts +401 -0
- package/dist/systemPrompt/schemas.d.ts +401 -0
- package/dist/systemPrompt/schemas.js +81 -0
- package/dist/systemPrompt/types.cjs +16 -0
- package/dist/systemPrompt/types.d.cts +19 -0
- package/dist/systemPrompt/types.d.ts +19 -0
- package/dist/systemPrompt/types.js +0 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.cjs +44 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.d.cts +19 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts +19 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.js +20 -0
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.cjs +62 -0
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.cts +17 -0
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts +17 -0
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.js +38 -0
- package/dist/tools/confirmation/allowed-tools-provider/storage.cjs +68 -0
- package/dist/tools/confirmation/allowed-tools-provider/storage.d.cts +26 -0
- package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts +26 -0
- package/dist/tools/confirmation/allowed-tools-provider/storage.js +44 -0
- package/dist/tools/confirmation/allowed-tools-provider/types.cjs +16 -0
- package/dist/tools/confirmation/allowed-tools-provider/types.d.cts +35 -0
- package/dist/tools/confirmation/allowed-tools-provider/types.d.ts +35 -0
- package/dist/tools/confirmation/allowed-tools-provider/types.js +0 -0
- package/dist/tools/confirmation/event-based-confirmation-provider.cjs +158 -0
- package/dist/tools/confirmation/event-based-confirmation-provider.d.cts +41 -0
- package/dist/tools/confirmation/event-based-confirmation-provider.d.ts +41 -0
- package/dist/tools/confirmation/event-based-confirmation-provider.js +134 -0
- package/dist/tools/confirmation/factory.cjs +52 -0
- package/dist/tools/confirmation/factory.d.cts +37 -0
- package/dist/tools/confirmation/factory.d.ts +37 -0
- package/dist/tools/confirmation/factory.js +28 -0
- package/dist/tools/confirmation/noop-confirmation-provider.cjs +49 -0
- package/dist/tools/confirmation/noop-confirmation-provider.d.cts +22 -0
- package/dist/tools/confirmation/noop-confirmation-provider.d.ts +22 -0
- package/dist/tools/confirmation/noop-confirmation-provider.js +25 -0
- package/dist/tools/confirmation/types.cjs +16 -0
- package/dist/tools/confirmation/types.d.cts +46 -0
- package/dist/tools/confirmation/types.d.ts +46 -0
- package/dist/tools/confirmation/types.js +0 -0
- package/dist/tools/error-codes.cjs +40 -0
- package/dist/tools/error-codes.d.cts +18 -0
- package/dist/tools/error-codes.d.ts +18 -0
- package/dist/tools/error-codes.js +16 -0
- package/dist/tools/errors.cjs +164 -0
- package/dist/tools/errors.d.cts +97 -0
- package/dist/tools/errors.d.ts +97 -0
- package/dist/tools/errors.js +140 -0
- package/dist/tools/index.cjs +37 -0
- package/dist/tools/index.d.cts +19 -0
- package/dist/tools/index.d.ts +19 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.cjs +61 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.d.cts +15 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.d.ts +15 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.js +37 -0
- package/dist/tools/internal-tools/index.cjs +24 -0
- package/dist/tools/internal-tools/index.d.cts +13 -0
- package/dist/tools/internal-tools/index.d.ts +13 -0
- package/dist/tools/internal-tools/index.js +2 -0
- package/dist/tools/internal-tools/provider.cjs +159 -0
- package/dist/tools/internal-tools/provider.d.cts +66 -0
- package/dist/tools/internal-tools/provider.d.ts +66 -0
- package/dist/tools/internal-tools/provider.js +135 -0
- package/dist/tools/internal-tools/registry.cjs +43 -0
- package/dist/tools/internal-tools/registry.d.cts +45 -0
- package/dist/tools/internal-tools/registry.d.ts +45 -0
- package/dist/tools/internal-tools/registry.js +17 -0
- package/dist/tools/schemas.cjs +45 -0
- package/dist/tools/schemas.d.cts +21 -0
- package/dist/tools/schemas.d.ts +21 -0
- package/dist/tools/schemas.js +20 -0
- package/dist/tools/tool-manager.cjs +275 -0
- package/dist/tools/tool-manager.d.cts +106 -0
- package/dist/tools/tool-manager.d.ts +106 -0
- package/dist/tools/tool-manager.js +251 -0
- package/dist/tools/types.cjs +16 -0
- package/dist/tools/types.d.cts +66 -0
- package/dist/tools/types.d.ts +66 -0
- package/dist/tools/types.js +0 -0
- package/dist/utils/api-key-resolver.cjs +62 -0
- package/dist/utils/api-key-resolver.d.cts +23 -0
- package/dist/utils/api-key-resolver.d.ts +23 -0
- package/dist/utils/api-key-resolver.js +36 -0
- package/dist/utils/api-key-store.cjs +56 -0
- package/dist/utils/api-key-store.d.cts +26 -0
- package/dist/utils/api-key-store.d.ts +26 -0
- package/dist/utils/api-key-store.js +30 -0
- package/dist/utils/env.cjs +154 -0
- package/dist/utils/env.d.cts +29 -0
- package/dist/utils/env.d.ts +29 -0
- package/dist/utils/env.js +118 -0
- package/dist/utils/error-conversion.cjs +53 -0
- package/dist/utils/error-conversion.d.cts +13 -0
- package/dist/utils/error-conversion.d.ts +13 -0
- package/dist/utils/error-conversion.js +29 -0
- package/dist/utils/execution-context.cjs +85 -0
- package/dist/utils/execution-context.d.cts +21 -0
- package/dist/utils/execution-context.d.ts +21 -0
- package/dist/utils/execution-context.js +49 -0
- package/dist/{chunk-MVKLS3LM.js → utils/fs-walk.cjs} +27 -18
- package/dist/utils/fs-walk.d.cts +9 -0
- package/dist/utils/fs-walk.d.ts +9 -0
- package/dist/utils/fs-walk.js +18 -0
- package/dist/utils/index.cjs +44 -0
- package/dist/utils/index.d.cts +63 -0
- package/dist/utils/index.d.ts +63 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/path.cjs +197 -0
- package/dist/utils/path.d.cts +54 -0
- package/dist/utils/path.d.ts +54 -0
- package/dist/utils/path.js +159 -0
- package/dist/utils/port-utils.cjs +37 -0
- package/dist/utils/port-utils.d.cts +11 -0
- package/dist/utils/port-utils.d.ts +11 -0
- package/dist/utils/port-utils.js +13 -0
- package/dist/utils/port-utils.spec.cjs +26 -0
- package/dist/utils/port-utils.spec.d.cts +2 -0
- package/dist/utils/port-utils.spec.d.ts +2 -0
- package/dist/utils/port-utils.spec.js +25 -0
- package/dist/utils/redactor.cjs +105 -0
- package/dist/utils/redactor.d.cts +18 -0
- package/dist/utils/redactor.d.ts +18 -0
- package/dist/utils/redactor.js +81 -0
- package/dist/utils/result.cjs +115 -0
- package/dist/utils/result.d.cts +180 -0
- package/dist/utils/result.d.ts +180 -0
- package/dist/utils/result.js +82 -0
- package/dist/utils/safe-stringify.cjs +57 -0
- package/dist/utils/safe-stringify.d.cts +7 -0
- package/dist/utils/safe-stringify.d.ts +7 -0
- package/dist/utils/safe-stringify.js +33 -0
- package/dist/utils/schema.cjs +42 -0
- package/dist/utils/schema.d.cts +6 -0
- package/dist/utils/schema.d.ts +6 -0
- package/dist/utils/schema.js +18 -0
- package/dist/utils/service-initializer.cjs +119 -0
- package/dist/utils/service-initializer.d.cts +63 -0
- package/dist/utils/service-initializer.d.ts +63 -0
- package/dist/utils/service-initializer.js +95 -0
- package/dist/utils/user-info.cjs +30 -0
- package/dist/utils/user-info.d.cts +3 -0
- package/dist/utils/user-info.d.ts +3 -0
- package/dist/utils/user-info.js +6 -0
- package/dist/utils/zod-schema-converter.cjs +112 -0
- package/dist/utils/zod-schema-converter.d.cts +13 -0
- package/dist/utils/zod-schema-converter.d.ts +13 -0
- package/dist/utils/zod-schema-converter.js +87 -0
- package/package.json +2 -2
- package/dist/chunk-D62MHQBE.js +0 -2203
- package/dist/chunk-FCJVTIBV.js +0 -535
- package/dist/chunk-TPERKLLN.js +0 -75
- package/dist/errors-ZZ4Z3FKB.js +0 -10
- package/dist/loader-HBNEYPQZ.js +0 -20
- package/dist/path-TP7WBDED.js +0 -21
- package/dist/registry-Z4DFXODW.js +0 -14
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
import {
|
|
2
|
+
generateText,
|
|
3
|
+
streamText,
|
|
4
|
+
APICallError,
|
|
5
|
+
stepCountIs
|
|
6
|
+
} from "ai";
|
|
7
|
+
import { logger } from "../../logger/index.js";
|
|
8
|
+
import { jsonSchema } from "ai";
|
|
9
|
+
import { ContextManager } from "../../context/manager.js";
|
|
10
|
+
import { sanitizeToolResultToContent, summarizeToolContentForText } from "../../context/utils.js";
|
|
11
|
+
import { getMaxInputTokensForModel, getEffectiveMaxInputTokens } from "../registry.js";
|
|
12
|
+
import { DextoRuntimeError } from "../../errors/DextoRuntimeError.js";
|
|
13
|
+
import { LLMErrorCode } from "../error-codes.js";
|
|
14
|
+
import { ErrorScope, ErrorType } from "../../errors/types.js";
|
|
15
|
+
import { toError } from "../../utils/error-conversion.js";
|
|
16
|
+
import { ToolErrorCode } from "../../tools/error-codes.js";
|
|
17
|
+
import { VercelMessageFormatter } from "../formatters/vercel.js";
|
|
18
|
+
import { createTokenizer } from "../tokenizer/factory.js";
|
|
19
|
+
class VercelLLMService {
|
|
20
|
+
model;
|
|
21
|
+
config;
|
|
22
|
+
toolManager;
|
|
23
|
+
contextManager;
|
|
24
|
+
sessionEventBus;
|
|
25
|
+
sessionId;
|
|
26
|
+
toolSupportCache = /* @__PURE__ */ new Map();
|
|
27
|
+
// Map of toolCallId -> queue of raw results to emit with that callId
|
|
28
|
+
rawResultsByCallId = /* @__PURE__ */ new Map();
|
|
29
|
+
/**
|
|
30
|
+
* Helper to extract model ID from LanguageModel union type (string | LanguageModelV2)
|
|
31
|
+
*/
|
|
32
|
+
getModelId() {
|
|
33
|
+
return typeof this.model === "string" ? this.model : this.model.modelId;
|
|
34
|
+
}
|
|
35
|
+
constructor(toolManager, model, promptManager, historyProvider, sessionEventBus, config, sessionId) {
|
|
36
|
+
this.model = model;
|
|
37
|
+
this.config = config;
|
|
38
|
+
this.toolManager = toolManager;
|
|
39
|
+
this.sessionEventBus = sessionEventBus;
|
|
40
|
+
this.sessionId = sessionId;
|
|
41
|
+
const formatter = new VercelMessageFormatter();
|
|
42
|
+
const tokenizer = createTokenizer(config.provider, this.getModelId());
|
|
43
|
+
const maxInputTokens = getEffectiveMaxInputTokens(config);
|
|
44
|
+
this.contextManager = new ContextManager(
|
|
45
|
+
config,
|
|
46
|
+
formatter,
|
|
47
|
+
promptManager,
|
|
48
|
+
maxInputTokens,
|
|
49
|
+
tokenizer,
|
|
50
|
+
historyProvider,
|
|
51
|
+
sessionId
|
|
52
|
+
);
|
|
53
|
+
logger.debug(
|
|
54
|
+
`[VercelLLMService] Initialized for model: ${this.getModelId()}, provider: ${this.config.provider}, temperature: ${this.config.temperature}, maxOutputTokens: ${this.config.maxOutputTokens}`
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
getAllTools() {
|
|
58
|
+
return this.toolManager.getAllTools();
|
|
59
|
+
}
|
|
60
|
+
formatTools(tools) {
|
|
61
|
+
logger.debug(`Formatting tools for vercel`);
|
|
62
|
+
return Object.keys(tools).reduce((acc, toolName) => {
|
|
63
|
+
const tool = tools[toolName];
|
|
64
|
+
if (tool) {
|
|
65
|
+
acc[toolName] = {
|
|
66
|
+
inputSchema: jsonSchema(tool.parameters),
|
|
67
|
+
execute: async (args, options) => {
|
|
68
|
+
try {
|
|
69
|
+
const rawResult = await this.toolManager.executeTool(
|
|
70
|
+
toolName,
|
|
71
|
+
args,
|
|
72
|
+
this.sessionId
|
|
73
|
+
);
|
|
74
|
+
const callId = options.toolCallId;
|
|
75
|
+
const queue = this.rawResultsByCallId.get(callId) ?? [];
|
|
76
|
+
queue.push(rawResult);
|
|
77
|
+
this.rawResultsByCallId.set(callId, queue);
|
|
78
|
+
const safeContent = sanitizeToolResultToContent(rawResult);
|
|
79
|
+
const summaryText = summarizeToolContentForText(safeContent);
|
|
80
|
+
return summaryText;
|
|
81
|
+
} catch (err) {
|
|
82
|
+
if (err instanceof DextoRuntimeError && err.code === ToolErrorCode.EXECUTION_DENIED) {
|
|
83
|
+
return { error: err.message, denied: true };
|
|
84
|
+
}
|
|
85
|
+
if (err instanceof DextoRuntimeError && err.code === ToolErrorCode.CONFIRMATION_TIMEOUT) {
|
|
86
|
+
return { error: err.message, denied: true, timeout: true };
|
|
87
|
+
}
|
|
88
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
89
|
+
return { error: message };
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
...tool.description && { description: tool.description }
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return acc;
|
|
96
|
+
}, {});
|
|
97
|
+
}
|
|
98
|
+
async validateToolSupport() {
|
|
99
|
+
const modelKey = `${this.config.provider}:${this.getModelId()}:${this.config.baseURL ?? ""}`;
|
|
100
|
+
if (this.toolSupportCache.has(modelKey)) {
|
|
101
|
+
return this.toolSupportCache.get(modelKey);
|
|
102
|
+
}
|
|
103
|
+
if (!this.config.baseURL) {
|
|
104
|
+
logger.debug(`Skipping tool validation for ${modelKey} - no custom baseURL`);
|
|
105
|
+
this.toolSupportCache.set(modelKey, true);
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
logger.debug(`Testing tool support for custom endpoint model: ${modelKey}`);
|
|
109
|
+
const testTool = {
|
|
110
|
+
test_tool: {
|
|
111
|
+
inputSchema: jsonSchema({
|
|
112
|
+
type: "object",
|
|
113
|
+
properties: {},
|
|
114
|
+
additionalProperties: false
|
|
115
|
+
}),
|
|
116
|
+
execute: async () => ({ result: "test" })
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
try {
|
|
120
|
+
await generateText({
|
|
121
|
+
model: this.model,
|
|
122
|
+
messages: [{ role: "user", content: "Hello" }],
|
|
123
|
+
tools: testTool,
|
|
124
|
+
stopWhen: stepCountIs(1)
|
|
125
|
+
});
|
|
126
|
+
this.toolSupportCache.set(modelKey, true);
|
|
127
|
+
logger.debug(`Model ${modelKey} supports tools`);
|
|
128
|
+
return true;
|
|
129
|
+
} catch (error) {
|
|
130
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
131
|
+
if (errorMessage.includes("does not support tools")) {
|
|
132
|
+
this.toolSupportCache.set(modelKey, false);
|
|
133
|
+
logger.debug(`Model ${modelKey} does not support tools`);
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
logger.debug(
|
|
137
|
+
`Tool validation error for ${modelKey}, assuming supported: ${errorMessage}`
|
|
138
|
+
);
|
|
139
|
+
this.toolSupportCache.set(modelKey, true);
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async completeTask(textInput, options, imageData, fileData, stream) {
|
|
144
|
+
logger.debug(
|
|
145
|
+
`[VercelLLMService] addUserMessage(text ~${textInput.length} chars, image=${Boolean(
|
|
146
|
+
imageData
|
|
147
|
+
)}, file=${Boolean(fileData)})`
|
|
148
|
+
);
|
|
149
|
+
await this.contextManager.addUserMessage(textInput, imageData, fileData);
|
|
150
|
+
const tools = await this.toolManager.getAllTools();
|
|
151
|
+
logger.silly(
|
|
152
|
+
`[VercelLLMService] Tools before formatting: ${JSON.stringify(tools, null, 2)}`
|
|
153
|
+
);
|
|
154
|
+
const formattedTools = this.formatTools(tools);
|
|
155
|
+
logger.silly(
|
|
156
|
+
`[VercelLLMService] Formatted tools: ${JSON.stringify(formattedTools, null, 2)}`
|
|
157
|
+
);
|
|
158
|
+
let fullResponse = "";
|
|
159
|
+
this.sessionEventBus.emit("llmservice:thinking");
|
|
160
|
+
const prepared = await this.contextManager.getFormattedMessagesWithCompression(
|
|
161
|
+
{ mcpManager: this.toolManager.getMcpManager() },
|
|
162
|
+
{ provider: this.config.provider, model: this.getModelId() }
|
|
163
|
+
);
|
|
164
|
+
const formattedMessages = prepared.formattedMessages;
|
|
165
|
+
const tokensUsed = prepared.tokensUsed;
|
|
166
|
+
logger.silly(
|
|
167
|
+
`Messages (potentially compressed): ${JSON.stringify(formattedMessages, null, 2)}`
|
|
168
|
+
);
|
|
169
|
+
logger.silly(`Tools: ${JSON.stringify(formattedTools, null, 2)}`);
|
|
170
|
+
logger.debug(`Estimated tokens being sent to Vercel provider: ${tokensUsed}`);
|
|
171
|
+
if (stream) {
|
|
172
|
+
fullResponse = await this.streamText(
|
|
173
|
+
formattedMessages,
|
|
174
|
+
formattedTools,
|
|
175
|
+
this.config.maxIterations,
|
|
176
|
+
options?.signal
|
|
177
|
+
);
|
|
178
|
+
} else {
|
|
179
|
+
fullResponse = await this.generateText(
|
|
180
|
+
formattedMessages,
|
|
181
|
+
formattedTools,
|
|
182
|
+
this.config.maxIterations,
|
|
183
|
+
options?.signal
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
if (options?.signal?.aborted) {
|
|
187
|
+
return fullResponse;
|
|
188
|
+
}
|
|
189
|
+
return fullResponse || `Reached maximum number of steps (${this.config.maxIterations}) without a final response.`;
|
|
190
|
+
}
|
|
191
|
+
async generateText(messages, tools, maxSteps = 50, signal) {
|
|
192
|
+
let stepIteration = 0;
|
|
193
|
+
const estimatedTokens = Math.ceil(JSON.stringify(messages, null, 2).length / 4);
|
|
194
|
+
logger.debug(
|
|
195
|
+
`vercel generateText:Generating text with messages (${estimatedTokens} estimated tokens)`
|
|
196
|
+
);
|
|
197
|
+
const temperature = this.config.temperature;
|
|
198
|
+
const maxOutputTokens = this.config.maxOutputTokens;
|
|
199
|
+
const supportsTools = await this.validateToolSupport();
|
|
200
|
+
const effectiveTools = supportsTools ? tools : {};
|
|
201
|
+
if (!supportsTools && Object.keys(tools).length > 0) {
|
|
202
|
+
logger.debug(
|
|
203
|
+
`Model ${this.getModelId()} does not support tools, using empty tools object for generation`
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
const includeMaxOutputTokens = typeof maxOutputTokens === "number";
|
|
208
|
+
const response = await generateText({
|
|
209
|
+
model: this.model,
|
|
210
|
+
messages,
|
|
211
|
+
tools: effectiveTools,
|
|
212
|
+
...signal ? { abortSignal: signal } : {},
|
|
213
|
+
onStepFinish: (step) => {
|
|
214
|
+
logger.debug(`Step iteration: ${stepIteration}`);
|
|
215
|
+
stepIteration++;
|
|
216
|
+
logger.debug(`Step finished, text: ${step.text}`);
|
|
217
|
+
logger.debug(
|
|
218
|
+
`Step finished, step tool calls: ${JSON.stringify(step.toolCalls, null, 2)}`
|
|
219
|
+
);
|
|
220
|
+
logger.debug(
|
|
221
|
+
`Step finished, step tool results: ${JSON.stringify(step.toolResults, null, 2)}`
|
|
222
|
+
);
|
|
223
|
+
if (step.toolCalls && step.toolCalls.length > 0) {
|
|
224
|
+
for (const toolCall of step.toolCalls) {
|
|
225
|
+
this.sessionEventBus.emit("llmservice:toolCall", {
|
|
226
|
+
toolName: toolCall.toolName,
|
|
227
|
+
args: toolCall.input,
|
|
228
|
+
callId: toolCall.toolCallId
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (step.toolResults && step.toolResults.length > 0) {
|
|
233
|
+
for (const toolResult of step.toolResults) {
|
|
234
|
+
const callId = toolResult.toolCallId;
|
|
235
|
+
const sanitized = toolResult.output;
|
|
236
|
+
let raw;
|
|
237
|
+
if (callId) {
|
|
238
|
+
const q = this.rawResultsByCallId.get(callId) ?? [];
|
|
239
|
+
raw = q.shift();
|
|
240
|
+
if (q.length > 0) this.rawResultsByCallId.set(callId, q);
|
|
241
|
+
else this.rawResultsByCallId.delete(callId);
|
|
242
|
+
}
|
|
243
|
+
this.sessionEventBus.emit("llmservice:toolResult", {
|
|
244
|
+
toolName: toolResult.toolName,
|
|
245
|
+
result: raw ?? sanitized,
|
|
246
|
+
callId,
|
|
247
|
+
success: true
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
stopWhen: stepCountIs(maxSteps),
|
|
253
|
+
...includeMaxOutputTokens ? { maxOutputTokens } : {},
|
|
254
|
+
...temperature !== void 0 && { temperature }
|
|
255
|
+
});
|
|
256
|
+
this.sessionEventBus.emit("llmservice:response", {
|
|
257
|
+
content: response.text,
|
|
258
|
+
...response.reasoningText && { reasoning: response.reasoningText },
|
|
259
|
+
provider: this.config.provider,
|
|
260
|
+
model: this.getModelId(),
|
|
261
|
+
router: "vercel",
|
|
262
|
+
tokenUsage: {
|
|
263
|
+
...response.totalUsage.inputTokens !== void 0 && {
|
|
264
|
+
inputTokens: response.totalUsage.inputTokens
|
|
265
|
+
},
|
|
266
|
+
...response.totalUsage.outputTokens !== void 0 && {
|
|
267
|
+
outputTokens: response.totalUsage.outputTokens
|
|
268
|
+
},
|
|
269
|
+
...response.totalUsage.reasoningTokens !== void 0 && {
|
|
270
|
+
reasoningTokens: response.totalUsage.reasoningTokens
|
|
271
|
+
},
|
|
272
|
+
...response.totalUsage.totalTokens !== void 0 && {
|
|
273
|
+
totalTokens: response.totalUsage.totalTokens
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
await this.contextManager.processLLMResponse(response);
|
|
278
|
+
if (typeof response.totalUsage.totalTokens === "number") {
|
|
279
|
+
this.contextManager.updateActualTokenCount(response.totalUsage.totalTokens);
|
|
280
|
+
}
|
|
281
|
+
return response.text;
|
|
282
|
+
} catch (err) {
|
|
283
|
+
this.mapProviderError(err, "generate");
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
mapProviderError(err, phase) {
|
|
287
|
+
if (APICallError.isInstance?.(err)) {
|
|
288
|
+
const status = err.statusCode;
|
|
289
|
+
const headers = err.responseHeaders || {};
|
|
290
|
+
const retryAfter = headers["retry-after"] ? Number(headers["retry-after"]) : void 0;
|
|
291
|
+
const body = typeof err.responseBody === "string" ? err.responseBody : JSON.stringify(err.responseBody ?? "");
|
|
292
|
+
if (status === 429) {
|
|
293
|
+
throw new DextoRuntimeError(
|
|
294
|
+
LLMErrorCode.RATE_LIMIT_EXCEEDED,
|
|
295
|
+
ErrorScope.LLM,
|
|
296
|
+
ErrorType.RATE_LIMIT,
|
|
297
|
+
`Rate limit exceeded${body ? ` - ${body}` : ""}`,
|
|
298
|
+
{
|
|
299
|
+
sessionId: this.sessionId,
|
|
300
|
+
provider: this.config.provider,
|
|
301
|
+
model: this.getModelId(),
|
|
302
|
+
status,
|
|
303
|
+
retryAfter,
|
|
304
|
+
body,
|
|
305
|
+
phase
|
|
306
|
+
}
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
if (status === 408) {
|
|
310
|
+
throw new DextoRuntimeError(
|
|
311
|
+
LLMErrorCode.GENERATION_FAILED,
|
|
312
|
+
ErrorScope.LLM,
|
|
313
|
+
ErrorType.TIMEOUT,
|
|
314
|
+
`Provider timed out${body ? ` - ${body}` : ""}`,
|
|
315
|
+
{
|
|
316
|
+
sessionId: this.sessionId,
|
|
317
|
+
provider: this.config.provider,
|
|
318
|
+
model: this.getModelId(),
|
|
319
|
+
status,
|
|
320
|
+
body,
|
|
321
|
+
phase
|
|
322
|
+
}
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
throw new DextoRuntimeError(
|
|
326
|
+
LLMErrorCode.GENERATION_FAILED,
|
|
327
|
+
ErrorScope.LLM,
|
|
328
|
+
ErrorType.THIRD_PARTY,
|
|
329
|
+
`Provider error ${status}${body ? ` - ${body}` : ""}`,
|
|
330
|
+
{
|
|
331
|
+
sessionId: this.sessionId,
|
|
332
|
+
provider: this.config.provider,
|
|
333
|
+
model: this.getModelId(),
|
|
334
|
+
status,
|
|
335
|
+
body,
|
|
336
|
+
phase
|
|
337
|
+
}
|
|
338
|
+
);
|
|
339
|
+
}
|
|
340
|
+
throw err;
|
|
341
|
+
}
|
|
342
|
+
// Updated streamText to behave like generateText - returns string and handles message processing internally
|
|
343
|
+
async streamText(messages, tools, maxSteps = 10, signal) {
|
|
344
|
+
let stepIteration = 0;
|
|
345
|
+
const temperature = this.config.temperature;
|
|
346
|
+
const maxOutputTokens = this.config.maxOutputTokens;
|
|
347
|
+
const supportsTools = await this.validateToolSupport();
|
|
348
|
+
const effectiveTools = supportsTools ? tools : {};
|
|
349
|
+
if (!supportsTools && Object.keys(tools).length > 0) {
|
|
350
|
+
logger.debug(
|
|
351
|
+
`Model ${this.getModelId()} does not support tools, using empty tools object for streaming`
|
|
352
|
+
);
|
|
353
|
+
}
|
|
354
|
+
let streamErr;
|
|
355
|
+
const includeMaxOutputTokens = typeof maxOutputTokens === "number";
|
|
356
|
+
const response = streamText({
|
|
357
|
+
model: this.model,
|
|
358
|
+
messages,
|
|
359
|
+
tools: effectiveTools,
|
|
360
|
+
...signal ? { abortSignal: signal } : {},
|
|
361
|
+
onChunk: (chunk) => {
|
|
362
|
+
logger.debug(`Chunk type: ${chunk.chunk.type}`);
|
|
363
|
+
if (chunk.chunk.type === "text-delta") {
|
|
364
|
+
this.sessionEventBus.emit("llmservice:chunk", {
|
|
365
|
+
type: "text",
|
|
366
|
+
content: chunk.chunk.text,
|
|
367
|
+
isComplete: false
|
|
368
|
+
});
|
|
369
|
+
} else if (chunk.chunk.type === "reasoning-delta") {
|
|
370
|
+
this.sessionEventBus.emit("llmservice:chunk", {
|
|
371
|
+
type: "reasoning",
|
|
372
|
+
content: chunk.chunk.text,
|
|
373
|
+
isComplete: false
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
},
|
|
377
|
+
// TODO: Add onAbort handler when we implement partial response handling.
|
|
378
|
+
// Vercel triggers onAbort instead of onError for cancelled streams.
|
|
379
|
+
// This is where cancellation logic should be handled properly.
|
|
380
|
+
onError: (error) => {
|
|
381
|
+
const err = toError(error);
|
|
382
|
+
logger.error(`Error in streamText: ${err?.stack ?? err}`, null, "red");
|
|
383
|
+
this.sessionEventBus.emit("llmservice:error", {
|
|
384
|
+
error: err,
|
|
385
|
+
context: "streamText",
|
|
386
|
+
recoverable: false
|
|
387
|
+
});
|
|
388
|
+
streamErr = error;
|
|
389
|
+
},
|
|
390
|
+
onStepFinish: (step) => {
|
|
391
|
+
logger.debug(`Step iteration: ${stepIteration}`);
|
|
392
|
+
stepIteration++;
|
|
393
|
+
logger.debug(`Step finished, text: ${step.text}`);
|
|
394
|
+
logger.debug(
|
|
395
|
+
`Step finished, step tool calls: ${JSON.stringify(step.toolCalls, null, 2)}`
|
|
396
|
+
);
|
|
397
|
+
logger.debug(
|
|
398
|
+
`Step finished, step tool results: ${JSON.stringify(step.toolResults, null, 2)}`
|
|
399
|
+
);
|
|
400
|
+
if (step.toolCalls && step.toolCalls.length > 0) {
|
|
401
|
+
for (const toolCall of step.toolCalls) {
|
|
402
|
+
this.sessionEventBus.emit("llmservice:toolCall", {
|
|
403
|
+
toolName: toolCall.toolName,
|
|
404
|
+
args: toolCall.input,
|
|
405
|
+
callId: toolCall.toolCallId
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
if (step.toolResults && step.toolResults.length > 0) {
|
|
410
|
+
for (const toolResult of step.toolResults) {
|
|
411
|
+
const callId = toolResult.toolCallId;
|
|
412
|
+
const sanitized = toolResult.output;
|
|
413
|
+
let raw;
|
|
414
|
+
if (callId) {
|
|
415
|
+
const q = this.rawResultsByCallId.get(callId) ?? [];
|
|
416
|
+
raw = q.shift();
|
|
417
|
+
if (q.length > 0) this.rawResultsByCallId.set(callId, q);
|
|
418
|
+
else this.rawResultsByCallId.delete(callId);
|
|
419
|
+
}
|
|
420
|
+
this.sessionEventBus.emit("llmservice:toolResult", {
|
|
421
|
+
toolName: toolResult.toolName,
|
|
422
|
+
result: raw ?? sanitized,
|
|
423
|
+
callId,
|
|
424
|
+
success: true
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
// No onFinish: we finalize after the stream completes below.
|
|
430
|
+
stopWhen: stepCountIs(maxSteps),
|
|
431
|
+
...includeMaxOutputTokens ? { maxOutputTokens } : {},
|
|
432
|
+
...temperature !== void 0 && { temperature }
|
|
433
|
+
});
|
|
434
|
+
const [finalText, usage, reasoningText] = await Promise.all([
|
|
435
|
+
response.text,
|
|
436
|
+
response.totalUsage,
|
|
437
|
+
response.reasoningText
|
|
438
|
+
]);
|
|
439
|
+
response.totalUsage;
|
|
440
|
+
if (streamErr) {
|
|
441
|
+
return "";
|
|
442
|
+
}
|
|
443
|
+
this.sessionEventBus.emit("llmservice:response", {
|
|
444
|
+
content: finalText,
|
|
445
|
+
...reasoningText && { reasoning: reasoningText },
|
|
446
|
+
provider: this.config.provider,
|
|
447
|
+
model: this.getModelId(),
|
|
448
|
+
router: "vercel",
|
|
449
|
+
tokenUsage: {
|
|
450
|
+
...usage.inputTokens !== void 0 && { inputTokens: usage.inputTokens },
|
|
451
|
+
...usage.outputTokens !== void 0 && { outputTokens: usage.outputTokens },
|
|
452
|
+
...usage.reasoningTokens !== void 0 && {
|
|
453
|
+
reasoningTokens: usage.reasoningTokens
|
|
454
|
+
},
|
|
455
|
+
...usage.totalTokens !== void 0 && { totalTokens: usage.totalTokens }
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
if (typeof usage.totalTokens === "number") {
|
|
459
|
+
this.contextManager.updateActualTokenCount(usage.totalTokens);
|
|
460
|
+
}
|
|
461
|
+
await this.contextManager.processLLMStreamResponse(response);
|
|
462
|
+
logger.silly(`streamText response object: ${JSON.stringify(response, null, 2)}`);
|
|
463
|
+
return finalText;
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Get configuration information about the LLM service
|
|
467
|
+
* @returns Configuration object with provider and model information
|
|
468
|
+
*/
|
|
469
|
+
getConfig() {
|
|
470
|
+
const configuredMaxTokens = this.contextManager.getMaxInputTokens();
|
|
471
|
+
let modelMaxInputTokens;
|
|
472
|
+
try {
|
|
473
|
+
modelMaxInputTokens = getMaxInputTokensForModel(
|
|
474
|
+
this.config.provider,
|
|
475
|
+
// Use our internal provider name
|
|
476
|
+
this.getModelId()
|
|
477
|
+
);
|
|
478
|
+
} catch (error) {
|
|
479
|
+
if (error instanceof DextoRuntimeError && error.code === LLMErrorCode.MODEL_UNKNOWN) {
|
|
480
|
+
modelMaxInputTokens = configuredMaxTokens;
|
|
481
|
+
logger.debug(
|
|
482
|
+
`Could not find model ${this.getModelId()} in LLM registry to get max tokens. Using configured max tokens: ${configuredMaxTokens}.`
|
|
483
|
+
);
|
|
484
|
+
} else {
|
|
485
|
+
throw error;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
return {
|
|
489
|
+
router: "vercel",
|
|
490
|
+
provider: this.config.provider,
|
|
491
|
+
// Use our internal provider name
|
|
492
|
+
model: this.model,
|
|
493
|
+
configuredMaxInputTokens: configuredMaxTokens,
|
|
494
|
+
modelMaxInputTokens
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Get the context manager for external access
|
|
499
|
+
*/
|
|
500
|
+
getContextManager() {
|
|
501
|
+
return this.contextManager;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
export {
|
|
505
|
+
VercelLLMService
|
|
506
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
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
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ITokenizer } from './types.cjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Placeholder tokenizer for Anthropic models.
|
|
5
|
+
* Uses a rough approximation based on character count.
|
|
6
|
+
* TODO: IMPORTANT: This is not accurate and should be replaced
|
|
7
|
+
* with a better implementation or official library when available.
|
|
8
|
+
*/
|
|
9
|
+
declare class AnthropicTokenizer implements ITokenizer {
|
|
10
|
+
/**
|
|
11
|
+
* TODO: Replace with a better implementation for anthropic
|
|
12
|
+
* Approximates token count for Anthropic models.
|
|
13
|
+
* Assumes roughly 4 characters per token.
|
|
14
|
+
* @param text Text content to count tokens for
|
|
15
|
+
* @returns Approximate number of tokens
|
|
16
|
+
*/
|
|
17
|
+
countTokens(text: string): number;
|
|
18
|
+
getProviderName(): string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { AnthropicTokenizer };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ITokenizer } from './types.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Placeholder tokenizer for Anthropic models.
|
|
5
|
+
* Uses a rough approximation based on character count.
|
|
6
|
+
* TODO: IMPORTANT: This is not accurate and should be replaced
|
|
7
|
+
* with a better implementation or official library when available.
|
|
8
|
+
*/
|
|
9
|
+
declare class AnthropicTokenizer implements ITokenizer {
|
|
10
|
+
/**
|
|
11
|
+
* TODO: Replace with a better implementation for anthropic
|
|
12
|
+
* Approximates token count for Anthropic models.
|
|
13
|
+
* Assumes roughly 4 characters per token.
|
|
14
|
+
* @param text Text content to count tokens for
|
|
15
|
+
* @returns Approximate number of tokens
|
|
16
|
+
*/
|
|
17
|
+
countTokens(text: string): number;
|
|
18
|
+
getProviderName(): string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { AnthropicTokenizer };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
class AnthropicTokenizer {
|
|
2
|
+
/**
|
|
3
|
+
* TODO: Replace with a better implementation for anthropic
|
|
4
|
+
* Approximates token count for Anthropic models.
|
|
5
|
+
* Assumes roughly 4 characters per token.
|
|
6
|
+
* @param text Text content to count tokens for
|
|
7
|
+
* @returns Approximate number of tokens
|
|
8
|
+
*/
|
|
9
|
+
countTokens(text) {
|
|
10
|
+
if (!text) return 0;
|
|
11
|
+
return Math.ceil(text.length / 4);
|
|
12
|
+
}
|
|
13
|
+
getProviderName() {
|
|
14
|
+
return "anthropic";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
AnthropicTokenizer
|
|
19
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
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 default_exports = {};
|
|
20
|
+
__export(default_exports, {
|
|
21
|
+
DefaultTokenizer: () => DefaultTokenizer
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(default_exports);
|
|
24
|
+
class DefaultTokenizer {
|
|
25
|
+
/**
|
|
26
|
+
* Assumes roughly 4 characters per token.
|
|
27
|
+
* @param text Text content to count tokens for
|
|
28
|
+
* @returns Approximate number of tokens
|
|
29
|
+
*/
|
|
30
|
+
countTokens(text) {
|
|
31
|
+
if (!text) return 0;
|
|
32
|
+
return Math.ceil(text.length / 4);
|
|
33
|
+
}
|
|
34
|
+
getProviderName() {
|
|
35
|
+
return "default";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
39
|
+
0 && (module.exports = {
|
|
40
|
+
DefaultTokenizer
|
|
41
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ITokenizer } from './types.cjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Placeholder tokenizer for unknown models
|
|
5
|
+
*/
|
|
6
|
+
declare class DefaultTokenizer implements ITokenizer {
|
|
7
|
+
/**
|
|
8
|
+
* Assumes roughly 4 characters per token.
|
|
9
|
+
* @param text Text content to count tokens for
|
|
10
|
+
* @returns Approximate number of tokens
|
|
11
|
+
*/
|
|
12
|
+
countTokens(text: string): number;
|
|
13
|
+
getProviderName(): string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { DefaultTokenizer };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ITokenizer } from './types.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Placeholder tokenizer for unknown models
|
|
5
|
+
*/
|
|
6
|
+
declare class DefaultTokenizer implements ITokenizer {
|
|
7
|
+
/**
|
|
8
|
+
* Assumes roughly 4 characters per token.
|
|
9
|
+
* @param text Text content to count tokens for
|
|
10
|
+
* @returns Approximate number of tokens
|
|
11
|
+
*/
|
|
12
|
+
countTokens(text: string): number;
|
|
13
|
+
getProviderName(): string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { DefaultTokenizer };
|