@llumiverse/drivers 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/lib/cjs/bedrock/index.js +338 -0
  2. package/lib/cjs/bedrock/index.js.map +1 -0
  3. package/lib/cjs/bedrock/s3.js +61 -0
  4. package/lib/cjs/bedrock/s3.js.map +1 -0
  5. package/lib/cjs/huggingface_ie.js +181 -0
  6. package/lib/cjs/huggingface_ie.js.map +1 -0
  7. package/lib/cjs/index.js +24 -0
  8. package/lib/cjs/index.js.map +1 -0
  9. package/lib/cjs/openai.js +205 -0
  10. package/lib/cjs/openai.js.map +1 -0
  11. package/lib/cjs/package.json +3 -0
  12. package/lib/cjs/replicate.js +290 -0
  13. package/lib/cjs/replicate.js.map +1 -0
  14. package/lib/cjs/test/TestErrorCompletionStream.js +20 -0
  15. package/lib/cjs/test/TestErrorCompletionStream.js.map +1 -0
  16. package/lib/cjs/test/TestValidationErrorCompletionStream.js +24 -0
  17. package/lib/cjs/test/TestValidationErrorCompletionStream.js.map +1 -0
  18. package/lib/cjs/test/index.js +109 -0
  19. package/lib/cjs/test/index.js.map +1 -0
  20. package/lib/cjs/test/utils.js +31 -0
  21. package/lib/cjs/test/utils.js.map +1 -0
  22. package/lib/cjs/togetherai/index.js +92 -0
  23. package/lib/cjs/togetherai/index.js.map +1 -0
  24. package/lib/cjs/togetherai/interfaces.js +3 -0
  25. package/lib/cjs/togetherai/interfaces.js.map +1 -0
  26. package/lib/cjs/vertexai/debug.js +13 -0
  27. package/lib/cjs/vertexai/debug.js.map +1 -0
  28. package/lib/cjs/vertexai/index.js +80 -0
  29. package/lib/cjs/vertexai/index.js.map +1 -0
  30. package/lib/cjs/vertexai/models/codey-chat.js +65 -0
  31. package/lib/cjs/vertexai/models/codey-chat.js.map +1 -0
  32. package/lib/cjs/vertexai/models/codey-text.js +35 -0
  33. package/lib/cjs/vertexai/models/codey-text.js.map +1 -0
  34. package/lib/cjs/vertexai/models/gemini.js +140 -0
  35. package/lib/cjs/vertexai/models/gemini.js.map +1 -0
  36. package/lib/cjs/vertexai/models/palm-model-base.js +65 -0
  37. package/lib/cjs/vertexai/models/palm-model-base.js.map +1 -0
  38. package/lib/cjs/vertexai/models/palm2-chat.js +65 -0
  39. package/lib/cjs/vertexai/models/palm2-chat.js.map +1 -0
  40. package/lib/cjs/vertexai/models/palm2-text.js +35 -0
  41. package/lib/cjs/vertexai/models/palm2-text.js.map +1 -0
  42. package/lib/cjs/vertexai/models.js +93 -0
  43. package/lib/cjs/vertexai/models.js.map +1 -0
  44. package/lib/cjs/vertexai/utils/prompts.js +52 -0
  45. package/lib/cjs/vertexai/utils/prompts.js.map +1 -0
  46. package/lib/cjs/vertexai/utils/tensor.js +87 -0
  47. package/lib/cjs/vertexai/utils/tensor.js.map +1 -0
  48. package/lib/esm/bedrock/index.js +331 -0
  49. package/lib/esm/bedrock/index.js.map +1 -0
  50. package/lib/esm/bedrock/s3.js +53 -0
  51. package/lib/esm/bedrock/s3.js.map +1 -0
  52. package/lib/esm/huggingface_ie.js +177 -0
  53. package/lib/esm/huggingface_ie.js.map +1 -0
  54. package/lib/esm/index.js +8 -0
  55. package/lib/esm/index.js.map +1 -0
  56. package/lib/esm/openai.js +198 -0
  57. package/lib/esm/openai.js.map +1 -0
  58. package/lib/esm/replicate.js +283 -0
  59. package/lib/esm/replicate.js.map +1 -0
  60. package/lib/esm/test/TestErrorCompletionStream.js +16 -0
  61. package/lib/esm/test/TestErrorCompletionStream.js.map +1 -0
  62. package/lib/esm/test/TestValidationErrorCompletionStream.js +20 -0
  63. package/lib/esm/test/TestValidationErrorCompletionStream.js.map +1 -0
  64. package/lib/esm/test/index.js +91 -0
  65. package/lib/esm/test/index.js.map +1 -0
  66. package/lib/esm/test/utils.js +25 -0
  67. package/lib/esm/test/utils.js.map +1 -0
  68. package/lib/esm/togetherai/index.js +88 -0
  69. package/lib/esm/togetherai/index.js.map +1 -0
  70. package/lib/esm/togetherai/interfaces.js +2 -0
  71. package/lib/esm/togetherai/interfaces.js.map +1 -0
  72. package/lib/esm/vertexai/debug.js +6 -0
  73. package/lib/esm/vertexai/debug.js.map +1 -0
  74. package/lib/esm/vertexai/index.js +76 -0
  75. package/lib/esm/vertexai/index.js.map +1 -0
  76. package/lib/esm/vertexai/models/codey-chat.js +61 -0
  77. package/lib/esm/vertexai/models/codey-chat.js.map +1 -0
  78. package/lib/esm/vertexai/models/codey-text.js +31 -0
  79. package/lib/esm/vertexai/models/codey-text.js.map +1 -0
  80. package/lib/esm/vertexai/models/gemini.js +136 -0
  81. package/lib/esm/vertexai/models/gemini.js.map +1 -0
  82. package/lib/esm/vertexai/models/palm-model-base.js +61 -0
  83. package/lib/esm/vertexai/models/palm-model-base.js.map +1 -0
  84. package/lib/esm/vertexai/models/palm2-chat.js +61 -0
  85. package/lib/esm/vertexai/models/palm2-chat.js.map +1 -0
  86. package/lib/esm/vertexai/models/palm2-text.js +31 -0
  87. package/lib/esm/vertexai/models/palm2-text.js.map +1 -0
  88. package/lib/esm/vertexai/models.js +87 -0
  89. package/lib/esm/vertexai/models.js.map +1 -0
  90. package/lib/esm/vertexai/utils/prompts.js +47 -0
  91. package/lib/esm/vertexai/utils/prompts.js.map +1 -0
  92. package/lib/esm/vertexai/utils/tensor.js +82 -0
  93. package/lib/esm/vertexai/utils/tensor.js.map +1 -0
  94. package/lib/types/bedrock/index.d.ts +88 -0
  95. package/lib/types/bedrock/index.d.ts.map +1 -0
  96. package/lib/types/bedrock/s3.d.ts +20 -0
  97. package/lib/types/bedrock/s3.d.ts.map +1 -0
  98. package/lib/types/huggingface_ie.d.ts +36 -0
  99. package/lib/types/huggingface_ie.d.ts.map +1 -0
  100. package/lib/types/index.d.ts +8 -0
  101. package/lib/types/index.d.ts.map +1 -0
  102. package/lib/types/openai.d.ts +36 -0
  103. package/lib/types/openai.d.ts.map +1 -0
  104. package/lib/types/replicate.d.ts +52 -0
  105. package/lib/types/replicate.d.ts.map +1 -0
  106. package/lib/types/test/TestErrorCompletionStream.d.ts +9 -0
  107. package/lib/types/test/TestErrorCompletionStream.d.ts.map +1 -0
  108. package/lib/types/test/TestValidationErrorCompletionStream.d.ts +9 -0
  109. package/lib/types/test/TestValidationErrorCompletionStream.d.ts.map +1 -0
  110. package/lib/types/test/index.d.ts +27 -0
  111. package/lib/types/test/index.d.ts.map +1 -0
  112. package/lib/types/test/utils.d.ts +5 -0
  113. package/lib/types/test/utils.d.ts.map +1 -0
  114. package/lib/types/togetherai/index.d.ts +23 -0
  115. package/lib/types/togetherai/index.d.ts.map +1 -0
  116. package/lib/types/togetherai/interfaces.d.ts +81 -0
  117. package/lib/types/togetherai/interfaces.d.ts.map +1 -0
  118. package/lib/types/vertexai/debug.d.ts +2 -0
  119. package/lib/types/vertexai/debug.d.ts.map +1 -0
  120. package/lib/types/vertexai/index.d.ts +26 -0
  121. package/lib/types/vertexai/index.d.ts.map +1 -0
  122. package/lib/types/vertexai/models/codey-chat.d.ts +51 -0
  123. package/lib/types/vertexai/models/codey-chat.d.ts.map +1 -0
  124. package/lib/types/vertexai/models/codey-text.d.ts +39 -0
  125. package/lib/types/vertexai/models/codey-text.d.ts.map +1 -0
  126. package/lib/types/vertexai/models/gemini.d.ts +11 -0
  127. package/lib/types/vertexai/models/gemini.d.ts.map +1 -0
  128. package/lib/types/vertexai/models/palm-model-base.d.ts +47 -0
  129. package/lib/types/vertexai/models/palm-model-base.d.ts.map +1 -0
  130. package/lib/types/vertexai/models/palm2-chat.d.ts +61 -0
  131. package/lib/types/vertexai/models/palm2-chat.d.ts.map +1 -0
  132. package/lib/types/vertexai/models/palm2-text.d.ts +39 -0
  133. package/lib/types/vertexai/models/palm2-text.d.ts.map +1 -0
  134. package/lib/types/vertexai/models.d.ts +14 -0
  135. package/lib/types/vertexai/models.d.ts.map +1 -0
  136. package/lib/types/vertexai/utils/prompts.d.ts +20 -0
  137. package/lib/types/vertexai/utils/prompts.d.ts.map +1 -0
  138. package/lib/types/vertexai/utils/tensor.d.ts +6 -0
  139. package/lib/types/vertexai/utils/tensor.d.ts.map +1 -0
  140. package/package.json +72 -0
  141. package/src/bedrock/index.ts +456 -0
  142. package/src/bedrock/s3.ts +62 -0
  143. package/src/huggingface_ie.ts +269 -0
  144. package/src/index.ts +7 -0
  145. package/src/openai.ts +254 -0
  146. package/src/replicate.ts +333 -0
  147. package/src/test/TestErrorCompletionStream.ts +17 -0
  148. package/src/test/TestValidationErrorCompletionStream.ts +21 -0
  149. package/src/test/index.ts +102 -0
  150. package/src/test/utils.ts +28 -0
  151. package/src/togetherai/index.ts +105 -0
  152. package/src/togetherai/interfaces.ts +88 -0
  153. package/src/vertexai/README.md +257 -0
  154. package/src/vertexai/debug.ts +6 -0
  155. package/src/vertexai/index.ts +99 -0
  156. package/src/vertexai/models/codey-chat.ts +115 -0
  157. package/src/vertexai/models/codey-text.ts +69 -0
  158. package/src/vertexai/models/gemini.ts +152 -0
  159. package/src/vertexai/models/palm-model-base.ts +122 -0
  160. package/src/vertexai/models/palm2-chat.ts +119 -0
  161. package/src/vertexai/models/palm2-text.ts +69 -0
  162. package/src/vertexai/models.ts +104 -0
  163. package/src/vertexai/utils/prompts.ts +66 -0
  164. package/src/vertexai/utils/tensor.ts +82 -0
