@llumiverse/drivers 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/lib/{types/adobe → adobe}/firefly.d.ts +2 -1
  2. package/lib/adobe/firefly.d.ts.map +1 -0
  3. package/lib/adobe/firefly.js +120 -0
  4. package/lib/adobe/firefly.js.map +1 -0
  5. package/lib/{types/anthropic → anthropic}/index.d.ts +4 -2
  6. package/lib/anthropic/index.d.ts.map +1 -0
  7. package/lib/{esm/anthropic → anthropic}/index.js +19 -8
  8. package/lib/anthropic/index.js.map +1 -0
  9. package/lib/{types/azure → azure}/azure_foundry.d.ts +9 -7
  10. package/lib/azure/azure_foundry.d.ts.map +1 -0
  11. package/lib/{esm/azure → azure}/azure_foundry.js +138 -124
  12. package/lib/azure/azure_foundry.js.map +1 -0
  13. package/lib/{types/bedrock → bedrock}/converse.d.ts +2 -2
  14. package/lib/bedrock/converse.d.ts.map +1 -0
  15. package/lib/{esm/bedrock → bedrock}/converse.js +86 -79
  16. package/lib/bedrock/converse.js.map +1 -0
  17. package/lib/bedrock/embeddings.d.ts +4 -0
  18. package/lib/bedrock/embeddings.d.ts.map +1 -0
  19. package/lib/bedrock/embeddings.js +359 -0
  20. package/lib/bedrock/embeddings.js.map +1 -0
  21. package/lib/{types/bedrock → bedrock}/index.d.ts +33 -9
  22. package/lib/bedrock/index.d.ts.map +1 -0
  23. package/lib/{esm/bedrock → bedrock}/index.js +599 -324
  24. package/lib/bedrock/index.js.map +1 -0
  25. package/lib/{types/bedrock → bedrock}/nova-image-payload.d.ts +5 -5
  26. package/lib/bedrock/nova-image-payload.d.ts.map +1 -0
  27. package/lib/{esm/bedrock → bedrock}/nova-image-payload.js +31 -36
  28. package/lib/bedrock/nova-image-payload.js.map +1 -0
  29. package/lib/{types/bedrock → bedrock}/payloads.d.ts +1 -1
  30. package/lib/bedrock/payloads.d.ts.map +1 -0
  31. package/lib/{cjs/bedrock → bedrock}/payloads.js.map +1 -1
  32. package/lib/{types/bedrock → bedrock}/s3.d.ts +3 -2
  33. package/lib/bedrock/s3.d.ts.map +1 -0
  34. package/lib/{esm/bedrock → bedrock}/s3.js +27 -23
  35. package/lib/bedrock/s3.js.map +1 -0
  36. package/lib/{types/bedrock → bedrock}/twelvelabs.d.ts +8 -9
  37. package/lib/bedrock/twelvelabs.d.ts.map +1 -0
  38. package/lib/{esm/bedrock → bedrock}/twelvelabs.js +17 -21
  39. package/lib/bedrock/twelvelabs.js.map +1 -0
  40. package/lib/{types/groq → groq}/index.d.ts +6 -4
  41. package/lib/groq/index.d.ts.map +1 -0
  42. package/lib/{esm/groq → groq}/index.js +72 -39
  43. package/lib/groq/index.js.map +1 -0
  44. package/lib/{types/huggingface_ie.d.ts → huggingface_ie.d.ts} +4 -3
  45. package/lib/huggingface_ie.d.ts.map +1 -0
  46. package/lib/{esm/huggingface_ie.js → huggingface_ie.js} +32 -31
  47. package/lib/huggingface_ie.js.map +1 -0
  48. package/lib/index.d.ts +16 -0
  49. package/lib/index.d.ts.map +1 -0
  50. package/lib/index.js +16 -0
  51. package/lib/index.js.map +1 -0
  52. package/lib/{types/mistral → mistral}/index.d.ts +6 -5
  53. package/lib/mistral/index.d.ts.map +1 -0
  54. package/lib/{esm/mistral → mistral}/index.js +66 -38
  55. package/lib/mistral/index.js.map +1 -0
  56. package/lib/{types/mistral → mistral}/types.d.ts +1 -0
  57. package/lib/mistral/types.d.ts.map +1 -0
  58. package/lib/mistral/types.js.map +1 -0
  59. package/lib/{types/openai → openai}/azure_openai.d.ts +5 -4
  60. package/lib/openai/azure_openai.d.ts.map +1 -0
  61. package/lib/{esm/openai → openai}/azure_openai.js +17 -14
  62. package/lib/openai/azure_openai.js.map +1 -0
  63. package/lib/openai/drivers.d.ts +4 -0
  64. package/lib/openai/drivers.d.ts.map +1 -0
  65. package/lib/openai/drivers.js +9 -0
  66. package/lib/openai/drivers.js.map +1 -0
  67. package/lib/{types/openai → openai}/index.d.ts +16 -5
  68. package/lib/openai/index.d.ts.map +1 -0
  69. package/lib/{esm/openai → openai}/index.js +242 -141
  70. package/lib/openai/index.js.map +1 -0
  71. package/lib/{types/openai → openai}/openai.d.ts +3 -3
  72. package/lib/openai/openai.d.ts.map +1 -0
  73. package/lib/openai/openai.js +15 -0
  74. package/lib/openai/openai.js.map +1 -0
  75. package/lib/{types/openai → openai}/openai_compatible.d.ts +3 -3
  76. package/lib/openai/openai_compatible.d.ts.map +1 -0
  77. package/lib/{esm/openai → openai}/openai_compatible.js +14 -11
  78. package/lib/openai/openai_compatible.js.map +1 -0
  79. package/lib/{types/openai → openai}/openai_format.d.ts +3 -2
  80. package/lib/openai/openai_format.d.ts.map +1 -0
  81. package/lib/{esm/openai → openai}/openai_format.js +66 -24
  82. package/lib/openai/openai_format.js.map +1 -0
  83. package/lib/{types/replicate.d.ts → replicate.d.ts} +3 -2
  84. package/lib/replicate.d.ts.map +1 -0
  85. package/lib/{esm/replicate.js → replicate.js} +59 -49
  86. package/lib/replicate.js.map +1 -0
  87. package/lib/{types/shared → shared}/claude-messages.d.ts +25 -1
  88. package/lib/shared/claude-messages.d.ts.map +1 -0
  89. package/lib/{esm/shared → shared}/claude-messages.js +212 -59
  90. package/lib/shared/claude-messages.js.map +1 -0
  91. package/lib/{types/shared → shared}/claude-thinking.d.ts +1 -1
  92. package/lib/shared/claude-thinking.d.ts.map +1 -0
  93. package/lib/{esm/shared → shared}/claude-thinking.js +5 -7
  94. package/lib/shared/claude-thinking.js.map +1 -0
  95. package/lib/shared/debug-prompt.d.ts +5 -0
  96. package/lib/shared/debug-prompt.d.ts.map +1 -0
  97. package/lib/shared/debug-prompt.js +25 -0
  98. package/lib/shared/debug-prompt.js.map +1 -0
  99. package/lib/{types/test-driver → test-driver}/TestErrorCompletionStream.d.ts +1 -1
  100. package/lib/test-driver/TestErrorCompletionStream.d.ts.map +1 -0
  101. package/lib/test-driver/TestErrorCompletionStream.js +16 -0
  102. package/lib/test-driver/TestErrorCompletionStream.js.map +1 -0
  103. package/lib/{types/test-driver → test-driver}/TestValidationErrorCompletionStream.d.ts +1 -1
  104. package/lib/test-driver/TestValidationErrorCompletionStream.d.ts.map +1 -0
  105. package/lib/{esm/test-driver → test-driver}/TestValidationErrorCompletionStream.js +4 -4
  106. package/lib/test-driver/TestValidationErrorCompletionStream.js.map +1 -0
  107. package/lib/{types/test-driver → test-driver}/index.d.ts +3 -3
  108. package/lib/test-driver/index.d.ts.map +1 -0
  109. package/lib/{esm/test-driver → test-driver}/index.js +20 -20
  110. package/lib/test-driver/index.js.map +1 -0
  111. package/lib/{types/test-driver → test-driver}/utils.d.ts +1 -1
  112. package/lib/test-driver/utils.d.ts.map +1 -0
  113. package/lib/{esm/test-driver → test-driver}/utils.js +4 -4
  114. package/lib/test-driver/utils.js.map +1 -0
  115. package/lib/togetherai/index.d.ts +15 -0
  116. package/lib/togetherai/index.d.ts.map +1 -0
  117. package/lib/togetherai/index.js +54 -0
  118. package/lib/togetherai/index.js.map +1 -0
  119. package/lib/{types/togetherai → togetherai}/interfaces.d.ts +1 -1
  120. package/lib/togetherai/interfaces.d.ts.map +1 -0
  121. package/lib/{cjs/watsonx → togetherai}/interfaces.js.map +1 -1
  122. package/lib/vertexai/debug.d.ts +2 -0
  123. package/lib/vertexai/debug.d.ts.map +1 -0
  124. package/lib/{esm/vertexai → vertexai}/debug.js +1 -1
  125. package/lib/vertexai/debug.js.map +1 -0
  126. package/lib/vertexai/embeddings/embed-legacy-multimodal.d.ts +9 -0
  127. package/lib/vertexai/embeddings/embed-legacy-multimodal.d.ts.map +1 -0
  128. package/lib/vertexai/embeddings/embed-legacy-multimodal.js +141 -0
  129. package/lib/vertexai/embeddings/embed-legacy-multimodal.js.map +1 -0
  130. package/lib/vertexai/embeddings/embed.d.ts +13 -0
  131. package/lib/vertexai/embeddings/embed.d.ts.map +1 -0
  132. package/lib/vertexai/embeddings/embed.js +162 -0
  133. package/lib/vertexai/embeddings/embed.js.map +1 -0
  134. package/lib/vertexai/embeddings/source-utils.d.ts +9 -0
  135. package/lib/vertexai/embeddings/source-utils.d.ts.map +1 -0
  136. package/lib/vertexai/embeddings/source-utils.js +18 -0
  137. package/lib/vertexai/embeddings/source-utils.js.map +1 -0
  138. package/lib/{types/vertexai → vertexai}/index.d.ts +31 -19
  139. package/lib/vertexai/index.d.ts.map +1 -0
  140. package/lib/{esm/vertexai → vertexai}/index.js +221 -159
  141. package/lib/vertexai/index.js.map +1 -0
  142. package/lib/{types/vertexai → vertexai}/models/claude.d.ts +4 -4
  143. package/lib/vertexai/models/claude.d.ts.map +1 -0
  144. package/lib/{esm/vertexai → vertexai}/models/claude.js +17 -20
  145. package/lib/vertexai/models/claude.js.map +1 -0
  146. package/lib/{types/vertexai → vertexai}/models/gemini.d.ts +28 -4
  147. package/lib/vertexai/models/gemini.d.ts.map +1 -0
  148. package/lib/{esm/vertexai → vertexai}/models/gemini.js +238 -116
  149. package/lib/vertexai/models/gemini.js.map +1 -0
  150. package/lib/{types/vertexai → vertexai}/models/imagen.d.ts +12 -11
  151. package/lib/vertexai/models/imagen.d.ts.map +1 -0
  152. package/lib/{esm/vertexai → vertexai}/models/imagen.js +74 -47
  153. package/lib/vertexai/models/imagen.js.map +1 -0
  154. package/lib/{types/vertexai → vertexai}/models/llama.d.ts +4 -4
  155. package/lib/vertexai/models/llama.d.ts.map +1 -0
  156. package/lib/{esm/vertexai → vertexai}/models/llama.js +37 -33
  157. package/lib/vertexai/models/llama.js.map +1 -0
  158. package/lib/vertexai/models.d.ts +21 -0
  159. package/lib/vertexai/models.d.ts.map +1 -0
  160. package/lib/{esm/vertexai → vertexai}/models.js +12 -9
  161. package/lib/vertexai/models.js.map +1 -0
  162. package/lib/{types/watsonx → watsonx}/index.d.ts +4 -3
  163. package/lib/watsonx/index.d.ts.map +1 -0
  164. package/lib/{esm/watsonx → watsonx}/index.js +69 -41
  165. package/lib/watsonx/index.js.map +1 -0
  166. package/lib/watsonx/interfaces.d.ts.map +1 -0
  167. package/lib/{esm/watsonx → watsonx}/interfaces.js.map +1 -1
  168. package/lib/{types/xai → xai}/index.d.ts +4 -4
  169. package/lib/xai/index.d.ts.map +1 -0
  170. package/lib/{esm/xai → xai}/index.js +22 -18
  171. package/lib/xai/index.js.map +1 -0
  172. package/package.json +87 -36
  173. package/src/adobe/firefly.ts +60 -43
  174. package/src/anthropic/index.ts +37 -20
  175. package/src/azure/azure_foundry.ts +210 -165
  176. package/src/bedrock/converse.ts +124 -101
  177. package/src/bedrock/embeddings.test.ts +508 -0
  178. package/src/bedrock/embeddings.ts +517 -0
  179. package/src/bedrock/error-handling.test.ts +62 -14
  180. package/src/bedrock/index.ts +832 -466
  181. package/src/bedrock/nova-image-payload.ts +98 -91
  182. package/src/bedrock/payloads.ts +9 -9
  183. package/src/bedrock/s3.test.ts +39 -0
  184. package/src/bedrock/s3.ts +57 -38
  185. package/src/bedrock/streaming-tool-use.test.ts +86 -69
  186. package/src/bedrock/twelvelabs.ts +35 -32
  187. package/src/groq/index.ts +143 -60
  188. package/src/http-timeout-wiring.test.ts +263 -0
  189. package/src/huggingface_ie.ts +45 -61
  190. package/src/index.ts +15 -16
  191. package/src/mistral/index.ts +97 -48
  192. package/src/mistral/types.ts +13 -12
  193. package/src/openai/azure_openai.ts +35 -27
  194. package/src/openai/drivers.ts +9 -0
  195. package/src/openai/error-handling.test.ts +308 -113
  196. package/src/openai/index.ts +378 -248
  197. package/src/openai/openai.ts +6 -13
  198. package/src/openai/openai_compatible.ts +35 -25
  199. package/src/openai/openai_format.ts +90 -40
  200. package/src/replicate.ts +108 -86
  201. package/src/shared/claude-messages.test.ts +37 -0
  202. package/src/shared/claude-messages.ts +303 -97
  203. package/src/shared/claude-thinking.ts +6 -12
  204. package/src/shared/debug-prompt.ts +28 -0
  205. package/src/test-driver/TestErrorCompletionStream.ts +9 -10
  206. package/src/test-driver/TestValidationErrorCompletionStream.ts +9 -10
  207. package/src/test-driver/index.ts +43 -27
  208. package/src/test-driver/utils.ts +8 -8
  209. package/src/togetherai/index.test.ts +32 -0
  210. package/src/togetherai/index.ts +64 -128
  211. package/src/togetherai/interfaces.ts +5 -5
  212. package/src/vertexai/debug.ts +3 -3
  213. package/src/vertexai/embeddings/embed-legacy-multimodal.ts +211 -0
  214. package/src/vertexai/embeddings/embed.ts +206 -0
  215. package/src/vertexai/embeddings/embeddings.test.ts +497 -0
  216. package/src/vertexai/embeddings/source-utils.test.ts +54 -0
  217. package/src/vertexai/embeddings/source-utils.ts +29 -0
  218. package/src/vertexai/index.ts +331 -244
  219. package/src/vertexai/models/claude-error-handling.test.ts +83 -36
  220. package/src/vertexai/models/claude-streaming-spacing.test.ts +82 -75
  221. package/src/vertexai/models/claude.ts +55 -40
  222. package/src/vertexai/models/gemini-conversation-mutation.test.ts +65 -23
  223. package/src/vertexai/models/gemini-error-handling.test.ts +126 -10
  224. package/src/vertexai/models/gemini-orphaned-tool-result.test.ts +118 -0
  225. package/src/vertexai/models/gemini.ts +349 -172
  226. package/src/vertexai/models/imagen.ts +164 -100
  227. package/src/vertexai/models/llama.ts +70 -48
  228. package/src/vertexai/models.ts +36 -16
  229. package/src/watsonx/index.ts +101 -65
  230. package/src/watsonx/interfaces.ts +10 -15
  231. package/src/xai/index.ts +30 -30
  232. package/lib/cjs/adobe/firefly.js +0 -120
  233. package/lib/cjs/adobe/firefly.js.map +0 -1
  234. package/lib/cjs/anthropic/index.js +0 -64
  235. package/lib/cjs/anthropic/index.js.map +0 -1
  236. package/lib/cjs/azure/azure_foundry.js +0 -432
  237. package/lib/cjs/azure/azure_foundry.js.map +0 -1
  238. package/lib/cjs/bedrock/converse.js +0 -359
  239. package/lib/cjs/bedrock/converse.js.map +0 -1
  240. package/lib/cjs/bedrock/index.js +0 -1508
  241. package/lib/cjs/bedrock/index.js.map +0 -1
  242. package/lib/cjs/bedrock/nova-image-payload.js +0 -207
  243. package/lib/cjs/bedrock/nova-image-payload.js.map +0 -1
  244. package/lib/cjs/bedrock/payloads.js +0 -3
  245. package/lib/cjs/bedrock/s3.js +0 -107
  246. package/lib/cjs/bedrock/s3.js.map +0 -1
  247. package/lib/cjs/bedrock/twelvelabs.js +0 -87
  248. package/lib/cjs/bedrock/twelvelabs.js.map +0 -1
  249. package/lib/cjs/groq/index.js +0 -328
  250. package/lib/cjs/groq/index.js.map +0 -1
  251. package/lib/cjs/huggingface_ie.js +0 -201
  252. package/lib/cjs/huggingface_ie.js.map +0 -1
  253. package/lib/cjs/index.js +0 -32
  254. package/lib/cjs/index.js.map +0 -1
  255. package/lib/cjs/mistral/index.js +0 -176
  256. package/lib/cjs/mistral/index.js.map +0 -1
  257. package/lib/cjs/mistral/types.js +0 -83
  258. package/lib/cjs/mistral/types.js.map +0 -1
  259. package/lib/cjs/openai/azure_openai.js +0 -72
  260. package/lib/cjs/openai/azure_openai.js.map +0 -1
  261. package/lib/cjs/openai/index.js +0 -1135
  262. package/lib/cjs/openai/index.js.map +0 -1
  263. package/lib/cjs/openai/openai.js +0 -21
  264. package/lib/cjs/openai/openai.js.map +0 -1
  265. package/lib/cjs/openai/openai_compatible.js +0 -63
  266. package/lib/cjs/openai/openai_compatible.js.map +0 -1
  267. package/lib/cjs/openai/openai_format.js +0 -131
  268. package/lib/cjs/openai/openai_format.js.map +0 -1
  269. package/lib/cjs/package.json +0 -3
  270. package/lib/cjs/replicate.js +0 -275
  271. package/lib/cjs/replicate.js.map +0 -1
  272. package/lib/cjs/shared/claude-messages.js +0 -737
  273. package/lib/cjs/shared/claude-messages.js.map +0 -1
  274. package/lib/cjs/shared/claude-thinking.js +0 -60
  275. package/lib/cjs/shared/claude-thinking.js.map +0 -1
  276. package/lib/cjs/test-driver/TestErrorCompletionStream.js +0 -20
  277. package/lib/cjs/test-driver/TestErrorCompletionStream.js.map +0 -1
  278. package/lib/cjs/test-driver/TestValidationErrorCompletionStream.js +0 -24
  279. package/lib/cjs/test-driver/TestValidationErrorCompletionStream.js.map +0 -1
  280. package/lib/cjs/test-driver/index.js +0 -109
  281. package/lib/cjs/test-driver/index.js.map +0 -1
  282. package/lib/cjs/test-driver/utils.js +0 -30
  283. package/lib/cjs/test-driver/utils.js.map +0 -1
  284. package/lib/cjs/togetherai/index.js +0 -126
  285. package/lib/cjs/togetherai/index.js.map +0 -1
  286. package/lib/cjs/togetherai/interfaces.js +0 -3
  287. package/lib/cjs/togetherai/interfaces.js.map +0 -1
  288. package/lib/cjs/vertexai/debug.js +0 -12
  289. package/lib/cjs/vertexai/debug.js.map +0 -1
  290. package/lib/cjs/vertexai/embeddings/embeddings-image.js +0 -27
  291. package/lib/cjs/vertexai/embeddings/embeddings-image.js.map +0 -1
  292. package/lib/cjs/vertexai/embeddings/embeddings-text.js +0 -23
  293. package/lib/cjs/vertexai/embeddings/embeddings-text.js.map +0 -1
  294. package/lib/cjs/vertexai/index.js +0 -644
  295. package/lib/cjs/vertexai/index.js.map +0 -1
  296. package/lib/cjs/vertexai/models/claude.js +0 -72
  297. package/lib/cjs/vertexai/models/claude.js.map +0 -1
  298. package/lib/cjs/vertexai/models/gemini.js +0 -864
  299. package/lib/cjs/vertexai/models/gemini.js.map +0 -1
  300. package/lib/cjs/vertexai/models/imagen.js +0 -303
  301. package/lib/cjs/vertexai/models/imagen.js.map +0 -1
  302. package/lib/cjs/vertexai/models/llama.js +0 -183
  303. package/lib/cjs/vertexai/models/llama.js.map +0 -1
  304. package/lib/cjs/vertexai/models.js +0 -35
  305. package/lib/cjs/vertexai/models.js.map +0 -1
  306. package/lib/cjs/watsonx/index.js +0 -161
  307. package/lib/cjs/watsonx/index.js.map +0 -1
  308. package/lib/cjs/watsonx/interfaces.js +0 -3
  309. package/lib/cjs/xai/index.js +0 -65
  310. package/lib/cjs/xai/index.js.map +0 -1
  311. package/lib/esm/adobe/firefly.js +0 -116
  312. package/lib/esm/adobe/firefly.js.map +0 -1
  313. package/lib/esm/anthropic/index.js.map +0 -1
  314. package/lib/esm/azure/azure_foundry.js.map +0 -1
  315. package/lib/esm/bedrock/converse.js.map +0 -1
  316. package/lib/esm/bedrock/index.js.map +0 -1
  317. package/lib/esm/bedrock/nova-image-payload.js.map +0 -1
  318. package/lib/esm/bedrock/payloads.js.map +0 -1
  319. package/lib/esm/bedrock/s3.js.map +0 -1
  320. package/lib/esm/bedrock/twelvelabs.js.map +0 -1
  321. package/lib/esm/groq/index.js.map +0 -1
  322. package/lib/esm/huggingface_ie.js.map +0 -1
  323. package/lib/esm/index.js +0 -16
  324. package/lib/esm/index.js.map +0 -1
  325. package/lib/esm/mistral/index.js.map +0 -1
  326. package/lib/esm/mistral/types.js.map +0 -1
  327. package/lib/esm/openai/azure_openai.js.map +0 -1
  328. package/lib/esm/openai/index.js.map +0 -1
  329. package/lib/esm/openai/openai.js +0 -14
  330. package/lib/esm/openai/openai.js.map +0 -1
  331. package/lib/esm/openai/openai_compatible.js.map +0 -1
  332. package/lib/esm/openai/openai_format.js.map +0 -1
  333. package/lib/esm/replicate.js.map +0 -1
  334. package/lib/esm/shared/claude-messages.js.map +0 -1
  335. package/lib/esm/shared/claude-thinking.js.map +0 -1
  336. package/lib/esm/test-driver/TestErrorCompletionStream.js +0 -16
  337. package/lib/esm/test-driver/TestErrorCompletionStream.js.map +0 -1
  338. package/lib/esm/test-driver/TestValidationErrorCompletionStream.js.map +0 -1
  339. package/lib/esm/test-driver/index.js.map +0 -1
  340. package/lib/esm/test-driver/utils.js.map +0 -1
  341. package/lib/esm/togetherai/index.js +0 -122
  342. package/lib/esm/togetherai/index.js.map +0 -1
  343. package/lib/esm/togetherai/interfaces.js.map +0 -1
  344. package/lib/esm/vertexai/debug.js.map +0 -1
  345. package/lib/esm/vertexai/embeddings/embeddings-image.js +0 -24
  346. package/lib/esm/vertexai/embeddings/embeddings-image.js.map +0 -1
  347. package/lib/esm/vertexai/embeddings/embeddings-text.js +0 -20
  348. package/lib/esm/vertexai/embeddings/embeddings-text.js.map +0 -1
  349. package/lib/esm/vertexai/index.js.map +0 -1
  350. package/lib/esm/vertexai/models/claude.js.map +0 -1
  351. package/lib/esm/vertexai/models/gemini.js.map +0 -1
  352. package/lib/esm/vertexai/models/imagen.js.map +0 -1
  353. package/lib/esm/vertexai/models/llama.js.map +0 -1
  354. package/lib/esm/vertexai/models.js.map +0 -1
  355. package/lib/esm/watsonx/index.js.map +0 -1
  356. package/lib/esm/xai/index.js.map +0 -1
  357. package/lib/types/adobe/firefly.d.ts.map +0 -1
  358. package/lib/types/anthropic/index.d.ts.map +0 -1
  359. package/lib/types/azure/azure_foundry.d.ts.map +0 -1
  360. package/lib/types/bedrock/converse.d.ts.map +0 -1
  361. package/lib/types/bedrock/index.d.ts.map +0 -1
  362. package/lib/types/bedrock/nova-image-payload.d.ts.map +0 -1
  363. package/lib/types/bedrock/payloads.d.ts.map +0 -1
  364. package/lib/types/bedrock/s3.d.ts.map +0 -1
  365. package/lib/types/bedrock/twelvelabs.d.ts.map +0 -1
  366. package/lib/types/groq/index.d.ts.map +0 -1
  367. package/lib/types/huggingface_ie.d.ts.map +0 -1
  368. package/lib/types/index.d.ts +0 -16
  369. package/lib/types/index.d.ts.map +0 -1
  370. package/lib/types/mistral/index.d.ts.map +0 -1
  371. package/lib/types/mistral/types.d.ts.map +0 -1
  372. package/lib/types/openai/azure_openai.d.ts.map +0 -1
  373. package/lib/types/openai/index.d.ts.map +0 -1
  374. package/lib/types/openai/openai.d.ts.map +0 -1
  375. package/lib/types/openai/openai_compatible.d.ts.map +0 -1
  376. package/lib/types/openai/openai_format.d.ts.map +0 -1
  377. package/lib/types/replicate.d.ts.map +0 -1
  378. package/lib/types/shared/claude-messages.d.ts.map +0 -1
  379. package/lib/types/shared/claude-thinking.d.ts.map +0 -1
  380. package/lib/types/test-driver/TestErrorCompletionStream.d.ts.map +0 -1
  381. package/lib/types/test-driver/TestValidationErrorCompletionStream.d.ts.map +0 -1
  382. package/lib/types/test-driver/index.d.ts.map +0 -1
  383. package/lib/types/test-driver/utils.d.ts.map +0 -1
  384. package/lib/types/togetherai/index.d.ts +0 -23
  385. package/lib/types/togetherai/index.d.ts.map +0 -1
  386. package/lib/types/togetherai/interfaces.d.ts.map +0 -1
  387. package/lib/types/vertexai/debug.d.ts +0 -2
  388. package/lib/types/vertexai/debug.d.ts.map +0 -1
  389. package/lib/types/vertexai/embeddings/embeddings-image.d.ts +0 -11
  390. package/lib/types/vertexai/embeddings/embeddings-image.d.ts.map +0 -1
  391. package/lib/types/vertexai/embeddings/embeddings-text.d.ts +0 -10
  392. package/lib/types/vertexai/embeddings/embeddings-text.d.ts.map +0 -1
  393. package/lib/types/vertexai/index.d.ts.map +0 -1
  394. package/lib/types/vertexai/models/claude.d.ts.map +0 -1
  395. package/lib/types/vertexai/models/gemini.d.ts.map +0 -1
  396. package/lib/types/vertexai/models/imagen.d.ts.map +0 -1
  397. package/lib/types/vertexai/models/llama.d.ts.map +0 -1
  398. package/lib/types/vertexai/models.d.ts +0 -20
  399. package/lib/types/vertexai/models.d.ts.map +0 -1
  400. package/lib/types/watsonx/index.d.ts.map +0 -1
  401. package/lib/types/watsonx/interfaces.d.ts.map +0 -1
  402. package/lib/types/xai/index.d.ts.map +0 -1
  403. package/src/vertexai/embeddings/embeddings-image.ts +0 -52
  404. package/src/vertexai/embeddings/embeddings-text.ts +0 -54
  405. /package/lib/{esm/bedrock → bedrock}/payloads.js +0 -0
  406. /package/lib/{esm/mistral → mistral}/types.js +0 -0
  407. /package/lib/{esm/togetherai → togetherai}/interfaces.js +0 -0
  408. /package/lib/{types/watsonx → watsonx}/interfaces.d.ts +0 -0
  409. /package/lib/{esm/watsonx → watsonx}/interfaces.js +0 -0
