vectra 0.12.2 → 0.12.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 (73) hide show
  1. package/LICENSE +1 -1
  2. package/README.draft.md +499 -0
  3. package/README.draft.outline.md +160 -0
  4. package/README.research.md +2159 -0
  5. package/bin/vectra.js +3 -0
  6. package/lib/FileFetcher.d.ts +5 -0
  7. package/lib/FileFetcher.d.ts.map +1 -0
  8. package/lib/FileFetcher.js +79 -0
  9. package/lib/FileFetcher.js.map +1 -0
  10. package/lib/GPT3Tokenizer.d.ts +9 -0
  11. package/lib/ItemSelector.d.ts +41 -0
  12. package/lib/ItemSelector.d.ts.map +1 -0
  13. package/lib/ItemSelector.js +168 -0
  14. package/lib/ItemSelector.js.map +1 -0
  15. package/lib/LocalDocument.d.ts +54 -0
  16. package/lib/LocalDocument.js +156 -0
  17. package/lib/LocalDocument.js.map +1 -0
  18. package/lib/LocalDocumentIndex.d.ts +132 -0
  19. package/lib/LocalDocumentIndex.js +456 -0
  20. package/lib/LocalDocumentIndex.js.map +1 -0
  21. package/lib/LocalDocumentResult.d.ts +45 -0
  22. package/lib/LocalDocumentResult.js +328 -0
  23. package/lib/LocalDocumentResult.js.map +1 -0
  24. package/lib/LocalIndex.d.ts +150 -0
  25. package/lib/LocalIndex.d.ts.map +1 -1
  26. package/lib/LocalIndex.js +515 -0
  27. package/lib/LocalIndex.js.map +1 -0
  28. package/lib/LocalIndex.spec.d.ts +2 -0
  29. package/lib/LocalIndex.spec.js +218 -7
  30. package/lib/LocalIndex.spec.js.map +1 -1
  31. package/lib/OpenAIEmbeddings.d.ts +126 -0
  32. package/lib/OpenAIEmbeddings.d.ts.map +1 -0
  33. package/lib/OpenAIEmbeddings.js +174 -0
  34. package/lib/OpenAIEmbeddings.js.map +1 -0
  35. package/lib/TextSplitter.d.ts +19 -0
  36. package/lib/TextSplitter.d.ts.map +1 -1
  37. package/lib/TextSplitter.js +457 -0
  38. package/lib/TextSplitter.js.map +1 -0
  39. package/lib/TextSplitter.spec.d.ts +2 -0
  40. package/lib/TextSplitter.spec.d.ts.map +1 -0
  41. package/lib/TextSplitter.spec.js +109 -0
  42. package/lib/TextSplitter.spec.js.map +1 -0
  43. package/lib/WebFetcher.d.ts +15 -0
  44. package/lib/WebFetcher.d.ts.map +1 -0
  45. package/lib/WebFetcher.js +234 -0
  46. package/lib/WebFetcher.js.map +1 -0
  47. package/lib/index.d.ts +12 -0
  48. package/lib/index.js +28 -0
  49. package/lib/index.js.map +1 -0
  50. package/lib/internals/Colorize.d.ts +14 -0
  51. package/lib/internals/Colorize.d.ts.map +1 -0
  52. package/lib/internals/Colorize.js +64 -0
  53. package/lib/internals/Colorize.js.map +1 -0
  54. package/lib/internals/index.d.ts +3 -0
  55. package/lib/internals/index.d.ts.map +1 -0
  56. package/lib/internals/index.js +19 -0
  57. package/lib/internals/index.js.map +1 -0
  58. package/lib/internals/types.d.ts +43 -0
  59. package/lib/internals/types.d.ts.map +1 -0
  60. package/lib/internals/types.js +3 -0
  61. package/lib/internals/types.js.map +1 -0
  62. package/lib/types.d.ts +146 -0
  63. package/lib/types.d.ts.map +1 -0
  64. package/lib/types.js +3 -0
  65. package/lib/types.js.map +1 -0
  66. package/lib/vectra-cli.d.ts +2 -0
  67. package/lib/vectra-cli.js +323 -0
  68. package/lib/vectra-cli.js.map +1 -0
  69. package/package.json +3 -1
  70. package/src/LocalIndex.spec.ts +265 -8
  71. package/src/LocalIndex.ts +1 -0
  72. package/src/TextSplitter.spec.ts +87 -0
  73. package/src/TextSplitter.ts +459 -531
