aifastdb 3.1.1 → 3.1.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 (33) hide show
  1. package/aifastdb.win32-x64-msvc.node +0 -0
  2. package/dist/llm-gateway.d.ts +12 -0
  3. package/dist/llm-gateway.d.ts.map +1 -1
  4. package/dist/llm-gateway.js.map +1 -1
  5. package/package.json +4 -1
  6. package/dist/carpool/carpool-matcher.test.d.ts +0 -9
  7. package/dist/carpool/carpool-matcher.test.d.ts.map +0 -1
  8. package/dist/carpool/carpool-matcher.test.js +0 -413
  9. package/dist/carpool/carpool-matcher.test.js.map +0 -1
  10. package/dist/carpool/carpool-repo.test.d.ts +0 -9
  11. package/dist/carpool/carpool-repo.test.d.ts.map +0 -1
  12. package/dist/carpool/carpool-repo.test.js +0 -462
  13. package/dist/carpool/carpool-repo.test.js.map +0 -1
  14. package/dist/carpool/carpool-service.test.d.ts +0 -9
  15. package/dist/carpool/carpool-service.test.d.ts.map +0 -1
  16. package/dist/carpool/carpool-service.test.js +0 -465
  17. package/dist/carpool/carpool-service.test.js.map +0 -1
  18. package/dist/carpool/vehicle.test.d.ts +0 -8
  19. package/dist/carpool/vehicle.test.d.ts.map +0 -1
  20. package/dist/carpool/vehicle.test.js +0 -551
  21. package/dist/carpool/vehicle.test.js.map +0 -1
  22. package/dist/social-graph-v2-traversal.test.d.ts +0 -14
  23. package/dist/social-graph-v2-traversal.test.d.ts.map +0 -1
  24. package/dist/social-graph-v2-traversal.test.js +0 -212
  25. package/dist/social-graph-v2-traversal.test.js.map +0 -1
  26. package/dist/social-graph-v2-uri.test.d.ts +0 -12
  27. package/dist/social-graph-v2-uri.test.d.ts.map +0 -1
  28. package/dist/social-graph-v2-uri.test.js +0 -141
  29. package/dist/social-graph-v2-uri.test.js.map +0 -1
  30. package/dist/social-graph-v2-vector.test.d.ts +0 -14
  31. package/dist/social-graph-v2-vector.test.d.ts.map +0 -1
  32. package/dist/social-graph-v2-vector.test.js +0 -251
  33. package/dist/social-graph-v2-vector.test.js.map +0 -1
