@llumiverse/drivers 0.22.0 → 0.22.1

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 (289) hide show
  1. package/lib/cjs/adobe/firefly.js +8 -7
  2. package/lib/cjs/adobe/firefly.js.map +1 -1
  3. package/lib/cjs/azure/azure_foundry.js +12 -12
  4. package/lib/cjs/azure/azure_foundry.js.map +1 -1
  5. package/lib/cjs/bedrock/index.js +172 -22
  6. package/lib/cjs/bedrock/index.js.map +1 -1
  7. package/lib/cjs/bedrock/twelvelabs.js +87 -0
  8. package/lib/cjs/bedrock/twelvelabs.js.map +1 -0
  9. package/lib/cjs/groq/index.js +91 -16
  10. package/lib/cjs/groq/index.js.map +1 -1
  11. package/lib/cjs/huggingface_ie.js +7 -6
  12. package/lib/cjs/huggingface_ie.js.map +1 -1
  13. package/lib/cjs/index.js +2 -2
  14. package/lib/cjs/index.js.map +1 -1
  15. package/lib/cjs/mistral/index.js +5 -4
  16. package/lib/cjs/mistral/index.js.map +1 -1
  17. package/lib/cjs/openai/azure_openai.js +1 -1
  18. package/lib/cjs/openai/azure_openai.js.map +1 -1
  19. package/lib/cjs/openai/index.js +16 -12
  20. package/lib/cjs/openai/index.js.map +1 -1
  21. package/lib/cjs/replicate.js +6 -6
  22. package/lib/cjs/replicate.js.map +1 -1
  23. package/lib/cjs/test/utils.js +1 -1
  24. package/lib/cjs/test/utils.js.map +1 -1
  25. package/lib/cjs/test-driver/TestErrorCompletionStream.js +20 -0
  26. package/lib/cjs/test-driver/TestErrorCompletionStream.js.map +1 -0
  27. package/lib/cjs/test-driver/TestValidationErrorCompletionStream.js +24 -0
  28. package/lib/cjs/test-driver/TestValidationErrorCompletionStream.js.map +1 -0
  29. package/lib/cjs/test-driver/index.js +109 -0
  30. package/lib/cjs/test-driver/index.js.map +1 -0
  31. package/lib/cjs/test-driver/utils.js +30 -0
  32. package/lib/cjs/test-driver/utils.js.map +1 -0
  33. package/lib/cjs/togetherai/index.js +4 -4
  34. package/lib/cjs/togetherai/index.js.map +1 -1
  35. package/lib/cjs/vertexai/embeddings/embeddings-text.js +1 -1
  36. package/lib/cjs/vertexai/embeddings/embeddings-text.js.map +1 -1
  37. package/lib/cjs/vertexai/index.js +136 -31
  38. package/lib/cjs/vertexai/index.js.map +1 -1
  39. package/lib/cjs/vertexai/models/claude.js +38 -16
  40. package/lib/cjs/vertexai/models/claude.js.map +1 -1
  41. package/lib/cjs/vertexai/models/gemini.js +131 -41
  42. package/lib/cjs/vertexai/models/gemini.js.map +1 -1
  43. package/lib/cjs/vertexai/models/imagen.js +12 -23
  44. package/lib/cjs/vertexai/models/imagen.js.map +1 -1
  45. package/lib/cjs/vertexai/models/llama.js +4 -3
  46. package/lib/cjs/vertexai/models/llama.js.map +1 -1
  47. package/lib/cjs/vertexai/models.js +13 -2
  48. package/lib/cjs/vertexai/models.js.map +1 -1
  49. package/lib/cjs/watsonx/index.js +5 -5
  50. package/lib/cjs/watsonx/index.js.map +1 -1
  51. package/lib/cjs/xai/index.js +1 -1
  52. package/lib/cjs/xai/index.js.map +1 -1
  53. package/lib/esm/adobe/firefly.js +8 -7
  54. package/lib/esm/adobe/firefly.js.map +1 -1
  55. package/lib/esm/azure/azure_foundry.js +12 -12
  56. package/lib/esm/azure/azure_foundry.js.map +1 -1
  57. package/lib/esm/bedrock/index.js +172 -22
  58. package/lib/esm/bedrock/index.js.map +1 -1
  59. package/lib/esm/bedrock/twelvelabs.js +84 -0
  60. package/lib/esm/bedrock/twelvelabs.js.map +1 -0
  61. package/lib/esm/groq/index.js +91 -16
  62. package/lib/esm/groq/index.js.map +1 -1
  63. package/lib/esm/huggingface_ie.js +8 -7
  64. package/lib/esm/huggingface_ie.js.map +1 -1
  65. package/lib/esm/index.js +2 -2
  66. package/lib/esm/index.js.map +1 -1
  67. package/lib/esm/mistral/index.js +5 -4
  68. package/lib/esm/mistral/index.js.map +1 -1
  69. package/lib/esm/openai/azure_openai.js +1 -1
  70. package/lib/esm/openai/azure_openai.js.map +1 -1
  71. package/lib/esm/openai/index.js +16 -12
  72. package/lib/esm/openai/index.js.map +1 -1
  73. package/lib/esm/replicate.js +6 -6
  74. package/lib/esm/replicate.js.map +1 -1
  75. package/lib/esm/src/adobe/firefly.js +116 -0
  76. package/lib/esm/src/adobe/firefly.js.map +1 -0
  77. package/lib/esm/src/azure/azure_foundry.js +382 -0
  78. package/lib/esm/src/azure/azure_foundry.js.map +1 -0
  79. package/lib/esm/src/bedrock/converse.js +278 -0
  80. package/lib/esm/src/bedrock/converse.js.map +1 -0
  81. package/lib/esm/src/bedrock/index.js +962 -0
  82. package/lib/esm/src/bedrock/index.js.map +1 -0
  83. package/lib/esm/src/bedrock/nova-image-payload.js +203 -0
  84. package/lib/esm/src/bedrock/nova-image-payload.js.map +1 -0
  85. package/lib/esm/src/bedrock/payloads.js +2 -0
  86. package/lib/esm/src/bedrock/payloads.js.map +1 -0
  87. package/lib/esm/src/bedrock/s3.js +99 -0
  88. package/lib/esm/src/bedrock/s3.js.map +1 -0
  89. package/lib/esm/src/bedrock/twelvelabs.js +84 -0
  90. package/lib/esm/src/bedrock/twelvelabs.js.map +1 -0
  91. package/lib/esm/src/groq/index.js +286 -0
  92. package/lib/esm/src/groq/index.js.map +1 -0
  93. package/lib/esm/src/huggingface_ie.js +197 -0
  94. package/lib/esm/src/huggingface_ie.js.map +1 -0
  95. package/lib/esm/src/index.js +14 -0
  96. package/lib/esm/src/index.js.map +1 -0
  97. package/lib/esm/src/mistral/index.js +169 -0
  98. package/lib/esm/src/mistral/index.js.map +1 -0
  99. package/lib/esm/src/mistral/types.js +80 -0
  100. package/lib/esm/src/mistral/types.js.map +1 -0
  101. package/lib/esm/src/openai/azure_openai.js +68 -0
  102. package/lib/esm/src/openai/azure_openai.js.map +1 -0
  103. package/lib/esm/src/openai/index.js +464 -0
  104. package/lib/esm/src/openai/index.js.map +1 -0
  105. package/lib/esm/src/openai/openai.js +14 -0
  106. package/lib/esm/src/openai/openai.js.map +1 -0
  107. package/lib/esm/src/openai/openai_format.js +134 -0
  108. package/lib/esm/src/openai/openai_format.js.map +1 -0
  109. package/lib/esm/src/replicate.js +268 -0
  110. package/lib/esm/src/replicate.js.map +1 -0
  111. package/lib/esm/src/test/TestErrorCompletionStream.js +16 -0
  112. package/lib/esm/src/test/TestErrorCompletionStream.js.map +1 -0
  113. package/lib/esm/src/test/TestValidationErrorCompletionStream.js +20 -0
  114. package/lib/esm/src/test/TestValidationErrorCompletionStream.js.map +1 -0
  115. package/lib/esm/src/test/index.js +91 -0
  116. package/lib/esm/src/test/index.js.map +1 -0
  117. package/lib/esm/src/test/utils.js +25 -0
  118. package/lib/esm/src/test/utils.js.map +1 -0
  119. package/lib/esm/src/test-driver/TestErrorCompletionStream.js +16 -0
  120. package/lib/esm/src/test-driver/TestErrorCompletionStream.js.map +1 -0
  121. package/lib/esm/src/test-driver/TestValidationErrorCompletionStream.js +20 -0
  122. package/lib/esm/src/test-driver/TestValidationErrorCompletionStream.js.map +1 -0
  123. package/lib/esm/src/test-driver/index.js +91 -0
  124. package/lib/esm/src/test-driver/index.js.map +1 -0
  125. package/lib/esm/src/test-driver/utils.js +25 -0
  126. package/lib/esm/src/test-driver/utils.js.map +1 -0
  127. package/lib/esm/src/togetherai/index.js +122 -0
  128. package/lib/esm/src/togetherai/index.js.map +1 -0
  129. package/lib/esm/src/togetherai/interfaces.js +2 -0
  130. package/lib/esm/src/togetherai/interfaces.js.map +1 -0
  131. package/lib/esm/src/vertexai/debug.js +6 -0
  132. package/lib/esm/src/vertexai/debug.js.map +1 -0
  133. package/lib/esm/src/vertexai/embeddings/embeddings-image.js +24 -0
  134. package/lib/esm/src/vertexai/embeddings/embeddings-image.js.map +1 -0
  135. package/lib/esm/src/vertexai/embeddings/embeddings-text.js +20 -0
  136. package/lib/esm/src/vertexai/embeddings/embeddings-text.js.map +1 -0
  137. package/lib/esm/src/vertexai/index.js +383 -0
  138. package/lib/esm/src/vertexai/index.js.map +1 -0
  139. package/lib/esm/src/vertexai/models/claude.js +394 -0
  140. package/lib/esm/src/vertexai/models/claude.js.map +1 -0
  141. package/lib/esm/src/vertexai/models/gemini.js +817 -0
  142. package/lib/esm/src/vertexai/models/gemini.js.map +1 -0
  143. package/lib/esm/src/vertexai/models/imagen.js +302 -0
  144. package/lib/esm/src/vertexai/models/imagen.js.map +1 -0
  145. package/lib/esm/src/vertexai/models/llama.js +179 -0
  146. package/lib/esm/src/vertexai/models/llama.js.map +1 -0
  147. package/lib/esm/src/vertexai/models.js +32 -0
  148. package/lib/esm/src/vertexai/models.js.map +1 -0
  149. package/lib/esm/src/watsonx/index.js +157 -0
  150. package/lib/esm/src/watsonx/index.js.map +1 -0
  151. package/lib/esm/src/watsonx/interfaces.js +2 -0
  152. package/lib/esm/src/watsonx/interfaces.js.map +1 -0
  153. package/lib/esm/src/xai/index.js +64 -0
  154. package/lib/esm/src/xai/index.js.map +1 -0
  155. package/lib/esm/test/utils.js +1 -1
  156. package/lib/esm/test/utils.js.map +1 -1
  157. package/lib/esm/test-driver/TestErrorCompletionStream.js +16 -0
  158. package/lib/esm/test-driver/TestErrorCompletionStream.js.map +1 -0
  159. package/lib/esm/test-driver/TestValidationErrorCompletionStream.js +20 -0
  160. package/lib/esm/test-driver/TestValidationErrorCompletionStream.js.map +1 -0
  161. package/lib/esm/test-driver/index.js +91 -0
  162. package/lib/esm/test-driver/index.js.map +1 -0
  163. package/lib/esm/test-driver/utils.js +25 -0
  164. package/lib/esm/test-driver/utils.js.map +1 -0
  165. package/lib/esm/togetherai/index.js +4 -4
  166. package/lib/esm/togetherai/index.js.map +1 -1
  167. package/lib/esm/tsconfig.tsbuildinfo +1 -0
  168. package/lib/esm/vertexai/embeddings/embeddings-text.js +1 -1
  169. package/lib/esm/vertexai/embeddings/embeddings-text.js.map +1 -1
  170. package/lib/esm/vertexai/index.js +136 -31
  171. package/lib/esm/vertexai/index.js.map +1 -1
  172. package/lib/esm/vertexai/models/claude.js +37 -15
  173. package/lib/esm/vertexai/models/claude.js.map +1 -1
  174. package/lib/esm/vertexai/models/gemini.js +133 -43
  175. package/lib/esm/vertexai/models/gemini.js.map +1 -1
  176. package/lib/esm/vertexai/models/imagen.js +9 -17
  177. package/lib/esm/vertexai/models/imagen.js.map +1 -1
  178. package/lib/esm/vertexai/models/llama.js +4 -3
  179. package/lib/esm/vertexai/models/llama.js.map +1 -1
  180. package/lib/esm/vertexai/models.js +13 -2
  181. package/lib/esm/vertexai/models.js.map +1 -1
  182. package/lib/esm/watsonx/index.js +5 -5
  183. package/lib/esm/watsonx/index.js.map +1 -1
  184. package/lib/esm/xai/index.js +1 -1
  185. package/lib/esm/xai/index.js.map +1 -1
  186. package/lib/types/adobe/firefly.d.ts +3 -3
  187. package/lib/types/adobe/firefly.d.ts.map +1 -1
  188. package/lib/types/azure/azure_foundry.d.ts +2 -2
  189. package/lib/types/azure/azure_foundry.d.ts.map +1 -1
  190. package/lib/types/bedrock/index.d.ts +9 -5
  191. package/lib/types/bedrock/index.d.ts.map +1 -1
  192. package/lib/types/bedrock/twelvelabs.d.ts +50 -0
  193. package/lib/types/bedrock/twelvelabs.d.ts.map +1 -0
  194. package/lib/types/groq/index.d.ts +3 -0
  195. package/lib/types/groq/index.d.ts.map +1 -1
  196. package/lib/types/huggingface_ie.d.ts +8 -5
  197. package/lib/types/huggingface_ie.d.ts.map +1 -1
  198. package/lib/types/index.d.ts +2 -2
  199. package/lib/types/index.d.ts.map +1 -1
  200. package/lib/types/mistral/index.d.ts +2 -2
  201. package/lib/types/mistral/index.d.ts.map +1 -1
  202. package/lib/types/openai/index.d.ts +2 -2
  203. package/lib/types/openai/index.d.ts.map +1 -1
  204. package/lib/types/replicate.d.ts +6 -3
  205. package/lib/types/replicate.d.ts.map +1 -1
  206. package/lib/types/src/adobe/firefly.d.ts +29 -0
  207. package/lib/types/src/azure/azure_foundry.d.ts +49 -0
  208. package/lib/types/src/bedrock/converse.d.ts +8 -0
  209. package/lib/types/src/bedrock/index.d.ts +61 -0
  210. package/lib/types/src/bedrock/nova-image-payload.d.ts +73 -0
  211. package/lib/types/src/bedrock/payloads.d.ts +11 -0
  212. package/lib/types/src/bedrock/s3.d.ts +22 -0
  213. package/lib/types/src/bedrock/twelvelabs.d.ts +49 -0
  214. package/lib/types/src/groq/index.d.ts +26 -0
  215. package/lib/types/src/huggingface_ie.d.ts +34 -0
  216. package/lib/types/src/index.d.ts +13 -0
  217. package/lib/types/src/mistral/index.d.ts +24 -0
  218. package/lib/types/src/mistral/types.d.ts +131 -0
  219. package/lib/types/src/openai/azure_openai.d.ts +24 -0
  220. package/lib/types/src/openai/index.d.ts +24 -0
  221. package/lib/types/src/openai/openai.d.ts +14 -0
  222. package/lib/types/src/openai/openai_format.d.ts +18 -0
  223. package/lib/types/src/replicate.d.ts +47 -0
  224. package/lib/types/src/test/TestErrorCompletionStream.d.ts +8 -0
  225. package/lib/types/src/test/TestValidationErrorCompletionStream.d.ts +8 -0
  226. package/lib/types/src/test/index.d.ts +23 -0
  227. package/lib/types/src/test/utils.d.ts +4 -0
  228. package/lib/types/src/test-driver/TestErrorCompletionStream.d.ts +8 -0
  229. package/lib/types/src/test-driver/TestValidationErrorCompletionStream.d.ts +8 -0
  230. package/lib/types/src/test-driver/index.d.ts +23 -0
  231. package/lib/types/src/test-driver/utils.d.ts +4 -0
  232. package/lib/types/src/togetherai/index.d.ts +22 -0
  233. package/lib/types/src/togetherai/interfaces.d.ts +95 -0
  234. package/lib/types/src/vertexai/debug.d.ts +1 -0
  235. package/lib/types/src/vertexai/embeddings/embeddings-image.d.ts +10 -0
  236. package/lib/types/src/vertexai/embeddings/embeddings-text.d.ts +9 -0
  237. package/lib/types/src/vertexai/index.d.ts +52 -0
  238. package/lib/types/src/vertexai/models/claude.d.ts +19 -0
  239. package/lib/types/src/vertexai/models/gemini.d.ts +17 -0
  240. package/lib/types/src/vertexai/models/imagen.d.ts +74 -0
  241. package/lib/types/src/vertexai/models/llama.d.ts +19 -0
  242. package/lib/types/src/vertexai/models.d.ts +14 -0
  243. package/lib/types/src/watsonx/index.d.ts +26 -0
  244. package/lib/types/src/watsonx/interfaces.d.ts +64 -0
  245. package/lib/types/src/xai/index.d.ts +18 -0
  246. package/lib/types/test-driver/TestErrorCompletionStream.d.ts +9 -0
  247. package/lib/types/test-driver/TestErrorCompletionStream.d.ts.map +1 -0
  248. package/lib/types/test-driver/TestValidationErrorCompletionStream.d.ts +9 -0
  249. package/lib/types/test-driver/TestValidationErrorCompletionStream.d.ts.map +1 -0
  250. package/lib/types/test-driver/index.d.ts +24 -0
  251. package/lib/types/test-driver/index.d.ts.map +1 -0
  252. package/lib/types/test-driver/utils.d.ts +5 -0
  253. package/lib/types/test-driver/utils.d.ts.map +1 -0
  254. package/lib/types/togetherai/index.d.ts +3 -3
  255. package/lib/types/togetherai/index.d.ts.map +1 -1
  256. package/lib/types/vertexai/index.d.ts +17 -14
  257. package/lib/types/vertexai/index.d.ts.map +1 -1
  258. package/lib/types/vertexai/models/claude.d.ts +2 -0
  259. package/lib/types/vertexai/models/claude.d.ts.map +1 -1
  260. package/lib/types/vertexai/models/gemini.d.ts.map +1 -1
  261. package/lib/types/vertexai/models/imagen.d.ts +2 -2
  262. package/lib/types/vertexai/models/imagen.d.ts.map +1 -1
  263. package/lib/types/vertexai/models/llama.d.ts +2 -2
  264. package/lib/types/vertexai/models/llama.d.ts.map +1 -1
  265. package/lib/types/vertexai/models.d.ts +2 -2
  266. package/lib/types/vertexai/models.d.ts.map +1 -1
  267. package/lib/types/watsonx/index.d.ts +3 -3
  268. package/lib/types/watsonx/index.d.ts.map +1 -1
  269. package/package.json +85 -85
  270. package/src/adobe/firefly.ts +12 -20
  271. package/src/azure/azure_foundry.ts +5 -5
  272. package/src/bedrock/index.ts +203 -24
  273. package/src/bedrock/twelvelabs.ts +150 -0
  274. package/src/groq/index.ts +134 -37
  275. package/src/huggingface_ie.ts +7 -7
  276. package/src/mistral/index.ts +8 -7
  277. package/src/openai/index.ts +16 -10
  278. package/src/replicate.ts +11 -11
  279. package/src/test/utils.ts +1 -1
  280. package/src/togetherai/index.ts +7 -7
  281. package/src/vertexai/embeddings/embeddings-text.ts +2 -2
  282. package/src/vertexai/index.ts +133 -21
  283. package/src/vertexai/models/claude.ts +43 -17
  284. package/src/vertexai/models/gemini.ts +161 -60
  285. package/src/vertexai/models/imagen.ts +15 -26
  286. package/src/vertexai/models/llama.ts +6 -5
  287. package/src/vertexai/models.ts +18 -6
  288. package/src/watsonx/index.ts +5 -5
  289. package/src/xai/index.ts +11 -12
