@futdevpro/nts-dynamo 1.15.70 → 1.15.71

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.
@@ -1,7 +1,7 @@
1
1
  {
2
- "pid": 5762,
3
- "startedAt": "2026-06-20T22:08:45.324Z",
4
- "startedAtMs": 1781993325324,
2
+ "pid": 3519,
3
+ "startedAt": "2026-06-21T00:03:35.801Z",
4
+ "startedAtMs": 1782000215801,
5
5
  "phase": "npm-publish",
6
6
  "pipelineComplete": false,
7
7
  "serverRunning": false,
@@ -10,83 +10,83 @@
10
10
  "steps": {
11
11
  "validate-secrets": {
12
12
  "status": "ok",
13
- "startedAt": "2026-06-20T22:08:45.393Z",
13
+ "startedAt": "2026-06-21T00:03:35.841Z",
14
14
  "logLineStart": 2,
15
15
  "logLineEnd": 7,
16
16
  "durationSec": 0.3
17
17
  },
18
18
  "discord-start": {
19
19
  "status": "ok",
20
- "startedAt": "2026-06-20T22:08:46.647Z",
20
+ "startedAt": "2026-06-21T00:03:37.141Z",
21
21
  "logLineStart": 8,
22
22
  "logLineEnd": 13,
23
- "durationSec": 9
23
+ "durationSec": 2.5
24
24
  },
25
25
  "pre-flight": {
26
26
  "status": "ok",
27
- "startedAt": "2026-06-20T22:08:56.660Z",
27
+ "startedAt": "2026-06-21T00:03:40.619Z",
28
28
  "logLineStart": 14,
29
29
  "logLineEnd": 16,
30
30
  "durationSec": 0.2
31
31
  },
32
32
  "install": {
33
33
  "status": "ok",
34
- "startedAt": "2026-06-20T22:08:57.903Z",
34
+ "startedAt": "2026-06-21T00:03:41.824Z",
35
35
  "logLineStart": 17,
36
- "logLineEnd": 141,
37
- "durationSec": 85.6
36
+ "logLineEnd": 116,
37
+ "durationSec": 35
38
38
  },
39
39
  "check-dev-leftovers": {
40
40
  "status": "ok",
41
- "startedAt": "2026-06-20T22:10:24.551Z",
42
- "logLineStart": 142,
43
- "logLineEnd": 149,
44
- "durationSec": 3.6
41
+ "startedAt": "2026-06-21T00:04:17.941Z",
42
+ "logLineStart": 117,
43
+ "logLineEnd": 124,
44
+ "durationSec": 6.3
45
45
  },
46
46
  "build": {
47
47
  "status": "ok",
48
- "startedAt": "2026-06-20T22:10:29.198Z",
49
- "logLineStart": 150,
50
- "logLineEnd": 151,
51
- "durationSec": 32.5
48
+ "startedAt": "2026-06-21T00:04:25.388Z",
49
+ "logLineStart": 125,
50
+ "logLineEnd": 126,
51
+ "durationSec": 26
52
52
  },
53
53
  "test": {
54
54
  "status": "ok",
55
- "startedAt": "2026-06-20T22:11:02.698Z",
56
- "logLineStart": 152,
57
- "logLineEnd": 2799,
58
- "durationSec": 26,
55
+ "startedAt": "2026-06-21T00:04:52.363Z",
56
+ "logLineStart": 127,
57
+ "logLineEnd": 2776,
58
+ "durationSec": 21.2,
59
59
  "testSummary": {
60
- "totalSpecs": 1420,
60
+ "totalSpecs": 1424,
61
61
  "failures": 0,
62
- "passed": 1420,
63
- "testDurationSec": 5.941
62
+ "passed": 1424,
63
+ "testDurationSec": 6.214
64
64
  },
65
65
  "errors": [
66
66
  {
67
- "line": 262,
67
+ "line": 810,
68
68
  "text": "❌❌ Error handleMessage: Error: Test error",
69
- "details": "at UserContext.<anonymous> (/tmp/pipeline-runs/637c6d86-c203-442c-83f9-453ccedf7d04/build/_modules/assistant/_services/ass-io.control-service.spec.js:68:136)\nat QueueRunner.attempt (/tmp/pipeline-runs/637c6d86-c203-442c-83f9-453ccedf7d04/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8414:40)\nat QueueRunner.run (/tmp/pipeline-runs/637c6d86-c203-442c-83f9-453ccedf7d04/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8452:27)\nat runNext (/tmp/pipeline-runs/637c6d86-c203-442c-83f9-453ccedf7d04/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8355:16)\nat /tmp/pipeline-runs/637c6d86-c203-442c-83f9-453ccedf7d04/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8361:11\nat /tmp/pipeline-runs/637c6d86-c203-442c-83f9-453ccedf7d04/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8241:9",
70
- "detailLineEnd": 268
69
+ "details": "at UserContext.<anonymous> (/tmp/pipeline-runs/12c5de70-5346-4911-bd3b-d561be811cff/build/_modules/assistant/_services/ass-io.control-service.spec.js:92:136)\nat QueueRunner.attempt (/tmp/pipeline-runs/12c5de70-5346-4911-bd3b-d561be811cff/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8414:40)\nat QueueRunner.run (/tmp/pipeline-runs/12c5de70-5346-4911-bd3b-d561be811cff/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8452:27)\nat runNext (/tmp/pipeline-runs/12c5de70-5346-4911-bd3b-d561be811cff/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8355:16)\nat /tmp/pipeline-runs/12c5de70-5346-4911-bd3b-d561be811cff/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8361:11\nat /tmp/pipeline-runs/12c5de70-5346-4911-bd3b-d561be811cff/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8241:9",
70
+ "detailLineEnd": 816
71
71
  },
72
72
  {
73
- "line": 275,
73
+ "line": 823,
74
74
  "text": "❌❌ Error handleMessage: Error: Test error",
75
- "details": "at UserContext.<anonymous> (/tmp/pipeline-runs/637c6d86-c203-442c-83f9-453ccedf7d04/build/_modules/assistant/_services/ass-io.control-service.spec.js:92:136)\nat QueueRunner.attempt (/tmp/pipeline-runs/637c6d86-c203-442c-83f9-453ccedf7d04/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8414:40)\nat QueueRunner.run (/tmp/pipeline-runs/637c6d86-c203-442c-83f9-453ccedf7d04/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8452:27)\nat runNext (/tmp/pipeline-runs/637c6d86-c203-442c-83f9-453ccedf7d04/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8355:16)\nat /tmp/pipeline-runs/637c6d86-c203-442c-83f9-453ccedf7d04/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8361:11\nat /tmp/pipeline-runs/637c6d86-c203-442c-83f9-453ccedf7d04/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8241:9",
76
- "detailLineEnd": 281
75
+ "details": "at UserContext.<anonymous> (/tmp/pipeline-runs/12c5de70-5346-4911-bd3b-d561be811cff/build/_modules/assistant/_services/ass-io.control-service.spec.js:68:136)\nat QueueRunner.attempt (/tmp/pipeline-runs/12c5de70-5346-4911-bd3b-d561be811cff/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8414:40)\nat QueueRunner.run (/tmp/pipeline-runs/12c5de70-5346-4911-bd3b-d561be811cff/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8452:27)\nat runNext (/tmp/pipeline-runs/12c5de70-5346-4911-bd3b-d561be811cff/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8355:16)\nat /tmp/pipeline-runs/12c5de70-5346-4911-bd3b-d561be811cff/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8361:11\nat /tmp/pipeline-runs/12c5de70-5346-4911-bd3b-d561be811cff/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8241:9",
76
+ "detailLineEnd": 829
77
77
  },
78
78
  {
79
- "line": 1823,
80
- "text": "............................................................❌ getDataByDependencyId failed, dependencyKey is missing from service! (test_data)",
81
- "details": "at processTicksAndRejections (node:internal/process/task_queues:81:21) {\ncode: 'ERR_SERVER_NOT_RUNNING'\n}\n📍 /tmp/pipeline-runs/637c6d86-c203-442c-83f9-453ccedf7d04/build/_services/base/data.service.spec.js:182:87",
82
- "detailLineEnd": 1824
79
+ "line": 833,
80
+ "text": "...............................................................❌ getDataByDependencyId failed, dependencyKey is missing from service! (test_data)",
81
+ "details": "📍 /tmp/pipeline-runs/12c5de70-5346-4911-bd3b-d561be811cff/build/_services/base/data.service.spec.js:182:87",
82
+ "detailLineEnd": 834
83
83
  }
84
84
  ]
85
85
  },
86
86
  "npm-publish": {
87
87
  "status": "running",
88
- "startedAt": "2026-06-20T22:11:29.780Z",
89
- "logLineStart": 2800,
88
+ "startedAt": "2026-06-21T00:05:14.681Z",
89
+ "logLineStart": 2777,
90
90
  "logLineEnd": null,
91
91
  "durationSec": null
92
92
  }
@@ -64,8 +64,12 @@ export declare class LVS_VectorPool_ControlService {
64
64
  * @param query A keresési query vektor
65
65
  * @param k A visszaadandó találatok száma (top-K)
66
66
  * @param mode A keresési mód (cosine similarity vagy L2 distance)
67
+ * @param candidateIds Opcionális jelölt-ID szűrő: ha meg van adva, a keresés CSAK az ebben a
68
+ * halmazban lévő ID-kra fut (a többit `Set.has` O(1)-gyel kihagyja). Így a hívónak NEM kell külön
69
+ * szűkített pool-t építenie + a vektorokat újra-normalizálnia — a keresés a MÁR előre-normalizált
70
+ * `normalizedVectorPool`-on iterál allokáció-mentesen. Üres halmaz → üres eredmény.
67
71
  * @returns A top-K találatok ID-val és score-rel, megfelelő sorrendben
68
72
  */
69
- search(query: number[], k: number, mode: LVS_Search_Mode): LVS_SearchResult[];
73
+ search(query: number[], k: number, mode: LVS_Search_Mode, candidateIds?: Set<string>): LVS_SearchResult[];
70
74
  }
71
75
  //# sourceMappingURL=lvs-vector-pool.control-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lvs-vector-pool.control-service.d.ts","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E;;;;GAIG;AACH,qBAAa,6BAA6B;IACxC;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAsD;IAExE;;;OAGG;IACH,OAAO,CAAC,oBAAoB,CAAsD;IAElF;;;OAGG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAwB7C;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK9B;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAQhD;;OAEG;IACH,SAAS,IAAI,IAAI;IAKjB;;;OAGG;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAI/B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAa1B;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAsBzD;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAiBnD;;;;;;;;OAQG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,EAAE,EACf,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,eAAe,GACpB,gBAAgB,EAAE;CAyDtB"}
1
+ {"version":3,"file":"lvs-vector-pool.control-service.d.ts","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E;;;;GAIG;AACH,qBAAa,6BAA6B;IACxC;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAsD;IAExE;;;OAGG;IACH,OAAO,CAAC,oBAAoB,CAAsD;IAElF;;;OAGG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAwB7C;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK9B;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAQhD;;OAEG;IACH,SAAS,IAAI,IAAI;IAKjB;;;OAGG;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAI/B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAa1B;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAsBzD;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAiBnD;;;;;;;;;;;;OAYG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,EAAE,EACf,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,eAAe,EACrB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACzB,gBAAgB,EAAE;CAmEtB"}
@@ -130,9 +130,17 @@ class LVS_VectorPool_ControlService {
130
130
  * @param query A keresési query vektor
131
131
  * @param k A visszaadandó találatok száma (top-K)
132
132
  * @param mode A keresési mód (cosine similarity vagy L2 distance)
133
+ * @param candidateIds Opcionális jelölt-ID szűrő: ha meg van adva, a keresés CSAK az ebben a
134
+ * halmazban lévő ID-kra fut (a többit `Set.has` O(1)-gyel kihagyja). Így a hívónak NEM kell külön
135
+ * szűkített pool-t építenie + a vektorokat újra-normalizálnia — a keresés a MÁR előre-normalizált
136
+ * `normalizedVectorPool`-on iterál allokáció-mentesen. Üres halmaz → üres eredmény.
133
137
  * @returns A top-K találatok ID-val és score-rel, megfelelő sorrendben
134
138
  */
135
- search(query, k, mode) {
139
+ search(query, k, mode, candidateIds) {
140
+ // Üres jelölt-halmaz → nincs mit keresni (a `undefined` viszont „nincs szűrés" = teljes pool).
141
+ if (candidateIds && candidateIds.size === 0) {
142
+ return [];
143
+ }
136
144
  if (!Array.isArray(query) || query.length === 0) {
137
145
  throw new Error('Query vector must be a non-empty array');
138
146
  }
@@ -161,6 +169,9 @@ class LVS_VectorPool_ControlService {
161
169
  // A drágán eltárolt `normalizedVectorPool` korábban SOHA nem volt használva a keresésben.
162
170
  const queryNormalized = LVS_VectorPool_ControlService.l2Normalize(query);
163
171
  for (const [id, normalizedVector] of this.normalizedVectorPool.entries()) {
172
+ if (candidateIds && !candidateIds.has(id)) {
173
+ continue;
174
+ }
164
175
  let dotProduct = 0;
165
176
  for (let i = 0; i < queryNormalized.length; i++) {
166
177
  dotProduct += queryNormalized[i] * normalizedVector[i];
@@ -172,6 +183,9 @@ class LVS_VectorPool_ControlService {
172
183
  }
173
184
  else if (mode === lvs_search_mode_enum_1.LVS_Search_Mode.l2Distance) {
174
185
  for (const [id, vector] of this.vectorPool.entries()) {
186
+ if (candidateIds && !candidateIds.has(id)) {
187
+ continue;
188
+ }
175
189
  results.push({ id, score: LVS_VectorPool_ControlService.l2Distance(query, vector) });
176
190
  }
177
191
  // L2 distance: növekvő sorrend (legkisebb távolság először)
@@ -1 +1 @@
1
- {"version":3,"file":"lvs-vector-pool.control-service.js","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lvs-vector-pool.control-service.js","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/nts-dynamo",
3
- "version": "01.15.70",
3
+ "version": "01.15.71",
4
4
  "description": "Dynamic NodeTS (NodeJS-Typescript), MongoDB Backend System Framework by Future Development Program Ltd.",
5
5
  "DyBu_settings": {
6
6
  "packageType": "server-package",
@@ -399,11 +399,57 @@ describe('| LVS_VectorPool_ControlService', () => {
399
399
  );
400
400
 
401
401
  // vec1 should have score = 0 (identical)
402
- const vec1Result: LVS_SearchResult | undefined =
402
+ const vec1Result: LVS_SearchResult | undefined =
403
403
  results.find((r: LVS_SearchResult) => r.id === 'vec1');
404
404
  expect(vec1Result).toBeDefined();
405
405
  expect(vec1Result!.score).toBe(0);
406
406
  });
407
+
408
+ it('| should restrict results to the candidateIds set (cosine)', () => {
409
+ const query: number[] = [1, 0, 0];
410
+ const candidateIds: Set<string> = new Set<string>(['vec2', 'vec3']);
411
+ const results: LVS_SearchResult[] = vectorPool.search(
412
+ query, 10, LVS_Search_Mode.cosineSimilarity, candidateIds
413
+ );
414
+ // CSAK a jelölt-halmaz ID-jai jelenhetnek meg (vec1/vec4 kizárva).
415
+ expect(results.length).toBe(2);
416
+ for (const r of results) {
417
+ expect(candidateIds.has(r.id)).toBe(true);
418
+ }
419
+ });
420
+
421
+ it('| should restrict results to the candidateIds set (L2)', () => {
422
+ const query: number[] = [1, 0, 0];
423
+ const candidateIds: Set<string> = new Set<string>(['vec1', 'vec4']);
424
+ const results: LVS_SearchResult[] = vectorPool.search(
425
+ query, 10, LVS_Search_Mode.l2Distance, candidateIds
426
+ );
427
+ expect(results.length).toBe(2);
428
+ expect(results.map((r: LVS_SearchResult) => r.id).sort()).toEqual(['vec1', 'vec4']);
429
+ });
430
+
431
+ it('| should give candidateId-scoped scores IDENTICAL to an unfiltered search filtered post-hoc', () => {
432
+ // A scoped keresés EREDMÉNYE (score-ok + sorrend) bit-azonos a teljes keresés azon
433
+ // részhalmazával, amit utólag a candidate-ID-kra szűrnénk — a szűrés csak SZŰKÍT, nem torzít.
434
+ const query: number[] = [1, 1, 0];
435
+ const candidateIds: Set<string> = new Set<string>(['vec1', 'vec2', 'vec4']);
436
+ const scoped: LVS_SearchResult[] = vectorPool.search(query, 10, LVS_Search_Mode.cosineSimilarity, candidateIds);
437
+ const full: LVS_SearchResult[] = vectorPool
438
+ .search(query, 10, LVS_Search_Mode.cosineSimilarity)
439
+ .filter((r: LVS_SearchResult) => candidateIds.has(r.id));
440
+ expect(scoped.length).toBe(full.length);
441
+ for (let i: number = 0; i < scoped.length; i++) {
442
+ expect(scoped[i].id).toBe(full[i].id);
443
+ expect(scoped[i].score).toBeCloseTo(full[i].score, 12);
444
+ }
445
+ });
446
+
447
+ it('| should return empty array for an empty candidateIds set', () => {
448
+ const results: LVS_SearchResult[] = vectorPool.search(
449
+ [1, 0, 0], 10, LVS_Search_Mode.cosineSimilarity, new Set<string>()
450
+ );
451
+ expect(results.length).toBe(0);
452
+ });
407
453
  });
408
454
  });
409
455
 
@@ -157,13 +157,22 @@ export class LVS_VectorPool_ControlService {
157
157
  * @param query A keresési query vektor
158
158
  * @param k A visszaadandó találatok száma (top-K)
159
159
  * @param mode A keresési mód (cosine similarity vagy L2 distance)
160
+ * @param candidateIds Opcionális jelölt-ID szűrő: ha meg van adva, a keresés CSAK az ebben a
161
+ * halmazban lévő ID-kra fut (a többit `Set.has` O(1)-gyel kihagyja). Így a hívónak NEM kell külön
162
+ * szűkített pool-t építenie + a vektorokat újra-normalizálnia — a keresés a MÁR előre-normalizált
163
+ * `normalizedVectorPool`-on iterál allokáció-mentesen. Üres halmaz → üres eredmény.
160
164
  * @returns A top-K találatok ID-val és score-rel, megfelelő sorrendben
161
165
  */
162
166
  search(
163
167
  query: number[],
164
168
  k: number,
165
- mode: LVS_Search_Mode
169
+ mode: LVS_Search_Mode,
170
+ candidateIds?: Set<string>
166
171
  ): LVS_SearchResult[] {
172
+ // Üres jelölt-halmaz → nincs mit keresni (a `undefined` viszont „nincs szűrés" = teljes pool).
173
+ if (candidateIds && candidateIds.size === 0) {
174
+ return [];
175
+ }
167
176
  if (!Array.isArray(query) || query.length === 0) {
168
177
  throw new Error('Query vector must be a non-empty array');
169
178
  }
@@ -199,6 +208,9 @@ export class LVS_VectorPool_ControlService {
199
208
  // A drágán eltárolt `normalizedVectorPool` korábban SOHA nem volt használva a keresésben.
200
209
  const queryNormalized: number[] = LVS_VectorPool_ControlService.l2Normalize(query);
201
210
  for (const [id, normalizedVector] of this.normalizedVectorPool.entries()) {
211
+ if (candidateIds && !candidateIds.has(id)) {
212
+ continue;
213
+ }
202
214
  let dotProduct: number = 0;
203
215
  for (let i: number = 0; i < queryNormalized.length; i++) {
204
216
  dotProduct += queryNormalized[i] * normalizedVector[i];
@@ -209,6 +221,9 @@ export class LVS_VectorPool_ControlService {
209
221
  results.sort((a: LVS_SearchResult, b: LVS_SearchResult) => b.score - a.score);
210
222
  } else if (mode === LVS_Search_Mode.l2Distance) {
211
223
  for (const [id, vector] of this.vectorPool.entries()) {
224
+ if (candidateIds && !candidateIds.has(id)) {
225
+ continue;
226
+ }
212
227
  results.push({ id, score: LVS_VectorPool_ControlService.l2Distance(query, vector) });
213
228
  }
214
229
  // L2 distance: növekvő sorrend (legkisebb távolság először)