@llumiverse/drivers 1.3.0 → 1.4.0-dev.20260629.090753Z

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
@@ -0,0 +1,211 @@
1
+ import { helpers, type protos } from '@google-cloud/aiplatform';
2
+ import {
3
+ type AudioEmbeddingInput,
4
+ buildEmbeddingsResult,
5
+ type DataSource,
6
+ type EmbeddingInput,
7
+ type EmbeddingResultItem,
8
+ type EmbeddingsOptions,
9
+ type EmbeddingsResult,
10
+ LlumiverseError,
11
+ type VideoEmbeddingInput,
12
+ } from '@llumiverse/core';
13
+ import type { VertexAIDriver } from '../index.js';
14
+ import { dataSourceToVertexSourceData } from './source-utils.js';
15
+
16
+ const DEFAULT_LEGACY_MULTIMODAL_MODEL = 'multimodalembedding@001';
17
+
18
+ async function dataSourceToImagePart(
19
+ ds: DataSource,
20
+ ): Promise<{ gcsUri?: string; mimeType?: string; bytesBase64Encoded?: string }> {
21
+ const source = await dataSourceToVertexSourceData(ds);
22
+ if (source.gcsUri) {
23
+ return { gcsUri: source.gcsUri, mimeType: ds.mime_type };
24
+ }
25
+
26
+ if (!source.bytesBase64Encoded) {
27
+ throw new Error('Data source conversion produced neither GCS URI nor inline bytes');
28
+ }
29
+
30
+ return { bytesBase64Encoded: source.bytesBase64Encoded, mimeType: ds.mime_type };
31
+ }
32
+
33
+ interface VideoSegmentConfig {
34
+ startOffsetSec?: number;
35
+ endOffsetSec?: number;
36
+ intervalSec?: number;
37
+ }
38
+
39
+ async function dataSourceToVideoPart(
40
+ ds: DataSource,
41
+ input: VideoEmbeddingInput | AudioEmbeddingInput,
42
+ ): Promise<{ gcsUri?: string; bytesBase64Encoded?: string; videoSegmentConfig?: VideoSegmentConfig }> {
43
+ const source = await dataSourceToVertexSourceData(ds);
44
+ const segmentConfig: VideoSegmentConfig = {};
45
+ if (input.start_sec !== undefined) segmentConfig.startOffsetSec = input.start_sec;
46
+ if (input.start_sec !== undefined && input.length_sec !== undefined) {
47
+ segmentConfig.endOffsetSec = input.start_sec + input.length_sec;
48
+ }
49
+ if ('interval_sec' in input && input.interval_sec !== undefined) {
50
+ segmentConfig.intervalSec = input.interval_sec;
51
+ }
52
+ const config = Object.keys(segmentConfig).length > 0 ? segmentConfig : undefined;
53
+ if (source.gcsUri) {
54
+ return { gcsUri: source.gcsUri, videoSegmentConfig: config };
55
+ }
56
+
57
+ if (!source.bytesBase64Encoded) {
58
+ throw new Error('Data source conversion produced neither GCS URI nor inline bytes');
59
+ }
60
+
61
+ return { bytesBase64Encoded: source.bytesBase64Encoded, videoSegmentConfig: config };
62
+ }
63
+
64
+ type Modality = 'text' | 'image' | 'video' | 'audio';
65
+
66
+ type LegacyInstance =
67
+ | { text: string }
68
+ | { image: Awaited<ReturnType<typeof dataSourceToImagePart>> }
69
+ | { video: Awaited<ReturnType<typeof dataSourceToVideoPart>> };
70
+
71
+ async function buildLegacyInstance(input: EmbeddingInput): Promise<{ instance: LegacyInstance; modality: Modality }> {
72
+ switch (input.type) {
73
+ case 'text':
74
+ return { instance: { text: input.text }, modality: 'text' };
75
+ case 'image':
76
+ return { instance: { image: await dataSourceToImagePart(input.source) }, modality: 'image' };
77
+ case 'video':
78
+ return { instance: { video: await dataSourceToVideoPart(input.source, input) }, modality: 'video' };
79
+ case 'audio':
80
+ // multimodalembedding@001 has no dedicated audio modality; the API treats audio
81
+ // like video (uses videoEmbeddings in the response). Route through the video path
82
+ // and preserve the "audio" modality label so callers can identify the outputs.
83
+ return { instance: { video: await dataSourceToVideoPart(input.source, input) }, modality: 'audio' };
84
+ }
85
+ }
86
+
87
+ interface VideoSegment {
88
+ embedding: number[];
89
+ startOffsetSec?: number;
90
+ endOffsetSec?: number;
91
+ }
92
+
93
+ interface MultimodalPrediction {
94
+ textEmbedding?: number[];
95
+ imageEmbedding?: number[];
96
+ videoEmbeddings?: VideoSegment[];
97
+ }
98
+
99
+ function hasPredictionEmbeddings(prediction: MultimodalPrediction): boolean {
100
+ return Boolean(prediction.textEmbedding || prediction.imageEmbedding || prediction.videoEmbeddings?.length);
101
+ }
102
+
103
+ function decodePredictionValue(
104
+ value: protos.google.protobuf.IValue,
105
+ index: number,
106
+ model: string,
107
+ ): MultimodalPrediction {
108
+ type HelperValue = Parameters<typeof helpers.fromValue>[0];
109
+ const decoded = helpers.fromValue(value as unknown as HelperValue);
110
+ if (!decoded || typeof decoded !== 'object') {
111
+ throw new Error(`Vertex predict returned an empty prediction for input ${index} (model ${model})`);
112
+ }
113
+
114
+ const prediction = decoded as MultimodalPrediction;
115
+ if (!hasPredictionEmbeddings(prediction)) {
116
+ throw new Error(`Vertex predict returned no embeddings for input ${index} (model ${model})`);
117
+ }
118
+
119
+ return prediction;
120
+ }
121
+
122
+ function predictionToOutputs(prediction: MultimodalPrediction, modality: Modality): EmbeddingResultItem['outputs'] {
123
+ if (modality === 'text' && prediction.textEmbedding) {
124
+ return [{ values: prediction.textEmbedding, modality: 'text' }];
125
+ }
126
+ if (modality === 'image' && prediction.imageEmbedding) {
127
+ return [{ values: prediction.imageEmbedding, modality: 'image' }];
128
+ }
129
+ if ((modality === 'video' || modality === 'audio') && prediction.videoEmbeddings?.length) {
130
+ return prediction.videoEmbeddings.map((segment) => ({
131
+ values: segment.embedding,
132
+ modality,
133
+ start_sec: segment.startOffsetSec,
134
+ end_sec: segment.endOffsetSec,
135
+ }));
136
+ }
137
+ // Fallback: return whatever is present
138
+ if (prediction.textEmbedding) return [{ values: prediction.textEmbedding, modality: 'text' }];
139
+ if (prediction.imageEmbedding) return [{ values: prediction.imageEmbedding, modality: 'image' }];
140
+ if (prediction.videoEmbeddings?.length) {
141
+ return prediction.videoEmbeddings.map((segment) => ({
142
+ values: segment.embedding,
143
+ modality: 'video' as const,
144
+ start_sec: segment.startOffsetSec,
145
+ end_sec: segment.endOffsetSec,
146
+ }));
147
+ }
148
+ throw new Error('Vertex multimodal prediction returned no embedding values');
149
+ }
150
+
151
+ /**
152
+ * Embed via the legacy multimodalembedding@001 API using the typed
153
+ * @google-cloud/aiplatform PredictionServiceClient. Returns one result item
154
+ * per input; video/audio segments expand into multiple outputs.
155
+ */
156
+ export async function generateLegacyMultimodalEmbeddings(
157
+ driver: VertexAIDriver,
158
+ options: EmbeddingsOptions,
159
+ ): Promise<EmbeddingsResult> {
160
+ const model = options.model ?? DEFAULT_LEGACY_MULTIMODAL_MODEL;
161
+ const built = await Promise.all(options.inputs.map(buildLegacyInstance));
162
+ const modalities = built.map((b) => b.modality);
163
+
164
+ const instances = built
165
+ .map((b) => helpers.toValue(b.instance))
166
+ .filter((v): v is NonNullable<typeof v> => v != null);
167
+
168
+ if (instances.length !== built.length) {
169
+ throw new Error('Failed to encode one or more multimodal embedding instances');
170
+ }
171
+
172
+ const parameters =
173
+ options.dimensions !== undefined ? helpers.toValue({ dimension: options.dimensions }) : undefined;
174
+
175
+ const endpoint = `projects/${driver.options.project}/locations/${driver.options.region}/publishers/google/models/${model}`;
176
+
177
+ const request: protos.google.cloud.aiplatform.v1.IPredictRequest = { endpoint, instances, parameters };
178
+
179
+ const client = await driver.getPredictionServiceClient();
180
+ try {
181
+ const [response] = await client.predict(request);
182
+ const predictions = response.predictions ?? [];
183
+ if (predictions.length !== built.length) {
184
+ throw new Error(
185
+ `Vertex predict returned ${predictions.length} predictions for ${built.length} instances (model ${model})`,
186
+ );
187
+ }
188
+
189
+ const items: EmbeddingResultItem[] = predictions.map((value, i) => {
190
+ const decoded = decodePredictionValue(value, i, model);
191
+ return { outputs: predictionToOutputs(decoded, modalities[i]) };
192
+ });
193
+
194
+ return buildEmbeddingsResult(model, items);
195
+ } catch (error) {
196
+ if (LlumiverseError.isLlumiverseError(error)) throw error;
197
+ // @google-cloud/aiplatform uses gRPC, which surfaces errors with a numeric `code`
198
+ // field rather than `status`. Check both to avoid wrapping plain programming errors.
199
+ if (
200
+ error instanceof Error &&
201
+ typeof (error as { status?: unknown }).status !== 'number' &&
202
+ typeof (error as { code?: unknown }).code !== 'number'
203
+ )
204
+ throw error;
205
+ throw driver.formatLlumiverseError(error, {
206
+ provider: 'vertexai',
207
+ model,
208
+ operation: 'execute',
209
+ });
210
+ }
211
+ }
@@ -0,0 +1,206 @@
1
+ import type { Content, EmbedContentConfig, Part } from '@google/genai';
2
+ import { VERTEX_DEFAULT_EMBEDDING_MODEL, VERTEX_MULTIMODAL_EMBEDDING_MODEL } from '@llumiverse/common';
3
+ import {
4
+ buildEmbeddingsResult,
5
+ type DataSource,
6
+ type EmbeddingInput,
7
+ type EmbeddingResultItem,
8
+ type EmbeddingsOptions,
9
+ type EmbeddingsResult,
10
+ type EmbeddingsTokenUsage,
11
+ type EmbeddingTaskType,
12
+ LlumiverseError,
13
+ normalizeEmbeddingsOptions,
14
+ type TextEmbeddingInput,
15
+ } from '@llumiverse/core';
16
+ import type { VertexAIDriver } from '../index.js';
17
+ import { generateLegacyMultimodalEmbeddings } from './embed-legacy-multimodal.js';
18
+ import { dataSourceToVertexSourceData } from './source-utils.js';
19
+
20
+ /**
21
+ * Models that do not accept task_type as an API parameter and instead expect
22
+ * the task to be conveyed by a documented prompt prefix.
23
+ */
24
+ const TASK_TYPE_PREFIX_MODELS = new Set<string>(['gemini-embedding-2']);
25
+
26
+ /**
27
+ * Apply the documented prompt prefix for gemini-embedding-2 (prefix-only model).
28
+ *
29
+ * Prefixes per Google docs:
30
+ * query → "task: search result | query: {text}"
31
+ * document → "title: {title} | text: {text}" (uses "none" when title is absent)
32
+ */
33
+ function buildPrefixText(input: TextEmbeddingInput): string {
34
+ if (!input.task_type) return input.text;
35
+ if (input.task_type === 'query') {
36
+ return `task: search result | query: ${input.text}`;
37
+ }
38
+ // document
39
+ const title = input.title ?? 'none';
40
+ return `title: ${title} | text: ${input.text}`;
41
+ }
42
+
43
+ /** Maps llumiverse task types to Google's embedContent taskType strings. */
44
+ type GoogleEmbedTaskType = 'RETRIEVAL_QUERY' | 'RETRIEVAL_DOCUMENT';
45
+
46
+ function toGoogleTaskType(taskType: EmbeddingTaskType | undefined): GoogleEmbedTaskType | undefined {
47
+ switch (taskType) {
48
+ case 'query':
49
+ return 'RETRIEVAL_QUERY';
50
+ case 'document':
51
+ return 'RETRIEVAL_DOCUMENT';
52
+ default:
53
+ return undefined;
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Models only available in the Vertex "global" location.
59
+ */
60
+ const GLOBAL_ONLY_MODELS = new Set<string>(['gemini-embedding-2']);
61
+
62
+ /**
63
+ * Models that only support one input content per embedContent request.
64
+ */
65
+ const NON_GROUPING_MODELS = new Set<string>(['gemini-embedding-001', 'gemini-embedding-2']);
66
+
67
+ async function dataSourceToPart(ds: DataSource): Promise<Part> {
68
+ const source = await dataSourceToVertexSourceData(ds);
69
+ if (source.gcsUri) {
70
+ return { fileData: { fileUri: source.gcsUri, mimeType: ds.mime_type } };
71
+ }
72
+
73
+ if (!source.bytesBase64Encoded) {
74
+ throw new Error('Data source conversion produced neither GCS URI nor inline bytes');
75
+ }
76
+
77
+ return { inlineData: { data: source.bytesBase64Encoded, mimeType: ds.mime_type } };
78
+ }
79
+
80
+ type TextConfig = Pick<EmbedContentConfig, 'taskType' | 'title'>;
81
+
82
+ function textConfig(input: TextEmbeddingInput, viaPrefix: boolean): TextConfig {
83
+ const config: TextConfig = {};
84
+ if (!viaPrefix && input.task_type) config.taskType = toGoogleTaskType(input.task_type);
85
+ if (input.title) config.title = input.title;
86
+ return config;
87
+ }
88
+
89
+ function configSignature(input: EmbeddingInput, viaPrefix: boolean): string {
90
+ if (input.type !== 'text') return '{}';
91
+ return JSON.stringify(textConfig(input, viaPrefix));
92
+ }
93
+
94
+ async function inputToContent(input: EmbeddingInput, viaPrefix: boolean): Promise<Content> {
95
+ if (input.type === 'text') {
96
+ const text = viaPrefix ? buildPrefixText(input) : input.text;
97
+ return { role: 'user', parts: [{ text }] };
98
+ }
99
+ return { role: 'user', parts: [await dataSourceToPart(input.source)] };
100
+ }
101
+
102
+ function configForGroup(
103
+ representative: EmbeddingInput,
104
+ viaPrefix: boolean,
105
+ options: EmbeddingsOptions,
106
+ ): EmbedContentConfig | undefined {
107
+ const config: EmbedContentConfig = {};
108
+ if (representative.type === 'text') {
109
+ Object.assign(config, textConfig(representative, viaPrefix));
110
+ }
111
+ if (options.dimensions !== undefined) config.outputDimensionality = options.dimensions;
112
+ return Object.keys(config).length > 0 ? config : undefined;
113
+ }
114
+
115
+ function addInputTokenUsage(usage: EmbeddingsTokenUsage, tokenCount: number): void {
116
+ usage.input_text_tokens = (usage.input_text_tokens ?? 0) + tokenCount;
117
+ usage.input_tokens = (usage.input_tokens ?? 0) + tokenCount;
118
+ }
119
+
120
+ /**
121
+ * Models that use the legacy multimodal predict API instead of embedContent.
122
+ */
123
+ const LEGACY_MULTIMODAL_MODELS = new Set<string>([VERTEX_MULTIMODAL_EMBEDDING_MODEL]);
124
+
125
+ /**
126
+ * Generate Vertex AI embeddings via @google/genai's embedContent API.
127
+ * Text inputs are sent as Content with a text part; task_type and title
128
+ * are applied via the SDK config (or via prompt prefix for models that
129
+ * don't accept them as API parameters).
130
+ * Image/video/audio inputs are sent as inlineData (base64) or fileData (gs://).
131
+ * Inputs with the same config signature are batched in a single call;
132
+ * differing configs produce separate calls. Results preserve input order.
133
+ */
134
+ export async function generateVertexAiEmbeddings(
135
+ driver: VertexAIDriver,
136
+ options: EmbeddingsOptions,
137
+ ): Promise<EmbeddingsResult> {
138
+ const normalized = normalizeEmbeddingsOptions(options);
139
+ const model = normalized.model ?? VERTEX_DEFAULT_EMBEDDING_MODEL;
140
+
141
+ if (LEGACY_MULTIMODAL_MODELS.has(model)) {
142
+ return generateLegacyMultimodalEmbeddings(driver, normalized);
143
+ }
144
+
145
+ const viaPrefix = TASK_TYPE_PREFIX_MODELS.has(model);
146
+ const region = GLOBAL_ONLY_MODELS.has(model) ? 'global' : undefined;
147
+ const disableGrouping = NON_GROUPING_MODELS.has(model);
148
+
149
+ const groups = new Map<string, { index: number; input: EmbeddingInput }[]>();
150
+ normalized.inputs.forEach((input, index) => {
151
+ const key = disableGrouping ? `single:${index}` : configSignature(input, viaPrefix);
152
+ const group = groups.get(key);
153
+ if (group) {
154
+ group.push({ index, input });
155
+ return;
156
+ }
157
+ groups.set(key, [{ index, input }]);
158
+ });
159
+
160
+ const ai = region ? driver.getGoogleGenAIClient(region) : driver.getGoogleGenAIClient();
161
+ const items = new Array<EmbeddingResultItem>(normalized.inputs.length);
162
+ const usage: EmbeddingsTokenUsage = {};
163
+
164
+ for (const group of groups.values()) {
165
+ const contents = await Promise.all(group.map((entry) => inputToContent(entry.input, viaPrefix)));
166
+ const config = configForGroup(group[0].input, viaPrefix, normalized);
167
+
168
+ try {
169
+ const response = await ai.models.embedContent({ model, contents, config });
170
+ const embeddings = response.embeddings ?? [];
171
+ if (embeddings.length !== group.length) {
172
+ throw new Error(
173
+ `Vertex AI embedContent returned ${embeddings.length} embeddings for ${group.length} inputs (model ${model})`,
174
+ );
175
+ }
176
+
177
+ embeddings.forEach((embedding, i) => {
178
+ const entry = group[i];
179
+ const values = embedding.values;
180
+ if (!values) {
181
+ throw new Error(
182
+ `Vertex AI embedContent returned an empty embedding for input ${entry.index} (model ${model})`,
183
+ );
184
+ }
185
+ const tokenCount = embedding.statistics?.tokenCount;
186
+ items[entry.index] = {
187
+ outputs: [{ values, modality: entry.input.type }],
188
+ input_tokens: tokenCount,
189
+ };
190
+ if (typeof tokenCount === 'number') {
191
+ addInputTokenUsage(usage, tokenCount);
192
+ }
193
+ });
194
+ } catch (error) {
195
+ if (LlumiverseError.isLlumiverseError(error)) throw error;
196
+ if (error instanceof Error && typeof (error as { status?: unknown }).status !== 'number') throw error;
197
+ throw driver.formatLlumiverseError(error, {
198
+ provider: 'vertexai',
199
+ model,
200
+ operation: 'execute',
201
+ });
202
+ }
203
+ }
204
+
205
+ return buildEmbeddingsResult(model, items, Object.keys(usage).length > 0 ? usage : undefined);
206
+ }