@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/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
- switch (options.output_modality) {
106
- case Modalities.text:
107
- result = await this.requestTextCompletion(prompt, options);
108
- this.validateResult(result, options);
109
- break;
110
- case Modalities.image:
111
- result = await this.requestImageGeneration(prompt, options);
112
- break;
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
@@ -1 +1 @@
1
- {"version":3,"file":"Driver.js","sourceRoot":"","sources":["../../src/Driver.ts"],"names":[],"mappings":"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"}
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;AA6CD;;GAEG;AACH,MAAM,OAAgB,cAAc;IAChC,OAAO,CAAW;IAClB,MAAM,CAAS;IAIf,YAAY,IAAc;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,OAA8B;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;QACjH,OAAO,IAAI,CAAC,SAAS,CAAC;YAClB,MAAM;YACN,UAAU,EAAE,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC;SAC/G,CAAC,CAAC;IACP,CAAC;IAED,aAAa,CAAC,QAAoB,EAAE,QAAyB;QACzD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,cAAc,CAAC,MAAc;QACzB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,cAAc,CAAC,MAAc;QACzB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,cAAc,CAAC,MAAkB,EAAE,OAAyB;QACxD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC7D,IAAI,CAAC;gBACD,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;YACzE,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBAClB,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,QAAQ,MAAM,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnJ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC;gBACrE,MAAM,CAAC,KAAK,GAAG;oBACX,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI;oBAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,IAAI,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAA;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAyB,EAAE,OAAyB;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;YACtD,KAAa,CAAC,MAAM,GAAG,MAAM,CAAC;YAC/B,MAAM,KAAK,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAe,EAAE,OAAyB;QACrD,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,IAAI,MAAM,CAAC;YAEX,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,IAAI,IAAI,CAAC,QAAQ,yBAAyB,OAAO,CAAC,KAAK,kBAAkB,CAAC,CAAC;gBAC/E,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,IAAI,IAAI,CAAC,QAAQ,yBAAyB,OAAO,CAAC,KAAK,iBAAiB,CAAC,CAAC;gBAC9E,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC3D,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACzC,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAC1C,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACZ,KAAa,CAAC,MAAM,GAAG,MAAM,CAAC;YAC/B,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAES,YAAY,CAAC,MAAc;QACjC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,wEAAwE;IACxE,KAAK,CAAC,MAAM,CAAC,QAAyB,EAAE,OAAyB;QAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,eAAe,KAAK,UAAU,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;YAC3D,OAAO,IAAI,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,YAAY,CAAC,QAAyB,EAAE,IAAmB;QACvE,OAAO,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAY,CAAC;IACrE,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,QAAyB,EAAE,IAAmB;QACpE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/G,CAAC;IAED;;;;;;;;OAQG;IACO,SAAS,CAAC,QAA0B;QAC1C,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,mBAAmB;QACrB,OAAO,EAAE,CAAC;IACd,CAAC;IAED;;;;;;;;;OASG;IACH,0BAA0B,CACtB,OAAgB,EAChB,OAAkB,EAClB,QAA+B,EAC/B,QAA0B;QAE1B,kEAAkE;QAClE,OAAO,SAAS,CAAC;IACrB,CAAC;IAMD,KAAK,CAAC,sBAAsB,CAAC,OAAgB,EAAE,QAA0B;QACrE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACrD,gFAAgF;IACpF,CAAC;IAWD;;;OAGG;IACH,OAAO;QACH,mBAAmB;IACvB,CAAC;CACJ"}
@@ -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
@@ -1,5 +1,6 @@
1
1
  export * from "./Driver.js";
2
2
  export * from "./json.js";
3
3
  export * from "./stream.js";
4
+ export * from "./conversation-utils.js";
4
5
  export * from "@llumiverse/common";
5
6
  //# sourceMappingURL=index.js.map
@@ -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"}
@@ -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;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"}
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,EAAuB,MAAM,oBAAoB,CAAC;AAC/H,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;CA6HhC;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"}
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"}
@@ -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