@llumiverse/core 0.23.0-dev.20251121 → 0.24.0-dev.202601221707
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/README.md +141 -218
- package/lib/cjs/CompletionStream.js +65 -0
- package/lib/cjs/CompletionStream.js.map +1 -1
- package/lib/cjs/Driver.js +35 -11
- package/lib/cjs/Driver.js.map +1 -1
- package/lib/cjs/conversation-utils.js +457 -0
- package/lib/cjs/conversation-utils.js.map +1 -0
- package/lib/cjs/index.js +1 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/stream.js.map +1 -1
- package/lib/esm/CompletionStream.js +65 -0
- package/lib/esm/CompletionStream.js.map +1 -1
- package/lib/esm/Driver.js +35 -11
- package/lib/esm/Driver.js.map +1 -1
- package/lib/esm/conversation-utils.js +447 -0
- package/lib/esm/conversation-utils.js.map +1 -0
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/stream.js.map +1 -1
- package/lib/types/CompletionStream.d.ts.map +1 -1
- package/lib/types/Driver.d.ts +22 -0
- package/lib/types/Driver.d.ts.map +1 -1
- package/lib/types/conversation-utils.d.ts +112 -0
- package/lib/types/conversation-utils.d.ts.map +1 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/stream.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/CompletionStream.ts +70 -1
- package/src/Driver.ts +47 -12
- package/src/conversation-utils.ts +497 -0
- package/src/index.ts +1 -0
- package/src/stream.ts +1 -0
- package/lib/tsconfig.tsbuildinfo +0 -1
package/lib/esm/Driver.js
CHANGED
|
@@ -98,20 +98,17 @@ export class AbstractDriver {
|
|
|
98
98
|
});
|
|
99
99
|
}
|
|
100
100
|
async _execute(prompt, options) {
|
|
101
|
-
this.logger.debug(`[${this.provider}] Executing prompt on ${options.model}`);
|
|
102
101
|
try {
|
|
103
102
|
const start = Date.now();
|
|
104
103
|
let result;
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
default:
|
|
114
|
-
throw new Error(`Unsupported modality: ${options['output_modality'] ?? "No modality specified"}`);
|
|
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);
|
|
115
112
|
}
|
|
116
113
|
const execution_time = Date.now() - start;
|
|
117
114
|
return { ...result, prompt, execution_time };
|
|
@@ -121,6 +118,9 @@ export class AbstractDriver {
|
|
|
121
118
|
throw error;
|
|
122
119
|
}
|
|
123
120
|
}
|
|
121
|
+
isImageModel(_model) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
124
|
// by default no stream is supported. we block and we return all at once
|
|
125
125
|
async stream(segments, options) {
|
|
126
126
|
const prompt = await this.createPrompt(segments, options);
|
|
@@ -128,6 +128,9 @@ export class AbstractDriver {
|
|
|
128
128
|
if (options.output_modality === Modalities.text && canStream) {
|
|
129
129
|
return new DefaultCompletionStream(this, prompt, options);
|
|
130
130
|
}
|
|
131
|
+
else if (this.isImageModel(options.model)) {
|
|
132
|
+
return new FallbackCompletionStream(this, prompt, options);
|
|
133
|
+
}
|
|
131
134
|
else {
|
|
132
135
|
return new FallbackCompletionStream(this, prompt, options);
|
|
133
136
|
}
|
|
@@ -164,9 +167,30 @@ export class AbstractDriver {
|
|
|
164
167
|
async listTrainableModels() {
|
|
165
168
|
return [];
|
|
166
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
|
+
}
|
|
167
184
|
async requestImageGeneration(_prompt, _options) {
|
|
168
185
|
throw new Error("Image generation not implemented.");
|
|
169
186
|
//Cannot be made abstract, as abstract methods are required in the derived class
|
|
170
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Cleanup method called when the driver is evicted from the cache.
|
|
190
|
+
* Override this in driver implementations that need to release resources.
|
|
191
|
+
*/
|
|
192
|
+
destroy() {
|
|
193
|
+
// No-op by default
|
|
194
|
+
}
|
|
171
195
|
}
|
|
172
196
|
//# sourceMappingURL=Driver.js.map
|
package/lib/esm/Driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Driver.js","sourceRoot":"","sources":["../../src/Driver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAYH,UAAU,EAOb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,6FAA6F;AAC7F,SAAS,yBAAyB,CAAC,aAA2C;IAC1E,OAAO,CAAC,CAAC,QAAa,EAAE,UAAgB,EAAE,GAAG,IAAmC,EAAE,EAAE;QAChF,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC/B,gDAAgD;YAChD,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,yDAAyD;YACzD,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACJ,oCAAoC;YACpC,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;QACrC,CAAC;IACL,CAAC,CAAmB,CAAC;AACzB,CAAC;AAED,MAAM,aAAa,GAAW;IAC1B,KAAK,EAAE,yBAAyB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,EAAE,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,EAAE,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,KAAK,EAAE,yBAAyB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;CAChE,CAAA;AAED,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B,MAAM,UAAU,GAAW;IACvB,KAAK,EAAE,IAAuB;IAC9B,IAAI,EAAE,IAAsB;IAC5B,IAAI,EAAE,IAAsB;IAC5B,KAAK,EAAE,IAAuB;CACjC,CAAA;AAED,MAAM,UAAU,YAAY,CAAC,MAAsC;IAC/D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,aAAa,CAAC;IACzB,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC;IAClB,CAAC;SAAM,CAAC;QACJ,OAAO,UAAU,CAAC;IACtB,CAAC;AACL,CAAC;
|
|
1
|
+
{"version":3,"file":"Driver.js","sourceRoot":"","sources":["../../src/Driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for cleaning up conversation objects before storage.
|
|
3
|
+
*
|
|
4
|
+
* These functions strip binary data (Uint8Array) and large base64 strings
|
|
5
|
+
* from conversation objects to prevent JSON.stringify corruption and reduce
|
|
6
|
+
* storage bloat.
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANT: These functions replace entire image/document/video BLOCKS with
|
|
9
|
+
* text placeholders, not just the data. This ensures the conversation remains
|
|
10
|
+
* valid for subsequent API calls.
|
|
11
|
+
*/
|
|
12
|
+
const IMAGE_PLACEHOLDER = '[Image removed from conversation history]';
|
|
13
|
+
const DOCUMENT_PLACEHOLDER = '[Document removed from conversation history]';
|
|
14
|
+
const VIDEO_PLACEHOLDER = '[Video removed from conversation history]';
|
|
15
|
+
const TEXT_TRUNCATED_MARKER = '\n\n[Content truncated - exceeded token limit]';
|
|
16
|
+
/** Metadata key used to store turn information in conversations */
|
|
17
|
+
const META_KEY = '_llumiverse_meta';
|
|
18
|
+
/**
|
|
19
|
+
* Check if an object is a Bedrock image block: { image: { source: { bytes: Uint8Array } } }
|
|
20
|
+
*/
|
|
21
|
+
function isBedrockImageBlock(obj) {
|
|
22
|
+
if (typeof obj !== 'object' || obj === null)
|
|
23
|
+
return false;
|
|
24
|
+
const o = obj;
|
|
25
|
+
if (!o.image || typeof o.image !== 'object')
|
|
26
|
+
return false;
|
|
27
|
+
const img = o.image;
|
|
28
|
+
if (!img.source || typeof img.source !== 'object')
|
|
29
|
+
return false;
|
|
30
|
+
const src = img.source;
|
|
31
|
+
return src.bytes instanceof Uint8Array;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if an object is a serialized Bedrock image block (Uint8Array converted to base64)
|
|
35
|
+
*/
|
|
36
|
+
function isSerializedBedrockImageBlock(obj) {
|
|
37
|
+
if (typeof obj !== 'object' || obj === null)
|
|
38
|
+
return false;
|
|
39
|
+
const o = obj;
|
|
40
|
+
if (!o.image || typeof o.image !== 'object')
|
|
41
|
+
return false;
|
|
42
|
+
const img = o.image;
|
|
43
|
+
if (!img.source || typeof img.source !== 'object')
|
|
44
|
+
return false;
|
|
45
|
+
const src = img.source;
|
|
46
|
+
// Check for our serialized format: bytes: { _base64: string }
|
|
47
|
+
if (!src.bytes || typeof src.bytes !== 'object')
|
|
48
|
+
return false;
|
|
49
|
+
const bytes = src.bytes;
|
|
50
|
+
return typeof bytes._base64 === 'string';
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Check if an object is a Bedrock document block: { document: { source: { bytes: Uint8Array } } }
|
|
54
|
+
*/
|
|
55
|
+
function isBedrockDocumentBlock(obj) {
|
|
56
|
+
if (typeof obj !== 'object' || obj === null)
|
|
57
|
+
return false;
|
|
58
|
+
const o = obj;
|
|
59
|
+
if (!o.document || typeof o.document !== 'object')
|
|
60
|
+
return false;
|
|
61
|
+
const doc = o.document;
|
|
62
|
+
if (!doc.source || typeof doc.source !== 'object')
|
|
63
|
+
return false;
|
|
64
|
+
const src = doc.source;
|
|
65
|
+
return src.bytes instanceof Uint8Array;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Check if an object is a serialized Bedrock document block
|
|
69
|
+
*/
|
|
70
|
+
function isSerializedBedrockDocumentBlock(obj) {
|
|
71
|
+
if (typeof obj !== 'object' || obj === null)
|
|
72
|
+
return false;
|
|
73
|
+
const o = obj;
|
|
74
|
+
if (!o.document || typeof o.document !== 'object')
|
|
75
|
+
return false;
|
|
76
|
+
const doc = o.document;
|
|
77
|
+
if (!doc.source || typeof doc.source !== 'object')
|
|
78
|
+
return false;
|
|
79
|
+
const src = doc.source;
|
|
80
|
+
// Check for our serialized format: bytes: { _base64: string }
|
|
81
|
+
if (!src.bytes || typeof src.bytes !== 'object')
|
|
82
|
+
return false;
|
|
83
|
+
const bytes = src.bytes;
|
|
84
|
+
return typeof bytes._base64 === 'string';
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check if an object is a Bedrock video block: { video: { source: { bytes: Uint8Array } } }
|
|
88
|
+
*/
|
|
89
|
+
function isBedrockVideoBlock(obj) {
|
|
90
|
+
if (typeof obj !== 'object' || obj === null)
|
|
91
|
+
return false;
|
|
92
|
+
const o = obj;
|
|
93
|
+
if (!o.video || typeof o.video !== 'object')
|
|
94
|
+
return false;
|
|
95
|
+
const vid = o.video;
|
|
96
|
+
if (!vid.source || typeof vid.source !== 'object')
|
|
97
|
+
return false;
|
|
98
|
+
const src = vid.source;
|
|
99
|
+
return src.bytes instanceof Uint8Array;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if an object is a serialized Bedrock video block
|
|
103
|
+
*/
|
|
104
|
+
function isSerializedBedrockVideoBlock(obj) {
|
|
105
|
+
if (typeof obj !== 'object' || obj === null)
|
|
106
|
+
return false;
|
|
107
|
+
const o = obj;
|
|
108
|
+
if (!o.video || typeof o.video !== 'object')
|
|
109
|
+
return false;
|
|
110
|
+
const vid = o.video;
|
|
111
|
+
if (!vid.source || typeof vid.source !== 'object')
|
|
112
|
+
return false;
|
|
113
|
+
const src = vid.source;
|
|
114
|
+
// Check for our serialized format: bytes: { _base64: string }
|
|
115
|
+
if (!src.bytes || typeof src.bytes !== 'object')
|
|
116
|
+
return false;
|
|
117
|
+
const bytes = src.bytes;
|
|
118
|
+
return typeof bytes._base64 === 'string';
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Check if an object is an OpenAI image_url block with base64 data
|
|
122
|
+
*/
|
|
123
|
+
function isOpenAIBase64ImageBlock(obj) {
|
|
124
|
+
if (typeof obj !== 'object' || obj === null)
|
|
125
|
+
return false;
|
|
126
|
+
const o = obj;
|
|
127
|
+
if (o.type !== 'image_url')
|
|
128
|
+
return false;
|
|
129
|
+
if (!o.image_url || typeof o.image_url !== 'object')
|
|
130
|
+
return false;
|
|
131
|
+
const imgUrl = o.image_url;
|
|
132
|
+
return typeof imgUrl.url === 'string' &&
|
|
133
|
+
imgUrl.url.startsWith('data:image/') &&
|
|
134
|
+
imgUrl.url.includes(';base64,');
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Check if an object is a Gemini inlineData block with large base64 data
|
|
138
|
+
*/
|
|
139
|
+
function isGeminiInlineDataBlock(obj) {
|
|
140
|
+
if (typeof obj !== 'object' || obj === null)
|
|
141
|
+
return false;
|
|
142
|
+
const o = obj;
|
|
143
|
+
if (!o.inlineData || typeof o.inlineData !== 'object')
|
|
144
|
+
return false;
|
|
145
|
+
const inlineData = o.inlineData;
|
|
146
|
+
return typeof inlineData.data === 'string' && inlineData.data.length > 1000;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Convert Uint8Array to base64 string for safe JSON serialization.
|
|
150
|
+
*/
|
|
151
|
+
function uint8ArrayToBase64(bytes) {
|
|
152
|
+
let binary = '';
|
|
153
|
+
for (let i = 0; i < bytes.byteLength; i++) {
|
|
154
|
+
binary += String.fromCharCode(bytes[i]);
|
|
155
|
+
}
|
|
156
|
+
return btoa(binary);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Convert base64 string back to Uint8Array.
|
|
160
|
+
*/
|
|
161
|
+
function base64ToUint8Array(base64) {
|
|
162
|
+
const binary = atob(base64);
|
|
163
|
+
const bytes = new Uint8Array(binary.length);
|
|
164
|
+
for (let i = 0; i < binary.length; i++) {
|
|
165
|
+
bytes[i] = binary.charCodeAt(i);
|
|
166
|
+
}
|
|
167
|
+
return bytes;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get metadata from a conversation object, or return defaults.
|
|
171
|
+
*/
|
|
172
|
+
export function getConversationMeta(conversation) {
|
|
173
|
+
if (typeof conversation === 'object' && conversation !== null) {
|
|
174
|
+
const meta = conversation[META_KEY];
|
|
175
|
+
if (meta && typeof meta === 'object') {
|
|
176
|
+
return meta;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return { turnNumber: 0 };
|
|
180
|
+
}
|
|
181
|
+
/** Key used to wrap array conversations to preserve their type through JSON serialization */
|
|
182
|
+
const ARRAY_WRAPPER_KEY = '_arrayConversation';
|
|
183
|
+
/**
|
|
184
|
+
* Set metadata on a conversation object.
|
|
185
|
+
* Arrays are wrapped in an object to preserve their type through JSON serialization.
|
|
186
|
+
*/
|
|
187
|
+
export function setConversationMeta(conversation, meta) {
|
|
188
|
+
if (Array.isArray(conversation)) {
|
|
189
|
+
// Wrap arrays in an object to preserve their array nature through JSON serialization
|
|
190
|
+
return { [ARRAY_WRAPPER_KEY]: conversation, [META_KEY]: meta };
|
|
191
|
+
}
|
|
192
|
+
if (typeof conversation === 'object' && conversation !== null) {
|
|
193
|
+
return { ...conversation, [META_KEY]: meta };
|
|
194
|
+
}
|
|
195
|
+
return conversation;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Unwrap a conversation array that was wrapped by setConversationMeta.
|
|
199
|
+
* If the conversation is not a wrapped array, returns undefined.
|
|
200
|
+
* Use this to extract the actual message array from a conversation object.
|
|
201
|
+
*/
|
|
202
|
+
export function unwrapConversationArray(conversation) {
|
|
203
|
+
if (typeof conversation === 'object' && conversation !== null) {
|
|
204
|
+
const c = conversation;
|
|
205
|
+
if (Array.isArray(c[ARRAY_WRAPPER_KEY])) {
|
|
206
|
+
return c[ARRAY_WRAPPER_KEY];
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return undefined;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Increment the turn number in a conversation and return the updated conversation.
|
|
213
|
+
*/
|
|
214
|
+
export function incrementConversationTurn(conversation) {
|
|
215
|
+
const meta = getConversationMeta(conversation);
|
|
216
|
+
return setConversationMeta(conversation, { ...meta, turnNumber: meta.turnNumber + 1 });
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Strip binary data (Uint8Array) from conversation to prevent JSON.stringify corruption.
|
|
220
|
+
*
|
|
221
|
+
* When Uint8Array is passed through JSON.stringify, it gets corrupted into an object
|
|
222
|
+
* like { "0": 137, "1": 80, ... } instead of proper binary data. This breaks
|
|
223
|
+
* subsequent API calls that expect binary data.
|
|
224
|
+
*
|
|
225
|
+
* This function either:
|
|
226
|
+
* - Strips images immediately (keepForTurns = 0, default)
|
|
227
|
+
* - Serializes images to base64 for safe storage, then strips after N turns
|
|
228
|
+
*
|
|
229
|
+
* @param obj The conversation object to strip binary data from
|
|
230
|
+
* @param options Optional settings for turn-based stripping
|
|
231
|
+
* @returns A new object with binary content handled appropriately
|
|
232
|
+
*/
|
|
233
|
+
export function stripBinaryFromConversation(obj, options) {
|
|
234
|
+
const { keepForTurns = 0 } = options ?? {};
|
|
235
|
+
const currentTurn = options?.currentTurn ?? getConversationMeta(obj).turnNumber;
|
|
236
|
+
// If we should keep images and haven't exceeded the turn threshold,
|
|
237
|
+
// serialize Uint8Array to base64 for safe JSON storage
|
|
238
|
+
if (keepForTurns > 0 && currentTurn < keepForTurns) {
|
|
239
|
+
return serializeBinaryForStorage(obj);
|
|
240
|
+
}
|
|
241
|
+
// Strip all binary/serialized images
|
|
242
|
+
return stripBinaryFromConversationInternal(obj);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Serialize Uint8Array to base64 for safe JSON storage, preserving the image structure.
|
|
246
|
+
*/
|
|
247
|
+
function serializeBinaryForStorage(obj) {
|
|
248
|
+
if (obj === null || obj === undefined)
|
|
249
|
+
return obj;
|
|
250
|
+
if (obj instanceof Uint8Array) {
|
|
251
|
+
return { _base64: uint8ArrayToBase64(obj) };
|
|
252
|
+
}
|
|
253
|
+
if (Array.isArray(obj)) {
|
|
254
|
+
return obj.map(item => serializeBinaryForStorage(item));
|
|
255
|
+
}
|
|
256
|
+
if (typeof obj === 'object') {
|
|
257
|
+
const result = {};
|
|
258
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
259
|
+
result[key] = serializeBinaryForStorage(value);
|
|
260
|
+
}
|
|
261
|
+
return result;
|
|
262
|
+
}
|
|
263
|
+
return obj;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Restore Uint8Array from base64 serialization.
|
|
267
|
+
* Call this before sending conversation to API if images were preserved.
|
|
268
|
+
*/
|
|
269
|
+
export function deserializeBinaryFromStorage(obj) {
|
|
270
|
+
if (obj === null || obj === undefined)
|
|
271
|
+
return obj;
|
|
272
|
+
// Check for our serialized format
|
|
273
|
+
if (typeof obj === 'object' && obj !== null) {
|
|
274
|
+
const o = obj;
|
|
275
|
+
if (typeof o._base64 === 'string' && Object.keys(o).length === 1) {
|
|
276
|
+
return base64ToUint8Array(o._base64);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
if (Array.isArray(obj)) {
|
|
280
|
+
return obj.map(item => deserializeBinaryFromStorage(item));
|
|
281
|
+
}
|
|
282
|
+
if (typeof obj === 'object') {
|
|
283
|
+
const result = {};
|
|
284
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
285
|
+
result[key] = deserializeBinaryFromStorage(value);
|
|
286
|
+
}
|
|
287
|
+
return result;
|
|
288
|
+
}
|
|
289
|
+
return obj;
|
|
290
|
+
}
|
|
291
|
+
function stripBinaryFromConversationInternal(obj) {
|
|
292
|
+
if (obj === null || obj === undefined)
|
|
293
|
+
return obj;
|
|
294
|
+
// Handle Uint8Array directly
|
|
295
|
+
if (obj instanceof Uint8Array) {
|
|
296
|
+
return IMAGE_PLACEHOLDER;
|
|
297
|
+
}
|
|
298
|
+
// Handle our serialized format
|
|
299
|
+
if (typeof obj === 'object' && obj !== null) {
|
|
300
|
+
const o = obj;
|
|
301
|
+
if (typeof o._base64 === 'string' && Object.keys(o).length === 1) {
|
|
302
|
+
return IMAGE_PLACEHOLDER;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
if (Array.isArray(obj)) {
|
|
306
|
+
return obj.map(item => {
|
|
307
|
+
// Replace entire Bedrock image/document/video blocks with text blocks
|
|
308
|
+
if (isBedrockImageBlock(item) || isSerializedBedrockImageBlock(item)) {
|
|
309
|
+
return { text: IMAGE_PLACEHOLDER };
|
|
310
|
+
}
|
|
311
|
+
if (isBedrockDocumentBlock(item) || isSerializedBedrockDocumentBlock(item)) {
|
|
312
|
+
return { text: DOCUMENT_PLACEHOLDER };
|
|
313
|
+
}
|
|
314
|
+
if (isBedrockVideoBlock(item) || isSerializedBedrockVideoBlock(item)) {
|
|
315
|
+
return { text: VIDEO_PLACEHOLDER };
|
|
316
|
+
}
|
|
317
|
+
return stripBinaryFromConversationInternal(item);
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
if (typeof obj === 'object') {
|
|
321
|
+
const result = {};
|
|
322
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
323
|
+
// Preserve metadata
|
|
324
|
+
if (key === META_KEY) {
|
|
325
|
+
result[key] = value;
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
result[key] = stripBinaryFromConversationInternal(value);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return result;
|
|
332
|
+
}
|
|
333
|
+
return obj;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Strip large base64 image data from conversation to reduce storage bloat.
|
|
337
|
+
*
|
|
338
|
+
* While base64 strings survive JSON.stringify (unlike Uint8Array), they can
|
|
339
|
+
* significantly bloat conversation storage. This function replaces entire
|
|
340
|
+
* image blocks with text placeholders:
|
|
341
|
+
* - OpenAI: { type: "image_url", image_url: { url: "data:..." } } → { type: "text", text: "[placeholder]" }
|
|
342
|
+
* - Gemini: { inlineData: { data: "...", mimeType: "..." } } → { text: "[placeholder]" }
|
|
343
|
+
*
|
|
344
|
+
* @param obj The conversation object to strip base64 images from
|
|
345
|
+
* @param options Optional settings for turn-based stripping
|
|
346
|
+
* @returns A new object with image blocks replaced with text placeholders
|
|
347
|
+
*/
|
|
348
|
+
export function stripBase64ImagesFromConversation(obj, options) {
|
|
349
|
+
const { keepForTurns = 0 } = options ?? {};
|
|
350
|
+
const currentTurn = options?.currentTurn ?? getConversationMeta(obj).turnNumber;
|
|
351
|
+
// If we should keep images and haven't exceeded the turn threshold, don't strip
|
|
352
|
+
// (base64 strings are already safe for JSON serialization)
|
|
353
|
+
if (keepForTurns > 0 && currentTurn < keepForTurns) {
|
|
354
|
+
return obj;
|
|
355
|
+
}
|
|
356
|
+
return stripBase64ImagesFromConversationInternal(obj);
|
|
357
|
+
}
|
|
358
|
+
function stripBase64ImagesFromConversationInternal(obj) {
|
|
359
|
+
if (obj === null || obj === undefined)
|
|
360
|
+
return obj;
|
|
361
|
+
// Handle base64 data URL string directly
|
|
362
|
+
if (typeof obj === 'string' && obj.startsWith('data:image/') && obj.includes(';base64,')) {
|
|
363
|
+
return IMAGE_PLACEHOLDER;
|
|
364
|
+
}
|
|
365
|
+
if (Array.isArray(obj)) {
|
|
366
|
+
return obj.map(item => {
|
|
367
|
+
// Replace entire OpenAI image_url blocks with text blocks
|
|
368
|
+
if (isOpenAIBase64ImageBlock(item)) {
|
|
369
|
+
return { type: 'text', text: IMAGE_PLACEHOLDER };
|
|
370
|
+
}
|
|
371
|
+
// Replace entire Gemini inlineData blocks with text blocks
|
|
372
|
+
if (isGeminiInlineDataBlock(item)) {
|
|
373
|
+
return { text: IMAGE_PLACEHOLDER };
|
|
374
|
+
}
|
|
375
|
+
return stripBase64ImagesFromConversationInternal(item);
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
if (typeof obj === 'object') {
|
|
379
|
+
const result = {};
|
|
380
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
381
|
+
// Preserve metadata
|
|
382
|
+
if (key === META_KEY) {
|
|
383
|
+
result[key] = value;
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
result[key] = stripBase64ImagesFromConversationInternal(value);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return result;
|
|
390
|
+
}
|
|
391
|
+
return obj;
|
|
392
|
+
}
|
|
393
|
+
/** Approximate characters per token for text truncation */
|
|
394
|
+
const CHARS_PER_TOKEN = 4;
|
|
395
|
+
/**
|
|
396
|
+
* Truncate large text content in conversation to reduce storage and context bloat.
|
|
397
|
+
*
|
|
398
|
+
* This function finds text strings in tool results and truncates them if they
|
|
399
|
+
* exceed the specified token limit (using ~4 chars/token estimate).
|
|
400
|
+
*
|
|
401
|
+
* Works with:
|
|
402
|
+
* - Bedrock: toolResult.content[].text
|
|
403
|
+
* - OpenAI: tool message content (string)
|
|
404
|
+
* - Gemini: function response content
|
|
405
|
+
*
|
|
406
|
+
* @param obj The conversation object to truncate text in
|
|
407
|
+
* @param options Options including textMaxTokens
|
|
408
|
+
* @returns A new object with large text content truncated
|
|
409
|
+
*/
|
|
410
|
+
export function truncateLargeTextInConversation(obj, options) {
|
|
411
|
+
const maxTokens = options?.textMaxTokens;
|
|
412
|
+
// If no max tokens specified or 0, don't truncate
|
|
413
|
+
if (!maxTokens || maxTokens <= 0) {
|
|
414
|
+
return obj;
|
|
415
|
+
}
|
|
416
|
+
const maxChars = maxTokens * CHARS_PER_TOKEN;
|
|
417
|
+
return truncateLargeTextInternal(obj, maxChars);
|
|
418
|
+
}
|
|
419
|
+
function truncateLargeTextInternal(obj, maxChars) {
|
|
420
|
+
if (obj === null || obj === undefined)
|
|
421
|
+
return obj;
|
|
422
|
+
// Truncate large strings
|
|
423
|
+
if (typeof obj === 'string') {
|
|
424
|
+
if (obj.length > maxChars) {
|
|
425
|
+
return obj.substring(0, maxChars) + TEXT_TRUNCATED_MARKER;
|
|
426
|
+
}
|
|
427
|
+
return obj;
|
|
428
|
+
}
|
|
429
|
+
if (Array.isArray(obj)) {
|
|
430
|
+
return obj.map(item => truncateLargeTextInternal(item, maxChars));
|
|
431
|
+
}
|
|
432
|
+
if (typeof obj === 'object') {
|
|
433
|
+
const result = {};
|
|
434
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
435
|
+
// Preserve metadata without truncation
|
|
436
|
+
if (key === META_KEY) {
|
|
437
|
+
result[key] = value;
|
|
438
|
+
}
|
|
439
|
+
else {
|
|
440
|
+
result[key] = truncateLargeTextInternal(value, maxChars);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
return result;
|
|
444
|
+
}
|
|
445
|
+
return obj;
|
|
446
|
+
}
|
|
447
|
+
//# sourceMappingURL=conversation-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-utils.js","sourceRoot":"","sources":["../../src/conversation-utils.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/index.js
CHANGED
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC"}
|
package/lib/esm/stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,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;AAED,MAAM,CAAC,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;AAED,MAAM,CAAC,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;
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,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;AAED,MAAM,CAAC,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;AAED,MAAM,CAAC,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;QAE/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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompletionStream.d.ts","sourceRoot":"","sources":["../../src/CompletionStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"CompletionStream.d.ts","sourceRoot":"","sources":["../../src/CompletionStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAgC,MAAM,oBAAoB,CAAC;AACxI,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,uBAAuB,CAAC,OAAO,GAAG,GAAG,CAAE,YAAW,gBAAgB,CAAC,OAAO,CAAC;IAKjE,MAAM,EAAE,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC;IACtD,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,gBAAgB;IALpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;gBAEhC,MAAM,EAAE,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,EACtD,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,gBAAgB;IAI7B,CAAC,MAAM,CAAC,aAAa,CAAC;CAkMhC;AAED,qBAAa,wBAAwB,CAAC,OAAO,GAAG,GAAG,CAAE,YAAW,gBAAgB,CAAC,OAAO,CAAC;IAIlE,MAAM,EAAE,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC;IACtD,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,gBAAgB;IAJpC,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;gBAEhC,MAAM,EAAE,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,EACtD,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,gBAAgB;IAG7B,CAAC,MAAM,CAAC,aAAa,CAAC;CA8BhC"}
|
package/lib/types/Driver.d.ts
CHANGED
|
@@ -23,6 +23,11 @@ export interface Driver<PromptT = unknown> {
|
|
|
23
23
|
listTrainableModels(): Promise<AIModel[]>;
|
|
24
24
|
validateConnection(): Promise<boolean>;
|
|
25
25
|
generateEmbeddings(options: EmbeddingsOptions): Promise<EmbeddingsResult>;
|
|
26
|
+
/**
|
|
27
|
+
* Optional cleanup method called when the driver is evicted from the cache.
|
|
28
|
+
* Override this in driver implementations that need to release resources.
|
|
29
|
+
*/
|
|
30
|
+
destroy?(): void;
|
|
26
31
|
}
|
|
27
32
|
/**
|
|
28
33
|
* To be implemented by each driver
|
|
@@ -39,6 +44,7 @@ export declare abstract class AbstractDriver<OptionsT extends DriverOptions = Dr
|
|
|
39
44
|
validateResult(result: Completion, options: ExecutionOptions): void;
|
|
40
45
|
execute(segments: PromptSegment[], options: ExecutionOptions): Promise<ExecutionResponse<PromptT>>;
|
|
41
46
|
_execute(prompt: PromptT, options: ExecutionOptions): Promise<ExecutionResponse<PromptT>>;
|
|
47
|
+
protected isImageModel(_model: string): boolean;
|
|
42
48
|
stream(segments: PromptSegment[], options: ExecutionOptions): Promise<CompletionStream<PromptT>>;
|
|
43
49
|
/**
|
|
44
50
|
* Override this method to provide a custom prompt formatter
|
|
@@ -64,11 +70,27 @@ export declare abstract class AbstractDriver<OptionsT extends DriverOptions = Dr
|
|
|
64
70
|
* @returns
|
|
65
71
|
*/
|
|
66
72
|
listTrainableModels(): Promise<AIModel[]>;
|
|
73
|
+
/**
|
|
74
|
+
* Build the conversation context after streaming completion.
|
|
75
|
+
* Override this in driver implementations that support multi-turn conversations.
|
|
76
|
+
*
|
|
77
|
+
* @param prompt - The prompt that was sent (includes prior conversation context)
|
|
78
|
+
* @param result - The completion results from the streamed response
|
|
79
|
+
* @param toolUse - The tool calls from the streamed response (if any)
|
|
80
|
+
* @param options - The execution options
|
|
81
|
+
* @returns The updated conversation context, or undefined if not supported
|
|
82
|
+
*/
|
|
83
|
+
buildStreamingConversation(_prompt: PromptT, _result: unknown[], _toolUse: unknown[] | undefined, _options: ExecutionOptions): unknown | undefined;
|
|
67
84
|
abstract requestTextCompletion(prompt: PromptT, options: ExecutionOptions): Promise<Completion>;
|
|
68
85
|
abstract requestTextCompletionStream(prompt: PromptT, options: ExecutionOptions): Promise<AsyncIterable<CompletionChunkObject>>;
|
|
69
86
|
requestImageGeneration(_prompt: PromptT, _options: ExecutionOptions): Promise<Completion>;
|
|
70
87
|
abstract listModels(params?: ModelSearchPayload): Promise<AIModel[]>;
|
|
71
88
|
abstract validateConnection(): Promise<boolean>;
|
|
72
89
|
abstract generateEmbeddings(options: EmbeddingsOptions): Promise<EmbeddingsResult>;
|
|
90
|
+
/**
|
|
91
|
+
* Cleanup method called when the driver is evicted from the cache.
|
|
92
|
+
* Override this in driver implementations that need to release resources.
|
|
93
|
+
*/
|
|
94
|
+
destroy(): void;
|
|
73
95
|
}
|
|
74
96
|
//# sourceMappingURL=Driver.d.ts.map
|