@@ -1,23 +1,32 @@
1
- import { describe, it, expect, beforeEach } from 'vitest';
2
- import { BaseOpenAIDriver } from './index.js';
3
- import { LlumiverseError, LlumiverseErrorContext, Providers } from '@llumiverse/core';
1
+ import { LlumiverseError, Providers } from '@llumiverse/core';
4
2
  import OpenAI from 'openai';
5
3
  import {
4
+ APIConnectionError,
5
+ APIConnectionTimeoutError,
6
6
  APIError,
7
- BadRequestError,
8
7
  AuthenticationError,
9
- PermissionDeniedError,
10
- NotFoundError,
8
+ BadRequestError,
11
9
  ConflictError,
12
- UnprocessableEntityError,
13
- RateLimitError,
10
+ ContentFilterFinishReasonError,
14
11
  InternalServerError,
15
- APIConnectionError,
16
- APIConnectionTimeoutError,
17
12
  LengthFinishReasonError,
18
- ContentFilterFinishReasonError,
19
- OpenAIError,
13
+ NotFoundError,
14
+ PermissionDeniedError,
15
+ RateLimitError,
16
+ UnprocessableEntityError,
20
17
  } from 'openai/error';
18
+ import { beforeEach, describe, expect, it } from 'vitest';
19
+ import { exposePrivate, getProp } from '../../test/__helpers__/test-utils.js';
20
+ import { BaseOpenAIDriver } from './index.js';
21
+
22
+ type BaseOpenAIDriverInternals = {
23
+ isOpenAIErrorRetryable: (
24
+ error: unknown,
25
+ httpStatusCode: number | undefined,
26
+ errorCode: string | null | undefined,
27
+ errorType: string | undefined,
28
+ ) => boolean | undefined;
29
+ };
21
30
 
