@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,19 +1,16 @@
1
+ import { InferenceClient, type TextGenerationStreamOutput } from '@huggingface/inference';
1
2
  import {
2
- InferenceClient,
3
- TextGenerationStreamOutput,
4
- } from "@huggingface/inference";
5
- import {
6
- AbstractDriver,
7
- AIModel,
3
+ type AIModel,
8
4
  AIModelStatus,
9
- CompletionChunkObject,
10
- DriverOptions,
11
- EmbeddingsResult,
12
- ExecutionOptions,
13
- TextFallbackOptions,
14
- } from "@llumiverse/core";
15
- import { transformAsyncIterator } from "@llumiverse/core/async";
16
- import { FetchClient } from "@vertesia/api-fetch-client";
5
+ type CompletionChunkObject,
6
+ type DriverOptions,
7
+ type EmbeddingsResult,
8
+ type ExecutionOptions,
9
+ type TextFallbackOptions,
10
+ } from '@llumiverse/core';
11
+ import { transformAsyncIterator } from '@llumiverse/core/async';
12
+ import { AbstractDriver } from '@llumiverse/core/driver';
13
+ import { FetchClient } from '@vertesia/api-fetch-client';
17
14
 
18
15
  export interface HuggingFaceIEDriverOptions extends DriverOptions {
19
16
  apiKey: string;
@@ -21,25 +18,21 @@ export interface HuggingFaceIEDriverOptions extends DriverOptions {
21
18
  }
22
19
 
23
20
  export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptions, string> {
24
- static PROVIDER = "huggingface_ie";
21
+ static PROVIDER = 'huggingface_ie';
25
22
  provider = HuggingFaceIEDriver.PROVIDER;
26
23
  service: FetchClient;
27
24
  _executor?: InferenceClient;
28
25
 
29
- constructor(
30
- options: HuggingFaceIEDriverOptions
31
- ) {
26
+ constructor(options: HuggingFaceIEDriverOptions) {
32
27
  super(options);
33
28
  if (!options.endpoint_url) {
34
29
  throw new Error(`Endpoint URL is required for ${this.provider}`);
35
30
  }
36
- this.service = new FetchClient(this.options.endpoint_url);
37
- this.service.headers["Authorization"] = `Bearer ${this.options.apiKey}`;
31
+ this.service = new FetchClient(this.options.endpoint_url, this.getDriverFetch());
32
+ this.service.headers.Authorization = `Bearer ${this.options.apiKey}`;
38
33
  }
39
34
 
40
- async getModelURLEndpoint(
41
- modelId: string
42
- ): Promise<{ url: string; status: string; }> {
35
+ async getModelURLEndpoint(modelId: string): Promise<{ url: string; status: string }> {
43
36
  const res = (await this.service.get(`/${modelId}`)) as HuggingFaceIEModel;
44
37
  return {
45
38
  url: res.status.url,
@@ -50,26 +43,19 @@ export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptio
50
43
  async getExecutor(model: string) {
51
44
  if (!this._executor) {
52
45
  const endpoint = await this.getModelURLEndpoint(model);
53
- if (!endpoint.url)
54
- throw new Error(
55
- `Endpoint URL not found for model ${model}`
56
- );
46
+ if (!endpoint.url) throw new Error(`Endpoint URL not found for model ${model}`);
57
47
  if (endpoint.status !== AIModelStatus.Available)
58
- throw new Error(
59
- `Endpoint ${model} is not running - current status: ${endpoint.status}`
60
- );
48
+ throw new Error(`Endpoint ${model} is not running - current status: ${endpoint.status}`);
61
49
 
62
50
  // Use the new InferenceClient and bind it to the endpoint URL
63
- this._executor = new InferenceClient(this.options.apiKey).endpoint(
64
- endpoint.url
65
- );
51
+ this._executor = new InferenceClient(this.options.apiKey).endpoint(endpoint.url);
66
52
  }
67
53
  return this._executor;
68
54
  }
69
55
 
70
56
  async requestTextCompletionStream(prompt: string, options: ExecutionOptions) {
71
- if (options.model_options?._option_id !== undefined && options.model_options?._option_id !== "text-fallback") {
72
- this.logger.debug({ options: options.model_options }, "Unexpected option id");
57
+ if (options.model_options?._option_id !== undefined && options.model_options?._option_id !== 'text-fallback') {
58
+ this.logger.debug({ options: options.model_options }, 'Unexpected option id');
73
59
  }
74
60
  options.model_options = options.model_options as TextFallbackOptions;
75
61
 
@@ -86,22 +72,22 @@ export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptio
86
72
  //special like <s> are not part of the result
87
73
  if (val.token.special) return { result: [] };
88
74
  let finish_reason = val.details?.finish_reason as string;
89
- if (finish_reason === "eos_token") {
90
- finish_reason = "stop";
75
+ if (finish_reason === 'eos_token') {
76
+ finish_reason = 'stop';
91
77
  }
92
78
  return {
93
- result: val.token.text ? [{ type: "text" as const, value: val.token.text }] : [],
79
+ result: val.token.text ? [{ type: 'text' as const, value: val.token.text }] : [],
94
80
  finish_reason: finish_reason,
95
81
  token_usage: {
96
82
  result: val.details?.generated_tokens ?? 0,
97
- }
83
+ },
98
84
  };
99
85
  });
100
86
  }
101
87
 
102
88
  async requestTextCompletion(prompt: string, options: ExecutionOptions) {
103
- if (options.model_options?._option_id !== undefined && options.model_options?._option_id !== "text-fallback") {
104
- this.logger.debug({ options: options.model_options }, "Unexpected option id");
89
+ if (options.model_options?._option_id !== undefined && options.model_options?._option_id !== 'text-fallback') {
90
+ this.logger.debug({ options: options.model_options }, 'Unexpected option id');
105
91
  }
106
92
  options.model_options = options.model_options as TextFallbackOptions;
107
93
 
@@ -115,26 +101,25 @@ export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptio
115
101
  });
116
102
 
117
103
  let finish_reason = res.details?.finish_reason as string;
118
- if (finish_reason === "eos_token") {
119
- finish_reason = "stop";
104
+ if (finish_reason === 'eos_token') {
105
+ finish_reason = 'stop';
120
106
  }
121
107
  return {
122
- result: [{ type: "text" as const, value: res.generated_text }],
108
+ result: [{ type: 'text' as const, value: res.generated_text }],
123
109
  finish_reason: finish_reason,
124
110
  token_usage: {
125
- result: res.details?.generated_tokens
111
+ result: res.details?.generated_tokens,
126
112
  },
127
113
  original_response: options.include_original_response ? res : undefined,
128
114
  };
129
-
130
115
  }
131
116
 
132
117
  // ============== management API ==============
133
118
 
134
119
  async listModels(): Promise<AIModel[]> {
135
- const res = await this.service.get("/");
136
- const hfModels = res.items as HuggingFaceIEModel[];
137
- if (!hfModels || !hfModels.length) return [];
120
+ const res = (await this.service.get('/')) as { items: HuggingFaceIEModel[] };
121
+ const hfModels = res.items;
122
+ if (!hfModels?.length) return [];
138
123
 
139
124
  const models: AIModel[] = hfModels.map((model: HuggingFaceIEModel) => ({
140
125
  id: model.name,
@@ -149,36 +134,35 @@ export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptio
149
134
 
150
135
  async validateConnection(): Promise<boolean> {
151
136
  try {
152
- await this.service.get("/models");
137
+ await this.service.get('/models');
153
138
  return true;
154
- } catch (error) {
139
+ } catch {
155
140
  return false;
156
141
  }
157
142
  }
158
143
 
159
144
  async generateEmbeddings(): Promise<EmbeddingsResult> {
160
- throw new Error("Method not implemented.");
145
+ throw new Error('Method not implemented.');
161
146
  }
162
-
163
147
  }
164
148
 
165
149
  //get status from HF status
166
150
  function getStatus(hfModel: HuggingFaceIEModel): AIModelStatus {
167
151
  //[ pending, initializing, updating, updateFailed, running, paused, failed, scaledToZero ]
168
152
  switch (hfModel.status.state) {
169
- case "running":
153
+ case 'running':
170
154
  return AIModelStatus.Available;
171
- case "initializing":
155
+ case 'initializing':
172
156
  return AIModelStatus.Pending;
173
- case "updating":
157
+ case 'updating':
174
158
  return AIModelStatus.Pending;
175
- case "updateFailed":
159
+ case 'updateFailed':
176
160
  return AIModelStatus.Unavailable;
177
- case "paused":
161
+ case 'paused':
178
162
  return AIModelStatus.Stopped;
179
- case "failed":
163
+ case 'failed':
180
164
  return AIModelStatus.Unavailable;
181
- case "scaledToZero":
165
+ case 'scaledToZero':
182
166
  return AIModelStatus.Available;
183
167
  default:
184
168
  return AIModelStatus.Unknown;
@@ -199,7 +183,7 @@ interface HuggingFaceIEModel {
199
183
  model: {
200
184
  framework: string;
201
185
  image: {
202
- huggingface: {};
186
+ huggingface: Record<string, never>;
203
187
  };
204
188
  repository: string;
205
189
  revision: string;
package/src/index.ts CHANGED
@@ -1,16 +1,15 @@
1
- export * from "./anthropic/index.js";
2
- export * from "./azure/azure_foundry.js";
3
- export * from "./bedrock/index.js";
4
- export * from "./groq/index.js";
5
- export * from "./huggingface_ie.js";
6
- export * from "./mistral/index.js";
7
- export * from "./openai/azure_openai.js";
8
- export * from "./openai/openai.js";
9
- export * from "./openai/openai_compatible.js";
10
- export * from "./replicate.js";
11
- export * from "./test-driver/index.js";
12
- export * from "./togetherai/index.js";
13
- export * from "./vertexai/index.js";
14
- export * from "./watsonx/index.js";
15
- export * from "./xai/index.js";
16
-
1
+ export * from './anthropic/index.js';
2
+ export * from './azure/azure_foundry.js';
3
+ export * from './bedrock/index.js';
4
+ export * from './groq/index.js';
5
+ export * from './huggingface_ie.js';
6
+ export * from './mistral/index.js';
7
+ export * from './openai/azure_openai.js';
8
+ export * from './openai/openai.js';
9
+ export * from './openai/openai_compatible.js';
10
+ export * from './replicate.js';
11
+ export * from './test-driver/index.js';
12
+ export * from './togetherai/index.js';
13
+ export * from './vertexai/index.js';
14
+ export * from './watsonx/index.js';
15
+ export * from './xai/index.js';
@@ -1,9 +1,29 @@
1
- import { AbstractDriver, AIModel, Completion, CompletionChunkObject, DriverOptions, EmbeddingsOptions, EmbeddingsResult, ExecutionOptions, PromptSegment, TextFallbackOptions } from "@llumiverse/core";
2
- import { transformSSEStream } from "@llumiverse/core/async";
3
- import { getJSONSafetyNotice } from "@llumiverse/core/formatters";
4
- import { FetchClient } from "@vertesia/api-fetch-client";
5
- import { formatOpenAILikeTextPrompt, OpenAITextMessage } from "../openai/openai_format.js";
6
- import { ChatCompletionResponse, CompletionRequestParams, ListModelsResponse, ResponseFormat } from "./types.js";
1
+ import {
2
+ type AIModel,
3
+ type Completion,
4
+ type CompletionChunkObject,
5
+ type DriverOptions,
6
+ type EmbeddingsOptions,
7
+ type EmbeddingsResult,
8
+ type ExecutionOptions,
9
+ LlumiverseError,
10
+ MISTRAL_DEFAULT_EMBEDDING_MODEL,
11
+ normalizeEmbeddingsOptions,
12
+ type PromptSegment,
13
+ type TextFallbackOptions,
14
+ } from '@llumiverse/core';
15
+ import { transformSSEStream } from '@llumiverse/core/async';
16
+ import { AbstractDriver } from '@llumiverse/core/driver';
17
+ import { getJSONSafetyNotice } from '@llumiverse/core/formatters';
18
+ import { FetchClient, type ServerSentEvent } from '@vertesia/api-fetch-client';
19
+ import { formatOpenAILikeTextPrompt, type OpenAITextMessage } from '../openai/openai_format.js';
20
+ import type {
21
+ ChatCompletionResponse,
22
+ CompletionRequestParams,
23
+ EmbeddingResponse,
24
+ ListModelsResponse,
25
+ ResponseFormat,
26
+ } from './types.js';
7
27
 
8
28
  //TODO retry on 429
9
29
  //const RETRY_STATUS_CODES = [429, 500, 502, 503, 504];
@@ -16,7 +36,7 @@ interface MistralAIDriverOptions extends DriverOptions {
16
36
  }
17
37
 
18
38
  export class MistralAIDriver extends AbstractDriver<MistralAIDriverOptions, OpenAITextMessage[]> {
19
- static PROVIDER = "mistralai";
39
+ static PROVIDER = 'mistralai';
20
40
 
21
41
  provider = MistralAIDriver.PROVIDER;
22
42
  apiKey: string;
@@ -27,13 +47,12 @@ export class MistralAIDriver extends AbstractDriver<MistralAIDriverOptions, Open
27
47
  super(options);
28
48
  this.apiKey = options.apiKey;
29
49
  //this.client = new MistralClient(options.apiKey, options.endpointUrl);
30
- this.client = new FetchClient(options.endpoint_url || ENDPOINT).withHeaders({
31
- authorization: `Bearer ${this.apiKey}`
50
+ this.client = new FetchClient(options.endpoint_url || ENDPOINT, this.getDriverFetch()).withHeaders({
51
+ authorization: `Bearer ${this.apiKey}`,
32
52
  });
33
53
  }
34
54
 
35
55
  getResponseFormat = (_options: ExecutionOptions): ResponseFormat | undefined => {
36
-
37
56
  // const responseFormatJson: ResponseFormat = {
38
57
  // type: "json_object",
39
58
  // } as ResponseFormat
@@ -42,29 +61,28 @@ export class MistralAIDriver extends AbstractDriver<MistralAIDriverOptions, Open
42
61
  // type: "text",
43
62
  // } as ResponseFormat;
44
63
 
45
-
46
64
  // return _options.result_schema ? responseFormatJson : responseFormatText;
47
65
 
48
66
  //TODO remove this when Mistral properly supports the parameters - it makes an error for now
49
67
  // some models like mixtral mistral tiny or medium are throwing an error when using the response_format parameter
50
- return undefined
51
- }
68
+ return undefined;
69
+ };
52
70
 
53
71
  protected async formatPrompt(segments: PromptSegment[], opts: ExecutionOptions): Promise<OpenAITextMessage[]> {
54
72
  const messages = formatOpenAILikeTextPrompt(segments);
55
73
  //Add JSON instruction is schema is provided
56
74
  if (opts.result_schema) {
57
75
  messages.push({
58
- role: "user",
59
- content: "IMPORTANT: " + getJSONSafetyNotice(opts.result_schema)
76
+ role: 'user',
77
+ content: `IMPORTANT: ${getJSONSafetyNotice(opts.result_schema)}`,
60
78
  });
61
79
  }
62
80
  return messages;
63
81
  }
64
82
 
65
83
  async requestTextCompletion(messages: OpenAITextMessage[], options: ExecutionOptions): Promise<Completion> {
66
- if (options.model_options?._option_id !== undefined && options.model_options?._option_id !== "text-fallback") {
67
- this.logger.debug({ options: options.model_options }, "Unexpected option id");
84
+ if (options.model_options?._option_id !== undefined && options.model_options?._option_id !== 'text-fallback') {
85
+ this.logger.debug({ options: options.model_options }, 'Unexpected option id');
68
86
  }
69
87
  options.model_options = options.model_options as TextFallbackOptions;
70
88
 
@@ -75,30 +93,33 @@ export class MistralAIDriver extends AbstractDriver<MistralAIDriverOptions, Open
75
93
  temperature: options.model_options?.temperature,
76
94
  responseFormat: this.getResponseFormat(options),
77
95
  });
78
- this.logger.debug({ payload: JSON.stringify(requestPayload) }, "Mistral request payload");
96
+ this.logger.debug({ payload: JSON.stringify(requestPayload) }, 'Mistral request payload');
79
97
 
80
- const res = await this.client.post('/v1/chat/completions', {
98
+ const res = (await this.client.post('/v1/chat/completions', {
81
99
  payload: requestPayload,
82
- }) as ChatCompletionResponse;
100
+ })) as ChatCompletionResponse;
83
101
 
84
102
  const choice = res.choices[0];
85
103
  const result = choice.message.content;
86
104
 
87
105
  return {
88
- result: result ? [{ type: "text", value: result }] : [],
106
+ result: result ? [{ type: 'text', value: result }] : [],
89
107
  token_usage: {
90
108
  prompt: res.usage.prompt_tokens,
91
109
  result: res.usage.completion_tokens,
92
110
  total: res.usage.total_tokens,
93
111
  },
94
- finish_reason: choice.finish_reason, //Uses expected "stop" , "length" format
112
+ finish_reason: choice.finish_reason, //Uses expected "stop" , "length" format
95
113
  original_response: options.include_original_response ? res : undefined,
96
114
  };
97
115
  }
98
116
 
99
- async requestTextCompletionStream(messages: OpenAITextMessage[], options: ExecutionOptions): Promise<AsyncIterable<CompletionChunkObject>> {
100
- if (options.model_options?._option_id !== undefined && options.model_options?._option_id !== "text-fallback") {
101
- this.logger.debug({ options: options.model_options }, "Unexpected option id");
117
+ async requestTextCompletionStream(
118
+ messages: OpenAITextMessage[],
119
+ options: ExecutionOptions,
120
+ ): Promise<AsyncIterable<CompletionChunkObject>> {
121
+ if (options.model_options?._option_id !== undefined && options.model_options?._option_id !== 'text-fallback') {
122
+ this.logger.debug({ options: options.model_options }, 'Unexpected option id');
102
123
  }
103
124
  options.model_options = options.model_options as TextFallbackOptions;
104
125
 
@@ -112,19 +133,19 @@ export class MistralAIDriver extends AbstractDriver<MistralAIDriverOptions, Open
112
133
  stream: true,
113
134
  stopSequences: options.model_options?.stop_sequence,
114
135
  });
115
- this.logger.debug({ payload: JSON.stringify(streamPayload) }, "Mistral stream request payload");
136
+ this.logger.debug({ payload: JSON.stringify(streamPayload) }, 'Mistral stream request payload');
116
137
 
117
- const stream = await this.client.post('/v1/chat/completions', {
138
+ const stream = (await this.client.post('/v1/chat/completions', {
118
139
  payload: streamPayload,
119
- reader: 'sse'
120
- });
140
+ reader: 'sse',
141
+ })) as ReadableStream<ServerSentEvent>;
121
142
 
122
143
  return transformSSEStream(stream, (data: string) => {
123
144
  const json = JSON.parse(data);
124
145
  const content = json.choices[0]?.delta.content;
125
146
  return {
126
- result: content ? [{ type: "text", value: content }] : [],
127
- finish_reason: json.choices[0]?.finish_reason, //Uses expected "stop" , "length" format
147
+ result: content ? [{ type: 'text', value: content }] : [],
148
+ finish_reason: json.choices[0]?.finish_reason, //Uses expected "stop" , "length" format
128
149
  token_usage: {
129
150
  prompt: json.usage?.prompt_tokens,
130
151
  result: json.usage?.completion_tokens,
@@ -132,44 +153,72 @@ export class MistralAIDriver extends AbstractDriver<MistralAIDriverOptions, Open
132
153
  },
133
154
  };
134
155
  });
135
-
136
156
  }
137
157
 
138
158
  async listModels(): Promise<AIModel<string>[]> {
139
159
  const models: ListModelsResponse = await this.client.get('v1/models');
140
160
 
141
- const aiModels = models.data.map(m => {
161
+ const aiModels = models.data.map((m) => {
142
162
  return {
143
163
  id: m.id,
144
164
  name: m.id,
145
165
  description: undefined,
146
166
  provider: this.provider,
147
167
  owner: m.owned_by,
148
- }
168
+ };
149
169
  });
150
170
 
151
171
  return aiModels;
152
172
  }
153
173
 
154
174
  validateConnection(): Promise<boolean> {
155
- throw new Error("Method not implemented.");
175
+ throw new Error('Method not implemented.');
156
176
  }
157
177
 
158
- async generateEmbeddings({ text, model = "mistral-embed" }: EmbeddingsOptions): Promise<EmbeddingsResult> {
159
- const r = await this.client.post('/v1/embeddings', {
160
- payload: {
161
- model,
162
- input: [text],
163
- encoding_format: "float"
164
- },
178
+ async generateEmbeddings(options: EmbeddingsOptions): Promise<EmbeddingsResult> {
179
+ const normalized = normalizeEmbeddingsOptions(options);
180
+ const model = normalized.model ?? MISTRAL_DEFAULT_EMBEDDING_MODEL;
181
+ const texts = normalized.inputs.map((input) => {
182
+ if (input.type !== 'text') {
183
+ throw new Error(
184
+ `Provider 'mistralai' does not support '${input.type}' embeddings; only 'text' is supported.`,
185
+ );
186
+ }
187
+ return input.text;
165
188
  });
166
- return {
167
- values: r.data[0].embedding,
168
- model,
169
- token_count: r.usage.total_tokens || r.usage.prompt_tokens + r.usage.completion_tokens,
189
+
190
+ try {
191
+ const r = (await this.client.post('/v1/embeddings', {
192
+ payload: {
193
+ model,
194
+ input: texts,
195
+ encoding_format: 'float',
196
+ },
197
+ })) as EmbeddingResponse;
198
+ const ordered: { index: number; embedding: number[] }[] = [...r.data].sort((a, b) => a.index - b.index);
199
+ const promptTokens: number | undefined =
200
+ r.usage?.total_tokens ??
201
+ (r.usage ? (r.usage.prompt_tokens ?? 0) + (r.usage.completion_tokens ?? 0) : undefined);
202
+
203
+ return {
204
+ model,
205
+ results: ordered.map((entry) => ({
206
+ outputs: [{ values: entry.embedding, modality: 'text' }],
207
+ })),
208
+ ...(typeof promptTokens === 'number'
209
+ ? { usage: { input_tokens: promptTokens, input_text_tokens: promptTokens } }
210
+ : {}),
211
+ };
212
+ } catch (error) {
213
+ if (LlumiverseError.isLlumiverseError(error)) throw error;
214
+ if (error instanceof Error && typeof (error as { status?: unknown }).status !== 'number') throw error;
215
+ throw this.formatLlumiverseError(error, {
216
+ provider: this.provider,
217
+ model,
218
+ operation: 'execute',
219
+ });
170
220
  }
171
221
  }
172
-
173
222
  }
174
223
 
175
224
  /**
@@ -214,4 +263,4 @@ function _makeChatCompletionRequest({
214
263
  response_format: responseFormat ?? undefined,
215
264
  stop: stopSequences ?? undefined,
216
265
  };
217
- };
266
+ }
@@ -112,6 +112,7 @@ export interface ChatCompletionResponseChunk {
112
112
  export interface Embedding {
113
113
  id: string;
114
114
  object: 'embedding';
115
+ index: number;
115
116
  embedding: number[];
116
117
  }
117
118
 
@@ -124,17 +125,17 @@ export interface EmbeddingResponse {
124
125
  }
125
126
 
126
127
  export interface CompletionRequestParams {
127
- model: string,
128
- messages: Array<{ role: string; name?: string, content: string | string[], tool_calls?: ToolCalls[]; }>,
129
- tools?: Array<{ type: string; function: Function; }>,
130
- temperature?: number,
131
- maxTokens?: number,
132
- topP?: number,
133
- randomSeed?: number,
134
- stream?: boolean,
135
- toolChoice?: ToolChoice,
136
- responseFormat?: ResponseFormat,
137
- stopSequences?: string[],
128
+ model: string;
129
+ messages: Array<{ role: string; name?: string; content: string | string[]; tool_calls?: ToolCalls[] }>;
130
+ tools?: Array<{ type: string; function: Function }>;
131
+ temperature?: number;
132
+ maxTokens?: number;
133
+ topP?: number;
134
+ randomSeed?: number;
135
+ stream?: boolean;
136
+ toolChoice?: ToolChoice;
137
+ responseFormat?: ResponseFormat;
138
+ stopSequences?: string[];
138
139
  }
139
140
 
140
141
  // class MistralClient {
@@ -204,4 +205,4 @@ export interface CompletionRequestParams {
204
205
  // model: string;
205
206
  // input: string | string[];
206
207
  // }): Promise<EmbeddingResponse>;
207
- // }
208
+ // }
@@ -1,28 +1,31 @@
1
- import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
2
- import { AIModel, DriverOptions, getModelCapabilities, modelModalitiesToArray, Providers } from "@llumiverse/core";
3
- import OpenAI, { AzureOpenAI } from "openai";
4
- import { BaseOpenAIDriver } from "./index.js";
1
+ import { DefaultAzureCredential, getBearerTokenProvider } from '@azure/identity';
2
+ import {
3
+ type AIModel,
4
+ type DriverOptions,
5
+ getModelCapabilities,
6
+ modelModalitiesToArray,
7
+ Providers,
8
+ } from '@llumiverse/core';
9
+ import type OpenAI from 'openai';
10
+ import { AzureOpenAI } from 'openai';
11
+ import { BaseOpenAIDriver } from './index.js';
5
12
 
6
13
  export interface AzureOpenAIDriverOptions extends DriverOptions {
7
-
8
14
  /**
9
15
  * The credentials to use to access Azure OpenAI
10
16
  */
11
- azureADTokenProvider?: any; //type with azure credentials
17
+ azureADTokenProvider?: (options?: unknown) => Promise<string>;
12
18
 
13
19
  apiKey?: string;
14
20
 
15
21
  endpoint?: string;
16
22
 
17
- apiVersion?: string
23
+ apiVersion?: string;
18
24
 
19
25
  deployment?: string;
20
-
21
26
  }
22
27
 
23
28
  export class AzureOpenAIDriver extends BaseOpenAIDriver {
24
-
25
-
26
29
  service: AzureOpenAI;
27
30
  readonly provider = Providers.azure_openai;
28
31
 
@@ -43,8 +46,9 @@ export class AzureOpenAIDriver extends BaseOpenAIDriver {
43
46
  apiKey: opts.apiKey,
44
47
  azureADTokenProvider: opts.azureADTokenProvider,
45
48
  endpoint: opts.endpoint,
46
- apiVersion: opts.apiVersion ?? "2024-10-21",
47
- deployment: opts.deployment
49
+ apiVersion: opts.apiVersion ?? '2024-10-21',
50
+ deployment: opts.deployment,
51
+ fetch: this.getDriverFetch(),
48
52
  });
49
53
  }
50
54
 
@@ -52,7 +56,7 @@ export class AzureOpenAIDriver extends BaseOpenAIDriver {
52
56
  * Get default authentication for Azure Cognitive Services API
53
57
  */
54
58
  getDefaultCognitiveServicesAuth() {
55
- const scope = "https://cognitiveservices.azure.com/.default";
59
+ const scope = 'https://cognitiveservices.azure.com/.default';
56
60
  const azureADTokenProvider = getBearerTokenProvider(new DefaultAzureCredential(), scope);
57
61
  return azureADTokenProvider;
58
62
  }
@@ -63,7 +67,9 @@ export class AzureOpenAIDriver extends BaseOpenAIDriver {
63
67
 
64
68
  async _listModels(_filter?: (m: OpenAI.Models.Model) => boolean): Promise<AIModel[]> {
65
69
  if (!this.service.deploymentName) {
66
- throw new Error("A specific deployment is not set. Azure OpenAI cannot list deployments. Update your endpoint URL to include the deployment name, e.g., https://your-resource.openai.azure.com/openai/deployments/your-deployment/chat/completions");
70
+ throw new Error(
71
+ 'A specific deployment is not set. Azure OpenAI cannot list deployments. Update your endpoint URL to include the deployment name, e.g., https://your-resource.openai.azure.com/openai/deployments/your-deployment/chat/completions',
72
+ );
67
73
  }
68
74
 
69
75
  //Do a test execution to check if the model works and to get the model ID.
@@ -71,22 +77,24 @@ export class AzureOpenAIDriver extends BaseOpenAIDriver {
71
77
  try {
72
78
  const testResponse = await this.service.chat.completions.create({
73
79
  model: this.service.deploymentName,
74
- messages: [{ role: "user", content: "Hi" }],
80
+ messages: [{ role: 'user', content: 'Hi' }],
75
81
  max_tokens: 1,
76
82
  });
77
83
  modelID = testResponse.model;
78
84
  } catch (error) {
79
- this.logger.error({ error }, "Failed to test model for Azure OpenAI listing :");
85
+ this.logger.error({ error }, 'Failed to test model for Azure OpenAI listing :');
80
86
  }
81
- const modelCapability = getModelCapabilities(modelID, "openai");
82
- return [{
83
- id: modelID,
84
- name: this.service.deploymentName,
85
- provider: this.provider,
86
- owner: "openai",
87
- input_modalities: modelModalitiesToArray(modelCapability.input),
88
- output_modalities: modelModalitiesToArray(modelCapability.output),
89
- tool_support: modelCapability.tool_support,
90
- } satisfies AIModel<string>];
87
+ const modelCapability = getModelCapabilities(modelID, 'openai');
88
+ return [
89
+ {
90
+ id: modelID,
91
+ name: this.service.deploymentName,
92
+ provider: this.provider,
93
+ owner: 'openai',
94
+ input_modalities: modelModalitiesToArray(modelCapability.input),
95
+ output_modalities: modelModalitiesToArray(modelCapability.output),
96
+ tool_support: modelCapability.tool_support,
97
+ } satisfies AIModel<string>,
98
+ ];
91
99
  }
92
- }
100
+ }