@burtson-labs/bandit-engine 2.0.160 → 2.0.162

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 (54) hide show
  1. package/README.md +78 -77
  2. package/dist/{aiProviderStore-BNZGM6QU.mjs → aiProviderStore-JOB2H4LP.mjs} +2 -2
  3. package/dist/chat-LB6UEEEW.mjs +16 -0
  4. package/dist/chat-provider.js +281 -142
  5. package/dist/chat-provider.js.map +1 -1
  6. package/dist/chat-provider.mjs +6 -6
  7. package/dist/{chunk-MHF76C2F.mjs → chunk-3ACT5BTW.mjs} +1343 -1222
  8. package/dist/chunk-3ACT5BTW.mjs.map +1 -0
  9. package/dist/{chunk-LFQH6M6B.mjs → chunk-47MOBOP3.mjs} +5 -5
  10. package/dist/chunk-47MOBOP3.mjs.map +1 -0
  11. package/dist/chunk-G5POQT2R.mjs +390 -0
  12. package/dist/chunk-G5POQT2R.mjs.map +1 -0
  13. package/dist/{chunk-PDQT564P.mjs → chunk-ODGVCSKV.mjs} +18 -12
  14. package/dist/{chunk-PDQT564P.mjs.map → chunk-ODGVCSKV.mjs.map} +1 -1
  15. package/dist/{chunk-TKSOJGHX.mjs → chunk-OGMXL7BF.mjs} +62 -61
  16. package/dist/chunk-OGMXL7BF.mjs.map +1 -0
  17. package/dist/{chunk-B3HAQC6F.mjs → chunk-Q6LXVYTC.mjs} +68 -25
  18. package/dist/chunk-Q6LXVYTC.mjs.map +1 -0
  19. package/dist/{chunk-LTWMMHFT.mjs → chunk-R6HMLYKQ.mjs} +1820 -3260
  20. package/dist/chunk-R6HMLYKQ.mjs.map +1 -0
  21. package/dist/{chunk-IABD4L6K.mjs → chunk-RUXYVMW2.mjs} +3841 -4457
  22. package/dist/chunk-RUXYVMW2.mjs.map +1 -0
  23. package/dist/{chunk-XTB6ZLUI.mjs → chunk-WQEBTH2R.mjs} +7 -2
  24. package/dist/{chunk-XTB6ZLUI.mjs.map → chunk-WQEBTH2R.mjs.map} +1 -1
  25. package/dist/{chunk-PXCIDXRP.mjs → chunk-YHSYHU5P.mjs} +6 -6
  26. package/dist/{chunk-P6SLB5RC.mjs → chunk-ZNK3ELTZ.mjs} +3 -3
  27. package/dist/index.d.mts +85 -2
  28. package/dist/index.d.ts +85 -2
  29. package/dist/index.js +8080 -9868
  30. package/dist/index.js.map +1 -1
  31. package/dist/index.mjs +24 -15
  32. package/dist/index.mjs.map +1 -1
  33. package/dist/management/management.js +7681 -9478
  34. package/dist/management/management.js.map +1 -1
  35. package/dist/management/management.mjs +9 -9
  36. package/dist/modals/chat-modal/chat-modal.js +1714 -3302
  37. package/dist/modals/chat-modal/chat-modal.js.map +1 -1
  38. package/dist/modals/chat-modal/chat-modal.mjs +5 -5
  39. package/dist/{modelStore-NMCRL3FR.mjs → modelStore-FGUGOWTL.mjs} +2 -2
  40. package/package.json +4 -2
  41. package/dist/chat-4BOIV4VP.mjs +0 -16
  42. package/dist/chunk-B3HAQC6F.mjs.map +0 -1
  43. package/dist/chunk-IABD4L6K.mjs.map +0 -1
  44. package/dist/chunk-LFQH6M6B.mjs.map +0 -1
  45. package/dist/chunk-LNGF2XAZ.mjs +0 -311
  46. package/dist/chunk-LNGF2XAZ.mjs.map +0 -1
  47. package/dist/chunk-LTWMMHFT.mjs.map +0 -1
  48. package/dist/chunk-MHF76C2F.mjs.map +0 -1
  49. package/dist/chunk-TKSOJGHX.mjs.map +0 -1
  50. /package/dist/{aiProviderStore-BNZGM6QU.mjs.map → aiProviderStore-JOB2H4LP.mjs.map} +0 -0
  51. /package/dist/{chat-4BOIV4VP.mjs.map → chat-LB6UEEEW.mjs.map} +0 -0
  52. /package/dist/{chunk-PXCIDXRP.mjs.map → chunk-YHSYHU5P.mjs.map} +0 -0
  53. /package/dist/{chunk-P6SLB5RC.mjs.map → chunk-ZNK3ELTZ.mjs.map} +0 -0
  54. /package/dist/{modelStore-NMCRL3FR.mjs.map → modelStore-FGUGOWTL.mjs.map} +0 -0
