@vybestack/llxprt-code-core 0.1.15 → 0.1.16
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 +37 -2
- package/dist/src/code_assist/converter.d.ts +2 -1
- package/dist/src/code_assist/converter.js +2 -1
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/converter.test.js +13 -10
- package/dist/src/code_assist/converter.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +2 -2
- package/dist/src/code_assist/server.js +4 -4
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +9 -9
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.js +1 -1
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +2 -2
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/config/config.d.ts +22 -4
- package/dist/src/config/config.js +58 -10
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +28 -0
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/flashFallback.test.js +11 -1
- package/dist/src/config/flashFallback.test.js.map +1 -1
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/profileManager.d.ts +42 -0
- package/dist/src/config/profileManager.js +114 -0
- package/dist/src/config/profileManager.js.map +1 -0
- package/dist/src/core/client.d.ts +11 -1
- package/dist/src/core/client.js +86 -30
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.d.ts +1 -1
- package/dist/src/core/client.test.js +95 -28
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +2 -2
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/coreToolScheduler.js +39 -15
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +14 -17
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.js +34 -2
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +2 -2
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.js +11 -3
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +5 -2
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts-async.test.d.ts +6 -0
- package/dist/src/core/prompts-async.test.js +115 -0
- package/dist/src/core/prompts-async.test.js.map +1 -0
- package/dist/src/core/prompts.d.ts +8 -1
- package/dist/src/core/prompts.js +97 -377
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +46 -192
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/tokenLimits.d.ts +1 -1
- package/dist/src/core/tokenLimits.js +5 -1
- package/dist/src/core/tokenLimits.js.map +1 -1
- package/dist/src/core/turn.d.ts +3 -0
- package/dist/src/core/turn.js +3 -0
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/ide/detect-ide.d.ts +10 -0
- package/dist/src/ide/detect-ide.js +24 -0
- package/dist/src/ide/detect-ide.js.map +1 -0
- package/dist/src/ide/ide-client.d.ts +11 -1
- package/dist/src/ide/ide-client.js +37 -1
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-installer.d.ts +15 -0
- package/dist/src/ide/ide-installer.js +111 -0
- package/dist/src/ide/ide-installer.js.map +1 -0
- package/dist/src/ide/ide-installer.test.d.ts +6 -0
- package/dist/src/ide/ide-installer.test.js +78 -0
- package/dist/src/ide/ide-installer.test.js.map +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.js +11 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.js +3 -3
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +9 -8
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/parsers/TextToolCallParser.d.ts +1 -0
- package/dist/src/parsers/TextToolCallParser.js +45 -3
- package/dist/src/parsers/TextToolCallParser.js.map +1 -1
- package/dist/src/parsers/TextToolCallParser.multibyte.test.d.ts +1 -0
- package/dist/src/parsers/TextToolCallParser.multibyte.test.js +42 -0
- package/dist/src/parsers/TextToolCallParser.multibyte.test.js.map +1 -0
- package/dist/src/prompt-config/TemplateEngine.d.ts +35 -0
- package/dist/src/prompt-config/TemplateEngine.js +149 -0
- package/dist/src/prompt-config/TemplateEngine.js.map +1 -0
- package/dist/src/prompt-config/TemplateEngine.test.d.ts +1 -0
- package/dist/src/prompt-config/TemplateEngine.test.js +494 -0
- package/dist/src/prompt-config/TemplateEngine.test.js.map +1 -0
- package/dist/src/prompt-config/defaults/compression.md +58 -0
- package/dist/src/prompt-config/defaults/core-defaults.d.ts +5 -0
- package/dist/src/prompt-config/defaults/core-defaults.js +332 -0
- package/dist/src/prompt-config/defaults/core-defaults.js.map +1 -0
- package/dist/src/prompt-config/defaults/core.md +267 -0
- package/dist/src/prompt-config/defaults/env/git-repository.md +15 -0
- package/dist/src/prompt-config/defaults/env/ide-mode.md +3 -0
- package/dist/src/prompt-config/defaults/env/macos-seatbelt.md +3 -0
- package/dist/src/prompt-config/defaults/env/outside-of-sandbox.md +3 -0
- package/dist/src/prompt-config/defaults/env/sandbox.md +3 -0
- package/dist/src/prompt-config/defaults/index.d.ts +14 -0
- package/dist/src/prompt-config/defaults/index.js +21 -0
- package/dist/src/prompt-config/defaults/index.js.map +1 -0
- package/dist/src/prompt-config/defaults/provider-defaults.d.ts +5 -0
- package/dist/src/prompt-config/defaults/provider-defaults.js +26 -0
- package/dist/src/prompt-config/defaults/provider-defaults.js.map +1 -0
- package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/core.md +10 -0
- package/dist/src/prompt-config/defaults/service-defaults.d.ts +5 -0
- package/dist/src/prompt-config/defaults/service-defaults.js +52 -0
- package/dist/src/prompt-config/defaults/service-defaults.js.map +1 -0
- package/dist/src/prompt-config/defaults/tool-defaults.d.ts +5 -0
- package/dist/src/prompt-config/defaults/tool-defaults.js +81 -0
- package/dist/src/prompt-config/defaults/tool-defaults.js.map +1 -0
- package/dist/src/prompt-config/defaults/tools/edit.md +2 -0
- package/dist/src/prompt-config/defaults/tools/glob.md +2 -0
- package/dist/src/prompt-config/defaults/tools/grep.md +2 -0
- package/dist/src/prompt-config/defaults/tools/ls.md +1 -0
- package/dist/src/prompt-config/defaults/tools/memory.md +1 -0
- package/dist/src/prompt-config/defaults/tools/read-file.md +4 -0
- package/dist/src/prompt-config/defaults/tools/read-many-files.md +2 -0
- package/dist/src/prompt-config/defaults/tools/shell.md +5 -0
- package/dist/src/prompt-config/defaults/tools/todo-read.md +3 -0
- package/dist/src/prompt-config/defaults/tools/todo-write.md +50 -0
- package/dist/src/prompt-config/defaults/tools/web-fetch.md +3 -0
- package/dist/src/prompt-config/defaults/tools/web-search.md +3 -0
- package/dist/src/prompt-config/defaults/tools/write-file.md +4 -0
- package/dist/src/prompt-config/index.d.ts +16 -0
- package/dist/src/prompt-config/index.js +11 -0
- package/dist/src/prompt-config/index.js.map +1 -0
- package/dist/src/prompt-config/prompt-cache.d.ts +72 -0
- package/dist/src/prompt-config/prompt-cache.js +271 -0
- package/dist/src/prompt-config/prompt-cache.js.map +1 -0
- package/dist/src/prompt-config/prompt-cache.test.d.ts +6 -0
- package/dist/src/prompt-config/prompt-cache.test.js +437 -0
- package/dist/src/prompt-config/prompt-cache.test.js.map +1 -0
- package/dist/src/prompt-config/prompt-installer.d.ts +118 -0
- package/dist/src/prompt-config/prompt-installer.js +723 -0
- package/dist/src/prompt-config/prompt-installer.js.map +1 -0
- package/dist/src/prompt-config/prompt-installer.test.d.ts +7 -0
- package/dist/src/prompt-config/prompt-installer.test.js +503 -0
- package/dist/src/prompt-config/prompt-installer.test.js.map +1 -0
- package/dist/src/prompt-config/prompt-loader.d.ts +49 -0
- package/dist/src/prompt-config/prompt-loader.js +331 -0
- package/dist/src/prompt-config/prompt-loader.js.map +1 -0
- package/dist/src/prompt-config/prompt-loader.test.d.ts +5 -0
- package/dist/src/prompt-config/prompt-loader.test.js +413 -0
- package/dist/src/prompt-config/prompt-loader.test.js.map +1 -0
- package/dist/src/prompt-config/prompt-resolver.d.ts +74 -0
- package/dist/src/prompt-config/prompt-resolver.js +600 -0
- package/dist/src/prompt-config/prompt-resolver.js.map +1 -0
- package/dist/src/prompt-config/prompt-resolver.test.d.ts +1 -0
- package/dist/src/prompt-config/prompt-resolver.test.js +529 -0
- package/dist/src/prompt-config/prompt-resolver.test.js.map +1 -0
- package/dist/src/prompt-config/prompt-service.d.ts +108 -0
- package/dist/src/prompt-config/prompt-service.js +435 -0
- package/dist/src/prompt-config/prompt-service.js.map +1 -0
- package/dist/src/prompt-config/prompt-service.test.d.ts +1 -0
- package/dist/src/prompt-config/prompt-service.test.js +811 -0
- package/dist/src/prompt-config/prompt-service.test.js.map +1 -0
- package/dist/src/prompt-config/types.d.ts +30 -0
- package/dist/src/prompt-config/types.js +10 -0
- package/dist/src/prompt-config/types.js.map +1 -0
- package/dist/src/providers/IProvider.d.ts +10 -0
- package/dist/src/providers/anthropic/AnthropicProvider.d.ts +14 -1
- package/dist/src/providers/anthropic/AnthropicProvider.js +28 -2
- package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
- package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.d.ts +1 -0
- package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js +48 -0
- package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js.map +1 -0
- package/dist/src/providers/anthropic/AnthropicProvider.test.js +2 -1
- package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.d.ts +11 -2
- package/dist/src/providers/gemini/GeminiProvider.integration.test.js +1 -1
- package/dist/src/providers/gemini/GeminiProvider.js +34 -9
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.d.ts +11 -0
- package/dist/src/providers/openai/OpenAIProvider.js +100 -31
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.responses.test.js +27 -3
- package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +2 -1
- package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.test.js +307 -7
- package/dist/src/providers/openai/OpenAIProvider.test.js.map +1 -1
- package/dist/src/providers/openai/buildResponsesRequest.js +19 -2
- package/dist/src/providers/openai/buildResponsesRequest.js.map +1 -1
- package/dist/src/providers/test-utils/providerTestConfig.d.ts +21 -0
- package/dist/src/providers/test-utils/providerTestConfig.js +23 -0
- package/dist/src/providers/test-utils/providerTestConfig.js.map +1 -0
- package/dist/src/providers/types/IProviderConfig.d.ts +6 -0
- package/dist/src/services/loopDetectionService.d.ts +9 -0
- package/dist/src/services/loopDetectionService.js +44 -12
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.d.ts +1 -37
- package/dist/src/services/shellExecutionService.js +24 -55
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/{providers/IProviderConfig.js → services/shellExecutionService.multibyte.test.d.ts} +0 -1
- package/dist/src/services/shellExecutionService.multibyte.test.js +72 -0
- package/dist/src/services/shellExecutionService.multibyte.test.js.map +1 -0
- package/dist/src/services/shellExecutionService.test.js +11 -5
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.windows.multibyte.test.d.ts +6 -0
- package/dist/src/services/shellExecutionService.windows.multibyte.test.js +98 -0
- package/dist/src/services/shellExecutionService.windows.multibyte.test.js.map +1 -0
- package/dist/src/services/shellExecutionService.windows.test.d.ts +6 -0
- package/dist/src/services/shellExecutionService.windows.test.js +79 -0
- package/dist/src/services/shellExecutionService.windows.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +3 -2
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +22 -3
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +12 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/constants.d.ts +1 -1
- package/dist/src/telemetry/constants.js +1 -1
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/file-exporters.d.ts +2 -2
- package/dist/src/telemetry/file-exporters.js +47 -20
- package/dist/src/telemetry/file-exporters.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +2 -2
- package/dist/src/telemetry/loggers.js +13 -6
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.js +2 -0
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +8 -3
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/sdk.d.ts +1 -1
- package/dist/src/telemetry/sdk.js +71 -73
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/telemetry.test.js +7 -5
- package/dist/src/telemetry/telemetry.test.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +12 -4
- package/dist/src/telemetry/types.js +18 -4
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +3 -0
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/mockWorkspaceContext.d.ts +13 -0
- package/dist/src/test-utils/mockWorkspaceContext.js +24 -0
- package/dist/src/test-utils/mockWorkspaceContext.js.map +1 -0
- package/dist/src/tools/edit.js +27 -3
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +104 -1
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.js +53 -17
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +25 -2
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +1 -1
- package/dist/src/tools/grep.js +81 -29
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +72 -5
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.js +4 -3
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.d.ts +6 -0
- package/dist/src/tools/ls.test.js +356 -0
- package/dist/src/tools/ls.test.js.map +1 -0
- package/dist/src/tools/mcp-client.js +8 -3
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +34 -0
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +17 -2
- package/dist/src/tools/memoryTool.js +130 -13
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +88 -3
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/read-file.js +8 -6
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +30 -2
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.js +22 -12
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +35 -2
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/shell.js +16 -0
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.multibyte.test.d.ts +6 -0
- package/dist/src/tools/shell.multibyte.test.js +74 -0
- package/dist/src/tools/shell.multibyte.test.js.map +1 -0
- package/dist/src/tools/shell.test.js +33 -1
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-error.d.ts +22 -0
- package/dist/src/tools/tool-error.js +27 -0
- package/dist/src/tools/tool-error.js.map +1 -0
- package/dist/src/tools/tool-registry.test.js +8 -0
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +8 -0
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/write-file.js +5 -3
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +36 -2
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/types/modelParams.d.ts +62 -0
- package/dist/src/types/modelParams.js +7 -0
- package/dist/src/types/modelParams.js.map +1 -0
- package/dist/src/utils/bfsFileSearch.test.js +4 -2
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
- package/dist/src/utils/editCorrector.js +2 -2
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editor.d.ts +1 -1
- package/dist/src/utils/editor.js +9 -0
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +21 -1
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/fileUtils.js +12 -1
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +29 -1
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/flashFallback.integration.test.js +8 -0
- package/dist/src/utils/flashFallback.integration.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +1 -1
- package/dist/src/utils/memoryDiscovery.js +61 -73
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +4 -3
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.d.ts +19 -12
- package/dist/src/utils/memoryImportProcessor.js +241 -82
- package/dist/src/utils/memoryImportProcessor.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.test.js +595 -50
- package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.js +10 -25
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.test.js +6 -2
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
- package/dist/src/utils/sanitization.d.ts +20 -0
- package/dist/src/utils/sanitization.js +66 -0
- package/dist/src/utils/sanitization.js.map +1 -0
- package/dist/src/utils/sanitization.test.d.ts +6 -0
- package/dist/src/utils/sanitization.test.js +81 -0
- package/dist/src/utils/sanitization.test.js.map +1 -0
- package/dist/src/utils/secure-browser-launcher.d.ts +23 -0
- package/dist/src/utils/secure-browser-launcher.js +164 -0
- package/dist/src/utils/secure-browser-launcher.js.map +1 -0
- package/dist/src/utils/secure-browser-launcher.test.d.ts +6 -0
- package/dist/src/utils/secure-browser-launcher.test.js +149 -0
- package/dist/src/utils/secure-browser-launcher.test.js.map +1 -0
- package/dist/src/utils/summarizer.js +2 -2
- package/dist/src/utils/summarizer.js.map +1 -1
- package/dist/src/utils/unicodeUtils.d.ts +44 -0
- package/dist/src/utils/unicodeUtils.js +93 -0
- package/dist/src/utils/unicodeUtils.js.map +1 -0
- package/dist/src/utils/unicodeUtils.test.d.ts +6 -0
- package/dist/src/utils/unicodeUtils.test.js +120 -0
- package/dist/src/utils/unicodeUtils.test.js.map +1 -0
- package/dist/src/utils/workspaceContext.d.ts +47 -0
- package/dist/src/utils/workspaceContext.js +106 -0
- package/dist/src/utils/workspaceContext.js.map +1 -0
- package/dist/src/utils/workspaceContext.test.d.ts +6 -0
- package/dist/src/utils/workspaceContext.test.js +209 -0
- package/dist/src/utils/workspaceContext.test.js.map +1 -0
- package/package.json +2 -1
- package/dist/src/providers/IProviderConfig.d.ts +0 -31
- package/dist/src/providers/IProviderConfig.js.map +0 -1
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
17
17
|
import { OpenAIProvider } from './OpenAIProvider.js';
|
|
18
18
|
import { ContentGeneratorRole } from '../ContentGeneratorRole.js';
|
|
19
|
+
import { TEST_PROVIDER_CONFIG } from '../test-utils/providerTestConfig.js';
|
|
19
20
|
// Mock OpenAI module
|
|
20
21
|
vi.mock('openai', () => ({
|
|
21
22
|
default: vi.fn().mockImplementation(() => ({
|
|
@@ -32,13 +33,16 @@ vi.mock('openai', () => ({
|
|
|
32
33
|
describe('OpenAIProvider', () => {
|
|
33
34
|
let provider;
|
|
34
35
|
let mockOpenAIInstance;
|
|
36
|
+
let capturedApiParams;
|
|
35
37
|
beforeEach(() => {
|
|
36
38
|
vi.clearAllMocks();
|
|
37
|
-
provider = new OpenAIProvider('test-api-key');
|
|
39
|
+
provider = new OpenAIProvider('test-api-key', undefined, TEST_PROVIDER_CONFIG);
|
|
38
40
|
// Set a model that doesn't use the Responses API
|
|
39
41
|
provider.setModel('gpt-3.5-turbo');
|
|
40
42
|
// Get the mocked OpenAI instance (typed as unknown then cast)
|
|
41
43
|
mockOpenAIInstance = provider.openai; // Cast for test
|
|
44
|
+
// Reset captured params
|
|
45
|
+
capturedApiParams = undefined;
|
|
42
46
|
});
|
|
43
47
|
describe('generateChatCompletion with usage tracking', () => {
|
|
44
48
|
it('should include stream_options with include_usage', async () => {
|
|
@@ -57,18 +61,22 @@ describe('OpenAIProvider', () => {
|
|
|
57
61
|
};
|
|
58
62
|
},
|
|
59
63
|
};
|
|
60
|
-
|
|
64
|
+
// Capture the parameters passed to the API
|
|
65
|
+
mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
|
|
66
|
+
capturedApiParams = params;
|
|
67
|
+
return mockStream;
|
|
68
|
+
});
|
|
61
69
|
const messages = [{ role: ContentGeneratorRole.USER, content: 'Hi' }];
|
|
62
70
|
const generator = provider.generateChatCompletion(messages);
|
|
63
71
|
const results = [];
|
|
64
72
|
for await (const chunk of generator) {
|
|
65
73
|
results.push(chunk);
|
|
66
74
|
}
|
|
67
|
-
//
|
|
68
|
-
expect(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
})
|
|
75
|
+
// Test the actual parameters that would be sent to the API
|
|
76
|
+
expect(capturedApiParams).toBeDefined();
|
|
77
|
+
const apiParams = capturedApiParams;
|
|
78
|
+
expect(apiParams.stream).toBe(true);
|
|
79
|
+
expect(apiParams.stream_options).toEqual({ include_usage: true });
|
|
72
80
|
});
|
|
73
81
|
it('should yield usage data when provided in stream', async () => {
|
|
74
82
|
const mockStream = {
|
|
@@ -210,5 +218,297 @@ describe('OpenAIProvider', () => {
|
|
|
210
218
|
expect(provider.baseURL).toBe(newUrl);
|
|
211
219
|
});
|
|
212
220
|
});
|
|
221
|
+
describe('model parameters functionality', () => {
|
|
222
|
+
describe('setting and getting model parameters', () => {
|
|
223
|
+
it('should store model parameters when set', () => {
|
|
224
|
+
// When I set model parameters
|
|
225
|
+
provider.setModelParams({ temperature: 0.7 });
|
|
226
|
+
// Then they should be retrievable
|
|
227
|
+
const params = provider.getModelParams();
|
|
228
|
+
expect(params).toEqual({ temperature: 0.7 });
|
|
229
|
+
});
|
|
230
|
+
it('should return undefined when no model parameters are set', () => {
|
|
231
|
+
// Given a fresh provider with no parameters set
|
|
232
|
+
const freshProvider = new OpenAIProvider('test-key', undefined, TEST_PROVIDER_CONFIG);
|
|
233
|
+
// When I get model parameters
|
|
234
|
+
const params = freshProvider.getModelParams();
|
|
235
|
+
// Then it should return undefined
|
|
236
|
+
expect(params).toBeUndefined();
|
|
237
|
+
});
|
|
238
|
+
it('should merge new parameters with existing ones instead of replacing', () => {
|
|
239
|
+
// Given I have set some initial parameters
|
|
240
|
+
provider.setModelParams({ temperature: 0.7, max_tokens: 1000 });
|
|
241
|
+
// When I set additional parameters
|
|
242
|
+
provider.setModelParams({ top_p: 0.9, temperature: 0.5 });
|
|
243
|
+
// Then all parameters should be merged with new values overriding old
|
|
244
|
+
const params = provider.getModelParams();
|
|
245
|
+
expect(params).toEqual({
|
|
246
|
+
temperature: 0.5, // Updated value
|
|
247
|
+
max_tokens: 1000, // Retained from first call
|
|
248
|
+
top_p: 0.9, // New parameter
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
it('should accept any parameter names without validation', () => {
|
|
252
|
+
// When I set various parameter types including unknown ones
|
|
253
|
+
provider.setModelParams({
|
|
254
|
+
temperature: 0.8,
|
|
255
|
+
max_tokens: 2048,
|
|
256
|
+
top_p: 0.95,
|
|
257
|
+
unknown_param: 'should_work',
|
|
258
|
+
nested_object: { key: 'value' },
|
|
259
|
+
numeric_string: '123',
|
|
260
|
+
});
|
|
261
|
+
// Then all parameters should be stored as-is
|
|
262
|
+
const params = provider.getModelParams();
|
|
263
|
+
expect(params).toEqual({
|
|
264
|
+
temperature: 0.8,
|
|
265
|
+
max_tokens: 2048,
|
|
266
|
+
top_p: 0.95,
|
|
267
|
+
unknown_param: 'should_work',
|
|
268
|
+
nested_object: { key: 'value' },
|
|
269
|
+
numeric_string: '123',
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
describe('passing parameters to OpenAI API', () => {
|
|
274
|
+
it('should include model parameters in chat completions API call', async () => {
|
|
275
|
+
// Given I have set model parameters
|
|
276
|
+
provider.setModelParams({
|
|
277
|
+
temperature: 0.7,
|
|
278
|
+
max_tokens: 2000,
|
|
279
|
+
top_p: 0.9,
|
|
280
|
+
});
|
|
281
|
+
// And the API returns a response
|
|
282
|
+
const mockStream = {
|
|
283
|
+
async *[Symbol.asyncIterator]() {
|
|
284
|
+
yield {
|
|
285
|
+
choices: [{ delta: { content: 'Response' } }],
|
|
286
|
+
};
|
|
287
|
+
},
|
|
288
|
+
};
|
|
289
|
+
// Capture the parameters passed to the API
|
|
290
|
+
let localCapturedParams;
|
|
291
|
+
mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
|
|
292
|
+
localCapturedParams = params;
|
|
293
|
+
return mockStream;
|
|
294
|
+
});
|
|
295
|
+
// When I generate a chat completion
|
|
296
|
+
const messages = [
|
|
297
|
+
{ role: ContentGeneratorRole.USER, content: 'Hello' },
|
|
298
|
+
];
|
|
299
|
+
const generator = provider.generateChatCompletion(messages);
|
|
300
|
+
const results = [];
|
|
301
|
+
for await (const chunk of generator) {
|
|
302
|
+
results.push(chunk);
|
|
303
|
+
}
|
|
304
|
+
// Then the API should receive the model parameters
|
|
305
|
+
expect(localCapturedParams).toBeDefined();
|
|
306
|
+
const apiParams = localCapturedParams;
|
|
307
|
+
expect(apiParams.temperature).toBe(0.7);
|
|
308
|
+
expect(apiParams.max_tokens).toBe(2000);
|
|
309
|
+
expect(apiParams.top_p).toBe(0.9);
|
|
310
|
+
expect(apiParams.model).toBe('gpt-3.5-turbo');
|
|
311
|
+
expect(apiParams.messages).toEqual(messages);
|
|
312
|
+
expect(apiParams.stream).toBe(true);
|
|
313
|
+
expect(apiParams.stream_options).toEqual({ include_usage: true });
|
|
314
|
+
});
|
|
315
|
+
it('should make API calls without parameters when none are set', async () => {
|
|
316
|
+
// Given no model parameters are set (fresh provider)
|
|
317
|
+
const freshProvider = new OpenAIProvider('test-key', undefined, TEST_PROVIDER_CONFIG);
|
|
318
|
+
freshProvider.setModel('gpt-3.5-turbo');
|
|
319
|
+
const freshMockInstance = freshProvider.openai;
|
|
320
|
+
// And the API returns a response
|
|
321
|
+
const mockStream = {
|
|
322
|
+
async *[Symbol.asyncIterator]() {
|
|
323
|
+
yield {
|
|
324
|
+
choices: [{ delta: { content: 'Response' } }],
|
|
325
|
+
};
|
|
326
|
+
},
|
|
327
|
+
};
|
|
328
|
+
// Capture the parameters passed to the API
|
|
329
|
+
let localCapturedParams;
|
|
330
|
+
freshMockInstance.chat.completions.create.mockImplementation(async (params) => {
|
|
331
|
+
localCapturedParams = params;
|
|
332
|
+
return mockStream;
|
|
333
|
+
});
|
|
334
|
+
// When I generate a chat completion
|
|
335
|
+
const messages = [
|
|
336
|
+
{ role: ContentGeneratorRole.USER, content: 'Hello' },
|
|
337
|
+
];
|
|
338
|
+
const generator = freshProvider.generateChatCompletion(messages);
|
|
339
|
+
const results = [];
|
|
340
|
+
for await (const chunk of generator) {
|
|
341
|
+
results.push(chunk);
|
|
342
|
+
}
|
|
343
|
+
// Then the API should be called without extra parameters
|
|
344
|
+
expect(localCapturedParams).toBeDefined();
|
|
345
|
+
const apiParams = localCapturedParams;
|
|
346
|
+
expect(apiParams).not.toHaveProperty('temperature');
|
|
347
|
+
expect(apiParams).not.toHaveProperty('max_tokens');
|
|
348
|
+
expect(apiParams).not.toHaveProperty('top_p');
|
|
349
|
+
});
|
|
350
|
+
it('should pass multiple model parameters correctly to the API', async () => {
|
|
351
|
+
// Given I have set multiple diverse parameters
|
|
352
|
+
provider.setModelParams({
|
|
353
|
+
temperature: 0.5,
|
|
354
|
+
max_tokens: 4096,
|
|
355
|
+
top_p: 0.95,
|
|
356
|
+
presence_penalty: 0.1,
|
|
357
|
+
frequency_penalty: 0.2,
|
|
358
|
+
seed: 12345,
|
|
359
|
+
});
|
|
360
|
+
// And the API returns a response
|
|
361
|
+
const mockStream = {
|
|
362
|
+
async *[Symbol.asyncIterator]() {
|
|
363
|
+
yield {
|
|
364
|
+
choices: [{ delta: { content: 'Response' } }],
|
|
365
|
+
};
|
|
366
|
+
},
|
|
367
|
+
};
|
|
368
|
+
// Capture the parameters passed to the API
|
|
369
|
+
let localCapturedParams;
|
|
370
|
+
mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
|
|
371
|
+
localCapturedParams = params;
|
|
372
|
+
return mockStream;
|
|
373
|
+
});
|
|
374
|
+
// When I generate a chat completion
|
|
375
|
+
const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
|
|
376
|
+
const generator = provider.generateChatCompletion(messages);
|
|
377
|
+
for await (const _chunk of generator) {
|
|
378
|
+
// consume the generator
|
|
379
|
+
}
|
|
380
|
+
// Then all parameters should be passed to the API
|
|
381
|
+
expect(localCapturedParams).toBeDefined();
|
|
382
|
+
const apiParams = localCapturedParams;
|
|
383
|
+
expect(apiParams.temperature).toBe(0.5);
|
|
384
|
+
expect(apiParams.max_tokens).toBe(4096);
|
|
385
|
+
expect(apiParams.top_p).toBe(0.95);
|
|
386
|
+
expect(apiParams.presence_penalty).toBe(0.1);
|
|
387
|
+
expect(apiParams.frequency_penalty).toBe(0.2);
|
|
388
|
+
expect(apiParams.seed).toBe(12345);
|
|
389
|
+
});
|
|
390
|
+
it('should pass unknown parameters through to the API without validation', async () => {
|
|
391
|
+
// Given I set parameters that might not be standard OpenAI params
|
|
392
|
+
provider.setModelParams({
|
|
393
|
+
custom_param: 'custom_value',
|
|
394
|
+
experimental_feature: true,
|
|
395
|
+
vendor_specific: { nested: 'data' },
|
|
396
|
+
});
|
|
397
|
+
// And the API returns a response
|
|
398
|
+
const mockStream = {
|
|
399
|
+
async *[Symbol.asyncIterator]() {
|
|
400
|
+
yield {
|
|
401
|
+
choices: [{ delta: { content: 'Response' } }],
|
|
402
|
+
};
|
|
403
|
+
},
|
|
404
|
+
};
|
|
405
|
+
// Capture the parameters passed to the API
|
|
406
|
+
let localCapturedParams;
|
|
407
|
+
mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
|
|
408
|
+
localCapturedParams = params;
|
|
409
|
+
return mockStream;
|
|
410
|
+
});
|
|
411
|
+
// When I generate a chat completion
|
|
412
|
+
const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
|
|
413
|
+
const generator = provider.generateChatCompletion(messages);
|
|
414
|
+
for await (const _chunk of generator) {
|
|
415
|
+
// consume the generator
|
|
416
|
+
}
|
|
417
|
+
// Then unknown parameters should be passed through
|
|
418
|
+
expect(localCapturedParams).toBeDefined();
|
|
419
|
+
const apiParams = localCapturedParams;
|
|
420
|
+
expect(apiParams.custom_param).toBe('custom_value');
|
|
421
|
+
expect(apiParams.experimental_feature).toBe(true);
|
|
422
|
+
expect(apiParams.vendor_specific).toEqual({ nested: 'data' });
|
|
423
|
+
});
|
|
424
|
+
it('should use model parameters across multiple API calls', async () => {
|
|
425
|
+
// Given I set model parameters once
|
|
426
|
+
provider.setModelParams({ temperature: 0.8 });
|
|
427
|
+
// And the API returns responses
|
|
428
|
+
const mockStream = {
|
|
429
|
+
async *[Symbol.asyncIterator]() {
|
|
430
|
+
yield {
|
|
431
|
+
choices: [{ delta: { content: 'Response' } }],
|
|
432
|
+
};
|
|
433
|
+
},
|
|
434
|
+
};
|
|
435
|
+
// Capture parameters from multiple calls
|
|
436
|
+
const capturedParamsArray = [];
|
|
437
|
+
mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
|
|
438
|
+
capturedParamsArray.push(params);
|
|
439
|
+
return mockStream;
|
|
440
|
+
});
|
|
441
|
+
// When I make multiple API calls
|
|
442
|
+
const messages = [
|
|
443
|
+
{ role: ContentGeneratorRole.USER, content: 'Hello' },
|
|
444
|
+
];
|
|
445
|
+
// First call
|
|
446
|
+
const generator1 = provider.generateChatCompletion(messages);
|
|
447
|
+
for await (const _chunk of generator1) {
|
|
448
|
+
// consume
|
|
449
|
+
}
|
|
450
|
+
// Second call
|
|
451
|
+
const generator2 = provider.generateChatCompletion(messages);
|
|
452
|
+
for await (const _chunk of generator2) {
|
|
453
|
+
// consume
|
|
454
|
+
}
|
|
455
|
+
// Then both calls should include the parameters
|
|
456
|
+
expect(capturedParamsArray).toHaveLength(2);
|
|
457
|
+
const firstCallParams = capturedParamsArray[0];
|
|
458
|
+
const secondCallParams = capturedParamsArray[1];
|
|
459
|
+
expect(firstCallParams.temperature).toBe(0.8);
|
|
460
|
+
expect(secondCallParams.temperature).toBe(0.8);
|
|
461
|
+
});
|
|
462
|
+
it('should work correctly with common OpenAI parameters', async () => {
|
|
463
|
+
// Given I set common OpenAI parameters
|
|
464
|
+
provider.setModelParams({
|
|
465
|
+
temperature: 0.7, // Controls randomness
|
|
466
|
+
max_tokens: 2048, // Maximum response length
|
|
467
|
+
top_p: 0.9, // Nucleus sampling
|
|
468
|
+
presence_penalty: 0.5, // Penalize repeated topics
|
|
469
|
+
frequency_penalty: 0.3, // Penalize repeated tokens
|
|
470
|
+
});
|
|
471
|
+
// And the API returns a response
|
|
472
|
+
const mockStream = {
|
|
473
|
+
async *[Symbol.asyncIterator]() {
|
|
474
|
+
yield {
|
|
475
|
+
choices: [{ delta: { content: 'Creative response' } }],
|
|
476
|
+
};
|
|
477
|
+
},
|
|
478
|
+
};
|
|
479
|
+
// Capture the parameters passed to the API
|
|
480
|
+
let localCapturedParams;
|
|
481
|
+
mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
|
|
482
|
+
localCapturedParams = params;
|
|
483
|
+
return mockStream;
|
|
484
|
+
});
|
|
485
|
+
// When I generate a chat completion
|
|
486
|
+
const messages = [
|
|
487
|
+
{
|
|
488
|
+
role: ContentGeneratorRole.USER,
|
|
489
|
+
content: 'Write something creative',
|
|
490
|
+
},
|
|
491
|
+
];
|
|
492
|
+
const generator = provider.generateChatCompletion(messages);
|
|
493
|
+
const results = [];
|
|
494
|
+
for await (const chunk of generator) {
|
|
495
|
+
results.push(chunk);
|
|
496
|
+
}
|
|
497
|
+
// Then the response should be generated with all parameters
|
|
498
|
+
expect(results[0]).toMatchObject({
|
|
499
|
+
role: ContentGeneratorRole.ASSISTANT,
|
|
500
|
+
content: 'Creative response',
|
|
501
|
+
});
|
|
502
|
+
// And all parameters should have been passed to the API
|
|
503
|
+
expect(localCapturedParams).toBeDefined();
|
|
504
|
+
const apiParams = localCapturedParams;
|
|
505
|
+
expect(apiParams.temperature).toBe(0.7);
|
|
506
|
+
expect(apiParams.max_tokens).toBe(2048);
|
|
507
|
+
expect(apiParams.top_p).toBe(0.9);
|
|
508
|
+
expect(apiParams.presence_penalty).toBe(0.5);
|
|
509
|
+
expect(apiParams.frequency_penalty).toBe(0.3);
|
|
510
|
+
});
|
|
511
|
+
});
|
|
512
|
+
});
|
|
213
513
|
});
|
|
214
514
|
//# sourceMappingURL=OpenAIProvider.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAIProvider.test.js","sourceRoot":"","sources":["../../../../src/providers/openai/OpenAIProvider.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OpenAIProvider.test.js","sourceRoot":"","sources":["../../../../src/providers/openai/OpenAIProvider.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ensureJsonSafe, hasUnicodeReplacements, } from '../../utils/unicodeUtils.js';
|
|
1
2
|
const MAX_TOOLS = 16;
|
|
2
3
|
const MAX_JSON_SIZE_KB = 32;
|
|
3
4
|
export function buildResponsesRequest(params) {
|
|
@@ -85,10 +86,18 @@ export function buildResponsesRequest(params) {
|
|
|
85
86
|
}
|
|
86
87
|
// Extract function call outputs from tool messages
|
|
87
88
|
if (msg.role === 'tool' && msg.tool_call_id && msg.content) {
|
|
89
|
+
// Sanitize content to ensure it's safe for JSON/API transmission
|
|
90
|
+
let sanitizedContent = msg.content;
|
|
91
|
+
if (hasUnicodeReplacements(msg.content)) {
|
|
92
|
+
if (process.env.DEBUG) {
|
|
93
|
+
console.warn('[buildResponsesRequest] Tool output contains Unicode replacement characters (U+FFFD), sanitizing...');
|
|
94
|
+
}
|
|
95
|
+
sanitizedContent = ensureJsonSafe(msg.content);
|
|
96
|
+
}
|
|
88
97
|
functionCallOutputs.push({
|
|
89
98
|
type: 'function_call_output',
|
|
90
99
|
call_id: msg.tool_call_id,
|
|
91
|
-
output:
|
|
100
|
+
output: sanitizedContent,
|
|
92
101
|
});
|
|
93
102
|
}
|
|
94
103
|
});
|
|
@@ -101,9 +110,17 @@ export function buildResponsesRequest(params) {
|
|
|
101
110
|
const { tool_calls: _tool_calls, tool_call_id: _tool_call_id, usage, ...cleanMsg } = msg;
|
|
102
111
|
// Ensure role is valid for Responses API
|
|
103
112
|
const validRole = cleanMsg.role;
|
|
113
|
+
// Sanitize content for safe API transmission
|
|
114
|
+
let sanitizedContent = cleanMsg.content;
|
|
115
|
+
if (hasUnicodeReplacements(cleanMsg.content)) {
|
|
116
|
+
if (process.env.DEBUG) {
|
|
117
|
+
console.warn(`[buildResponsesRequest] Message content contains Unicode replacement characters (U+FFFD), sanitizing...`);
|
|
118
|
+
}
|
|
119
|
+
sanitizedContent = ensureJsonSafe(cleanMsg.content);
|
|
120
|
+
}
|
|
104
121
|
return {
|
|
105
122
|
role: validRole,
|
|
106
|
-
content:
|
|
123
|
+
content: sanitizedContent,
|
|
107
124
|
...(usage ? { usage } : {}), // Preserve usage data if present
|
|
108
125
|
};
|
|
109
126
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildResponsesRequest.js","sourceRoot":"","sources":["../../../../src/providers/openai/buildResponsesRequest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buildResponsesRequest.js","sourceRoot":"","sources":["../../../../src/providers/openai/buildResponsesRequest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2025 Vybestack LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { IProviderConfig } from '../types/IProviderConfig.js';
|
|
17
|
+
/**
|
|
18
|
+
* Test configuration for providers that allows browser environment
|
|
19
|
+
* for jsdom testing environments.
|
|
20
|
+
*/
|
|
21
|
+
export declare const TEST_PROVIDER_CONFIG: IProviderConfig;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2025 Vybestack LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Test configuration for providers that allows browser environment
|
|
18
|
+
* for jsdom testing environments.
|
|
19
|
+
*/
|
|
20
|
+
export const TEST_PROVIDER_CONFIG = {
|
|
21
|
+
allowBrowserEnvironment: true,
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=providerTestConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerTestConfig.js","sourceRoot":"","sources":["../../../../src/providers/test-utils/providerTestConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAoB;IACnD,uBAAuB,EAAE,IAAI;CAC9B,CAAC"}
|
|
@@ -99,4 +99,10 @@ export interface IProviderConfig {
|
|
|
99
99
|
* This allows for flexibility when different providers need unique settings.
|
|
100
100
|
*/
|
|
101
101
|
providerSpecific?: Record<string, unknown>;
|
|
102
|
+
/**
|
|
103
|
+
* Whether to allow browser environment for the provider client.
|
|
104
|
+
* This is typically needed for testing environments that use jsdom.
|
|
105
|
+
* Defaults to false for security reasons.
|
|
106
|
+
*/
|
|
107
|
+
allowBrowserEnvironment?: boolean;
|
|
102
108
|
}
|
|
@@ -12,6 +12,7 @@ import { Config } from '../config/config.js';
|
|
|
12
12
|
export declare class LoopDetectionService {
|
|
13
13
|
private readonly config;
|
|
14
14
|
private promptId;
|
|
15
|
+
private promptService;
|
|
15
16
|
private lastToolCallKey;
|
|
16
17
|
private toolCallRepetitionCount;
|
|
17
18
|
private streamContentHistory;
|
|
@@ -23,6 +24,14 @@ export declare class LoopDetectionService {
|
|
|
23
24
|
private llmCheckInterval;
|
|
24
25
|
private lastCheckTurn;
|
|
25
26
|
constructor(config: Config);
|
|
27
|
+
/**
|
|
28
|
+
* Get the loop detection prompt from the prompt service
|
|
29
|
+
*/
|
|
30
|
+
private getLoopDetectionPrompt;
|
|
31
|
+
/**
|
|
32
|
+
* Fallback prompt if the prompt service is not available
|
|
33
|
+
*/
|
|
34
|
+
private getFallbackLoopDetectionPrompt;
|
|
26
35
|
private getToolCallKey;
|
|
27
36
|
/**
|
|
28
37
|
* Processes a stream event and checks for loop conditions.
|
|
@@ -9,6 +9,9 @@ import { logLoopDetected } from '../telemetry/loggers.js';
|
|
|
9
9
|
import { LoopDetectedEvent, LoopType } from '../telemetry/types.js';
|
|
10
10
|
import { DEFAULT_GEMINI_FLASH_MODEL } from '../config/config.js';
|
|
11
11
|
import { Type } from '@google/genai';
|
|
12
|
+
import { PromptService } from '../prompt-config/prompt-service.js';
|
|
13
|
+
import path from 'node:path';
|
|
14
|
+
import os from 'node:os';
|
|
12
15
|
const TOOL_CALL_LOOP_THRESHOLD = 10;
|
|
13
16
|
const CONTENT_LOOP_THRESHOLD = 15;
|
|
14
17
|
const CONTENT_CHUNK_SIZE = 50;
|
|
@@ -43,6 +46,7 @@ const MAX_LLM_CHECK_INTERVAL = 15;
|
|
|
43
46
|
export class LoopDetectionService {
|
|
44
47
|
config;
|
|
45
48
|
promptId = '';
|
|
49
|
+
promptService = null;
|
|
46
50
|
// Tool call tracking
|
|
47
51
|
lastToolCallKey = null;
|
|
48
52
|
toolCallRepetitionCount = 0;
|
|
@@ -59,6 +63,45 @@ export class LoopDetectionService {
|
|
|
59
63
|
constructor(config) {
|
|
60
64
|
this.config = config;
|
|
61
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Get the loop detection prompt from the prompt service
|
|
68
|
+
*/
|
|
69
|
+
async getLoopDetectionPrompt() {
|
|
70
|
+
if (!this.promptService) {
|
|
71
|
+
const baseDir = process.env.LLXPRT_PROMPTS_DIR ||
|
|
72
|
+
path.join(os.homedir(), '.llxprt', 'prompts');
|
|
73
|
+
this.promptService = new PromptService({
|
|
74
|
+
baseDir,
|
|
75
|
+
debugMode: process.env.DEBUG === 'true',
|
|
76
|
+
});
|
|
77
|
+
await this.promptService.initialize();
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
return await this.promptService.loadPrompt('services/loop-detection.md');
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
// Fall back to default if file loading fails
|
|
84
|
+
console.warn('Failed to load loop detection prompt from file, using fallback:', error);
|
|
85
|
+
return this.getFallbackLoopDetectionPrompt();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Fallback prompt if the prompt service is not available
|
|
90
|
+
*/
|
|
91
|
+
getFallbackLoopDetectionPrompt() {
|
|
92
|
+
return `You are a sophisticated AI diagnostic agent specializing in identifying when a conversational AI is stuck in an unproductive state. Your task is to analyze the provided conversation history and determine if the assistant has ceased to make meaningful progress.
|
|
93
|
+
|
|
94
|
+
An unproductive state is characterized by one or more of the following patterns over the last 5 or more assistant turns:
|
|
95
|
+
|
|
96
|
+
Repetitive Actions: The assistant repeats the same tool calls or conversational responses a decent number of times. This includes simple loops (e.g., tool_A, tool_A, tool_A) and alternating patterns (e.g., tool_A, tool_B, tool_A, tool_B, ...).
|
|
97
|
+
|
|
98
|
+
Cognitive Loop: The assistant seems unable to determine the next logical step. It might express confusion, repeatedly ask the same questions, or generate responses that don't logically follow from the previous turns, indicating it's stuck and not advancing the task.
|
|
99
|
+
|
|
100
|
+
Crucially, differentiate between a true unproductive state and legitimate, incremental progress.
|
|
101
|
+
For example, a series of 'tool_A' or 'tool_B' tool calls that make small, distinct changes to the same file (like adding docstrings to functions one by one) is considered forward progress and is NOT a loop. A loop would be repeatedly replacing the same text with the same content, or cycling between a small set of files with no net change.
|
|
102
|
+
|
|
103
|
+
Please analyze the conversation history to determine the possibility that the conversation is stuck in a repetitive, non-productive state.`;
|
|
104
|
+
}
|
|
62
105
|
getToolCallKey(toolCall) {
|
|
63
106
|
const argsString = JSON.stringify(toolCall.args);
|
|
64
107
|
const keyString = `${toolCall.name}:${argsString}`;
|
|
@@ -249,18 +292,7 @@ export class LoopDetectionService {
|
|
|
249
292
|
.getGeminiClient()
|
|
250
293
|
.getHistory()
|
|
251
294
|
.slice(-LLM_LOOP_CHECK_HISTORY_COUNT);
|
|
252
|
-
const prompt =
|
|
253
|
-
|
|
254
|
-
An unproductive state is characterized by one or more of the following patterns over the last 5 or more assistant turns:
|
|
255
|
-
|
|
256
|
-
Repetitive Actions: The assistant repeats the same tool calls or conversational responses a decent number of times. This includes simple loops (e.g., tool_A, tool_A, tool_A) and alternating patterns (e.g., tool_A, tool_B, tool_A, tool_B, ...).
|
|
257
|
-
|
|
258
|
-
Cognitive Loop: The assistant seems unable to determine the next logical step. It might express confusion, repeatedly ask the same questions, or generate responses that don't logically follow from the previous turns, indicating it's stuck and not advancing the task.
|
|
259
|
-
|
|
260
|
-
Crucially, differentiate between a true unproductive state and legitimate, incremental progress.
|
|
261
|
-
For example, a series of 'tool_A' or 'tool_B' tool calls that make small, distinct changes to the same file (like adding docstrings to functions one by one) is considered forward progress and is NOT a loop. A loop would be repeatedly replacing the same text with the same content, or cycling between a small set of files with no net change.
|
|
262
|
-
|
|
263
|
-
Please analyze the conversation history to determine the possibility that the conversation is stuck in a repetitive, non-productive state.`;
|
|
295
|
+
const prompt = await this.getLoopDetectionPrompt();
|
|
264
296
|
const contents = [
|
|
265
297
|
...recentHistory,
|
|
266
298
|
{ role: 'user', parts: [{ text: prompt }] },
|