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.
- package/README.md +118 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +183 -0
- package/dist/index.js.map +1 -0
- package/dist/knowpro/answerContextSchema.d.ts +20 -0
- package/dist/knowpro/answerContextSchema.d.ts.map +1 -0
- package/dist/knowpro/answerContextSchema.js +4 -0
- package/dist/knowpro/answerContextSchema.js.map +1 -0
- package/dist/knowpro/answerResponseSchema.d.ts +7 -0
- package/dist/knowpro/answerResponseSchema.d.ts.map +1 -0
- package/dist/knowpro/answerResponseSchema.js +4 -0
- package/dist/knowpro/answerResponseSchema.js.map +1 -0
- package/dist/knowpro/answerTranslator.d.ts +5 -0
- package/dist/knowpro/answerTranslator.d.ts.map +1 -0
- package/dist/knowpro/answerTranslator.js +10 -0
- package/dist/knowpro/answerTranslator.js.map +1 -0
- package/dist/knowpro/collections.d.ts +14 -0
- package/dist/knowpro/collections.d.ts.map +1 -0
- package/dist/knowpro/collections.js +52 -0
- package/dist/knowpro/collections.js.map +1 -0
- package/dist/knowpro/conversation.d.ts +63 -0
- package/dist/knowpro/conversation.d.ts.map +1 -0
- package/dist/knowpro/conversation.js +247 -0
- package/dist/knowpro/conversation.js.map +1 -0
- package/dist/knowpro/dateTimeSchema.d.ts +19 -0
- package/dist/knowpro/dateTimeSchema.d.ts.map +1 -0
- package/dist/knowpro/dateTimeSchema.js +4 -0
- package/dist/knowpro/dateTimeSchema.js.map +1 -0
- package/dist/knowpro/entities.d.ts +9 -0
- package/dist/knowpro/entities.d.ts.map +1 -0
- package/dist/knowpro/entities.js +63 -0
- package/dist/knowpro/entities.js.map +1 -0
- package/dist/knowpro/interfaces.d.ts +637 -0
- package/dist/knowpro/interfaces.d.ts.map +1 -0
- package/dist/knowpro/interfaces.js +4 -0
- package/dist/knowpro/interfaces.js.map +1 -0
- package/dist/knowpro/knowledge.d.ts +19 -0
- package/dist/knowpro/knowledge.d.ts.map +1 -0
- package/dist/knowpro/knowledge.js +97 -0
- package/dist/knowpro/knowledge.js.map +1 -0
- package/dist/knowpro/knowledgeSchema.d.ts +39 -0
- package/dist/knowpro/knowledgeSchema.d.ts.map +1 -0
- package/dist/knowpro/knowledgeSchema.js +2 -0
- package/dist/knowpro/knowledgeSchema.js.map +1 -0
- package/dist/knowpro/llmProvider.d.ts +17 -0
- package/dist/knowpro/llmProvider.d.ts.map +1 -0
- package/dist/knowpro/llmProvider.js +105 -0
- package/dist/knowpro/llmProvider.js.map +1 -0
- package/dist/knowpro/relatedTermsSchema.d.ts +24 -0
- package/dist/knowpro/relatedTermsSchema.d.ts.map +1 -0
- package/dist/knowpro/relatedTermsSchema.js +6 -0
- package/dist/knowpro/relatedTermsSchema.js.map +1 -0
- package/dist/knowpro/schema.d.ts +24 -0
- package/dist/knowpro/schema.d.ts.map +1 -0
- package/dist/knowpro/schema.js +55 -0
- package/dist/knowpro/schema.js.map +1 -0
- package/dist/knowpro/search.d.ts +8 -0
- package/dist/knowpro/search.d.ts.map +1 -0
- package/dist/knowpro/search.js +448 -0
- package/dist/knowpro/search.js.map +1 -0
- package/dist/knowpro/searchQuerySchema.d.ts +40 -0
- package/dist/knowpro/searchQuerySchema.d.ts.map +1 -0
- package/dist/knowpro/searchQuerySchema.js +4 -0
- package/dist/knowpro/searchQuerySchema.js.map +1 -0
- package/dist/knowpro/searchQueryTranslator.d.ts +33 -0
- package/dist/knowpro/searchQueryTranslator.d.ts.map +1 -0
- package/dist/knowpro/searchQueryTranslator.js +47 -0
- package/dist/knowpro/searchQueryTranslator.js.map +1 -0
- package/dist/knowpro/semanticRef.d.ts +4 -0
- package/dist/knowpro/semanticRef.d.ts.map +1 -0
- package/dist/knowpro/semanticRef.js +62 -0
- package/dist/knowpro/semanticRef.js.map +1 -0
- package/dist/knowpro/semanticRefIndex.d.ts +48 -0
- package/dist/knowpro/semanticRefIndex.d.ts.map +1 -0
- package/dist/knowpro/semanticRefIndex.js +388 -0
- package/dist/knowpro/semanticRefIndex.js.map +1 -0
- package/dist/knowpro/storageProvider.d.ts +7 -0
- package/dist/knowpro/storageProvider.d.ts.map +1 -0
- package/dist/knowpro/storageProvider.js +61 -0
- package/dist/knowpro/storageProvider.js.map +1 -0
- package/dist/knowpro/timestampIndex.d.ts +43 -0
- package/dist/knowpro/timestampIndex.d.ts.map +1 -0
- package/dist/knowpro/timestampIndex.js +324 -0
- package/dist/knowpro/timestampIndex.js.map +1 -0
- package/dist/rag/chunking.d.ts +6 -0
- package/dist/rag/chunking.d.ts.map +1 -0
- package/dist/rag/chunking.js +83 -0
- package/dist/rag/chunking.js.map +1 -0
- package/dist/rag/embeddingProvider.d.ts +34 -0
- package/dist/rag/embeddingProvider.d.ts.map +1 -0
- package/dist/rag/embeddingProvider.js +95 -0
- package/dist/rag/embeddingProvider.js.map +1 -0
- package/dist/rag/index.d.ts +8 -0
- package/dist/rag/index.d.ts.map +1 -0
- package/dist/rag/index.js +7 -0
- package/dist/rag/index.js.map +1 -0
- package/dist/rag/knowproAdapter.d.ts +44 -0
- package/dist/rag/knowproAdapter.d.ts.map +1 -0
- package/dist/rag/knowproAdapter.js +66 -0
- package/dist/rag/knowproAdapter.js.map +1 -0
- package/dist/rag/ragIndex.d.ts +101 -0
- package/dist/rag/ragIndex.d.ts.map +1 -0
- package/dist/rag/ragIndex.js +305 -0
- package/dist/rag/ragIndex.js.map +1 -0
- package/dist/rag/similarity.d.ts +15 -0
- package/dist/rag/similarity.d.ts.map +1 -0
- package/dist/rag/similarity.js +47 -0
- package/dist/rag/similarity.js.map +1 -0
- package/dist/rag/types.d.ts +61 -0
- package/dist/rag/types.d.ts.map +1 -0
- package/dist/rag/types.js +2 -0
- package/dist/rag/types.js.map +1 -0
- package/dist/rag/vectorIndex.d.ts +102 -0
- package/dist/rag/vectorIndex.d.ts.map +1 -0
- package/dist/rag/vectorIndex.js +236 -0
- package/dist/rag/vectorIndex.js.map +1 -0
- package/dist/utils/async.d.ts +25 -0
- package/dist/utils/async.d.ts.map +1 -0
- package/dist/utils/async.js +55 -0
- package/dist/utils/async.js.map +1 -0
- package/dist/utils/string.d.ts +3 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/string.js +15 -0
- package/dist/utils/string.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ITimestampToTextRangeIndex, MessageOrdinal } from "./interfaces.js";
|
|
2
|
+
/**
|
|
3
|
+
* Creates an in-memory implementation of ITimestampToTextRangeIndex
|
|
4
|
+
*/
|
|
5
|
+
export declare function createTimestampIndex(): ITimestampToTextRangeIndex;
|
|
6
|
+
/**
|
|
7
|
+
* Extended timestamp index with additional query methods for search ranking.
|
|
8
|
+
* This extends the base ITimestampToTextRangeIndex with semantic-ref aware methods.
|
|
9
|
+
*/
|
|
10
|
+
export interface TimestampIndexExtended extends ITimestampToTextRangeIndex {
|
|
11
|
+
/** Get timestamp for a specific message */
|
|
12
|
+
getMessageTimestamp(messageOrdinal: MessageOrdinal): Date | undefined;
|
|
13
|
+
/** Get all messages on a specific day */
|
|
14
|
+
getMessagesOnDay(date: Date): MessageOrdinal[];
|
|
15
|
+
/** Get all messages before a date */
|
|
16
|
+
getMessagesBefore(date: Date): MessageOrdinal[];
|
|
17
|
+
/** Get all messages after a date */
|
|
18
|
+
getMessagesAfter(date: Date): MessageOrdinal[];
|
|
19
|
+
/** Get all timestamps sorted chronologically */
|
|
20
|
+
getAllSorted(): Array<{
|
|
21
|
+
messageOrdinal: MessageOrdinal;
|
|
22
|
+
timestamp: Date;
|
|
23
|
+
}>;
|
|
24
|
+
/** Get the date range of all indexed messages */
|
|
25
|
+
getDateRange(): {
|
|
26
|
+
earliest: Date;
|
|
27
|
+
latest: Date;
|
|
28
|
+
} | undefined;
|
|
29
|
+
/** Get count of indexed timestamps */
|
|
30
|
+
size(): number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Creates an extended timestamp index with additional query methods
|
|
34
|
+
*/
|
|
35
|
+
export declare function createTimestampIndexExtended(): TimestampIndexExtended;
|
|
36
|
+
/** Parse common temporal expressions to date ranges */
|
|
37
|
+
export declare function parseTemporalExpression(expression: string, referenceDate?: Date): {
|
|
38
|
+
start: Date;
|
|
39
|
+
end: Date;
|
|
40
|
+
} | undefined;
|
|
41
|
+
/** Check if a query contains temporal references */
|
|
42
|
+
export declare function hasTemporalReference(query: string): boolean;
|
|
43
|
+
//# sourceMappingURL=timestampIndex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestampIndex.d.ts","sourceRoot":"","sources":["../../src/knowpro/timestampIndex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAER,0BAA0B,EAE1B,cAAc,EAEjB,MAAM,iBAAiB,CAAC;AAqBzB;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,0BAA0B,CAwFjE;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACtE,2CAA2C;IAC3C,mBAAmB,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;IAEtE,yCAAyC;IACzC,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc,EAAE,CAAC;IAE/C,qCAAqC;IACrC,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc,EAAE,CAAC;IAEhD,oCAAoC;IACpC,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc,EAAE,CAAC;IAE/C,gDAAgD;IAChD,YAAY,IAAI,KAAK,CAAC;QAAE,cAAc,EAAE,cAAc,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAE3E,iDAAiD;IACjD,YAAY,IAAI;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC;IAE7D,sCAAsC;IACtC,IAAI,IAAI,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,sBAAsB,CAyJrE;AAED,uDAAuD;AACvD,wBAAgB,uBAAuB,CACnC,UAAU,EAAE,MAAM,EAClB,aAAa,GAAE,IAAiB,GACjC;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GAAG,SAAS,CA4ExC;AAED,oDAAoD;AACpD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAwB3D"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
/** Helper to get day key (YYYY-MM-DD) from a date */
|
|
2
|
+
function getDayKey(date) {
|
|
3
|
+
return date.toISOString().split('T')[0];
|
|
4
|
+
}
|
|
5
|
+
/** Helper to get start of day */
|
|
6
|
+
function startOfDay(date) {
|
|
7
|
+
const d = new Date(date);
|
|
8
|
+
d.setHours(0, 0, 0, 0);
|
|
9
|
+
return d;
|
|
10
|
+
}
|
|
11
|
+
/** Helper to get end of day */
|
|
12
|
+
function endOfDay(date) {
|
|
13
|
+
const d = new Date(date);
|
|
14
|
+
d.setHours(23, 59, 59, 999);
|
|
15
|
+
return d;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Creates an in-memory implementation of ITimestampToTextRangeIndex
|
|
19
|
+
*/
|
|
20
|
+
export function createTimestampIndex() {
|
|
21
|
+
// Message ordinal -> timestamp string
|
|
22
|
+
const messageToTimestamp = new Map();
|
|
23
|
+
// Day-level index: "YYYY-MM-DD" -> message ordinals
|
|
24
|
+
const dayIndex = new Map();
|
|
25
|
+
// Sorted array for range queries (maintained on demand)
|
|
26
|
+
let sortedEntries = null;
|
|
27
|
+
function invalidateSortedCache() {
|
|
28
|
+
sortedEntries = null;
|
|
29
|
+
}
|
|
30
|
+
function addTimestamp(messageOrdinal, timestamp) {
|
|
31
|
+
try {
|
|
32
|
+
const date = new Date(timestamp);
|
|
33
|
+
if (isNaN(date.getTime())) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
messageToTimestamp.set(messageOrdinal, timestamp);
|
|
37
|
+
const dayKey = getDayKey(date);
|
|
38
|
+
let dayMessages = dayIndex.get(dayKey);
|
|
39
|
+
if (!dayMessages) {
|
|
40
|
+
dayMessages = new Set();
|
|
41
|
+
dayIndex.set(dayKey, dayMessages);
|
|
42
|
+
}
|
|
43
|
+
dayMessages.add(messageOrdinal);
|
|
44
|
+
invalidateSortedCache();
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function addTimestamps(messageTimestamps) {
|
|
52
|
+
let numberCompleted = 0;
|
|
53
|
+
for (const [messageOrdinal, timestamp] of messageTimestamps) {
|
|
54
|
+
if (addTimestamp(messageOrdinal, timestamp)) {
|
|
55
|
+
numberCompleted++;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return { numberCompleted };
|
|
59
|
+
}
|
|
60
|
+
function ensureSorted() {
|
|
61
|
+
if (sortedEntries === null) {
|
|
62
|
+
sortedEntries = [];
|
|
63
|
+
for (const [messageOrdinal, timestamp] of messageToTimestamp) {
|
|
64
|
+
sortedEntries.push({ messageOrdinal, timestamp: new Date(timestamp) });
|
|
65
|
+
}
|
|
66
|
+
sortedEntries.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
|
|
67
|
+
}
|
|
68
|
+
return sortedEntries;
|
|
69
|
+
}
|
|
70
|
+
function lookupRange(dateRange) {
|
|
71
|
+
const sorted = ensureSorted();
|
|
72
|
+
const startTime = dateRange.start.getTime();
|
|
73
|
+
const endTime = dateRange.end ? dateRange.end.getTime() : Infinity;
|
|
74
|
+
const results = [];
|
|
75
|
+
for (const entry of sorted) {
|
|
76
|
+
const time = entry.timestamp.getTime();
|
|
77
|
+
if (time >= startTime && time <= endTime) {
|
|
78
|
+
results.push({
|
|
79
|
+
timestamp: messageToTimestamp.get(entry.messageOrdinal),
|
|
80
|
+
range: {
|
|
81
|
+
start: { messageOrdinal: entry.messageOrdinal }
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
else if (time > endTime) {
|
|
86
|
+
break; // Past the end, no need to continue
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return results;
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
addTimestamp,
|
|
93
|
+
addTimestamps,
|
|
94
|
+
lookupRange
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Creates an extended timestamp index with additional query methods
|
|
99
|
+
*/
|
|
100
|
+
export function createTimestampIndexExtended() {
|
|
101
|
+
// Message ordinal -> timestamp string
|
|
102
|
+
const messageToTimestamp = new Map();
|
|
103
|
+
// Day-level index: "YYYY-MM-DD" -> message ordinals
|
|
104
|
+
const dayIndex = new Map();
|
|
105
|
+
// Sorted array for range queries (maintained on demand)
|
|
106
|
+
let sortedEntries = null;
|
|
107
|
+
function invalidateSortedCache() {
|
|
108
|
+
sortedEntries = null;
|
|
109
|
+
}
|
|
110
|
+
function addTimestamp(messageOrdinal, timestamp) {
|
|
111
|
+
try {
|
|
112
|
+
const date = new Date(timestamp);
|
|
113
|
+
if (isNaN(date.getTime())) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
messageToTimestamp.set(messageOrdinal, timestamp);
|
|
117
|
+
const dayKey = getDayKey(date);
|
|
118
|
+
let dayMessages = dayIndex.get(dayKey);
|
|
119
|
+
if (!dayMessages) {
|
|
120
|
+
dayMessages = new Set();
|
|
121
|
+
dayIndex.set(dayKey, dayMessages);
|
|
122
|
+
}
|
|
123
|
+
dayMessages.add(messageOrdinal);
|
|
124
|
+
invalidateSortedCache();
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function addTimestamps(messageTimestamps) {
|
|
132
|
+
let numberCompleted = 0;
|
|
133
|
+
for (const [messageOrdinal, timestamp] of messageTimestamps) {
|
|
134
|
+
if (addTimestamp(messageOrdinal, timestamp)) {
|
|
135
|
+
numberCompleted++;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return { numberCompleted };
|
|
139
|
+
}
|
|
140
|
+
function ensureSorted() {
|
|
141
|
+
if (sortedEntries === null) {
|
|
142
|
+
sortedEntries = [];
|
|
143
|
+
for (const [messageOrdinal, timestamp] of messageToTimestamp) {
|
|
144
|
+
sortedEntries.push({ messageOrdinal, timestamp: new Date(timestamp) });
|
|
145
|
+
}
|
|
146
|
+
sortedEntries.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
|
|
147
|
+
}
|
|
148
|
+
return sortedEntries;
|
|
149
|
+
}
|
|
150
|
+
function lookupRange(dateRange) {
|
|
151
|
+
const sorted = ensureSorted();
|
|
152
|
+
const startTime = dateRange.start.getTime();
|
|
153
|
+
const endTime = dateRange.end ? dateRange.end.getTime() : Infinity;
|
|
154
|
+
const results = [];
|
|
155
|
+
for (const entry of sorted) {
|
|
156
|
+
const time = entry.timestamp.getTime();
|
|
157
|
+
if (time >= startTime && time <= endTime) {
|
|
158
|
+
results.push({
|
|
159
|
+
timestamp: messageToTimestamp.get(entry.messageOrdinal),
|
|
160
|
+
range: {
|
|
161
|
+
start: { messageOrdinal: entry.messageOrdinal }
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
else if (time > endTime) {
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return results;
|
|
170
|
+
}
|
|
171
|
+
function getMessageTimestamp(messageOrdinal) {
|
|
172
|
+
const ts = messageToTimestamp.get(messageOrdinal);
|
|
173
|
+
return ts ? new Date(ts) : undefined;
|
|
174
|
+
}
|
|
175
|
+
function getMessagesOnDay(date) {
|
|
176
|
+
const dayKey = getDayKey(date);
|
|
177
|
+
const messages = dayIndex.get(dayKey);
|
|
178
|
+
return messages ? [...messages] : [];
|
|
179
|
+
}
|
|
180
|
+
function getMessagesBefore(date) {
|
|
181
|
+
const sorted = ensureSorted();
|
|
182
|
+
const targetTime = date.getTime();
|
|
183
|
+
const results = [];
|
|
184
|
+
for (const entry of sorted) {
|
|
185
|
+
if (entry.timestamp.getTime() < targetTime) {
|
|
186
|
+
results.push(entry.messageOrdinal);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return results;
|
|
193
|
+
}
|
|
194
|
+
function getMessagesAfter(date) {
|
|
195
|
+
const sorted = ensureSorted();
|
|
196
|
+
const targetTime = date.getTime();
|
|
197
|
+
const results = [];
|
|
198
|
+
for (const entry of sorted) {
|
|
199
|
+
if (entry.timestamp.getTime() > targetTime) {
|
|
200
|
+
results.push(entry.messageOrdinal);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return results;
|
|
204
|
+
}
|
|
205
|
+
function getAllSorted() {
|
|
206
|
+
return [...ensureSorted()];
|
|
207
|
+
}
|
|
208
|
+
function getDateRange() {
|
|
209
|
+
const sorted = ensureSorted();
|
|
210
|
+
if (sorted.length === 0) {
|
|
211
|
+
return undefined;
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
earliest: sorted[0].timestamp,
|
|
215
|
+
latest: sorted[sorted.length - 1].timestamp
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function size() {
|
|
219
|
+
return messageToTimestamp.size;
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
addTimestamp,
|
|
223
|
+
addTimestamps,
|
|
224
|
+
lookupRange,
|
|
225
|
+
getMessageTimestamp,
|
|
226
|
+
getMessagesOnDay,
|
|
227
|
+
getMessagesBefore,
|
|
228
|
+
getMessagesAfter,
|
|
229
|
+
getAllSorted,
|
|
230
|
+
getDateRange,
|
|
231
|
+
size
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
/** Parse common temporal expressions to date ranges */
|
|
235
|
+
export function parseTemporalExpression(expression, referenceDate = new Date()) {
|
|
236
|
+
const lower = expression.toLowerCase().trim();
|
|
237
|
+
const ref = new Date(referenceDate);
|
|
238
|
+
// Today
|
|
239
|
+
if (lower === 'today') {
|
|
240
|
+
return { start: startOfDay(ref), end: endOfDay(ref) };
|
|
241
|
+
}
|
|
242
|
+
// Yesterday
|
|
243
|
+
if (lower === 'yesterday') {
|
|
244
|
+
const yesterday = new Date(ref);
|
|
245
|
+
yesterday.setDate(yesterday.getDate() - 1);
|
|
246
|
+
return { start: startOfDay(yesterday), end: endOfDay(yesterday) };
|
|
247
|
+
}
|
|
248
|
+
// Last week
|
|
249
|
+
if (lower === 'last week') {
|
|
250
|
+
const end = new Date(ref);
|
|
251
|
+
const start = new Date(ref);
|
|
252
|
+
start.setDate(start.getDate() - 7);
|
|
253
|
+
return { start: startOfDay(start), end: endOfDay(end) };
|
|
254
|
+
}
|
|
255
|
+
// Last month
|
|
256
|
+
if (lower === 'last month') {
|
|
257
|
+
const end = new Date(ref);
|
|
258
|
+
const start = new Date(ref);
|
|
259
|
+
start.setMonth(start.getMonth() - 1);
|
|
260
|
+
return { start: startOfDay(start), end: endOfDay(end) };
|
|
261
|
+
}
|
|
262
|
+
// Last N days
|
|
263
|
+
const lastNDaysMatch = lower.match(/last (\d+) days?/);
|
|
264
|
+
if (lastNDaysMatch) {
|
|
265
|
+
const days = parseInt(lastNDaysMatch[1]);
|
|
266
|
+
const end = new Date(ref);
|
|
267
|
+
const start = new Date(ref);
|
|
268
|
+
start.setDate(start.getDate() - days);
|
|
269
|
+
return { start: startOfDay(start), end: endOfDay(end) };
|
|
270
|
+
}
|
|
271
|
+
// This week (start of week to now)
|
|
272
|
+
if (lower === 'this week') {
|
|
273
|
+
const start = new Date(ref);
|
|
274
|
+
const dayOfWeek = start.getDay();
|
|
275
|
+
start.setDate(start.getDate() - dayOfWeek); // Go to Sunday
|
|
276
|
+
return { start: startOfDay(start), end: endOfDay(ref) };
|
|
277
|
+
}
|
|
278
|
+
// This month
|
|
279
|
+
if (lower === 'this month') {
|
|
280
|
+
const start = new Date(ref.getFullYear(), ref.getMonth(), 1);
|
|
281
|
+
return { start: startOfDay(start), end: endOfDay(ref) };
|
|
282
|
+
}
|
|
283
|
+
// Month names (e.g., "in January", "January 2024")
|
|
284
|
+
const months = ['january', 'february', 'march', 'april', 'may', 'june',
|
|
285
|
+
'july', 'august', 'september', 'october', 'november', 'december'];
|
|
286
|
+
for (let i = 0; i < months.length; i++) {
|
|
287
|
+
if (lower.includes(months[i])) {
|
|
288
|
+
const yearMatch = lower.match(/\d{4}/);
|
|
289
|
+
const year = yearMatch ? parseInt(yearMatch[0]) : ref.getFullYear();
|
|
290
|
+
const start = new Date(year, i, 1);
|
|
291
|
+
const end = new Date(year, i + 1, 0); // Last day of month
|
|
292
|
+
return { start: startOfDay(start), end: endOfDay(end) };
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// Specific date formats (try to parse)
|
|
296
|
+
const dateAttempt = new Date(expression);
|
|
297
|
+
if (!isNaN(dateAttempt.getTime())) {
|
|
298
|
+
return { start: startOfDay(dateAttempt), end: endOfDay(dateAttempt) };
|
|
299
|
+
}
|
|
300
|
+
return undefined;
|
|
301
|
+
}
|
|
302
|
+
/** Check if a query contains temporal references */
|
|
303
|
+
export function hasTemporalReference(query) {
|
|
304
|
+
const lower = query.toLowerCase();
|
|
305
|
+
const temporalKeywords = [
|
|
306
|
+
'when', 'today', 'yesterday', 'last week', 'last month', 'this week',
|
|
307
|
+
'this month', 'last year', 'this year', 'ago', 'before', 'after',
|
|
308
|
+
'january', 'february', 'march', 'april', 'may', 'june',
|
|
309
|
+
'july', 'august', 'september', 'october', 'november', 'december',
|
|
310
|
+
'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday',
|
|
311
|
+
'morning', 'afternoon', 'evening', 'night',
|
|
312
|
+
'recently', 'earlier', 'later', 'during'
|
|
313
|
+
];
|
|
314
|
+
// Check for year patterns (4 digits)
|
|
315
|
+
if (/\b(19|20)\d{2}\b/.test(lower)) {
|
|
316
|
+
return true;
|
|
317
|
+
}
|
|
318
|
+
// Check for date patterns
|
|
319
|
+
if (/\b\d{1,2}\/\d{1,2}(\/\d{2,4})?\b/.test(lower)) {
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
322
|
+
return temporalKeywords.some(keyword => lower.includes(keyword));
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=timestampIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestampIndex.js","sourceRoot":"","sources":["../../src/knowpro/timestampIndex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunking.d.ts","sourceRoot":"","sources":["../../src/rag/chunking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5D;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc,EACtB,QAAQ,GAAE,MAAgB,GACzB,SAAS,EAAE,CAmEb"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Split text into chunks based on configuration
|
|
3
|
+
*/
|
|
4
|
+
export function chunkText(text, config, idPrefix = 'chunk') {
|
|
5
|
+
const { maxChunkSize, overlap = 0, splitOnSentences = true } = config;
|
|
6
|
+
if (text.length === 0) {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
if (text.length <= maxChunkSize) {
|
|
10
|
+
return [{
|
|
11
|
+
id: `${idPrefix}-0`,
|
|
12
|
+
text
|
|
13
|
+
}];
|
|
14
|
+
}
|
|
15
|
+
const chunks = [];
|
|
16
|
+
if (splitOnSentences) {
|
|
17
|
+
// Split on sentence boundaries (., !, ?)
|
|
18
|
+
const sentences = text.match(/[^.!?]+[.!?]+/g) || [text];
|
|
19
|
+
let currentChunk = '';
|
|
20
|
+
let chunkIndex = 0;
|
|
21
|
+
for (const sentence of sentences) {
|
|
22
|
+
if (currentChunk.length + sentence.length <= maxChunkSize) {
|
|
23
|
+
currentChunk += sentence;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
if (currentChunk) {
|
|
27
|
+
chunks.push({
|
|
28
|
+
id: `${idPrefix}-${chunkIndex++}`,
|
|
29
|
+
text: currentChunk.trim()
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
// If single sentence is too large, split it
|
|
33
|
+
if (sentence.length > maxChunkSize) {
|
|
34
|
+
const parts = splitLongText(sentence, maxChunkSize, overlap);
|
|
35
|
+
for (const part of parts) {
|
|
36
|
+
chunks.push({
|
|
37
|
+
id: `${idPrefix}-${chunkIndex++}`,
|
|
38
|
+
text: part.trim()
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
currentChunk = '';
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
currentChunk = sentence;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (currentChunk) {
|
|
49
|
+
chunks.push({
|
|
50
|
+
id: `${idPrefix}-${chunkIndex}`,
|
|
51
|
+
text: currentChunk.trim()
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Simple character-based splitting with overlap
|
|
57
|
+
const parts = splitLongText(text, maxChunkSize, overlap);
|
|
58
|
+
for (let i = 0; i < parts.length; i++) {
|
|
59
|
+
chunks.push({
|
|
60
|
+
id: `${idPrefix}-${i}`,
|
|
61
|
+
text: parts[i].trim()
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return chunks.filter(chunk => chunk.text.length > 0);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Split long text into fixed-size chunks with overlap
|
|
69
|
+
*/
|
|
70
|
+
function splitLongText(text, maxSize, overlap) {
|
|
71
|
+
const chunks = [];
|
|
72
|
+
let start = 0;
|
|
73
|
+
while (start < text.length) {
|
|
74
|
+
const end = Math.min(start + maxSize, text.length);
|
|
75
|
+
chunks.push(text.substring(start, end));
|
|
76
|
+
if (end === text.length) {
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
start = end - overlap;
|
|
80
|
+
}
|
|
81
|
+
return chunks;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=chunking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunking.js","sourceRoot":"","sources":["../../src/rag/chunking.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,MAAsB,EACtB,WAAmB,OAAO;IAE1B,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,CAAC,EAAE,gBAAgB,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAEtE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC;QAChC,OAAO,CAAC;gBACN,EAAE,EAAE,GAAG,QAAQ,IAAI;gBACnB,IAAI;aACL,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAgB,EAAE,CAAC;IAE/B,IAAI,gBAAgB,EAAE,CAAC;QACrB,yCAAyC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,YAAY,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC;gBAC1D,YAAY,IAAI,QAAQ,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,CAAC,IAAI,CAAC;wBACV,EAAE,EAAE,GAAG,QAAQ,IAAI,UAAU,EAAE,EAAE;wBACjC,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE;qBAC1B,CAAC,CAAC;gBACL,CAAC;gBAED,4CAA4C;gBAC5C,IAAI,QAAQ,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;oBACnC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;oBAC7D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,MAAM,CAAC,IAAI,CAAC;4BACV,EAAE,EAAE,GAAG,QAAQ,IAAI,UAAU,EAAE,EAAE;4BACjC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;yBAClB,CAAC,CAAC;oBACL,CAAC;oBACD,YAAY,GAAG,EAAE,CAAC;gBACpB,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG,QAAQ,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,GAAG,QAAQ,IAAI,UAAU,EAAE;gBAC/B,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,gDAAgD;QAChD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,GAAG,QAAQ,IAAI,CAAC,EAAE;gBACtB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,IAAY,EAAE,OAAe,EAAE,OAAe;IACnE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAExC,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM;QACR,CAAC;QAED,KAAK,GAAG,GAAG,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Embedding } from './types.js';
|
|
2
|
+
export type EmbeddingProviderType = 'openai' | 'voyage';
|
|
3
|
+
export interface EmbeddingProviderConfig {
|
|
4
|
+
provider: EmbeddingProviderType;
|
|
5
|
+
apiKey: string;
|
|
6
|
+
model?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface EmbeddingProvider {
|
|
9
|
+
readonly name: EmbeddingProviderType;
|
|
10
|
+
readonly model: string;
|
|
11
|
+
readonly dimensions: number;
|
|
12
|
+
/**
|
|
13
|
+
* Generate embeddings for a batch of texts
|
|
14
|
+
*/
|
|
15
|
+
generateEmbeddings(texts: string[]): Promise<Embedding[]>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* OpenAI embedding provider
|
|
19
|
+
*/
|
|
20
|
+
export declare function createOpenAIEmbeddingProvider(apiKey: string, model?: string): EmbeddingProvider;
|
|
21
|
+
/**
|
|
22
|
+
* Voyage AI embedding provider (recommended by Anthropic)
|
|
23
|
+
*/
|
|
24
|
+
export declare function createVoyageEmbeddingProvider(apiKey: string, model?: string): EmbeddingProvider;
|
|
25
|
+
export declare function createEmbeddingProvider(config: EmbeddingProviderConfig): EmbeddingProvider;
|
|
26
|
+
/**
|
|
27
|
+
* Create embedding provider from environment variables
|
|
28
|
+
* Uses EMBEDDING_PROVIDER env var (defaults to 'openai')
|
|
29
|
+
* API keys:
|
|
30
|
+
* - OpenAI: OPENAI_API_KEY
|
|
31
|
+
* - Voyage: VOYAGE_API_KEY
|
|
32
|
+
*/
|
|
33
|
+
export declare function createEmbeddingProviderFromEnv(): EmbeddingProvider;
|
|
34
|
+
//# sourceMappingURL=embeddingProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddingProvider.d.ts","sourceRoot":"","sources":["../../src/rag/embeddingProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;CAC3D;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAiC,GACvC,iBAAiB,CA8BnB;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAmB,GACzB,iBAAiB,CA8BnB;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,CAS1F;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,IAAI,iBAAiB,CAiBlE"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI embedding provider
|
|
3
|
+
*/
|
|
4
|
+
export function createOpenAIEmbeddingProvider(apiKey, model = 'text-embedding-3-small') {
|
|
5
|
+
const dimensions = model === 'text-embedding-3-small' ? 1536 :
|
|
6
|
+
model === 'text-embedding-3-large' ? 3072 : 1536;
|
|
7
|
+
return {
|
|
8
|
+
name: 'openai',
|
|
9
|
+
model,
|
|
10
|
+
dimensions,
|
|
11
|
+
async generateEmbeddings(texts) {
|
|
12
|
+
const response = await fetch('https://api.openai.com/v1/embeddings', {
|
|
13
|
+
method: 'POST',
|
|
14
|
+
headers: {
|
|
15
|
+
'Content-Type': 'application/json',
|
|
16
|
+
'Authorization': `Bearer ${apiKey}`
|
|
17
|
+
},
|
|
18
|
+
body: JSON.stringify({
|
|
19
|
+
input: texts,
|
|
20
|
+
model
|
|
21
|
+
})
|
|
22
|
+
});
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
const error = await response.text();
|
|
25
|
+
throw new Error(`OpenAI embedding API error: ${error}`);
|
|
26
|
+
}
|
|
27
|
+
const data = await response.json();
|
|
28
|
+
return data.data.map((item) => item.embedding);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Voyage AI embedding provider (recommended by Anthropic)
|
|
34
|
+
*/
|
|
35
|
+
export function createVoyageEmbeddingProvider(apiKey, model = 'voyage-3') {
|
|
36
|
+
const dimensions = model === 'voyage-3' ? 1024 :
|
|
37
|
+
model === 'voyage-3-lite' ? 512 : 1024;
|
|
38
|
+
return {
|
|
39
|
+
name: 'voyage',
|
|
40
|
+
model,
|
|
41
|
+
dimensions,
|
|
42
|
+
async generateEmbeddings(texts) {
|
|
43
|
+
const response = await fetch('https://api.voyageai.com/v1/embeddings', {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: {
|
|
46
|
+
'Content-Type': 'application/json',
|
|
47
|
+
'Authorization': `Bearer ${apiKey}`
|
|
48
|
+
},
|
|
49
|
+
body: JSON.stringify({
|
|
50
|
+
input: texts,
|
|
51
|
+
model
|
|
52
|
+
})
|
|
53
|
+
});
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
const error = await response.text();
|
|
56
|
+
throw new Error(`Voyage AI embedding API error: ${error}`);
|
|
57
|
+
}
|
|
58
|
+
const data = await response.json();
|
|
59
|
+
return data.data.map((item) => item.embedding);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function createEmbeddingProvider(config) {
|
|
64
|
+
switch (config.provider) {
|
|
65
|
+
case 'openai':
|
|
66
|
+
return createOpenAIEmbeddingProvider(config.apiKey, config.model);
|
|
67
|
+
case 'voyage':
|
|
68
|
+
return createVoyageEmbeddingProvider(config.apiKey, config.model);
|
|
69
|
+
default:
|
|
70
|
+
throw new Error(`Unknown embedding provider: ${config.provider}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Create embedding provider from environment variables
|
|
75
|
+
* Uses EMBEDDING_PROVIDER env var (defaults to 'openai')
|
|
76
|
+
* API keys:
|
|
77
|
+
* - OpenAI: OPENAI_API_KEY
|
|
78
|
+
* - Voyage: VOYAGE_API_KEY
|
|
79
|
+
*/
|
|
80
|
+
export function createEmbeddingProviderFromEnv() {
|
|
81
|
+
const provider = (process.env.EMBEDDING_PROVIDER || 'openai');
|
|
82
|
+
let apiKey;
|
|
83
|
+
if (provider === 'voyage') {
|
|
84
|
+
apiKey = process.env.VOYAGE_API_KEY;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
apiKey = process.env.OPENAI_API_KEY || process.env.OPENAI_SDK_KEY;
|
|
88
|
+
}
|
|
89
|
+
const model = process.env.EMBEDDING_MODEL;
|
|
90
|
+
if (!apiKey) {
|
|
91
|
+
throw new Error(`Missing API key for embedding provider: ${provider}`);
|
|
92
|
+
}
|
|
93
|
+
return createEmbeddingProvider({ provider, apiKey, model });
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=embeddingProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddingProvider.js","sourceRoot":"","sources":["../../src/rag/embeddingProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { RAGIndex, type RAGIndexConfig, type VectorBackend, type FAISSIndexType } from './ragIndex.js';
|
|
2
|
+
export { createVectorIndex, BruteForceIndex, FAISSIndex, HNSWIndex, type VectorIndex } from './vectorIndex.js';
|
|
3
|
+
export { createEmbeddingProvider, createEmbeddingProviderFromEnv, createOpenAIEmbeddingProvider, createVoyageEmbeddingProvider, type EmbeddingProvider, type EmbeddingProviderType, type EmbeddingProviderConfig } from './embeddingProvider.js';
|
|
4
|
+
export { chunkText } from './chunking.js';
|
|
5
|
+
export { cosineSimilarity, normalizeVector, dotProduct } from './similarity.js';
|
|
6
|
+
export type { Embedding, TextChunk, EmbeddedChunk, SimilaritySearchResult, ChunkingConfig } from './types.js';
|
|
7
|
+
export { KnowproRAGAdapter, createKnowproRAGAdapter } from './knowproAdapter.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rag/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,SAAS,EACT,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,6BAA6B,EAC7B,6BAA6B,EAC7B,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,SAAS,EACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,UAAU,EACX,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,sBAAsB,EACtB,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { RAGIndex } from './ragIndex.js';
|
|
2
|
+
export { createVectorIndex, BruteForceIndex, FAISSIndex, HNSWIndex } from './vectorIndex.js';
|
|
3
|
+
export { createEmbeddingProvider, createEmbeddingProviderFromEnv, createOpenAIEmbeddingProvider, createVoyageEmbeddingProvider } from './embeddingProvider.js';
|
|
4
|
+
export { chunkText } from './chunking.js';
|
|
5
|
+
export { cosineSimilarity, normalizeVector, dotProduct } from './similarity.js';
|
|
6
|
+
export { KnowproRAGAdapter, createKnowproRAGAdapter } from './knowproAdapter.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rag/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAIT,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,SAAS,EAEV,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,6BAA6B,EAC7B,6BAA6B,EAI9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,SAAS,EACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,UAAU,EACX,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC"}
|