@diegoaltoworks/chatter 0.56.0 → 0.58.0

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 (38) hide show
  1. package/dist/channels/index.js +46 -6
  2. package/dist/channels/index.mjs +46 -6
  3. package/dist/channels/pipeline.d.ts +13 -0
  4. package/dist/channels/pipeline.d.ts.map +1 -1
  5. package/dist/channels/telegram/channel.d.ts +12 -0
  6. package/dist/channels/telegram/channel.d.ts.map +1 -1
  7. package/dist/channels/telegram/index.js +48 -6
  8. package/dist/channels/telegram/index.mjs +48 -6
  9. package/dist/channels/whatsapp/inbound.d.ts +13 -0
  10. package/dist/channels/whatsapp/inbound.d.ts.map +1 -1
  11. package/dist/channels/whatsapp/index.js +48 -6
  12. package/dist/channels/whatsapp/index.mjs +48 -6
  13. package/dist/core/pipeline.d.ts +52 -1
  14. package/dist/core/pipeline.d.ts.map +1 -1
  15. package/dist/history/index.d.ts +1 -0
  16. package/dist/history/index.d.ts.map +1 -1
  17. package/dist/history/index.js +23 -2
  18. package/dist/history/index.mjs +23 -2
  19. package/dist/history/tursoStore.d.ts +13 -1
  20. package/dist/history/tursoStore.d.ts.map +1 -1
  21. package/dist/history/types.d.ts +2 -0
  22. package/dist/history/types.d.ts.map +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +74 -9
  26. package/dist/index.mjs +74 -9
  27. package/dist/mcp-server.d.ts.map +1 -1
  28. package/dist/mcp-server.js +31 -4
  29. package/dist/mcp-server.mjs +31 -4
  30. package/dist/routes/demo.d.ts.map +1 -1
  31. package/dist/routes/openai.d.ts.map +1 -1
  32. package/dist/routes/private.d.ts.map +1 -1
  33. package/dist/routes/public.d.ts.map +1 -1
  34. package/dist/server.js +66 -7
  35. package/dist/server.mjs +66 -7
  36. package/dist/types.d.ts +25 -0
  37. package/dist/types.d.ts.map +1 -1
  38. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -384,14 +384,35 @@ async function prepareChat({
384
384
  messages,
385
385
  personaLayer,
386
386
  channelHint,
387
- buckets
387
+ buckets,
388
+ sender,
389
+ rewriteQuery,
390
+ rerankContext,
391
+ logger
388
392
  }) {
389
393
  const lastUserMsg = lastUserMessage(messages);
390
394
  if (!lastUserMsg) {
391
395
  throw new Error("no user message found in conversation");
392
396
  }
393
397
  const { topK, label } = MODE_SETTINGS[mode];
394
- const ctx = await store.query(lastUserMsg.content, topK, buckets ?? defaultBuckets(mode));
398
+ let query = lastUserMsg.content;
399
+ if (rewriteQuery) {
400
+ try {
401
+ const rewritten = await rewriteQuery({ query, mode, sender });
402
+ if (typeof rewritten === "string" && rewritten.trim()) query = rewritten;
403
+ } catch (error) {
404
+ logger?.error("rewriteQuery threw; falling back to the original query", error);
405
+ }
406
+ }
407
+ let ctx = await store.query(query, topK, buckets ?? defaultBuckets(mode));
408
+ if (rerankContext) {
409
+ try {
410
+ const reranked = await rerankContext({ query, chunks: ctx });
411
+ if (Array.isArray(reranked) && reranked.every((c) => typeof c === "string")) ctx = reranked;
412
+ } catch (error) {
413
+ logger?.error("rerankContext threw; falling back to the original chunks", error);
414
+ }
415
+ }
395
416
  const persona = personaLayer?.trim() || (mode === "private" ? prompts.privatePersona : prompts.publicPersona);
396
417
  const hint = channelHint?.trim();
397
418
  const system = [
@@ -930,7 +951,10 @@ async function createMCPServer(config) {
930
951
  prompts,
931
952
  mode: "public",
932
953
  messages: conversationMessages,
933
- buckets
954
+ buckets,
955
+ rewriteQuery: config.rewriteQuery,
956
+ rerankContext: config.rerankContext,
957
+ logger: log
934
958
  });
935
959
  const result = await answerOnce({
936
960
  answerFn: config.answerFn,
@@ -1016,7 +1040,10 @@ async function createMCPServer(config) {
1016
1040
  prompts,
1017
1041
  mode: "private",
1018
1042
  messages: conversationMessages,
1019
- buckets
1043
+ buckets,
1044
+ rewriteQuery: config.rewriteQuery,
1045
+ rerankContext: config.rerankContext,
1046
+ logger: log
1020
1047
  });
1021
1048
  const result = await answerOnce({
1022
1049
  answerFn: config.answerFn,
@@ -1491,7 +1518,16 @@ function demoRoutes(deps) {
1491
1518
  return c.json({ error: "no user message found in conversation" }, 400);
1492
1519
  }
1493
1520
  const buckets = await resolveBuckets({ mode: "public", bucketsFor: config.bucketsFor });
1494
- const { system } = await prepareChat({ store, prompts, mode: "public", messages, buckets });
1521
+ const { system } = await prepareChat({
1522
+ store,
1523
+ prompts,
1524
+ mode: "public",
1525
+ messages,
1526
+ buckets,
1527
+ rewriteQuery: config.rewriteQuery,
1528
+ rerankContext: config.rerankContext,
1529
+ logger
1530
+ });
1495
1531
  const model = config.openai.model || DEFAULT_MODEL;
1496
1532
  const url = new URL(c.req.url);
1497
1533
  const wantsStream3 = url.searchParams.get("stream") === "1";
@@ -1610,13 +1646,23 @@ function openaiRoutes(deps) {
1610
1646
  sender: jwtSubject(c),
1611
1647
  bucketsFor: config.bucketsFor
1612
1648
  });
1649
+ const sender = jwtSubject(c) ?? apiKeySubject(c);
1613
1650
  let system;
1614
1651
  try {
1615
- ({ system } = await prepareChat({ store, prompts, mode, messages, buckets }));
1652
+ ({ system } = await prepareChat({
1653
+ store,
1654
+ prompts,
1655
+ mode,
1656
+ messages,
1657
+ buckets,
1658
+ sender,
1659
+ rewriteQuery: config.rewriteQuery,
1660
+ rerankContext: config.rerankContext,
1661
+ logger
1662
+ }));
1616
1663
  } catch {
1617
1664
  return errorJson(c, 400, "Conversation must contain at least one user message");
1618
1665
  }
1619
- const sender = jwtSubject(c) ?? apiKeySubject(c);
1620
1666
  const conversationId = clientConversationId(c, body) ?? crypto.randomUUID();
1621
1667
  c.header("x-conversation-id", conversationId);
1622
1668
  const id = `chatcmpl-${crypto.randomUUID()}`;
@@ -1726,7 +1772,17 @@ function privateRoutes(deps) {
1726
1772
  });
1727
1773
  let system;
1728
1774
  try {
1729
- ({ system } = await prepareChat({ store, prompts, mode: "private", messages, buckets }));
1775
+ ({ system } = await prepareChat({
1776
+ store,
1777
+ prompts,
1778
+ mode: "private",
1779
+ messages,
1780
+ buckets,
1781
+ sender,
1782
+ rewriteQuery: config.rewriteQuery,
1783
+ rerankContext: config.rerankContext,
1784
+ logger
1785
+ }));
1730
1786
  } catch {
1731
1787
  return c.json({ error: "no user message found in conversation" }, 400);
1732
1788
  }
@@ -1802,7 +1858,16 @@ function publicRoutes(deps) {
1802
1858
  const buckets = await resolveBuckets({ mode: "public", bucketsFor: config.bucketsFor });
1803
1859
  let system;
1804
1860
  try {
1805
- ({ system } = await prepareChat({ store, prompts, mode: "public", messages, buckets }));
1861
+ ({ system } = await prepareChat({
1862
+ store,
1863
+ prompts,
1864
+ mode: "public",
1865
+ messages,
1866
+ buckets,
1867
+ rewriteQuery: config.rewriteQuery,
1868
+ rerankContext: config.rerankContext,
1869
+ logger
1870
+ }));
1806
1871
  } catch {
1807
1872
  return c.json({ error: "no user message found in conversation" }, 400);
1808
1873
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoBH,YAAY,EACV,WAAW,EACX,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,gBAAgB,qEAoT7D"}
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoBH,YAAY,EACV,WAAW,EACX,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,gBAAgB,qEA0T7D"}
@@ -184,14 +184,35 @@ async function prepareChat({
184
184
  messages,
185
185
  personaLayer,
186
186
  channelHint,
187
- buckets
187
+ buckets,
188
+ sender,
189
+ rewriteQuery,
190
+ rerankContext,
191
+ logger
188
192
  }) {
189
193
  const lastUserMsg = lastUserMessage(messages);
190
194
  if (!lastUserMsg) {
191
195
  throw new Error("no user message found in conversation");
192
196
  }
193
197
  const { topK, label } = MODE_SETTINGS[mode];
194
- const ctx = await store.query(lastUserMsg.content, topK, buckets ?? defaultBuckets(mode));
198
+ let query = lastUserMsg.content;
199
+ if (rewriteQuery) {
200
+ try {
201
+ const rewritten = await rewriteQuery({ query, mode, sender });
202
+ if (typeof rewritten === "string" && rewritten.trim()) query = rewritten;
203
+ } catch (error) {
204
+ logger?.error("rewriteQuery threw; falling back to the original query", error);
205
+ }
206
+ }
207
+ let ctx = await store.query(query, topK, buckets ?? defaultBuckets(mode));
208
+ if (rerankContext) {
209
+ try {
210
+ const reranked = await rerankContext({ query, chunks: ctx });
211
+ if (Array.isArray(reranked) && reranked.every((c) => typeof c === "string")) ctx = reranked;
212
+ } catch (error) {
213
+ logger?.error("rerankContext threw; falling back to the original chunks", error);
214
+ }
215
+ }
195
216
  const persona = personaLayer?.trim() || (mode === "private" ? prompts.privatePersona : prompts.publicPersona);
196
217
  const hint = channelHint?.trim();
197
218
  const system = [
@@ -705,7 +726,10 @@ async function createMCPServer(config) {
705
726
  prompts,
706
727
  mode: "public",
707
728
  messages: conversationMessages,
708
- buckets
729
+ buckets,
730
+ rewriteQuery: config.rewriteQuery,
731
+ rerankContext: config.rerankContext,
732
+ logger: log
709
733
  });
710
734
  const result = await answerOnce({
711
735
  answerFn: config.answerFn,
@@ -791,7 +815,10 @@ async function createMCPServer(config) {
791
815
  prompts,
792
816
  mode: "private",
793
817
  messages: conversationMessages,
794
- buckets
818
+ buckets,
819
+ rewriteQuery: config.rewriteQuery,
820
+ rerankContext: config.rerankContext,
821
+ logger: log
795
822
  });
796
823
  const result = await answerOnce({
797
824
  answerFn: config.answerFn,
@@ -150,14 +150,35 @@ async function prepareChat({
150
150
  messages,
151
151
  personaLayer,
152
152
  channelHint,
153
- buckets
153
+ buckets,
154
+ sender,
155
+ rewriteQuery,
156
+ rerankContext,
157
+ logger
154
158
  }) {
155
159
  const lastUserMsg = lastUserMessage(messages);
156
160
  if (!lastUserMsg) {
157
161
  throw new Error("no user message found in conversation");
158
162
  }
159
163
  const { topK, label } = MODE_SETTINGS[mode];
160
- const ctx = await store.query(lastUserMsg.content, topK, buckets ?? defaultBuckets(mode));
164
+ let query = lastUserMsg.content;
165
+ if (rewriteQuery) {
166
+ try {
167
+ const rewritten = await rewriteQuery({ query, mode, sender });
168
+ if (typeof rewritten === "string" && rewritten.trim()) query = rewritten;
169
+ } catch (error) {
170
+ logger?.error("rewriteQuery threw; falling back to the original query", error);
171
+ }
172
+ }
173
+ let ctx = await store.query(query, topK, buckets ?? defaultBuckets(mode));
174
+ if (rerankContext) {
175
+ try {
176
+ const reranked = await rerankContext({ query, chunks: ctx });
177
+ if (Array.isArray(reranked) && reranked.every((c) => typeof c === "string")) ctx = reranked;
178
+ } catch (error) {
179
+ logger?.error("rerankContext threw; falling back to the original chunks", error);
180
+ }
181
+ }
161
182
  const persona = personaLayer?.trim() || (mode === "private" ? prompts.privatePersona : prompts.publicPersona);
162
183
  const hint = channelHint?.trim();
163
184
  const system = [
@@ -671,7 +692,10 @@ async function createMCPServer(config) {
671
692
  prompts,
672
693
  mode: "public",
673
694
  messages: conversationMessages,
674
- buckets
695
+ buckets,
696
+ rewriteQuery: config.rewriteQuery,
697
+ rerankContext: config.rerankContext,
698
+ logger: log
675
699
  });
676
700
  const result = await answerOnce({
677
701
  answerFn: config.answerFn,
@@ -757,7 +781,10 @@ async function createMCPServer(config) {
757
781
  prompts,
758
782
  mode: "private",
759
783
  messages: conversationMessages,
760
- buckets
784
+ buckets,
785
+ rewriteQuery: config.rewriteQuery,
786
+ rerankContext: config.rerankContext,
787
+ logger: log
761
788
  });
762
789
  const result = await answerOnce({
763
790
  answerFn: config.answerFn,
@@ -1 +1 @@
1
- {"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../src/routes/demo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAY5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAuFnD,wBAAgB,UAAU,CAAC,IAAI,EAAE,kBAAkB,8EAyHlD"}
1
+ {"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../src/routes/demo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAY5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAuFnD,wBAAgB,UAAU,CAAC,IAAI,EAAE,kBAAkB,8EAkIlD"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/routes/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAU5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAsDnD,wBAAgB,YAAY,CAAC,IAAI,EAAE,kBAAkB,8EAmKpD"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/routes/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAU5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAsDnD,wBAAgB,YAAY,CAAC,IAAI,EAAE,kBAAkB,8EA+KpD"}
@@ -1 +1 @@
1
- {"version":3,"file":"private.d.ts","sourceRoot":"","sources":["../../src/routes/private.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAS5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AASnD,wBAAgB,aAAa,CAAC,IAAI,EAAE,kBAAkB,8EA4ErD"}
1
+ {"version":3,"file":"private.d.ts","sourceRoot":"","sources":["../../src/routes/private.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAS5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AASnD,wBAAgB,aAAa,CAAC,IAAI,EAAE,kBAAkB,8EAsFrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/routes/public.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAW5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AASnD,wBAAgB,YAAY,CAAC,IAAI,EAAE,kBAAkB,8EA4EpD"}
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/routes/public.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAW5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AASnD,wBAAgB,YAAY,CAAC,IAAI,EAAE,kBAAkB,8EAqFpD"}
package/dist/server.js CHANGED
@@ -378,14 +378,35 @@ async function prepareChat({
378
378
  messages,
379
379
  personaLayer,
380
380
  channelHint,
381
- buckets
381
+ buckets,
382
+ sender,
383
+ rewriteQuery,
384
+ rerankContext,
385
+ logger
382
386
  }) {
383
387
  const lastUserMsg = lastUserMessage(messages);
384
388
  if (!lastUserMsg) {
385
389
  throw new Error("no user message found in conversation");
386
390
  }
387
391
  const { topK, label } = MODE_SETTINGS[mode];
388
- const ctx = await store.query(lastUserMsg.content, topK, buckets ?? defaultBuckets(mode));
392
+ let query = lastUserMsg.content;
393
+ if (rewriteQuery) {
394
+ try {
395
+ const rewritten = await rewriteQuery({ query, mode, sender });
396
+ if (typeof rewritten === "string" && rewritten.trim()) query = rewritten;
397
+ } catch (error) {
398
+ logger?.error("rewriteQuery threw; falling back to the original query", error);
399
+ }
400
+ }
401
+ let ctx = await store.query(query, topK, buckets ?? defaultBuckets(mode));
402
+ if (rerankContext) {
403
+ try {
404
+ const reranked = await rerankContext({ query, chunks: ctx });
405
+ if (Array.isArray(reranked) && reranked.every((c) => typeof c === "string")) ctx = reranked;
406
+ } catch (error) {
407
+ logger?.error("rerankContext threw; falling back to the original chunks", error);
408
+ }
409
+ }
389
410
  const persona = personaLayer?.trim() || (mode === "private" ? prompts.privatePersona : prompts.publicPersona);
390
411
  const hint = channelHint?.trim();
391
412
  const system = [
@@ -1063,7 +1084,16 @@ function demoRoutes(deps) {
1063
1084
  return c.json({ error: "no user message found in conversation" }, 400);
1064
1085
  }
1065
1086
  const buckets = await resolveBuckets({ mode: "public", bucketsFor: config.bucketsFor });
1066
- const { system } = await prepareChat({ store, prompts, mode: "public", messages, buckets });
1087
+ const { system } = await prepareChat({
1088
+ store,
1089
+ prompts,
1090
+ mode: "public",
1091
+ messages,
1092
+ buckets,
1093
+ rewriteQuery: config.rewriteQuery,
1094
+ rerankContext: config.rerankContext,
1095
+ logger
1096
+ });
1067
1097
  const model = config.openai.model || DEFAULT_MODEL;
1068
1098
  const url = new URL(c.req.url);
1069
1099
  const wantsStream3 = url.searchParams.get("stream") === "1";
@@ -1263,13 +1293,23 @@ function openaiRoutes(deps) {
1263
1293
  sender: jwtSubject(c),
1264
1294
  bucketsFor: config.bucketsFor
1265
1295
  });
1296
+ const sender = jwtSubject(c) ?? apiKeySubject(c);
1266
1297
  let system;
1267
1298
  try {
1268
- ({ system } = await prepareChat({ store, prompts, mode, messages, buckets }));
1299
+ ({ system } = await prepareChat({
1300
+ store,
1301
+ prompts,
1302
+ mode,
1303
+ messages,
1304
+ buckets,
1305
+ sender,
1306
+ rewriteQuery: config.rewriteQuery,
1307
+ rerankContext: config.rerankContext,
1308
+ logger
1309
+ }));
1269
1310
  } catch {
1270
1311
  return errorJson(c, 400, "Conversation must contain at least one user message");
1271
1312
  }
1272
- const sender = jwtSubject(c) ?? apiKeySubject(c);
1273
1313
  const conversationId = clientConversationId(c, body) ?? crypto.randomUUID();
1274
1314
  c.header("x-conversation-id", conversationId);
1275
1315
  const id = `chatcmpl-${crypto.randomUUID()}`;
@@ -1379,7 +1419,17 @@ function privateRoutes(deps) {
1379
1419
  });
1380
1420
  let system;
1381
1421
  try {
1382
- ({ system } = await prepareChat({ store, prompts, mode: "private", messages, buckets }));
1422
+ ({ system } = await prepareChat({
1423
+ store,
1424
+ prompts,
1425
+ mode: "private",
1426
+ messages,
1427
+ buckets,
1428
+ sender,
1429
+ rewriteQuery: config.rewriteQuery,
1430
+ rerankContext: config.rerankContext,
1431
+ logger
1432
+ }));
1383
1433
  } catch {
1384
1434
  return c.json({ error: "no user message found in conversation" }, 400);
1385
1435
  }
@@ -1551,7 +1601,16 @@ function publicRoutes(deps) {
1551
1601
  const buckets = await resolveBuckets({ mode: "public", bucketsFor: config.bucketsFor });
1552
1602
  let system;
1553
1603
  try {
1554
- ({ system } = await prepareChat({ store, prompts, mode: "public", messages, buckets }));
1604
+ ({ system } = await prepareChat({
1605
+ store,
1606
+ prompts,
1607
+ mode: "public",
1608
+ messages,
1609
+ buckets,
1610
+ rewriteQuery: config.rewriteQuery,
1611
+ rerankContext: config.rerankContext,
1612
+ logger
1613
+ }));
1555
1614
  } catch {
1556
1615
  return c.json({ error: "no user message found in conversation" }, 400);
1557
1616
  }
package/dist/server.mjs CHANGED
@@ -344,14 +344,35 @@ async function prepareChat({
344
344
  messages,
345
345
  personaLayer,
346
346
  channelHint,
347
- buckets
347
+ buckets,
348
+ sender,
349
+ rewriteQuery,
350
+ rerankContext,
351
+ logger
348
352
  }) {
349
353
  const lastUserMsg = lastUserMessage(messages);
350
354
  if (!lastUserMsg) {
351
355
  throw new Error("no user message found in conversation");
352
356
  }
353
357
  const { topK, label } = MODE_SETTINGS[mode];
354
- const ctx = await store.query(lastUserMsg.content, topK, buckets ?? defaultBuckets(mode));
358
+ let query = lastUserMsg.content;
359
+ if (rewriteQuery) {
360
+ try {
361
+ const rewritten = await rewriteQuery({ query, mode, sender });
362
+ if (typeof rewritten === "string" && rewritten.trim()) query = rewritten;
363
+ } catch (error) {
364
+ logger?.error("rewriteQuery threw; falling back to the original query", error);
365
+ }
366
+ }
367
+ let ctx = await store.query(query, topK, buckets ?? defaultBuckets(mode));
368
+ if (rerankContext) {
369
+ try {
370
+ const reranked = await rerankContext({ query, chunks: ctx });
371
+ if (Array.isArray(reranked) && reranked.every((c) => typeof c === "string")) ctx = reranked;
372
+ } catch (error) {
373
+ logger?.error("rerankContext threw; falling back to the original chunks", error);
374
+ }
375
+ }
355
376
  const persona = personaLayer?.trim() || (mode === "private" ? prompts.privatePersona : prompts.publicPersona);
356
377
  const hint = channelHint?.trim();
357
378
  const system = [
@@ -1028,7 +1049,16 @@ function demoRoutes(deps) {
1028
1049
  return c.json({ error: "no user message found in conversation" }, 400);
1029
1050
  }
1030
1051
  const buckets = await resolveBuckets({ mode: "public", bucketsFor: config.bucketsFor });
1031
- const { system } = await prepareChat({ store, prompts, mode: "public", messages, buckets });
1052
+ const { system } = await prepareChat({
1053
+ store,
1054
+ prompts,
1055
+ mode: "public",
1056
+ messages,
1057
+ buckets,
1058
+ rewriteQuery: config.rewriteQuery,
1059
+ rerankContext: config.rerankContext,
1060
+ logger
1061
+ });
1032
1062
  const model = config.openai.model || DEFAULT_MODEL;
1033
1063
  const url = new URL(c.req.url);
1034
1064
  const wantsStream3 = url.searchParams.get("stream") === "1";
@@ -1228,13 +1258,23 @@ function openaiRoutes(deps) {
1228
1258
  sender: jwtSubject(c),
1229
1259
  bucketsFor: config.bucketsFor
1230
1260
  });
1261
+ const sender = jwtSubject(c) ?? apiKeySubject(c);
1231
1262
  let system;
1232
1263
  try {
1233
- ({ system } = await prepareChat({ store, prompts, mode, messages, buckets }));
1264
+ ({ system } = await prepareChat({
1265
+ store,
1266
+ prompts,
1267
+ mode,
1268
+ messages,
1269
+ buckets,
1270
+ sender,
1271
+ rewriteQuery: config.rewriteQuery,
1272
+ rerankContext: config.rerankContext,
1273
+ logger
1274
+ }));
1234
1275
  } catch {
1235
1276
  return errorJson(c, 400, "Conversation must contain at least one user message");
1236
1277
  }
1237
- const sender = jwtSubject(c) ?? apiKeySubject(c);
1238
1278
  const conversationId = clientConversationId(c, body) ?? crypto.randomUUID();
1239
1279
  c.header("x-conversation-id", conversationId);
1240
1280
  const id = `chatcmpl-${crypto.randomUUID()}`;
@@ -1344,7 +1384,17 @@ function privateRoutes(deps) {
1344
1384
  });
1345
1385
  let system;
1346
1386
  try {
1347
- ({ system } = await prepareChat({ store, prompts, mode: "private", messages, buckets }));
1387
+ ({ system } = await prepareChat({
1388
+ store,
1389
+ prompts,
1390
+ mode: "private",
1391
+ messages,
1392
+ buckets,
1393
+ sender,
1394
+ rewriteQuery: config.rewriteQuery,
1395
+ rerankContext: config.rerankContext,
1396
+ logger
1397
+ }));
1348
1398
  } catch {
1349
1399
  return c.json({ error: "no user message found in conversation" }, 400);
1350
1400
  }
@@ -1516,7 +1566,16 @@ function publicRoutes(deps) {
1516
1566
  const buckets = await resolveBuckets({ mode: "public", bucketsFor: config.bucketsFor });
1517
1567
  let system;
1518
1568
  try {
1519
- ({ system } = await prepareChat({ store, prompts, mode: "public", messages, buckets }));
1569
+ ({ system } = await prepareChat({
1570
+ store,
1571
+ prompts,
1572
+ mode: "public",
1573
+ messages,
1574
+ buckets,
1575
+ rewriteQuery: config.rewriteQuery,
1576
+ rerankContext: config.rerankContext,
1577
+ logger
1578
+ }));
1520
1579
  } catch {
1521
1580
  return c.json({ error: "no user message found in conversation" }, 400);
1522
1581
  }
package/dist/types.d.ts CHANGED
@@ -11,6 +11,7 @@ import type { Channel, ChannelSenderRegistry } from "./channels";
11
11
  import type { AnswerFn, TransformReply } from "./core/answer";
12
12
  import type { BucketsFor } from "./core/buckets";
13
13
  import type { Logger, LogLevel } from "./core/logger";
14
+ import type { RerankContext, RewriteQuery } from "./core/pipeline";
14
15
  import type { PromptLoader } from "./core/prompts";
15
16
  import type { VectorStore } from "./core/retrieval";
16
17
  export type { Logger, LogLevel } from "./core/logger";
@@ -265,6 +266,30 @@ export interface ChatterConfig {
265
266
  * Unset: the mode defaults apply everywhere.
266
267
  */
267
268
  bucketsFor?: BucketsFor;
269
+ /**
270
+ * Rewrites the retrieval query for a turn before it reaches the vector
271
+ * store — e.g. expanding an ambiguous follow-up into something embeddable
272
+ * on its own. Receives the same `sender` identity `answerFn` sees (not the
273
+ * retrieval-scope-restricted one `bucketsFor` sees on the public
274
+ * OpenAI-compatible route — rewriting a query widens nothing, so it isn't
275
+ * subject to that clamp).
276
+ *
277
+ * Consulted everywhere `bucketsFor` is. A throw/rejection, or a return
278
+ * value that isn't a non-blank string, falls back to the unmodified query
279
+ * — a broken rewrite degrades relevance, never the chat path. Unset:
280
+ * retrieval runs on the latest user message unmodified.
281
+ */
282
+ rewriteQuery?: RewriteQuery;
283
+ /**
284
+ * Post-processes the chunks retrieval returned — reordering, filtering, or
285
+ * otherwise reranking — before they're folded into the system prompt.
286
+ *
287
+ * Consulted everywhere `bucketsFor` is, immediately after retrieval runs.
288
+ * A throw/rejection, or a return value that isn't a string array, falls
289
+ * back to the chunks retrieval returned, unmodified. Unset: retrieved
290
+ * chunks are used as-is.
291
+ */
292
+ rerankContext?: RerankContext;
268
293
  /** Custom route handler for advanced use cases. May be async — see {@link CustomRoutes} */
269
294
  customRoutes?: CustomRoutes;
270
295
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diegoaltoworks/chatter",
3
- "version": "0.56.0",
3
+ "version": "0.58.0",
4
4
  "description": "Embeddable AI chatbot framework with RAG, authentication, and customizable widgets",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",