lemon-model 1.2.1 → 1.2.3

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 (75) hide show
  1. package/README.md +20 -2
  2. package/dist/buffer/index.d.ts +9 -0
  3. package/dist/buffer/index.js +26 -0
  4. package/dist/buffer/index.js.map +1 -0
  5. package/dist/buffer/network.d.ts +89 -0
  6. package/dist/buffer/network.js +172 -0
  7. package/dist/buffer/network.js.map +1 -0
  8. package/dist/buffer/stream.d.ts +220 -0
  9. package/dist/buffer/stream.js +563 -0
  10. package/dist/buffer/stream.js.map +1 -0
  11. package/dist/buffer/testing.d.ts +56 -0
  12. package/dist/buffer/testing.js +92 -0
  13. package/dist/buffer/testing.js.map +1 -0
  14. package/dist/buffer/token.d.ts +49 -0
  15. package/dist/buffer/token.js +112 -0
  16. package/dist/buffer/token.js.map +1 -0
  17. package/dist/esm/buffer/index.js +10 -0
  18. package/dist/esm/buffer/index.js.map +1 -0
  19. package/dist/esm/buffer/network.js +163 -0
  20. package/dist/esm/buffer/network.js.map +1 -0
  21. package/dist/esm/buffer/stream.js +554 -0
  22. package/dist/esm/buffer/stream.js.map +1 -0
  23. package/dist/esm/buffer/testing.js +88 -0
  24. package/dist/esm/buffer/testing.js.map +1 -0
  25. package/dist/esm/buffer/token.js +108 -0
  26. package/dist/esm/buffer/token.js.map +1 -0
  27. package/dist/esm/genai/mocks.js +1 -1
  28. package/dist/esm/genai/transport.js +3 -34
  29. package/dist/esm/genai/transport.js.map +1 -1
  30. package/dist/esm/index.js +3 -0
  31. package/dist/esm/index.js.map +1 -1
  32. package/dist/esm/logtrace/index.js +11 -0
  33. package/dist/esm/logtrace/index.js.map +1 -0
  34. package/dist/esm/logtrace/logtrace.js +251 -0
  35. package/dist/esm/logtrace/logtrace.js.map +1 -0
  36. package/dist/esm/logtrace/testing.js +77 -0
  37. package/dist/esm/logtrace/testing.js.map +1 -0
  38. package/dist/esm/progress/index.js +9 -0
  39. package/dist/esm/progress/index.js.map +1 -0
  40. package/dist/esm/progress/progress.js +256 -0
  41. package/dist/esm/progress/progress.js.map +1 -0
  42. package/dist/esm/progress/testing.js +98 -0
  43. package/dist/esm/progress/testing.js.map +1 -0
  44. package/dist/esm/socket/websocket.js +228 -2
  45. package/dist/esm/socket/websocket.js.map +1 -1
  46. package/dist/genai/mocks.d.ts +1 -1
  47. package/dist/genai/mocks.js +1 -1
  48. package/dist/genai/transport.js +3 -34
  49. package/dist/genai/transport.js.map +1 -1
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.js +3 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/logtrace/index.d.ts +7 -0
  54. package/dist/logtrace/index.js +27 -0
  55. package/dist/logtrace/index.js.map +1 -0
  56. package/dist/logtrace/logtrace.d.ts +99 -0
  57. package/dist/logtrace/logtrace.js +256 -0
  58. package/dist/logtrace/logtrace.js.map +1 -0
  59. package/dist/logtrace/testing.d.ts +40 -0
  60. package/dist/logtrace/testing.js +81 -0
  61. package/dist/logtrace/testing.js.map +1 -0
  62. package/dist/progress/index.d.ts +8 -0
  63. package/dist/progress/index.js +25 -0
  64. package/dist/progress/index.js.map +1 -0
  65. package/dist/progress/progress.d.ts +112 -0
  66. package/dist/progress/progress.js +263 -0
  67. package/dist/progress/progress.js.map +1 -0
  68. package/dist/progress/testing.d.ts +33 -0
  69. package/dist/progress/testing.js +102 -0
  70. package/dist/progress/testing.js.map +1 -0
  71. package/dist/socket/types.d.ts +5 -3
  72. package/dist/socket/websocket.d.ts +77 -0
  73. package/dist/socket/websocket.js +232 -3
  74. package/dist/socket/websocket.js.map +1 -1
  75. package/package.json +19 -1
