@vybestack/llxprt-code-core 0.1.18-nightly.250811.b0db22c6 → 0.1.18-nightly.250812.12fa8ad2

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.
Files changed (485) hide show
  1. package/README.md +49 -2
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/auth/anthropic-device-flow.d.ts +53 -0
  6. package/dist/src/auth/anthropic-device-flow.js +208 -0
  7. package/dist/src/auth/anthropic-device-flow.js.map +1 -0
  8. package/dist/src/auth/token-store.js +11 -7
  9. package/dist/src/auth/token-store.js.map +1 -1
  10. package/dist/src/config/config.d.ts +7 -1
  11. package/dist/src/config/config.js +42 -4
  12. package/dist/src/config/config.js.map +1 -1
  13. package/dist/src/config/profileManager.d.ts +14 -4
  14. package/dist/src/config/profileManager.js +90 -11
  15. package/dist/src/config/profileManager.js.map +1 -1
  16. package/dist/src/core/contentGenerator.d.ts +2 -1
  17. package/dist/src/core/contentGenerator.js +1 -0
  18. package/dist/src/core/contentGenerator.js.map +1 -1
  19. package/dist/src/index.d.ts +6 -0
  20. package/dist/src/index.js +5 -0
  21. package/dist/src/index.js.map +1 -1
  22. package/dist/src/providers/BaseProvider.d.ts +51 -0
  23. package/dist/src/providers/BaseProvider.js +136 -1
  24. package/dist/src/providers/BaseProvider.js.map +1 -1
  25. package/dist/src/providers/IProvider.d.ts +1 -0
  26. package/dist/src/providers/LoggingProviderWrapper.d.ts +1 -0
  27. package/dist/src/providers/LoggingProviderWrapper.js +3 -0
  28. package/dist/src/providers/LoggingProviderWrapper.js.map +1 -1
  29. package/dist/src/providers/ProviderManager.d.ts +0 -1
  30. package/dist/src/providers/ProviderManager.js +23 -14
  31. package/dist/src/providers/ProviderManager.js.map +1 -1
  32. package/dist/src/providers/anthropic/AnthropicProvider.d.ts +20 -6
  33. package/dist/src/providers/anthropic/AnthropicProvider.js +172 -26
  34. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
  35. package/dist/src/providers/gemini/GeminiProvider.d.ts +4 -0
  36. package/dist/src/providers/gemini/GeminiProvider.js +33 -1
  37. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  38. package/dist/src/providers/openai/OpenAIProvider.d.ts +32 -0
  39. package/dist/src/providers/openai/OpenAIProvider.js +200 -13
  40. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  41. package/dist/src/providers/openai/RESPONSES_API_MODELS.d.ts +1 -1
  42. package/dist/src/providers/openai/RESPONSES_API_MODELS.js +1 -0
  43. package/dist/src/providers/openai/RESPONSES_API_MODELS.js.map +1 -1
  44. package/dist/src/providers/openai/syntheticToolResponses.d.ts +52 -0
  45. package/dist/src/providers/openai/syntheticToolResponses.js +129 -0
  46. package/dist/src/providers/openai/syntheticToolResponses.js.map +1 -0
  47. package/dist/src/settings/SettingsService.d.ts +32 -0
  48. package/dist/src/settings/SettingsService.js +204 -0
  49. package/dist/src/settings/SettingsService.js.map +1 -0
  50. package/dist/src/settings/settingsServiceInstance.d.ts +12 -0
  51. package/dist/src/settings/settingsServiceInstance.js +24 -0
  52. package/dist/src/settings/settingsServiceInstance.js.map +1 -0
  53. package/dist/src/settings/types.d.ts +141 -0
  54. package/dist/src/settings/types.js +5 -0
  55. package/dist/src/settings/types.js.map +1 -0
  56. package/package.json +4 -2
  57. package/dist/src/auth/auth-integration.spec.d.ts +0 -6
  58. package/dist/src/auth/auth-integration.spec.js +0 -384
  59. package/dist/src/auth/auth-integration.spec.js.map +0 -1
  60. package/dist/src/auth/precedence.test.d.ts +0 -6
  61. package/dist/src/auth/precedence.test.js +0 -374
  62. package/dist/src/auth/precedence.test.js.map +0 -1
  63. package/dist/src/auth/qwen-device-flow.spec.d.ts +0 -6
  64. package/dist/src/auth/qwen-device-flow.spec.js +0 -793
  65. package/dist/src/auth/qwen-device-flow.spec.js.map +0 -1
  66. package/dist/src/auth/token-store.spec.d.ts +0 -6
  67. package/dist/src/auth/token-store.spec.js +0 -405
  68. package/dist/src/auth/token-store.spec.js.map +0 -1
  69. package/dist/src/code_assist/converter.test.d.ts +0 -6
  70. package/dist/src/code_assist/converter.test.js +0 -279
  71. package/dist/src/code_assist/converter.test.js.map +0 -1
  72. package/dist/src/code_assist/oauth2.test.d.ts +0 -6
  73. package/dist/src/code_assist/oauth2.test.js +0 -370
  74. package/dist/src/code_assist/oauth2.test.js.map +0 -1
  75. package/dist/src/code_assist/server.test.d.ts +0 -6
  76. package/dist/src/code_assist/server.test.js +0 -134
  77. package/dist/src/code_assist/server.test.js.map +0 -1
  78. package/dist/src/code_assist/setup.test.d.ts +0 -6
  79. package/dist/src/code_assist/setup.test.js +0 -65
  80. package/dist/src/code_assist/setup.test.js.map +0 -1
  81. package/dist/src/config/config.alwaysAllow.test.d.ts +0 -6
  82. package/dist/src/config/config.alwaysAllow.test.js +0 -84
  83. package/dist/src/config/config.alwaysAllow.test.js.map +0 -1
  84. package/dist/src/config/config.ephemeral.test.d.ts +0 -6
  85. package/dist/src/config/config.ephemeral.test.js +0 -152
  86. package/dist/src/config/config.ephemeral.test.js.map +0 -1
  87. package/dist/src/config/config.test.d.ts +0 -6
  88. package/dist/src/config/config.test.js +0 -369
  89. package/dist/src/config/config.test.js.map +0 -1
  90. package/dist/src/config/endpoints.test.d.ts +0 -6
  91. package/dist/src/config/endpoints.test.js +0 -196
  92. package/dist/src/config/endpoints.test.js.map +0 -1
  93. package/dist/src/config/flashFallback.test.d.ts +0 -6
  94. package/dist/src/config/flashFallback.test.js +0 -91
  95. package/dist/src/config/flashFallback.test.js.map +0 -1
  96. package/dist/src/core/client.test.d.ts +0 -6
  97. package/dist/src/core/client.test.js +0 -1323
  98. package/dist/src/core/client.test.js.map +0 -1
  99. package/dist/src/core/contentGenerator.test.d.ts +0 -6
  100. package/dist/src/core/contentGenerator.test.js +0 -103
  101. package/dist/src/core/contentGenerator.test.js.map +0 -1
  102. package/dist/src/core/coreToolScheduler.test.d.ts +0 -6
  103. package/dist/src/core/coreToolScheduler.test.js +0 -637
  104. package/dist/src/core/coreToolScheduler.test.js.map +0 -1
  105. package/dist/src/core/geminiChat.test.d.ts +0 -6
  106. package/dist/src/core/geminiChat.test.js +0 -425
  107. package/dist/src/core/geminiChat.test.js.map +0 -1
  108. package/dist/src/core/googleGenAIWrapper.test.d.ts +0 -6
  109. package/dist/src/core/googleGenAIWrapper.test.js +0 -104
  110. package/dist/src/core/googleGenAIWrapper.test.js.map +0 -1
  111. package/dist/src/core/logger.test.d.ts +0 -6
  112. package/dist/src/core/logger.test.js +0 -467
  113. package/dist/src/core/logger.test.js.map +0 -1
  114. package/dist/src/core/nonInteractiveToolExecutor.test.d.ts +0 -6
  115. package/dist/src/core/nonInteractiveToolExecutor.test.js +0 -165
  116. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +0 -1
  117. package/dist/src/core/prompts-async.test.d.ts +0 -6
  118. package/dist/src/core/prompts-async.test.js +0 -115
  119. package/dist/src/core/prompts-async.test.js.map +0 -1
  120. package/dist/src/core/prompts.test.d.ts +0 -6
  121. package/dist/src/core/prompts.test.js +0 -68
  122. package/dist/src/core/prompts.test.js.map +0 -1
  123. package/dist/src/core/subagent.test.d.ts +0 -6
  124. package/dist/src/core/subagent.test.js +0 -510
  125. package/dist/src/core/subagent.test.js.map +0 -1
  126. package/dist/src/core/tokenLimits.test.d.ts +0 -6
  127. package/dist/src/core/tokenLimits.test.js +0 -66
  128. package/dist/src/core/tokenLimits.test.js.map +0 -1
  129. package/dist/src/core/turn.test.d.ts +0 -6
  130. package/dist/src/core/turn.test.js +0 -366
  131. package/dist/src/core/turn.test.js.map +0 -1
  132. package/dist/src/hooks/tool-render-suppression-hook.test.d.ts +0 -6
  133. package/dist/src/hooks/tool-render-suppression-hook.test.js +0 -59
  134. package/dist/src/hooks/tool-render-suppression-hook.test.js.map +0 -1
  135. package/dist/src/ide/ide-installer.test.d.ts +0 -6
  136. package/dist/src/ide/ide-installer.test.js +0 -55
  137. package/dist/src/ide/ide-installer.test.js.map +0 -1
  138. package/dist/src/ide/ideContext.test.d.ts +0 -6
  139. package/dist/src/ide/ideContext.test.js +0 -265
  140. package/dist/src/ide/ideContext.test.js.map +0 -1
  141. package/dist/src/index.test.d.ts +0 -6
  142. package/dist/src/index.test.js +0 -12
  143. package/dist/src/index.test.js.map +0 -1
  144. package/dist/src/integration-tests/oauth-integration.spec.d.ts +0 -6
  145. package/dist/src/integration-tests/oauth-integration.spec.js +0 -518
  146. package/dist/src/integration-tests/oauth-integration.spec.js.map +0 -1
  147. package/dist/src/integration-tests/oauth-simple-test.spec.d.ts +0 -1
  148. package/dist/src/integration-tests/oauth-simple-test.spec.js +0 -88
  149. package/dist/src/integration-tests/oauth-simple-test.spec.js.map +0 -1
  150. package/dist/src/integration-tests/todo-system.test.d.ts +0 -6
  151. package/dist/src/integration-tests/todo-system.test.js +0 -46
  152. package/dist/src/integration-tests/todo-system.test.js.map +0 -1
  153. package/dist/src/mcp/google-auth-provider.test.d.ts +0 -6
  154. package/dist/src/mcp/google-auth-provider.test.js +0 -54
  155. package/dist/src/mcp/google-auth-provider.test.js.map +0 -1
  156. package/dist/src/mcp/oauth-provider.test.d.ts +0 -6
  157. package/dist/src/mcp/oauth-provider.test.js +0 -602
  158. package/dist/src/mcp/oauth-provider.test.js.map +0 -1
  159. package/dist/src/mcp/oauth-token-storage.test.d.ts +0 -6
  160. package/dist/src/mcp/oauth-token-storage.test.js +0 -205
  161. package/dist/src/mcp/oauth-token-storage.test.js.map +0 -1
  162. package/dist/src/mcp/oauth-utils.test.d.ts +0 -6
  163. package/dist/src/mcp/oauth-utils.test.js +0 -144
  164. package/dist/src/mcp/oauth-utils.test.js.map +0 -1
  165. package/dist/src/parsers/TextToolCallParser.multibyte.test.d.ts +0 -1
  166. package/dist/src/parsers/TextToolCallParser.multibyte.test.js +0 -42
  167. package/dist/src/parsers/TextToolCallParser.multibyte.test.js.map +0 -1
  168. package/dist/src/parsers/TextToolCallParser.test.d.ts +0 -1
  169. package/dist/src/parsers/TextToolCallParser.test.js +0 -225
  170. package/dist/src/parsers/TextToolCallParser.test.js.map +0 -1
  171. package/dist/src/prompt-config/TemplateEngine.test.d.ts +0 -1
  172. package/dist/src/prompt-config/TemplateEngine.test.js +0 -494
  173. package/dist/src/prompt-config/TemplateEngine.test.js.map +0 -1
  174. package/dist/src/prompt-config/prompt-cache.test.d.ts +0 -6
  175. package/dist/src/prompt-config/prompt-cache.test.js +0 -437
  176. package/dist/src/prompt-config/prompt-cache.test.js.map +0 -1
  177. package/dist/src/prompt-config/prompt-installer.test.d.ts +0 -7
  178. package/dist/src/prompt-config/prompt-installer.test.js +0 -503
  179. package/dist/src/prompt-config/prompt-installer.test.js.map +0 -1
  180. package/dist/src/prompt-config/prompt-loader.test.d.ts +0 -5
  181. package/dist/src/prompt-config/prompt-loader.test.js +0 -413
  182. package/dist/src/prompt-config/prompt-loader.test.js.map +0 -1
  183. package/dist/src/prompt-config/prompt-resolver.test.d.ts +0 -1
  184. package/dist/src/prompt-config/prompt-resolver.test.js +0 -529
  185. package/dist/src/prompt-config/prompt-resolver.test.js.map +0 -1
  186. package/dist/src/prompt-config/prompt-service.test.d.ts +0 -1
  187. package/dist/src/prompt-config/prompt-service.test.js +0 -811
  188. package/dist/src/prompt-config/prompt-service.test.js.map +0 -1
  189. package/dist/src/providers/BaseProvider.test.d.ts +0 -6
  190. package/dist/src/providers/BaseProvider.test.js +0 -472
  191. package/dist/src/providers/BaseProvider.test.js.map +0 -1
  192. package/dist/src/providers/ProviderManager.gemini-switch.test.d.ts +0 -6
  193. package/dist/src/providers/ProviderManager.gemini-switch.test.js +0 -57
  194. package/dist/src/providers/ProviderManager.gemini-switch.test.js.map +0 -1
  195. package/dist/src/providers/ProviderManager.test.d.ts +0 -6
  196. package/dist/src/providers/ProviderManager.test.js +0 -284
  197. package/dist/src/providers/ProviderManager.test.js.map +0 -1
  198. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.d.ts +0 -6
  199. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js +0 -273
  200. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js.map +0 -1
  201. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.d.ts +0 -1
  202. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js +0 -48
  203. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js.map +0 -1
  204. package/dist/src/providers/anthropic/AnthropicProvider.test.d.ts +0 -1
  205. package/dist/src/providers/anthropic/AnthropicProvider.test.js +0 -487
  206. package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +0 -1
  207. package/dist/src/providers/gemini/GeminiProvider.integration.test.d.ts +0 -6
  208. package/dist/src/providers/gemini/GeminiProvider.integration.test.js +0 -126
  209. package/dist/src/providers/gemini/GeminiProvider.integration.test.js.map +0 -1
  210. package/dist/src/providers/gemini/GeminiProvider.test.d.ts +0 -6
  211. package/dist/src/providers/gemini/GeminiProvider.test.js +0 -136
  212. package/dist/src/providers/gemini/GeminiProvider.test.js.map +0 -1
  213. package/dist/src/providers/integration/multi-provider.integration.test.d.ts +0 -6
  214. package/dist/src/providers/integration/multi-provider.integration.test.js +0 -308
  215. package/dist/src/providers/integration/multi-provider.integration.test.js.map +0 -1
  216. package/dist/src/providers/openai/ConversationCache.accumTokens.test.d.ts +0 -1
  217. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js +0 -97
  218. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js.map +0 -1
  219. package/dist/src/providers/openai/ConversationCache.test.d.ts +0 -1
  220. package/dist/src/providers/openai/ConversationCache.test.js +0 -113
  221. package/dist/src/providers/openai/ConversationCache.test.js.map +0 -1
  222. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.d.ts +0 -1
  223. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js +0 -189
  224. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js.map +0 -1
  225. package/dist/src/providers/openai/OpenAIProvider.integration.test.d.ts +0 -6
  226. package/dist/src/providers/openai/OpenAIProvider.integration.test.js +0 -125
  227. package/dist/src/providers/openai/OpenAIProvider.integration.test.js.map +0 -1
  228. package/dist/src/providers/openai/OpenAIProvider.responses.test.d.ts +0 -1
  229. package/dist/src/providers/openai/OpenAIProvider.responses.test.js +0 -350
  230. package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +0 -1
  231. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.d.ts +0 -1
  232. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js +0 -213
  233. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js.map +0 -1
  234. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.d.ts +0 -1
  235. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +0 -59
  236. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +0 -1
  237. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.d.ts +0 -6
  238. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js +0 -105
  239. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js.map +0 -1
  240. package/dist/src/providers/openai/OpenAIProvider.switch.test.d.ts +0 -1
  241. package/dist/src/providers/openai/OpenAIProvider.switch.test.js +0 -256
  242. package/dist/src/providers/openai/OpenAIProvider.switch.test.js.map +0 -1
  243. package/dist/src/providers/openai/OpenAIProvider.test.d.ts +0 -16
  244. package/dist/src/providers/openai/OpenAIProvider.test.js +0 -621
  245. package/dist/src/providers/openai/OpenAIProvider.test.js.map +0 -1
  246. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.d.ts +0 -1
  247. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js +0 -210
  248. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js.map +0 -1
  249. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.d.ts +0 -1
  250. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js +0 -65
  251. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js.map +0 -1
  252. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.d.ts +0 -1
  253. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js +0 -129
  254. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js.map +0 -1
  255. package/dist/src/providers/openai/buildResponsesRequest.test.d.ts +0 -1
  256. package/dist/src/providers/openai/buildResponsesRequest.test.js +0 -406
  257. package/dist/src/providers/openai/buildResponsesRequest.test.js.map +0 -1
  258. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.d.ts +0 -1
  259. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js +0 -50
  260. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js.map +0 -1
  261. package/dist/src/providers/openai/estimateRemoteTokens.test.d.ts +0 -1
  262. package/dist/src/providers/openai/estimateRemoteTokens.test.js +0 -125
  263. package/dist/src/providers/openai/estimateRemoteTokens.test.js.map +0 -1
  264. package/dist/src/providers/openai/openai-oauth.spec.d.ts +0 -16
  265. package/dist/src/providers/openai/openai-oauth.spec.js +0 -544
  266. package/dist/src/providers/openai/openai-oauth.spec.js.map +0 -1
  267. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.d.ts +0 -1
  268. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js +0 -192
  269. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js.map +0 -1
  270. package/dist/src/providers/openai/parseResponsesStream.test.d.ts +0 -1
  271. package/dist/src/providers/openai/parseResponsesStream.test.js +0 -151
  272. package/dist/src/providers/openai/parseResponsesStream.test.js.map +0 -1
  273. package/dist/src/services/fileDiscoveryService.test.d.ts +0 -6
  274. package/dist/src/services/fileDiscoveryService.test.js +0 -143
  275. package/dist/src/services/fileDiscoveryService.test.js.map +0 -1
  276. package/dist/src/services/gitService.test.d.ts +0 -6
  277. package/dist/src/services/gitService.test.js +0 -209
  278. package/dist/src/services/gitService.test.js.map +0 -1
  279. package/dist/src/services/loopDetectionService.test.d.ts +0 -6
  280. package/dist/src/services/loopDetectionService.test.js +0 -484
  281. package/dist/src/services/loopDetectionService.test.js.map +0 -1
  282. package/dist/src/services/shellExecutionService.multibyte.test.d.ts +0 -6
  283. package/dist/src/services/shellExecutionService.multibyte.test.js +0 -72
  284. package/dist/src/services/shellExecutionService.multibyte.test.js.map +0 -1
  285. package/dist/src/services/shellExecutionService.test.d.ts +0 -6
  286. package/dist/src/services/shellExecutionService.test.js +0 -272
  287. package/dist/src/services/shellExecutionService.test.js.map +0 -1
  288. package/dist/src/services/shellExecutionService.windows.multibyte.test.d.ts +0 -6
  289. package/dist/src/services/shellExecutionService.windows.multibyte.test.js +0 -98
  290. package/dist/src/services/shellExecutionService.windows.multibyte.test.js.map +0 -1
  291. package/dist/src/services/shellExecutionService.windows.test.d.ts +0 -6
  292. package/dist/src/services/shellExecutionService.windows.test.js +0 -79
  293. package/dist/src/services/shellExecutionService.windows.test.js.map +0 -1
  294. package/dist/src/services/tool-call-tracker-service.test.d.ts +0 -6
  295. package/dist/src/services/tool-call-tracker-service.test.js +0 -99
  296. package/dist/src/services/tool-call-tracker-service.test.js.map +0 -1
  297. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +0 -6
  298. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +0 -187
  299. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +0 -1
  300. package/dist/src/telemetry/loggers.test.d.ts +0 -6
  301. package/dist/src/telemetry/loggers.test.js +0 -573
  302. package/dist/src/telemetry/loggers.test.js.map +0 -1
  303. package/dist/src/telemetry/metrics.test.d.ts +0 -6
  304. package/dist/src/telemetry/metrics.test.js +0 -212
  305. package/dist/src/telemetry/metrics.test.js.map +0 -1
  306. package/dist/src/telemetry/telemetry.test.d.ts +0 -6
  307. package/dist/src/telemetry/telemetry.test.js +0 -54
  308. package/dist/src/telemetry/telemetry.test.js.map +0 -1
  309. package/dist/src/telemetry/uiTelemetry.test.d.ts +0 -6
  310. package/dist/src/telemetry/uiTelemetry.test.js +0 -518
  311. package/dist/src/telemetry/uiTelemetry.test.js.map +0 -1
  312. package/dist/src/tools/ToolFormatter.test.d.ts +0 -16
  313. package/dist/src/tools/ToolFormatter.test.js +0 -349
  314. package/dist/src/tools/ToolFormatter.test.js.map +0 -1
  315. package/dist/src/tools/ToolFormatter.toResponsesTool.test.d.ts +0 -1
  316. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js +0 -241
  317. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js.map +0 -1
  318. package/dist/src/tools/diffOptions.test.d.ts +0 -6
  319. package/dist/src/tools/diffOptions.test.js +0 -119
  320. package/dist/src/tools/diffOptions.test.js.map +0 -1
  321. package/dist/src/tools/edit.test.d.ts +0 -6
  322. package/dist/src/tools/edit.test.js +0 -689
  323. package/dist/src/tools/edit.test.js.map +0 -1
  324. package/dist/src/tools/glob.test.d.ts +0 -6
  325. package/dist/src/tools/glob.test.js +0 -332
  326. package/dist/src/tools/glob.test.js.map +0 -1
  327. package/dist/src/tools/grep.test.d.ts +0 -6
  328. package/dist/src/tools/grep.test.js +0 -272
  329. package/dist/src/tools/grep.test.js.map +0 -1
  330. package/dist/src/tools/ls.test.d.ts +0 -6
  331. package/dist/src/tools/ls.test.js +0 -357
  332. package/dist/src/tools/ls.test.js.map +0 -1
  333. package/dist/src/tools/mcp-client.test.d.ts +0 -6
  334. package/dist/src/tools/mcp-client.test.js +0 -617
  335. package/dist/src/tools/mcp-client.test.js.map +0 -1
  336. package/dist/src/tools/mcp-tool.test.d.ts +0 -6
  337. package/dist/src/tools/mcp-tool.test.js +0 -501
  338. package/dist/src/tools/mcp-tool.test.js.map +0 -1
  339. package/dist/src/tools/memoryTool.test.d.ts +0 -6
  340. package/dist/src/tools/memoryTool.test.js +0 -266
  341. package/dist/src/tools/memoryTool.test.js.map +0 -1
  342. package/dist/src/tools/modifiable-tool.test.d.ts +0 -6
  343. package/dist/src/tools/modifiable-tool.test.js +0 -193
  344. package/dist/src/tools/modifiable-tool.test.js.map +0 -1
  345. package/dist/src/tools/read-file.test.d.ts +0 -6
  346. package/dist/src/tools/read-file.test.js +0 -319
  347. package/dist/src/tools/read-file.test.js.map +0 -1
  348. package/dist/src/tools/read-many-files.test.d.ts +0 -6
  349. package/dist/src/tools/read-many-files.test.js +0 -644
  350. package/dist/src/tools/read-many-files.test.js.map +0 -1
  351. package/dist/src/tools/shell.multibyte.test.d.ts +0 -6
  352. package/dist/src/tools/shell.multibyte.test.js +0 -75
  353. package/dist/src/tools/shell.multibyte.test.js.map +0 -1
  354. package/dist/src/tools/shell.test.d.ts +0 -6
  355. package/dist/src/tools/shell.test.js +0 -367
  356. package/dist/src/tools/shell.test.js.map +0 -1
  357. package/dist/src/tools/todo-pause.spec.d.ts +0 -6
  358. package/dist/src/tools/todo-pause.spec.js +0 -287
  359. package/dist/src/tools/todo-pause.spec.js.map +0 -1
  360. package/dist/src/tools/todo-read.test.d.ts +0 -6
  361. package/dist/src/tools/todo-read.test.js +0 -162
  362. package/dist/src/tools/todo-read.test.js.map +0 -1
  363. package/dist/src/tools/todo-schemas.test.d.ts +0 -6
  364. package/dist/src/tools/todo-schemas.test.js +0 -341
  365. package/dist/src/tools/todo-schemas.test.js.map +0 -1
  366. package/dist/src/tools/todo-store.test.d.ts +0 -6
  367. package/dist/src/tools/todo-store.test.js +0 -169
  368. package/dist/src/tools/todo-store.test.js.map +0 -1
  369. package/dist/src/tools/todo-write.test.d.ts +0 -6
  370. package/dist/src/tools/todo-write.test.js +0 -226
  371. package/dist/src/tools/todo-write.test.js.map +0 -1
  372. package/dist/src/tools/tool-registry.test.d.ts +0 -6
  373. package/dist/src/tools/tool-registry.test.js +0 -468
  374. package/dist/src/tools/tool-registry.test.js.map +0 -1
  375. package/dist/src/tools/tools.test.d.ts +0 -6
  376. package/dist/src/tools/tools.test.js +0 -117
  377. package/dist/src/tools/tools.test.js.map +0 -1
  378. package/dist/src/tools/web-fetch.integration.test.d.ts +0 -6
  379. package/dist/src/tools/web-fetch.integration.test.js +0 -532
  380. package/dist/src/tools/web-fetch.integration.test.js.map +0 -1
  381. package/dist/src/tools/web-search.test.d.ts +0 -6
  382. package/dist/src/tools/web-search.test.js +0 -230
  383. package/dist/src/tools/web-search.test.js.map +0 -1
  384. package/dist/src/tools/write-file.test.d.ts +0 -6
  385. package/dist/src/tools/write-file.test.js +0 -465
  386. package/dist/src/tools/write-file.test.js.map +0 -1
  387. package/dist/src/utils/bfsFileSearch.test.d.ts +0 -6
  388. package/dist/src/utils/bfsFileSearch.test.js +0 -191
  389. package/dist/src/utils/bfsFileSearch.test.js.map +0 -1
  390. package/dist/src/utils/editCorrector.test.d.ts +0 -6
  391. package/dist/src/utils/editCorrector.test.js +0 -564
  392. package/dist/src/utils/editCorrector.test.js.map +0 -1
  393. package/dist/src/utils/editor.test.d.ts +0 -6
  394. package/dist/src/utils/editor.test.js +0 -445
  395. package/dist/src/utils/editor.test.js.map +0 -1
  396. package/dist/src/utils/environmentContext.test.d.ts +0 -6
  397. package/dist/src/utils/environmentContext.test.js +0 -139
  398. package/dist/src/utils/environmentContext.test.js.map +0 -1
  399. package/dist/src/utils/errorReporting.test.d.ts +0 -6
  400. package/dist/src/utils/errorReporting.test.js +0 -130
  401. package/dist/src/utils/errorReporting.test.js.map +0 -1
  402. package/dist/src/utils/fileUtils.test.d.ts +0 -6
  403. package/dist/src/utils/fileUtils.test.js +0 -363
  404. package/dist/src/utils/fileUtils.test.js.map +0 -1
  405. package/dist/src/utils/filesearch/crawlCache.test.d.ts +0 -6
  406. package/dist/src/utils/filesearch/crawlCache.test.js +0 -103
  407. package/dist/src/utils/filesearch/crawlCache.test.js.map +0 -1
  408. package/dist/src/utils/filesearch/fileSearch.test.d.ts +0 -6
  409. package/dist/src/utils/filesearch/fileSearch.test.js +0 -654
  410. package/dist/src/utils/filesearch/fileSearch.test.js.map +0 -1
  411. package/dist/src/utils/filesearch/ignore.test.d.ts +0 -6
  412. package/dist/src/utils/filesearch/ignore.test.js +0 -57
  413. package/dist/src/utils/filesearch/ignore.test.js.map +0 -1
  414. package/dist/src/utils/filesearch/result-cache.test.d.ts +0 -6
  415. package/dist/src/utils/filesearch/result-cache.test.js +0 -47
  416. package/dist/src/utils/filesearch/result-cache.test.js.map +0 -1
  417. package/dist/src/utils/flashFallback.integration.test.d.ts +0 -6
  418. package/dist/src/utils/flashFallback.integration.test.js +0 -120
  419. package/dist/src/utils/flashFallback.integration.test.js.map +0 -1
  420. package/dist/src/utils/generateContentResponseUtilities.test.d.ts +0 -6
  421. package/dist/src/utils/generateContentResponseUtilities.test.js +0 -273
  422. package/dist/src/utils/generateContentResponseUtilities.test.js.map +0 -1
  423. package/dist/src/utils/getFolderStructure.test.d.ts +0 -6
  424. package/dist/src/utils/getFolderStructure.test.js +0 -282
  425. package/dist/src/utils/getFolderStructure.test.js.map +0 -1
  426. package/dist/src/utils/gitIgnoreParser.test.d.ts +0 -6
  427. package/dist/src/utils/gitIgnoreParser.test.js +0 -154
  428. package/dist/src/utils/gitIgnoreParser.test.js.map +0 -1
  429. package/dist/src/utils/memoryDiscovery.test.d.ts +0 -6
  430. package/dist/src/utils/memoryDiscovery.test.js +0 -181
  431. package/dist/src/utils/memoryDiscovery.test.js.map +0 -1
  432. package/dist/src/utils/memoryImportProcessor.test.d.ts +0 -6
  433. package/dist/src/utils/memoryImportProcessor.test.js +0 -715
  434. package/dist/src/utils/memoryImportProcessor.test.js.map +0 -1
  435. package/dist/src/utils/nextSpeakerChecker.test.d.ts +0 -6
  436. package/dist/src/utils/nextSpeakerChecker.test.js +0 -172
  437. package/dist/src/utils/nextSpeakerChecker.test.js.map +0 -1
  438. package/dist/src/utils/partUtils.test.d.ts +0 -6
  439. package/dist/src/utils/partUtils.test.js +0 -130
  440. package/dist/src/utils/partUtils.test.js.map +0 -1
  441. package/dist/src/utils/paths.test.d.ts +0 -6
  442. package/dist/src/utils/paths.test.js +0 -153
  443. package/dist/src/utils/paths.test.js.map +0 -1
  444. package/dist/src/utils/retry.test.d.ts +0 -6
  445. package/dist/src/utils/retry.test.js +0 -322
  446. package/dist/src/utils/retry.test.js.map +0 -1
  447. package/dist/src/utils/safeJsonStringify.test.d.ts +0 -6
  448. package/dist/src/utils/safeJsonStringify.test.js +0 -61
  449. package/dist/src/utils/safeJsonStringify.test.js.map +0 -1
  450. package/dist/src/utils/sanitization.test.d.ts +0 -6
  451. package/dist/src/utils/sanitization.test.js +0 -81
  452. package/dist/src/utils/sanitization.test.js.map +0 -1
  453. package/dist/src/utils/schemaValidator.test.d.ts +0 -6
  454. package/dist/src/utils/schemaValidator.test.js +0 -146
  455. package/dist/src/utils/schemaValidator.test.js.map +0 -1
  456. package/dist/src/utils/secure-browser-launcher.test.d.ts +0 -6
  457. package/dist/src/utils/secure-browser-launcher.test.js +0 -149
  458. package/dist/src/utils/secure-browser-launcher.test.js.map +0 -1
  459. package/dist/src/utils/shell-utils.shellReplacement.test.d.ts +0 -6
  460. package/dist/src/utils/shell-utils.shellReplacement.test.js +0 -149
  461. package/dist/src/utils/shell-utils.shellReplacement.test.js.map +0 -1
  462. package/dist/src/utils/shell-utils.test.d.ts +0 -6
  463. package/dist/src/utils/shell-utils.test.js +0 -200
  464. package/dist/src/utils/shell-utils.test.js.map +0 -1
  465. package/dist/src/utils/summarizer.test.d.ts +0 -6
  466. package/dist/src/utils/summarizer.test.js +0 -131
  467. package/dist/src/utils/summarizer.test.js.map +0 -1
  468. package/dist/src/utils/systemEncoding.test.d.ts +0 -6
  469. package/dist/src/utils/systemEncoding.test.js +0 -368
  470. package/dist/src/utils/systemEncoding.test.js.map +0 -1
  471. package/dist/src/utils/toolOutputLimiter.test.d.ts +0 -6
  472. package/dist/src/utils/toolOutputLimiter.test.js +0 -164
  473. package/dist/src/utils/toolOutputLimiter.test.js.map +0 -1
  474. package/dist/src/utils/unicodeUtils.test.d.ts +0 -6
  475. package/dist/src/utils/unicodeUtils.test.js +0 -120
  476. package/dist/src/utils/unicodeUtils.test.js.map +0 -1
  477. package/dist/src/utils/user_account.test.d.ts +0 -6
  478. package/dist/src/utils/user_account.test.js +0 -153
  479. package/dist/src/utils/user_account.test.js.map +0 -1
  480. package/dist/src/utils/user_id.test.d.ts +0 -6
  481. package/dist/src/utils/user_id.test.js +0 -21
  482. package/dist/src/utils/user_id.test.js.map +0 -1
  483. package/dist/src/utils/workspaceContext.test.d.ts +0 -6
  484. package/dist/src/utils/workspaceContext.test.js +0 -209
  485. package/dist/src/utils/workspaceContext.test.js.map +0 -1
