fawn-memory 0.0.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 (126) hide show
  1. package/README.md +118 -0
  2. package/dist/index.d.ts +14 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +183 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/knowpro/answerContextSchema.d.ts +20 -0
  7. package/dist/knowpro/answerContextSchema.d.ts.map +1 -0
  8. package/dist/knowpro/answerContextSchema.js +4 -0
  9. package/dist/knowpro/answerContextSchema.js.map +1 -0
  10. package/dist/knowpro/answerResponseSchema.d.ts +7 -0
  11. package/dist/knowpro/answerResponseSchema.d.ts.map +1 -0
  12. package/dist/knowpro/answerResponseSchema.js +4 -0
  13. package/dist/knowpro/answerResponseSchema.js.map +1 -0
  14. package/dist/knowpro/answerTranslator.d.ts +5 -0
  15. package/dist/knowpro/answerTranslator.d.ts.map +1 -0
  16. package/dist/knowpro/answerTranslator.js +10 -0
  17. package/dist/knowpro/answerTranslator.js.map +1 -0
  18. package/dist/knowpro/collections.d.ts +14 -0
  19. package/dist/knowpro/collections.d.ts.map +1 -0
  20. package/dist/knowpro/collections.js +52 -0
  21. package/dist/knowpro/collections.js.map +1 -0
  22. package/dist/knowpro/conversation.d.ts +63 -0
  23. package/dist/knowpro/conversation.d.ts.map +1 -0
  24. package/dist/knowpro/conversation.js +247 -0
  25. package/dist/knowpro/conversation.js.map +1 -0
  26. package/dist/knowpro/dateTimeSchema.d.ts +19 -0
  27. package/dist/knowpro/dateTimeSchema.d.ts.map +1 -0
  28. package/dist/knowpro/dateTimeSchema.js +4 -0
  29. package/dist/knowpro/dateTimeSchema.js.map +1 -0
  30. package/dist/knowpro/entities.d.ts +9 -0
  31. package/dist/knowpro/entities.d.ts.map +1 -0
  32. package/dist/knowpro/entities.js +63 -0
  33. package/dist/knowpro/entities.js.map +1 -0
  34. package/dist/knowpro/interfaces.d.ts +637 -0
  35. package/dist/knowpro/interfaces.d.ts.map +1 -0
  36. package/dist/knowpro/interfaces.js +4 -0
  37. package/dist/knowpro/interfaces.js.map +1 -0
  38. package/dist/knowpro/knowledge.d.ts +19 -0
  39. package/dist/knowpro/knowledge.d.ts.map +1 -0
  40. package/dist/knowpro/knowledge.js +97 -0
  41. package/dist/knowpro/knowledge.js.map +1 -0
  42. package/dist/knowpro/knowledgeSchema.d.ts +39 -0
  43. package/dist/knowpro/knowledgeSchema.d.ts.map +1 -0
  44. package/dist/knowpro/knowledgeSchema.js +2 -0
  45. package/dist/knowpro/knowledgeSchema.js.map +1 -0
  46. package/dist/knowpro/llmProvider.d.ts +17 -0
  47. package/dist/knowpro/llmProvider.d.ts.map +1 -0
  48. package/dist/knowpro/llmProvider.js +105 -0
  49. package/dist/knowpro/llmProvider.js.map +1 -0
  50. package/dist/knowpro/relatedTermsSchema.d.ts +24 -0
  51. package/dist/knowpro/relatedTermsSchema.d.ts.map +1 -0
  52. package/dist/knowpro/relatedTermsSchema.js +6 -0
  53. package/dist/knowpro/relatedTermsSchema.js.map +1 -0
  54. package/dist/knowpro/schema.d.ts +24 -0
  55. package/dist/knowpro/schema.d.ts.map +1 -0
  56. package/dist/knowpro/schema.js +55 -0
  57. package/dist/knowpro/schema.js.map +1 -0
  58. package/dist/knowpro/search.d.ts +8 -0
  59. package/dist/knowpro/search.d.ts.map +1 -0
  60. package/dist/knowpro/search.js +448 -0
  61. package/dist/knowpro/search.js.map +1 -0
  62. package/dist/knowpro/searchQuerySchema.d.ts +40 -0
  63. package/dist/knowpro/searchQuerySchema.d.ts.map +1 -0
  64. package/dist/knowpro/searchQuerySchema.js +4 -0
  65. package/dist/knowpro/searchQuerySchema.js.map +1 -0
  66. package/dist/knowpro/searchQueryTranslator.d.ts +33 -0
  67. package/dist/knowpro/searchQueryTranslator.d.ts.map +1 -0
  68. package/dist/knowpro/searchQueryTranslator.js +47 -0
  69. package/dist/knowpro/searchQueryTranslator.js.map +1 -0
  70. package/dist/knowpro/semanticRef.d.ts +4 -0
  71. package/dist/knowpro/semanticRef.d.ts.map +1 -0
  72. package/dist/knowpro/semanticRef.js +62 -0
  73. package/dist/knowpro/semanticRef.js.map +1 -0
  74. package/dist/knowpro/semanticRefIndex.d.ts +48 -0
  75. package/dist/knowpro/semanticRefIndex.d.ts.map +1 -0
  76. package/dist/knowpro/semanticRefIndex.js +388 -0
  77. package/dist/knowpro/semanticRefIndex.js.map +1 -0
  78. package/dist/knowpro/storageProvider.d.ts +7 -0
  79. package/dist/knowpro/storageProvider.d.ts.map +1 -0
  80. package/dist/knowpro/storageProvider.js +61 -0
  81. package/dist/knowpro/storageProvider.js.map +1 -0
  82. package/dist/knowpro/timestampIndex.d.ts +43 -0
  83. package/dist/knowpro/timestampIndex.d.ts.map +1 -0
  84. package/dist/knowpro/timestampIndex.js +324 -0
  85. package/dist/knowpro/timestampIndex.js.map +1 -0
  86. package/dist/rag/chunking.d.ts +6 -0
  87. package/dist/rag/chunking.d.ts.map +1 -0
  88. package/dist/rag/chunking.js +83 -0
  89. package/dist/rag/chunking.js.map +1 -0
  90. package/dist/rag/embeddingProvider.d.ts +34 -0
  91. package/dist/rag/embeddingProvider.d.ts.map +1 -0
  92. package/dist/rag/embeddingProvider.js +95 -0
  93. package/dist/rag/embeddingProvider.js.map +1 -0
  94. package/dist/rag/index.d.ts +8 -0
  95. package/dist/rag/index.d.ts.map +1 -0
  96. package/dist/rag/index.js +7 -0
  97. package/dist/rag/index.js.map +1 -0
  98. package/dist/rag/knowproAdapter.d.ts +44 -0
  99. package/dist/rag/knowproAdapter.d.ts.map +1 -0
  100. package/dist/rag/knowproAdapter.js +66 -0
  101. package/dist/rag/knowproAdapter.js.map +1 -0
  102. package/dist/rag/ragIndex.d.ts +101 -0
  103. package/dist/rag/ragIndex.d.ts.map +1 -0
  104. package/dist/rag/ragIndex.js +305 -0
  105. package/dist/rag/ragIndex.js.map +1 -0
  106. package/dist/rag/similarity.d.ts +15 -0
  107. package/dist/rag/similarity.d.ts.map +1 -0
  108. package/dist/rag/similarity.js +47 -0
  109. package/dist/rag/similarity.js.map +1 -0
  110. package/dist/rag/types.d.ts +61 -0
  111. package/dist/rag/types.d.ts.map +1 -0
  112. package/dist/rag/types.js +2 -0
  113. package/dist/rag/types.js.map +1 -0
  114. package/dist/rag/vectorIndex.d.ts +102 -0
  115. package/dist/rag/vectorIndex.d.ts.map +1 -0
  116. package/dist/rag/vectorIndex.js +236 -0
  117. package/dist/rag/vectorIndex.js.map +1 -0
  118. package/dist/utils/async.d.ts +25 -0
  119. package/dist/utils/async.d.ts.map +1 -0
  120. package/dist/utils/async.js +55 -0
  121. package/dist/utils/async.js.map +1 -0
  122. package/dist/utils/string.d.ts +3 -0
  123. package/dist/utils/string.d.ts.map +1 -0
  124. package/dist/utils/string.js +15 -0
  125. package/dist/utils/string.js.map +1 -0
  126. package/package.json +48 -0
