@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,198 @@
1
+ import { AbstractDriver, BuiltinProviders, ModelType, PromptFormats, TrainingJobStatus } from "@llumiverse/core";
2
+ import { asyncMap } from "@llumiverse/core/async";
3
+ import OpenAI from "openai";
4
+ const supportFineTunning = new Set([
5
+ "gpt-3.5-turbo-1106",
6
+ "gpt-3.5-turbo-0613",
7
+ "babbage-002",
8
+ "davinci-002",
9
+ "gpt-4-0613"
10
+ ]);
11
+ export class OpenAIDriver extends AbstractDriver {
12
+ inputContentTypes = ["text/plain"];
13
+ generatedContentTypes = ["text/plain"];
14
+ service;
15
+ provider = BuiltinProviders.openai;
16
+ defaultFormat = PromptFormats.openai;
17
+ constructor(opts) {
18
+ super(opts);
19
+ this.service = new OpenAI({
20
+ apiKey: opts.apiKey,
21
+ });
22
+ }
23
+ createPrompt(segments, opts) {
24
+ // openai only supports opanai format - force the format
25
+ return super.createPrompt(segments, { ...opts, format: PromptFormats.openai });
26
+ }
27
+ extractDataFromResponse(options, result) {
28
+ const tokenInfo = {
29
+ prompt: result.usage?.prompt_tokens,
30
+ result: result.usage?.completion_tokens,
31
+ total: result.usage?.total_tokens,
32
+ };
33
+ //if no schema, return content
34
+ if (!options.resultSchema) {
35
+ return {
36
+ result: result.choices[0]?.message.content,
37
+ token_usage: tokenInfo,
38
+ };
39
+ }
40
+ //we have a schema: get the content and return after validation
41
+ const data = result.choices[0]?.message.function_call?.arguments;
42
+ if (!data) {
43
+ this.logger?.error("[OpenAI] Response is not valid", result);
44
+ throw new Error("Response is not valid: no data");
45
+ }
46
+ return {
47
+ result: data,
48
+ token_usage: tokenInfo
49
+ };
50
+ }
51
+ async requestCompletionStream(prompt, options) {
52
+ const mapFn = options.resultSchema
53
+ ? (chunk) => {
54
+ return (chunk.choices[0]?.delta?.function_call?.arguments ?? "");
55
+ }
56
+ : (chunk) => {
57
+ return chunk.choices[0]?.delta?.content ?? "";
58
+ };
59
+ const stream = (await this.service.chat.completions.create({
60
+ stream: true,
61
+ model: options.model,
62
+ messages: prompt,
63
+ temperature: options.temperature,
64
+ n: 1,
65
+ max_tokens: options.max_tokens,
66
+ functions: options.resultSchema
67
+ ? [
68
+ {
69
+ name: "format_output",
70
+ parameters: options.resultSchema,
71
+ },
72
+ ]
73
+ : undefined,
74
+ function_call: options.resultSchema
75
+ ? { name: "format_output" }
76
+ : undefined,
77
+ }));
78
+ return asyncMap(stream, mapFn);
79
+ }
80
+ async requestCompletion(prompt, options) {
81
+ const functions = options.resultSchema
82
+ ? [
83
+ {
84
+ name: "format_output",
85
+ parameters: options.resultSchema,
86
+ },
87
+ ]
88
+ : undefined;
89
+ const res = await this.service.chat.completions.create({
90
+ stream: false,
91
+ model: options.model,
92
+ messages: prompt,
93
+ temperature: options.temperature,
94
+ n: 1,
95
+ max_tokens: options.max_tokens,
96
+ functions: functions,
97
+ function_call: options.resultSchema
98
+ ? { name: "format_output" }
99
+ : undefined,
100
+ });
101
+ return this.extractDataFromResponse(options, res);
102
+ }
103
+ createTrainingPrompt(options) {
104
+ if (options.model.includes("gpt")) {
105
+ return super.createTrainingPrompt(options);
106
+ }
107
+ else {
108
+ // babbage, davinci not yet implemented
109
+ throw new Error("Unsupported model for training: " + options.model);
110
+ }
111
+ }
112
+ async startTraining(dataset, options) {
113
+ const url = await dataset.getURL();
114
+ const file = await this.service.files.create({
115
+ file: await fetch(url),
116
+ purpose: "fine-tune",
117
+ });
118
+ const job = await this.service.fineTuning.jobs.create({
119
+ training_file: file.id,
120
+ model: options.model,
121
+ hyperparameters: options.params
122
+ });
123
+ return jobInfo(job);
124
+ }
125
+ async cancelTraining(jobId) {
126
+ const job = await this.service.fineTuning.jobs.cancel(jobId);
127
+ return jobInfo(job);
128
+ }
129
+ async getTrainingJob(jobId) {
130
+ const job = await this.service.fineTuning.jobs.retrieve(jobId);
131
+ return jobInfo(job);
132
+ }
133
+ // ========= management API =============
134
+ async validateConnection() {
135
+ try {
136
+ await this.service.models.list();
137
+ return true;
138
+ }
139
+ catch (error) {
140
+ return false;
141
+ }
142
+ }
143
+ listTrainableModels() {
144
+ return this._listModels((m) => supportFineTunning.has(m.id));
145
+ }
146
+ async listModels() {
147
+ return this._listModels();
148
+ }
149
+ async _listModels(filter) {
150
+ let result = await this.service.models.list();
151
+ const models = filter ? result.data.filter(filter) : result.data;
152
+ return models.map((m) => ({
153
+ id: m.id,
154
+ name: m.id,
155
+ provider: this.provider,
156
+ owner: m.owned_by,
157
+ type: m.object === "model" ? ModelType.Text : ModelType.Unknown,
158
+ }));
159
+ }
160
+ async generateEmbeddings(content, model = "text-embedding-ada-002") {
161
+ const res = await this.service.embeddings.create({
162
+ input: content,
163
+ model: model,
164
+ });
165
+ const embeddings = res.data[0].embedding;
166
+ if (!embeddings || embeddings.length === 0) {
167
+ throw new Error("No embedding found");
168
+ }
169
+ return { embeddings, model };
170
+ }
171
+ }
172
+ function jobInfo(job) {
173
+ //validating_files`, `queued`, `running`, `succeeded`, `failed`, or `cancelled`.
174
+ const jobStatus = job.status;
175
+ let status = TrainingJobStatus.running;
176
+ let details;
177
+ if (jobStatus === 'succeeded') {
178
+ status = TrainingJobStatus.succeeded;
179
+ }
180
+ else if (jobStatus === 'failed') {
181
+ status = TrainingJobStatus.failed;
182
+ details = job.error ? `${job.error.code} - ${job.error.message} ${job.error.param ? " [" + job.error.param + "]" : ""}` : "error";
183
+ }
184
+ else if (jobStatus === 'cancelled') {
185
+ status = TrainingJobStatus.cancelled;
186
+ }
187
+ else {
188
+ status = TrainingJobStatus.running;
189
+ details = jobStatus;
190
+ }
191
+ return {
192
+ id: job.id,
193
+ model: job.fine_tuned_model || undefined,
194
+ status,
195
+ details
196
+ };
197
+ }
198
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,cAAc,EACd,gBAAgB,EAMhB,SAAS,EACT,aAAa,EAGb,iBAAiB,EAGpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IAC/B,oBAAoB;IACpB,oBAAoB;IACpB,aAAa;IACb,aAAa;IACb,YAAY;CACf,CAAC,CAAC;AAMH,MAAM,OAAO,YAAa,SAAQ,cAGjC;IACG,iBAAiB,GAAa,CAAC,YAAY,CAAC,CAAC;IAC7C,qBAAqB,GAAa,CAAC,YAAY,CAAC,CAAC;IACjD,OAAO,CAAS;IAChB,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACnC,aAAa,GAAG,aAAa,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;IAED,YAAY,CAAC,QAAyB,EAAE,IAAsB;QAC1D,yDAAyD;QACzD,OAAO,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAA;IAClF,CAAC;IAED,uBAAuB,CACnB,OAAyB,EACzB,MAA8C;QAE9C,MAAM,SAAS,GAAwB;YACnC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,aAAa;YACnC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,iBAAiB;YACvC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,YAAY;SACpC,CAAC;QAEF,8BAA8B;QAC9B,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YACxB,OAAO;gBACH,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAiB;gBACpD,WAAW,EAAE,SAAS;aACzB,CAAA;QACL,CAAC;QAED,+DAA+D;QAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,SAAgB,CAAC;QACxE,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO;YACH,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,SAAS;SACzB,CAAC;IACN,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,MAA4D,EAAE,OAAyB;QACjH,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY;YAC9B,CAAC,CAAC,CAAC,KAAkD,EAAE,EAAE;gBACrD,OAAO,CACH,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,IAAI,EAAE,CAC1D,CAAC;YACN,CAAC;YACD,CAAC,CAAC,CAAC,KAAkD,EAAE,EAAE;gBACrD,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;YAClD,CAAC,CAAC;QAEN,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACvD,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,CAAC,EAAE,CAAC;YACJ,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,SAAS,EAAE,OAAO,CAAC,YAAY;gBAC3B,CAAC,CAAC;oBACE;wBACI,IAAI,EAAE,eAAe;wBACrB,UAAU,EAAE,OAAO,CAAC,YAAmB;qBAC1C;iBACJ;gBACD,CAAC,CAAC,SAAS;YACf,aAAa,EAAE,OAAO,CAAC,YAAY;gBAC/B,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE;gBAC3B,CAAC,CAAC,SAAS;SAClB,CAAC,CAAwD,CAAC;QAE3D,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAA4D,EAAE,OAAyB;QAC3G,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY;YAClC,CAAC,CAAC;gBACE;oBACI,IAAI,EAAE,eAAe;oBACrB,UAAU,EAAE,OAAO,CAAC,YAAmB;iBAC1C;aACJ;YACD,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACnD,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,CAAC,EAAE,CAAC;YACJ,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,SAAS,EAAE,SAAS;YACpB,aAAa,EAAE,OAAO,CAAC,YAAY;gBAC/B,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE;gBAC3B,CAAC,CAAC,SAAS;SAClB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,oBAAoB,CAAC,OAA8B;QAC/C,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACJ,wCAAwC;YACxC,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QACxE,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAmB,EAAE,OAAwB;QAC7D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YACzC,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC;YACtB,OAAO,EAAE,WAAW;SACvB,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;YAClD,aAAa,EAAE,IAAI,CAAC,EAAE;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,eAAe,EAAE,OAAO,CAAC,MAAM;SAClC,CAAC,CAAA;QAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa;QAC9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa;QAC9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,yCAAyC;IAEzC,KAAK,CAAC,kBAAkB;QACpB,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,mBAAmB;QACf,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAA4C;QAC1D,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QACjE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,EAAE;YACV,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,CAAC,CAAC,QAAQ;YACjB,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO;SAClE,CAAC,CAAC,CAAC;IACR,CAAC;IAGD,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,QAAgB,wBAAwB;QAC9E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;YAC7C,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEzC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC;CAEJ;AAGD,SAAS,OAAO,CAAC,GAAyC;IACtD,gFAAgF;IAChF,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;IAC7B,IAAI,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC;IACvC,IAAI,OAA2B,CAAC;IAChC,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;QAC5B,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC;IACzC,CAAC;SAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;QAClC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACtI,CAAC;SAAM,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC;IACzC,CAAC;SAAM,CAAC;QACJ,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC;QACnC,OAAO,GAAG,SAAS,CAAC;IACxB,CAAC;IACD,OAAO;QACH,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,KAAK,EAAE,GAAG,CAAC,gBAAgB,IAAI,SAAS;QACxC,MAAM;QACN,OAAO;KACV,CAAA;AACL,CAAC"}
@@ -0,0 +1,283 @@
1
+ import { AbstractDriver, BuiltinProviders, PromptFormats, TrainingJobStatus } from "@llumiverse/core";
2
+ import { EventStream } from "@llumiverse/core/async";
3
+ import EventSource from "eventsource";
4
+ import Replicate from "replicate";
5
+ let cachedTrainableModels;
6
+ let cachedTrainableModelsTimestamp = 0;
7
+ const supportFineTunning = new Set([
8
+ "meta/llama-2-70b-chat",
9
+ "meta/llama-2-13b-chat",
10
+ "meta/llama-2-7b-chat",
11
+ "meta/llama-2-7b",
12
+ "meta/llama-2-70b",
13
+ "meta/llama-2-13b",
14
+ "mistralai/mistral-7b-v0.1"
15
+ ]);
16
+ export class ReplicateDriver extends AbstractDriver {
17
+ provider = BuiltinProviders.replicate;
18
+ service;
19
+ defaultFormat = PromptFormats.genericTextLLM;
20
+ static parseModelId(modelId) {
21
+ const [owner, modelPart] = modelId.split("/");
22
+ const i = modelPart.indexOf(':');
23
+ if (i === -1) {
24
+ throw new Error("Invalid model id. Expected format: owner/model:version");
25
+ }
26
+ return {
27
+ owner, model: modelPart.slice(0, i), version: modelPart.slice(i + 1)
28
+ };
29
+ }
30
+ constructor(options) {
31
+ super(options);
32
+ this.service = new Replicate({
33
+ auth: options.apiKey,
34
+ });
35
+ }
36
+ extractDataFromResponse(prompt, response) {
37
+ const text = response.output.join("");
38
+ return {
39
+ result: text,
40
+ token_usage: {
41
+ result: response.output.length,
42
+ prompt: prompt.length,
43
+ total: response.output.length + prompt.length,
44
+ },
45
+ };
46
+ }
47
+ async requestCompletionStream(prompt, options) {
48
+ const model = ReplicateDriver.parseModelId(options.model);
49
+ const predictionData = {
50
+ input: {
51
+ prompt: prompt,
52
+ max_new_tokens: options.max_tokens || 1024,
53
+ temperature: options.temperature,
54
+ },
55
+ version: model.version,
56
+ stream: true, //streaming described here https://replicate.com/blog/streaming
57
+ };
58
+ const prediction = await this.service.predictions.create(predictionData);
59
+ const stream = new EventStream();
60
+ const source = new EventSource(prediction.urls.stream);
61
+ source.addEventListener("output", (e) => {
62
+ stream.push(e.data);
63
+ });
64
+ source.addEventListener("error", (e) => {
65
+ let error;
66
+ try {
67
+ error = JSON.parse(e.data);
68
+ }
69
+ catch (error) {
70
+ error = JSON.stringify(e);
71
+ }
72
+ this.logger?.error(e, error, "Error in SSE stream");
73
+ });
74
+ source.addEventListener("done", () => {
75
+ try {
76
+ stream.close(""); // not using e.data which is {}
77
+ }
78
+ finally {
79
+ source.close();
80
+ }
81
+ });
82
+ return stream;
83
+ }
84
+ async requestCompletion(prompt, options) {
85
+ const model = ReplicateDriver.parseModelId(options.model);
86
+ const predictionData = {
87
+ input: {
88
+ prompt: prompt,
89
+ max_new_tokens: options.max_tokens || 1024,
90
+ temperature: options.temperature,
91
+ },
92
+ version: model.version,
93
+ //TODO stream
94
+ //stream: stream, //streaming described here https://replicate.com/blog/streaming
95
+ };
96
+ const prediction = await this.service.predictions.create(predictionData);
97
+ //TODO stream
98
+ //if we're streaming, return right away for the stream handler to handle
99
+ // if (stream) return prediction;
100
+ //not streaming, wait for the result
101
+ const res = await this.service.wait(prediction, {});
102
+ const text = res.output.join("");
103
+ return {
104
+ result: text,
105
+ token_usage: {
106
+ result: res.output.length,
107
+ prompt: prompt.length,
108
+ total: res.output.length + prompt.length,
109
+ },
110
+ };
111
+ }
112
+ async startTraining(dataset, options) {
113
+ if (options.name.indexOf("/") === -1) {
114
+ throw new Error("Invalid target model name. Expected format: owner/model");
115
+ }
116
+ const { owner, model, version } = ReplicateDriver.parseModelId(options.model);
117
+ const job = await this.service.trainings.create(owner, model, version, {
118
+ destination: options.name,
119
+ input: {
120
+ train_data: dataset.getURL(),
121
+ },
122
+ });
123
+ return jobInfo(job, options.name);
124
+ }
125
+ /**
126
+ * This method is not returning a consistent TrainingJob like the one returned by startTraining
127
+ * Instead of returning the full model name `owner/model:version` it returns only the version `version
128
+ * @param jobId
129
+ * @returns
130
+ */
131
+ async cancelTraining(jobId) {
132
+ const job = await this.service.trainings.cancel(jobId);
133
+ return jobInfo(job);
134
+ }
135
+ /**
136
+ * This method is not returning a consistent TrainingJob like the one returned by startTraining
137
+ * Instead of returning the full model name `owner/model:version` it returns only the version `version
138
+ * @param jobId
139
+ * @returns
140
+ */
141
+ async getTrainingJob(jobId) {
142
+ const job = await this.service.trainings.get(jobId);
143
+ return jobInfo(job);
144
+ }
145
+ // ========= management API =============
146
+ async validateConnection() {
147
+ try {
148
+ await this.service.predictions.list();
149
+ return true;
150
+ }
151
+ catch (error) {
152
+ return false;
153
+ }
154
+ }
155
+ async _listTrainableModels() {
156
+ const promises = Array.from(supportFineTunning).map(id => {
157
+ const [owner, model] = id.split('/');
158
+ return this.service.models.get(owner, model);
159
+ });
160
+ const results = await Promise.all(promises);
161
+ return results.filter(m => !!m.latest_version).map(m => {
162
+ const fullName = m.owner + '/' + m.name;
163
+ const v = m.latest_version;
164
+ return {
165
+ id: fullName + ':' + v.id,
166
+ name: fullName + "@" + v.cog_version + ":" + v.id.slice(0, 6),
167
+ provider: this.provider,
168
+ owner: m.owner,
169
+ description: m.description,
170
+ };
171
+ });
172
+ }
173
+ async listTrainableModels() {
174
+ if (!cachedTrainableModels || Date.now() > cachedTrainableModelsTimestamp + 12 * 3600 * 1000) { // 12 hours
175
+ cachedTrainableModels = await this._listTrainableModels();
176
+ cachedTrainableModelsTimestamp = Date.now();
177
+ }
178
+ return cachedTrainableModels;
179
+ }
180
+ async listModels(params) {
181
+ if (!params.text) {
182
+ return this.listTrainableModels();
183
+ }
184
+ const [owner, model] = params.text.split("/");
185
+ if (!owner || !model) {
186
+ throw new Error("Invalid model name. Expected format: owner/model");
187
+ }
188
+ return this.listModelVersions(owner, model);
189
+ }
190
+ async listModelVersions(owner, model) {
191
+ const [rModel, versions] = await Promise.all([
192
+ this.service.models.get(owner, model),
193
+ this.service.models.versions.list(owner, model),
194
+ ]);
195
+ if (!rModel || !versions || versions.length === 0) {
196
+ throw new Error("Model not found or no versions avaialble");
197
+ }
198
+ const models = versions.results.map((v) => {
199
+ const fullName = rModel.owner + '/' + rModel.name;
200
+ return {
201
+ id: fullName + ':' + v.id,
202
+ name: fullName + "@" + v.cog_version + ":" + v.id.slice(0, 6),
203
+ provider: this.provider,
204
+ owner: rModel.owner,
205
+ description: rModel.description,
206
+ canTrain: supportFineTunning.has(fullName),
207
+ };
208
+ });
209
+ //set latest version
210
+ //const idx = models.findIndex(m => m.id === rModel.latest_version?.id);
211
+ //models[idx].name = rModel.name + "@latest"
212
+ return models;
213
+ }
214
+ async searchModels(params) {
215
+ const res = await this.service.request("models/search", {
216
+ params: {
217
+ query: params.text,
218
+ },
219
+ });
220
+ const rModels = (await res.json()).models;
221
+ const models = rModels.map((v) => {
222
+ return {
223
+ id: v.name,
224
+ name: v.name,
225
+ provider: this.provider,
226
+ owner: v.username,
227
+ description: v.description,
228
+ has_versions: true,
229
+ };
230
+ });
231
+ return models;
232
+ }
233
+ generateEmbeddings(content, model) {
234
+ this.logger?.debug(`[Replicate] Generating embeddings for ${content} on ${model}`);
235
+ throw new Error("Method not implemented.");
236
+ }
237
+ }
238
+ function jobInfo(job, modelName) {
239
+ // 'starting' | 'processing' | 'succeeded' | 'failed' | 'canceled'
240
+ const jobStatus = job.status;
241
+ let details;
242
+ let status = TrainingJobStatus.running;
243
+ if (jobStatus === 'succeeded') {
244
+ status = TrainingJobStatus.succeeded;
245
+ }
246
+ else if (jobStatus === 'failed') {
247
+ status = TrainingJobStatus.failed;
248
+ const error = job.error;
249
+ if (typeof error === 'string') {
250
+ details = error;
251
+ }
252
+ else {
253
+ const parts = [];
254
+ if (error.code) {
255
+ parts.push(error.code + ' - ');
256
+ }
257
+ if (error.message) {
258
+ parts.push(error.message);
259
+ }
260
+ if (parts.length) {
261
+ details = parts.join(' ');
262
+ }
263
+ else {
264
+ details = JSON.stringify(error);
265
+ }
266
+ }
267
+ details = job.error ? `${job.error.code} - ${job.error.message} ${job.error.param ? " [" + job.error.param + "]" : ""}` : "error";
268
+ }
269
+ else if (jobStatus === 'canceled') {
270
+ status = TrainingJobStatus.cancelled;
271
+ }
272
+ else {
273
+ status = TrainingJobStatus.running;
274
+ details = job.status;
275
+ }
276
+ return {
277
+ id: job.id,
278
+ status,
279
+ details,
280
+ model: modelName ? modelName + ':' + job.version : job.version
281
+ };
282
+ }
283
+ //# sourceMappingURL=replicate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replicate.js","sourceRoot":"","sources":["../../src/replicate.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,cAAc,EACd,gBAAgB,EAMhB,aAAa,EAEb,iBAAiB,EAEpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,WAAW,MAAM,aAAa,CAAC;AACtC,OAAO,SAAyB,MAAM,WAAW,CAAC;AAElD,IAAI,qBAA4C,CAAC;AACjD,IAAI,8BAA8B,GAAW,CAAC,CAAC;AAE/C,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IAC/B,uBAAuB;IACvB,uBAAuB;IACvB,sBAAsB;IACtB,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB,2BAA2B;CAC9B,CAAC,CAAC;AAMH,MAAM,OAAO,eAAgB,SAAQ,cAAqC;IACtE,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC;IACtC,OAAO,CAAY;IACnB,aAAa,GAAG,aAAa,CAAC,cAAc,CAAC;IAE7C,MAAM,CAAC,YAAY,CAAC,OAAe;QAC/B,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO;YACH,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;SACvE,CAAA;IACL,CAAC;IAED,YAAY,OAA+B;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC;YACzB,IAAI,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;IACP,CAAC;IAED,uBAAuB,CAAC,MAAc,EAAE,QAAoB;QACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,OAAO;YACH,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE;gBACT,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;gBAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;aAChD;SACJ,CAAC;IACN,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,MAAc,EAAE,OAAyB;QACnE,MAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG;YACnB,KAAK,EAAE;gBACH,MAAM,EAAE,MAAM;gBACd,cAAc,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;gBAC1C,WAAW,EAAE,OAAO,CAAC,WAAW;aACnC;YACD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,IAAI,EAAE,+DAA+D;SAChF,CAAC;QAEF,MAAM,UAAU,GACZ,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAE1D,MAAM,MAAM,GAAG,IAAI,WAAW,EAAU,CAAC;QAEzC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,MAAO,CAAC,CAAC;QACxD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAM,EAAE,EAAE;YACzC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAM,EAAE,EAAE;YACxC,IAAI,KAAU,CAAC;YACf,IAAI,CAAC;gBACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YACjC,IAAI,CAAC;gBACD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,+BAA+B;YACrD,CAAC;oBAAS,CAAC;gBACP,MAAM,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc,EAAE,OAAyB;QAC7D,MAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG;YACnB,KAAK,EAAE;gBACH,MAAM,EAAE,MAAM;gBACd,cAAc,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;gBAC1C,WAAW,EAAE,OAAO,CAAC,WAAW;aACnC;YACD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,aAAa;YACb,qFAAqF;SACxF,CAAC;QAEF,MAAM,UAAU,GACZ,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAE1D,aAAa;QACb,wEAAwE;QACxE,wCAAwC;QAExC,oCAAoC;QACpC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAEpD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,OAAO;YACH,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE;gBACT,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;aAC3C;SACJ,CAAC;IACN,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAmB,EAAE,OAAwB;QAC7D,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;YACnE,WAAW,EAAE,OAAO,CAAC,IAAW;YAChC,KAAK,EAAE;gBACH,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE;aAC/B;SACJ,CAAC,CAAA;QACF,OAAO,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,KAAa;QAC9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,KAAa;QAC9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,yCAAyC;IAEzC,KAAK,CAAC,kBAAkB;QACpB,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,oBAAoB;QACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACrD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAChD,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACnD,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAe,CAAC;YAC5B,OAAO;gBACH,EAAE,EAAE,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE;gBACzB,IAAI,EACA,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,WAAW,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC3D,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,WAAW,EAAE,CAAC,CAAC,WAAW;aAClB,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,mBAAmB;QACrB,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,8BAA8B,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW;YACvG,qBAAqB,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1D,8BAA8B,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,qBAAqB,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAA0B;QACvC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACtC,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,KAAa,EAAE,KAAa;QAChD,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;SAClD,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,MAAM,GAAe,QAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;YAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;YAClD,OAAO;gBACH,EAAE,EAAE,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE;gBACzB,IAAI,EACA,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,WAAW,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC3D,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,QAAQ,EAAE,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;aAClC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,wEAAwE;QACxE,4CAA4C;QAE5C,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAA0B;QACzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE;YACpD,MAAM,EAAE;gBACJ,KAAK,EAAE,MAAM,CAAC,IAAI;aACrB;SACJ,CAAC,CAAC;QAEH,MAAM,OAAO,GAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAS,CAAC,MAAM,CAAC;QAEnD,MAAM,MAAM,GAAc,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;YAC7C,OAAO;gBACH,EAAE,EAAE,CAAC,CAAC,IAAI;gBACV,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,CAAC,CAAC,QAAQ;gBACjB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,YAAY,EAAE,IAAI;aACrB,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,kBAAkB,CAAC,OAAe,EAAE,KAAc;QAC9C,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,yCAAyC,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;CAEJ;AAED,SAAS,OAAO,CAAC,GAAe,EAAE,SAAkB;IAChD,kEAAkE;IAClE,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;IAC7B,IAAI,OAA2B,CAAC;IAChC,IAAI,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC;IACvC,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;QAC5B,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC;IACzC,CAAC;SAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;QAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,GAAG,KAAK,CAAC;QACpB,CAAC;aAAM,CAAC;YACJ,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACJ,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACtI,CAAC;SAAM,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC;IACzC,CAAC;SAAM,CAAC;QACJ,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC;QACnC,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,OAAO;QACH,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,MAAM;QACN,OAAO;QACP,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO;KAClD,CAAC;AAErB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { sleep, throwError } from "./utils.js";
2
+ export class TestErrorCompletionStream {
3
+ segments;
4
+ options;
5
+ completion;
6
+ constructor(segments, options) {
7
+ this.segments = segments;
8
+ this.options = options;
9
+ }
10
+ async *[Symbol.asyncIterator]() {
11
+ yield "Started TestError. Next we will thrown an error.\n";
12
+ sleep(1000);
13
+ throwError("Testing stream completion error.", this.segments);
14
+ }
15
+ }
16
+ //# sourceMappingURL=TestErrorCompletionStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestErrorCompletionStream.js","sourceRoot":"","sources":["../../../src/test/TestErrorCompletionStream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,OAAO,yBAAyB;IAIf;IACR;IAHX,UAAU,CAAiD;IAE3D,YAAmB,QAAyB,EACjC,OAAyB;QADjB,aAAQ,GAAR,QAAQ,CAAiB;QACjC,YAAO,GAAP,OAAO,CAAkB;IACpC,CAAC;IACD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QACzB,MAAM,oDAAoD,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,UAAU,CAAC,kCAAkC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;CACJ"}
@@ -0,0 +1,20 @@
1
+ import { createValidationErrorCompletion, sleep } from "./utils.js";
2
+ export class TestValidationErrorCompletionStream {
3
+ segments;
4
+ options;
5
+ completion;
6
+ constructor(segments, options) {
7
+ this.segments = segments;
8
+ this.options = options;
9
+ }
10
+ async *[Symbol.asyncIterator]() {
11
+ yield "Started TestValidationError.\n";
12
+ await sleep(1000);
13
+ yield "chunk1\n";
14
+ await sleep(1000);
15
+ yield "chunk2\n";
16
+ await sleep(1000);
17
+ this.completion = createValidationErrorCompletion(this.segments);
18
+ }
19
+ }
20
+ //# sourceMappingURL=TestValidationErrorCompletionStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestValidationErrorCompletionStream.js","sourceRoot":"","sources":["../../../src/test/TestValidationErrorCompletionStream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,+BAA+B,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGpE,MAAM,OAAO,mCAAmC;IAIzB;IACR;IAHX,UAAU,CAAiD;IAE3D,YAAmB,QAAyB,EACjC,OAAyB;QADjB,aAAQ,GAAR,QAAQ,CAAiB;QACjC,YAAO,GAAP,OAAO,CAAkB;IACpC,CAAC;IACD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QACzB,MAAM,gCAAgC,CAAC;QACvC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM,UAAU,CAAA;QAChB,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM,UAAU,CAAA;QAChB,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,+BAA+B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;CACJ"}
@@ -0,0 +1,91 @@
1
+ import { AIModelStatus, ModelType } from "@llumiverse/core";
2
+ import { TestErrorCompletionStream } from "./TestErrorCompletionStream.js";
3
+ import { TestValidationErrorCompletionStream } from "./TestValidationErrorCompletionStream.js";
4
+ import { createValidationErrorCompletion, sleep, throwError } from "./utils.js";
5
+ export * from "./TestErrorCompletionStream.js";
6
+ export * from "./TestValidationErrorCompletionStream.js";
7
+ export var TestDriverModels;
8
+ (function (TestDriverModels) {
9
+ TestDriverModels["executionError"] = "execution-error";
10
+ TestDriverModels["validationError"] = "validation-error";
11
+ })(TestDriverModels || (TestDriverModels = {}));
12
+ export class TestDriver {
13
+ provider = "test";
14
+ createTrainingPrompt() {
15
+ throw new Error("Method not implemented.");
16
+ }
17
+ startTraining() {
18
+ throw new Error("Method not implemented.");
19
+ }
20
+ cancelTraining() {
21
+ throw new Error("Method not implemented.");
22
+ }
23
+ getTrainingJob(_jobId) {
24
+ throw new Error("Method not implemented.");
25
+ }
26
+ createPrompt(segments, _opts) {
27
+ return segments;
28
+ }
29
+ execute(segments, options) {
30
+ switch (options.model) {
31
+ case TestDriverModels.executionError:
32
+ return this.executeError(segments, options);
33
+ case TestDriverModels.validationError:
34
+ return this.executeValidationError(segments, options);
35
+ default:
36
+ throwError("[test driver] Unknown model: " + options.model, segments);
37
+ }
38
+ }
39
+ async stream(segments, options) {
40
+ switch (options.model) {
41
+ case TestDriverModels.executionError:
42
+ return new TestErrorCompletionStream(segments, options);
43
+ case TestDriverModels.validationError:
44
+ return new TestValidationErrorCompletionStream(segments, options);
45
+ default:
46
+ throwError("[test driver] Unknown model: " + options.model, segments);
47
+ }
48
+ }
49
+ async listTrainableModels() {
50
+ return [];
51
+ }
52
+ async listModels() {
53
+ return [
54
+ {
55
+ id: TestDriverModels.executionError,
56
+ name: "Execution Error",
57
+ type: ModelType.Test,
58
+ provider: this.provider,
59
+ status: AIModelStatus.Available,
60
+ description: "Test execution errors",
61
+ tags: [],
62
+ },
63
+ {
64
+ id: TestDriverModels.validationError,
65
+ name: "Validation Error",
66
+ type: ModelType.Test,
67
+ provider: this.provider,
68
+ status: AIModelStatus.Available,
69
+ description: "Test validation errors",
70
+ tags: [],
71
+ },
72
+ ];
73
+ }
74
+ validateConnection() {
75
+ throw new Error("Method not implemented.");
76
+ }
77
+ generateEmbeddings() {
78
+ throw new Error("Method not implemented.");
79
+ }
80
+ // ============== execution error ==================
81
+ async executeError(segments, _options) {
82
+ await sleep(1000);
83
+ throwError("Testing stream completion error.", segments);
84
+ }
85
+ // ============== validation error ==================
86
+ async executeValidationError(segments, _options) {
87
+ await sleep(3000);
88
+ return createValidationErrorCompletion(segments);
89
+ }
90
+ }
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test/index.ts"],"names":[],"mappings":"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"}