@llumiverse/core 0.25.0 → 0.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/lib/cjs/CompletionStream.js +244 -0
  2. package/lib/cjs/CompletionStream.js.map +1 -0
  3. package/lib/cjs/Driver.js +194 -0
  4. package/lib/cjs/Driver.js.map +1 -0
  5. package/lib/cjs/async.js +131 -0
  6. package/lib/cjs/async.js.map +1 -0
  7. package/lib/cjs/conversation-utils.js +457 -0
  8. package/lib/cjs/conversation-utils.js.map +1 -0
  9. package/lib/cjs/formatters/commons.js +7 -0
  10. package/lib/cjs/formatters/commons.js.map +1 -0
  11. package/lib/cjs/formatters/generic.js +59 -0
  12. package/lib/cjs/formatters/generic.js.map +1 -0
  13. package/lib/cjs/formatters/index.js +20 -0
  14. package/lib/cjs/formatters/index.js.map +1 -0
  15. package/lib/cjs/formatters/nova.js +99 -0
  16. package/lib/cjs/formatters/nova.js.map +1 -0
  17. package/lib/cjs/index.js +22 -0
  18. package/lib/cjs/index.js.map +1 -0
  19. package/lib/cjs/json.js +29 -0
  20. package/lib/cjs/json.js.map +1 -0
  21. package/lib/cjs/package.json +3 -0
  22. package/lib/cjs/resolver.js +45 -0
  23. package/lib/cjs/resolver.js.map +1 -0
  24. package/lib/cjs/stream.js +30 -0
  25. package/lib/cjs/stream.js.map +1 -0
  26. package/lib/cjs/validation.js +96 -0
  27. package/lib/cjs/validation.js.map +1 -0
  28. package/lib/esm/CompletionStream.js +239 -0
  29. package/lib/esm/CompletionStream.js.map +1 -0
  30. package/lib/esm/Driver.js +189 -0
  31. package/lib/esm/Driver.js.map +1 -0
  32. package/lib/esm/async.js +123 -0
  33. package/lib/esm/async.js.map +1 -0
  34. package/lib/esm/conversation-utils.js +447 -0
  35. package/lib/esm/conversation-utils.js.map +1 -0
  36. package/lib/esm/formatters/commons.js +4 -0
  37. package/lib/esm/formatters/commons.js.map +1 -0
  38. package/lib/esm/formatters/generic.js +55 -0
  39. package/lib/esm/formatters/generic.js.map +1 -0
  40. package/lib/esm/formatters/index.js +4 -0
  41. package/lib/esm/formatters/index.js.map +1 -0
  42. package/lib/esm/formatters/nova.js +96 -0
  43. package/lib/esm/formatters/nova.js.map +1 -0
  44. package/lib/esm/index.js +6 -0
  45. package/lib/esm/index.js.map +1 -0
  46. package/lib/esm/json.js +25 -0
  47. package/lib/esm/json.js.map +1 -0
  48. package/lib/esm/resolver.js +42 -0
  49. package/lib/esm/resolver.js.map +1 -0
  50. package/lib/esm/stream.js +25 -0
  51. package/lib/esm/stream.js.map +1 -0
  52. package/lib/esm/validation.js +88 -0
  53. package/lib/esm/validation.js.map +1 -0
  54. package/lib/types/CompletionStream.d.ts +20 -0
  55. package/lib/types/CompletionStream.d.ts.map +1 -0
  56. package/lib/types/Driver.d.ts +86 -0
  57. package/lib/types/Driver.d.ts.map +1 -0
  58. package/lib/types/async.d.ts +27 -0
  59. package/lib/types/async.d.ts.map +1 -0
  60. package/lib/types/conversation-utils.d.ts +112 -0
  61. package/lib/types/conversation-utils.d.ts.map +1 -0
  62. package/lib/types/formatters/commons.d.ts +3 -0
  63. package/lib/types/formatters/commons.d.ts.map +1 -0
  64. package/lib/types/formatters/generic.d.ts +13 -0
  65. package/lib/types/formatters/generic.d.ts.map +1 -0
  66. package/lib/types/formatters/index.d.ts +4 -0
  67. package/lib/types/formatters/index.d.ts.map +1 -0
  68. package/lib/types/formatters/nova.d.ts +40 -0
  69. package/lib/types/formatters/nova.d.ts.map +1 -0
  70. package/lib/types/index.d.ts +6 -0
  71. package/lib/types/index.d.ts.map +1 -0
  72. package/lib/types/json.d.ts +4 -0
  73. package/lib/types/json.d.ts.map +1 -0
  74. package/lib/types/resolver.d.ts +2 -0
  75. package/lib/types/resolver.d.ts.map +1 -0
  76. package/lib/types/stream.d.ts +4 -0
  77. package/lib/types/stream.d.ts.map +1 -0
  78. package/lib/types/validation.d.ts +7 -0
  79. package/lib/types/validation.d.ts.map +1 -0
  80. package/package.json +2 -2