@@ -0,0 +1,331 @@
1
+ import { Bedrock, CreateModelCustomizationJobCommand, GetModelCustomizationJobCommand, ModelCustomizationJobStatus, StopModelCustomizationJobCommand } from "@aws-sdk/client-bedrock";
2
+ import { BedrockRuntime } from "@aws-sdk/client-bedrock-runtime";
3
+ import { S3Client } from "@aws-sdk/client-s3";
4
+ import { AbstractDriver, BuiltinProviders, PromptFormats, TrainingJobStatus } from "@llumiverse/core";
5
+ import { transformAsyncIterator } from "@llumiverse/core/async";
6
+ import mnemonist from "mnemonist";
7
+ import { forceUploadFile } from "./s3.js";
8
+ const { LRUCache } = mnemonist;
9
+ const supportStreamingCache = new LRUCache(4096);
10
+ export class BedrockDriver extends AbstractDriver {
11
+ provider = BuiltinProviders.bedrock;
12
+ _executor;
13
+ _service;
14
+ defaultFormat = PromptFormats.genericTextLLM;
15
+ constructor(options) {
16
+ super(options);
17
+ if (!options.region) {
18
+ throw new Error("No region found. Set the region in the environment's endpoint URL.");
19
+ }
20
+ }
21
+ getExecutor() {
22
+ if (!this._executor) {
23
+ this._executor = new BedrockRuntime({
24
+ region: this.options.region,
25
+ credentials: this.options.credentials,
26
+ });
27
+ }
28
+ return this._executor;
29
+ }
30
+ getService() {
31
+ if (!this._service) {
32
+ this._service = new Bedrock({
33
+ region: this.options.region,
34
+ credentials: this.options.credentials,
35
+ });
36
+ }
37
+ return this._service;
38
+ }
39
+ extractDataFromResponse(prompt, response) {
40
+ const decoder = new TextDecoder();
41
+ const body = decoder.decode(response.body);
42
+ const result = JSON.parse(body);
43
+ const getText = () => {
44
+ if (result.completion) {
45
+ return result.completion;
46
+ }
47
+ else if (result.generation) {
48
+ return result.generation;
49
+ }
50
+ else if (result.generations) {
51
+ return result.generations[0].text;
52
+ }
53
+ else if (result.completions) {
54
+ //A21
55
+ return result.completions[0].data?.text;
56
+ }
57
+ else {
58
+ result.toString();
59
+ }
60
+ };
61
+ const text = getText();
62
+ return {
63
+ result: text,
64
+ token_usage: {
65
+ result: text?.length,
66
+ prompt: prompt.length,
67
+ total: text?.length + prompt.length,
68
+ }
69
+ };
70
+ }
71
+ async requestCompletion(prompt, options) {
72
+ const payload = this.preparePayload(prompt, options);
73
+ const executor = this.getExecutor();
74
+ const res = await executor.invokeModel({
75
+ modelId: options.model,
76
+ contentType: "application/json",
77
+ body: JSON.stringify(payload),
78
+ });
79
+ return this.extractDataFromResponse(prompt, res);
80
+ }
81
+ async canStream(options) {
82
+ let canStream = supportStreamingCache.get(options.model);
83
+ if (canStream == null) {
84
+ const response = await this.getService().getFoundationModel({
85
+ modelIdentifier: options.model
86
+ });
87
+ canStream = response.modelDetails?.responseStreamingSupported ?? false;
88
+ supportStreamingCache.set(options.model, canStream);
89
+ }
90
+ return canStream;
91
+ }
92
+ async requestCompletionStream(prompt, options) {
93
+ const payload = this.preparePayload(prompt, options);
94
+ const executor = this.getExecutor();
95
+ return executor.invokeModelWithResponseStream({
96
+ modelId: options.model,
97
+ contentType: "application/json",
98
+ body: JSON.stringify(payload),
99
+ }).then((res) => {
100
+ if (!res.body) {
101
+ throw new Error("Body not found");
102
+ }
103
+ const decoder = new TextDecoder();
104
+ return transformAsyncIterator(res.body, (stream) => {
105
+ const segment = JSON.parse(decoder.decode(stream.chunk?.bytes));
106
+ if (segment.completion) {
107
+ return segment.completion;
108
+ }
109
+ else if (segment.completions) {
110
+ return segment.completions[0].data?.text;
111
+ }
112
+ else if (segment.generation) {
113
+ return segment.generation;
114
+ }
115
+ else if (segment.generations) {
116
+ return segment.generations[0].text;
117
+ }
118
+ else {
119
+ segment.toString();
120
+ }
121
+ });
122
+ }).catch((err) => {
123
+ this.logger.error("[Bedrock] Failed to stream", err);
124
+ throw err;
125
+ });
126
+ }
127
+ preparePayload(prompt, options) {
128
+ //split arn on / should give provider
129
+ //TODO: check if works with custom models
130
+ //const provider = options.model.split("/")[0];
131
+ const contains = (str, substr) => str.indexOf(substr) !== -1;
132
+ if (contains(options.model, "meta")) {
133
+ return {
134
+ prompt,
135
+ temperature: options.temperature,
136
+ max_gen_len: options.max_tokens,
137
+ };
138
+ }
139
+ else if (contains(options.model, "anthropic")) {
140
+ return {
141
+ prompt: prompt,
142
+ temperature: options.temperature,
143
+ max_tokens_to_sample: options.max_tokens ?? 256,
144
+ };
145
+ }
146
+ else if (contains(options.model, "ai21")) {
147
+ return {
148
+ prompt: prompt,
149
+ temperature: options.temperature,
150
+ maxTokens: options.max_tokens,
151
+ };
152
+ }
153
+ else if (contains(options.model, "cohere")) {
154
+ return {
155
+ prompt: prompt,
156
+ temperature: options.temperature,
157
+ max_tokens: options.max_tokens,
158
+ p: 0.9,
159
+ };
160
+ }
161
+ else if (contains(options.model, "amazon")) {
162
+ return {
163
+ inputText: prompt,
164
+ textGenerationConfig: {
165
+ temperature: options.temperature,
166
+ topP: 0.9,
167
+ maxTokenCount: options.max_tokens,
168
+ stopSequences: ["\n"],
169
+ },
170
+ };
171
+ }
172
+ else {
173
+ throw new Error("Cannot prepare payload for unknown provider: " + options.model);
174
+ }
175
+ }
176
+ async startTraining(dataset, options) {
177
+ //convert options.params to Record<string, string>
178
+ const params = {};
179
+ for (const [key, value] of Object.entries(options.params || {})) {
180
+ params[key] = String(value);
181
+ }
182
+ if (!this.options.training_bucket) {
183
+ throw new Error("Training cannot nbe used since the 'training_bucket' property was not specified in driver options");
184
+ }
185
+ const s3 = new S3Client({ region: this.options.region, credentials: this.options.credentials });
186
+ const upload = await forceUploadFile(s3, dataset.getStream(), this.options.training_bucket, dataset.name);
187
+ const service = this.getService();
188
+ const response = await service.send(new CreateModelCustomizationJobCommand({
189
+ jobName: options.name + "-job",
190
+ customModelName: options.name,
191
+ roleArn: this.options.training_role_arn || undefined,
192
+ baseModelIdentifier: options.model,
193
+ clientRequestToken: "llumiverse-" + Date.now(),
194
+ trainingDataConfig: {
195
+ s3Uri: `s3://${upload.Bucket}/${upload.Key}`,
196
+ },
197
+ outputDataConfig: undefined,
198
+ hyperParameters: params,
199
+ //TODO not supported?
200
+ //customizationType: "FINE_TUNING",
201
+ }));
202
+ const job = await service.send(new GetModelCustomizationJobCommand({
203
+ jobIdentifier: response.jobArn
204
+ }));
205
+ return jobInfo(job, response.jobArn);
206
+ }
207
+ async cancelTraining(jobId) {
208
+ const service = this.getService();
209
+ await service.send(new StopModelCustomizationJobCommand({
210
+ jobIdentifier: jobId
211
+ }));
212
+ const job = await service.send(new GetModelCustomizationJobCommand({
213
+ jobIdentifier: jobId
214
+ }));
215
+ return jobInfo(job, jobId);
216
+ }
217
+ async getTrainingJob(jobId) {
218
+ const service = this.getService();
219
+ const job = await service.send(new GetModelCustomizationJobCommand({
220
+ jobIdentifier: jobId
221
+ }));
222
+ return jobInfo(job, jobId);
223
+ }
224
+ // ===================== management API ==================
225
+ async validateConnection() {
226
+ const service = this.getService();
227
+ this.logger.debug("[Bedrock] validating connection", service.config.credentials.name);
228
+ //return true as if the client has been initialized, it means the connection is valid
229
+ return true;
230
+ }
231
+ async listTrainableModels() {
232
+ this.logger.debug("[Bedrock] listing trainable models");
233
+ return this._listModels(m => m.customizationsSupported ? m.customizationsSupported.includes("FINE_TUNING") : false);
234
+ }
235
+ async listModels(_params) {
236
+ this.logger.debug("[Bedrock] listing models");
237
+ // exclude trainable models since they are not executable
238
+ const filter = (m) => m.inferenceTypesSupported?.includes("ON_DEMAND") ?? false;
239
+ return this._listModels(filter);
240
+ }
241
+ async _listModels(foundationFilter) {
242
+ const service = this.getService();
243
+ const [foundationals, customs] = await Promise.all([
244
+ service.listFoundationModels({}),
245
+ service.listCustomModels({}),
246
+ ]);
247
+ if (!foundationals.modelSummaries) {
248
+ throw new Error("Foundation models not found");
249
+ }
250
+ let fmodels = foundationals.modelSummaries || [];
251
+ if (foundationFilter) {
252
+ fmodels = fmodels.filter(foundationFilter);
253
+ }
254
+ const aimodels = fmodels.map((m) => {
255
+ if (!m.modelId) {
256
+ throw new Error("modelId not found");
257
+ }
258
+ const model = {
259
+ id: m.modelArn ?? m.modelId,
260
+ name: `${m.providerName} ${m.modelName}`,
261
+ provider: this.provider,
262
+ description: `id: ${m.modelId}`,
263
+ owner: m.providerName,
264
+ canStream: m.responseStreamingSupported ?? false,
265
+ tags: m.outputModalities ?? [],
266
+ };
267
+ return model;
268
+ });
269
+ //add custom models
270
+ if (customs.modelSummaries) {
271
+ customs.modelSummaries.forEach((m) => {
272
+ if (!m.modelArn) {
273
+ throw new Error("Model ID not found");
274
+ }
275
+ const model = {
276
+ id: m.modelArn,
277
+ name: m.modelName ?? m.modelArn,
278
+ provider: this.provider,
279
+ description: `Custom model from ${m.baseModelName}`,
280
+ isCustom: true,
281
+ };
282
+ aimodels.push(model);
283
+ this.validateConnection;
284
+ });
285
+ }
286
+ return aimodels;
287
+ }
288
+ async generateEmbeddings(content, model = "amazon.titan-embed-text-v1") {
289
+ this.logger.info("[Bedrock] Generating embeddings with model " + model);
290
+ const executor = this.getExecutor();
291
+ const res = await executor.invokeModel({
292
+ modelId: model,
293
+ contentType: "text/plain",
294
+ body: content,
295
+ });
296
+ const decoder = new TextDecoder();
297
+ const body = decoder.decode(res.body);
298
+ const result = JSON.parse(body);
299
+ if (!result.embedding) {
300
+ throw new Error("Embeddings not found");
301
+ }
302
+ return result.embedding;
303
+ }
304
+ }
305
+ function jobInfo(job, jobId) {
306
+ const jobStatus = job.status;
307
+ let status = TrainingJobStatus.running;
308
+ let details;
309
+ if (jobStatus === ModelCustomizationJobStatus.COMPLETED) {
310
+ status = TrainingJobStatus.succeeded;
311
+ }
312
+ else if (jobStatus === ModelCustomizationJobStatus.FAILED) {
313
+ status = TrainingJobStatus.failed;
314
+ details = job.failureMessage || "error";
315
+ }
316
+ else if (jobStatus === ModelCustomizationJobStatus.STOPPED) {
317
+ status = TrainingJobStatus.cancelled;
318
+ }
319
+ else {
320
+ status = TrainingJobStatus.running;
321
+ details = jobStatus;
322
+ }
323
+ job.baseModelArn;
324
+ return {
325
+ id: jobId,
326
+ model: job.outputModelArn,
327
+ status,
328
+ details
329
+ };
330
+ }
331
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bedrock/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { CreateBucketCommand, HeadBucketCommand } from "@aws-sdk/client-s3";
2
+ import { Upload } from "@aws-sdk/lib-storage";
3
+ export async function doesBucketExist(s3, bucketName) {
4
+ try {
5
+ await s3.send(new HeadBucketCommand({ Bucket: bucketName }));
6
+ return true;
7
+ }
8
+ catch (err) {
9
+ if (err.name === 'NotFound') {
10
+ return false;
11
+ }
12
+ throw err;
13
+ }
14
+ }
15
+ export function createBucket(s3, bucketName) {
16
+ return s3.send(new CreateBucketCommand({
17
+ Bucket: bucketName
18
+ }));
19
+ }
20
+ export async function tryCreateBucket(s3, bucketName) {
21
+ const exists = await doesBucketExist(s3, bucketName);
22
+ if (!exists) {
23
+ return createBucket(s3, bucketName);
24
+ }
25
+ }
26
+ export async function uploadFile(s3, source, bucketName, file, onProgress) {
27
+ const upload = new Upload({
28
+ client: s3,
29
+ params: {
30
+ Bucket: bucketName,
31
+ Key: file,
32
+ Body: source,
33
+ }
34
+ });
35
+ onProgress && upload.on("httpUploadProgress", onProgress);
36
+ const result = await upload.done();
37
+ return result;
38
+ }
39
+ /**
40
+ * Create the bucket if not already exists and then upload the file.
41
+ * @param s3
42
+ * @param source
43
+ * @param bucketName
44
+ * @param file
45
+ * @param onProgress
46
+ * @returns
47
+ */
48
+ export async function forceUploadFile(s3, source, bucketName, file, onProgress) {
49
+ // make sure the bucket exists
50
+ await tryCreateBucket(s3, bucketName);
51
+ return uploadFile(s3, source, bucketName, file, onProgress);
52
+ }
53
+ //# sourceMappingURL=s3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3.js","sourceRoot":"","sources":["../../../src/bedrock/s3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAY,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAY,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGxD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAY,EAAE,UAAkB;IAClE,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,GAAG,CAAC;IACd,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAY,EAAE,UAAkB;IACzD,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC;QACnC,MAAM,EAAE,UAAU;KACrB,CAAC,CAAC,CAAC;AACR,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAY,EAAE,UAAkB;IAClE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;AACL,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAY,EAAE,MAAkC,EAAE,UAAkB,EAAE,IAAY,EAAE,UAAyC;IAE1J,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACtB,MAAM,EAAE,EAAE;QACV,MAAM,EAAE;YACJ,MAAM,EAAE,UAAU;YAClB,GAAG,EAAE,IAAI;YACT,IAAI,EAAE,MAAM;SACf;KACJ,CAAC,CAAC;IAEH,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;IAE1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAY,EAAE,MAAkC,EAAE,UAAkB,EAAE,IAAY,EAAE,UAAyC;IAC/J,8BAA8B;IAC9B,MAAM,eAAe,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACtC,OAAO,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,177 @@
1
+ import { AIModelStatus, AbstractDriver, BuiltinProviders, PromptFormats } from "@llumiverse/core";
2
+ import { transformAsyncIterator } from "@llumiverse/core/async";
3
+ import { HfInference } from "@huggingface/inference";
4
+ import { FetchClient } from "api-fetch-client";
5
+ export class HuggingFaceIEDriver extends AbstractDriver {
6
+ service;
7
+ provider = BuiltinProviders.huggingface_ie;
8
+ _executor;
9
+ defaultFormat = PromptFormats.genericTextLLM;
10
+ constructor(options) {
11
+ super(options);
12
+ if (!options.endpoint_url) {
13
+ throw new Error(`Endpoint URL is required for ${this.provider}`);
14
+ }
15
+ this.service = new FetchClient(this.options.endpoint_url);
16
+ this.service.headers["Authorization"] = `Bearer ${this.options.apiKey}`;
17
+ }
18
+ async getModelURLEndpoint(modelId) {
19
+ const res = (await this.service.get(`/${modelId}`));
20
+ return {
21
+ url: res.status.url,
22
+ status: getStatus(res),
23
+ };
24
+ }
25
+ async getExecutor(model) {
26
+ if (!this._executor) {
27
+ const endpoint = await this.getModelURLEndpoint(model);
28
+ if (!endpoint.url)
29
+ throw new Error(`Endpoint URL not found for model ${model}`);
30
+ if (endpoint.status !== AIModelStatus.Available)
31
+ throw new Error(`Endpoint ${model} is not running - current status: ${endpoint.status}`);
32
+ this._executor = new HfInference(this.options.apiKey).endpoint(endpoint.url);
33
+ }
34
+ return this._executor;
35
+ }
36
+ async requestCompletionStream(prompt, options) {
37
+ const executor = await this.getExecutor(options.model);
38
+ const req = executor.textGenerationStream({
39
+ inputs: prompt,
40
+ parameters: {
41
+ temperature: options.temperature,
42
+ max_new_tokens: options.max_tokens,
43
+ },
44
+ });
45
+ return transformAsyncIterator(req, (val) => {
46
+ //special like <s> are not part of the result
47
+ if (val.token.special)
48
+ return "";
49
+ return val.token.text;
50
+ });
51
+ }
52
+ async requestCompletion(prompt, options) {
53
+ const executor = await this.getExecutor(options.model);
54
+ const res = await executor.textGeneration({
55
+ inputs: prompt,
56
+ parameters: {
57
+ temperature: options.temperature,
58
+ max_new_tokens: options.max_tokens,
59
+ },
60
+ });
61
+ return {
62
+ result: res.generated_text,
63
+ token_usage: {
64
+ result: res.generated_text.length,
65
+ prompt: prompt.length,
66
+ total: res.generated_text.length + prompt.length,
67
+ },
68
+ };
69
+ }
70
+ // ============== management API ==============
71
+ // Not implemented
72
+ async listTrainableModels() {
73
+ return [];
74
+ }
75
+ async listModels() {
76
+ const res = await this.service.get("/");
77
+ const hfModels = res.items;
78
+ const models = hfModels.map((model) => ({
79
+ id: model.name,
80
+ name: `${model.name} [${model.model.repository}:${model.model.task}]`,
81
+ provider: this.provider,
82
+ tags: [model.model.task],
83
+ status: getStatus(model),
84
+ }));
85
+ return models;
86
+ }
87
+ async validateConnection() {
88
+ try {
89
+ await this.service.get("/models");
90
+ return true;
91
+ }
92
+ catch (error) {
93
+ return false;
94
+ }
95
+ }
96
+ async generateEmbeddings(content, model) {
97
+ this.logger?.debug(`[Huggingface] Generating embeddings for ${content} on ${model}`);
98
+ throw new Error("Method not implemented.");
99
+ }
100
+ }
101
+ //get status from HF status
102
+ function getStatus(hfModel) {
103
+ //[ pending, initializing, updating, updateFailed, running, paused, failed, scaledToZero ]
104
+ switch (hfModel.status.state) {
105
+ case "running":
106
+ return AIModelStatus.Available;
107
+ case "initializing":
108
+ return AIModelStatus.Pending;
109
+ case "updating":
110
+ return AIModelStatus.Pending;
111
+ case "updateFailed":
112
+ return AIModelStatus.Unavailable;
113
+ case "paused":
114
+ return AIModelStatus.Stopped;
115
+ case "failed":
116
+ return AIModelStatus.Unavailable;
117
+ case "scaledToZero":
118
+ return AIModelStatus.Available;
119
+ default:
120
+ return AIModelStatus.Unknown;
121
+ }
122
+ }
123
+ /*
124
+ Example of model returned by the API
125
+ {
126
+ "items": [
127
+ {
128
+ "accountId": "string",
129
+ "compute": {
130
+ "accelerator": "cpu",
131
+ "instanceSize": "large",
132
+ "instanceType": "c6i",
133
+ "scaling": {
134
+ "maxReplica": 8,
135
+ "minReplica": 2
136
+ }
137
+ },
138
+ "model": {
139
+ "framework": "custom",
140
+ "image": {
141
+ "huggingface": {}
142
+ },
143
+ "repository": "gpt2",
144
+ "revision": "6c0e6080953db56375760c0471a8c5f2929baf11",
145
+ "task": "text-classification"
146
+ },
147
+ "name": "my-endpoint",
148
+ "provider": {
149
+ "region": "us-east-1",
150
+ "vendor": "aws"
151
+ },
152
+ "status": {
153
+ "createdAt": "2023-10-19T05:04:17.305Z",
154
+ "createdBy": {
155
+ "id": "string",
156
+ "name": "string"
157
+ },
158
+ "message": "Endpoint is ready",
159
+ "private": {
160
+ "serviceName": "string"
161
+ },
162
+ "readyReplica": 2,
163
+ "state": "pending",
164
+ "targetReplica": 4,
165
+ "updatedAt": "2023-10-19T05:04:17.305Z",
166
+ "updatedBy": {
167
+ "id": "string",
168
+ "name": "string"
169
+ },
170
+ "url": "https://endpoint-id.region.vendor.endpoints.huggingface.cloud"
171
+ },
172
+ "type": "public"
173
+ }
174
+ ]
175
+ }
176
+ */
177
+ //# sourceMappingURL=huggingface_ie.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"huggingface_ie.js","sourceRoot":"","sources":["../../src/huggingface_ie.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from "./bedrock/index.js";
2
+ export * from "./huggingface_ie.js";
3
+ export * from "./openai.js";
4
+ export * from "./replicate.js";
5
+ export * from "./vertexai/index.js";
6
+ export * from "./togetherai/index.js";
7
+ export * from "./test/index.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC"}