@@ -10,6 +10,36 @@ import { map as map2 } from "rxjs";
10
10
 
11
11
  // src/services/ollama/ollama.service.ts
12
12
  import { catchError, from, lastValueFrom, map, Observable, of, shareReplay, switchMap, throwError, timeout } from "rxjs";
13
+
14
+ // src/services/stream/streamLineParser.ts
15
+ var SKIP = { kind: "skip" };
16
+ var StreamLineParser = class {
17
+ /** Set by `event: ping` until the frame's blank-line terminator. */
18
+ inHeartbeatFrame = false;
19
+ next(rawLine) {
20
+ const line = rawLine.trim();
21
+ if (!line) {
22
+ this.inHeartbeatFrame = false;
23
+ return SKIP;
24
+ }
25
+ if (line.startsWith(":")) return SKIP;
26
+ if (line.startsWith("event:")) {
27
+ this.inHeartbeatFrame = line.slice(6).trim().toLowerCase() === "ping";
28
+ return SKIP;
29
+ }
30
+ if (line.startsWith("id:") || line.startsWith("retry:")) return SKIP;
31
+ if (line.startsWith("data:")) {
32
+ if (this.inHeartbeatFrame) return SKIP;
33
+ const data = line.slice(5).trim();
34
+ if (!data) return SKIP;
35
+ if (data === "[DONE]") return { kind: "done" };
36
+ return { kind: "json", text: data };
37
+ }
38
+ return { kind: "json", text: line };
39
+ }
40
+ };
41
+
42
+ // src/services/ollama/ollama.service.ts
13
43
  var handleError = () => (obs) => obs.pipe(
14
44
  switchMap(
15
45
  (response) => response.ok ? of(response) : throwError(() => new Error(`Request failed: ${response.status} ${response.statusText}`))
@@ -100,13 +130,15 @@ var OllamaService = class {
100
130
  this._throwErrorIfNotOk(url, response);
101
131
  const reader = response.body?.getReader();
102
132
  const decoder = new TextDecoder();
133
+ const lineParser = new StreamLineParser();
103
134
  let buffer = "";
104
135
  const read = () => {
105
136
  reader?.read().then(({ done, value }) => {
106
137
  if (done) {
107
- if (buffer.trim() !== "") {
138
+ const tail = lineParser.next(buffer);
139
+ if (tail.kind === "json") {
108
140
  try {
109
- observer.next(JSON.parse(buffer));
141
+ observer.next(JSON.parse(tail.text));
110
142
  } catch (err) {
111
143
  observer.error(err);
112
144
  debugLogger.error("Final chunk parsing error (generate):", { buffer });
@@ -119,9 +151,10 @@ var OllamaService = class {
119
151
  const lines = buffer.split("\n");
120
152
  buffer = lines.pop() ?? "";
121
153
  for (const line of lines) {
122
- if (line.trim()) {
154
+ const classified = lineParser.next(line);
155
+ if (classified.kind === "json") {
123
156
  try {
124
- observer.next(JSON.parse(line));
157
+ observer.next(JSON.parse(classified.text));
125
158
  } catch (err) {
126
159
  observer.error(err);
127
160
  debugLogger.error("Error parsing JSON line (generate):", { line });
@@ -151,13 +184,15 @@ var OllamaService = class {
151
184
  this._throwErrorIfNotOk(url, response);
152
185
  const reader = response.body?.getReader();
153
186
  const decoder = new TextDecoder();
187
+ const lineParser = new StreamLineParser();
154
188
  let buffer = "";
155
189
  const read = () => {
156
190
  reader?.read().then(({ done, value }) => {
157
191
  if (done) {
158
- if (buffer.trim() !== "") {
192
+ const tail = lineParser.next(buffer);
193
+ if (tail.kind === "json") {
159
194
  try {
160
- observer.next(JSON.parse(buffer));
195
+ observer.next(JSON.parse(tail.text));
161
196
  } catch (err) {
162
197
  observer.error(err);
163
198
  debugLogger.error("Final chunk parsing error (chat):", { buffer });
@@ -170,9 +205,10 @@ var OllamaService = class {
170
205
  const lines = buffer.split("\n");
171
206
  buffer = lines.pop() ?? "";
172
207
  for (const line of lines) {
173
- if (line.trim()) {
208
+ const classified = lineParser.next(line);
209
+ if (classified.kind === "json") {
174
210
  try {
175
- observer.next(JSON.parse(line));
211
+ observer.next(JSON.parse(classified.text));
176
212
  } catch (err) {
177
213
  observer.error(err);
178
214
  debugLogger.error("Error parsing JSON line (chat):", { line });
@@ -1323,13 +1359,15 @@ var GatewayService = class {
1323
1359
  const handleStreamingResponse = async (response) => {
1324
1360
  const reader = response.body?.getReader();
1325
1361
  const decoder = new TextDecoder();
1362
+ const lineParser = new StreamLineParser();
1326
1363
  let buffer = "";
1327
1364
  const read = () => {
1328
1365
  reader?.read().then(({ done, value }) => {
1329
1366
  if (done) {
1330
- if (buffer.trim() !== "") {
1367
+ const tail = lineParser.next(buffer);
1368
+ if (tail.kind === "json") {
1331
1369
  try {
1332
- const finalResponse = JSON.parse(buffer);
1370
+ const finalResponse = JSON.parse(tail.text);
1333
1371
  observer.next(finalResponse);
1334
1372
  } catch (err) {
1335
1373
  debugLogger.error("GatewayService chat final chunk parsing error", { buffer, error: err });
@@ -1343,16 +1381,14 @@ var GatewayService = class {
1343
1381
  const lines = buffer.split("\n");
1344
1382
  buffer = lines.pop() ?? "";
1345
1383
  for (const line of lines) {
1346
- const trimmed = line.trim();
1347
- if (trimmed) {
1348
- let data = trimmed;
1349
- if (trimmed.startsWith("data: ")) {
1350
- data = trimmed.slice(6);
1351
- if (data === "[DONE]") {
1352
- observer.complete();
1353
- return;
1354
- }
1355
- }
1384
+ const classified = lineParser.next(line);
1385
+ if (classified.kind === "done") {
1386
+ observer.complete();
1387
+ return;
1388
+ }
1389
+ if (classified.kind === "json") {
1390
+ const trimmed = line.trim();
1391
+ const data = classified.text;
1356
1392
  try {
1357
1393
  const parsed = JSON.parse(data);
1358
1394
  if (request.provider === "ollama" && parsed.message) {
@@ -1519,13 +1555,15 @@ var GatewayService = class {
1519
1555
  }
1520
1556
  const reader = response.body?.getReader();
1521
1557
  const decoder = new TextDecoder();
1558
+ const lineParser = new StreamLineParser();
1522
1559
  let buffer = "";
1523
1560
  const read = () => {
1524
1561
  reader?.read().then(({ done, value }) => {
1525
1562
  if (done) {
1526
- if (buffer.trim() !== "") {
1563
+ const tail = lineParser.next(buffer);
1564
+ if (tail.kind === "json") {
1527
1565
  try {
1528
- observer.next(JSON.parse(buffer));
1566
+ observer.next(JSON.parse(tail.text));
1529
1567
  } catch (err) {
1530
1568
  observer.error(err);
1531
1569
  debugLogger.error("Final chunk parsing error (gateway generate):", { buffer });
@@ -1538,9 +1576,14 @@ var GatewayService = class {
1538
1576
  const lines = buffer.split("\n");
1539
1577
  buffer = lines.pop() ?? "";
1540
1578
  for (const line of lines) {
1541
- if (line.trim()) {
1579
+ const classified = lineParser.next(line);
1580
+ if (classified.kind === "done") {
1581
+ observer.complete();
1582
+ return;
1583
+ }
1584
+ if (classified.kind === "json") {
1542
1585
  try {
1543
- observer.next(JSON.parse(line));
1586
+ observer.next(JSON.parse(classified.text));
1544
1587
  } catch (err) {
1545
1588
  observer.error(err);
1546
1589
  debugLogger.error("Error parsing JSON line (gateway generate):", { line });
@@ -3111,4 +3154,4 @@ export {
3111
3154
  AIProviderFactory,
3112
3155
  useAIProviderStore
3113
3156
  };
3114
- //# sourceMappingURL=chunk-B3HAQC6F.mjs.map
3157
+ //# sourceMappingURL=chunk-Q6LXVYTC.mjs.map