@@ -0,0 +1,464 @@
1
+ import { AbstractDriver, ModelType, TrainingJobStatus, getModelCapabilities, modelModalitiesToArray, supportsToolUse, } from "@llumiverse/core";
2
+ import { asyncMap } from "@llumiverse/core/async";
3
+ import { formatOpenAILikeMultimodalPrompt } from "./openai_format.js";
4
+ // Helper function to convert string to CompletionResult[]
5
+ function textToCompletionResult(text) {
6
+ return text ? [{ type: "text", value: text }] : [];
7
+ }
8
+ //TODO: Do we need a list?, replace with if statements and modernize?
9
+ const supportFineTunning = new Set([
10
+ "gpt-3.5-turbo-1106",
11
+ "gpt-3.5-turbo-0613",
12
+ "babbage-002",
13
+ "davinci-002",
14
+ "gpt-4-0613"
15
+ ]);
16
+ export class BaseOpenAIDriver extends AbstractDriver {
17
+ constructor(opts) {
18
+ super(opts);
19
+ this.formatPrompt = formatOpenAILikeMultimodalPrompt;
20
+ //TODO: better type, we send back OpenAI.Chat.Completions.ChatCompletionMessageParam[] but just not compatible with Function call that we don't use here
21
+ }
22
+ extractDataFromResponse(_options, result) {
23
+ const tokenInfo = {
24
+ prompt: result.usage?.prompt_tokens,
25
+ result: result.usage?.completion_tokens,
26
+ total: result.usage?.total_tokens,
27
+ };
28
+ const choice = result.choices[0];
29
+ const tools = collectTools(choice.message.tool_calls);
30
+ const data = choice.message.content ?? undefined;
31
+ if (!data && !tools) {
32
+ this.logger?.error("[OpenAI] Response is not valid", result);
33
+ throw new Error("Response is not valid: no data");
34
+ }
35
+ return {
36
+ result: textToCompletionResult(data || ''),
37
+ token_usage: tokenInfo,
38
+ finish_reason: openAiFinishReason(choice.finish_reason),
39
+ tool_use: tools,
40
+ };
41
+ }
42
+ async requestTextCompletionStream(prompt, options) {
43
+ if (options.model_options?._option_id !== "openai-text" && options.model_options?._option_id !== "openai-thinking") {
44
+ this.logger.warn("Invalid model options", { options: options.model_options });
45
+ }
46
+ const toolDefs = getToolDefinitions(options.tools);
47
+ const useTools = toolDefs ? supportsToolUse(options.model, "openai", true) : false;
48
+ const mapFn = (chunk) => {
49
+ let result = undefined;
50
+ if (useTools && this.provider !== "xai" && options.result_schema) {
51
+ result = chunk.choices[0]?.delta?.tool_calls?.[0].function?.arguments ?? "";
52
+ }
53
+ else {
54
+ result = chunk.choices[0]?.delta.content ?? "";
55
+ }
56
+ return {
57
+ result: textToCompletionResult(result),
58
+ finish_reason: openAiFinishReason(chunk.choices[0]?.finish_reason ?? undefined), //Uses expected "stop" , "length" format
59
+ token_usage: {
60
+ prompt: chunk.usage?.prompt_tokens,
61
+ result: chunk.usage?.completion_tokens,
62
+ total: (chunk.usage?.prompt_tokens ?? 0) + (chunk.usage?.completion_tokens ?? 0),
63
+ }
64
+ };
65
+ };
66
+ convertRoles(prompt, options.model);
67
+ const model_options = options.model_options;
68
+ insert_image_detail(prompt, model_options?.image_detail ?? "auto");
69
+ let parsedSchema = undefined;
70
+ let strictMode = false;
71
+ if (options.result_schema && supportsSchema(options.model)) {
72
+ try {
73
+ parsedSchema = openAISchemaFormat(options.result_schema);
74
+ strictMode = true;
75
+ }
76
+ catch (e) {
77
+ parsedSchema = limitedSchemaFormat(options.result_schema);
78
+ strictMode = false;
79
+ }
80
+ }
81
+ const stream = await this.service.chat.completions.create({
82
+ stream: true,
83
+ stream_options: { include_usage: true },
84
+ model: options.model,
85
+ messages: prompt,
86
+ reasoning_effort: model_options?.reasoning_effort,
87
+ temperature: model_options?.temperature,
88
+ top_p: model_options?.top_p,
89
+ presence_penalty: model_options?.presence_penalty,
90
+ frequency_penalty: model_options?.frequency_penalty,
91
+ n: 1,
92
+ max_completion_tokens: model_options?.max_tokens, //TODO: use max_tokens for older models, currently relying on OpenAI to handle it
93
+ tools: useTools ? toolDefs : undefined,
94
+ stop: model_options?.stop_sequence,
95
+ response_format: parsedSchema ? {
96
+ type: "json_schema",
97
+ json_schema: {
98
+ name: "format_output",
99
+ schema: parsedSchema,
100
+ strict: strictMode,
101
+ }
102
+ } : undefined,
103
+ });
104
+ return asyncMap(stream, mapFn);
105
+ }
106
+ async requestTextCompletion(prompt, options) {
107
+ if (options.model_options?._option_id !== "openai-text" && options.model_options?._option_id !== "openai-thinking") {
108
+ this.logger.warn("Invalid model options", { options: options.model_options });
109
+ }
110
+ convertRoles(prompt, options.model);
111
+ const model_options = options.model_options;
112
+ insert_image_detail(prompt, model_options?.image_detail ?? "auto");
113
+ const toolDefs = getToolDefinitions(options.tools);
114
+ const useTools = toolDefs ? supportsToolUse(options.model, "openai") : false;
115
+ let conversation = updateConversation(options.conversation, prompt);
116
+ let parsedSchema = undefined;
117
+ let strictMode = false;
118
+ if (options.result_schema && supportsSchema(options.model)) {
119
+ try {
120
+ parsedSchema = openAISchemaFormat(options.result_schema);
121
+ strictMode = true;
122
+ }
123
+ catch (e) {
124
+ parsedSchema = limitedSchemaFormat(options.result_schema);
125
+ strictMode = false;
126
+ }
127
+ }
128
+ const res = await this.service.chat.completions.create({
129
+ stream: false,
130
+ model: options.model,
131
+ messages: conversation,
132
+ reasoning_effort: model_options?.reasoning_effort,
133
+ temperature: model_options?.temperature,
134
+ top_p: model_options?.top_p,
135
+ presence_penalty: model_options?.presence_penalty,
136
+ frequency_penalty: model_options?.frequency_penalty,
137
+ n: 1,
138
+ max_completion_tokens: model_options?.max_tokens, //TODO: use max_tokens for older models, currently relying on OpenAI to handle it
139
+ tools: useTools ? toolDefs : undefined,
140
+ stop: model_options?.stop_sequence,
141
+ response_format: parsedSchema ? {
142
+ type: "json_schema",
143
+ json_schema: {
144
+ name: "format_output",
145
+ schema: parsedSchema,
146
+ strict: strictMode,
147
+ }
148
+ } : undefined,
149
+ });
150
+ const completion = this.extractDataFromResponse(options, res);
151
+ if (options.include_original_response) {
152
+ completion.original_response = res;
153
+ }
154
+ conversation = updateConversation(conversation, createPromptFromResponse(res.choices[0].message));
155
+ completion.conversation = conversation;
156
+ return completion;
157
+ }
158
+ canStream(_options) {
159
+ if (_options.model.includes("o1")
160
+ && !(_options.model.includes("mini") || _options.model.includes("preview"))) {
161
+ //o1 full does not support streaming
162
+ //TODO: Update when OpenAI adds support for streaming, last check 16/02/2025
163
+ return Promise.resolve(false);
164
+ }
165
+ return Promise.resolve(true);
166
+ }
167
+ createTrainingPrompt(options) {
168
+ if (options.model.includes("gpt")) {
169
+ return super.createTrainingPrompt(options);
170
+ }
171
+ else {
172
+ // babbage, davinci not yet implemented
173
+ throw new Error("Unsupported model for training: " + options.model);
174
+ }
175
+ }
176
+ async startTraining(dataset, options) {
177
+ const url = await dataset.getURL();
178
+ const file = await this.service.files.create({
179
+ file: await fetch(url),
180
+ purpose: "fine-tune",
181
+ });
182
+ const job = await this.service.fineTuning.jobs.create({
183
+ training_file: file.id,
184
+ model: options.model,
185
+ hyperparameters: options.params
186
+ });
187
+ return jobInfo(job);
188
+ }
189
+ async cancelTraining(jobId) {
190
+ const job = await this.service.fineTuning.jobs.cancel(jobId);
191
+ return jobInfo(job);
192
+ }
193
+ async getTrainingJob(jobId) {
194
+ const job = await this.service.fineTuning.jobs.retrieve(jobId);
195
+ return jobInfo(job);
196
+ }
197
+ // ========= management API =============
198
+ async validateConnection() {
199
+ try {
200
+ await this.service.models.list();
201
+ return true;
202
+ }
203
+ catch (error) {
204
+ return false;
205
+ }
206
+ }
207
+ listTrainableModels() {
208
+ return this._listModels((m) => supportFineTunning.has(m.id));
209
+ }
210
+ async listModels() {
211
+ return this._listModels();
212
+ }
213
+ async _listModels(filter) {
214
+ let result = (await this.service.models.list()).data;
215
+ //Some of these use the completions API instead of the chat completions API.
216
+ //Others are for non-text input modalities. Therefore common to both.
217
+ const wordBlacklist = ["embed", "whisper", "transcribe", "audio", "moderation", "tts",
218
+ "realtime", "dall-e", "babbage", "davinci", "codex", "o1-pro", "computer-use", "sora"];
219
+ //OpenAI has very little information, filtering based on name.
220
+ result = result.filter((m) => {
221
+ return !wordBlacklist.some((word) => m.id.includes(word));
222
+ });
223
+ const models = filter ? result.filter(filter) : result;
224
+ const aiModels = models.map((m) => {
225
+ const modelCapability = getModelCapabilities(m.id, "openai");
226
+ let owner = m.owned_by;
227
+ if (owner == "system") {
228
+ owner = "openai";
229
+ }
230
+ return {
231
+ id: m.id,
232
+ name: m.id,
233
+ provider: this.provider,
234
+ owner: owner,
235
+ type: m.object === "model" ? ModelType.Text : ModelType.Unknown,
236
+ can_stream: true,
237
+ is_multimodal: m.id.includes("gpt-4"),
238
+ input_modalities: modelModalitiesToArray(modelCapability.input),
239
+ output_modalities: modelModalitiesToArray(modelCapability.output),
240
+ tool_support: modelCapability.tool_support,
241
+ };
242
+ }).sort((a, b) => a.id.localeCompare(b.id));
243
+ return aiModels;
244
+ }
245
+ async generateEmbeddings({ text, image, model = "text-embedding-3-small" }) {
246
+ if (image) {
247
+ throw new Error("Image embeddings not supported by OpenAI");
248
+ }
249
+ if (!text) {
250
+ throw new Error("No text provided");
251
+ }
252
+ const res = await this.service.embeddings.create({
253
+ input: text,
254
+ model: model,
255
+ });
256
+ const embeddings = res.data[0].embedding;
257
+ if (!embeddings || embeddings.length === 0) {
258
+ throw new Error("No embedding found");
259
+ }
260
+ return { values: embeddings, model };
261
+ }
262
+ }
263
+ function jobInfo(job) {
264
+ //validating_files`, `queued`, `running`, `succeeded`, `failed`, or `cancelled`.
265
+ const jobStatus = job.status;
266
+ let status = TrainingJobStatus.running;
267
+ let details;
268
+ if (jobStatus === 'succeeded') {
269
+ status = TrainingJobStatus.succeeded;
270
+ }
271
+ else if (jobStatus === 'failed') {
272
+ status = TrainingJobStatus.failed;
273
+ details = job.error ? `${job.error.code} - ${job.error.message} ${job.error.param ? " [" + job.error.param + "]" : ""}` : "error";
274
+ }
275
+ else if (jobStatus === 'cancelled') {
276
+ status = TrainingJobStatus.cancelled;
277
+ }
278
+ else {
279
+ status = TrainingJobStatus.running;
280
+ details = jobStatus;
281
+ }
282
+ return {
283
+ id: job.id,
284
+ model: job.fine_tuned_model || undefined,
285
+ status,
286
+ details
287
+ };
288
+ }
289
+ function insert_image_detail(messages, detail_level) {
290
+ if (detail_level == "auto" || detail_level == "low" || detail_level == "high") {
291
+ for (const message of messages) {
292
+ if (message.role !== 'assistant' && message.content) {
293
+ for (const part of message.content) {
294
+ if (typeof part === "string") {
295
+ continue;
296
+ }
297
+ if (part.type === 'image_url') {
298
+ part.image_url = { ...part.image_url, detail: detail_level };
299
+ }
300
+ }
301
+ }
302
+ }
303
+ }
304
+ return messages;
305
+ }
306
+ function convertRoles(messages, model) {
307
+ //New openai models use developer role instead of system
308
+ if (model.includes("o1") || model.includes("o3")) {
309
+ if (model.includes("o1-mini") || model.includes("o1-preview")) {
310
+ //o1-mini and o1-preview support neither system nor developer
311
+ for (const message of messages) {
312
+ if (message.role === 'system') {
313
+ message.role = 'user';
314
+ }
315
+ }
316
+ }
317
+ else {
318
+ //Models newer than o1 use developer role
319
+ for (const message of messages) {
320
+ if (message.role === 'system') {
321
+ message.role = 'developer';
322
+ }
323
+ }
324
+ }
325
+ }
326
+ return messages;
327
+ }
328
+ //Structured output support is typically aligned with tool use support
329
+ //Not true for realtime models, which do not support structured output, but do support tool use.
330
+ function supportsSchema(model) {
331
+ const realtimeModel = model.includes("realtime");
332
+ if (realtimeModel) {
333
+ return false;
334
+ }
335
+ return supportsToolUse(model, "openai");
336
+ }
337
+ function getToolDefinitions(tools) {
338
+ return tools ? tools.map(getToolDefinition) : undefined;
339
+ }
340
+ function getToolDefinition(toolDef) {
341
+ let parsedSchema = undefined;
342
+ let strictMode = false;
343
+ if (toolDef.input_schema) {
344
+ try {
345
+ parsedSchema = openAISchemaFormat(toolDef.input_schema);
346
+ strictMode = true;
347
+ }
348
+ catch (e) {
349
+ parsedSchema = limitedSchemaFormat(toolDef.input_schema);
350
+ strictMode = false;
351
+ }
352
+ }
353
+ return {
354
+ type: "function",
355
+ function: {
356
+ name: toolDef.name,
357
+ description: toolDef.description,
358
+ parameters: parsedSchema,
359
+ strict: strictMode,
360
+ },
361
+ };
362
+ }
363
+ function openAiFinishReason(finish_reason) {
364
+ if (finish_reason === "tool_calls") {
365
+ return "tool_use";
366
+ }
367
+ return finish_reason;
368
+ }
369
+ function updateConversation(conversation, message) {
370
+ if (!message) {
371
+ return conversation;
372
+ }
373
+ if (!conversation) {
374
+ return message;
375
+ }
376
+ return [...conversation, ...message];
377
+ }
378
+ export function collectTools(toolCalls) {
379
+ if (!toolCalls) {
380
+ return undefined;
381
+ }
382
+ const tools = [];
383
+ for (const call of toolCalls) {
384
+ tools.push({
385
+ id: call.id,
386
+ tool_name: call.function.name,
387
+ tool_input: JSON.parse(call.function.arguments),
388
+ });
389
+ }
390
+ return tools.length > 0 ? tools : undefined;
391
+ }
392
+ function createPromptFromResponse(response) {
393
+ const messages = [];
394
+ if (response) {
395
+ messages.push({
396
+ role: response.role,
397
+ content: [{
398
+ type: "text",
399
+ text: response.content ?? ""
400
+ }],
401
+ tool_calls: response.tool_calls,
402
+ });
403
+ }
404
+ return messages;
405
+ }
406
+ //For strict mode false
407
+ function limitedSchemaFormat(schema) {
408
+ const formattedSchema = { ...schema };
409
+ // Defaults not supported
410
+ delete formattedSchema.default;
411
+ if (formattedSchema?.properties) {
412
+ // Process each property recursively
413
+ for (const propName of Object.keys(formattedSchema.properties)) {
414
+ const property = formattedSchema.properties[propName];
415
+ // Recursively process properties
416
+ formattedSchema.properties[propName] = limitedSchemaFormat(property);
417
+ // Process arrays with items of type object
418
+ if (property?.type === 'array' && property.items && property.items?.type === 'object') {
419
+ formattedSchema.properties[propName] = {
420
+ ...property,
421
+ items: limitedSchemaFormat(property.items),
422
+ };
423
+ }
424
+ }
425
+ }
426
+ return formattedSchema;
427
+ }
428
+ //For strict mode true
429
+ function openAISchemaFormat(schema, nesting = 0) {
430
+ if (nesting > 5) {
431
+ throw new Error("OpenAI schema nesting too deep");
432
+ }
433
+ const formattedSchema = { ...schema };
434
+ // Defaults not supported
435
+ delete formattedSchema.default;
436
+ // Additional properties not supported, required to be set.
437
+ if (formattedSchema?.type === "object") {
438
+ formattedSchema.additionalProperties = false;
439
+ }
440
+ if (formattedSchema?.properties) {
441
+ // Set all properties as required
442
+ formattedSchema.required = Object.keys(formattedSchema.properties);
443
+ // Process each property recursively
444
+ for (const propName of Object.keys(formattedSchema.properties)) {
445
+ const property = formattedSchema.properties[propName];
446
+ // Recursively process properties
447
+ formattedSchema.properties[propName] = openAISchemaFormat(property, nesting + 1);
448
+ // Process arrays with items of type object
449
+ if (property?.type === 'array' && property.items && property.items?.type === 'object') {
450
+ formattedSchema.properties[propName] = {
451
+ ...property,
452
+ items: openAISchemaFormat(property.items, nesting + 1),
453
+ };
454
+ }
455
+ }
456
+ }
457
+ if (formattedSchema?.type === 'object' && (!formattedSchema?.properties || Object.keys(formattedSchema?.properties ?? {}).length == 0)) {
458
+ //If no properties are defined, then additionalProperties: true was set or the object would be empty.
459
+ //OpenAI does not support this on structured output/ strict mode.
460
+ throw new Error("OpenAI does not support empty objects or objects with additionalProperties set to true");
461
+ }
462
+ return formattedSchema;
463
+ }
464
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/openai/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Providers } from "@llumiverse/core";
2
+ import OpenAI from "openai";
3
+ import { BaseOpenAIDriver } from "./index.js";
4
+ export class OpenAIDriver extends BaseOpenAIDriver {
5
+ service;
6
+ provider = Providers.openai;
7
+ constructor(opts) {
8
+ super(opts);
9
+ this.service = new OpenAI({
10
+ apiKey: opts.apiKey
11
+ });
12
+ }
13
+ }
14
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../src/openai/openai.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAc9C,MAAM,OAAO,YAAa,SAAQ,gBAAgB;IAE9C,OAAO,CAAS;IACP,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC;IAErC,YAAY,IAAyB;QACjC,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -0,0 +1,134 @@
1
+ // This file is used by multiple drivers
2
+ // to format prompts in a way that is compatible with OpenAI's API.
3
+ import { PromptRole } from "@llumiverse/common";
4
+ import { readStreamAsBase64 } from "@llumiverse/core";
5
+ /**
6
+ * OpenAI text only prompts
7
+ * @param segments
8
+ * @returns
9
+ */
10
+ export function formatOpenAILikeTextPrompt(segments) {
11
+ const system = [];
12
+ const safety = [];
13
+ const user = [];
14
+ for (const msg of segments) {
15
+ if (msg.role === PromptRole.system) {
16
+ system.push({ content: msg.content, role: "system" });
17
+ }
18
+ else if (msg.role === PromptRole.safety) {
19
+ safety.push({ content: "IMPORTANT: " + msg.content, role: "system" });
20
+ }
21
+ else if (msg.role !== PromptRole.negative && msg.role !== PromptRole.mask && msg.role !== PromptRole.tool) {
22
+ user.push({
23
+ content: msg.content,
24
+ role: msg.role || 'user',
25
+ });
26
+ }
27
+ }
28
+ // put system messages first and safety last
29
+ return system.concat(user).concat(safety);
30
+ }
31
+ export async function formatOpenAILikeMultimodalPrompt(segments, opts) {
32
+ const system = [];
33
+ const safety = [];
34
+ const others = [];
35
+ for (const msg of segments) {
36
+ const parts = [];
37
+ //generate the parts based on PromptSegment
38
+ if (msg.files) {
39
+ for (const file of msg.files) {
40
+ const stream = await file.getStream();
41
+ const data = await readStreamAsBase64(stream);
42
+ parts.push({
43
+ type: "image_url",
44
+ image_url: {
45
+ url: `data:${file.mime_type || "image/jpeg"};base64,${data}`,
46
+ //detail: "auto" //This is modified just before execution to "low" | "high" | "auto"
47
+ },
48
+ });
49
+ }
50
+ }
51
+ if (msg.content) {
52
+ parts.push({
53
+ text: msg.content,
54
+ type: "text"
55
+ });
56
+ }
57
+ if (msg.role === PromptRole.system) {
58
+ // For system messages, filter to only text parts
59
+ const textParts = parts.filter((part) => part.type === 'text');
60
+ const systemMsg = {
61
+ role: "system",
62
+ content: textParts.length === 1 && !msg.files ? textParts[0].text : textParts
63
+ };
64
+ system.push(systemMsg);
65
+ if (opts.useToolForFormatting && opts.schema) {
66
+ system.forEach(s => {
67
+ if (typeof s.content === 'string') {
68
+ s.content = "TOOL: " + s.content;
69
+ }
70
+ else if (Array.isArray(s.content)) {
71
+ s.content.forEach((c) => {
72
+ if (c.type === "text")
73
+ c.text = "TOOL: " + c.text;
74
+ });
75
+ }
76
+ });
77
+ }
78
+ }
79
+ else if (msg.role === PromptRole.safety) {
80
+ const textParts = parts.filter((part) => part.type === 'text');
81
+ const safetyMsg = {
82
+ role: "system",
83
+ content: textParts
84
+ };
85
+ if (Array.isArray(safetyMsg.content)) {
86
+ safetyMsg.content.forEach((c) => {
87
+ if (c.type === "text")
88
+ c.text = "DO NOT IGNORE - IMPORTANT: " + c.text;
89
+ });
90
+ }
91
+ system.push(safetyMsg);
92
+ }
93
+ else if (msg.role === PromptRole.tool) {
94
+ if (!msg.tool_use_id) {
95
+ throw new Error("Tool use id is required for tool messages");
96
+ }
97
+ const toolMsg = {
98
+ role: "tool",
99
+ tool_call_id: msg.tool_use_id,
100
+ content: msg.content || ""
101
+ };
102
+ others.push(toolMsg);
103
+ }
104
+ else if (msg.role !== PromptRole.negative && msg.role !== PromptRole.mask) {
105
+ if (msg.role === 'assistant') {
106
+ const assistantMsg = {
107
+ role: 'assistant',
108
+ content: parts
109
+ };
110
+ others.push(assistantMsg);
111
+ }
112
+ else {
113
+ const userMsg = {
114
+ role: 'user',
115
+ content: parts
116
+ };
117
+ others.push(userMsg);
118
+ }
119
+ }
120
+ }
121
+ if (opts.result_schema && !opts.useToolForFormatting) {
122
+ const schemaMsg = {
123
+ role: "system",
124
+ content: [{
125
+ type: "text",
126
+ text: "IMPORTANT: only answer using JSON, and respecting the schema included below, between the <response_schema> tags. " + `<response_schema>${JSON.stringify(opts.result_schema)}</response_schema>`
127
+ }]
128
+ };
129
+ system.push(schemaMsg);
130
+ }
131
+ // put system messages first and safety last
132
+ return [].concat(system).concat(others).concat(safety);
133
+ }
134
+ //# sourceMappingURL=openai_format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai_format.js","sourceRoot":"","sources":["../../../../src/openai/openai_format.ts"],"names":[],"mappings":"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"}