@llumiverse/core 1.3.0 → 1.4.0-dev.20260629.090753Z

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/lib/CompletionStream.d.ts +48 -0
  2. package/lib/CompletionStream.d.ts.map +1 -0
  3. package/lib/{esm/CompletionStream.js → CompletionStream.js} +142 -67
  4. package/lib/CompletionStream.js.map +1 -0
  5. package/lib/{types/Driver.d.ts → Driver.d.ts} +38 -5
  6. package/lib/Driver.d.ts.map +1 -0
  7. package/lib/{esm/Driver.js → Driver.js} +151 -106
  8. package/lib/Driver.js.map +1 -0
  9. package/lib/{types/async.d.ts → async.d.ts} +3 -3
  10. package/lib/async.d.ts.map +1 -0
  11. package/lib/{esm/async.js → async.js} +4 -4
  12. package/lib/async.js.map +1 -0
  13. package/lib/{types/conversation-utils.d.ts → conversation-utils.d.ts} +9 -0
  14. package/lib/conversation-utils.d.ts.map +1 -0
  15. package/lib/{esm/conversation-utils.js → conversation-utils.js} +78 -15
  16. package/lib/conversation-utils.js.map +1 -0
  17. package/lib/embeddings.d.ts +58 -0
  18. package/lib/embeddings.d.ts.map +1 -0
  19. package/lib/embeddings.js +131 -0
  20. package/lib/embeddings.js.map +1 -0
  21. package/lib/formatters/commons.d.ts +3 -0
  22. package/lib/formatters/commons.d.ts.map +1 -0
  23. package/lib/formatters/commons.js +4 -0
  24. package/lib/formatters/commons.js.map +1 -0
  25. package/lib/{types/formatters → formatters}/generic.d.ts +2 -2
  26. package/lib/formatters/generic.d.ts.map +1 -0
  27. package/lib/{esm/formatters → formatters}/generic.js +8 -8
  28. package/lib/formatters/generic.js.map +1 -0
  29. package/lib/formatters/index.d.ts +4 -0
  30. package/lib/formatters/index.d.ts.map +1 -0
  31. package/lib/formatters/index.js +4 -0
  32. package/lib/formatters/index.js.map +1 -0
  33. package/lib/{types/formatters → formatters}/nova.d.ts +4 -4
  34. package/lib/formatters/nova.d.ts.map +1 -0
  35. package/lib/{esm/formatters → formatters}/nova.js +19 -17
  36. package/lib/formatters/nova.js.map +1 -0
  37. package/lib/http-agent.d.ts +53 -0
  38. package/lib/http-agent.d.ts.map +1 -0
  39. package/lib/http-agent.js +141 -0
  40. package/lib/http-agent.js.map +1 -0
  41. package/lib/index.d.ts +8 -0
  42. package/lib/index.d.ts.map +1 -0
  43. package/lib/index.js +7 -0
  44. package/lib/index.js.map +1 -0
  45. package/lib/{types/json.d.ts → json.d.ts} +1 -1
  46. package/lib/json.d.ts.map +1 -0
  47. package/lib/{esm/json.js → json.js} +4 -3
  48. package/lib/json.js.map +1 -0
  49. package/lib/logger.d.ts +3 -0
  50. package/lib/logger.d.ts.map +1 -0
  51. package/lib/logger.js +42 -0
  52. package/lib/logger.js.map +1 -0
  53. package/lib/resolver.d.ts +2 -0
  54. package/lib/resolver.d.ts.map +1 -0
  55. package/lib/{esm/resolver.js → resolver.js} +7 -4
  56. package/lib/resolver.js.map +1 -0
  57. package/lib/stream.d.ts.map +1 -0
  58. package/lib/stream.js.map +1 -0
  59. package/lib/{types/validation.d.ts → validation.d.ts} +1 -1
  60. package/lib/validation.d.ts.map +1 -0
  61. package/lib/validation.js +100 -0
  62. package/lib/validation.js.map +1 -0
  63. package/package.json +28 -38
  64. package/src/CompletionStream.ts +208 -115
  65. package/src/Driver.error.test.ts +101 -72
  66. package/src/Driver.ts +208 -152
  67. package/src/async.ts +30 -30
  68. package/src/conversation-utils.ts +92 -16
  69. package/src/embeddings.ts +157 -0
  70. package/src/formatters/commons.ts +2 -2
  71. package/src/formatters/generic.ts +20 -17
  72. package/src/formatters/index.ts +3 -3
  73. package/src/formatters/nova.ts +53 -51
  74. package/src/http-agent.test.ts +281 -0
  75. package/src/http-agent.ts +177 -0
  76. package/src/index.ts +7 -5
  77. package/src/json.ts +6 -5
  78. package/src/logger.ts +42 -0
  79. package/src/resolver.ts +12 -9
  80. package/src/stream.ts +4 -5
  81. package/src/validation.ts +42 -29
  82. package/lib/cjs/CompletionStream.js +0 -293
  83. package/lib/cjs/CompletionStream.js.map +0 -1
  84. package/lib/cjs/Driver.js +0 -300
  85. package/lib/cjs/Driver.js.map +0 -1
  86. package/lib/cjs/async.js +0 -131
  87. package/lib/cjs/async.js.map +0 -1
  88. package/lib/cjs/conversation-utils.js +0 -579
  89. package/lib/cjs/conversation-utils.js.map +0 -1
  90. package/lib/cjs/formatters/commons.js +0 -7
  91. package/lib/cjs/formatters/commons.js.map +0 -1
  92. package/lib/cjs/formatters/generic.js +0 -59
  93. package/lib/cjs/formatters/generic.js.map +0 -1
  94. package/lib/cjs/formatters/index.js +0 -20
  95. package/lib/cjs/formatters/index.js.map +0 -1
  96. package/lib/cjs/formatters/nova.js +0 -99
  97. package/lib/cjs/formatters/nova.js.map +0 -1
  98. package/lib/cjs/index.js +0 -22
  99. package/lib/cjs/index.js.map +0 -1
  100. package/lib/cjs/json.js +0 -29
  101. package/lib/cjs/json.js.map +0 -1
  102. package/lib/cjs/package.json +0 -3
  103. package/lib/cjs/resolver.js +0 -45
  104. package/lib/cjs/resolver.js.map +0 -1
  105. package/lib/cjs/stream.js +0 -30
  106. package/lib/cjs/stream.js.map +0 -1
  107. package/lib/cjs/validation.js +0 -96
  108. package/lib/cjs/validation.js.map +0 -1
  109. package/lib/esm/CompletionStream.js.map +0 -1
  110. package/lib/esm/Driver.js.map +0 -1
  111. package/lib/esm/async.js.map +0 -1
  112. package/lib/esm/conversation-utils.js.map +0 -1
  113. package/lib/esm/formatters/commons.js +0 -4
  114. package/lib/esm/formatters/commons.js.map +0 -1
  115. package/lib/esm/formatters/generic.js.map +0 -1
  116. package/lib/esm/formatters/index.js +0 -4
  117. package/lib/esm/formatters/index.js.map +0 -1
  118. package/lib/esm/formatters/nova.js.map +0 -1
  119. package/lib/esm/index.js +0 -6
  120. package/lib/esm/index.js.map +0 -1
  121. package/lib/esm/json.js.map +0 -1
  122. package/lib/esm/resolver.js.map +0 -1
  123. package/lib/esm/stream.js.map +0 -1
  124. package/lib/esm/validation.js +0 -88
  125. package/lib/esm/validation.js.map +0 -1
  126. package/lib/types/CompletionStream.d.ts +0 -20
  127. package/lib/types/CompletionStream.d.ts.map +0 -1
  128. package/lib/types/Driver.d.ts.map +0 -1
  129. package/lib/types/async.d.ts.map +0 -1
  130. package/lib/types/conversation-utils.d.ts.map +0 -1
  131. package/lib/types/formatters/commons.d.ts +0 -3
  132. package/lib/types/formatters/commons.d.ts.map +0 -1
  133. package/lib/types/formatters/generic.d.ts.map +0 -1
  134. package/lib/types/formatters/index.d.ts +0 -4
  135. package/lib/types/formatters/index.d.ts.map +0 -1
  136. package/lib/types/formatters/nova.d.ts.map +0 -1
  137. package/lib/types/index.d.ts +0 -6
  138. package/lib/types/index.d.ts.map +0 -1
  139. package/lib/types/json.d.ts.map +0 -1
  140. package/lib/types/resolver.d.ts +0 -2
  141. package/lib/types/resolver.d.ts.map +0 -1
  142. package/lib/types/stream.d.ts.map +0 -1
  143. package/lib/types/validation.d.ts.map +0 -1
  144. /package/lib/{types/stream.d.ts → stream.d.ts} +0 -0
  145. /package/lib/{esm/stream.js → stream.js} +0 -0
