@llumiverse/drivers 0.22.2 → 0.22.3

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 (225) hide show
  1. package/lib/cjs/adobe/firefly.js +2 -2
  2. package/lib/cjs/adobe/firefly.js.map +1 -1
  3. package/lib/cjs/azure/azure_foundry.js +11 -11
  4. package/lib/cjs/azure/azure_foundry.js.map +1 -1
  5. package/lib/cjs/bedrock/index.js +7 -7
  6. package/lib/cjs/bedrock/index.js.map +1 -1
  7. package/lib/cjs/groq/index.js +2 -2
  8. package/lib/cjs/groq/index.js.map +1 -1
  9. package/lib/cjs/huggingface_ie.js +3 -4
  10. package/lib/cjs/huggingface_ie.js.map +1 -1
  11. package/lib/cjs/index.js +2 -2
  12. package/lib/cjs/index.js.map +1 -1
  13. package/lib/cjs/mistral/index.js +2 -2
  14. package/lib/cjs/mistral/index.js.map +1 -1
  15. package/lib/cjs/openai/azure_openai.js +1 -1
  16. package/lib/cjs/openai/azure_openai.js.map +1 -1
  17. package/lib/cjs/openai/index.js +3 -3
  18. package/lib/cjs/openai/index.js.map +1 -1
  19. package/lib/cjs/replicate.js +4 -4
  20. package/lib/cjs/replicate.js.map +1 -1
  21. package/lib/cjs/togetherai/index.js +2 -2
  22. package/lib/cjs/togetherai/index.js.map +1 -1
  23. package/lib/cjs/vertexai/index.js +82 -40
  24. package/lib/cjs/vertexai/index.js.map +1 -1
  25. package/lib/cjs/vertexai/models/claude.js +4 -4
  26. package/lib/cjs/vertexai/models/claude.js.map +1 -1
  27. package/lib/cjs/vertexai/models/gemini.js +15 -5
  28. package/lib/cjs/vertexai/models/gemini.js.map +1 -1
  29. package/lib/cjs/vertexai/models/imagen.js +2 -5
  30. package/lib/cjs/vertexai/models/imagen.js.map +1 -1
  31. package/lib/cjs/watsonx/index.js +3 -3
  32. package/lib/cjs/watsonx/index.js.map +1 -1
  33. package/lib/esm/adobe/firefly.js +2 -2
  34. package/lib/esm/adobe/firefly.js.map +1 -1
  35. package/lib/esm/azure/azure_foundry.js +11 -11
  36. package/lib/esm/azure/azure_foundry.js.map +1 -1
  37. package/lib/esm/bedrock/index.js +8 -8
  38. package/lib/esm/bedrock/index.js.map +1 -1
  39. package/lib/esm/groq/index.js +2 -2
  40. package/lib/esm/groq/index.js.map +1 -1
  41. package/lib/esm/huggingface_ie.js +4 -5
  42. package/lib/esm/huggingface_ie.js.map +1 -1
  43. package/lib/esm/index.js +2 -2
  44. package/lib/esm/index.js.map +1 -1
  45. package/lib/esm/mistral/index.js +2 -2
  46. package/lib/esm/mistral/index.js.map +1 -1
  47. package/lib/esm/openai/azure_openai.js +1 -1
  48. package/lib/esm/openai/azure_openai.js.map +1 -1
  49. package/lib/esm/openai/index.js +3 -3
  50. package/lib/esm/openai/index.js.map +1 -1
  51. package/lib/esm/replicate.js +4 -4
  52. package/lib/esm/replicate.js.map +1 -1
  53. package/lib/esm/togetherai/index.js +2 -2
  54. package/lib/esm/togetherai/index.js.map +1 -1
  55. package/lib/esm/vertexai/index.js +83 -41
  56. package/lib/esm/vertexai/index.js.map +1 -1
  57. package/lib/esm/vertexai/models/claude.js +4 -4
  58. package/lib/esm/vertexai/models/claude.js.map +1 -1
  59. package/lib/esm/vertexai/models/gemini.js +15 -5
  60. package/lib/esm/vertexai/models/gemini.js.map +1 -1
  61. package/lib/esm/vertexai/models/imagen.js +3 -6
  62. package/lib/esm/vertexai/models/imagen.js.map +1 -1
  63. package/lib/esm/watsonx/index.js +3 -3
  64. package/lib/esm/watsonx/index.js.map +1 -1
  65. package/lib/types/bedrock/index.d.ts +1 -0
  66. package/lib/types/bedrock/index.d.ts.map +1 -1
  67. package/lib/types/huggingface_ie.d.ts +3 -3
  68. package/lib/types/huggingface_ie.d.ts.map +1 -1
  69. package/lib/types/index.d.ts +2 -2
  70. package/lib/types/index.d.ts.map +1 -1
  71. package/lib/types/replicate.d.ts.map +1 -1
  72. package/lib/types/vertexai/index.d.ts +12 -11
  73. package/lib/types/vertexai/index.d.ts.map +1 -1
  74. package/lib/types/vertexai/models/gemini.d.ts.map +1 -1
  75. package/lib/types/vertexai/models/imagen.d.ts.map +1 -1
  76. package/package.json +3 -3
  77. package/src/bedrock/index.ts +5 -4
  78. package/src/vertexai/index.ts +53 -6
  79. package/src/vertexai/models/gemini.ts +18 -6
  80. package/src/vertexai/models/imagen.ts +3 -7
  81. package/lib/cjs/test-driver/TestErrorCompletionStream.js +0 -20
  82. package/lib/cjs/test-driver/TestErrorCompletionStream.js.map +0 -1
  83. package/lib/cjs/test-driver/TestValidationErrorCompletionStream.js +0 -24
  84. package/lib/cjs/test-driver/TestValidationErrorCompletionStream.js.map +0 -1
  85. package/lib/cjs/test-driver/index.js +0 -109
  86. package/lib/cjs/test-driver/index.js.map +0 -1
  87. package/lib/cjs/test-driver/utils.js +0 -30
  88. package/lib/cjs/test-driver/utils.js.map +0 -1
  89. package/lib/esm/src/adobe/firefly.js +0 -116
  90. package/lib/esm/src/adobe/firefly.js.map +0 -1
  91. package/lib/esm/src/azure/azure_foundry.js +0 -382
  92. package/lib/esm/src/azure/azure_foundry.js.map +0 -1
  93. package/lib/esm/src/bedrock/converse.js +0 -278
  94. package/lib/esm/src/bedrock/converse.js.map +0 -1
  95. package/lib/esm/src/bedrock/index.js +0 -962
  96. package/lib/esm/src/bedrock/index.js.map +0 -1
  97. package/lib/esm/src/bedrock/nova-image-payload.js +0 -203
  98. package/lib/esm/src/bedrock/nova-image-payload.js.map +0 -1
  99. package/lib/esm/src/bedrock/payloads.js +0 -2
  100. package/lib/esm/src/bedrock/payloads.js.map +0 -1
  101. package/lib/esm/src/bedrock/s3.js +0 -99
  102. package/lib/esm/src/bedrock/s3.js.map +0 -1
  103. package/lib/esm/src/bedrock/twelvelabs.js +0 -84
  104. package/lib/esm/src/bedrock/twelvelabs.js.map +0 -1
  105. package/lib/esm/src/groq/index.js +0 -286
  106. package/lib/esm/src/groq/index.js.map +0 -1
  107. package/lib/esm/src/huggingface_ie.js +0 -197
  108. package/lib/esm/src/huggingface_ie.js.map +0 -1
  109. package/lib/esm/src/index.js +0 -14
  110. package/lib/esm/src/index.js.map +0 -1
  111. package/lib/esm/src/mistral/index.js +0 -169
  112. package/lib/esm/src/mistral/index.js.map +0 -1
  113. package/lib/esm/src/mistral/types.js +0 -80
  114. package/lib/esm/src/mistral/types.js.map +0 -1
  115. package/lib/esm/src/openai/azure_openai.js +0 -68
  116. package/lib/esm/src/openai/azure_openai.js.map +0 -1
  117. package/lib/esm/src/openai/index.js +0 -464
  118. package/lib/esm/src/openai/index.js.map +0 -1
  119. package/lib/esm/src/openai/openai.js +0 -14
  120. package/lib/esm/src/openai/openai.js.map +0 -1
  121. package/lib/esm/src/openai/openai_format.js +0 -134
  122. package/lib/esm/src/openai/openai_format.js.map +0 -1
  123. package/lib/esm/src/replicate.js +0 -268
  124. package/lib/esm/src/replicate.js.map +0 -1
  125. package/lib/esm/src/test/TestErrorCompletionStream.js +0 -16
  126. package/lib/esm/src/test/TestErrorCompletionStream.js.map +0 -1
  127. package/lib/esm/src/test/TestValidationErrorCompletionStream.js +0 -20
  128. package/lib/esm/src/test/TestValidationErrorCompletionStream.js.map +0 -1
  129. package/lib/esm/src/test/index.js +0 -91
  130. package/lib/esm/src/test/index.js.map +0 -1
  131. package/lib/esm/src/test/utils.js +0 -25
  132. package/lib/esm/src/test/utils.js.map +0 -1
  133. package/lib/esm/src/test-driver/TestErrorCompletionStream.js +0 -16
  134. package/lib/esm/src/test-driver/TestErrorCompletionStream.js.map +0 -1
  135. package/lib/esm/src/test-driver/TestValidationErrorCompletionStream.js +0 -20
  136. package/lib/esm/src/test-driver/TestValidationErrorCompletionStream.js.map +0 -1
  137. package/lib/esm/src/test-driver/index.js +0 -91
  138. package/lib/esm/src/test-driver/index.js.map +0 -1
  139. package/lib/esm/src/test-driver/utils.js +0 -25
  140. package/lib/esm/src/test-driver/utils.js.map +0 -1
  141. package/lib/esm/src/togetherai/index.js +0 -122
  142. package/lib/esm/src/togetherai/index.js.map +0 -1
  143. package/lib/esm/src/togetherai/interfaces.js +0 -2
  144. package/lib/esm/src/togetherai/interfaces.js.map +0 -1
  145. package/lib/esm/src/vertexai/debug.js +0 -6
  146. package/lib/esm/src/vertexai/debug.js.map +0 -1
  147. package/lib/esm/src/vertexai/embeddings/embeddings-image.js +0 -24
  148. package/lib/esm/src/vertexai/embeddings/embeddings-image.js.map +0 -1
  149. package/lib/esm/src/vertexai/embeddings/embeddings-text.js +0 -20
  150. package/lib/esm/src/vertexai/embeddings/embeddings-text.js.map +0 -1
  151. package/lib/esm/src/vertexai/index.js +0 -383
  152. package/lib/esm/src/vertexai/index.js.map +0 -1
  153. package/lib/esm/src/vertexai/models/claude.js +0 -394
  154. package/lib/esm/src/vertexai/models/claude.js.map +0 -1
  155. package/lib/esm/src/vertexai/models/gemini.js +0 -817
  156. package/lib/esm/src/vertexai/models/gemini.js.map +0 -1
  157. package/lib/esm/src/vertexai/models/imagen.js +0 -302
  158. package/lib/esm/src/vertexai/models/imagen.js.map +0 -1
  159. package/lib/esm/src/vertexai/models/llama.js +0 -179
  160. package/lib/esm/src/vertexai/models/llama.js.map +0 -1
  161. package/lib/esm/src/vertexai/models.js +0 -32
  162. package/lib/esm/src/vertexai/models.js.map +0 -1
  163. package/lib/esm/src/watsonx/index.js +0 -157
  164. package/lib/esm/src/watsonx/index.js.map +0 -1
  165. package/lib/esm/src/watsonx/interfaces.js +0 -2
  166. package/lib/esm/src/watsonx/interfaces.js.map +0 -1
  167. package/lib/esm/src/xai/index.js +0 -64
  168. package/lib/esm/src/xai/index.js.map +0 -1
  169. package/lib/esm/test-driver/TestErrorCompletionStream.js +0 -16
  170. package/lib/esm/test-driver/TestErrorCompletionStream.js.map +0 -1
  171. package/lib/esm/test-driver/TestValidationErrorCompletionStream.js +0 -20
  172. package/lib/esm/test-driver/TestValidationErrorCompletionStream.js.map +0 -1
  173. package/lib/esm/test-driver/index.js +0 -91
  174. package/lib/esm/test-driver/index.js.map +0 -1
  175. package/lib/esm/test-driver/utils.js +0 -25
  176. package/lib/esm/test-driver/utils.js.map +0 -1
  177. package/lib/esm/tsconfig.tsbuildinfo +0 -1
  178. package/lib/types/src/adobe/firefly.d.ts +0 -29
  179. package/lib/types/src/azure/azure_foundry.d.ts +0 -49
  180. package/lib/types/src/bedrock/converse.d.ts +0 -8
  181. package/lib/types/src/bedrock/index.d.ts +0 -61
  182. package/lib/types/src/bedrock/nova-image-payload.d.ts +0 -73
  183. package/lib/types/src/bedrock/payloads.d.ts +0 -11
  184. package/lib/types/src/bedrock/s3.d.ts +0 -22
  185. package/lib/types/src/bedrock/twelvelabs.d.ts +0 -49
  186. package/lib/types/src/groq/index.d.ts +0 -26
  187. package/lib/types/src/huggingface_ie.d.ts +0 -34
  188. package/lib/types/src/index.d.ts +0 -13
  189. package/lib/types/src/mistral/index.d.ts +0 -24
  190. package/lib/types/src/mistral/types.d.ts +0 -131
  191. package/lib/types/src/openai/azure_openai.d.ts +0 -24
  192. package/lib/types/src/openai/index.d.ts +0 -24
  193. package/lib/types/src/openai/openai.d.ts +0 -14
  194. package/lib/types/src/openai/openai_format.d.ts +0 -18
  195. package/lib/types/src/replicate.d.ts +0 -47
  196. package/lib/types/src/test/TestErrorCompletionStream.d.ts +0 -8
  197. package/lib/types/src/test/TestValidationErrorCompletionStream.d.ts +0 -8
  198. package/lib/types/src/test/index.d.ts +0 -23
  199. package/lib/types/src/test/utils.d.ts +0 -4
  200. package/lib/types/src/test-driver/TestErrorCompletionStream.d.ts +0 -8
  201. package/lib/types/src/test-driver/TestValidationErrorCompletionStream.d.ts +0 -8
  202. package/lib/types/src/test-driver/index.d.ts +0 -23
  203. package/lib/types/src/test-driver/utils.d.ts +0 -4
  204. package/lib/types/src/togetherai/index.d.ts +0 -22
  205. package/lib/types/src/togetherai/interfaces.d.ts +0 -95
  206. package/lib/types/src/vertexai/debug.d.ts +0 -1
  207. package/lib/types/src/vertexai/embeddings/embeddings-image.d.ts +0 -10
  208. package/lib/types/src/vertexai/embeddings/embeddings-text.d.ts +0 -9
  209. package/lib/types/src/vertexai/index.d.ts +0 -52
  210. package/lib/types/src/vertexai/models/claude.d.ts +0 -19
  211. package/lib/types/src/vertexai/models/gemini.d.ts +0 -17
  212. package/lib/types/src/vertexai/models/imagen.d.ts +0 -74
  213. package/lib/types/src/vertexai/models/llama.d.ts +0 -19
  214. package/lib/types/src/vertexai/models.d.ts +0 -14
  215. package/lib/types/src/watsonx/index.d.ts +0 -26
  216. package/lib/types/src/watsonx/interfaces.d.ts +0 -64
  217. package/lib/types/src/xai/index.d.ts +0 -18
  218. package/lib/types/test-driver/TestErrorCompletionStream.d.ts +0 -9
  219. package/lib/types/test-driver/TestErrorCompletionStream.d.ts.map +0 -1
  220. package/lib/types/test-driver/TestValidationErrorCompletionStream.d.ts +0 -9
  221. package/lib/types/test-driver/TestValidationErrorCompletionStream.d.ts.map +0 -1
  222. package/lib/types/test-driver/index.d.ts +0 -24
  223. package/lib/types/test-driver/index.d.ts.map +0 -1
  224. package/lib/types/test-driver/utils.d.ts +0 -5
  225. package/lib/types/test-driver/utils.d.ts.map +0 -1
