@llumiverse/core 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 (58) hide show
  1. package/lib/cjs/CompletionStream.js +78 -0
  2. package/lib/cjs/CompletionStream.js.map +1 -0
  3. package/lib/cjs/Driver.js +115 -0
  4. package/lib/cjs/Driver.js.map +1 -0
  5. package/lib/cjs/async.js +107 -0
  6. package/lib/cjs/async.js.map +1 -0
  7. package/lib/cjs/formatters.js +117 -0
  8. package/lib/cjs/formatters.js.map +1 -0
  9. package/lib/cjs/index.js +21 -0
  10. package/lib/cjs/index.js.map +1 -0
  11. package/lib/cjs/json.js +14 -0
  12. package/lib/cjs/json.js.map +1 -0
  13. package/lib/cjs/package.json +3 -0
  14. package/lib/cjs/types.js +67 -0
  15. package/lib/cjs/types.js.map +1 -0
  16. package/lib/cjs/validation.js +35 -0
  17. package/lib/cjs/validation.js.map +1 -0
  18. package/lib/esm/CompletionStream.js +73 -0
  19. package/lib/esm/CompletionStream.js.map +1 -0
  20. package/lib/esm/Driver.js +110 -0
  21. package/lib/esm/Driver.js.map +1 -0
  22. package/lib/esm/async.js +100 -0
  23. package/lib/esm/async.js.map +1 -0
  24. package/lib/esm/formatters.js +113 -0
  25. package/lib/esm/formatters.js.map +1 -0
  26. package/lib/esm/index.js +5 -0
  27. package/lib/esm/index.js.map +1 -0
  28. package/lib/esm/json.js +10 -0
  29. package/lib/esm/json.js.map +1 -0
  30. package/lib/esm/types.js +64 -0
  31. package/lib/esm/types.js.map +1 -0
  32. package/lib/esm/validation.js +30 -0
  33. package/lib/esm/validation.js.map +1 -0
  34. package/lib/types/CompletionStream.d.ts +21 -0
  35. package/lib/types/CompletionStream.d.ts.map +1 -0
  36. package/lib/types/Driver.d.ts +68 -0
  37. package/lib/types/Driver.d.ts.map +1 -0
  38. package/lib/types/async.d.ts +21 -0
  39. package/lib/types/async.d.ts.map +1 -0
  40. package/lib/types/formatters.d.ts +5 -0
  41. package/lib/types/formatters.d.ts.map +1 -0
  42. package/lib/types/index.d.ts +5 -0
  43. package/lib/types/index.d.ts.map +1 -0
  44. package/lib/types/json.d.ts +9 -0
  45. package/lib/types/json.d.ts.map +1 -0
  46. package/lib/types/types.d.ts +153 -0
  47. package/lib/types/types.d.ts.map +1 -0
  48. package/lib/types/validation.d.ts +8 -0
  49. package/lib/types/validation.d.ts.map +1 -0
  50. package/package.json +74 -0
  51. package/src/CompletionStream.ts +92 -0
  52. package/src/Driver.ts +204 -0
  53. package/src/async.ts +120 -0
  54. package/src/formatters.ts +147 -0
  55. package/src/index.ts +4 -0
  56. package/src/json.ts +17 -0
  57. package/src/types.ts +187 -0
  58. package/src/validation.ts +34 -0