@@ -1,579 +0,0 @@
1
- "use strict";
2
- /**
3
- * Utilities for cleaning up conversation objects before storage.
4
- *
5
- * These functions strip binary data (Uint8Array) and large base64 strings
6
- * from conversation objects to prevent JSON.stringify corruption and reduce
7
- * storage bloat.
8
- *
9
- * IMPORTANT: These functions replace entire image/document/video BLOCKS with
10
- * text placeholders, not just the data. This ensures the conversation remains
11
- * valid for subsequent API calls.
12
- */
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.getConversationMeta = getConversationMeta;
15
- exports.setConversationMeta = setConversationMeta;
16
- exports.unwrapConversationArray = unwrapConversationArray;
17
- exports.incrementConversationTurn = incrementConversationTurn;
18
- exports.stripBinaryFromConversation = stripBinaryFromConversation;
19
- exports.deserializeBinaryFromStorage = deserializeBinaryFromStorage;
20
- exports.stripBase64ImagesFromConversation = stripBase64ImagesFromConversation;
21
- exports.truncateLargeTextInConversation = truncateLargeTextInConversation;
22
- exports.stripHeartbeatsFromConversation = stripHeartbeatsFromConversation;
23
- const IMAGE_PLACEHOLDER = '[Image removed from conversation history]';
24
- const DOCUMENT_PLACEHOLDER = '[Document removed from conversation history]';
25
- const VIDEO_PLACEHOLDER = '[Video removed from conversation history]';
26
- const TEXT_TRUNCATED_MARKER = '\n\n[Content truncated - exceeded token limit]';
27
- /** Metadata key used to store turn information in conversations */
28
- const META_KEY = '_llumiverse_meta';
29
- /**
30
- * Check if an object is a Bedrock image block: { image: { source: { bytes: Uint8Array } } }
31
- */
32
- function isBedrockImageBlock(obj) {
33
- if (typeof obj !== 'object' || obj === null)
34
- return false;
35
- const o = obj;
36
- if (!o.image || typeof o.image !== 'object')
37
- return false;
38
- const img = o.image;
39
- if (!img.source || typeof img.source !== 'object')
40
- return false;
41
- const src = img.source;
42
- return src.bytes instanceof Uint8Array;
43
- }
44
- /**
45
- * Check if an object is a serialized Bedrock image block (Uint8Array converted to base64)
46
- */
47
- function isSerializedBedrockImageBlock(obj) {
48
- if (typeof obj !== 'object' || obj === null)
49
- return false;
50
- const o = obj;
51
- if (!o.image || typeof o.image !== 'object')
52
- return false;
53
- const img = o.image;
54
- if (!img.source || typeof img.source !== 'object')
55
- return false;
56
- const src = img.source;
57
- // Check for our serialized format: bytes: { _base64: string }
58
- if (!src.bytes || typeof src.bytes !== 'object')
59
- return false;
60
- const bytes = src.bytes;
61
- return typeof bytes._base64 === 'string';
62
- }
63
- /**
64
- * Check if an object is a Bedrock document block: { document: { source: { bytes: Uint8Array } } }
65
- */
66
- function isBedrockDocumentBlock(obj) {
67
- if (typeof obj !== 'object' || obj === null)
68
- return false;
69
- const o = obj;
70
- if (!o.document || typeof o.document !== 'object')
71
- return false;
72
- const doc = o.document;
73
- if (!doc.source || typeof doc.source !== 'object')
74
- return false;
75
- const src = doc.source;
76
- return src.bytes instanceof Uint8Array;
77
- }
78
- /**
79
- * Check if an object is a serialized Bedrock document block
80
- */
81
- function isSerializedBedrockDocumentBlock(obj) {
82
- if (typeof obj !== 'object' || obj === null)
83
- return false;
84
- const o = obj;
85
- if (!o.document || typeof o.document !== 'object')
86
- return false;
87
- const doc = o.document;
88
- if (!doc.source || typeof doc.source !== 'object')
89
- return false;
90
- const src = doc.source;
91
- // Check for our serialized format: bytes: { _base64: string }
92
- if (!src.bytes || typeof src.bytes !== 'object')
93
- return false;
94
- const bytes = src.bytes;
95
- return typeof bytes._base64 === 'string';
96
- }
97
- /**
98
- * Check if an object is a Bedrock video block: { video: { source: { bytes: Uint8Array } } }
99
- */
100
- function isBedrockVideoBlock(obj) {
101
- if (typeof obj !== 'object' || obj === null)
102
- return false;
103
- const o = obj;
104
- if (!o.video || typeof o.video !== 'object')
105
- return false;
106
- const vid = o.video;
107
- if (!vid.source || typeof vid.source !== 'object')
108
- return false;
109
- const src = vid.source;
110
- return src.bytes instanceof Uint8Array;
111
- }
112
- /**
113
- * Check if an object is a serialized Bedrock video block
114
- */
115
- function isSerializedBedrockVideoBlock(obj) {
116
- if (typeof obj !== 'object' || obj === null)
117
- return false;
118
- const o = obj;
119
- if (!o.video || typeof o.video !== 'object')
120
- return false;
121
- const vid = o.video;
122
- if (!vid.source || typeof vid.source !== 'object')
123
- return false;
124
- const src = vid.source;
125
- // Check for our serialized format: bytes: { _base64: string }
126
- if (!src.bytes || typeof src.bytes !== 'object')
127
- return false;
128
- const bytes = src.bytes;
129
- return typeof bytes._base64 === 'string';
130
- }
131
- /**
132
- * Check if an object is an OpenAI image_url block with base64 data
133
- */
134
- function isOpenAIBase64ImageBlock(obj) {
135
- if (typeof obj !== 'object' || obj === null)
136
- return false;
137
- const o = obj;
138
- if (o.type !== 'image_url')
139
- return false;
140
- if (!o.image_url || typeof o.image_url !== 'object')
141
- return false;
142
- const imgUrl = o.image_url;
143
- return typeof imgUrl.url === 'string' &&
144
- imgUrl.url.startsWith('data:image/') &&
145
- imgUrl.url.includes(';base64,');
146
- }
147
- /**
148
- * Check if an object is an Anthropic base64 image block: { type: "image", source: { type: "base64", data: "...", media_type: "..." } }
149
- */
150
- function isAnthropicBase64ImageBlock(obj) {
151
- if (typeof obj !== 'object' || obj === null)
152
- return false;
153
- const o = obj;
154
- if (o.type !== 'image')
155
- return false;
156
- if (!o.source || typeof o.source !== 'object')
157
- return false;
158
- const src = o.source;
159
- return src.type === 'base64' && typeof src.data === 'string';
160
- }
161
- /**
162
- * Check if an object is an Anthropic base64 document block: { type: "document", source: { type: "base64", data: "...", media_type: "..." } }
163
- */
164
- function isAnthropicBase64DocumentBlock(obj) {
165
- if (typeof obj !== 'object' || obj === null)
166
- return false;
167
- const o = obj;
168
- if (o.type !== 'document')
169
- return false;
170
- if (!o.source || typeof o.source !== 'object')
171
- return false;
172
- const src = o.source;
173
- return src.type === 'base64' && typeof src.data === 'string';
174
- }
175
- /**
176
- * Check if an object is a Gemini inlineData block with large base64 data
177
- */
178
- function isGeminiInlineDataBlock(obj) {
179
- if (typeof obj !== 'object' || obj === null)
180
- return false;
181
- const o = obj;
182
- if (!o.inlineData || typeof o.inlineData !== 'object')
183
- return false;
184
- const inlineData = o.inlineData;
185
- return typeof inlineData.data === 'string' && inlineData.data.length > 1000;
186
- }
187
- /**
188
- * Convert Uint8Array to base64 string for safe JSON serialization.
189
- */
190
- function uint8ArrayToBase64(bytes) {
191
- let binary = '';
192
- for (let i = 0; i < bytes.byteLength; i++) {
193
- binary += String.fromCharCode(bytes[i]);
194
- }
195
- return btoa(binary);
196
- }
197
- /**
198
- * Convert base64 string back to Uint8Array.
199
- */
200
- function base64ToUint8Array(base64) {
201
- const binary = atob(base64);
202
- const bytes = new Uint8Array(binary.length);
203
- for (let i = 0; i < binary.length; i++) {
204
- bytes[i] = binary.charCodeAt(i);
205
- }
206
- return bytes;
207
- }
208
- /**
209
- * Get metadata from a conversation object, or return defaults.
210
- */
211
- function getConversationMeta(conversation) {
212
- if (typeof conversation === 'object' && conversation !== null) {
213
- const meta = conversation[META_KEY];
214
- if (meta && typeof meta === 'object') {
215
- return meta;
216
- }
217
- }
218
- return { turnNumber: 0 };
219
- }
220
- /** Key used to wrap array conversations to preserve their type through JSON serialization */
221
- const ARRAY_WRAPPER_KEY = '_arrayConversation';
222
- /**
223
- * Set metadata on a conversation object.
224
- * Arrays are wrapped in an object to preserve their type through JSON serialization.
225
- */
226
- function setConversationMeta(conversation, meta) {
227
- if (Array.isArray(conversation)) {
228
- // Wrap arrays in an object to preserve their array nature through JSON serialization
229
- return { [ARRAY_WRAPPER_KEY]: conversation, [META_KEY]: meta };
230
- }
231
- if (typeof conversation === 'object' && conversation !== null) {
232
- return { ...conversation, [META_KEY]: meta };
233
- }
234
- return conversation;
235
- }
236
- /**
237
- * Unwrap a conversation array that was wrapped by setConversationMeta.
238
- * If the conversation is not a wrapped array, returns undefined.
239
- * Use this to extract the actual message array from a conversation object.
240
- */
241
- function unwrapConversationArray(conversation) {
242
- if (typeof conversation === 'object' && conversation !== null) {
243
- const c = conversation;
244
- if (Array.isArray(c[ARRAY_WRAPPER_KEY])) {
245
- return c[ARRAY_WRAPPER_KEY];
246
- }
247
- }
248
- return undefined;
249
- }
250
- /**
251
- * Increment the turn number in a conversation and return the updated conversation.
252
- */
253
- function incrementConversationTurn(conversation) {
254
- const meta = getConversationMeta(conversation);
255
- return setConversationMeta(conversation, { ...meta, turnNumber: meta.turnNumber + 1 });
256
- }
257
- /**
258
- * Strip binary data (Uint8Array) from conversation to prevent JSON.stringify corruption.
259
- *
260
- * When Uint8Array is passed through JSON.stringify, it gets corrupted into an object
261
- * like { "0": 137, "1": 80, ... } instead of proper binary data. This breaks
262
- * subsequent API calls that expect binary data.
263
- *
264
- * This function either:
265
- * - Serializes images to base64 for safe storage (keepForTurns = Infinity, default)
266
- * - Strips images immediately (keepForTurns = 0)
267
- * - Strips images after N turns
268
- *
269
- * @param obj The conversation object to strip binary data from
270
- * @param options Optional settings for turn-based stripping
271
- * @returns A new object with binary content handled appropriately
272
- */
273
- function stripBinaryFromConversation(obj, options) {
274
- const { keepForTurns = Infinity } = options ?? {};
275
- const currentTurn = options?.currentTurn ?? getConversationMeta(obj).turnNumber;
276
- // If we should keep images and haven't exceeded the turn threshold,
277
- // serialize Uint8Array to base64 for safe JSON storage
278
- if (keepForTurns > 0 && currentTurn < keepForTurns) {
279
- return serializeBinaryForStorage(obj);
280
- }
281
- // Strip all binary/serialized images
282
- return stripBinaryFromConversationInternal(obj);
283
- }
284
- /**
285
- * Serialize Uint8Array to base64 for safe JSON storage, preserving the image structure.
286
- */
287
- function serializeBinaryForStorage(obj) {
288
- if (obj === null || obj === undefined)
289
- return obj;
290
- if (obj instanceof Uint8Array) {
291
- return { _base64: uint8ArrayToBase64(obj) };
292
- }
293
- if (Array.isArray(obj)) {
294
- return obj.map(item => serializeBinaryForStorage(item));
295
- }
296
- if (typeof obj === 'object') {
297
- const result = {};
298
- for (const [key, value] of Object.entries(obj)) {
299
- result[key] = serializeBinaryForStorage(value);
300
- }
301
- return result;
302
- }
303
- return obj;
304
- }
305
- /**
306
- * Restore Uint8Array from base64 serialization.
307
- * Call this before sending conversation to API if images were preserved.
308
- */
309
- function deserializeBinaryFromStorage(obj) {
310
- if (obj === null || obj === undefined)
311
- return obj;
312
- // Check for our serialized format
313
- if (typeof obj === 'object' && obj !== null) {
314
- const o = obj;
315
- if (typeof o._base64 === 'string' && Object.keys(o).length === 1) {
316
- return base64ToUint8Array(o._base64);
317
- }
318
- }
319
- if (Array.isArray(obj)) {
320
- return obj.map(item => deserializeBinaryFromStorage(item));
321
- }
322
- if (typeof obj === 'object') {
323
- const result = {};
324
- for (const [key, value] of Object.entries(obj)) {
325
- result[key] = deserializeBinaryFromStorage(value);
326
- }
327
- return result;
328
- }
329
- return obj;
330
- }
331
- function stripBinaryFromConversationInternal(obj) {
332
- if (obj === null || obj === undefined)
333
- return obj;
334
- // Handle Uint8Array directly
335
- if (obj instanceof Uint8Array) {
336
- return IMAGE_PLACEHOLDER;
337
- }
338
- // Handle our serialized format
339
- if (typeof obj === 'object' && obj !== null) {
340
- const o = obj;
341
- if (typeof o._base64 === 'string' && Object.keys(o).length === 1) {
342
- return IMAGE_PLACEHOLDER;
343
- }
344
- }
345
- if (Array.isArray(obj)) {
346
- return obj.map(item => {
347
- // Replace entire Bedrock image/document/video blocks with text blocks
348
- if (isBedrockImageBlock(item) || isSerializedBedrockImageBlock(item)) {
349
- return { text: IMAGE_PLACEHOLDER };
350
- }
351
- if (isBedrockDocumentBlock(item) || isSerializedBedrockDocumentBlock(item)) {
352
- return { text: DOCUMENT_PLACEHOLDER };
353
- }
354
- if (isBedrockVideoBlock(item) || isSerializedBedrockVideoBlock(item)) {
355
- return { text: VIDEO_PLACEHOLDER };
356
- }
357
- return stripBinaryFromConversationInternal(item);
358
- });
359
- }
360
- if (typeof obj === 'object') {
361
- const result = {};
362
- for (const [key, value] of Object.entries(obj)) {
363
- // Preserve metadata
364
- if (key === META_KEY) {
365
- result[key] = value;
366
- }
367
- else {
368
- result[key] = stripBinaryFromConversationInternal(value);
369
- }
370
- }
371
- return result;
372
- }
373
- return obj;
374
- }
375
- /**
376
- * Strip large base64 image data from conversation to reduce storage bloat.
377
- *
378
- * While base64 strings survive JSON.stringify (unlike Uint8Array), they can
379
- * significantly bloat conversation storage. This function replaces entire
380
- * image blocks with text placeholders:
381
- * - OpenAI: { type: "image_url", image_url: { url: "data:..." } } → { type: "text", text: "[placeholder]" }
382
- * - Gemini: { inlineData: { data: "...", mimeType: "..." } } → { text: "[placeholder]" }
383
- *
384
- * @param obj The conversation object to strip base64 images from
385
- * @param options Optional settings for turn-based stripping
386
- * @returns A new object with image blocks replaced with text placeholders
387
- */
388
- function stripBase64ImagesFromConversation(obj, options) {
389
- const { keepForTurns = Infinity } = options ?? {};
390
- const currentTurn = options?.currentTurn ?? getConversationMeta(obj).turnNumber;
391
- // If we should keep images and haven't exceeded the turn threshold, don't strip
392
- // (base64 strings are already safe for JSON serialization)
393
- if (keepForTurns > 0 && currentTurn < keepForTurns) {
394
- return obj;
395
- }
396
- return stripBase64ImagesFromConversationInternal(obj);
397
- }
398
- function stripBase64ImagesFromConversationInternal(obj) {
399
- if (obj === null || obj === undefined)
400
- return obj;
401
- // Handle base64 data URL string directly
402
- if (typeof obj === 'string' && obj.startsWith('data:image/') && obj.includes(';base64,')) {
403
- return IMAGE_PLACEHOLDER;
404
- }
405
- if (Array.isArray(obj)) {
406
- return obj.map(item => {
407
- // Replace entire OpenAI image_url blocks with text blocks
408
- if (isOpenAIBase64ImageBlock(item)) {
409
- return { type: 'text', text: IMAGE_PLACEHOLDER };
410
- }
411
- // Replace entire Gemini inlineData blocks with text blocks
412
- if (isGeminiInlineDataBlock(item)) {
413
- return { text: IMAGE_PLACEHOLDER };
414
- }
415
- // Replace Anthropic base64 image blocks with text blocks
416
- if (isAnthropicBase64ImageBlock(item)) {
417
- return { type: 'text', text: IMAGE_PLACEHOLDER };
418
- }
419
- // Replace Anthropic base64 document blocks with text blocks
420
- if (isAnthropicBase64DocumentBlock(item)) {
421
- return { type: 'text', text: DOCUMENT_PLACEHOLDER };
422
- }
423
- return stripBase64ImagesFromConversationInternal(item);
424
- });
425
- }
426
- if (typeof obj === 'object') {
427
- const result = {};
428
- for (const [key, value] of Object.entries(obj)) {
429
- // Preserve metadata
430
- if (key === META_KEY) {
431
- result[key] = value;
432
- }
433
- else {
434
- result[key] = stripBase64ImagesFromConversationInternal(value);
435
- }
436
- }
437
- return result;
438
- }
439
- return obj;
440
- }
441
- /** Approximate characters per token for text truncation */
442
- const CHARS_PER_TOKEN = 4;
443
- /**
444
- * Truncate large text content in conversation to reduce storage and context bloat.
445
- *
446
- * This function finds text strings in tool results and truncates them if they
447
- * exceed the specified token limit (using ~4 chars/token estimate).
448
- *
449
- * Works with:
450
- * - Bedrock: toolResult.content[].text
451
- * - OpenAI: tool message content (string)
452
- * - Gemini: function response content
453
- *
454
- * @param obj The conversation object to truncate text in
455
- * @param options Options including textMaxTokens
456
- * @returns A new object with large text content truncated
457
- */
458
- function truncateLargeTextInConversation(obj, options) {
459
- const maxTokens = options?.textMaxTokens;
460
- // If no max tokens specified or 0, don't truncate
461
- if (!maxTokens || maxTokens <= 0) {
462
- return obj;
463
- }
464
- const maxChars = maxTokens * CHARS_PER_TOKEN;
465
- return truncateLargeTextInternal(obj, maxChars);
466
- }
467
- function shouldPreserveMediaPayload(obj) {
468
- if (typeof obj !== 'object' || obj === null)
469
- return false;
470
- const o = obj;
471
- // Preserved Bedrock binary blocks and their serialized storage wrapper.
472
- if (isBedrockImageBlock(obj) || isSerializedBedrockImageBlock(obj) ||
473
- isBedrockDocumentBlock(obj) || isSerializedBedrockDocumentBlock(obj) ||
474
- isBedrockVideoBlock(obj) || isSerializedBedrockVideoBlock(obj)) {
475
- return true;
476
- }
477
- if (typeof o._base64 === 'string' && Object.keys(o).length === 1) {
478
- return true;
479
- }
480
- // Preserved base64 media payloads for OpenAI, Gemini, and Anthropic/Claude.
481
- if (isOpenAIBase64ImageBlock(obj) || isGeminiInlineDataBlock(obj) ||
482
- isAnthropicBase64ImageBlock(obj) || isAnthropicBase64DocumentBlock(obj)) {
483
- return true;
484
- }
485
- return false;
486
- }
487
- function truncateLargeTextInternal(obj, maxChars) {
488
- if (obj === null || obj === undefined)
489
- return obj;
490
- // Truncate large strings
491
- if (typeof obj === 'string') {
492
- if (obj.startsWith('data:image/') && obj.includes(';base64,')) {
493
- return obj;
494
- }
495
- if (obj.length > maxChars) {
496
- return obj.substring(0, maxChars) + TEXT_TRUNCATED_MARKER;
497
- }
498
- return obj;
499
- }
500
- if (Array.isArray(obj)) {
501
- return obj.map(item => truncateLargeTextInternal(item, maxChars));
502
- }
503
- if (typeof obj === 'object') {
504
- if (shouldPreserveMediaPayload(obj)) {
505
- return obj;
506
- }
507
- const result = {};
508
- for (const [key, value] of Object.entries(obj)) {
509
- // Preserve metadata without truncation
510
- if (key === META_KEY) {
511
- result[key] = value;
512
- }
513
- else {
514
- result[key] = truncateLargeTextInternal(value, maxChars);
515
- }
516
- }
517
- return result;
518
- }
519
- return obj;
520
- }
521
- const HEARTBEAT_OPEN_TAG = '<heartbeat>';
522
- const HEARTBEAT_CLOSE_TAG = '</heartbeat>';
523
- const HEARTBEAT_PLACEHOLDER = '[Heartbeat removed from conversation history]';
524
- /**
525
- * Strip heartbeat status messages from conversation to reduce context bloat.
526
- *
527
- * Heartbeat messages are periodic workstream status updates injected by the
528
- * workstream management system. They are wrapped with `<heartbeat>...</heartbeat>`
529
- * tags at the point of injection.
530
- *
531
- * This function recursively walks the conversation and replaces any string
532
- * wrapped in heartbeat tags with a short placeholder.
533
- *
534
- * @param obj The conversation object to strip heartbeats from
535
- * @param options Optional settings for turn-based stripping (default keepForTurns: 1)
536
- * @returns A new object with old heartbeat messages replaced
537
- */
538
- function stripHeartbeatsFromConversation(obj, options) {
539
- const { keepForTurns = 1 } = options ?? {};
540
- const currentTurn = options?.currentTurn ?? getConversationMeta(obj).turnNumber;
541
- // If keepForTurns is Infinity, never strip
542
- if (keepForTurns === Infinity) {
543
- return obj;
544
- }
545
- // Keep heartbeats if we haven't exceeded the turn threshold
546
- if (keepForTurns > 0 && currentTurn < keepForTurns) {
547
- return obj;
548
- }
549
- return stripHeartbeatsInternal(obj);
550
- }
551
- function stripHeartbeatsInternal(obj) {
552
- if (obj === null || obj === undefined)
553
- return obj;
554
- // Replace heartbeat-tagged strings with placeholder
555
- if (typeof obj === 'string') {
556
- if (obj.startsWith(HEARTBEAT_OPEN_TAG) && obj.endsWith(HEARTBEAT_CLOSE_TAG)) {
557
- return HEARTBEAT_PLACEHOLDER;
558
- }
559
- return obj;
560
- }
561
- if (Array.isArray(obj)) {
562
- return obj.map(item => stripHeartbeatsInternal(item));
563
- }
564
- if (typeof obj === 'object') {
565
- const result = {};
566
- for (const [key, value] of Object.entries(obj)) {
567
- // Preserve metadata
568
- if (key === META_KEY) {
569
- result[key] = value;
570
- }
571
- else {
572
- result[key] = stripHeartbeatsInternal(value);
573
- }
574
- }
575
- return result;
576
- }
577
- return obj;
578
- }
579
- //# sourceMappingURL=conversation-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversation-utils.js","sourceRoot":"","sources":["../../src/conversation-utils.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getJSONSafetyNotice = getJSONSafetyNotice;
4
- function getJSONSafetyNotice(schema) {
5
- return "The answer must be a JSON object using the following JSON Schema:\n" + JSON.stringify(schema, undefined, 2);
6
- }
7
- //# sourceMappingURL=commons.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commons.js","sourceRoot":"","sources":["../../../src/formatters/commons.ts"],"names":[],"mappings":";;AAEA,kDAEC;AAFD,SAAgB,mBAAmB,CAAC,MAAkB;IAClD,OAAO,qEAAqE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AACxH,CAAC"}
@@ -1,59 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatTextPrompt = void 0;
4
- exports.createTextPromptFormatter = createTextPromptFormatter;
5
- const common_1 = require("@llumiverse/common");
6
- const commons_js_1 = require("./commons.js");
7
- function createTextPromptFormatter(labels = {
8
- user: "USER",
9
- system: "CONTEXT",
10
- assistant: "ASSISTANT",
11
- safety: "IMPORTANT",
12
- instruction: "INSTRUCTION"
13
- }) {
14
- return function genericTextPrompt(segments, schema) {
15
- const isChat = segments.find(m => m.role === common_1.PromptRole.assistant);
16
- const context = [];
17
- const content = [];
18
- const safety = [];
19
- for (const segment of segments) {
20
- switch (segment.role) {
21
- case common_1.PromptRole.user:
22
- if (isChat) {
23
- content.push(`${labels.user}: ${segment.content}`);
24
- }
25
- else {
26
- content.push(segment.content);
27
- }
28
- break;
29
- case common_1.PromptRole.assistant:
30
- content.push(`${labels.assistant}: ${segment.content}`);
31
- break;
32
- case common_1.PromptRole.system:
33
- context.push(segment.content);
34
- break;
35
- case common_1.PromptRole.safety:
36
- safety.push(segment.content);
37
- break;
38
- }
39
- }
40
- if (schema) {
41
- safety.push((0, commons_js_1.getJSONSafetyNotice)(schema));
42
- }
43
- const out = [];
44
- if (context.length > 0) {
45
- out.push(`${labels.system}: ${context.join('\n')}`);
46
- }
47
- if (content.length > 0) {
48
- const prefix = context.length > 0 && !isChat ? `${labels.instruction}: ` : '';
49
- out.push(prefix + content.join('\n'));
50
- }
51
- if (safety.length > 0) {
52
- out.push(`${labels.safety}: ${safety.join('\n')}`);
53
- }
54
- return out.join('\n');
55
- };
56
- }
57
- const formatTextPrompt = createTextPromptFormatter();
58
- exports.formatTextPrompt = formatTextPrompt;
59
- //# sourceMappingURL=generic.js.map