@@ -1,109 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.TestDriver = exports.TestDriverModels = void 0;
18
- const core_1 = require("@llumiverse/core");
19
- const TestErrorCompletionStream_js_1 = require("./TestErrorCompletionStream.js");
20
- const TestValidationErrorCompletionStream_js_1 = require("./TestValidationErrorCompletionStream.js");
21
- const utils_js_1 = require("./utils.js");
22
- __exportStar(require("./TestErrorCompletionStream.js"), exports);
23
- __exportStar(require("./TestValidationErrorCompletionStream.js"), exports);
24
- var TestDriverModels;
25
- (function (TestDriverModels) {
26
- TestDriverModels["executionError"] = "execution-error";
27
- TestDriverModels["validationError"] = "validation-error";
28
- })(TestDriverModels || (exports.TestDriverModels = TestDriverModels = {}));
29
- class TestDriver {
30
- provider = "test";
31
- createTrainingPrompt() {
32
- throw new Error("Method not implemented.");
33
- }
34
- startTraining() {
35
- throw new Error("Method not implemented.");
36
- }
37
- cancelTraining() {
38
- throw new Error("Method not implemented.");
39
- }
40
- getTrainingJob(_jobId) {
41
- throw new Error("Method not implemented.");
42
- }
43
- async createPrompt(segments, _opts) {
44
- return segments;
45
- }
46
- execute(segments, options) {
47
- switch (options.model) {
48
- case TestDriverModels.executionError:
49
- return this.executeError(segments, options);
50
- case TestDriverModels.validationError:
51
- return this.executeValidationError(segments, options);
52
- default:
53
- (0, utils_js_1.throwError)("[test driver] Unknown model: " + options.model, segments);
54
- }
55
- }
56
- async stream(segments, options) {
57
- switch (options.model) {
58
- case TestDriverModels.executionError:
59
- return new TestErrorCompletionStream_js_1.TestErrorCompletionStream(segments, options);
60
- case TestDriverModels.validationError:
61
- return new TestValidationErrorCompletionStream_js_1.TestValidationErrorCompletionStream(segments, options);
62
- default:
63
- (0, utils_js_1.throwError)("[test driver] Unknown model: " + options.model, segments);
64
- }
65
- }
66
- async listTrainableModels() {
67
- return [];
68
- }
69
- async listModels() {
70
- return [
71
- {
72
- id: TestDriverModels.executionError,
73
- name: "Execution Error",
74
- type: core_1.ModelType.Test,
75
- provider: this.provider,
76
- status: core_1.AIModelStatus.Available,
77
- description: "Test execution errors",
78
- tags: [],
79
- },
80
- {
81
- id: TestDriverModels.validationError,
82
- name: "Validation Error",
83
- type: core_1.ModelType.Test,
84
- provider: this.provider,
85
- status: core_1.AIModelStatus.Available,
86
- description: "Test validation errors",
87
- tags: [],
88
- },
89
- ];
90
- }
91
- validateConnection() {
92
- throw new Error("Method not implemented.");
93
- }
94
- generateEmbeddings() {
95
- throw new Error("Method not implemented.");
96
- }
97
- // ============== execution error ==================
98
- async executeError(segments, _options) {
99
- await (0, utils_js_1.sleep)(1000);
100
- (0, utils_js_1.throwError)("Testing stream completion error.", segments);
101
- }
102
- // ============== validation error ==================
103
- async executeValidationError(segments, _options) {
104
- await (0, utils_js_1.sleep)(3000);
105
- return (0, utils_js_1.createValidationErrorCompletion)(segments);
106
- }
107
- }
108
- exports.TestDriver = TestDriver;
109
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test-driver/index.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.throwError = throwError;
4
- exports.createValidationErrorCompletion = createValidationErrorCompletion;
5
- exports.sleep = sleep;
6
- function throwError(message, prompt) {
7
- const err = new Error(message);
8
- err.prompt = prompt;
9
- throw err;
10
- }
11
- function createValidationErrorCompletion(segments) {
12
- return {
13
- result: [{ type: "text", value: "An invalid result" }],
14
- prompt: segments,
15
- execution_time: 3000,
16
- error: {
17
- code: "validation_error",
18
- message: "Result cannot be validated!",
19
- },
20
- token_usage: {
21
- result: 10,
22
- prompt: 10,
23
- total: 20,
24
- },
25
- };
26
- }
27
- function sleep(ms) {
28
- return new Promise(resolve => setTimeout(resolve, ms));
29
- }
30
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/test-driver/utils.ts"],"names":[],"mappings":";;AAEA,gCAIC;AAED,0EAeC;AAED,sBAEC;AAzBD,SAAgB,UAAU,CAAC,OAAe,EAAE,MAAuB;IAC/D,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,GAAW,CAAC,MAAM,GAAG,MAAM,CAAC;IAC7B,MAAM,GAAG,CAAC;AACd,CAAC;AAED,SAAgB,+BAA+B,CAAC,QAAyB;IACrE,OAAO;QACH,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;QACtD,MAAM,EAAE,QAAQ;QAChB,cAAc,EAAE,IAAI;QACpB,KAAK,EAAE;YACH,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,6BAA6B;SACzC;QACD,WAAW,EAAE;YACT,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,EAAE;SACZ;KACkC,CAAC;AAC5C,CAAC;AAED,SAAgB,KAAK,CAAC,EAAU;IAC5B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,116 +0,0 @@
1
- import { AbstractDriver } from "@llumiverse/core";
2
- export class FireflyDriver extends AbstractDriver {
3
- static PROVIDER = "firefly";
4
- provider = FireflyDriver.PROVIDER;
5
- endpoint;
6
- constructor(options) {
7
- super(options);
8
- if (!options.apiKey) {
9
- throw new Error("No API key provided for Firefly driver");
10
- }
11
- this.endpoint = options.endpoint || "https://firefly-api.adobe.io/v3";
12
- }
13
- async requestTextCompletion(_prompt, _options) {
14
- throw new Error("Text completion not supported by Firefly");
15
- }
16
- async requestTextCompletionStream(_prompt, _options) {
17
- throw new Error("Text completion streaming not supported by Firefly");
18
- }
19
- async requestImageGeneration(segments, options) {
20
- this.logger.debug(`[${this.provider}] Generating image with model ${options.model}`);
21
- const prompt = segments.map(s => s.content).join("\n\n");
22
- try {
23
- const payload = {
24
- prompt: prompt,
25
- };
26
- const response = await fetch(`${this.endpoint}/images/generate`, {
27
- method: 'POST',
28
- headers: {
29
- 'Content-Type': 'application/json',
30
- 'x-api-key': this.options.apiKey,
31
- },
32
- body: JSON.stringify(payload)
33
- });
34
- if (!response.ok) {
35
- const error = await response.json();
36
- throw new Error(`Firefly API error: ${error.message || response.statusText}`);
37
- }
38
- const result = await response.json();
39
- if (result.promptHasDeniedWords || result.promptHasBlockedArtists) {
40
- return {
41
- result: [],
42
- error: {
43
- message: "Prompt contains denied words or blocked artists",
44
- code: "content_policy_violation"
45
- }
46
- };
47
- }
48
- return {
49
- result: result.outputs.map(output => ({
50
- type: "image",
51
- value: output.image.url
52
- }))
53
- };
54
- }
55
- catch (error) {
56
- this.logger.error({ error }, "[Firefly] Image generation failed");
57
- return {
58
- result: [],
59
- error: {
60
- message: error.message,
61
- code: error.code || 'GENERATION_FAILED'
62
- }
63
- };
64
- }
65
- }
66
- mapSize(size) {
67
- // Default to 1024x1024 if no size specified
68
- if (!size)
69
- return { width: 1024, height: 1024 };
70
- const [width, height] = size.split('x').map(Number);
71
- return { width, height };
72
- }
73
- async listModels(_params) {
74
- return [
75
- {
76
- id: "firefly-v3-text-to-image",
77
- name: "Firefly v3 Text to Image",
78
- provider: this.provider,
79
- description: "Adobe Firefly v3 text to image generation model",
80
- tags: ["image-generation"]
81
- },
82
- {
83
- id: "firefly-v3-image-to-image",
84
- name: "Firefly v3 Image to Image",
85
- provider: this.provider,
86
- description: "Adobe Firefly v3 image to image generation model",
87
- tags: ["image-generation"]
88
- },
89
- {
90
- id: "firefly-v3-inpainting",
91
- name: "Firefly v3 Inpainting",
92
- provider: this.provider,
93
- description: "Adobe Firefly v3 inpainting model",
94
- tags: ["image-generation"]
95
- }
96
- ];
97
- }
98
- async validateConnection() {
99
- try {
100
- const response = await fetch(`${this.endpoint}/auth/validate`, {
101
- headers: {
102
- 'x-api-key': this.options.apiKey
103
- }
104
- });
105
- return response.ok;
106
- }
107
- catch (error) {
108
- this.logger.error({ error }, "[Firefly] Connection validation failed");
109
- return false;
110
- }
111
- }
112
- async generateEmbeddings(_options) {
113
- throw new Error("Embeddings not supported by Firefly");
114
- }
115
- }
116
- //# sourceMappingURL=firefly.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"firefly.js","sourceRoot":"","sources":["../../../../src/adobe/firefly.ts"],"names":[],"mappings":"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"}
@@ -1,382 +0,0 @@
1
- import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
2
- import { AbstractDriver, getModelCapabilities, modelModalitiesToArray, Providers } from "@llumiverse/core";
3
- import { AIProjectClient } from '@azure/ai-projects';
4
- import { isUnexpected } from "@azure-rest/ai-inference";
5
- import { AzureOpenAIDriver } from "../openai/azure_openai.js";
6
- import { createSseStream } from "@azure/core-sse";
7
- import { formatOpenAILikeMultimodalPrompt } from "../openai/openai_format.js";
8
- export class AzureFoundryDriver extends AbstractDriver {
9
- service;
10
- provider = Providers.azure_foundry;
11
- OPENAI_API_VERSION = "2025-01-01-preview";
12
- INFERENCE_API_VERSION = "2024-05-01-preview";
13
- constructor(opts) {
14
- super(opts);
15
- this.formatPrompt = formatOpenAILikeMultimodalPrompt;
16
- if (!opts.endpoint) {
17
- throw new Error("Azure AI Foundry endpoint is required");
18
- }
19
- try {
20
- if (!opts.azureADTokenProvider) {
21
- // Using Microsoft Entra ID (Azure AD) for authentication
22
- opts.azureADTokenProvider = new DefaultAzureCredential();
23
- }
24
- }
25
- catch (error) {
26
- this.logger.error({ error }, "Failed to initialize Azure AD token provider:");
27
- throw new Error("Failed to initialize Azure AD token provider");
28
- }
29
- // Initialize AI Projects client which provides access to inference operations
30
- this.service = new AIProjectClient(opts.endpoint, opts.azureADTokenProvider);
31
- if (opts.apiVersion) {
32
- this.OPENAI_API_VERSION = opts.apiVersion;
33
- this.INFERENCE_API_VERSION = opts.apiVersion;
34
- this.logger.info(`[Azure Foundry] Overriding default API version, using API version: ${opts.apiVersion}`);
35
- }
36
- }
37
- /**
38
- * Get default authentication for Azure AI Foundry API
39
- */
40
- getDefaultAIFoundryAuth() {
41
- const scope = "https://ai.azure.com/.default";
42
- const azureADTokenProvider = getBearerTokenProvider(new DefaultAzureCredential(), scope);
43
- return azureADTokenProvider;
44
- }
45
- async isOpenAIDeployment(model) {
46
- const { deploymentName } = parseAzureFoundryModelId(model);
47
- let deployment = undefined;
48
- // First, verify the deployment exists
49
- try {
50
- deployment = await this.service.deployments.get(deploymentName);
51
- this.logger.debug(`[Azure Foundry] Deployment ${deploymentName} found`);
52
- }
53
- catch (deploymentError) {
54
- this.logger.error({ deploymentError }, `[Azure Foundry] Deployment ${deploymentName} not found:`);
55
- }
56
- return deployment.modelPublisher == "OpenAI";
57
- }
58
- canStream(_options) {
59
- return Promise.resolve(true);
60
- }
61
- async requestTextCompletion(prompt, options) {
62
- const { deploymentName } = parseAzureFoundryModelId(options.model);
63
- const model_options = options.model_options;
64
- const isOpenAI = await this.isOpenAIDeployment(options.model);
65
- let response;
66
- if (isOpenAI) {
67
- // Use the Azure OpenAI client for OpenAI models
68
- const azureOpenAI = await this.service.inference.azureOpenAI({ apiVersion: this.OPENAI_API_VERSION });
69
- const subDriver = new AzureOpenAIDriver(azureOpenAI);
70
- // Use deployment name for API calls
71
- const modifiedOptions = { ...options, model: deploymentName };
72
- const response = await subDriver.requestTextCompletion(prompt, modifiedOptions);
73
- return response;
74
- }
75
- else {
76
- // Use the chat completions client from the inference operations
77
- const chatClient = this.service.inference.chatCompletions({ apiVersion: this.INFERENCE_API_VERSION });
78
- response = await chatClient.post({
79
- body: {
80
- messages: prompt,
81
- max_tokens: model_options?.max_tokens,
82
- model: deploymentName,
83
- stream: true,
84
- temperature: model_options?.temperature,
85
- top_p: model_options?.top_p,
86
- frequency_penalty: model_options?.frequency_penalty,
87
- presence_penalty: model_options?.presence_penalty,
88
- stop: model_options?.stop_sequence,
89
- }
90
- });
91
- if (response.status !== "200") {
92
- this.logger.error({ response }, `[Azure Foundry] Chat completion request failed:`);
93
- throw new Error(`Chat completion request failed with status ${response.status}: ${response.body}`);
94
- }
95
- return this.extractDataFromResponse(response.body);
96
- }
97
- }
98
- async requestTextCompletionStream(prompt, options) {
99
- const { deploymentName } = parseAzureFoundryModelId(options.model);
100
- const model_options = options.model_options;
101
- const isOpenAI = await this.isOpenAIDeployment(options.model);
102
- if (isOpenAI) {
103
- const azureOpenAI = await this.service.inference.azureOpenAI({ apiVersion: this.OPENAI_API_VERSION });
104
- const subDriver = new AzureOpenAIDriver(azureOpenAI);
105
- const modifiedOptions = { ...options, model: deploymentName };
106
- const stream = await subDriver.requestTextCompletionStream(prompt, modifiedOptions);
107
- return stream;
108
- }
109
- else {
110
- const chatClient = this.service.inference.chatCompletions({ apiVersion: this.INFERENCE_API_VERSION });
111
- const response = await chatClient.post({
112
- body: {
113
- messages: prompt,
114
- max_tokens: model_options?.max_tokens,
115
- model: deploymentName,
116
- stream: true,
117
- temperature: model_options?.temperature,
118
- top_p: model_options?.top_p,
119
- frequency_penalty: model_options?.frequency_penalty,
120
- presence_penalty: model_options?.presence_penalty,
121
- stop: model_options?.stop_sequence,
122
- }
123
- }).asNodeStream();
124
- // We type assert from NodeJS.ReadableStream to NodeJSReadableStream
125
- // The Azure Examples, expect a .destroy() method on the stream
126
- const stream = response.body;
127
- if (!stream) {
128
- throw new Error("The response stream is undefined");
129
- }
130
- if (response.status !== "200") {
131
- stream.destroy();
132
- throw new Error(`Failed to get chat completions, http operation failed with ${response.status} code`);
133
- }
134
- const sseStream = createSseStream(stream);
135
- return this.processStreamResponse(sseStream);
136
- }
137
- }
138
- async *processStreamResponse(sseStream) {
139
- try {
140
- for await (const event of sseStream) {
141
- if (event.data === "[DONE]") {
142
- break;
143
- }
144
- try {
145
- const data = JSON.parse(event.data);
146
- if (!data) {
147
- this.logger.warn(`[Azure Foundry] Received empty data in streaming response`);
148
- continue;
149
- }
150
- const choice = data.choices?.[0];
151
- if (!choice) {
152
- continue;
153
- }
154
- const chunk = {
155
- result: choice.delta?.content || "",
156
- finish_reason: this.convertFinishReason(choice.finish_reason),
157
- token_usage: {
158
- prompt: data.usage?.prompt_tokens,
159
- result: data.usage?.completion_tokens,
160
- total: data.usage?.total_tokens,
161
- },
162
- };
163
- yield chunk;
164
- }
165
- catch (parseError) {
166
- this.logger.warn({ parseError }, `[Azure Foundry] Failed to parse streaming response:`);
167
- continue;
168
- }
169
- }
170
- }
171
- catch (error) {
172
- this.logger.error({ error }, `[Azure Foundry] Streaming error:`);
173
- throw error;
174
- }
175
- }
176
- extractDataFromResponse(result) {
177
- const tokenInfo = {
178
- prompt: result.usage?.prompt_tokens,
179
- result: result.usage?.completion_tokens,
180
- total: result.usage?.total_tokens,
181
- };
182
- const choice = result.choices?.[0];
183
- if (!choice) {
184
- this.logger.error({ result }, "[Azure Foundry] No choices in response");
185
- throw new Error("No choices in response");
186
- }
187
- const data = choice.message?.content;
188
- const toolCalls = choice.message?.tool_calls;
189
- if (!data && !toolCalls) {
190
- this.logger.error({ result }, "[Azure Foundry] Response is not valid");
191
- throw new Error("Response is not valid: no content or tool calls");
192
- }
193
- const completion = {
194
- result: data ? [{ type: "text", value: data }] : [],
195
- token_usage: tokenInfo,
196
- finish_reason: this.convertFinishReason(choice.finish_reason),
197
- };
198
- if (toolCalls && toolCalls.length > 0) {
199
- completion.tool_use = toolCalls.map((call) => ({
200
- id: call.id,
201
- tool_name: call.function?.name,
202
- tool_input: call.function?.arguments ? JSON.parse(call.function.arguments) : {}
203
- }));
204
- }
205
- return completion;
206
- }
207
- convertFinishReason(reason) {
208
- if (!reason)
209
- return undefined;
210
- // Map Azure AI finish reasons to standard format
211
- switch (reason) {
212
- case 'stop': return 'stop';
213
- case 'length': return 'length';
214
- case 'tool_calls': return 'tool_use';
215
- default: return reason;
216
- }
217
- }
218
- async validateConnection() {
219
- try {
220
- // Test the AI Projects client by listing deployments
221
- const deploymentsIterable = this.service.deployments.list();
222
- let hasDeployments = false;
223
- for await (const deployment of deploymentsIterable) {
224
- hasDeployments = true;
225
- this.logger.debug(`[Azure Foundry] Found deployment: ${deployment.name} (${deployment.type})`);
226
- break; // Just check if we can get at least one deployment
227
- }
228
- if (!hasDeployments) {
229
- this.logger.warn("[Azure Foundry] No deployments found in the project");
230
- }
231
- return true;
232
- }
233
- catch (error) {
234
- this.logger.error({ error }, "Azure Foundry connection validation failed:");
235
- return false;
236
- }
237
- }
238
- async generateEmbeddings(options) {
239
- if (!options.model) {
240
- throw new Error("Default embedding model selection not supported for Azure Foundry. Please specify a model.");
241
- }
242
- if (options.text) {
243
- return this.generateTextEmbeddings(options);
244
- }
245
- else if (options.image) {
246
- return this.generateImageEmbeddings(options);
247
- }
248
- else {
249
- throw new Error("No text or images provided for embeddings");
250
- }
251
- }
252
- async generateTextEmbeddings(options) {
253
- if (!options.text) {
254
- throw new Error("No text provided for text embeddings");
255
- }
256
- const { deploymentName } = parseAzureFoundryModelId(options.model || "");
257
- let response;
258
- try {
259
- // Use the embeddings client from the inference operations
260
- const embeddingsClient = this.service.inference.embeddings({ apiVersion: this.INFERENCE_API_VERSION });
261
- response = await embeddingsClient.post({
262
- body: {
263
- input: Array.isArray(options.text) ? options.text : [options.text],
264
- model: deploymentName
265
- }
266
- });
267
- }
268
- catch (error) {
269
- this.logger.error({ error }, "Azure Foundry text embeddings error:");
270
- throw error;
271
- }
272
- if (isUnexpected(response)) {
273
- throw new Error(`Text embeddings request failed: ${response.status} ${response.body?.error?.message || 'Unknown error'}`);
274
- }
275
- const embeddings = response.body.data?.[0]?.embedding;
276
- if (!embeddings || !Array.isArray(embeddings) || embeddings.length === 0) {
277
- throw new Error("No valid embedding array found in response");
278
- }
279
- return {
280
- values: embeddings,
281
- model: options.model ?? ""
282
- };
283
- }
284
- async generateImageEmbeddings(options) {
285
- if (!options.image) {
286
- throw new Error("No images provided for image embeddings");
287
- }
288
- const { deploymentName } = parseAzureFoundryModelId(options.model || "");
289
- let response;
290
- try {
291
- // Use the embeddings client from the inference operations
292
- const embeddingsClient = this.service.inference.embeddings({ apiVersion: this.INFERENCE_API_VERSION });
293
- response = await embeddingsClient.post({
294
- body: {
295
- input: Array.isArray(options.image) ? options.image : [options.image],
296
- model: deploymentName
297
- }
298
- });
299
- }
300
- catch (error) {
301
- this.logger.error({ error }, "Azure Foundry image embeddings error:");
302
- throw error;
303
- }
304
- if (isUnexpected(response)) {
305
- throw new Error(`Image embeddings request failed: ${response.status} ${response.body?.error?.message || 'Unknown error'}`);
306
- }
307
- const embeddings = response.body.data?.[0]?.embedding;
308
- if (!embeddings || !Array.isArray(embeddings) || embeddings.length === 0) {
309
- throw new Error("No valid embedding array found in response");
310
- }
311
- return {
312
- values: embeddings,
313
- model: options.model ?? ""
314
- };
315
- }
316
- async listModels() {
317
- const filter = (m) => {
318
- // Only include models that support chat completions
319
- return !!m.capabilities.chat_completion;
320
- };
321
- return this._listModels(filter);
322
- }
323
- async _listModels(filter) {
324
- let deploymentsIterable;
325
- try {
326
- // List all deployments in the Azure AI Foundry project
327
- deploymentsIterable = this.service.deployments.list();
328
- }
329
- catch (error) {
330
- this.logger.error({ error }, "Failed to list deployments:");
331
- throw new Error("Failed to list deployments in Azure AI Foundry project");
332
- }
333
- const deployments = [];
334
- for await (const page of deploymentsIterable.byPage()) {
335
- for (const deployment of page) {
336
- deployments.push(deployment);
337
- }
338
- }
339
- let modelDeployments = deployments.filter((d) => {
340
- return d.type === "ModelDeployment";
341
- });
342
- if (filter) {
343
- modelDeployments = modelDeployments.filter(filter);
344
- }
345
- const aiModels = modelDeployments.map((model) => {
346
- // Create composite ID: deployment_name::base_model
347
- const compositeId = `${model.name}::${model.modelName}`;
348
- const modelCapability = getModelCapabilities(model.modelName, Providers.azure_foundry);
349
- return {
350
- id: compositeId,
351
- name: model.name,
352
- description: `${model.modelName} - ${model.modelVersion}`,
353
- version: model.modelVersion,
354
- provider: this.provider,
355
- owner: model.modelPublisher,
356
- input_modalities: modelModalitiesToArray(modelCapability.input),
357
- output_modalities: modelModalitiesToArray(modelCapability.output),
358
- tool_support: modelCapability.tool_support,
359
- };
360
- }).sort((modelA, modelB) => modelA.id.localeCompare(modelB.id));
361
- return aiModels;
362
- }
363
- }
364
- // Helper functions to parse the composite ID
365
- export function parseAzureFoundryModelId(compositeId) {
366
- const parts = compositeId.split('::');
367
- if (parts.length === 2) {
368
- return {
369
- deploymentName: parts[0],
370
- baseModel: parts[1]
371
- };
372
- }
373
- // Backwards compatibility: if no delimiter found, treat as deployment name
374
- return {
375
- deploymentName: compositeId,
376
- baseModel: compositeId
377
- };
378
- }
379
- export function isCompositeModelId(modelId) {
380
- return modelId.includes('::');
381
- }
382
- //# sourceMappingURL=azure_foundry.js.map