@@ -1,251 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- /**
4
- * SocialGraphV2 Vector Search — Integration Test (T32.4)
5
- *
6
- * Covers:
7
- * - Vector search configuration via constructor
8
- * - isVectorSearchEnabled / vectorCount
9
- * - indexEntity / removeEntityVector
10
- * - searchEntitiesByVector (k-NN)
11
- * - hybridSearch (vector + text fusion)
12
- * - Entity type filtering
13
- */
14
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- var desc = Object.getOwnPropertyDescriptor(m, k);
17
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
- desc = { enumerable: true, get: function() { return m[k]; } };
19
- }
20
- Object.defineProperty(o, k2, desc);
21
- }) : (function(o, m, k, k2) {
22
- if (k2 === undefined) k2 = k;
23
- o[k2] = m[k];
24
- }));
25
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
- Object.defineProperty(o, "default", { enumerable: true, value: v });
27
- }) : function(o, v) {
28
- o["default"] = v;
29
- });
30
- var __importStar = (this && this.__importStar) || (function () {
31
- var ownKeys = function(o) {
32
- ownKeys = Object.getOwnPropertyNames || function (o) {
33
- var ar = [];
34
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
- return ar;
36
- };
37
- return ownKeys(o);
38
- };
39
- return function (mod) {
40
- if (mod && mod.__esModule) return mod;
41
- var result = {};
42
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
- __setModuleDefault(result, mod);
44
- return result;
45
- };
46
- })();
47
- Object.defineProperty(exports, "__esModule", { value: true });
48
- const os = __importStar(require("os"));
49
- const path = __importStar(require("path"));
50
- const fs = __importStar(require("fs"));
51
- const social_graph_v2_1 = require("./social-graph-v2");
52
- // ============================================================================
53
- // Test Utilities
54
- // ============================================================================
55
- let passed = 0;
56
- let failed = 0;
57
- const failures = [];
58
- function assert(condition, message) {
59
- if (condition) {
60
- passed++;
61
- console.log(` ✅ ${message}`);
62
- }
63
- else {
64
- failed++;
65
- failures.push(message);
66
- console.log(` ❌ ${message}`);
67
- }
68
- }
69
- function assertThrows(fn, message) {
70
- try {
71
- fn();
72
- failed++;
73
- failures.push(`${message} (no error thrown)`);
74
- console.log(` ❌ ${message} (no error thrown)`);
75
- }
76
- catch {
77
- passed++;
78
- console.log(` ✅ ${message}`);
79
- }
80
- }
81
- function section(name) {
82
- console.log(`\n━━━ ${name} ━━━`);
83
- }
84
- /** Create a simple embedding vector of given dimension filled with a base value */
85
- function makeEmbedding(dim, base) {
86
- const vec = [];
87
- for (let i = 0; i < dim; i++) {
88
- vec.push(base + i * 0.001);
89
- }
90
- return vec;
91
- }
92
- // ============================================================================
93
- // Main Test
94
- // ============================================================================
95
- async function main() {
96
- passed = 0;
97
- failed = 0;
98
- failures.length = 0;
99
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sg-vector-test-'));
100
- console.log(`Test directory: ${tmpDir}`);
101
- try {
102
- // ================================================================
103
- // 1. Vector search disabled (default)
104
- // ================================================================
105
- section('1. Vector search disabled by default');
106
- {
107
- const sg = social_graph_v2_1.SocialGraphV2.open(path.join(tmpDir, 'no-vector'));
108
- assert(sg.isVectorSearchEnabled() === false, 'isVectorSearchEnabled() should be false');
109
- assert(sg.vectorCount() === 0, 'vectorCount() should be 0');
110
- sg.shutdown();
111
- }
112
- // ================================================================
113
- // 2. Vector search enabled via config
114
- // ================================================================
115
- section('2. Enable vector search via config');
116
- const DIM = 4;
117
- const sg = new social_graph_v2_1.SocialGraphV2({
118
- path: path.join(tmpDir, 'with-vector'),
119
- walEnabled: true,
120
- vectorSearch: { dimension: DIM },
121
- });
122
- assert(sg.isVectorSearchEnabled() === true, 'isVectorSearchEnabled() should be true');
123
- assert(sg.vectorCount() === 0, 'vectorCount() should be 0 initially');
124
- // ================================================================
125
- // 3. Add entities and index them
126
- // ================================================================
127
- section('3. Index entities with vectors');
128
- const alice = sg.addPerson({ name: 'Alice' });
129
- const bob = sg.addPerson({ name: 'Bob' });
130
- const charlie = sg.addPerson({ name: 'Charlie' });
131
- const embAlice = makeEmbedding(DIM, 0.1); // close to 0.1
132
- const embBob = makeEmbedding(DIM, 0.5); // close to 0.5
133
- const embCharlie = makeEmbedding(DIM, 0.9); // close to 0.9
134
- sg.indexEntity(alice.id, embAlice);
135
- assert(sg.vectorCount() === 1, 'vectorCount() should be 1 after indexing Alice');
136
- sg.indexEntity(bob.id, embBob);
137
- sg.indexEntity(charlie.id, embCharlie);
138
- assert(sg.vectorCount() === 3, 'vectorCount() should be 3 after indexing all');
139
- // ================================================================
140
- // 4. indexEntity on non-existent entity should throw
141
- // ================================================================
142
- section('4. indexEntity error cases');
143
- assertThrows(() => sg.indexEntity('non-existent-id', makeEmbedding(DIM, 0.0)), 'indexEntity on non-existent entity should throw');
144
- // ================================================================
145
- // 5. searchEntitiesByVector — basic k-NN
146
- // ================================================================
147
- section('5. searchEntitiesByVector (k-NN)');
148
- // Query close to Alice's embedding
149
- const queryNearAlice = makeEmbedding(DIM, 0.11);
150
- const results1 = sg.searchEntitiesByVector(queryNearAlice, 3);
151
- assert(results1.length === 3, 'Should return 3 results');
152
- assert(results1[0].entityId === alice.id, 'Closest to Alice query should be Alice');
153
- assert(typeof results1[0].score === 'number', 'Result should have numeric score');
154
- assert(results1[0].entity !== null, 'Result should have entity data');
155
- console.log(` Top result: ${results1[0].entity.name} (score=${results1[0].score.toFixed(4)})`);
156
- // Query close to Charlie's embedding
157
- const queryNearCharlie = makeEmbedding(DIM, 0.89);
158
- const results2 = sg.searchEntitiesByVector(queryNearCharlie, 1);
159
- assert(results2.length === 1, 'Should return 1 result with k=1');
160
- assert(results2[0].entityId === charlie.id, 'Closest to Charlie query should be Charlie');
161
- // ================================================================
162
- // 6. searchEntitiesByVector — with entity type filter
163
- // ================================================================
164
- section('6. Entity type filtering');
165
- // Add a non-person entity
166
- const techTag = sg.addTag({ name: 'Tech', tagType: 'skill' });
167
- sg.indexEntity(techTag.id, makeEmbedding(DIM, 0.12)); // close to Alice
168
- const personResults = sg.searchEntitiesByVector(queryNearAlice, 10, 'person');
169
- assert(personResults.every(r => r.entity.entity_type === 'person'), 'Filtering by person should only return person entities');
170
- console.log(` person-only results: ${personResults.length}`);
171
- // ================================================================
172
- // 7. removeEntityVector
173
- // ================================================================
174
- section('7. removeEntityVector');
175
- const countBefore = sg.vectorCount();
176
- sg.removeEntityVector(alice.id);
177
- // HNSW soft-delete: count may or may not decrease, but search should not return removed entity
178
- const resultsAfterRemove = sg.searchEntitiesByVector(embAlice, 10);
179
- assert(resultsAfterRemove.every(r => r.entityId !== alice.id), 'Removed entity should not appear in search results');
180
- console.log(` vectorCount before=${countBefore}, after=${sg.vectorCount()}`);
181
- // ================================================================
182
- // 8. Idempotent re-index
183
- // ================================================================
184
- section('8. Idempotent re-index');
185
- // Re-indexing same entity should not error
186
- sg.indexEntity(bob.id, makeEmbedding(DIM, 0.6));
187
- assert(true, 'Re-indexing Bob should not throw');
188
- // Bob should still be searchable
189
- const reindexResults = sg.searchEntitiesByVector(makeEmbedding(DIM, 0.6), 1);
190
- assert(reindexResults.length >= 1, 'Bob should be searchable after re-index');
191
- // ================================================================
192
- // 9. hybridSearch
193
- // ================================================================
194
- section('9. hybridSearch');
195
- // Vector + text hybrid
196
- const hybridResults = sg.hybridSearch(embBob, 'Bob', 5);
197
- assert(hybridResults.length > 0, 'hybridSearch should return results');
198
- console.log(` hybridSearch results: ${hybridResults.length}`);
199
- for (const r of hybridResults.slice(0, 3)) {
200
- console.log(` ${r.entityId}: score=${r.score.toFixed(4)}, name=${r.entity?.name}`);
201
- }
202
- // Text-only hybrid
203
- const textOnlyResults = sg.hybridSearch(null, 'Charlie', 5);
204
- assert(textOnlyResults.length > 0, 'Text-only hybridSearch should return results');
205
- // Vector-only hybrid
206
- const vecOnlyResults = sg.hybridSearch(embCharlie, null, 5);
207
- assert(vecOnlyResults.length > 0, 'Vector-only hybridSearch should return results');
208
- // ================================================================
209
- // 10. Async indexEntity
210
- // ================================================================
211
- section('10. Async API');
212
- const dave = sg.addPerson({ name: 'Dave' });
213
- await sg.indexEntityAsync(dave.id, makeEmbedding(DIM, 0.3));
214
- assert(true, 'indexEntityAsync should complete without error');
215
- const asyncResults = sg.searchEntitiesByVector(makeEmbedding(DIM, 0.3), 1);
216
- assert(asyncResults.length >= 1, 'Dave should be found after async indexing');
217
- // ================================================================
218
- // Cleanup
219
- // ================================================================
220
- sg.flush();
221
- sg.shutdown();
222
- // ================================================================
223
- // Summary
224
- // ================================================================
225
- console.log('\n' + '='.repeat(60));
226
- console.log(`T32.4 Results: ${passed} passed, ${failed} failed`);
227
- if (failures.length > 0) {
228
- console.log('Failures:');
229
- for (const f of failures) {
230
- console.log(` - ${f}`);
231
- }
232
- }
233
- console.log('='.repeat(60));
234
- if (failed > 0) {
235
- throw new Error(`SocialGraphV2 vector test failed (${failed} failures)`);
236
- }
237
- }
238
- finally {
239
- fs.rmSync(tmpDir, { recursive: true, force: true });
240
- }
241
- }
242
- if (require.main === module) {
243
- main().catch(err => {
244
- console.error('Test error:', err);
245
- process.exit(1);
246
- });
247
- }
248
- test('SocialGraphV2 vector integration', async () => {
249
- await main();
250
- });
251
- //# sourceMappingURL=social-graph-v2-vector.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"social-graph-v2-vector.test.js","sourceRoot":"","sources":["../ts/social-graph-v2-vector.test.ts"],"names":[],"mappings":"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"}