@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.
- package/.dynamo/logs/cicd-pipeline/output.log +1526 -1549
- package/.dynamo/logs/cicd-pipeline/status.json +37 -37
- package/build/_modules/local-vector-search/_services/lvs-vector-pool.control-service.d.ts +5 -1
- package/build/_modules/local-vector-search/_services/lvs-vector-pool.control-service.d.ts.map +1 -1
- package/build/_modules/local-vector-search/_services/lvs-vector-pool.control-service.js +15 -1
- package/build/_modules/local-vector-search/_services/lvs-vector-pool.control-service.js.map +1 -1
- package/package.json +1 -1
- package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.spec.ts +47 -1
- package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.ts +16 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"pid":
|
|
3
|
-
"startedAt": "2026-06-
|
|
4
|
-
"startedAtMs":
|
|
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-
|
|
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-
|
|
20
|
+
"startedAt": "2026-06-21T00:03:37.141Z",
|
|
21
21
|
"logLineStart": 8,
|
|
22
22
|
"logLineEnd": 13,
|
|
23
|
-
"durationSec":
|
|
23
|
+
"durationSec": 2.5
|
|
24
24
|
},
|
|
25
25
|
"pre-flight": {
|
|
26
26
|
"status": "ok",
|
|
27
|
-
"startedAt": "2026-06-
|
|
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-
|
|
34
|
+
"startedAt": "2026-06-21T00:03:41.824Z",
|
|
35
35
|
"logLineStart": 17,
|
|
36
|
-
"logLineEnd":
|
|
37
|
-
"durationSec":
|
|
36
|
+
"logLineEnd": 116,
|
|
37
|
+
"durationSec": 35
|
|
38
38
|
},
|
|
39
39
|
"check-dev-leftovers": {
|
|
40
40
|
"status": "ok",
|
|
41
|
-
"startedAt": "2026-06-
|
|
42
|
-
"logLineStart":
|
|
43
|
-
"logLineEnd":
|
|
44
|
-
"durationSec": 3
|
|
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-
|
|
49
|
-
"logLineStart":
|
|
50
|
-
"logLineEnd":
|
|
51
|
-
"durationSec":
|
|
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-
|
|
56
|
-
"logLineStart":
|
|
57
|
-
"logLineEnd":
|
|
58
|
-
"durationSec":
|
|
55
|
+
"startedAt": "2026-06-21T00:04:52.363Z",
|
|
56
|
+
"logLineStart": 127,
|
|
57
|
+
"logLineEnd": 2776,
|
|
58
|
+
"durationSec": 21.2,
|
|
59
59
|
"testSummary": {
|
|
60
|
-
"totalSpecs":
|
|
60
|
+
"totalSpecs": 1424,
|
|
61
61
|
"failures": 0,
|
|
62
|
-
"passed":
|
|
63
|
-
"testDurationSec":
|
|
62
|
+
"passed": 1424,
|
|
63
|
+
"testDurationSec": 6.214
|
|
64
64
|
},
|
|
65
65
|
"errors": [
|
|
66
66
|
{
|
|
67
|
-
"line":
|
|
67
|
+
"line": 810,
|
|
68
68
|
"text": "❌❌ Error handleMessage: Error: Test error",
|
|
69
|
-
"details": "at UserContext.<anonymous> (/tmp/pipeline-runs/
|
|
70
|
-
"detailLineEnd":
|
|
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":
|
|
73
|
+
"line": 823,
|
|
74
74
|
"text": "❌❌ Error handleMessage: Error: Test error",
|
|
75
|
-
"details": "at UserContext.<anonymous> (/tmp/pipeline-runs/
|
|
76
|
-
"detailLineEnd":
|
|
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":
|
|
80
|
-
"text": "
|
|
81
|
-
"details": "
|
|
82
|
-
"detailLineEnd":
|
|
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-
|
|
89
|
-
"logLineStart":
|
|
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
|
package/build/_modules/local-vector-search/_services/lvs-vector-pool.control-service.d.ts.map
CHANGED
|
@@ -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
|
|
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
|
@@ -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)
|