@@ -1,621 +0,0 @@
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 { describe, it, expect, vi, beforeEach } from 'vitest';
17
- import { OpenAIProvider } from './OpenAIProvider.js';
18
- import { ContentGeneratorRole } from '../ContentGeneratorRole.js';
19
- import { TEST_PROVIDER_CONFIG } from '../test-utils/providerTestConfig.js';
20
- // Mock OpenAI module
21
- vi.mock('openai', () => ({
22
- default: vi.fn().mockImplementation(() => ({
23
- chat: {
24
- completions: {
25
- create: vi.fn(),
26
- },
27
- },
28
- models: {
29
- list: vi.fn(),
30
- },
31
- })),
32
- }));
33
- describe('OpenAIProvider', () => {
34
- let provider;
35
- let mockOpenAIInstance;
36
- let capturedApiParams;
37
- beforeEach(() => {
38
- vi.clearAllMocks();
39
- provider = new OpenAIProvider('test-api-key', undefined, TEST_PROVIDER_CONFIG);
40
- // Set a model that doesn't use the Responses API
41
- provider.setModel('gpt-3.5-turbo');
42
- // Get the mocked OpenAI instance (typed as unknown then cast)
43
- mockOpenAIInstance = provider.openai; // Cast for test
44
- // Reset captured params
45
- capturedApiParams = undefined;
46
- });
47
- describe('generateChatCompletion with usage tracking', () => {
48
- it('should include stream_options with include_usage', async () => {
49
- const mockStream = {
50
- async *[Symbol.asyncIterator]() {
51
- yield {
52
- choices: [{ delta: { content: 'Hello' } }],
53
- };
54
- yield {
55
- choices: [{ delta: { content: ' world' } }],
56
- usage: {
57
- prompt_tokens: 10,
58
- completion_tokens: 5,
59
- total_tokens: 15,
60
- },
61
- };
62
- },
63
- };
64
- // Capture the parameters passed to the API
65
- mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
66
- capturedApiParams = params;
67
- return mockStream;
68
- });
69
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Hi' }];
70
- const generator = provider.generateChatCompletion(messages);
71
- const results = [];
72
- for await (const chunk of generator) {
73
- results.push(chunk);
74
- }
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 });
80
- });
81
- it('should yield usage data when provided in stream', async () => {
82
- const mockStream = {
83
- async *[Symbol.asyncIterator]() {
84
- yield {
85
- choices: [{ delta: { content: 'Test response' } }],
86
- };
87
- yield {
88
- choices: [{ delta: {} }],
89
- usage: {
90
- prompt_tokens: 20,
91
- completion_tokens: 10,
92
- total_tokens: 30,
93
- },
94
- };
95
- },
96
- };
97
- mockOpenAIInstance.chat.completions.create.mockResolvedValue(mockStream);
98
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
99
- const generator = provider.generateChatCompletion(messages);
100
- const results = [];
101
- for await (const chunk of generator) {
102
- results.push(chunk);
103
- }
104
- // Should have content chunk and usage chunk
105
- expect(results).toHaveLength(2);
106
- // Check content chunk
107
- expect(results[0]).toMatchObject({
108
- role: ContentGeneratorRole.ASSISTANT,
109
- content: 'Test response',
110
- });
111
- // Check usage chunk
112
- expect(results[1]).toMatchObject({
113
- role: ContentGeneratorRole.ASSISTANT,
114
- content: '',
115
- usage: {
116
- prompt_tokens: 20,
117
- completion_tokens: 10,
118
- total_tokens: 30,
119
- },
120
- });
121
- });
122
- it('should handle usage data with tool calls', async () => {
123
- const mockStream = {
124
- async *[Symbol.asyncIterator]() {
125
- yield {
126
- choices: [
127
- {
128
- delta: {
129
- tool_calls: [
130
- {
131
- index: 0,
132
- id: 'call_123',
133
- function: {
134
- name: 'test_tool',
135
- arguments: '{"param": "value"}',
136
- },
137
- },
138
- ],
139
- },
140
- },
141
- ],
142
- };
143
- yield {
144
- choices: [{ delta: {} }],
145
- usage: {
146
- prompt_tokens: 50,
147
- completion_tokens: 25,
148
- total_tokens: 75,
149
- },
150
- };
151
- },
152
- };
153
- mockOpenAIInstance.chat.completions.create.mockResolvedValue(mockStream);
154
- const messages = [
155
- { role: ContentGeneratorRole.USER, content: 'Use a tool' },
156
- ];
157
- const tools = [
158
- {
159
- type: 'function',
160
- function: {
161
- name: 'test_tool',
162
- parameters: { type: 'object', properties: {} },
163
- },
164
- },
165
- ];
166
- const generator = provider.generateChatCompletion(messages, tools);
167
- const results = [];
168
- for await (const chunk of generator) {
169
- results.push(chunk);
170
- }
171
- // Should yield tool call with usage data
172
- expect(results).toHaveLength(1);
173
- expect(results[0]).toMatchObject({
174
- role: ContentGeneratorRole.ASSISTANT,
175
- content: '',
176
- tool_calls: [
177
- {
178
- id: 'call_123',
179
- type: 'function',
180
- function: {
181
- name: 'test_tool',
182
- arguments: '{"param": "value"}',
183
- },
184
- },
185
- ],
186
- usage: {
187
- prompt_tokens: 50,
188
- completion_tokens: 25,
189
- total_tokens: 75,
190
- },
191
- });
192
- });
193
- });
194
- describe('stream_options ephemeral settings', () => {
195
- it('should omit stream_options when set to null via ephemeral settings', async () => {
196
- // Create provider with config that returns null for stream-options
197
- const configWithNullStreamOptions = {
198
- ...TEST_PROVIDER_CONFIG,
199
- getEphemeralSettings: () => ({ 'stream-options': null }),
200
- };
201
- const providerWithNullStreamOptions = new OpenAIProvider('test-key', undefined, configWithNullStreamOptions);
202
- providerWithNullStreamOptions.setModel('gpt-3.5-turbo');
203
- const mockInstance = providerWithNullStreamOptions.openai;
204
- const mockStream = {
205
- async *[Symbol.asyncIterator]() {
206
- yield {
207
- choices: [{ delta: { content: 'Hello' } }],
208
- };
209
- },
210
- };
211
- let localCapturedParams;
212
- mockInstance.chat.completions.create.mockImplementation(async (params) => {
213
- localCapturedParams = params;
214
- return mockStream;
215
- });
216
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
217
- const generator = providerWithNullStreamOptions.generateChatCompletion(messages);
218
- const results = [];
219
- for await (const chunk of generator) {
220
- results.push(chunk);
221
- }
222
- // Verify stream_options is NOT included when set to null
223
- expect(localCapturedParams).toBeDefined();
224
- const apiParams = localCapturedParams;
225
- expect(apiParams.stream).toBe(true);
226
- expect(apiParams).not.toHaveProperty('stream_options');
227
- });
228
- it('should use custom stream_options from ephemeral settings', async () => {
229
- // Create provider with custom stream_options
230
- const configWithCustomStreamOptions = {
231
- ...TEST_PROVIDER_CONFIG,
232
- getEphemeralSettings: () => ({
233
- 'stream-options': { include_usage: false, custom_field: true },
234
- }),
235
- };
236
- const providerWithCustomStreamOptions = new OpenAIProvider('test-key', undefined, configWithCustomStreamOptions);
237
- providerWithCustomStreamOptions.setModel('gpt-3.5-turbo');
238
- const mockInstance = providerWithCustomStreamOptions.openai;
239
- const mockStream = {
240
- async *[Symbol.asyncIterator]() {
241
- yield {
242
- choices: [{ delta: { content: 'Hello' } }],
243
- };
244
- },
245
- };
246
- let localCapturedParams;
247
- mockInstance.chat.completions.create.mockImplementation(async (params) => {
248
- localCapturedParams = params;
249
- return mockStream;
250
- });
251
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
252
- const generator = providerWithCustomStreamOptions.generateChatCompletion(messages);
253
- const results = [];
254
- for await (const chunk of generator) {
255
- results.push(chunk);
256
- }
257
- // Verify custom stream_options is used
258
- expect(localCapturedParams).toBeDefined();
259
- const apiParams = localCapturedParams;
260
- expect(apiParams.stream).toBe(true);
261
- expect(apiParams.stream_options).toEqual({
262
- include_usage: false,
263
- custom_field: true,
264
- });
265
- });
266
- it('should use default stream_options when ephemeral setting is undefined', async () => {
267
- // Create provider with no stream-options in ephemeral settings
268
- const configWithoutStreamOptions = {
269
- ...TEST_PROVIDER_CONFIG,
270
- getEphemeralSettings: () => ({}), // No stream-options key
271
- };
272
- const providerWithDefaults = new OpenAIProvider('test-key', undefined, configWithoutStreamOptions);
273
- providerWithDefaults.setModel('gpt-3.5-turbo');
274
- const mockInstance = providerWithDefaults.openai;
275
- const mockStream = {
276
- async *[Symbol.asyncIterator]() {
277
- yield {
278
- choices: [{ delta: { content: 'Hello' } }],
279
- };
280
- },
281
- };
282
- let localCapturedParams;
283
- mockInstance.chat.completions.create.mockImplementation(async (params) => {
284
- localCapturedParams = params;
285
- return mockStream;
286
- });
287
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
288
- const generator = providerWithDefaults.generateChatCompletion(messages);
289
- const results = [];
290
- for await (const chunk of generator) {
291
- results.push(chunk);
292
- }
293
- // Verify default stream_options is used
294
- expect(localCapturedParams).toBeDefined();
295
- const apiParams = localCapturedParams;
296
- expect(apiParams.stream).toBe(true);
297
- expect(apiParams.stream_options).toEqual({ include_usage: true });
298
- });
299
- });
300
- describe('model management', () => {
301
- it('should set and get current model', () => {
302
- // We set it to gpt-3.5-turbo in beforeEach to avoid Responses API
303
- expect(provider.getCurrentModel()).toBe('gpt-3.5-turbo');
304
- provider.setModel('gpt-4o');
305
- expect(provider.getCurrentModel()).toBe('gpt-4o');
306
- });
307
- });
308
- describe('configuration methods', () => {
309
- it('should update API key', () => {
310
- const newKey = 'new-test-key';
311
- provider.setApiKey(newKey);
312
- // Verify that API key was set (we can't access private property directly)
313
- // Just verify the method doesn't throw
314
- expect(() => provider.setApiKey(newKey)).not.toThrow();
315
- });
316
- it('should accept empty API key', () => {
317
- // Should not throw error for empty API key
318
- expect(() => provider.setApiKey('')).not.toThrow();
319
- expect(() => provider.setApiKey(' ')).not.toThrow();
320
- });
321
- it('should update base URL', () => {
322
- const newUrl = 'https://custom.openai.com';
323
- provider.setBaseUrl(newUrl);
324
- // Verify new OpenAI instance was created with base URL
325
- expect(provider.baseURL).toBe(newUrl);
326
- });
327
- });
328
- describe('model parameters functionality', () => {
329
- describe('setting and getting model parameters', () => {
330
- it('should store model parameters when set', () => {
331
- // When I set model parameters
332
- provider.setModelParams({ temperature: 0.7 });
333
- // Then they should be retrievable
334
- const params = provider.getModelParams();
335
- expect(params).toEqual({ temperature: 0.7 });
336
- });
337
- it('should return undefined when no model parameters are set', () => {
338
- // Given a fresh provider with no parameters set
339
- const freshProvider = new OpenAIProvider('test-key', undefined, TEST_PROVIDER_CONFIG);
340
- // When I get model parameters
341
- const params = freshProvider.getModelParams();
342
- // Then it should return undefined
343
- expect(params).toBeUndefined();
344
- });
345
- it('should merge new parameters with existing ones instead of replacing', () => {
346
- // Given I have set some initial parameters
347
- provider.setModelParams({ temperature: 0.7, max_tokens: 1000 });
348
- // When I set additional parameters
349
- provider.setModelParams({ top_p: 0.9, temperature: 0.5 });
350
- // Then all parameters should be merged with new values overriding old
351
- const params = provider.getModelParams();
352
- expect(params).toEqual({
353
- temperature: 0.5, // Updated value
354
- max_tokens: 1000, // Retained from first call
355
- top_p: 0.9, // New parameter
356
- });
357
- });
358
- it('should accept any parameter names without validation', () => {
359
- // When I set various parameter types including unknown ones
360
- provider.setModelParams({
361
- temperature: 0.8,
362
- max_tokens: 2048,
363
- top_p: 0.95,
364
- unknown_param: 'should_work',
365
- nested_object: { key: 'value' },
366
- numeric_string: '123',
367
- });
368
- // Then all parameters should be stored as-is
369
- const params = provider.getModelParams();
370
- expect(params).toEqual({
371
- temperature: 0.8,
372
- max_tokens: 2048,
373
- top_p: 0.95,
374
- unknown_param: 'should_work',
375
- nested_object: { key: 'value' },
376
- numeric_string: '123',
377
- });
378
- });
379
- });
380
- describe('passing parameters to OpenAI API', () => {
381
- it('should include model parameters in chat completions API call', async () => {
382
- // Given I have set model parameters
383
- provider.setModelParams({
384
- temperature: 0.7,
385
- max_tokens: 2000,
386
- top_p: 0.9,
387
- });
388
- // And the API returns a response
389
- const mockStream = {
390
- async *[Symbol.asyncIterator]() {
391
- yield {
392
- choices: [{ delta: { content: 'Response' } }],
393
- };
394
- },
395
- };
396
- // Capture the parameters passed to the API
397
- let localCapturedParams;
398
- mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
399
- localCapturedParams = params;
400
- return mockStream;
401
- });
402
- // When I generate a chat completion
403
- const messages = [
404
- { role: ContentGeneratorRole.USER, content: 'Hello' },
405
- ];
406
- const generator = provider.generateChatCompletion(messages);
407
- const results = [];
408
- for await (const chunk of generator) {
409
- results.push(chunk);
410
- }
411
- // Then the API should receive the model parameters
412
- expect(localCapturedParams).toBeDefined();
413
- const apiParams = localCapturedParams;
414
- expect(apiParams.temperature).toBe(0.7);
415
- expect(apiParams.max_tokens).toBe(2000);
416
- expect(apiParams.top_p).toBe(0.9);
417
- expect(apiParams.model).toBe('gpt-3.5-turbo');
418
- expect(apiParams.messages).toEqual(messages);
419
- expect(apiParams.stream).toBe(true);
420
- expect(apiParams.stream_options).toEqual({ include_usage: true });
421
- });
422
- it('should make API calls without parameters when none are set', async () => {
423
- // Given no model parameters are set (fresh provider)
424
- const freshProvider = new OpenAIProvider('test-key', undefined, TEST_PROVIDER_CONFIG);
425
- freshProvider.setModel('gpt-3.5-turbo');
426
- const freshMockInstance = freshProvider.openai;
427
- // And the API returns a response
428
- const mockStream = {
429
- async *[Symbol.asyncIterator]() {
430
- yield {
431
- choices: [{ delta: { content: 'Response' } }],
432
- };
433
- },
434
- };
435
- // Capture the parameters passed to the API
436
- let localCapturedParams;
437
- freshMockInstance.chat.completions.create.mockImplementation(async (params) => {
438
- localCapturedParams = params;
439
- return mockStream;
440
- });
441
- // When I generate a chat completion
442
- const messages = [
443
- { role: ContentGeneratorRole.USER, content: 'Hello' },
444
- ];
445
- const generator = freshProvider.generateChatCompletion(messages);
446
- const results = [];
447
- for await (const chunk of generator) {
448
- results.push(chunk);
449
- }
450
- // Then the API should be called without extra parameters
451
- expect(localCapturedParams).toBeDefined();
452
- const apiParams = localCapturedParams;
453
- expect(apiParams).not.toHaveProperty('temperature');
454
- expect(apiParams).not.toHaveProperty('max_tokens');
455
- expect(apiParams).not.toHaveProperty('top_p');
456
- });
457
- it('should pass multiple model parameters correctly to the API', async () => {
458
- // Given I have set multiple diverse parameters
459
- provider.setModelParams({
460
- temperature: 0.5,
461
- max_tokens: 4096,
462
- top_p: 0.95,
463
- presence_penalty: 0.1,
464
- frequency_penalty: 0.2,
465
- seed: 12345,
466
- });
467
- // And the API returns a response
468
- const mockStream = {
469
- async *[Symbol.asyncIterator]() {
470
- yield {
471
- choices: [{ delta: { content: 'Response' } }],
472
- };
473
- },
474
- };
475
- // Capture the parameters passed to the API
476
- let localCapturedParams;
477
- mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
478
- localCapturedParams = params;
479
- return mockStream;
480
- });
481
- // When I generate a chat completion
482
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
483
- const generator = provider.generateChatCompletion(messages);
484
- for await (const _chunk of generator) {
485
- // consume the generator
486
- }
487
- // Then all parameters should be passed to the API
488
- expect(localCapturedParams).toBeDefined();
489
- const apiParams = localCapturedParams;
490
- expect(apiParams.temperature).toBe(0.5);
491
- expect(apiParams.max_tokens).toBe(4096);
492
- expect(apiParams.top_p).toBe(0.95);
493
- expect(apiParams.presence_penalty).toBe(0.1);
494
- expect(apiParams.frequency_penalty).toBe(0.2);
495
- expect(apiParams.seed).toBe(12345);
496
- });
497
- it('should pass unknown parameters through to the API without validation', async () => {
498
- // Given I set parameters that might not be standard OpenAI params
499
- provider.setModelParams({
500
- custom_param: 'custom_value',
501
- experimental_feature: true,
502
- vendor_specific: { nested: 'data' },
503
- });
504
- // And the API returns a response
505
- const mockStream = {
506
- async *[Symbol.asyncIterator]() {
507
- yield {
508
- choices: [{ delta: { content: 'Response' } }],
509
- };
510
- },
511
- };
512
- // Capture the parameters passed to the API
513
- let localCapturedParams;
514
- mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
515
- localCapturedParams = params;
516
- return mockStream;
517
- });
518
- // When I generate a chat completion
519
- const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
520
- const generator = provider.generateChatCompletion(messages);
521
- for await (const _chunk of generator) {
522
- // consume the generator
523
- }
524
- // Then unknown parameters should be passed through
525
- expect(localCapturedParams).toBeDefined();
526
- const apiParams = localCapturedParams;
527
- expect(apiParams.custom_param).toBe('custom_value');
528
- expect(apiParams.experimental_feature).toBe(true);
529
- expect(apiParams.vendor_specific).toEqual({ nested: 'data' });
530
- });
531
- it('should use model parameters across multiple API calls', async () => {
532
- // Given I set model parameters once
533
- provider.setModelParams({ temperature: 0.8 });
534
- // And the API returns responses
535
- const mockStream = {
536
- async *[Symbol.asyncIterator]() {
537
- yield {
538
- choices: [{ delta: { content: 'Response' } }],
539
- };
540
- },
541
- };
542
- // Capture parameters from multiple calls
543
- const capturedParamsArray = [];
544
- mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
545
- capturedParamsArray.push(params);
546
- return mockStream;
547
- });
548
- // When I make multiple API calls
549
- const messages = [
550
- { role: ContentGeneratorRole.USER, content: 'Hello' },
551
- ];
552
- // First call
553
- const generator1 = provider.generateChatCompletion(messages);
554
- for await (const _chunk of generator1) {
555
- // consume
556
- }
557
- // Second call
558
- const generator2 = provider.generateChatCompletion(messages);
559
- for await (const _chunk of generator2) {
560
- // consume
561
- }
562
- // Then both calls should include the parameters
563
- expect(capturedParamsArray).toHaveLength(2);
564
- const firstCallParams = capturedParamsArray[0];
565
- const secondCallParams = capturedParamsArray[1];
566
- expect(firstCallParams.temperature).toBe(0.8);
567
- expect(secondCallParams.temperature).toBe(0.8);
568
- });
569
- it('should work correctly with common OpenAI parameters', async () => {
570
- // Given I set common OpenAI parameters
571
- provider.setModelParams({
572
- temperature: 0.7, // Controls randomness
573
- max_tokens: 2048, // Maximum response length
574
- top_p: 0.9, // Nucleus sampling
575
- presence_penalty: 0.5, // Penalize repeated topics
576
- frequency_penalty: 0.3, // Penalize repeated tokens
577
- });
578
- // And the API returns a response
579
- const mockStream = {
580
- async *[Symbol.asyncIterator]() {
581
- yield {
582
- choices: [{ delta: { content: 'Creative response' } }],
583
- };
584
- },
585
- };
586
- // Capture the parameters passed to the API
587
- let localCapturedParams;
588
- mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
589
- localCapturedParams = params;
590
- return mockStream;
591
- });
592
- // When I generate a chat completion
593
- const messages = [
594
- {
595
- role: ContentGeneratorRole.USER,
596
- content: 'Write something creative',
597
- },
598
- ];
599
- const generator = provider.generateChatCompletion(messages);
600
- const results = [];
601
- for await (const chunk of generator) {
602
- results.push(chunk);
603
- }
604
- // Then the response should be generated with all parameters
605
- expect(results[0]).toMatchObject({
606
- role: ContentGeneratorRole.ASSISTANT,
607
- content: 'Creative response',
608
- });
609
- // And all parameters should have been passed to the API
610
- expect(localCapturedParams).toBeDefined();
611
- const apiParams = localCapturedParams;
612
- expect(apiParams.temperature).toBe(0.7);
613
- expect(apiParams.max_tokens).toBe(2048);
614
- expect(apiParams.top_p).toBe(0.9);
615
- expect(apiParams.presence_penalty).toBe(0.5);
616
- expect(apiParams.frequency_penalty).toBe(0.3);
617
- });
618
- });
619
- });
620
- });
621
- //# sourceMappingURL=OpenAIProvider.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OpenAIProvider.test.js","sourceRoot":"","sources":["../../../../src/providers/openai/OpenAIProvider.test.ts"],"names":[],"mappings":"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"}