@@ -0,0 +1,563 @@
1
+ "use strict";
2
+ /**
3
+ * `buffer/stream.ts`
4
+ * - Provider-neutral GenAI stream buffering primitives.
5
+ *
6
+ * @origin eureka-agents-api / src/lib/buffer/stream.ts
7
+ *
8
+ * Common stream buffering primitives for GenAI providers.
9
+ *
10
+ * This module is intentionally provider-neutral. Gemini/OpenAI adapters can
11
+ * convert their native stream chunks into GenAIStreamEvent and let this buffer
12
+ * handle batching, FIFO ordering, and progress calculation.
13
+ */
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
24
+ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
25
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
26
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
27
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
28
+ function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
29
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
30
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
31
+ function fulfill(value) { resume("next", value); }
32
+ function reject(value) { resume("throw", value); }
33
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
34
+ };
35
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
36
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
37
+ var m = o[Symbol.asyncIterator], i;
38
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
39
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
40
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.runMockGenAIStream = exports.mockGenAIStream = exports.asStreamConsumer = exports.asLegacyTokenConsumer = exports.GenAIStreamBuffer = exports.estimateGenAIStreamSize = void 0;
44
+ const DEFAULT_OPTIONS = {
45
+ useBuffer: true,
46
+ flushStrategy: 'hybrid',
47
+ bufferSize: 10,
48
+ bufferBytes: 16 * 1024,
49
+ bufferMs: 300,
50
+ maxWaitMs: 300,
51
+ emitProgress: false,
52
+ progressIntervalMs: 0,
53
+ timeoutMs: 0,
54
+ };
55
+ const now = () => Date.now();
56
+ const textEncoder = new TextEncoder();
57
+ const byteLength = (value) => textEncoder.encode(value).length;
58
+ const asPercent = (loaded, total) => {
59
+ if (!total || total <= 0)
60
+ return undefined;
61
+ return Math.max(0, Math.min(100, Math.floor((loaded / total) * 100)));
62
+ };
63
+ /**
64
+ * Estimate text output size from common generation hints.
65
+ */
66
+ const estimateGenAIStreamSize = (hint) => {
67
+ var _a, _b;
68
+ if (!hint)
69
+ return undefined;
70
+ if (hint.totalChars || hint.totalBytes || hint.totalTokens) {
71
+ return {
72
+ totalChars: hint.totalChars,
73
+ totalBytes: hint.totalBytes,
74
+ totalTokens: hint.totalTokens,
75
+ estimated: false,
76
+ source: 'explicit',
77
+ confidence: 1,
78
+ };
79
+ }
80
+ const maxTokens = (_a = hint.maxOutputTokens) !== null && _a !== void 0 ? _a : hint.maxTokens;
81
+ if (maxTokens && maxTokens > 0) {
82
+ const totalChars = maxTokens * 4;
83
+ return {
84
+ totalChars,
85
+ totalBytes: totalChars,
86
+ totalTokens: maxTokens,
87
+ estimated: true,
88
+ source: 'maxOutputTokens',
89
+ confidence: 0.45,
90
+ };
91
+ }
92
+ if (hint.kind === 'image' && hint.imageSize) {
93
+ const normalized = `${hint.imageSize}`.toLowerCase();
94
+ const megapixels = normalized.includes('4k') ? 8 : normalized.includes('2k') ? 3 : 1;
95
+ const format = `${(_b = hint.imageFormat) !== null && _b !== void 0 ? _b : 'png'}`.toLowerCase();
96
+ const bytesPerMegapixel = format === 'webp' ? 350000 : format === 'jpeg' || format === 'jpg' ? 500000 : 900000;
97
+ return {
98
+ totalBytes: megapixels * bytesPerMegapixel,
99
+ estimated: true,
100
+ source: 'imageSize',
101
+ confidence: 0.25,
102
+ };
103
+ }
104
+ return undefined;
105
+ };
106
+ exports.estimateGenAIStreamSize = estimateGenAIStreamSize;
107
+ /**
108
+ * FIFO stream buffer. Chunk events are queued and flushed as a single `flush`
109
+ * event when size/time/byte conditions are met.
110
+ */
111
+ class GenAIStreamBuffer {
112
+ constructor(consumer, options) {
113
+ var _a;
114
+ this.consumer = consumer;
115
+ this.queue = [];
116
+ this.processing = false;
117
+ this.closed = false;
118
+ this.index = 0;
119
+ this.loadedChars = 0;
120
+ this.loadedBytes = 0;
121
+ this.loadedTokens = 0;
122
+ this.options = Object.assign(Object.assign({}, DEFAULT_OPTIONS), (options !== null && options !== void 0 ? options : {}));
123
+ this.meta = options === null || options === void 0 ? void 0 : options.meta;
124
+ this.estimate = (_a = options === null || options === void 0 ? void 0 : options.meta) === null || _a === void 0 ? void 0 : _a.estimate;
125
+ }
126
+ start(meta) {
127
+ var _a;
128
+ return __awaiter(this, void 0, void 0, function* () {
129
+ this.ensureOpen();
130
+ this.estimate = (_a = meta === null || meta === void 0 ? void 0 : meta.estimate) !== null && _a !== void 0 ? _a : this.estimate;
131
+ this.scheduleTimeout();
132
+ yield this.consumer({
133
+ type: 'start',
134
+ index: this.index++,
135
+ createdAt: now(),
136
+ meta: Object.assign(Object.assign({}, this.meta), (meta !== null && meta !== void 0 ? meta : {})),
137
+ estimate: this.estimate,
138
+ });
139
+ });
140
+ }
141
+ write(data, meta) {
142
+ return __awaiter(this, void 0, void 0, function* () {
143
+ yield this.push({
144
+ type: 'chunk',
145
+ data,
146
+ tokens: meta === null || meta === void 0 ? void 0 : meta.tokens,
147
+ meta: Object.assign(Object.assign({}, this.meta), (meta !== null && meta !== void 0 ? meta : {})),
148
+ });
149
+ });
150
+ }
151
+ push(event) {
152
+ var _a, _b, _c;
153
+ return __awaiter(this, void 0, void 0, function* () {
154
+ this.ensureOpen();
155
+ this.scheduleTimeout();
156
+ const normalized = typeof event === 'string' ? this.asChunk(event) : this.normalizeEvent(event);
157
+ if (normalized.type === 'chunk') {
158
+ yield this.enqueue(normalized);
159
+ return;
160
+ }
161
+ if (normalized.type === 'start') {
162
+ this.estimate = (_c = (_a = normalized.estimate) !== null && _a !== void 0 ? _a : (_b = normalized.meta) === null || _b === void 0 ? void 0 : _b.estimate) !== null && _c !== void 0 ? _c : this.estimate;
163
+ }
164
+ if (normalized.type === 'eof') {
165
+ yield this.close();
166
+ return;
167
+ }
168
+ if (normalized.type === 'error') {
169
+ yield this.reportError(normalized.error, 'upstream-error');
170
+ return;
171
+ }
172
+ yield this.consumer(normalized);
173
+ });
174
+ }
175
+ flush() {
176
+ return __awaiter(this, void 0, void 0, function* () {
177
+ if (this.processing || this.queue.length === 0)
178
+ return;
179
+ this.processing = true;
180
+ this.clearTimer();
181
+ this.clearProgressTimer();
182
+ const chunks = this.queue;
183
+ const data = chunks.map(chunk => chunk.data).join('');
184
+ const chars = chunks.reduce((sum, chunk) => { var _a; return sum + ((_a = chunk.chars) !== null && _a !== void 0 ? _a : chunk.data.length); }, 0);
185
+ const bytes = chunks.reduce((sum, chunk) => { var _a; return sum + ((_a = chunk.bytes) !== null && _a !== void 0 ? _a : byteLength(chunk.data)); }, 0);
186
+ const progress = this.progress('flush', 100);
187
+ this.queue = [];
188
+ this.cycleStartedAt = undefined;
189
+ try {
190
+ yield this.consumer({
191
+ type: 'flush',
192
+ index: this.index++,
193
+ createdAt: now(),
194
+ meta: this.meta,
195
+ data,
196
+ chunks,
197
+ count: chunks.length,
198
+ chars,
199
+ bytes,
200
+ progress,
201
+ });
202
+ }
203
+ finally {
204
+ this.processing = false;
205
+ }
206
+ if (this.queue.length > 0) {
207
+ if (!this.options.useBuffer || this.shouldFlush()) {
208
+ yield this.flush();
209
+ }
210
+ else {
211
+ this.scheduleFlush();
212
+ this.scheduleProgress();
213
+ }
214
+ }
215
+ });
216
+ }
217
+ close() {
218
+ return __awaiter(this, void 0, void 0, function* () {
219
+ if (this.closed)
220
+ return;
221
+ yield this.flush();
222
+ this.clearTimer();
223
+ this.clearProgressTimer();
224
+ this.clearTimeout();
225
+ this.closed = true;
226
+ yield this.consumer({
227
+ type: 'eof',
228
+ index: this.index++,
229
+ createdAt: now(),
230
+ meta: this.meta,
231
+ progress: this.progress('eof', 100),
232
+ });
233
+ });
234
+ }
235
+ cancel(reason) {
236
+ return __awaiter(this, void 0, void 0, function* () {
237
+ if (this.closed)
238
+ return;
239
+ yield this.reportError(reason !== null && reason !== void 0 ? reason : 'GenAIStreamBuffer canceled', 'cancel');
240
+ });
241
+ }
242
+ snapshot() {
243
+ const pendingChars = this.queue.reduce((sum, chunk) => { var _a; return sum + ((_a = chunk.chars) !== null && _a !== void 0 ? _a : chunk.data.length); }, 0);
244
+ const pendingBytes = this.queue.reduce((sum, chunk) => { var _a; return sum + ((_a = chunk.bytes) !== null && _a !== void 0 ? _a : byteLength(chunk.data)); }, 0);
245
+ return {
246
+ pendingChunks: this.queue.length,
247
+ pendingChars,
248
+ pendingBytes,
249
+ loadedChars: this.loadedChars,
250
+ loadedBytes: this.loadedBytes,
251
+ loadedTokens: this.loadedTokens || undefined,
252
+ closed: this.closed,
253
+ progress: this.closed && this.lastProgress ? this.lastProgress : this.progress('snapshot'),
254
+ };
255
+ }
256
+ enqueue(chunk) {
257
+ var _a, _b, _c;
258
+ return __awaiter(this, void 0, void 0, function* () {
259
+ if (!this.cycleStartedAt)
260
+ this.cycleStartedAt = now();
261
+ const normalized = this.normalizeChunk(chunk);
262
+ this.loadedChars += (_a = normalized.chars) !== null && _a !== void 0 ? _a : normalized.data.length;
263
+ this.loadedBytes += (_b = normalized.bytes) !== null && _b !== void 0 ? _b : byteLength(normalized.data);
264
+ this.loadedTokens += (_c = normalized.tokens) !== null && _c !== void 0 ? _c : 0;
265
+ this.queue.push(normalized);
266
+ normalized.progress = this.progress('chunk');
267
+ if (this.options.emitProgress) {
268
+ yield this.emitProgress('chunk');
269
+ }
270
+ if (!this.options.useBuffer || this.shouldFlush()) {
271
+ yield this.flush();
272
+ return;
273
+ }
274
+ this.scheduleFlush();
275
+ this.scheduleProgress();
276
+ });
277
+ }
278
+ normalizeEvent(event) {
279
+ var _a, _b, _c;
280
+ return Object.assign(Object.assign({}, event), { index: (_a = event.index) !== null && _a !== void 0 ? _a : this.index++, createdAt: (_b = event.createdAt) !== null && _b !== void 0 ? _b : now(), meta: Object.assign(Object.assign({}, this.meta), ((_c = event.meta) !== null && _c !== void 0 ? _c : {})) });
281
+ }
282
+ normalizeChunk(event) {
283
+ var _a, _b, _c, _d, _e, _f;
284
+ const data = (_a = event.data) !== null && _a !== void 0 ? _a : '';
285
+ return Object.assign(Object.assign({}, event), { type: 'chunk', data, chars: (_b = event.chars) !== null && _b !== void 0 ? _b : data.length, bytes: (_c = event.bytes) !== null && _c !== void 0 ? _c : byteLength(data), index: (_d = event.index) !== null && _d !== void 0 ? _d : this.index++, createdAt: (_e = event.createdAt) !== null && _e !== void 0 ? _e : now(), meta: Object.assign(Object.assign({}, this.meta), ((_f = event.meta) !== null && _f !== void 0 ? _f : {})) });
286
+ }
287
+ asChunk(data) {
288
+ return this.normalizeChunk({ type: 'chunk', data });
289
+ }
290
+ progress(source = 'snapshot', forcedBufferPercent) {
291
+ var _a, _b, _c, _d, _e, _f;
292
+ const totalChars = (_a = this.estimate) === null || _a === void 0 ? void 0 : _a.totalChars;
293
+ const totalBytes = (_b = this.estimate) === null || _b === void 0 ? void 0 : _b.totalBytes;
294
+ const totalTokens = (_c = this.estimate) === null || _c === void 0 ? void 0 : _c.totalTokens;
295
+ const byChars = asPercent(this.loadedChars, totalChars);
296
+ const byBytes = asPercent(this.loadedBytes, totalBytes);
297
+ const byTokens = asPercent(this.loadedTokens, totalTokens);
298
+ const streamPercent = source === 'eof' ? 100 : (_d = byChars !== null && byChars !== void 0 ? byChars : byBytes) !== null && _d !== void 0 ? _d : byTokens;
299
+ const bufferProgress = this.bufferProgress(forcedBufferPercent);
300
+ this.lastProgress = {
301
+ loadedChars: this.loadedChars,
302
+ loadedBytes: this.loadedBytes,
303
+ loadedTokens: this.loadedTokens || undefined,
304
+ totalChars,
305
+ totalBytes,
306
+ totalTokens,
307
+ percent: streamPercent,
308
+ bufferPercent: bufferProgress.percent,
309
+ source,
310
+ pendingChunks: bufferProgress.pendingChunks,
311
+ pendingBytes: bufferProgress.pendingBytes,
312
+ pendingChars: bufferProgress.pendingChars,
313
+ bufferElapsedMs: bufferProgress.elapsedMs,
314
+ bufferTargetChunks: bufferProgress.targetChunks,
315
+ bufferTargetBytes: bufferProgress.targetBytes,
316
+ bufferTargetMs: bufferProgress.targetMs,
317
+ estimated: (_f = (_e = this.estimate) === null || _e === void 0 ? void 0 : _e.estimated) !== null && _f !== void 0 ? _f : true,
318
+ };
319
+ return this.lastProgress;
320
+ }
321
+ bufferProgress(forcedPercent) {
322
+ var _a, _b, _c, _d;
323
+ const pendingChunks = this.queue.length;
324
+ const pendingChars = this.queue.reduce((sum, chunk) => { var _a; return sum + ((_a = chunk.chars) !== null && _a !== void 0 ? _a : chunk.data.length); }, 0);
325
+ const pendingBytes = this.queue.reduce((sum, chunk) => { var _a; return sum + ((_a = chunk.bytes) !== null && _a !== void 0 ? _a : byteLength(chunk.data)); }, 0);
326
+ const elapsedMs = this.cycleStartedAt ? Math.max(0, now() - this.cycleStartedAt) : 0;
327
+ const byChunks = (_a = asPercent(pendingChunks, this.options.bufferSize)) !== null && _a !== void 0 ? _a : 0;
328
+ const byBytes = (_b = asPercent(pendingBytes, this.options.bufferBytes)) !== null && _b !== void 0 ? _b : 0;
329
+ const byBufferMs = (_c = asPercent(elapsedMs, this.options.bufferMs)) !== null && _c !== void 0 ? _c : 0;
330
+ const byMaxWaitMs = (_d = asPercent(elapsedMs, this.options.maxWaitMs)) !== null && _d !== void 0 ? _d : 0;
331
+ let percent = 0;
332
+ let targetChunks;
333
+ let targetBytes;
334
+ let targetMs;
335
+ if (!this.options.useBuffer) {
336
+ percent = pendingChunks > 0 ? 100 : 0;
337
+ }
338
+ else if (this.options.flushStrategy === 'size') {
339
+ percent = byChunks;
340
+ targetChunks = this.options.bufferSize;
341
+ targetMs = this.options.maxWaitMs;
342
+ }
343
+ else if (this.options.flushStrategy === 'bytes') {
344
+ percent = byBytes;
345
+ targetBytes = this.options.bufferBytes;
346
+ targetMs = this.options.maxWaitMs;
347
+ }
348
+ else if (this.options.flushStrategy === 'time') {
349
+ percent = byBufferMs;
350
+ targetMs = this.options.bufferMs;
351
+ }
352
+ else {
353
+ percent = Math.max(byChunks, byBytes, byMaxWaitMs);
354
+ targetChunks = this.options.bufferSize;
355
+ targetBytes = this.options.bufferBytes;
356
+ targetMs = this.options.maxWaitMs;
357
+ }
358
+ return {
359
+ percent: forcedPercent !== null && forcedPercent !== void 0 ? forcedPercent : Math.max(0, Math.min(99, percent)),
360
+ pendingChunks,
361
+ pendingChars,
362
+ pendingBytes,
363
+ elapsedMs,
364
+ targetChunks,
365
+ targetBytes,
366
+ targetMs,
367
+ };
368
+ }
369
+ emitProgress(source = 'snapshot') {
370
+ return __awaiter(this, void 0, void 0, function* () {
371
+ if (this.closed)
372
+ return;
373
+ yield this.consumer({
374
+ type: 'progress',
375
+ index: this.index++,
376
+ createdAt: now(),
377
+ meta: this.meta,
378
+ progress: this.progress(source),
379
+ });
380
+ });
381
+ }
382
+ shouldFlush() {
383
+ const chunks = this.queue.length;
384
+ const bytes = this.queue.reduce((sum, chunk) => { var _a; return sum + ((_a = chunk.bytes) !== null && _a !== void 0 ? _a : byteLength(chunk.data)); }, 0);
385
+ if (this.options.flushStrategy === 'size')
386
+ return chunks >= this.options.bufferSize;
387
+ if (this.options.flushStrategy === 'bytes')
388
+ return bytes >= this.options.bufferBytes;
389
+ if (this.options.flushStrategy === 'time')
390
+ return false;
391
+ return chunks >= this.options.bufferSize || bytes >= this.options.bufferBytes;
392
+ }
393
+ scheduleFlush() {
394
+ if (this.timer)
395
+ return;
396
+ const waitMs = this.options.flushStrategy === 'time' ? this.options.bufferMs : this.options.maxWaitMs;
397
+ this.timer = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
398
+ yield this.flush();
399
+ }), waitMs);
400
+ }
401
+ scheduleProgress() {
402
+ if (!this.options.progressIntervalMs || this.progressTimer || this.queue.length === 0)
403
+ return;
404
+ this.progressTimer = setInterval(() => {
405
+ if (this.closed || this.queue.length === 0) {
406
+ this.clearProgressTimer();
407
+ return;
408
+ }
409
+ void this.emitProgress('interval').catch(err => this.reportError(err, 'progress-consumer-error'));
410
+ }, this.options.progressIntervalMs);
411
+ }
412
+ scheduleTimeout() {
413
+ if (!this.options.timeoutMs || this.timeoutTimer)
414
+ return;
415
+ this.timeoutTimer = setTimeout(() => {
416
+ void this.reportError({
417
+ code: 'GENAI_STREAM_BUFFER_TIMEOUT',
418
+ message: `GenAIStreamBuffer timed out after ${this.options.timeoutMs}ms`,
419
+ timeoutMs: this.options.timeoutMs,
420
+ }, 'timeout');
421
+ }, this.options.timeoutMs);
422
+ }
423
+ clearTimer() {
424
+ if (!this.timer)
425
+ return;
426
+ clearTimeout(this.timer);
427
+ this.timer = undefined;
428
+ }
429
+ clearProgressTimer() {
430
+ if (!this.progressTimer)
431
+ return;
432
+ clearInterval(this.progressTimer);
433
+ this.progressTimer = undefined;
434
+ }
435
+ clearTimeout() {
436
+ if (!this.timeoutTimer)
437
+ return;
438
+ clearTimeout(this.timeoutTimer);
439
+ this.timeoutTimer = undefined;
440
+ }
441
+ reportError(error, reason) {
442
+ return __awaiter(this, void 0, void 0, function* () {
443
+ if (this.closed)
444
+ return;
445
+ this.clearTimer();
446
+ this.clearProgressTimer();
447
+ this.clearTimeout();
448
+ this.closed = true;
449
+ const normalized = error instanceof Error
450
+ ? { name: error.name, message: error.message, stack: error.stack, reason }
451
+ : typeof error === 'object' && error
452
+ ? Object.assign(Object.assign({}, error), { reason }) : { message: `${error}`, reason };
453
+ yield this.consumer({
454
+ type: 'error',
455
+ index: this.index++,
456
+ createdAt: now(),
457
+ meta: this.meta,
458
+ error: normalized,
459
+ });
460
+ });
461
+ }
462
+ ensureOpen() {
463
+ if (this.closed)
464
+ throw new Error('GenAIStreamBuffer is already closed');
465
+ }
466
+ }
467
+ exports.GenAIStreamBuffer = GenAIStreamBuffer;
468
+ /**
469
+ * Convert a stream-event consumer into the existing token/null consumer shape.
470
+ */
471
+ const asLegacyTokenConsumer = (consumer) => {
472
+ const buffer = new GenAIStreamBuffer(consumer, { useBuffer: false });
473
+ return (token) => __awaiter(void 0, void 0, void 0, function* () {
474
+ if (token === null) {
475
+ yield buffer.close();
476
+ return;
477
+ }
478
+ if (typeof token === 'string')
479
+ yield buffer.write(token);
480
+ });
481
+ };
482
+ exports.asLegacyTokenConsumer = asLegacyTokenConsumer;
483
+ /**
484
+ * Convert a legacy token consumer into a stream-event consumer.
485
+ */
486
+ const asStreamConsumer = (consumer) => {
487
+ return (event) => __awaiter(void 0, void 0, void 0, function* () {
488
+ if (event.type === 'flush') {
489
+ yield consumer(event.data);
490
+ return;
491
+ }
492
+ if (event.type === 'chunk') {
493
+ yield consumer(event.data);
494
+ return;
495
+ }
496
+ if (event.type === 'eof')
497
+ yield consumer(null);
498
+ });
499
+ };
500
+ exports.asStreamConsumer = asStreamConsumer;
501
+ /**
502
+ * Create provider-like mock stream events from a text payload.
503
+ */
504
+ function mockGenAIStream(content, options) {
505
+ var _a, _b, _c, _d, _e;
506
+ return __asyncGenerator(this, arguments, function* mockGenAIStream_1() {
507
+ const chunkSize = Math.max(1, (_a = options === null || options === void 0 ? void 0 : options.chunkSize) !== null && _a !== void 0 ? _a : 16);
508
+ const meta = {
509
+ provider: (_b = options === null || options === void 0 ? void 0 : options.provider) !== null && _b !== void 0 ? _b : 'mock',
510
+ model: (_c = options === null || options === void 0 ? void 0 : options.model) !== null && _c !== void 0 ? _c : 'mock-model',
511
+ kind: (_d = options === null || options === void 0 ? void 0 : options.kind) !== null && _d !== void 0 ? _d : 'text',
512
+ estimate: (_e = options === null || options === void 0 ? void 0 : options.estimate) !== null && _e !== void 0 ? _e : (0, exports.estimateGenAIStreamSize)({ totalChars: content.length, totalBytes: byteLength(content) }),
513
+ };
514
+ yield yield __await({ type: 'start', createdAt: now(), meta, estimate: meta.estimate });
515
+ for (let i = 0; i < content.length; i += chunkSize) {
516
+ if (options === null || options === void 0 ? void 0 : options.intervalMs)
517
+ yield __await(new Promise(resolve => setTimeout(resolve, options.intervalMs)));
518
+ yield yield __await({
519
+ type: 'chunk',
520
+ createdAt: now(),
521
+ meta,
522
+ data: content.substring(i, i + chunkSize),
523
+ });
524
+ }
525
+ yield yield __await({
526
+ type: 'eof',
527
+ createdAt: now(),
528
+ meta,
529
+ progress: {
530
+ loadedChars: content.length,
531
+ loadedBytes: byteLength(content),
532
+ totalChars: content.length,
533
+ totalBytes: byteLength(content),
534
+ percent: 100,
535
+ estimated: false,
536
+ },
537
+ });
538
+ });
539
+ }
540
+ exports.mockGenAIStream = mockGenAIStream;
541
+ /**
542
+ * Run mock stream events through GenAIStreamBuffer.
543
+ */
544
+ const runMockGenAIStream = (content, consumer, bufferOptions, mockOptions) => __awaiter(void 0, void 0, void 0, function* () {
545
+ var e_1, _a;
546
+ const buffer = new GenAIStreamBuffer(consumer, bufferOptions);
547
+ try {
548
+ for (var _b = __asyncValues(mockGenAIStream(content, mockOptions)), _c; _c = yield _b.next(), !_c.done;) {
549
+ const event = _c.value;
550
+ yield buffer.push(event);
551
+ }
552
+ }
553
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
554
+ finally {
555
+ try {
556
+ if (_c && !_c.done && (_a = _b.return)) yield _a.call(_b);
557
+ }
558
+ finally { if (e_1) throw e_1.error; }
559
+ }
560
+ return buffer.snapshot();
561
+ });
562
+ exports.runMockGenAIStream = runMockGenAIStream;
563
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/buffer/stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { NetworkSupportable, SocketNetworkOptions } from '../socket/types';
2
+ import { GenAIStreamBufferOptions, GenAIStreamBufferSnapshot, GenAIStreamEvent } from './stream';
3
+ import { GenAIStreamNetworkOptions } from './network';
4
+ export interface GenAIStreamNetworkLoopOptions {
5
+ /** diagnostic network id when a network is created internally */
6
+ id?: string;
7
+ /** token payloads written into GenAIStreamBuffer */
8
+ tokens: string[];
9
+ /** GenAIStreamBuffer options for the loop */
10
+ bufferOptions?: GenAIStreamBufferOptions;
11
+ /** externally managed network; when omitted the helper creates one */
12
+ network?: NetworkSupportable;
13
+ /** in-memory network options when network is created internally */
14
+ networkOptions?: SocketNetworkOptions & {
15
+ id?: string;
16
+ };
17
+ /** stream network adapter options used by both sender and receiver */
18
+ streamNetwork?: GenAIStreamNetworkOptions;
19
+ /** wait time after buffer.close() for async packet delivery */
20
+ settleMs?: number;
21
+ }
22
+ export interface GenAIStreamNetworkLoopMetrics {
23
+ /** total loop duration including settleMs */
24
+ elapsedMs: number;
25
+ /** raw network packet count */
26
+ packets: number;
27
+ /** sum of raw network packet bytes */
28
+ packetBytes: number;
29
+ /** largest raw network packet byte size */
30
+ maxPacketBytes: number;
31
+ /** number of JSONTransport chunk packets */
32
+ chunkPackets: number;
33
+ /** number of rebuilt GenAI stream events */
34
+ events: number;
35
+ }
36
+ export interface GenAIStreamNetworkLoopResult {
37
+ /** rebuilt events observed by the receiver consumer */
38
+ events: GenAIStreamEvent[];
39
+ /** raw string packets observed on NetworkSupportable */
40
+ rawPackets: string[];
41
+ /** final source buffer snapshot */
42
+ snapshot: GenAIStreamBufferSnapshot;
43
+ /** transport and loop metrics for diagnostics/performance checks */
44
+ metrics: GenAIStreamNetworkLoopMetrics;
45
+ /** network used by this run; caller-owned when options.network is supplied */
46
+ network: NetworkSupportable;
47
+ }
48
+ /**
49
+ * Run an end-to-end diagnostic loop:
50
+ * tokens -> GenAIStreamBuffer -> JSONTransport -> NetworkSupportable ->
51
+ * JSONTransport -> GenAIStreamConsumer.
52
+ *
53
+ * This helper is intended for tests, smoke checks, and lightweight performance
54
+ * probes in environments that can provide a NetworkSupportable.
55
+ */
56
+ export declare const runGenAIStreamNetworkLoop: (options: GenAIStreamNetworkLoopOptions) => Promise<GenAIStreamNetworkLoopResult>;