@@ -0,0 +1,189 @@
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 { formatTextPrompt } from "./formatters/index.js";
8
+ import { Modalities } from "@llumiverse/common";
9
+ import { validateResult } from "./validation.js";
10
+ // Helper to create logger methods that support both message-only and object-first signatures
11
+ function createConsoleLoggerMethod(consoleMethod) {
12
+ return ((objOrMsg, msgOrNever, ...args) => {
13
+ if (typeof objOrMsg === 'string') {
14
+ // Message-only: logger.info("message", ...args)
15
+ consoleMethod(objOrMsg, msgOrNever, ...args);
16
+ }
17
+ else if (msgOrNever !== undefined) {
18
+ // Object-first: logger.info({ obj }, "message", ...args)
19
+ consoleMethod(msgOrNever, objOrMsg, ...args);
20
+ }
21
+ else {
22
+ // Object-only: logger.info({ obj })
23
+ consoleMethod(objOrMsg, ...args);
24
+ }
25
+ });
26
+ }
27
+ const ConsoleLogger = {
28
+ debug: createConsoleLoggerMethod(console.debug.bind(console)),
29
+ info: createConsoleLoggerMethod(console.info.bind(console)),
30
+ warn: createConsoleLoggerMethod(console.warn.bind(console)),
31
+ error: createConsoleLoggerMethod(console.error.bind(console)),
32
+ };
33
+ const noop = () => void 0;
34
+ const NoopLogger = {
35
+ debug: noop,
36
+ info: noop,
37
+ warn: noop,
38
+ error: noop,
39
+ };
40
+ export function createLogger(logger) {
41
+ if (logger === "console") {
42
+ return ConsoleLogger;
43
+ }
44
+ else if (logger) {
45
+ return logger;
46
+ }
47
+ else {
48
+ return NoopLogger;
49
+ }
50
+ }
51
+ /**
52
+ * To be implemented by each driver
53
+ */
54
+ export class AbstractDriver {
55
+ options;
56
+ logger;
57
+ constructor(opts) {
58
+ this.options = opts;
59
+ this.logger = createLogger(opts.logger);
60
+ }
61
+ async createTrainingPrompt(options) {
62
+ const prompt = await this.createPrompt(options.segments, { result_schema: options.schema, model: options.model });
63
+ return JSON.stringify({
64
+ prompt,
65
+ completion: typeof options.completion === 'string' ? options.completion : JSON.stringify(options.completion)
66
+ });
67
+ }
68
+ startTraining(_dataset, _options) {
69
+ throw new Error("Method not implemented.");
70
+ }
71
+ cancelTraining(_jobId) {
72
+ throw new Error("Method not implemented.");
73
+ }
74
+ getTrainingJob(_jobId) {
75
+ throw new Error("Method not implemented.");
76
+ }
77
+ validateResult(result, options) {
78
+ if (!result.tool_use && !result.error && options.result_schema) {
79
+ try {
80
+ result.result = validateResult(result.result, options.result_schema);
81
+ }
82
+ catch (error) {
83
+ const errorMessage = `[${this.provider}] [${options.model}] ${error.code ? '[' + error.code + '] ' : ''}Result validation error: ${error.message}`;
84
+ this.logger.error({ err: error, data: result.result }, errorMessage);
85
+ result.error = {
86
+ code: error.code || error.name,
87
+ message: error.message,
88
+ data: result.result,
89
+ };
90
+ }
91
+ }
92
+ }
93
+ async execute(segments, options) {
94
+ const prompt = await this.createPrompt(segments, options);
95
+ return this._execute(prompt, options).catch((error) => {
96
+ error.prompt = prompt;
97
+ throw error;
98
+ });
99
+ }
100
+ async _execute(prompt, options) {
101
+ try {
102
+ const start = Date.now();
103
+ let result;
104
+ if (this.isImageModel(options.model)) {
105
+ this.logger.debug(`[${this.provider}] Executing prompt on ${options.model}, image pathway.`);
106
+ result = await this.requestImageGeneration(prompt, options);
107
+ }
108
+ else {
109
+ this.logger.debug(`[${this.provider}] Executing prompt on ${options.model}, text pathway.`);
110
+ result = await this.requestTextCompletion(prompt, options);
111
+ this.validateResult(result, options);
112
+ }
113
+ const execution_time = Date.now() - start;
114
+ return { ...result, prompt, execution_time };
115
+ }
116
+ catch (error) {
117
+ error.prompt = prompt;
118
+ throw error;
119
+ }
120
+ }
121
+ isImageModel(_model) {
122
+ return false;
123
+ }
124
+ // by default no stream is supported. we block and we return all at once
125
+ async stream(segments, options) {
126
+ const prompt = await this.createPrompt(segments, options);
127
+ const canStream = await this.canStream(options);
128
+ if (options.output_modality === Modalities.text && canStream) {
129
+ return new DefaultCompletionStream(this, prompt, options);
130
+ }
131
+ else if (this.isImageModel(options.model)) {
132
+ return new FallbackCompletionStream(this, prompt, options);
133
+ }
134
+ else {
135
+ return new FallbackCompletionStream(this, prompt, options);
136
+ }
137
+ }
138
+ /**
139
+ * Override this method to provide a custom prompt formatter
140
+ * @param segments
141
+ * @param options
142
+ * @returns
143
+ */
144
+ async formatPrompt(segments, opts) {
145
+ return formatTextPrompt(segments, opts.result_schema);
146
+ }
147
+ async createPrompt(segments, opts) {
148
+ return await (opts.format ? opts.format(segments, opts.result_schema) : this.formatPrompt(segments, opts));
149
+ }
150
+ /**
151
+ * Must be overridden if the implementation cannot stream.
152
+ * Some implementation may be able to stream for certain models but not for others.
153
+ * You must overwrite and return false if the current model doesn't support streaming.
154
+ * The default implementation returns true, so it is assumed that the streaming can be done.
155
+ * If this method returns false then the streaming execution will fallback on a blocking execution streaming the entire response as a single event.
156
+ * @param options the execution options containing the target model name.
157
+ * @returns true if the execution can be streamed false otherwise.
158
+ */
159
+ canStream(_options) {
160
+ return Promise.resolve(true);
161
+ }
162
+ /**
163
+ * Get a list of models that can be trained.
164
+ * The default is to return an empty array
165
+ * @returns
166
+ */
167
+ async listTrainableModels() {
168
+ return [];
169
+ }
170
+ /**
171
+ * Build the conversation context after streaming completion.
172
+ * Override this in driver implementations that support multi-turn conversations.
173
+ *
174
+ * @param prompt - The prompt that was sent (includes prior conversation context)
175
+ * @param result - The completion results from the streamed response
176
+ * @param toolUse - The tool calls from the streamed response (if any)
177
+ * @param options - The execution options
178
+ * @returns The updated conversation context, or undefined if not supported
179
+ */
180
+ buildStreamingConversation(_prompt, _result, _toolUse, _options) {
181
+ // Default implementation returns undefined - drivers can override
182
+ return undefined;
183
+ }
184
+ async requestImageGeneration(_prompt, _options) {
185
+ throw new Error("Image generation not implemented.");
186
+ //Cannot be made abstract, as abstract methods are required in the derived class
187
+ }
188
+ }
189
+ //# 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,123 @@
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
+ /**
14
+ * Given a ReadableStream of server sent events, tran
15
+ */
16
+ export function transformSSEStream(stream, transform) {
17
+ // on node and bun the ReadableStream is an async iterable
18
+ return stream.pipeThrough(new TransformStream({
19
+ transform(event, controller) {
20
+ if (event.type === 'event' && event.data && event.data !== '[DONE]') {
21
+ try {
22
+ const result = transform(event.data) ?? '';
23
+ controller.enqueue(result);
24
+ }
25
+ catch (err) {
26
+ // double check for the last event which is not a JSON - at this time togetherai and mistralai returns the string [DONE]
27
+ // do nothing - happens if data is not a JSON - the last event data is the [DONE] string
28
+ }
29
+ }
30
+ }
31
+ }));
32
+ }
33
+ export class EventStream {
34
+ queue = [];
35
+ pending;
36
+ done = false;
37
+ push(event) {
38
+ if (this.done) {
39
+ throw new Error('Cannot push to a closed stream');
40
+ }
41
+ if (this.pending) {
42
+ this.pending.resolve({ value: event });
43
+ this.pending = undefined;
44
+ }
45
+ else {
46
+ this.queue.push(event);
47
+ }
48
+ }
49
+ /**
50
+ * Close the stream. This means the stream cannot be fed anymore.
51
+ * But the consumer can still consume the remaining events.
52
+ */
53
+ close(value) {
54
+ this.done = true;
55
+ if (this.pending) {
56
+ this.pending.resolve({ done: true, value });
57
+ this.pending = undefined;
58
+ }
59
+ }
60
+ [Symbol.asyncIterator]() {
61
+ const self = this;
62
+ return {
63
+ next() {
64
+ const next = self.queue.shift();
65
+ if (next !== undefined) {
66
+ return Promise.resolve({ value: next });
67
+ }
68
+ else if (self.done) {
69
+ return Promise.resolve({ done: true, value: undefined });
70
+ }
71
+ else {
72
+ return new Promise((resolve, reject) => {
73
+ self.pending = { resolve, reject };
74
+ });
75
+ }
76
+ },
77
+ async return(value) {
78
+ self.done = true;
79
+ self.queue = [];
80
+ if (value === undefined) {
81
+ return { done: true, value: undefined };
82
+ }
83
+ const _value = await value;
84
+ return { done: true, value: _value };
85
+ }
86
+ };
87
+ }
88
+ }
89
+ /**
90
+ * Transform an async iterator by applying a function to each value.
91
+ * @param originalGenerator
92
+ * @param transform
93
+ **/
94
+ export async function* transformAsyncIterator(originalGenerator, transform, initCallback) {
95
+ if (initCallback) {
96
+ yield initCallback();
97
+ }
98
+ for await (const value of originalGenerator) {
99
+ yield transform(value);
100
+ }
101
+ }
102
+ //TODO move in a test file
103
+ // const max = 10; let cnt = 0;
104
+ // function feedStream(stream: EventStream<string>) {
105
+ // setTimeout(() => {
106
+ // cnt++;
107
+ // console.log('push: ', cnt, max);
108
+ // stream.push('event ' + cnt);
109
+ // if (cnt < max) {
110
+ // console.log('next: ', cnt, max);
111
+ // setTimeout(() => feedStream(stream), 1000);
112
+ // } else {
113
+ // console.log('end of stream');
114
+ // stream.close();
115
+ // }
116
+ // }, 1000);
117
+ // }
118
+ // const stream = new EventStream<string>();
119
+ // feedStream(stream);
120
+ // for await (const chunk of stream) {
121
+ // console.log('++++chunk:', chunk);
122
+ // }
123
+ //# sourceMappingURL=async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.js","sourceRoot":"","sources":["../../src/async.ts"],"names":[],"mappings":"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"}