@@ -0,0 +1,323 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.run = run;
49
+ const fs = __importStar(require("fs/promises"));
50
+ const yargs_1 = __importDefault(require("yargs/yargs"));
51
+ const helpers_1 = require("yargs/helpers");
52
+ const LocalDocumentIndex_1 = require("./LocalDocumentIndex");
53
+ const WebFetcher_1 = require("./WebFetcher");
54
+ const OpenAIEmbeddings_1 = require("./OpenAIEmbeddings");
55
+ const internals_1 = require("./internals");
56
+ const FileFetcher_1 = require("./FileFetcher");
57
+ function run() {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ // prettier-ignore
60
+ const args = yield (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
61
+ .scriptName('vectra')
62
+ .command('create <index>', `create a new local index`, {}, (args) => __awaiter(this, void 0, void 0, function* () {
63
+ const folderPath = args.index;
64
+ const index = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath });
65
+ console.log(internals_1.Colorize.output(`creating index at ${folderPath}`));
66
+ yield index.createIndex({ version: 1, deleteIfExists: true });
67
+ }))
68
+ .command('delete <index>', `delete an existing local index`, {}, (args) => __awaiter(this, void 0, void 0, function* () {
69
+ const folderPath = args.index;
70
+ console.log(internals_1.Colorize.output(`deleting index at ${folderPath}`));
71
+ const index = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath });
72
+ yield index.deleteIndex();
73
+ }))
74
+ .command('add <index>', `adds one or more web pages to an index`, (yargs) => {
75
+ return yargs
76
+ .option('keys', {
77
+ alias: 'k',
78
+ describe: 'path of a JSON file containing the model keys to use for generating embeddings',
79
+ type: 'string'
80
+ })
81
+ .option('uri', {
82
+ alias: 'u',
83
+ array: true,
84
+ describe: 'http/https link to a web page to add',
85
+ type: 'string'
86
+ })
87
+ .option('list', {
88
+ alias: 'l',
89
+ describe: 'path to a file containing a list of web pages to add',
90
+ type: 'string'
91
+ })
92
+ .option('cookie', {
93
+ alias: 'c',
94
+ describe: 'optional cookies to add to web fetch requests',
95
+ type: 'string'
96
+ })
97
+ .option('chunk-size', {
98
+ alias: 'cs',
99
+ describe: 'size of the generated chunks in tokens (defaults to 512)',
100
+ type: 'number',
101
+ default: 512
102
+ })
103
+ .check((argv) => {
104
+ if (Array.isArray(argv.uri) && argv.uri.length > 0) {
105
+ return true;
106
+ }
107
+ else if (typeof argv.list == 'string' && argv.list.trim().length > 0) {
108
+ return true;
109
+ }
110
+ else {
111
+ throw new Error(`you must specify either one or more "--uri <link>" for the pages to add or a "--list <file path>" for a file containing the list of pages to add.`);
112
+ }
113
+ })
114
+ .demandOption(['keys']);
115
+ }, (args) => __awaiter(this, void 0, void 0, function* () {
116
+ console.log(internals_1.Colorize.title('Adding Web Pages to Index'));
117
+ // Get embedding options
118
+ const options = JSON.parse(yield fs.readFile(args.keys, 'utf-8'));
119
+ if (options.apiKey && !options.model) {
120
+ options.model = 'text-embedding-ada-002';
121
+ options.maxTokens = 8000;
122
+ }
123
+ // Create embeddings
124
+ const embeddings = new OpenAIEmbeddings_1.OpenAIEmbeddings(options);
125
+ // Initialize index
126
+ const folderPath = args.index;
127
+ const index = new LocalDocumentIndex_1.LocalDocumentIndex({
128
+ folderPath,
129
+ embeddings,
130
+ chunkingConfig: {
131
+ chunkSize: args.chunkSize
132
+ }
133
+ });
134
+ // Get list of url's
135
+ const uris = yield getItemList(args.uri, args.list, 'web page');
136
+ // Fetch documents
137
+ const fileFetcher = new FileFetcher_1.FileFetcher();
138
+ const webFetcher = args.cookie ? new WebFetcher_1.WebFetcher({ headers: { "cookie": args.cookie } }) : new WebFetcher_1.WebFetcher();
139
+ for (const path of uris) {
140
+ try {
141
+ console.log(internals_1.Colorize.progress(`fetching ${path}`));
142
+ const fetcher = path.startsWith('http') ? webFetcher : fileFetcher;
143
+ yield fetcher.fetch(path, (uri, text, docType) => __awaiter(this, void 0, void 0, function* () {
144
+ console.log(internals_1.Colorize.replaceLine(internals_1.Colorize.progress(`indexing ${uri}`)));
145
+ yield index.upsertDocument(uri, text, docType);
146
+ console.log(internals_1.Colorize.replaceLine(internals_1.Colorize.success(`added ${uri}`)));
147
+ return true;
148
+ }));
149
+ }
150
+ catch (err) {
151
+ console.log(internals_1.Colorize.replaceLine(internals_1.Colorize.error(`Error adding: ${path}\n${err.message}`)));
152
+ }
153
+ }
154
+ }))
155
+ .command('remove <index>', `removes one or more documents from an index`, (yargs) => {
156
+ return yargs
157
+ .option('uri', {
158
+ alias: 'u',
159
+ array: true,
160
+ describe: 'uri of a document to remove',
161
+ type: 'string'
162
+ })
163
+ .option('list', {
164
+ alias: 'l',
165
+ describe: 'path to a file containing a list of documents to remove',
166
+ type: 'string'
167
+ })
168
+ .check((argv) => {
169
+ if (Array.isArray(argv.uri) && argv.uri.length > 0) {
170
+ return true;
171
+ }
172
+ else if (typeof argv.list == 'string' && argv.list.trim().length > 0) {
173
+ return true;
174
+ }
175
+ else {
176
+ throw new Error(`you must specify either one or more "--uri <link>" for the pages to add or a "--list <file path>" for a file containing the list of pages to add.`);
177
+ }
178
+ });
179
+ }, (args) => __awaiter(this, void 0, void 0, function* () {
180
+ // Initialize index
181
+ const folderPath = args.index;
182
+ const index = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath });
183
+ // Get list of uri's
184
+ const uris = yield getItemList(args.uri, args.list, 'document');
185
+ // Remove documents
186
+ for (const uri of uris) {
187
+ console.log(`removing ${uri}`);
188
+ yield index.deleteDocument(uri);
189
+ }
190
+ }))
191
+ .command('stats <index>', `prints the stats for a local index`, {}, (args) => __awaiter(this, void 0, void 0, function* () {
192
+ const folderPath = args.index;
193
+ const index = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath });
194
+ const stats = yield index.getCatalogStats();
195
+ console.log(internals_1.Colorize.title('Index Stats'));
196
+ console.log(internals_1.Colorize.output(stats));
197
+ }))
198
+ .command('query <index> <query>', `queries a local index`, (yargs) => {
199
+ return yargs
200
+ .option('keys', {
201
+ alias: 'k',
202
+ describe: 'path of a JSON file containing the model keys to use for generating embeddings'
203
+ })
204
+ .option('document-count', {
205
+ alias: 'dc',
206
+ describe: 'max number of documents to return (defaults to 10)',
207
+ type: 'number',
208
+ default: 10
209
+ })
210
+ .option('chunk-count', {
211
+ alias: 'cc',
212
+ describe: 'max number of chunks to return (defaults to 50)',
213
+ type: 'number',
214
+ default: 50
215
+ })
216
+ .option('section-count', {
217
+ alias: 'sc',
218
+ describe: 'max number of document sections to render (defaults to 1)',
219
+ type: 'number',
220
+ default: 1
221
+ })
222
+ .option('tokens', {
223
+ alias: 't',
224
+ describe: 'max number of tokens to render for each document section (defaults to 2000)',
225
+ type: 'number',
226
+ default: 2000
227
+ })
228
+ .option('format', {
229
+ alias: 'f',
230
+ describe: `format of the rendered results. Defaults to 'sections'`,
231
+ choices: ['sections', 'stats', 'chunks'],
232
+ default: 'sections'
233
+ })
234
+ .option('overlap', {
235
+ alias: 'o',
236
+ describe: `whether to add overlapping chunks to sections.`,
237
+ type: 'boolean',
238
+ default: true
239
+ })
240
+ .option('bm25', {
241
+ alias: 'b',
242
+ describe: 'Use Okapi-bm25 keyword search alogrithm to perform hybrid search - semantic + keyword. Displayed in blue during search.',
243
+ type: 'boolean',
244
+ default: false
245
+ })
246
+ .demandOption(['keys']);
247
+ }, (args) => __awaiter(this, void 0, void 0, function* () {
248
+ console.log(internals_1.Colorize.title('Querying Index'));
249
+ // Get embedding options
250
+ const options = JSON.parse(yield fs.readFile(args.keys, 'utf-8'));
251
+ if (options.apiKey && !options.model) {
252
+ options.model = 'text-embedding-ada-002';
253
+ options.maxTokens = 8000;
254
+ }
255
+ // Create embeddings
256
+ const embeddings = new OpenAIEmbeddings_1.OpenAIEmbeddings(options);
257
+ // Initialize index
258
+ const folderPath = args.index;
259
+ const index = new LocalDocumentIndex_1.LocalDocumentIndex({
260
+ folderPath,
261
+ embeddings
262
+ });
263
+ // Query index
264
+ const query = args.query;
265
+ const results = yield index.queryDocuments(query, {
266
+ maxDocuments: args.documentCount,
267
+ maxChunks: args.chunkCount,
268
+ isBm25: args.bm25,
269
+ });
270
+ // Render results
271
+ for (const result of results) {
272
+ console.log(internals_1.Colorize.output(result.uri));
273
+ console.log(internals_1.Colorize.value('score', result.score));
274
+ console.log(internals_1.Colorize.value('chunks', result.chunks.length));
275
+ if (args.format == 'sections') {
276
+ const sections = yield result.renderSections(args.tokens, args.sectionCount, args.overlap);
277
+ console.log(sections.length);
278
+ for (let i = 0; i < sections.length; i++) {
279
+ const section = sections[i];
280
+ const isBm25 = sections[i].isBm25;
281
+ console.log(isBm25);
282
+ console.log(internals_1.Colorize.title(args.sectionCount == 1 ? 'Section' : `Section ${i + 1}`));
283
+ console.log(internals_1.Colorize.value('score', section.score));
284
+ console.log(internals_1.Colorize.value('tokens', section.tokenCount));
285
+ console.log(internals_1.Colorize.output(section.text, isBm25));
286
+ }
287
+ }
288
+ else if (args.format == 'chunks') {
289
+ const text = yield result.loadText();
290
+ for (let i = 0; i < result.chunks.length; i++) {
291
+ const chunk = result.chunks[i];
292
+ const startPos = chunk.item.metadata.startPos;
293
+ const endPos = chunk.item.metadata.endPos;
294
+ const isBm25 = Boolean(chunk.item.metadata.isBm25);
295
+ console.log(internals_1.Colorize.title(`Chunk ${i + 1}`));
296
+ console.log(internals_1.Colorize.value('score', chunk.score));
297
+ console.log(internals_1.Colorize.value('startPos', startPos));
298
+ console.log(internals_1.Colorize.value('endPos', endPos));
299
+ console.log(internals_1.Colorize.output(text.substring(startPos, endPos + 1), isBm25));
300
+ }
301
+ }
302
+ }
303
+ }))
304
+ .help()
305
+ .demandCommand()
306
+ .parseAsync();
307
+ });
308
+ }
309
+ function getItemList(items, listFile, uriType) {
310
+ return __awaiter(this, void 0, void 0, function* () {
311
+ if (Array.isArray(items) && items.length > 0) {
312
+ return items;
313
+ }
314
+ else if (typeof listFile == 'string' && listFile.trim().length > 0) {
315
+ const list = yield fs.readFile(listFile, 'utf-8');
316
+ return list.split('\n').map((item) => item.trim()).filter((item) => item.length > 0);
317
+ }
318
+ else {
319
+ throw new Error(`you must specify either one or more "--uri <${uriType}>" for the items or a "--list <file path>" for a file containing the items.`);
320
+ }
321
+ });
322
+ }
323
+ //# sourceMappingURL=vectra-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectra-cli.js","sourceRoot":"","sources":["../src/vectra-cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "vectra",
3
3
  "author": "Steven Ickman",
4
4
  "description": "A vector database that uses the local file system for storage.",
5
- "version": "0.12.2",
5
+ "version": "0.12.3",
6
6
  "license": "MIT",
7
7
  "keywords": [
8
8
  "gpt"
@@ -47,6 +47,7 @@
47
47
  "@types/assert": "^1.5.11",
48
48
  "@types/mocha": "^10.0.10",
49
49
  "@types/node": "^22.15.11",
50
+ "@types/sinon": "^21.0.0",
50
51
  "@types/turndown": "^5.0.5",
51
52
  "@types/uuid": "10.0.0",
52
53
  "@types/yargs": "17.0.33",
@@ -55,6 +56,7 @@
55
56
  "nyc": "^17.1.0",
56
57
  "rimraf": "^5.0.1",
57
58
  "shx": "^0.4.0",
59
+ "sinon": "^21.0.1",
58
60
  "ts-mocha": "11.1.0",
59
61
  "ts-node": "^10.9.1",
60
62
  "typescript": "^5.8.3",