@@ -0,0 +1,73 @@
1
+ export class DefaultCompletionStream {
2
+ driver;
3
+ options;
4
+ chunks;
5
+ prompt;
6
+ completion;
7
+ constructor(driver, segments, options) {
8
+ this.driver = driver;
9
+ this.options = options;
10
+ this.driver = driver;
11
+ this.prompt = this.driver.createPrompt(segments, options);
12
+ this.chunks = [];
13
+ }
14
+ async *[Symbol.asyncIterator]() {
15
+ // reset state
16
+ this.completion = undefined;
17
+ if (this.chunks.length > 0) {
18
+ this.chunks = [];
19
+ }
20
+ const chunks = this.chunks;
21
+ this.driver.logger.debug(`[${this.driver.provider}] Streaming Execution of ${this.options.model} with prompt`, this.prompt);
22
+ const start = Date.now();
23
+ const stream = await this.driver.requestCompletionStream(this.prompt, this.options);
24
+ for await (const chunk of stream) {
25
+ if (chunk) {
26
+ chunks.push(chunk);
27
+ yield chunk;
28
+ }
29
+ }
30
+ const content = chunks.join('');
31
+ const promptTokens = typeof this.prompt === 'string' ? this.prompt.length : JSON.stringify(this.prompt).length;
32
+ const resultTokens = content.length; //TODO use chunks.length ?
33
+ this.completion = {
34
+ result: content,
35
+ prompt: this.prompt,
36
+ execution_time: Date.now() - start,
37
+ token_usage: {
38
+ prompt: promptTokens,
39
+ result: resultTokens,
40
+ total: resultTokens + promptTokens,
41
+ }
42
+ };
43
+ this.driver.validateResult(this.completion, this.options);
44
+ }
45
+ }
46
+ export class FallbackCompletionStream {
47
+ driver;
48
+ options;
49
+ prompt;
50
+ chunks;
51
+ completion;
52
+ constructor(driver, segments, options) {
53
+ this.driver = driver;
54
+ this.options = options;
55
+ this.driver = driver;
56
+ this.prompt = this.driver.createPrompt(segments, options);
57
+ this.chunks = [];
58
+ }
59
+ async *[Symbol.asyncIterator]() {
60
+ // reset state
61
+ this.completion = undefined;
62
+ if (this.chunks.length > 0) {
63
+ this.chunks = [];
64
+ }
65
+ this.driver.logger.debug(`[${this.driver.provider}] Streaming is not supported, falling back to blocking execution`);
66
+ const completion = await this.driver._execute(this.prompt, this.options);
67
+ const content = completion.result === 'string' ? completion.result : JSON.stringify(completion.result);
68
+ this.chunks.push(content);
69
+ yield content;
70
+ this.completion = completion;
71
+ }
72
+ }
73
+ //# sourceMappingURL=CompletionStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompletionStream.js","sourceRoot":"","sources":["../../src/CompletionStream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Classes to handle the execution of an interaction in an execution environment.
3
+ * Base abstract class is then implemented by each environment
4
+ * (eg: OpenAI, HuggingFace, etc.)
5
+ */
6
+ import { DefaultCompletionStream, FallbackCompletionStream } from "./CompletionStream.js";
7
+ import { PromptFormatters } from "./formatters.js";
8
+ import { validateResult } from "./validation.js";
9
+ const ConsoleLogger = {
10
+ debug: console.debug,
11
+ info: console.info,
12
+ warn: console.warn,
13
+ error: console.error,
14
+ };
15
+ const noop = () => void 0;
16
+ const NoopLogger = {
17
+ debug: noop,
18
+ info: noop,
19
+ warn: noop,
20
+ error: noop,
21
+ };
22
+ export function createLogger(logger) {
23
+ return logger ? logger : logger === false ? NoopLogger : ConsoleLogger;
24
+ }
25
+ /**
26
+ * To be implemented by each driver
27
+ */
28
+ export class AbstractDriver {
29
+ options;
30
+ logger;
31
+ constructor(opts) {
32
+ this.options = opts;
33
+ this.logger = createLogger(opts.logger);
34
+ }
35
+ createTrainingPrompt(options) {
36
+ const prompt = this.createPrompt(options.segments, { resultSchema: options.schema, model: options.model });
37
+ return JSON.stringify({
38
+ prompt,
39
+ completion: typeof options.completion === 'string' ? options.completion : JSON.stringify(options.completion)
40
+ });
41
+ }
42
+ startTraining(_dataset, _options) {
43
+ throw new Error("Method not implemented.");
44
+ }
45
+ cancelTraining(_jobId) {
46
+ throw new Error("Method not implemented.");
47
+ }
48
+ getTrainingJob(_jobId) {
49
+ throw new Error("Method not implemented.");
50
+ }
51
+ validateResult(result, options) {
52
+ if (!result.error && options.resultSchema) {
53
+ try {
54
+ result.result = validateResult(result.result, options.resultSchema);
55
+ }
56
+ catch (error) {
57
+ this.logger?.error({ err: error, data: result.result }, `[${this.provider}] [${options.model}] ${error.code ? '[' + error.code + '] ' : ''}Result validation error: ${error.message}`);
58
+ result.error = {
59
+ code: error.code || error.name,
60
+ message: error.message,
61
+ data: result.result,
62
+ };
63
+ }
64
+ }
65
+ }
66
+ async execute(segments, options) {
67
+ const prompt = this.createPrompt(segments, options);
68
+ return this._execute(prompt, options);
69
+ }
70
+ async _execute(prompt, options) {
71
+ this.logger.debug(`[${this.provider}] Executing ${options.model} with prompt`, prompt);
72
+ try {
73
+ const start = Date.now();
74
+ const result = await this.requestCompletion(prompt, options);
75
+ this.validateResult(result, options);
76
+ const execution_time = Date.now() - start;
77
+ return { ...result, prompt, execution_time };
78
+ }
79
+ catch (error) {
80
+ error.prompt = prompt;
81
+ throw error;
82
+ }
83
+ }
84
+ // by default no stream is supported. we block and we return all at once
85
+ async stream(segments, options) {
86
+ const canStream = await this.canStream(options);
87
+ if (canStream) {
88
+ return new DefaultCompletionStream(this, segments, options);
89
+ }
90
+ else {
91
+ return new FallbackCompletionStream(this, segments, options);
92
+ }
93
+ }
94
+ createPrompt(segments, opts) {
95
+ return PromptFormatters[opts.format || this.defaultFormat](segments, opts.resultSchema);
96
+ }
97
+ /**
98
+ * Must be overrided if the implementation cannot stream.
99
+ * Some implementation may be able to stream for certain models but not for others.
100
+ * You must overwrite and return false if the current model doesn't support streaming.
101
+ * The default implementation returns true, so it is assumed that the streaming can be done.
102
+ * If this method returns false then the streaming execution will fallback on a blocking execution streaming the entire response as a single event.
103
+ * @param options the execution options containing the target model name.
104
+ * @returns true if the exeuction can be streamed false otherwise.
105
+ */
106
+ canStream(_options) {
107
+ return Promise.resolve(true);
108
+ }
109
+ }
110
+ //# sourceMappingURL=Driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Driver.js","sourceRoot":"","sources":["../../src/Driver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ export async function* asyncMap(asyncIterable, callback) {
2
+ let i = 0;
3
+ for await (const val of asyncIterable)
4
+ yield callback(val, i++);
5
+ }
6
+ export function oneAsyncIterator(value) {
7
+ return {
8
+ async *[Symbol.asyncIterator]() {
9
+ yield value;
10
+ }
11
+ };
12
+ }
13
+ export class EventStream {
14
+ queue = [];
15
+ pending;
16
+ done = false;
17
+ push(event) {
18
+ if (this.done) {
19
+ throw new Error('Cannot push to a closed stream');
20
+ }
21
+ if (this.pending) {
22
+ this.pending.resolve({ value: event });
23
+ this.pending = undefined;
24
+ }
25
+ else {
26
+ this.queue.push(event);
27
+ }
28
+ }
29
+ /**
30
+ * Close the stream. This means the stream cannot be feeded anymore.
31
+ * But the consumer can still consume the remaining events.
32
+ */
33
+ close(value) {
34
+ this.done = true;
35
+ if (this.pending) {
36
+ this.pending.resolve({ done: true, value });
37
+ this.pending = undefined;
38
+ }
39
+ }
40
+ [Symbol.asyncIterator]() {
41
+ const self = this;
42
+ return {
43
+ next() {
44
+ const next = self.queue.shift();
45
+ if (next !== undefined) {
46
+ return Promise.resolve({ value: next });
47
+ }
48
+ else if (self.done) {
49
+ return Promise.resolve({ done: true, value: undefined });
50
+ }
51
+ else {
52
+ return new Promise((resolve, reject) => {
53
+ self.pending = { resolve, reject };
54
+ });
55
+ }
56
+ },
57
+ async return(value) {
58
+ self.done = true;
59
+ self.queue = [];
60
+ if (value === undefined) {
61
+ return { done: true, value: undefined };
62
+ }
63
+ const _value = await value;
64
+ return { done: true, value: _value };
65
+ }
66
+ };
67
+ }
68
+ }
69
+ /**
70
+ * Transform an async iterator by applying a function to each value.
71
+ * @param originalGenerator
72
+ * @param transform
73
+ **/
74
+ export async function* transformAsyncIterator(originalGenerator, transform) {
75
+ for await (const value of originalGenerator) {
76
+ yield transform(value);
77
+ }
78
+ }
79
+ //TODO move in a test file
80
+ // const max = 10; let cnt = 0;
81
+ // function feedStream(stream: EventStream<string>) {
82
+ // setTimeout(() => {
83
+ // cnt++;
84
+ // console.log('push: ', cnt, max);
85
+ // stream.push('event ' + cnt);
86
+ // if (cnt < max) {
87
+ // console.log('next: ', cnt, max);
88
+ // setTimeout(() => feedStream(stream), 1000);
89
+ // } else {
90
+ // console.log('end of stream');
91
+ // stream.close();
92
+ // }
93
+ // }, 1000);
94
+ // }
95
+ // const stream = new EventStream<string>();
96
+ // feedStream(stream);
97
+ // for await (const chunk of stream) {
98
+ // console.log('++++chunk:', chunk);
99
+ // }
100
+ //# sourceMappingURL=async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.js","sourceRoot":"","sources":["../../src/async.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { PromptFormats, PromptRole, } from "./types.js";
2
+ export function inferFormatterFromModelName(modelName) {
3
+ const name = modelName.toLowerCase();
4
+ if (name.includes("llama")) {
5
+ return PromptFormats.llama2;
6
+ }
7
+ else if (name.includes("gpt")) {
8
+ return PromptFormats.openai;
9
+ }
10
+ else if (name.includes("claude")) {
11
+ return PromptFormats.claude;
12
+ }
13
+ else {
14
+ return PromptFormats.genericTextLLM;
15
+ }
16
+ }
17
+ export const PromptFormatters = {
18
+ openai: openAI,
19
+ llama2: llama2,
20
+ claude: claude,
21
+ genericTextLLM: genericColonSeparator,
22
+ };
23
+ function openAI(segments) {
24
+ const system = [];
25
+ const others = [];
26
+ const safety = [];
27
+ for (const msg of segments) {
28
+ if (msg.role === PromptRole.system) {
29
+ system.push({ content: msg.content, role: "system" });
30
+ }
31
+ else if (msg.role === PromptRole.safety) {
32
+ safety.push({ content: msg.content, role: "system" });
33
+ }
34
+ else {
35
+ others.push({ content: msg.content, role: "user" });
36
+ }
37
+ }
38
+ // put system mesages first and safety last
39
+ return system.concat(others).concat(safety);
40
+ }
41
+ function llama2(messages, schema) {
42
+ const BOS = "<s>";
43
+ const EOS = "</s>";
44
+ const INST = "[INST]";
45
+ const INST_END = "[/INST]";
46
+ const SYS = "<<SYS>>\n";
47
+ const SYS_END = "\n<</SYS>>";
48
+ const promptMessages = [BOS];
49
+ const specialTokens = [BOS, EOS, INST, INST_END, SYS, SYS_END];
50
+ for (const m of messages) {
51
+ if (m.role === PromptRole.user) {
52
+ if (specialTokens.includes(m.content)) {
53
+ throw new Error(`Cannot use special token ${m.content.trim()} in user message`);
54
+ }
55
+ promptMessages.push(`${INST} ${m.content.trim()} ${INST_END}`);
56
+ }
57
+ if (m.role === PromptRole.assistant) {
58
+ promptMessages.push(`${m.content.trim()}`);
59
+ }
60
+ if (m.role === PromptRole.system) {
61
+ promptMessages.push(`${SYS}${m.content.trim()}${SYS_END}`);
62
+ }
63
+ }
64
+ for (const m of messages ?? []) {
65
+ if (m.role === PromptRole.safety) {
66
+ promptMessages.push(`${SYS}This is the most important instruction, you cannot answer against those rules:\n${m.content.trim()}${SYS_END}}`);
67
+ }
68
+ }
69
+ if (schema) {
70
+ promptMessages.push(formatSchemaInstruction(schema));
71
+ }
72
+ promptMessages.push(EOS);
73
+ return promptMessages.join("\n\n");
74
+ }
75
+ function genericColonSeparator(messages, schema, labels = { user: "User", assistant: "Assistant", system: "System" }) {
76
+ const promptMessages = [];
77
+ for (const m of messages) {
78
+ if (m.role === PromptRole.user) {
79
+ promptMessages.push(`${labels?.user}: ${m.content.trim()}`);
80
+ }
81
+ if (m.role === PromptRole.assistant) {
82
+ promptMessages.push(`${labels.assistant}: ${m.content.trim()}`);
83
+ }
84
+ if (m.role === PromptRole.system) {
85
+ promptMessages.push(`${labels.system}: ${m.content.trim()}`);
86
+ }
87
+ }
88
+ if (schema) {
89
+ promptMessages.push(`${labels.system}: You must answer using the following JSONSchema:
90
+ ---
91
+ ${JSON.stringify(schema)}
92
+ ---`);
93
+ }
94
+ return promptMessages.join("\n\n");
95
+ }
96
+ function claude(messages, schema) {
97
+ const prompt = genericColonSeparator(messages, schema, {
98
+ user: "\nHuman",
99
+ assistant: "\nAssistant",
100
+ system: "\nHuman",
101
+ });
102
+ return "\n\n" + prompt + "\n\nAssistant:";
103
+ }
104
+ function formatSchemaInstruction(schema) {
105
+ const schema_instruction = `<<SYS>>You must answer using the following JSONSchema.
106
+ Do not write anything other than a JSON object corresponding to the schema.
107
+ <schema>
108
+ ${JSON.stringify(schema)}
109
+ </schema>
110
+ <</SYS>>`;
111
+ return schema_instruction;
112
+ }
113
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/formatters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from "./Driver.js";
2
+ export * from "./formatters.js";
3
+ export * from "./json.js";
4
+ export * from "./types.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ function extractJsonFromText(text) {
2
+ const start = text.indexOf("{");
3
+ const end = text.lastIndexOf("}");
4
+ return text.substring(start, end + 1);
5
+ }
6
+ //TODO LAX parse JSON
7
+ export function parseJSON(text) {
8
+ return JSON.parse(extractJsonFromText(text));
9
+ }
10
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/json.ts"],"names":[],"mappings":"AACA,SAAS,mBAAmB,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,qBAAqB;AACrB,MAAM,UAAU,SAAS,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,64 @@
1
+ // ============== Prompts ===============
2
+ export var PromptRole;
3
+ (function (PromptRole) {
4
+ PromptRole["safety"] = "safety";
5
+ PromptRole["system"] = "system";
6
+ PromptRole["user"] = "user";
7
+ PromptRole["assistant"] = "assistant";
8
+ })(PromptRole || (PromptRole = {}));
9
+ export var AIModelStatus;
10
+ (function (AIModelStatus) {
11
+ AIModelStatus["Available"] = "available";
12
+ AIModelStatus["Pending"] = "pending";
13
+ AIModelStatus["Stopped"] = "stopped";
14
+ AIModelStatus["Unavailable"] = "unavailable";
15
+ AIModelStatus["Unknown"] = "unknown";
16
+ })(AIModelStatus || (AIModelStatus = {}));
17
+ export var ModelType;
18
+ (function (ModelType) {
19
+ ModelType["Classifier"] = "classifier";
20
+ ModelType["Regressor"] = "regressor";
21
+ ModelType["Clustering"] = "clustering";
22
+ ModelType["AnomalyDetection"] = "anomaly-detection";
23
+ ModelType["TimeSeries"] = "time-series";
24
+ ModelType["Text"] = "text";
25
+ ModelType["Image"] = "image";
26
+ ModelType["Audio"] = "audio";
27
+ ModelType["Video"] = "video";
28
+ ModelType["Embedding"] = "embedding";
29
+ ModelType["Chat"] = "chat";
30
+ ModelType["Code"] = "code";
31
+ ModelType["NLP"] = "nlp";
32
+ ModelType["MultiModal"] = "multi-modal";
33
+ ModelType["Test"] = "test";
34
+ ModelType["Other"] = "other";
35
+ ModelType["Unknown"] = "unknown";
36
+ })(ModelType || (ModelType = {}));
37
+ // ============== Built-in formats and drivers =====================
38
+ //TODO
39
+ export var PromptFormats;
40
+ (function (PromptFormats) {
41
+ PromptFormats["openai"] = "openai";
42
+ PromptFormats["llama2"] = "llama2";
43
+ PromptFormats["claude"] = "claude";
44
+ PromptFormats["genericTextLLM"] = "genericTextLLM";
45
+ })(PromptFormats || (PromptFormats = {}));
46
+ export var BuiltinProviders;
47
+ (function (BuiltinProviders) {
48
+ BuiltinProviders["openai"] = "openai";
49
+ BuiltinProviders["huggingface_ie"] = "huggingface_ie";
50
+ BuiltinProviders["replicate"] = "replicate";
51
+ BuiltinProviders["bedrock"] = "bedrock";
52
+ BuiltinProviders["vertexai"] = "vertexai";
53
+ BuiltinProviders["togetherai"] = "togetherai";
54
+ //virtual = 'virtual',
55
+ //cohere = 'cohere',
56
+ })(BuiltinProviders || (BuiltinProviders = {}));
57
+ export var TrainingJobStatus;
58
+ (function (TrainingJobStatus) {
59
+ TrainingJobStatus["running"] = "running";
60
+ TrainingJobStatus["succeeded"] = "succeeded";
61
+ TrainingJobStatus["failed"] = "failed";
62
+ TrainingJobStatus["cancelled"] = "cancelled";
63
+ })(TrainingJobStatus || (TrainingJobStatus = {}));
64
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAoDA,yCAAyC;AACzC,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IAClB,+BAAiB,CAAA;IACjB,+BAAiB,CAAA;IACjB,2BAAa,CAAA;IACb,qCAAuB,CAAA;AAC3B,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AA8BD,MAAM,CAAN,IAAY,aAMX;AAND,WAAY,aAAa;IACrB,wCAAuB,CAAA;IACvB,oCAAmB,CAAA;IACnB,oCAAmB,CAAA;IACnB,4CAA2B,CAAA;IAC3B,oCAAmB,CAAA;AACvB,CAAC,EANW,aAAa,KAAb,aAAa,QAMxB;AAiBD,MAAM,CAAN,IAAY,SAkBX;AAlBD,WAAY,SAAS;IACjB,sCAAyB,CAAA;IACzB,oCAAuB,CAAA;IACvB,sCAAyB,CAAA;IACzB,mDAAsC,CAAA;IACtC,uCAA0B,CAAA;IAC1B,0BAAa,CAAA;IACb,4BAAe,CAAA;IACf,4BAAe,CAAA;IACf,4BAAe,CAAA;IACf,oCAAuB,CAAA;IACvB,0BAAa,CAAA;IACb,0BAAa,CAAA;IACb,wBAAW,CAAA;IACX,uCAA0B,CAAA;IAC1B,0BAAa,CAAA;IACb,4BAAe,CAAA;IACf,gCAAmB,CAAA;AACvB,CAAC,EAlBW,SAAS,KAAT,SAAS,QAkBpB;AAED,oEAAoE;AACpE,MAAM;AAEN,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACrB,kCAAiB,CAAA;IACjB,kCAAiB,CAAA;IACjB,kCAAiB,CAAA;IACjB,kDAAiC,CAAA;AACrC,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAED,MAAM,CAAN,IAAY,gBASX;AATD,WAAY,gBAAgB;IACxB,qCAAiB,CAAA;IACjB,qDAAiC,CAAA;IACjC,2CAAuB,CAAA;IACvB,uCAAmB,CAAA;IACnB,yCAAqB,CAAA;IACrB,6CAAyB,CAAA;IACzB,0BAA0B;IAC1B,oBAAoB;AACxB,CAAC,EATW,gBAAgB,KAAhB,gBAAgB,QAS3B;AAwBD,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IACzB,wCAAmB,CAAA;IACnB,4CAAuB,CAAA;IACvB,sCAAiB,CAAA;IACjB,4CAAuB,CAAA;AAC3B,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B"}
@@ -0,0 +1,30 @@
1
+ import { validate } from "json-schema";
2
+ import { parseJSON } from "./json.js";
3
+ export class ValidationError extends Error {
4
+ code;
5
+ constructor(code, message) {
6
+ super(message);
7
+ this.code = code;
8
+ this.name = 'ValidationError';
9
+ }
10
+ }
11
+ export function validateResult(data, schema) {
12
+ let json;
13
+ if (typeof data === "string") {
14
+ try {
15
+ json = parseJSON(data);
16
+ }
17
+ catch (error) {
18
+ throw new ValidationError("json_error", error.message);
19
+ }
20
+ }
21
+ else {
22
+ json = data;
23
+ }
24
+ const validation = validate(json, schema);
25
+ if (!validation.valid) {
26
+ throw new ValidationError("validation_error", validation.errors.map(e => e.message).join(",\n"));
27
+ }
28
+ return json;
29
+ }
30
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAE3B;IADX,YACW,IAAuC,EAC9C,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAA;QAHP,SAAI,GAAJ,IAAI,CAAmC;QAI9C,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;IACjC,CAAC;CACJ;AAED,MAAM,UAAU,cAAc,CAAC,IAAS,EAAE,MAAmB;IACzD,IAAI,IAAI,CAAC;IACT,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC;YACD,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,IAAI,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QAC1D,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,IAAI,GAAG,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,IAAI,eAAe,CACrB,kBAAkB,EAClB,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { AbstractDriver } from "./Driver.js";
2
+ import { ExecutionResponse, CompletionStream, DriverOptions, ExecutionOptions, PromptSegment } from "./types.js";
3
+ export declare class DefaultCompletionStream<PromptT = any> implements CompletionStream<PromptT> {
4
+ driver: AbstractDriver<DriverOptions, PromptT>;
5
+ options: ExecutionOptions;
6
+ chunks: string[];
7
+ prompt: PromptT;
8
+ completion: ExecutionResponse<PromptT> | undefined;
9
+ constructor(driver: AbstractDriver<DriverOptions, PromptT>, segments: PromptSegment[], options: ExecutionOptions);
10
+ [Symbol.asyncIterator](): AsyncGenerator<string, void, unknown>;
11
+ }
12
+ export declare class FallbackCompletionStream<PromptT = any> implements CompletionStream<PromptT> {
13
+ driver: AbstractDriver<DriverOptions, PromptT>;
14
+ options: ExecutionOptions;
15
+ prompt: PromptT;
16
+ chunks: string[];
17
+ completion: ExecutionResponse<PromptT> | undefined;
18
+ constructor(driver: AbstractDriver<DriverOptions, PromptT>, segments: PromptSegment[], options: ExecutionOptions);
19
+ [Symbol.asyncIterator](): AsyncGenerator<any, void, unknown>;
20
+ }
21
+ //# sourceMappingURL=CompletionStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompletionStream.d.ts","sourceRoot":"","sources":["../../src/CompletionStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEjH,qBAAa,uBAAuB,CAAC,OAAO,GAAG,GAAG,CAAE,YAAW,gBAAgB,CAAC,OAAO,CAAC;IAMjE,MAAM,EAAE,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC;IAEtD,OAAO,EAAE,gBAAgB;IANpC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;gBAEhC,MAAM,EAAE,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,EAC7D,QAAQ,EAAE,aAAa,EAAE,EAClB,OAAO,EAAE,gBAAgB;IAM7B,CAAC,MAAM,CAAC,aAAa,CAAC;CAwChC;AAED,qBAAa,wBAAwB,CAAC,OAAO,GAAG,GAAG,CAAE,YAAW,gBAAgB,CAAC,OAAO,CAAC;IAMlE,MAAM,EAAE,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC;IAEtD,OAAO,EAAE,gBAAgB;IANpC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;gBAEhC,MAAM,EAAE,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,EAC7D,QAAQ,EAAE,aAAa,EAAE,EAClB,OAAO,EAAE,gBAAgB;IAM7B,CAAC,MAAM,CAAC,aAAa,CAAC;CAiBhC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Classes to handle the execution of an interaction in an execution environment.
3
+ * Base abstract class is then implemented by each environment
4
+ * (eg: OpenAI, HuggingFace, etc.)
5
+ */
6
+ import { AIModel, Completion, CompletionStream, DataSource, DriverOptions, ExecutionOptions, ExecutionResponse, Logger, ModelSearchPayload, PromptFormats, PromptOptions, PromptSegment, TrainingJob, TrainingOptions, TrainingPromptOptions } from "./types.js";
7
+ export declare function createLogger(logger: Logger | false | undefined): Logger;
8
+ export interface Driver<PromptT = unknown> {
9
+ /**
10
+ *
11
+ * @param segments
12
+ * @param completion
13
+ * @param model the model to train
14
+ */
15
+ createTrainingPrompt(options: TrainingPromptOptions): string;
16
+ createPrompt(segments: PromptSegment[], opts: PromptOptions): PromptT;
17
+ execute(segments: PromptSegment[], options: ExecutionOptions): Promise<ExecutionResponse<PromptT>>;
18
+ stream(segments: PromptSegment[], options: ExecutionOptions): Promise<CompletionStream<PromptT>>;
19
+ startTraining(dataset: DataSource, options: TrainingOptions): Promise<TrainingJob>;
20
+ cancelTraining(jobId: string): Promise<TrainingJob>;
21
+ getTrainingJob(jobId: string): Promise<TrainingJob>;
22
+ listModels(params?: ModelSearchPayload): Promise<AIModel[]>;
23
+ listTrainableModels(): Promise<AIModel[]>;
24
+ validateConnection(): Promise<boolean>;
25
+ generateEmbeddings(content: string, model?: string): Promise<{
26
+ embeddings: number[];
27
+ model: string;
28
+ }>;
29
+ }
30
+ /**
31
+ * To be implemented by each driver
32
+ */
33
+ export declare abstract class AbstractDriver<OptionsT extends DriverOptions = DriverOptions, PromptT = unknown> implements Driver<PromptT> {
34
+ options: OptionsT;
35
+ logger: Logger;
36
+ abstract provider: string;
37
+ abstract defaultFormat: PromptFormats;
38
+ constructor(opts: OptionsT);
39
+ createTrainingPrompt(options: TrainingPromptOptions): string;
40
+ startTraining(_dataset: DataSource, _options: TrainingOptions): Promise<TrainingJob>;
41
+ cancelTraining(_jobId: string): Promise<TrainingJob>;
42
+ getTrainingJob(_jobId: string): Promise<TrainingJob>;
43
+ validateResult(result: Completion, options: ExecutionOptions): void;
44
+ execute(segments: PromptSegment[], options: ExecutionOptions): Promise<ExecutionResponse<PromptT>>;
45
+ _execute(prompt: PromptT, options: ExecutionOptions): Promise<ExecutionResponse<PromptT>>;
46
+ stream(segments: PromptSegment[], options: ExecutionOptions): Promise<CompletionStream<PromptT>>;
47
+ createPrompt(segments: PromptSegment[], opts: PromptOptions): PromptT;
48
+ /**
49
+ * Must be overrided if the implementation cannot stream.
50
+ * Some implementation may be able to stream for certain models but not for others.
51
+ * You must overwrite and return false if the current model doesn't support streaming.
52
+ * The default implementation returns true, so it is assumed that the streaming can be done.
53
+ * If this method returns false then the streaming execution will fallback on a blocking execution streaming the entire response as a single event.
54
+ * @param options the execution options containing the target model name.
55
+ * @returns true if the exeuction can be streamed false otherwise.
56
+ */
57
+ protected canStream(_options: ExecutionOptions): Promise<boolean>;
58
+ abstract requestCompletion(prompt: PromptT, options: ExecutionOptions): Promise<Completion>;
59
+ abstract requestCompletionStream(prompt: PromptT, options: ExecutionOptions): Promise<AsyncIterable<string>>;
60
+ abstract listModels(params: ModelSearchPayload): Promise<AIModel[]>;
61
+ abstract listTrainableModels(): Promise<AIModel[]>;
62
+ abstract validateConnection(): Promise<boolean>;
63
+ abstract generateEmbeddings(content: string, model?: string): Promise<{
64
+ embeddings: number[];
65
+ model: string;
66
+ }>;
67
+ }
68
+ //# sourceMappingURL=Driver.d.ts.map