@llumiverse/core 0.22.0 → 0.22.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.
- package/lib/cjs/CompletionStream.js +89 -20
- package/lib/cjs/CompletionStream.js.map +1 -1
- package/lib/cjs/Driver.js +23 -5
- package/lib/cjs/Driver.js.map +1 -1
- package/lib/cjs/async.js.map +1 -1
- package/lib/cjs/json.js +3 -174
- package/lib/cjs/json.js.map +1 -1
- package/lib/cjs/stream.js +16 -10
- package/lib/cjs/stream.js.map +1 -1
- package/lib/cjs/validation.js +31 -7
- package/lib/cjs/validation.js.map +1 -1
- package/lib/esm/CompletionStream.js +89 -20
- package/lib/esm/CompletionStream.js.map +1 -1
- package/lib/esm/Driver.js +23 -5
- package/lib/esm/Driver.js.map +1 -1
- package/lib/esm/async.js.map +1 -1
- package/lib/esm/json.js +3 -172
- package/lib/esm/json.js.map +1 -1
- package/lib/esm/stream.js +16 -10
- package/lib/esm/stream.js.map +1 -1
- package/lib/esm/validation.js +31 -7
- package/lib/esm/validation.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/types/CompletionStream.d.ts +2 -2
- package/lib/types/CompletionStream.d.ts.map +1 -1
- package/lib/types/Driver.d.ts +3 -3
- package/lib/types/Driver.d.ts.map +1 -1
- package/lib/types/async.d.ts +2 -2
- package/lib/types/async.d.ts.map +1 -1
- package/lib/types/json.d.ts +0 -13
- package/lib/types/json.d.ts.map +1 -1
- package/lib/types/stream.d.ts.map +1 -1
- package/lib/types/validation.d.ts +2 -2
- package/lib/types/validation.d.ts.map +1 -1
- package/package.json +87 -86
- package/src/CompletionStream.ts +88 -21
- package/src/Driver.ts +3 -4
- package/src/async.ts +4 -4
- package/src/json.ts +3 -168
- package/src/stream.ts +19 -11
- package/src/validation.ts +33 -10
|
@@ -5,33 +5,30 @@ class DefaultCompletionStream {
|
|
|
5
5
|
driver;
|
|
6
6
|
prompt;
|
|
7
7
|
options;
|
|
8
|
-
chunks;
|
|
8
|
+
chunks; // Counter for number of chunks instead of storing strings
|
|
9
9
|
completion;
|
|
10
10
|
constructor(driver, prompt, options) {
|
|
11
11
|
this.driver = driver;
|
|
12
12
|
this.prompt = prompt;
|
|
13
13
|
this.options = options;
|
|
14
|
-
this.chunks =
|
|
14
|
+
this.chunks = 0;
|
|
15
15
|
}
|
|
16
16
|
async *[Symbol.asyncIterator]() {
|
|
17
17
|
// reset state
|
|
18
18
|
this.completion = undefined;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
const chunks = this.chunks;
|
|
19
|
+
this.chunks = 0;
|
|
20
|
+
const accumulatedResults = []; // Accumulate CompletionResult[] from chunks
|
|
23
21
|
this.driver.logger.debug(`[${this.driver.provider}] Streaming Execution of ${this.options.model} with prompt`);
|
|
24
22
|
const start = Date.now();
|
|
25
|
-
let stream;
|
|
26
23
|
let finish_reason = undefined;
|
|
27
24
|
let promptTokens = 0;
|
|
28
25
|
let resultTokens = undefined;
|
|
29
26
|
try {
|
|
30
|
-
stream = await this.driver.requestTextCompletionStream(this.prompt, this.options);
|
|
27
|
+
const stream = await this.driver.requestTextCompletionStream(this.prompt, this.options);
|
|
31
28
|
for await (const chunk of stream) {
|
|
32
29
|
if (chunk) {
|
|
33
30
|
if (typeof chunk === 'string') {
|
|
34
|
-
chunks
|
|
31
|
+
this.chunks++;
|
|
35
32
|
yield chunk;
|
|
36
33
|
}
|
|
37
34
|
else {
|
|
@@ -45,9 +42,66 @@ class DefaultCompletionStream {
|
|
|
45
42
|
promptTokens = Math.max(promptTokens, chunk.token_usage.prompt ?? 0);
|
|
46
43
|
resultTokens = Math.max(resultTokens ?? 0, chunk.token_usage.result ?? 0);
|
|
47
44
|
}
|
|
48
|
-
if (chunk.result) {
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
if (Array.isArray(chunk.result) && chunk.result.length > 0) {
|
|
46
|
+
// Process each result in the chunk, combining consecutive text/JSON
|
|
47
|
+
for (const result of chunk.result) {
|
|
48
|
+
// Check if we can combine with the last accumulated result
|
|
49
|
+
const lastResult = accumulatedResults[accumulatedResults.length - 1];
|
|
50
|
+
if (lastResult &&
|
|
51
|
+
((lastResult.type === 'text' && result.type === 'text') ||
|
|
52
|
+
(lastResult.type === 'json' && result.type === 'json'))) {
|
|
53
|
+
// Combine consecutive text or JSON results
|
|
54
|
+
if (result.type === 'text') {
|
|
55
|
+
lastResult.value += result.value;
|
|
56
|
+
}
|
|
57
|
+
else if (result.type === 'json') {
|
|
58
|
+
// For JSON, combine the parsed objects directly
|
|
59
|
+
try {
|
|
60
|
+
const lastParsed = lastResult.value;
|
|
61
|
+
const currentParsed = result.value;
|
|
62
|
+
if (lastParsed !== null && typeof lastParsed === 'object' &&
|
|
63
|
+
currentParsed !== null && typeof currentParsed === 'object') {
|
|
64
|
+
const combined = { ...lastParsed, ...currentParsed };
|
|
65
|
+
lastResult.value = combined;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// If not objects, convert to string and concatenate
|
|
69
|
+
const lastStr = typeof lastParsed === 'string' ? lastParsed : JSON.stringify(lastParsed);
|
|
70
|
+
const currentStr = typeof currentParsed === 'string' ? currentParsed : JSON.stringify(currentParsed);
|
|
71
|
+
lastResult.value = lastStr + currentStr;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// If anything fails, just concatenate string representations
|
|
76
|
+
lastResult.value = String(lastResult.value) + String(result.value);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Add as new result
|
|
82
|
+
accumulatedResults.push(result);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Convert CompletionResult[] to string for streaming
|
|
86
|
+
// Only yield if we have results to show
|
|
87
|
+
const resultText = chunk.result.map(r => {
|
|
88
|
+
switch (r.type) {
|
|
89
|
+
case 'text':
|
|
90
|
+
return r.value;
|
|
91
|
+
case 'json':
|
|
92
|
+
return JSON.stringify(r.value);
|
|
93
|
+
case 'image':
|
|
94
|
+
// Show truncated image placeholder for streaming
|
|
95
|
+
const truncatedValue = typeof r.value === 'string' ? r.value.slice(0, 10) : String(r.value).slice(0, 10);
|
|
96
|
+
return `\n[Image: ${truncatedValue}...]\n`;
|
|
97
|
+
default:
|
|
98
|
+
return String(r.value || '');
|
|
99
|
+
}
|
|
100
|
+
}).join('');
|
|
101
|
+
if (resultText) {
|
|
102
|
+
this.chunks++;
|
|
103
|
+
yield resultText;
|
|
104
|
+
}
|
|
51
105
|
}
|
|
52
106
|
}
|
|
53
107
|
}
|
|
@@ -57,21 +111,22 @@ class DefaultCompletionStream {
|
|
|
57
111
|
error.prompt = this.prompt;
|
|
58
112
|
throw error;
|
|
59
113
|
}
|
|
60
|
-
const content = chunks.join('');
|
|
61
114
|
// Return undefined for the ExecutionTokenUsage object if there is nothing to fill it with.
|
|
62
|
-
// Allows for checking for
|
|
63
|
-
|
|
115
|
+
// Allows for checking for truthy-ness on token_usage, rather than it's internals. For testing and downstream usage.
|
|
116
|
+
const tokens = resultTokens ?
|
|
64
117
|
{ prompt: promptTokens, result: resultTokens, total: resultTokens + promptTokens, } : undefined;
|
|
65
118
|
this.completion = {
|
|
66
|
-
result:
|
|
119
|
+
result: accumulatedResults, // Return the accumulated CompletionResult[] instead of text
|
|
67
120
|
prompt: this.prompt,
|
|
68
121
|
execution_time: Date.now() - start,
|
|
69
122
|
token_usage: tokens,
|
|
70
123
|
finish_reason: finish_reason,
|
|
71
|
-
chunks: chunks
|
|
124
|
+
chunks: this.chunks,
|
|
72
125
|
};
|
|
73
126
|
try {
|
|
74
|
-
|
|
127
|
+
if (this.completion) {
|
|
128
|
+
this.driver.validateResult(this.completion, this.options);
|
|
129
|
+
}
|
|
75
130
|
}
|
|
76
131
|
catch (error) {
|
|
77
132
|
error.prompt = this.prompt;
|
|
@@ -96,9 +151,23 @@ class FallbackCompletionStream {
|
|
|
96
151
|
this.driver.logger.debug(`[${this.driver.provider}] Streaming is not supported, falling back to blocking execution`);
|
|
97
152
|
try {
|
|
98
153
|
const completion = await this.driver._execute(this.prompt, this.options);
|
|
99
|
-
|
|
154
|
+
// For fallback streaming, yield the text content but keep the original completion
|
|
155
|
+
const content = completion.result.map(r => {
|
|
156
|
+
switch (r.type) {
|
|
157
|
+
case 'text':
|
|
158
|
+
return r.value;
|
|
159
|
+
case 'json':
|
|
160
|
+
return JSON.stringify(r.value);
|
|
161
|
+
case 'image':
|
|
162
|
+
// Show truncated image placeholder for streaming
|
|
163
|
+
const truncatedValue = typeof r.value === 'string' ? r.value.slice(0, 10) : String(r.value).slice(0, 10);
|
|
164
|
+
return `[Image: ${truncatedValue}...]`;
|
|
165
|
+
default:
|
|
166
|
+
return String(r.value || '');
|
|
167
|
+
}
|
|
168
|
+
}).join('');
|
|
100
169
|
yield content;
|
|
101
|
-
this.completion = completion;
|
|
170
|
+
this.completion = completion; // Return the original completion with untouched CompletionResult[]
|
|
102
171
|
}
|
|
103
172
|
catch (error) {
|
|
104
173
|
error.prompt = this.prompt;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompletionStream.js","sourceRoot":"","sources":["../../src/CompletionStream.ts"],"names":[],"mappings":";;;AAGA,MAAa,uBAAuB;IAKb;IACR;IACA;IALX,MAAM,
|
|
1
|
+
{"version":3,"file":"CompletionStream.js","sourceRoot":"","sources":["../../src/CompletionStream.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/Driver.js
CHANGED
|
@@ -11,11 +11,28 @@ const CompletionStream_js_1 = require("./CompletionStream.js");
|
|
|
11
11
|
const index_js_1 = require("./formatters/index.js");
|
|
12
12
|
const common_1 = require("@llumiverse/common");
|
|
13
13
|
const validation_js_1 = require("./validation.js");
|
|
14
|
+
// Helper to create logger methods that support both message-only and object-first signatures
|
|
15
|
+
function createConsoleLoggerMethod(consoleMethod) {
|
|
16
|
+
return ((objOrMsg, msgOrNever, ...args) => {
|
|
17
|
+
if (typeof objOrMsg === 'string') {
|
|
18
|
+
// Message-only: logger.info("message", ...args)
|
|
19
|
+
consoleMethod(objOrMsg, msgOrNever, ...args);
|
|
20
|
+
}
|
|
21
|
+
else if (msgOrNever !== undefined) {
|
|
22
|
+
// Object-first: logger.info({ obj }, "message", ...args)
|
|
23
|
+
consoleMethod(msgOrNever, objOrMsg, ...args);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// Object-only: logger.info({ obj })
|
|
27
|
+
consoleMethod(objOrMsg, ...args);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
14
31
|
const ConsoleLogger = {
|
|
15
|
-
debug: console.debug,
|
|
16
|
-
info: console.info,
|
|
17
|
-
warn: console.warn,
|
|
18
|
-
error: console.error,
|
|
32
|
+
debug: createConsoleLoggerMethod(console.debug.bind(console)),
|
|
33
|
+
info: createConsoleLoggerMethod(console.info.bind(console)),
|
|
34
|
+
warn: createConsoleLoggerMethod(console.warn.bind(console)),
|
|
35
|
+
error: createConsoleLoggerMethod(console.error.bind(console)),
|
|
19
36
|
};
|
|
20
37
|
const noop = () => void 0;
|
|
21
38
|
const NoopLogger = {
|
|
@@ -67,7 +84,8 @@ class AbstractDriver {
|
|
|
67
84
|
result.result = (0, validation_js_1.validateResult)(result.result, options.result_schema);
|
|
68
85
|
}
|
|
69
86
|
catch (error) {
|
|
70
|
-
|
|
87
|
+
const errorMessage = `[${this.provider}] [${options.model}] ${error.code ? '[' + error.code + '] ' : ''}Result validation error: ${error.message}`;
|
|
88
|
+
this.logger.error({ err: error, data: result.result }, errorMessage);
|
|
71
89
|
result.error = {
|
|
72
90
|
code: error.code || error.name,
|
|
73
91
|
message: error.message,
|
package/lib/cjs/Driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Driver.js","sourceRoot":"","sources":["../../src/Driver.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;
|
|
1
|
+
{"version":3,"file":"Driver.js","sourceRoot":"","sources":["../../src/Driver.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/async.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async.js","sourceRoot":"","sources":["../../src/async.ts"],"names":[],"mappings":";;;AAGA,4BAIC;AAED,4CAMC;AAKD,gDAeC;AAuED,wDAWC;AAlHM,KAAK,SAAS,CAAC,CAAC,QAAQ,CAAO,aAA+B,EAAE,QAAwC;IAC3G,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,aAAa;QACjC,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,SAAgB,gBAAgB,CAAI,KAAQ;IACxC,OAAO;QACH,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;YACzB,MAAM,KAAK,CAAA;QACf,CAAC;KACJ,CAAA;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,MAAuC,EAAE,
|
|
1
|
+
{"version":3,"file":"async.js","sourceRoot":"","sources":["../../src/async.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/json.js
CHANGED
|
@@ -1,187 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.JsonParser = void 0;
|
|
4
3
|
exports.extractAndParseJSON = extractAndParseJSON;
|
|
5
4
|
exports.parseJSON = parseJSON;
|
|
5
|
+
const jsonrepair_1 = require("jsonrepair");
|
|
6
6
|
function extractJsonFromText(text) {
|
|
7
7
|
const start = text.indexOf("{");
|
|
8
8
|
const end = text.lastIndexOf("}");
|
|
9
|
-
|
|
10
|
-
return text.replace(/\\n/g, "");
|
|
9
|
+
return text.substring(start, end + 1);
|
|
11
10
|
}
|
|
12
11
|
function extractAndParseJSON(text) {
|
|
13
12
|
return parseJSON(extractJsonFromText(text));
|
|
14
13
|
}
|
|
15
|
-
const RX_DQUOTE = /^"([^"\\]|\\.)*"/us;
|
|
16
|
-
const RX_SQUOTE = /^'([^'\\]|\\.)*'/us;
|
|
17
|
-
const RX_NUMBER = /^-?\d+(\.\d+)?/;
|
|
18
|
-
const RX_BOOLEAN = /^true|false/;
|
|
19
|
-
const RX_NULL = /^null/;
|
|
20
|
-
const RX_KEY = /^[$_a-zA-Z][$_a-zA-Z0-9]*/;
|
|
21
|
-
const RX_PUNCTUATION = /^\s*([\[\]{}:,])\s*/;
|
|
22
|
-
function fixText(value) {
|
|
23
|
-
return value.replaceAll('\n', '\\n').replaceAll('\r', '\\r');
|
|
24
|
-
}
|
|
25
|
-
function decodeSingleQuotedString(value) {
|
|
26
|
-
return JSON.parse('"' + value.slice(1, -1).replaceAll(/(?<!\\)"/g, '\\"') + '"');
|
|
27
|
-
}
|
|
28
|
-
class JsonParser {
|
|
29
|
-
text;
|
|
30
|
-
pos = 0;
|
|
31
|
-
constructor(text) {
|
|
32
|
-
this.text = text;
|
|
33
|
-
}
|
|
34
|
-
skip(n) {
|
|
35
|
-
this.text = this.text.substring(n);
|
|
36
|
-
this.pos += n;
|
|
37
|
-
}
|
|
38
|
-
tryReadPunctuation() {
|
|
39
|
-
const m = RX_PUNCTUATION.exec(this.text);
|
|
40
|
-
if (m) {
|
|
41
|
-
this.skip(m[0].length);
|
|
42
|
-
return m[1];
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
readKey() {
|
|
46
|
-
const first = this.text.charCodeAt(0);
|
|
47
|
-
if (first === 34) { // "
|
|
48
|
-
const m = RX_DQUOTE.exec(this.text);
|
|
49
|
-
if (m) {
|
|
50
|
-
this.skip(m[0].length);
|
|
51
|
-
return JSON.parse(m[0]);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
else if (first === 39) { // '
|
|
55
|
-
const m = RX_SQUOTE.exec(this.text);
|
|
56
|
-
if (m) {
|
|
57
|
-
this.skip(m[0].length);
|
|
58
|
-
return decodeSingleQuotedString(m[0]);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
const m = RX_KEY.exec(this.text);
|
|
63
|
-
if (m) {
|
|
64
|
-
this.skip(m[0].length);
|
|
65
|
-
return m[0];
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
throw new Error('Expected a key at position ' + this.pos + ' but found ' + this.text);
|
|
69
|
-
}
|
|
70
|
-
readScalar() {
|
|
71
|
-
const first = this.text.charCodeAt(0);
|
|
72
|
-
if (first === 34) { // "
|
|
73
|
-
const m = RX_DQUOTE.exec(this.text);
|
|
74
|
-
if (m) {
|
|
75
|
-
this.skip(m[0].length);
|
|
76
|
-
return JSON.parse(fixText(m[0]));
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
else if (first === 39) { // '
|
|
80
|
-
const m = RX_SQUOTE.exec(this.text);
|
|
81
|
-
if (m) {
|
|
82
|
-
this.skip(m[0].length);
|
|
83
|
-
return decodeSingleQuotedString(fixText(m[0]));
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
let m = RX_NUMBER.exec(this.text);
|
|
88
|
-
if (m) {
|
|
89
|
-
this.skip(m[0].length);
|
|
90
|
-
return parseFloat(m[0]);
|
|
91
|
-
}
|
|
92
|
-
m = RX_BOOLEAN.exec(this.text);
|
|
93
|
-
if (m) {
|
|
94
|
-
this.skip(m[0].length);
|
|
95
|
-
return m[0] === 'true';
|
|
96
|
-
}
|
|
97
|
-
m = RX_NULL.exec(this.text);
|
|
98
|
-
if (m) {
|
|
99
|
-
this.skip(m[0].length);
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
throw new Error('Expected a value at position ' + this.pos + ' but found ' + this.text);
|
|
104
|
-
}
|
|
105
|
-
readObject() {
|
|
106
|
-
let key;
|
|
107
|
-
const obj = {};
|
|
108
|
-
while (true) {
|
|
109
|
-
if (!key) { // read key
|
|
110
|
-
const p = this.tryReadPunctuation();
|
|
111
|
-
if (p === '}') {
|
|
112
|
-
return obj;
|
|
113
|
-
}
|
|
114
|
-
else if (p === ',') {
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
else if (p) {
|
|
118
|
-
throw new Error('Expected a key at position ' + this.pos + ' but found ' + this.text);
|
|
119
|
-
}
|
|
120
|
-
key = this.readKey();
|
|
121
|
-
if (!key) {
|
|
122
|
-
throw new Error('Expected a key at position ' + this.pos + ' but found ' + this.text);
|
|
123
|
-
}
|
|
124
|
-
if (this.tryReadPunctuation() !== ':') {
|
|
125
|
-
throw new Error('Expected a colon at position ' + this.pos + ' but found ' + this.text);
|
|
126
|
-
}
|
|
127
|
-
;
|
|
128
|
-
}
|
|
129
|
-
else { // read value
|
|
130
|
-
const value = this.readValue();
|
|
131
|
-
if (value === undefined) {
|
|
132
|
-
throw new Error('Expected a value at position ' + this.pos + ' but found ' + this.text);
|
|
133
|
-
}
|
|
134
|
-
obj[key] = value;
|
|
135
|
-
key = undefined;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
readArray() {
|
|
140
|
-
const ar = [];
|
|
141
|
-
while (true) {
|
|
142
|
-
const p = this.tryReadPunctuation();
|
|
143
|
-
if (p === ',') {
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
else if (p === ']') {
|
|
147
|
-
return ar;
|
|
148
|
-
}
|
|
149
|
-
else if (p === '[') {
|
|
150
|
-
ar.push(this.readArray());
|
|
151
|
-
}
|
|
152
|
-
else if (p === '{') {
|
|
153
|
-
ar.push(this.readObject());
|
|
154
|
-
}
|
|
155
|
-
else if (!p) {
|
|
156
|
-
ar.push(this.readScalar());
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
throw new Error('Expected a value at position ' + this.pos + ' but found ' + this.text);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
readValue() {
|
|
164
|
-
const p = this.tryReadPunctuation();
|
|
165
|
-
if (p === '{') {
|
|
166
|
-
return this.readObject();
|
|
167
|
-
}
|
|
168
|
-
else if (p === '[') {
|
|
169
|
-
return this.readArray();
|
|
170
|
-
}
|
|
171
|
-
else if (!p) {
|
|
172
|
-
return this.readScalar();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
static parse(text) {
|
|
176
|
-
const parser = new JsonParser(text);
|
|
177
|
-
const r = parser.readValue();
|
|
178
|
-
if (r === undefined) {
|
|
179
|
-
throw new Error('Not a valid JSON');
|
|
180
|
-
}
|
|
181
|
-
return r;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
exports.JsonParser = JsonParser;
|
|
185
14
|
function parseJSON(text) {
|
|
186
15
|
text = text.trim();
|
|
187
16
|
try {
|
|
@@ -190,7 +19,7 @@ function parseJSON(text) {
|
|
|
190
19
|
catch (err) {
|
|
191
20
|
// use a relaxed parser
|
|
192
21
|
try {
|
|
193
|
-
return
|
|
22
|
+
return JSON.parse((0, jsonrepair_1.jsonrepair)(text));
|
|
194
23
|
}
|
|
195
24
|
catch (err2) { // throw the original error
|
|
196
25
|
throw err;
|
package/lib/cjs/json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/json.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/json.ts"],"names":[],"mappings":";;AASA,kDAEC;AAED,8BAYC;AAxBD,2CAAwC;AAExC,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,SAAgB,mBAAmB,CAAC,IAAY;IAC5C,OAAO,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,SAAS,CAAC,IAAY;IAClC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACnB,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,uBAAuB;QACvB,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,uBAAU,EAAC,IAAI,CAAC,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,IAAS,EAAE,CAAC,CAAC,2BAA2B;YAC7C,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;AACL,CAAC"}
|
package/lib/cjs/stream.js
CHANGED
|
@@ -4,21 +4,27 @@ exports.readStreamAsBase64 = readStreamAsBase64;
|
|
|
4
4
|
exports.readStreamAsString = readStreamAsString;
|
|
5
5
|
exports.readStreamAsUint8Array = readStreamAsUint8Array;
|
|
6
6
|
async function readStreamAsBase64(stream) {
|
|
7
|
-
|
|
7
|
+
const uint8Array = await readStreamAsUint8Array(stream);
|
|
8
|
+
return Buffer.from(uint8Array).toString('base64');
|
|
8
9
|
}
|
|
9
10
|
async function readStreamAsString(stream) {
|
|
10
|
-
|
|
11
|
+
const uint8Array = await readStreamAsUint8Array(stream);
|
|
12
|
+
return Buffer.from(uint8Array).toString();
|
|
11
13
|
}
|
|
12
14
|
async function readStreamAsUint8Array(stream) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
|
16
|
-
}
|
|
17
|
-
async function _readStreamAsBuffer(stream) {
|
|
18
|
-
const out = [];
|
|
15
|
+
const chunks = [];
|
|
16
|
+
let totalLength = 0;
|
|
19
17
|
for await (const chunk of stream) {
|
|
20
|
-
|
|
18
|
+
const uint8Chunk = chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk);
|
|
19
|
+
chunks.push(uint8Chunk);
|
|
20
|
+
totalLength += uint8Chunk.length;
|
|
21
|
+
}
|
|
22
|
+
const combined = new Uint8Array(totalLength);
|
|
23
|
+
let offset = 0;
|
|
24
|
+
for (const chunk of chunks) {
|
|
25
|
+
combined.set(chunk, offset);
|
|
26
|
+
offset += chunk.length;
|
|
21
27
|
}
|
|
22
|
-
return
|
|
28
|
+
return combined;
|
|
23
29
|
}
|
|
24
30
|
//# sourceMappingURL=stream.js.map
|
package/lib/cjs/stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":";;AACA,
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":";;AACA,gDAGC;AAED,gDAGC;AAED,wDAkBC;AA5BM,KAAK,UAAU,kBAAkB,CAAC,MAAsB;IAC3D,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,MAAsB;IAC3D,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC9C,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAAC,MAAsB;IAC/D,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/E,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxB,WAAW,IAAI,UAAU,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC"}
|
package/lib/cjs/validation.js
CHANGED
|
@@ -28,18 +28,42 @@ class ValidationError extends Error {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
exports.ValidationError = ValidationError;
|
|
31
|
+
function parseCompletionAsJson(data) {
|
|
32
|
+
let lastError;
|
|
33
|
+
for (const part of data) {
|
|
34
|
+
if (part.type === "text") {
|
|
35
|
+
const text = part.value.trim();
|
|
36
|
+
try {
|
|
37
|
+
return (0, json_js_1.extractAndParseJSON)(text);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
lastError = new ValidationError("json_error", error.message);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (!lastError) {
|
|
45
|
+
lastError = new ValidationError("json_error", "No JSON compatible response found in completion result");
|
|
46
|
+
}
|
|
47
|
+
throw lastError;
|
|
48
|
+
}
|
|
31
49
|
function validateResult(data, schema) {
|
|
32
50
|
let json;
|
|
33
|
-
if (
|
|
34
|
-
|
|
35
|
-
|
|
51
|
+
if (Array.isArray(data)) {
|
|
52
|
+
const jsonResults = data.filter(r => r.type === "json");
|
|
53
|
+
if (jsonResults.length > 0) {
|
|
54
|
+
json = jsonResults[0].value;
|
|
36
55
|
}
|
|
37
|
-
|
|
38
|
-
|
|
56
|
+
else {
|
|
57
|
+
try {
|
|
58
|
+
json = parseCompletionAsJson(data);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
throw new ValidationError("json_error", error.message);
|
|
62
|
+
}
|
|
39
63
|
}
|
|
40
64
|
}
|
|
41
65
|
else {
|
|
42
|
-
|
|
66
|
+
throw new Error("Data to validate must be an array");
|
|
43
67
|
}
|
|
44
68
|
const validate = ajv.compile(schema);
|
|
45
69
|
const valid = validate(json);
|
|
@@ -67,6 +91,6 @@ function validateResult(data, schema) {
|
|
|
67
91
|
throw new ValidationError("validation_error", errorsMessage);
|
|
68
92
|
}
|
|
69
93
|
}
|
|
70
|
-
return json;
|
|
94
|
+
return [{ type: "json", value: json }];
|
|
71
95
|
}
|
|
72
96
|
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":";;;;;;AAiDA,wCAgDC;AAhGD,6BAA0B;AAC1B,8DAAqC;AACrC,uCAAgD;AAChD,+CAA6C;AAG7C,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC;IAChB,WAAW,EAAE,OAAO;IACpB,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,KAAK;IACb,WAAW,EAAE,IAAI;IACjB,gBAAgB,EAAE,SAAS;CAC9B,CAAC,CAAC;AAEH,uDAAuD;AACvD,6CAA6C;AAC7C,IAAA,qBAAU,EAAC,GAAG,CAAC,CAAA;AAGf,MAAa,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;AARD,0CAQC;AAED,SAAS,qBAAqB,CAAC,IAAwB;IACnD,IAAI,SAAsC,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACD,OAAO,IAAA,6BAAmB,EAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBAClB,SAAS,GAAG,IAAI,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACjE,CAAC;QACL,CAAC;IACL,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,SAAS,GAAG,IAAI,eAAe,CAAC,YAAY,EAAE,wDAAwD,CAAC,CAAC;IAC5G,CAAC;IACD,MAAM,SAAS,CAAC;AACpB,CAAC;AAGD,SAAgB,cAAc,CAAC,IAAwB,EAAE,MAAc;IACnE,IAAI,IAAI,CAAC;IACT,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACxD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAChC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC;gBACD,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBAClB,MAAM,IAAI,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;YAC1D,CAAC;QACL,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACxD,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7B,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,IAAA,0BAAY,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,iBAAiB,GAAG,IAAA,0BAAY,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAA,0BAAY,EAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAElE,8BAA8B;YAC9B,IAAI,CAAC,KAAK;mBACH,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;mBACjD,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,SAAS;YACb,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;QACL,CAAC;QAED,+BAA+B;QAC/B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpH,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAA;QAChE,CAAC;IACL,CAAC;IAED,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC"}
|