22
31
  // Test implementation of BaseOpenAIDriver
23
32
  class TestOpenAIDriver extends BaseOpenAIDriver {
@@ -30,6 +39,38 @@ class TestOpenAIDriver extends BaseOpenAIDriver {
30
39
  }
31
40
  }
32
41
 
42
+ describe('BaseOpenAIDriver usage mapping', () => {
43
+ it('maps Together flat cached_tokens usage into prompt_cached', () => {
44
+ const driver = new TestOpenAIDriver();
45
+ const response = {
46
+ status: 'completed',
47
+ output: [
48
+ {
49
+ type: 'message',
50
+ role: 'assistant',
51
+ content: [{ type: 'output_text', text: 'ok', annotations: [] }],
52
+ },
53
+ ],
54
+ usage: {
55
+ input_tokens: 100,
56
+ output_tokens: 20,
57
+ total_tokens: 120,
58
+ cached_tokens: 45,
59
+ },
60
+ } as unknown as OpenAI.Responses.Response;
61
+
62
+ const completion = driver.extractDataFromResponse({ model: 'test-model' }, response);
63
+
64
+ expect(completion.token_usage).toEqual({
65
+ prompt: 100,
66
+ result: 20,
67
+ total: 120,
68
+ prompt_cached: 45,
69
+ prompt_new: 55,
70
+ });
71
+ });
72
+ });
73
+
33
74
  describe('BaseOpenAIDriver Error Handling', () => {
34
75
  let driver: TestOpenAIDriver;
35
76
 
@@ -41,20 +82,21 @@ describe('BaseOpenAIDriver Error Handling', () => {
41
82
  it('should handle BadRequestError with status code and parameter', () => {
42
83
  const headers = new Headers();
43
84
  headers.set('x-request-id', 'req_test_123');
44
-
85
+
45
86
  const openaiError = new BadRequestError(
46
87
  400,
47
88
  {
48
- message: "Invalid 'temperature': decimal above maximum value. Expected a value <= 2, but got 31313 instead.",
89
+ message:
90
+ "Invalid 'temperature': decimal above maximum value. Expected a value <= 2, but got 31313 instead.",
49
91
  type: 'invalid_request_error',
50
92
  param: 'temperature',
51
- code: 'decimal_above_max_value'
93
+ code: 'decimal_above_max_value',
52
94
  },
53
95
  "Invalid 'temperature': decimal above maximum value. Expected a value <= 2, but got 31313 instead.",
54
- headers
96
+ headers,
55
97
  );
56
98
 
57
- const error = driver.formatLlumiverseError( openaiError, {
99
+ const error = driver.formatLlumiverseError(openaiError, {
58
100
  provider: 'openai',
59
101
  model: 'gpt-4',
60
102
  operation: 'execute',
@@ -77,13 +119,13 @@ describe('BaseOpenAIDriver Error Handling', () => {
77
119
  {
78
120
  message: 'Rate limit exceeded',
79
121
  type: 'rate_limit_error',
80
- code: 'rate_limit_exceeded'
122
+ code: 'rate_limit_exceeded',
81
123
  },
82
124
  'Rate limit exceeded',
83
- headers
125
+ headers,
84
126
  );
85
127
 
86
- const error = driver.formatLlumiverseError( openaiError, {
128
+ const error = driver.formatLlumiverseError(openaiError, {
87
129
  provider: 'openai',
88
130
  model: 'gpt-4',
89
131
  operation: 'execute',
@@ -100,13 +142,13 @@ describe('BaseOpenAIDriver Error Handling', () => {
100
142
  {
101
143
  message: 'Internal server error',
102
144
  type: 'server_error',
103
- code: 'server_error'
145
+ code: 'server_error',
104
146
  },
105
147
  'Internal server error',
106
- new Headers()
148
+ new Headers(),
107
149
  );
108
150
 
109
- const error = driver.formatLlumiverseError( openaiError, {
151
+ const error = driver.formatLlumiverseError(openaiError, {
110
152
  provider: 'openai',
111
153
  model: 'gpt-4',
112
154
  operation: 'execute',
@@ -123,13 +165,13 @@ describe('BaseOpenAIDriver Error Handling', () => {
123
165
  {
124
166
  message: 'Invalid API key',
125
167
  type: 'authentication_error',
126
- code: 'invalid_api_key'
168
+ code: 'invalid_api_key',
127
169
  },
128
170
  'Invalid API key',
129
- new Headers()
171
+ new Headers(),
130
172
  );
131
173
 
132
- const error = driver.formatLlumiverseError( openaiError, {
174
+ const error = driver.formatLlumiverseError(openaiError, {
133
175
  provider: 'openai',
134
176
  model: 'gpt-4',
135
177
  operation: 'execute',
@@ -145,13 +187,13 @@ describe('BaseOpenAIDriver Error Handling', () => {
145
187
  403,
146
188
  {
147
189
  message: 'Insufficient permissions',
148
- type: 'permission_error'
190
+ type: 'permission_error',
149
191
  },
150
192
  'Insufficient permissions',
151
- new Headers()
193
+ new Headers(),
152
194
  );
153
195
 
154
- const error = driver.formatLlumiverseError( openaiError, {
196
+ const error = driver.formatLlumiverseError(openaiError, {
155
197
  provider: 'openai',
156
198
  model: 'gpt-4',
157
199
  operation: 'execute',
@@ -168,13 +210,13 @@ describe('BaseOpenAIDriver Error Handling', () => {
168
210
  {
169
211
  message: 'Model not found',
170
212
  type: 'invalid_request_error',
171
- code: 'model_not_found'
213
+ code: 'model_not_found',
172
214
  },
173
215
  'Model not found',
174
- new Headers()
216
+ new Headers(),
175
217
  );
176
218
 
177
- const error = driver.formatLlumiverseError( openaiError, {
219
+ const error = driver.formatLlumiverseError(openaiError, {
178
220
  provider: 'openai',
179
221
  model: 'gpt-invalid',
180
222
  operation: 'execute',
@@ -190,13 +232,13 @@ describe('BaseOpenAIDriver Error Handling', () => {
190
232
  409,
191
233
  {
192
234
  message: 'Resource conflict',
193
- type: 'conflict_error'
235
+ type: 'conflict_error',
194
236
  },
195
237
  'Resource conflict',
196
- new Headers()
238
+ new Headers(),
197
239
  );
198
240
 
199
- const error = driver.formatLlumiverseError( openaiError, {
241
+ const error = driver.formatLlumiverseError(openaiError, {
200
242
  provider: 'openai',
201
243
  model: 'gpt-4',
202
244
  operation: 'execute',
@@ -212,13 +254,13 @@ describe('BaseOpenAIDriver Error Handling', () => {
212
254
  422,
213
255
  {
214
256
  message: 'Validation failed',
215
- type: 'validation_error'
257
+ type: 'validation_error',
216
258
  },
217
259
  'Validation failed',
218
- new Headers()
260
+ new Headers(),
219
261
  );
220
262
 
221
- const error = driver.formatLlumiverseError( openaiError, {
263
+ const error = driver.formatLlumiverseError(openaiError, {
222
264
  provider: 'openai',
223
265
  model: 'gpt-4',
224
266
  operation: 'execute',
@@ -232,7 +274,7 @@ describe('BaseOpenAIDriver Error Handling', () => {
232
274
  it('should handle APIConnectionTimeoutError as retryable', () => {
233
275
  const openaiError = new APIConnectionTimeoutError({ message: 'Request timed out' });
234
276
 
235
- const error = driver.formatLlumiverseError( openaiError, {
277
+ const error = driver.formatLlumiverseError(openaiError, {
236
278
  provider: 'openai',
237
279
  model: 'gpt-4',
238
280
  operation: 'execute',
@@ -246,7 +288,7 @@ describe('BaseOpenAIDriver Error Handling', () => {
246
288
  it('should handle APIConnectionError as retryable', () => {
247
289
  const openaiError = new APIConnectionError({ message: 'Connection failed' });
248
290
 
249
- const error = driver.formatLlumiverseError( openaiError, {
291
+ const error = driver.formatLlumiverseError(openaiError, {
250
292
  provider: 'openai',
251
293
  model: 'gpt-4',
252
294
  operation: 'execute',
@@ -260,7 +302,7 @@ describe('BaseOpenAIDriver Error Handling', () => {
260
302
  it('should handle LengthFinishReasonError as not retryable', () => {
261
303
  const openaiError = new LengthFinishReasonError();
262
304
 
263
- const error = driver.formatLlumiverseError( openaiError, {
305
+ const error = driver.formatLlumiverseError(openaiError, {
264
306
  provider: 'openai',
265
307
  model: 'gpt-4',
266
308
  operation: 'execute',
@@ -273,7 +315,7 @@ describe('BaseOpenAIDriver Error Handling', () => {
273
315
  it('should handle ContentFilterFinishReasonError as not retryable', () => {
274
316
  const openaiError = new ContentFilterFinishReasonError();
275
317
 
276
- const error = driver.formatLlumiverseError( openaiError, {
318
+ const error = driver.formatLlumiverseError(openaiError, {
277
319
  provider: 'openai',
278
320
  model: 'gpt-4',
279
321
  operation: 'execute',
@@ -289,13 +331,13 @@ describe('BaseOpenAIDriver Error Handling', () => {
289
331
  400,
290
332
  {
291
333
  message: 'Invalid parameter',
292
- code: 'invalid_parameter'
334
+ code: 'invalid_parameter',
293
335
  },
294
336
  'Invalid parameter',
295
- headers
337
+ headers,
296
338
  );
297
339
 
298
- const error = driver.formatLlumiverseError( openaiError, {
340
+ const error = driver.formatLlumiverseError(openaiError, {
299
341
  provider: 'openai',
300
342
  model: 'gpt-4',
301
343
  operation: 'execute',
@@ -311,13 +353,13 @@ describe('BaseOpenAIDriver Error Handling', () => {
311
353
  {
312
354
  message: 'Invalid value',
313
355
  param: 'max_tokens',
314
- code: 'invalid_value'
356
+ code: 'invalid_value',
315
357
  },
316
358
  'Invalid value',
317
- headers
359
+ headers,
318
360
  );
319
361
 
320
- const error = driver.formatLlumiverseError( openaiError, {
362
+ const error = driver.formatLlumiverseError(openaiError, {
321
363
  provider: 'openai',
322
364
  model: 'gpt-4',
323
365
  operation: 'execute',
@@ -329,15 +371,10 @@ describe('BaseOpenAIDriver Error Handling', () => {
329
371
  it('should include request ID when available', () => {
330
372
  const headers = new Headers();
331
373
  headers.set('x-request-id', 'req_xyz789');
332
-
333
- const openaiError = new BadRequestError(
334
- 400,
335
- { message: 'Bad request' },
336
- 'Bad request',
337
- headers
338
- );
339
374
 
340
- const error = driver.formatLlumiverseError( openaiError, {
375
+ const openaiError = new BadRequestError(400, { message: 'Bad request' }, 'Bad request', headers);
376
+
377
+ const error = driver.formatLlumiverseError(openaiError, {
341
378
  provider: 'openai',
342
379
  model: 'gpt-4',
343
380
  operation: 'execute',
@@ -350,7 +387,7 @@ describe('BaseOpenAIDriver Error Handling', () => {
350
387
  const regularError = new Error('Regular error');
351
388
 
352
389
  expect(() => {
353
- driver.formatLlumiverseError( regularError, {
390
+ driver.formatLlumiverseError(regularError, {
354
391
  provider: 'openai',
355
392
  model: 'gpt-4',
356
393
  operation: 'execute',
@@ -359,14 +396,9 @@ describe('BaseOpenAIDriver Error Handling', () => {
359
396
  });
360
397
 
361
398
  it('should preserve original error for debugging', () => {
362
- const openaiError = new BadRequestError(
363
- 400,
364
- { message: 'Test error' },
365
- 'Test error',
366
- new Headers()
367
- );
399
+ const openaiError = new BadRequestError(400, { message: 'Test error' }, 'Test error', new Headers());
368
400
 
369
- const error = driver.formatLlumiverseError( openaiError, {
401
+ const error = driver.formatLlumiverseError(openaiError, {
370
402
  provider: 'openai',
371
403
  model: 'gpt-4',
372
404
  operation: 'execute',
@@ -385,7 +417,12 @@ describe('BaseOpenAIDriver Error Handling', () => {
385
417
  ];
386
418
 
387
419
  for (const error of retryableErrors) {
388
- const result = (driver as any).isOpenAIErrorRetryable(error, error.status, null, undefined);
420
+ const result = exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
421
+ error,
422
+ error.status,
423
+ null,
424
+ undefined,
425
+ );
389
426
  expect(result, `${error.constructor.name} should be retryable`).toBe(true);
390
427
  }
391
428
  });
@@ -403,83 +440,241 @@ describe('BaseOpenAIDriver Error Handling', () => {
403
440
  ];
404
441
 
405
442
  for (const error of nonRetryableErrors) {
406
- const status = 'status' in error ? (error as any).status : undefined;
407
- const result = (driver as any).isOpenAIErrorRetryable(error, status, null, undefined);
443
+ const status = getProp<number>(error, 'status');
444
+ const result = exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
445
+ error,
446
+ status,
447
+ null,
448
+ undefined,
449
+ );
408
450
  expect(result, `${error.constructor.name} should not be retryable`).toBe(false);
409
451
  }
410
452
  });
411
453
 
412
454
  it('should classify retryable error codes correctly', () => {
413
- const apiError = new APIError(undefined as any, {}, 'Error', new Headers());
414
-
415
- expect((driver as any).isOpenAIErrorRetryable(apiError, undefined, 'timeout', undefined)).toBe(true);
416
- expect((driver as any).isOpenAIErrorRetryable(apiError, undefined, 'server_error', undefined)).toBe(true);
417
- expect((driver as any).isOpenAIErrorRetryable(apiError, undefined, 'service_unavailable', undefined)).toBe(true);
418
- expect((driver as any).isOpenAIErrorRetryable(apiError, undefined, 'rate_limit_exceeded', undefined)).toBe(true);
455
+ const apiError = new APIError(undefined, {}, 'Error', new Headers());
456
+
457
+ expect(
458
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
459
+ apiError,
460
+ undefined,
461
+ 'timeout',
462
+ undefined,
463
+ ),
464
+ ).toBe(true);
465
+ expect(
466
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
467
+ apiError,
468
+ undefined,
469
+ 'server_error',
470
+ undefined,
471
+ ),
472
+ ).toBe(true);
473
+ expect(
474
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
475
+ apiError,
476
+ undefined,
477
+ 'service_unavailable',
478
+ undefined,
479
+ ),
480
+ ).toBe(true);
481
+ expect(
482
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
483
+ apiError,
484
+ undefined,
485
+ 'rate_limit_exceeded',
486
+ undefined,
487
+ ),
488
+ ).toBe(true);
419
489
  });
420
490
 
421
491
  it('should classify non-retryable error codes correctly', () => {
422
- const apiError = new APIError(undefined as any, {}, 'Error', new Headers());
423
-
424
- expect((driver as any).isOpenAIErrorRetryable(apiError, undefined, 'invalid_api_key', undefined)).toBe(false);
425
- expect((driver as any).isOpenAIErrorRetryable(apiError, undefined, 'invalid_request_error', undefined)).toBe(false);
426
- expect((driver as any).isOpenAIErrorRetryable(apiError, undefined, 'model_not_found', undefined)).toBe(false);
427
- expect((driver as any).isOpenAIErrorRetryable(apiError, undefined, 'insufficient_quota', undefined)).toBe(false);
428
- expect((driver as any).isOpenAIErrorRetryable(apiError, undefined, 'invalid_model', undefined)).toBe(false);
429
- expect((driver as any).isOpenAIErrorRetryable(apiError, undefined, 'invalid_parameter', undefined)).toBe(false);
492
+ const apiError = new APIError(undefined, {}, 'Error', new Headers());
493
+
494
+ expect(
495
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
496
+ apiError,
497
+ undefined,
498
+ 'invalid_api_key',
499
+ undefined,
500
+ ),
501
+ ).toBe(false);
502
+ expect(
503
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
504
+ apiError,
505
+ undefined,
506
+ 'invalid_request_error',
507
+ undefined,
508
+ ),
509
+ ).toBe(false);
510
+ expect(
511
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
512
+ apiError,
513
+ undefined,
514
+ 'model_not_found',
515
+ undefined,
516
+ ),
517
+ ).toBe(false);
518
+ expect(
519
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
520
+ apiError,
521
+ undefined,
522
+ 'insufficient_quota',
523
+ undefined,
524
+ ),
525
+ ).toBe(false);
526
+ expect(
527
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
528
+ apiError,
529
+ undefined,
530
+ 'invalid_model',
531
+ undefined,
532
+ ),
533
+ ).toBe(false);
534
+ expect(
535
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
536
+ apiError,
537
+ undefined,
538
+ 'invalid_parameter',
539
+ undefined,
540
+ ),
541
+ ).toBe(false);
430
542
  });
431
543
 
432
544
  it('should classify error types correctly', () => {
433
- const apiError = new APIError(undefined as any, {}, 'Error', new Headers());
434
-
435
- expect((driver as any).isOpenAIErrorRetryable(apiError, undefined, null, 'invalid_request_error')).toBe(false);
436
- expect((driver as any).isOpenAIErrorRetryable(apiError, undefined, null, 'authentication_error')).toBe(false);
545
+ const apiError = new APIError(undefined, {}, 'Error', new Headers());
546
+
547
+ expect(
548
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
549
+ apiError,
550
+ undefined,
551
+ null,
552
+ 'invalid_request_error',
553
+ ),
554
+ ).toBe(false);
555
+ expect(
556
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
557
+ apiError,
558
+ undefined,
559
+ null,
560
+ 'authentication_error',
561
+ ),
562
+ ).toBe(false);
437
563
  });
438
564
 
439
565
  it('should use HTTP status codes when available', () => {
440
566
  const apiError = new APIError(429, {}, 'Too many requests', new Headers());
441
- expect((driver as any).isOpenAIErrorRetryable(apiError, 429, null, undefined)).toBe(true);
442
-
567
+ expect(
568
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(apiError, 429, null, undefined),
569
+ ).toBe(true);
570
+
443
571
  const apiError2 = new APIError(408, {}, 'Request timeout', new Headers());
444
- expect((driver as any).isOpenAIErrorRetryable(apiError2, 408, null, undefined)).toBe(true);
445
-
572
+ expect(
573
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
574
+ apiError2,
575
+ 408,
576
+ null,
577
+ undefined,
578
+ ),
579
+ ).toBe(true);
580
+
446
581
  const apiError3 = new APIError(502, {}, 'Bad gateway', new Headers());
447
- expect((driver as any).isOpenAIErrorRetryable(apiError3, 502, null, undefined)).toBe(true);
448
-
582
+ expect(
583
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
584
+ apiError3,
585
+ 502,
586
+ null,
587
+ undefined,
588
+ ),
589
+ ).toBe(true);
590
+
449
591
  const apiError4 = new APIError(503, {}, 'Service unavailable', new Headers());
450
- expect((driver as any).isOpenAIErrorRetryable(apiError4, 503, null, undefined)).toBe(true);
451
-
592
+ expect(
593
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
594
+ apiError4,
595
+ 503,
596
+ null,
597
+ undefined,
598
+ ),
599
+ ).toBe(true);
600
+
452
601
  const apiError5 = new APIError(504, {}, 'Gateway timeout', new Headers());
453
- expect((driver as any).isOpenAIErrorRetryable(apiError5, 504, null, undefined)).toBe(true);
454
-
602
+ expect(
603
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
604
+ apiError5,
605
+ 504,
606
+ null,
607
+ undefined,
608
+ ),
609
+ ).toBe(true);
610
+
455
611
  const apiError6 = new APIError(529, {}, 'Overloaded', new Headers());
456
- expect((driver as any).isOpenAIErrorRetryable(apiError6, 529, null, undefined)).toBe(true);
612
+ expect(
613
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
614
+ apiError6,
615
+ 529,
616
+ null,
617
+ undefined,
618
+ ),
619
+ ).toBe(true);
457
620
  });
458
621
 
459
622
  it('should classify 4xx as non-retryable', () => {
460
623
  const apiError = new APIError(400, {}, 'Bad request', new Headers());
461
- expect((driver as any).isOpenAIErrorRetryable(apiError, 400, null, undefined)).toBe(false);
462
-
624
+ expect(
625
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(apiError, 400, null, undefined),
626
+ ).toBe(false);
627
+
463
628
  const apiError2 = new APIError(403, {}, 'Forbidden', new Headers());
464
- expect((driver as any).isOpenAIErrorRetryable(apiError2, 403, null, undefined)).toBe(false);
629
+ expect(
630
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
631
+ apiError2,
632
+ 403,
633
+ null,
634
+ undefined,
635
+ ),
636
+ ).toBe(false);
465
637
  });
466
638
 
467
639
  it('should classify 5xx as retryable', () => {
468
640
  const apiError = new APIError(500, {}, 'Internal error', new Headers());
469
- expect((driver as any).isOpenAIErrorRetryable(apiError, 500, null, undefined)).toBe(true);
470
-
641
+ expect(
642
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(apiError, 500, null, undefined),
643
+ ).toBe(true);
644
+
471
645
  const apiError2 = new APIError(502, {}, 'Bad gateway', new Headers());
472
- expect((driver as any).isOpenAIErrorRetryable(apiError2, 502, null, undefined)).toBe(true);
646
+ expect(
647
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
648
+ apiError2,
649
+ 502,
650
+ null,
651
+ undefined,
652
+ ),
653
+ ).toBe(true);
473
654
  });
474
655
 
475
656
  it('should classify APIConnectionError (non-timeout) as retryable', () => {
476
657
  const connectionError = new APIConnectionError({ message: 'Network failure' });
477
- expect((driver as any).isOpenAIErrorRetryable(connectionError, undefined, null, undefined)).toBe(true);
658
+ expect(
659
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
660
+ connectionError,
661
+ undefined,
662
+ null,
663
+ undefined,
664
+ ),
665
+ ).toBe(true);
478
666
  });
479
667
 
480
668
  it('should return undefined for unknown errors', () => {
481
- const apiError = new APIError(undefined as any, {}, 'Unknown error', undefined as any);
482
- expect((driver as any).isOpenAIErrorRetryable(apiError, undefined, null, undefined)).toBeUndefined();
669
+ const apiError = new APIError(undefined, {}, 'Unknown error', undefined);
670
+ expect(
671
+ exposePrivate<BaseOpenAIDriverInternals>(driver).isOpenAIErrorRetryable(
672
+ apiError,
673
+ undefined,
674
+ null,
675
+ undefined,
676
+ ),
677
+ ).toBeUndefined();
483
678
  });
484
679
  });
485
680
 
@@ -489,10 +684,10 @@ describe('BaseOpenAIDriver Error Handling', () => {
489
684
  429,
490
685
  { message: 'Rate limit exceeded' },
491
686
  'Rate limit exceeded',
492
- new Headers()
687
+ new Headers(),
493
688
  );
494
689
 
495
- const error = driver.formatLlumiverseError( openaiError, {
690
+ const error = driver.formatLlumiverseError(openaiError, {
496
691
  provider: 'azure_openai',
497
692
  model: 'gpt-4',
498
693
  operation: 'execute',
@@ -509,10 +704,10 @@ describe('BaseOpenAIDriver Error Handling', () => {
509
704
  400,
510
705
  { message: 'Invalid parameter' },
511
706
  'Invalid parameter',
512
- new Headers()
707
+ new Headers(),
513
708
  );
514
709
 
515
- const error = driver.formatLlumiverseError( openaiError, {
710
+ const error = driver.formatLlumiverseError(openaiError, {
516
711
  provider: 'xai',
517
712
  model: 'grok-2',
518
713
  operation: 'execute',
@@ -529,10 +724,10 @@ describe('BaseOpenAIDriver Error Handling', () => {
529
724
  500,
530
725
  { message: 'Server error' },
531
726
  'Server error',
532
- new Headers()
727
+ new Headers(),
533
728
  );
534
729
 
535
- const error = driver.formatLlumiverseError( openaiError, {
730
+ const error = driver.formatLlumiverseError(openaiError, {
536
731
  provider: 'azure_foundry',
537
732
  model: 'gpt-4',
538
733
  operation: 'execute',
@@ -549,10 +744,10 @@ describe('BaseOpenAIDriver Error Handling', () => {
549
744
  401,
550
745
  { message: 'Invalid API key' },
551
746
  'Invalid API key',
552
- new Headers()
747
+ new Headers(),
553
748
  );
554
749
 
555
- const error = driver.formatLlumiverseError( openaiError, {
750
+ const error = driver.formatLlumiverseError(openaiError, {
556
751
  provider: 'openai_compatible',
557
752
  model: 'custom-model',
558
753
  operation: 'execute',