@@ -0,0 +1,448 @@
1
+ import { writeFileSync } from "node:fs";
2
+ import { printRef } from "./entities.js";
3
+ import { loadSchema } from "./schema.js";
4
+ import { hasTemporalReference, parseTemporalExpression } from "./timestampIndex.js";
5
+ function processTerm(term) {
6
+ return term.toLowerCase();
7
+ }
8
+ function createQuestionPrompt(question) {
9
+ const prompt = [
10
+ "The following is a user question:",
11
+ "===",
12
+ question,
13
+ "",
14
+ "===",
15
+ "- The included [ANSWER CONTEXT] contains information that MAY be relevant to answering the question.",
16
+ "- Answer the user question PRECISELY using ONLY information EXPLICITLY provided in the topics, entities, actions, messages and time ranges/timestamps found in [ANSWER CONTEXT]",
17
+ "- Return 'NoAnswer' if you are unsure, , if the answer is not explicitly in [ANSWER CONTEXT], or if the topics or {entity names, types and facets} in the question are not found in [ANSWER CONTEXT].",
18
+ "- Use the 'name', 'type' and 'facets' properties of the provided JSON entities to identify those highly relevant to answering the question.",
19
+ "- 'origin' and 'audience' fields contain the names of entities involved in communication about the knowledge",
20
+ "**Important:** Communicating DOES NOT imply associations such as authorship, ownership etc. E.g. origin: [X] telling audience [Y, Z] communicating about a book does not imply authorship.",
21
+ "- When asked for lists, ensure the list contents answer the question and nothing else. E.g. for the question 'List all books': List only the books in [ANSWER CONTEXT].",
22
+ "- Use direct quotes only when needed or asked. Otherwise answer in your own words.",
23
+ "- Your answer is readable and complete, with appropriate formatting: line breaks, numbered lists, bullet points etc.",
24
+ ];
25
+ return prompt.join("\n");
26
+ }
27
+ function createContextPrompt(typeName, schema, context) {
28
+ let content = schema && schema.length > 0
29
+ ? `[ANSWER CONTEXT] for answering user questions is a JSON object of type ${typeName} according to the following TypeScript definitions:\n` +
30
+ `\`\`\`\n${schema}\`\`\`\n`
31
+ : "";
32
+ content += `[ANSWER CONTEXT]\n` + `===\n${context}\n===\n`;
33
+ return content;
34
+ }
35
+ export function generateAnswer(rawQuery, compiledQuery, answerTranslator) {
36
+ const prompt = [];
37
+ const questionPrompt = createQuestionPrompt(rawQuery);
38
+ const contextSchema = loadSchema(["answerContextSchema.ts"], import.meta.url);
39
+ const contextContent = JSON.stringify(compiledQuery);
40
+ prompt.push(questionPrompt);
41
+ prompt.push(createContextPrompt("AnswerContext", // TODO figure out if this is the intended use for this param
42
+ contextSchema, contextContent));
43
+ const promptText = prompt.join("\n\n");
44
+ console.log("ANSWER PROMPT");
45
+ console.log(promptText, promptText.length);
46
+ writeFileSync("answerPrompt.txt", promptText);
47
+ return answerTranslator.translate(promptText);
48
+ }
49
+ function scoreFacet(masterTerms, facet) {
50
+ let facetScore = 0;
51
+ if (!facet.name) {
52
+ return facetScore;
53
+ }
54
+ if (masterTerms.includes(facet.name.toLowerCase())) {
55
+ facetScore += 1;
56
+ }
57
+ ;
58
+ if (masterTerms.includes(facet.value.toString().toLowerCase())) {
59
+ facetScore += 1;
60
+ }
61
+ ;
62
+ return facetScore;
63
+ }
64
+ function scoreEntity(masterTerms, scoreMap, ref) {
65
+ const entity = ref.knowledge;
66
+ let entityScore = 0;
67
+ if (masterTerms.includes(entity.name.toLowerCase())) {
68
+ entityScore += 1;
69
+ }
70
+ ;
71
+ entity.type.forEach((type) => {
72
+ if (masterTerms.includes(type.toLowerCase())) {
73
+ entityScore += 1;
74
+ }
75
+ ;
76
+ });
77
+ if (entity.facets) {
78
+ entity.facets.forEach((facet) => {
79
+ entityScore += scoreFacet(masterTerms, facet);
80
+ });
81
+ }
82
+ scoreMap.set(ref, entityScore);
83
+ }
84
+ function scoreTopic(masterTerms, scoreMap, ref) {
85
+ const topic = ref.knowledge;
86
+ const tokens = topic.text.split(" ");
87
+ let topicScore = 0;
88
+ tokens.forEach((token) => {
89
+ if (masterTerms.includes(token.toLowerCase())) {
90
+ topicScore += 1;
91
+ }
92
+ ;
93
+ });
94
+ scoreMap.set(ref, topicScore);
95
+ }
96
+ function scoreAction(masterTerms, scoreMap, ref) {
97
+ const action = ref.knowledge;
98
+ let actionScore = 0;
99
+ if (action.indirectObjectEntityName && masterTerms.includes(action.indirectObjectEntityName.toLowerCase())) {
100
+ actionScore += 1;
101
+ }
102
+ ;
103
+ if (action.objectEntityName && masterTerms.includes(action.objectEntityName.toLowerCase())) {
104
+ actionScore += 1;
105
+ }
106
+ ;
107
+ if (action.subjectEntityName && masterTerms.includes(action.subjectEntityName.toLowerCase())) {
108
+ actionScore += 1;
109
+ }
110
+ ;
111
+ if (action.verbTense && masterTerms.includes(action.verbTense.toLowerCase())) {
112
+ actionScore += 1;
113
+ }
114
+ ;
115
+ if (action.subjectEntityFacet) {
116
+ actionScore += scoreFacet(masterTerms, action.subjectEntityFacet);
117
+ }
118
+ action.verbs.forEach((verb) => {
119
+ if (masterTerms.includes(verb.toLowerCase())) {
120
+ actionScore += 1;
121
+ }
122
+ ;
123
+ });
124
+ scoreMap.set(ref, actionScore);
125
+ }
126
+ function scoreRef(masterTerms, scoreMap, ref) {
127
+ switch (ref.knowledgeType) {
128
+ case "entity": {
129
+ scoreEntity(masterTerms, scoreMap, ref);
130
+ break;
131
+ }
132
+ case "topic": {
133
+ scoreTopic(masterTerms, scoreMap, ref);
134
+ break;
135
+ }
136
+ case "action": {
137
+ scoreAction(masterTerms, scoreMap, ref);
138
+ break;
139
+ }
140
+ default: {
141
+ break;
142
+ }
143
+ }
144
+ }
145
+ export function compileContext(query, semanticRefIndex, semanticRefs, messages, secondaryIndexes, originalQuery) {
146
+ // Get timestamp index from secondary indexes if available
147
+ const timestampIndex = secondaryIndexes?.timestampIndex;
148
+ const termList = new Set();
149
+ // Check if query has temporal reference for ranking
150
+ const hasTimeReference = originalQuery ? hasTemporalReference(originalQuery) : false;
151
+ // Extract time range from query if present
152
+ let queryTimeRange;
153
+ if (hasTimeReference && originalQuery) {
154
+ // Try to parse temporal expression from the query
155
+ const temporalTerms = ['today', 'yesterday', 'last week', 'last month', 'this week', 'this month'];
156
+ for (const term of temporalTerms) {
157
+ if (originalQuery.toLowerCase().includes(term)) {
158
+ queryTimeRange = parseTemporalExpression(term);
159
+ break;
160
+ }
161
+ }
162
+ }
163
+ // Also check if the structured query has a time range
164
+ let structuredTimeRange;
165
+ query.searchExpressions.forEach((expression) => {
166
+ expression.filters.forEach((filter) => {
167
+ if (filter.scopeSubQuery?.timeRange) {
168
+ const tr = filter.scopeSubQuery.timeRange;
169
+ structuredTimeRange = {
170
+ start: new Date(tr.startDate.date.year, tr.startDate.date.month - 1, tr.startDate.date.day),
171
+ end: tr.stopDate
172
+ ? new Date(tr.stopDate.date.year, tr.stopDate.date.month - 1, tr.stopDate.date.day, 23, 59, 59)
173
+ : new Date(tr.startDate.date.year, tr.startDate.date.month - 1, tr.startDate.date.day, 23, 59, 59)
174
+ };
175
+ }
176
+ });
177
+ });
178
+ // Use structured time range if available, otherwise use parsed temporal expression
179
+ const effectiveTimeRange = structuredTimeRange || queryTimeRange;
180
+ // TODO: this code can definitely be cleaned up
181
+ query.searchExpressions.forEach((expression) => {
182
+ expression.filters.forEach((filter) => {
183
+ // Entities
184
+ console.log(filter);
185
+ console.log("ENTITY SEARCH TERM ", filter.entitySearchTerms);
186
+ if (filter.entitySearchTerms) {
187
+ filter.entitySearchTerms.forEach((entity) => {
188
+ termList.add(processTerm(entity.name));
189
+ if (entity.facets) {
190
+ entity.facets.forEach((facet) => {
191
+ termList.add(processTerm(facet.facetName));
192
+ termList.add(processTerm(facet.facetValue));
193
+ });
194
+ }
195
+ if (entity.type) {
196
+ entity.type.forEach((token) => {
197
+ termList.add(processTerm(token));
198
+ });
199
+ }
200
+ });
201
+ }
202
+ // Actions
203
+ console.log("ACTION SEARCH TRERM", filter.actionSearchTerm);
204
+ if (filter.actionSearchTerm) {
205
+ if (filter.actionSearchTerm.actionVerbs) {
206
+ filter.actionSearchTerm.actionVerbs.words.forEach((word) => {
207
+ termList.add(processTerm(word));
208
+ });
209
+ }
210
+ console.log("ACTOR ENTITIES", filter.actionSearchTerm.actorEntities);
211
+ if (filter.actionSearchTerm.actorEntities !== "*") {
212
+ filter.actionSearchTerm.actorEntities.forEach((entity) => {
213
+ termList.add(processTerm(entity.name));
214
+ if (entity.facets) {
215
+ entity.facets.forEach((facet) => {
216
+ termList.add(processTerm(facet.facetName));
217
+ termList.add(processTerm(facet.facetValue));
218
+ });
219
+ }
220
+ if (entity.type) {
221
+ entity.type.forEach((token) => {
222
+ termList.add(processTerm(token));
223
+ });
224
+ }
225
+ });
226
+ }
227
+ }
228
+ console.log("SCOPE QUERY ", filter.scopeSubQuery);
229
+ // Query Scope
230
+ if (filter.scopeSubQuery) {
231
+ // TBD later as we refine search
232
+ }
233
+ // Additional Search Terms
234
+ console.log("SEARCH TERMS ", filter.searchTerms);
235
+ if (filter.searchTerms) {
236
+ filter.searchTerms.forEach((term) => {
237
+ termList.add(processTerm(term));
238
+ });
239
+ }
240
+ });
241
+ });
242
+ console.log("QUERY EXPRESSION");
243
+ console.log(termList);
244
+ // 1. get all the terms then lookup all the refs for each term
245
+ // 2. merge refs and order ref groups by highest ranked term (by ref count)
246
+ // 3. TODO create a ranking heuristic for the merged refs LETS GET SEARCH WORKING BEFORE PLAYING WITH THIS
247
+ // 4. stick into answer translator, in addition create a heuristic for ranking chunks
248
+ // add these chunks in the remaining context window (but not in JSON as this uses
249
+ // too many tokens)
250
+ const refCountMap = new Map();
251
+ const refsAccumMap = new Map();
252
+ // Track the weight/score for each ref from the index lookup
253
+ const refWeightMap = new Map(); // semanticRefOrdinal -> max weight
254
+ termList.forEach((term) => {
255
+ const termOrdinals = semanticRefIndex.lookupTerm(term);
256
+ if (termOrdinals) {
257
+ const refs = semanticRefs.getMultiple(termOrdinals.map((ordinal) => ordinal.semanticRefOrdinal));
258
+ refCountMap.set(term, refs.length);
259
+ refsAccumMap.set(term, refs);
260
+ // Track the weight for each ref (use max if seen multiple times)
261
+ for (const ordinal of termOrdinals) {
262
+ const currentWeight = refWeightMap.get(ordinal.semanticRefOrdinal) ?? 0;
263
+ refWeightMap.set(ordinal.semanticRefOrdinal, Math.max(currentWeight, ordinal.score));
264
+ }
265
+ }
266
+ });
267
+ // let finalRefs: SemanticRef[] = [];
268
+ // const sortedCountTermPairs = [...refCountMap.entries()].sort((a, b) => b[1] - a[1]);
269
+ // sortedCountTermPairs.forEach((pair) => {
270
+ // finalRefs = finalRefs.concat(refsAccumMap.get(pair[0]) || []);
271
+ // });
272
+ // Note:
273
+ // Merging of duplicate entities needs to happen at some point in this process but
274
+ // unsure if it should happen at the beginning or after
275
+ // the ranking has been completed.
276
+ //
277
+ // to start we are going to merge after we pull all the refs for the search
278
+ // terms
279
+ // OR MAX WITH TOKEN LIMIT:
280
+ // 1. get all the refs for all of the search terms, merge duplicate entities
281
+ // and actions
282
+ // 2. find the refs that match all the terms, then some, then one
283
+ // rank the refs in that order
284
+ // 3. take the token limit and divide it by two, put the top n ranked
285
+ // refs into the answer context up to token limit/2 tokens
286
+ // 4. for the refs in the answer context, fetch the chunk they were pulled
287
+ // from
288
+ // 5. merge duplicate chunks
289
+ // 6. fill the remaning limit/2 tokens with as many chunks as possible to fit
290
+ // in the token limit
291
+ // console.log(finalRefs);
292
+ // if an entity doesn't have facets is it even worth
293
+ // considering? yes because of its text chunk reference
294
+ // Ref Ranking
295
+ // 1. For each ref, do a dfs traversal over the ref's values
296
+ // looking for other terms
297
+ // 2. score the ref based on how many of the found terms in the
298
+ // refs leaves are found in the query expression
299
+ // 3. assign the score to this ref and sort it in with the other
300
+ // refs
301
+ // 4. Factor in the index weight (from related term expansion) -
302
+ // related terms have lower weight than original terms
303
+ const refScoreMap = new Map();
304
+ refsAccumMap.forEach((semanticRefs, term) => {
305
+ semanticRefs.forEach((ref) => {
306
+ scoreRef([...termList], refScoreMap, ref);
307
+ // Apply index weight to the score (related terms have weight < 1.0)
308
+ const indexWeight = refWeightMap.get(ref.semanticRefOrdinal) ?? 1.0;
309
+ const currentScore = refScoreMap.get(ref) ?? 0;
310
+ refScoreMap.set(ref, currentScore * indexWeight);
311
+ });
312
+ console.log("TERM:", term, "COUNT:", semanticRefs.length);
313
+ });
314
+ // Apply temporal filtering and ranking
315
+ if (timestampIndex && effectiveTimeRange) {
316
+ // Get messages in the time range
317
+ const messagesInRange = timestampIndex.lookupRange({ start: effectiveTimeRange.start, end: effectiveTimeRange.end });
318
+ const messageOrdinalsInRange = new Set(messagesInRange.map(m => m.range.start.messageOrdinal));
319
+ console.log(`Temporal filter: ${messageOrdinalsInRange.size} messages in range ${effectiveTimeRange.start.toISOString()} to ${effectiveTimeRange.end.toISOString()}`);
320
+ // Filter or boost based on time range (check ref's source message)
321
+ for (const [ref, score] of refScoreMap) {
322
+ const messageOrdinal = ref.range.start.messageOrdinal;
323
+ if (messageOrdinalsInRange.has(messageOrdinal)) {
324
+ // Boost refs that match time range
325
+ refScoreMap.set(ref, score * 1.5);
326
+ }
327
+ else if (hasTimeReference) {
328
+ // If query explicitly mentions time, penalize refs outside range
329
+ refScoreMap.set(ref, score * 0.3);
330
+ }
331
+ }
332
+ }
333
+ else if (hasTimeReference && timestampIndex) {
334
+ // Query mentions time but no specific range parsed - add timestamp to context
335
+ // Boost refs that have timestamps so they can be used in the answer
336
+ for (const [ref, score] of refScoreMap) {
337
+ const messageOrdinal = ref.range.start.messageOrdinal;
338
+ const timestamp = timestampIndex.getMessageTimestamp(messageOrdinal);
339
+ if (timestamp) {
340
+ // Slightly boost refs with timestamps for "when" queries
341
+ refScoreMap.set(ref, score * 1.1);
342
+ }
343
+ }
344
+ }
345
+ const entities = [];
346
+ const topics = [];
347
+ let contextLength = computeContextLength(entities, topics);
348
+ const CHAR_LIMIT = 30_000;
349
+ const REF_LIMIT = CHAR_LIMIT / 2;
350
+ const MESSAGE_LIMIT = CHAR_LIMIT / 2;
351
+ // print our score map
352
+ const sortedRefs = [...refScoreMap.entries()].sort((a, b) => b[1] - a[1]);
353
+ const selectedRefs = [];
354
+ for (const entry of sortedRefs) {
355
+ printRef(entry[0]);
356
+ console.log(`${entry[0].knowledgeType}, ${entry[1]}`);
357
+ // Get timestamp for this ref if available (via its source message)
358
+ let refTimestamp;
359
+ if (timestampIndex) {
360
+ const messageOrdinal = entry[0].range.start.messageOrdinal;
361
+ refTimestamp = timestampIndex.getMessageTimestamp(messageOrdinal);
362
+ }
363
+ const newKnowledge = {
364
+ knowledge: entry[0].knowledge,
365
+ // Include time range if we have a timestamp
366
+ timeRange: refTimestamp ? { start: refTimestamp, end: refTimestamp } : undefined
367
+ };
368
+ if (entry[0].knowledgeType === "topic") {
369
+ topics.push(newKnowledge);
370
+ }
371
+ else {
372
+ entities.push(newKnowledge);
373
+ }
374
+ selectedRefs.push(entry[0]);
375
+ contextLength = computeContextLength(entities, topics);
376
+ if (contextLength >= REF_LIMIT) {
377
+ console.log("Ref token limit has been reached");
378
+ break;
379
+ }
380
+ }
381
+ // Message Scoring
382
+ // 1. take the top refs that have filled up the context
383
+ // 2. rank the messages in those ref's ranges in terms of
384
+ // hit count
385
+ // 3. put the messages with the highest hit count up to
386
+ // MESSAGE_LIMIT into the message side of the context
387
+ const referencedMergedMessages = new Map();
388
+ selectedRefs.forEach((ref) => {
389
+ const chunkOrdinal = ref.range.start.messageOrdinal;
390
+ if (!referencedMergedMessages.has(chunkOrdinal)) {
391
+ referencedMergedMessages.set(chunkOrdinal, 1);
392
+ return;
393
+ }
394
+ const previousValue = referencedMergedMessages.get(chunkOrdinal);
395
+ referencedMergedMessages.set(chunkOrdinal, previousValue + 1);
396
+ });
397
+ let messageLength = 0;
398
+ const selectedMessages = [];
399
+ const seenOrdinals = [];
400
+ selectedRefs.forEach((ref) => {
401
+ const chunkOrdinal = ref.range.start.messageOrdinal;
402
+ if (seenOrdinals.includes(chunkOrdinal)) {
403
+ // message is already in so we skip
404
+ return;
405
+ }
406
+ seenOrdinals.push(chunkOrdinal);
407
+ const message = messages.get(chunkOrdinal);
408
+ if (messageLength <= MESSAGE_LIMIT) {
409
+ selectedMessages.push({
410
+ messageText: message.textChunks,
411
+ timestamp: message.timestamp ? new Date(message.timestamp) : undefined
412
+ });
413
+ printRef(ref);
414
+ console.log(message.textChunks);
415
+ }
416
+ messageLength = computeMessageLength(selectedMessages);
417
+ });
418
+ // const sortedEntries = Array.from(referencedMergedMessages.entries()).sort((a, b) => b[1] - a[1]);
419
+ // sortedEntries.forEach(([ordinal, score]) => {
420
+ // const message = messages.get(ordinal);
421
+ // // todo this should be converted to a loop we can break out of
422
+ // // inefecient code
423
+ // if (messageLength <= MESSAGE_LIMIT) {
424
+ // selectedMessages.push({
425
+ // messageText: message.textChunks
426
+ // });
427
+ // }
428
+ // messageLength = computeMessageLength(selectedMessages);
429
+ // });
430
+ const compiledContext = {
431
+ entities,
432
+ topics,
433
+ messages: selectedMessages
434
+ };
435
+ return compiledContext;
436
+ }
437
+ function computeContextLength(entities, topics) {
438
+ return JSON.stringify({
439
+ entities,
440
+ topics
441
+ }).length;
442
+ }
443
+ function computeMessageLength(messsages) {
444
+ return JSON.stringify({
445
+ messsages
446
+ }).length;
447
+ }
448
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/knowpro/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { DateTimeRange } from "./dateTimeSchema.js";
2
+ export type FacetTerm = {
3
+ facetName: string;
4
+ facetValue: string;
5
+ };
6
+ export type EntityTerm = {
7
+ name: string;
8
+ isNamePronoun: boolean;
9
+ type?: string[];
10
+ facets?: FacetTerm[];
11
+ };
12
+ export type VerbsTerm = {
13
+ words: string[];
14
+ tense: "Past" | "Present" | "Future";
15
+ };
16
+ export type ActionTerm = {
17
+ actionVerbs?: VerbsTerm | undefined;
18
+ actorEntities: EntityTerm[] | "*";
19
+ targetEntities?: EntityTerm[];
20
+ additionalEntities?: EntityTerm[];
21
+ isInformational: boolean;
22
+ };
23
+ export type ScopeFilter = {
24
+ entitySearchTerms?: EntityTerm[] | undefined;
25
+ timeRange?: DateTimeRange | undefined;
26
+ };
27
+ export type SearchFilter = {
28
+ actionSearchTerm?: ActionTerm;
29
+ entitySearchTerms?: EntityTerm[];
30
+ searchTerms?: string[];
31
+ scopeSubQuery?: ScopeFilter | undefined;
32
+ };
33
+ export type SearchExpr = {
34
+ rewrittenQuery: string;
35
+ filters: SearchFilter[];
36
+ };
37
+ export type SearchQuery = {
38
+ searchExpressions: SearchExpr[];
39
+ };
40
+ //# sourceMappingURL=searchQuerySchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchQuerySchema.d.ts","sourceRoot":"","sources":["../../src/knowpro/searchQuerySchema.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG;IAEpB,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAMF,MAAM,MAAM,UAAU,GAAG;IAErB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IAIvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAGhB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACxB,CAAC;AAGF,MAAM,MAAM,SAAS,GAAG;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAErB,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAEpC,aAAa,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;IAGlC,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC;IAI9B,kBAAkB,CAAC,EAAE,UAAU,EAAE,CAAC;IAKlC,eAAe,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAEtB,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IAE7C,SAAS,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CACzC,CAAC;AAKF,MAAM,MAAM,YAAY,GAAG;IAEvB,gBAAgB,CAAC,EAAE,UAAU,CAAC;IAG9B,iBAAiB,CAAC,EAAE,UAAU,EAAE,CAAC;IAMjC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAGvB,aAAa,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,cAAc,EAAE,MAAM,CAAC;IAEvB,OAAO,EAAE,YAAY,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAGtB,iBAAiB,EAAE,UAAU,EAAE,CAAC;CACnC,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ export {};
4
+ //# sourceMappingURL=searchQuerySchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchQuerySchema.js","sourceRoot":"","sources":["../../src/knowpro/searchQuerySchema.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC"}
@@ -0,0 +1,33 @@
1
+ import type { PromptSection, Result, TypeChatLanguageModel, TypeChatJsonTranslator } from "typechat";
2
+ import type * as querySchema from "./searchQuerySchema.js";
3
+ import type { IConversation } from "./interfaces.js";
4
+ /**
5
+ * A TypeChat Translator that turns natural language into structured queries
6
+ * of type: {@link SearchQuery}
7
+ */
8
+ export interface SearchQueryTranslator {
9
+ translate(request: string, promptPreamble?: string | PromptSection[]): Promise<Result<querySchema.SearchQuery>>;
10
+ }
11
+ /**
12
+ * Create a query translator using
13
+ * @param {TypeChatLanguageModel} model
14
+ * @returns {SearchQueryTranslator}
15
+ */
16
+ export declare function createSearchQueryTranslator(model: TypeChatLanguageModel): SearchQueryTranslator;
17
+ /**
18
+ * Create a query translator using
19
+ * @param {TypeChatLanguageModel} model
20
+ * @param schemaFilePath Relative path to schema file
21
+ * @returns {SearchQueryTranslator}
22
+ */
23
+ export declare function createSearchQueryJsonTranslator<T extends querySchema.SearchQuery>(model: TypeChatLanguageModel, schemaFilePath: string): TypeChatJsonTranslator<T>;
24
+ /**
25
+ * Translate natural language query into a SearchQuery expression
26
+ * @param conversation
27
+ * @param queryTranslator
28
+ * @param text
29
+ * @param promptPreamble
30
+ * @returns
31
+ */
32
+ export declare function searchQueryFromLanguage(conversation: IConversation, queryTranslator: SearchQueryTranslator, text: string, promptPreamble?: PromptSection[]): Promise<Result<querySchema.SearchQuery>>;
33
+ //# sourceMappingURL=searchQueryTranslator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchQueryTranslator.d.ts","sourceRoot":"","sources":["../../src/knowpro/searchQueryTranslator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACR,aAAa,EACb,MAAM,EACN,qBAAqB,EACrB,sBAAsB,EAAC,MAAM,UAAU,CAAC;AAI5C,OAAO,KAAK,KAAK,WAAW,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC,SAAS,CACL,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,GAC1C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;CAC/C;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACvC,KAAK,EAAE,qBAAqB,GAC7B,qBAAqB,CAUvB;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC3C,CAAC,SAAS,WAAW,CAAC,WAAW,EAEjC,KAAK,EAAE,qBAAqB,EAC5B,cAAc,EAAE,MAAM,GACvB,sBAAsB,CAAC,CAAC,CAAC,CAU3B;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CACzC,YAAY,EAAE,aAAa,EAC3B,eAAe,EAAE,qBAAqB,EACtC,IAAI,EAAE,MAAM,EACZ,cAAc,CAAC,EAAE,aAAa,EAAE,GACjC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAQ1C"}
@@ -0,0 +1,47 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { createJsonTranslator } from "typechat";
4
+ import { createTypeScriptJsonValidator } from "typechat/ts";
5
+ import { loadSchema } from "./schema.js";
6
+ import { getTimeRangePromptSectionForConversation } from "./conversation.js";
7
+ /**
8
+ * Create a query translator using
9
+ * @param {TypeChatLanguageModel} model
10
+ * @returns {SearchQueryTranslator}
11
+ */
12
+ export function createSearchQueryTranslator(model) {
13
+ const translator = createSearchQueryJsonTranslator(model, "searchQuerySchema.ts");
14
+ return {
15
+ translate(request, promptPreamble) {
16
+ return translator.translate(request, promptPreamble);
17
+ },
18
+ };
19
+ }
20
+ /**
21
+ * Create a query translator using
22
+ * @param {TypeChatLanguageModel} model
23
+ * @param schemaFilePath Relative path to schema file
24
+ * @returns {SearchQueryTranslator}
25
+ */
26
+ export function createSearchQueryJsonTranslator(model, schemaFilePath) {
27
+ const typeName = "SearchQuery";
28
+ const searchActionSchema = loadSchema(["dateTimeSchema.ts", schemaFilePath], import.meta.url);
29
+ return createJsonTranslator(model, createTypeScriptJsonValidator(searchActionSchema, typeName));
30
+ }
31
+ /**
32
+ * Translate natural language query into a SearchQuery expression
33
+ * @param conversation
34
+ * @param queryTranslator
35
+ * @param text
36
+ * @param promptPreamble
37
+ * @returns
38
+ */
39
+ export async function searchQueryFromLanguage(conversation, queryTranslator, text, promptPreamble) {
40
+ const timeRange = getTimeRangePromptSectionForConversation(conversation);
41
+ const queryContext = promptPreamble && promptPreamble.length > 0
42
+ ? [...promptPreamble, ...timeRange]
43
+ : timeRange;
44
+ const result = await queryTranslator.translate(text, queryContext);
45
+ return result;
46
+ }
47
+ //# sourceMappingURL=searchQueryTranslator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchQueryTranslator.js","sourceRoot":"","sources":["../../src/knowpro/searchQueryTranslator.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAOlC,OAAO,EACH,oBAAoB,EACvB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,wCAAwC,EAAE,MAAM,mBAAmB,CAAC;AAa7E;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACvC,KAA4B;IAE5B,MAAM,UAAU,GAAG,+BAA+B,CAC9C,KAAK,EACL,sBAAsB,CACzB,CAAC;IACF,OAAO;QACH,SAAS,CAAC,OAAO,EAAE,cAAc;YAC7B,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACzD,CAAC;KACJ,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAG3C,KAA4B,EAC5B,cAAsB;IAEtB,MAAM,QAAQ,GAAG,aAAa,CAAC;IAC/B,MAAM,kBAAkB,GAAG,UAAU,CACjC,CAAC,mBAAmB,EAAE,cAAc,CAAC,EACrC,MAAM,CAAC,IAAI,CAAC,GAAG,CAClB,CAAC;IACF,OAAO,oBAAoB,CACvB,KAAK,EACL,6BAA6B,CAAI,kBAAkB,EAAE,QAAQ,CAAC,CACjE,CAAC;AACN,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CACzC,YAA2B,EAC3B,eAAsC,EACtC,IAAY,EACZ,cAAgC;IAEhC,MAAM,SAAS,GAAG,wCAAwC,CAAC,YAAY,CAAC,CAAC;IACzE,MAAM,YAAY,GACd,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QACvC,CAAC,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,SAAS,CAAC;QACnC,CAAC,CAAC,SAAS,CAAC;IACpB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ISemanticRefCollection } from "./interfaces.js";
2
+ import type { KnowledgeResponse } from "./knowledgeSchema.js";
3
+ export declare function populateSemanticRef(semanticRefs: ISemanticRefCollection, knowledgeResponse: KnowledgeResponse, baseSemanticRefOrdinal: number, messageOrdinal: number): ISemanticRefCollection;
4
+ //# sourceMappingURL=semanticRef.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semanticRef.d.ts","sourceRoot":"","sources":["../../src/knowpro/semanticRef.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAe,MAAM,iBAAiB,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,wBAAgB,mBAAmB,CAC/B,YAAY,EAAE,sBAAsB,EACpC,iBAAiB,EAAE,iBAAiB,EACpC,sBAAsB,EAAE,MAAM,EAC9B,cAAc,EAAE,MAAM,GACvB,sBAAsB,CAgExB"}