@futdevpro/nts-dynamo 1.15.24 → 1.15.31

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 (67) hide show
  1. package/.husky/pre-commit +1 -0
  2. package/_specifications/BACKLOG.md +42 -0
  3. package/build/_models/interfaces/compare-data-options.interface.d.ts +27 -0
  4. package/build/_models/interfaces/compare-data-options.interface.d.ts.map +1 -0
  5. package/build/_models/interfaces/compare-data-options.interface.js +3 -0
  6. package/build/_models/interfaces/compare-data-options.interface.js.map +1 -0
  7. package/build/_models/interfaces/compare-data-result.interface.d.ts +13 -0
  8. package/build/_models/interfaces/compare-data-result.interface.d.ts.map +1 -0
  9. package/build/_models/interfaces/compare-data-result.interface.js +3 -0
  10. package/build/_models/interfaces/compare-data-result.interface.js.map +1 -0
  11. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event-callback.interface.d.ts +14 -0
  12. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event-callback.interface.d.ts.map +1 -0
  13. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event-callback.interface.js +3 -0
  14. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event-callback.interface.js.map +1 -0
  15. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event.interface.d.ts +50 -0
  16. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event.interface.d.ts.map +1 -0
  17. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event.interface.js +3 -0
  18. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event.interface.js.map +1 -0
  19. package/build/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.d.ts.map +1 -1
  20. package/build/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.js +32 -0
  21. package/build/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.js.map +1 -1
  22. package/build/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.d.ts.map +1 -1
  23. package/build/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.js +20 -2
  24. package/build/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.js.map +1 -1
  25. package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.d.ts +4 -1
  26. package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.d.ts.map +1 -1
  27. package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.js +28 -1
  28. package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.js.map +1 -1
  29. package/build/_modules/ai/_services/ai-provider.service-base.d.ts +21 -0
  30. package/build/_modules/ai/_services/ai-provider.service-base.d.ts.map +1 -1
  31. package/build/_modules/ai/_services/ai-provider.service-base.js +32 -0
  32. package/build/_modules/ai/_services/ai-provider.service-base.js.map +1 -1
  33. package/build/_modules/local-vector-search/_enums/lvs-search-mode.enum.d.ts +17 -1
  34. package/build/_modules/local-vector-search/_enums/lvs-search-mode.enum.d.ts.map +1 -1
  35. package/build/_modules/local-vector-search/_enums/lvs-search-mode.enum.js +16 -0
  36. package/build/_modules/local-vector-search/_enums/lvs-search-mode.enum.js.map +1 -1
  37. package/build/_modules/local-vector-search/_services/lvs-bm25.util.d.ts +89 -0
  38. package/build/_modules/local-vector-search/_services/lvs-bm25.util.d.ts.map +1 -0
  39. package/build/_modules/local-vector-search/_services/lvs-bm25.util.js +190 -0
  40. package/build/_modules/local-vector-search/_services/lvs-bm25.util.js.map +1 -0
  41. package/build/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.d.ts +18 -2
  42. package/build/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.d.ts.map +1 -1
  43. package/build/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.js +57 -3
  44. package/build/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.js.map +1 -1
  45. package/build/_services/base/data.service.d.ts +63 -0
  46. package/build/_services/base/data.service.d.ts.map +1 -1
  47. package/build/_services/base/data.service.js +189 -0
  48. package/build/_services/base/data.service.js.map +1 -1
  49. package/package.json +3 -3
  50. package/src/_models/interfaces/compare-data-options.interface.ts +27 -0
  51. package/src/_models/interfaces/compare-data-result.interface.ts +12 -0
  52. package/src/_modules/ai/_models/interfaces/dynts-ai-cost-event-callback.interface.ts +14 -0
  53. package/src/_modules/ai/_models/interfaces/dynts-ai-cost-event.interface.ts +56 -0
  54. package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.spec.ts +92 -0
  55. package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.ts +38 -4
  56. package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.ts +24 -5
  57. package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.spec.ts +52 -0
  58. package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.ts +39 -10
  59. package/src/_modules/ai/_services/ai-provider.service-base.spec.ts +79 -0
  60. package/src/_modules/ai/_services/ai-provider.service-base.ts +41 -3
  61. package/src/_modules/local-vector-search/_enums/lvs-search-mode.enum.ts +16 -0
  62. package/src/_modules/local-vector-search/_services/lvs-bm25.util.spec.ts +159 -0
  63. package/src/_modules/local-vector-search/_services/lvs-bm25.util.ts +206 -0
  64. package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.spec.ts +135 -0
  65. package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts +95 -9
  66. package/src/_services/base/data.service.spec.ts +181 -0
  67. package/src/_services/base/data.service.ts +196 -2
@@ -14,6 +14,22 @@ export declare enum LVS_Search_Mode {
14
14
  * 0 vagy pozitív érték, ahol 0 a legkisebb távolság (legnagyobb hasonlóság)
15
15
  * Eredmények növekvő sorrendben (legkisebb távolság először)
16
16
  */
17
- l2Distance = "l2-distance"
17
+ l2Distance = "l2-distance",
18
+ /**
19
+ * Hybrid search: cosine similarity (vektor-fele) + BM25 (text-fele) score-merge.
20
+ *
21
+ * Hasznalat:
22
+ * - `searchMode: LVS_Search_Mode.hybrid`
23
+ * - `textSearchKey: keyof T` — KOTELEZO; melyik string property-n fut a BM25
24
+ * - `hybridWeight?: { vector: number; text: number }` — default { vector: 0.5, text: 0.5 }
25
+ *
26
+ * BM25 min-max normalizalva [0,1] a candidate-szettre (cosine mar 0..1), igy
27
+ * a `weight` direkt linearis kombinacio. Ha minden BM25 score 0 (egyetlen
28
+ * query term sem matchel), a hybrid effektivan cosine-only-re degradalodik.
29
+ *
30
+ * L2+hybrid kombinacio NEM tamogatott — a hybrid mindig cosine-alapu
31
+ * vector-half-fel mukodik.
32
+ */
33
+ hybrid = "hybrid"
18
34
  }
19
35
  //# sourceMappingURL=lvs-search-mode.enum.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lvs-search-mode.enum.d.ts","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_enums/lvs-search-mode.enum.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,eAAe;IACzB;;;;OAIG;IACH,gBAAgB,sBAAsB;IACtC;;;;OAIG;IACH,UAAU,gBAAgB;CAC3B"}
1
+ {"version":3,"file":"lvs-search-mode.enum.d.ts","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_enums/lvs-search-mode.enum.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,eAAe;IACzB;;;;OAIG;IACH,gBAAgB,sBAAsB;IACtC;;;;OAIG;IACH,UAAU,gBAAgB;IAC1B;;;;;;;;;;;;;;OAcG;IACH,MAAM,WAAW;CAClB"}
@@ -19,5 +19,21 @@ var LVS_Search_Mode;
19
19
  * Eredmények növekvő sorrendben (legkisebb távolság először)
20
20
  */
21
21
  LVS_Search_Mode["l2Distance"] = "l2-distance";
22
+ /**
23
+ * Hybrid search: cosine similarity (vektor-fele) + BM25 (text-fele) score-merge.
24
+ *
25
+ * Hasznalat:
26
+ * - `searchMode: LVS_Search_Mode.hybrid`
27
+ * - `textSearchKey: keyof T` — KOTELEZO; melyik string property-n fut a BM25
28
+ * - `hybridWeight?: { vector: number; text: number }` — default { vector: 0.5, text: 0.5 }
29
+ *
30
+ * BM25 min-max normalizalva [0,1] a candidate-szettre (cosine mar 0..1), igy
31
+ * a `weight` direkt linearis kombinacio. Ha minden BM25 score 0 (egyetlen
32
+ * query term sem matchel), a hybrid effektivan cosine-only-re degradalodik.
33
+ *
34
+ * L2+hybrid kombinacio NEM tamogatott — a hybrid mindig cosine-alapu
35
+ * vector-half-fel mukodik.
36
+ */
37
+ LVS_Search_Mode["hybrid"] = "hybrid";
22
38
  })(LVS_Search_Mode || (exports.LVS_Search_Mode = LVS_Search_Mode = {}));
23
39
  //# sourceMappingURL=lvs-search-mode.enum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lvs-search-mode.enum.js","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_enums/lvs-search-mode.enum.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,IAAY,eAaX;AAbD,WAAY,eAAe;IACzB;;;;OAIG;IACH,yDAAsC,CAAA;IACtC;;;;OAIG;IACH,6CAA0B,CAAA;AAC5B,CAAC,EAbW,eAAe,+BAAf,eAAe,QAa1B"}
1
+ {"version":3,"file":"lvs-search-mode.enum.js","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_enums/lvs-search-mode.enum.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,IAAY,eA6BX;AA7BD,WAAY,eAAe;IACzB;;;;OAIG;IACH,yDAAsC,CAAA;IACtC;;;;OAIG;IACH,6CAA0B,CAAA;IAC1B;;;;;;;;;;;;;;OAcG;IACH,oCAAiB,CAAA;AACnB,CAAC,EA7BW,eAAe,+BAAf,eAAe,QA6B1B"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * BM25 text-search ranking util a LVS hybrid search-hez (FR-004).
3
+ *
4
+ * Pure TypeScript, dependency-free. In-memory corpus alapjan szamol score-okat,
5
+ * NEM perzisztal indexet (a hybrid hivasonkent ujraepiti a corpus-t a candidate
6
+ * dokumentumokon — kis (~100..10000 dokumentum) LVS-corpus eseten ez gyors es
7
+ * egyszeru).
8
+ *
9
+ * Canonical params: k1=1.2, b=0.75 (industry standard a "lucene-szeru"
10
+ * implementaciokban). NEM expose-oltak — ha kell, FR-002 kovetkezo iteracioban
11
+ * tehetjuk parameterizalhatova.
12
+ *
13
+ * Tokenizer: `text.toLowerCase().match(/\w+/g) || []`. Case-insensitive,
14
+ * alphanumeric+underscore boundary-k. `UserController` egy token marad (jo az
15
+ * identifier match-re), `auth-flow` ket tokenre esik (auth + flow).
16
+ *
17
+ * IDF formula (BM25+): `log((N - df + 0.5) / (df + 0.5) + 1)`. A +1 a logon
18
+ * belul garantalja, hogy a kozos szavak is pozitiv (kicsi) IDF-et kapjanak,
19
+ * NEM negativ-t — fontos a hybrid score-merge-nel hogy ne huzzon le dokumentumot
20
+ * ahol kozos szo szerepel.
21
+ */
22
+ /**
23
+ * Egy dokumentum BM25-score-ja egy query ellen, egy elore-felepitett corpus
24
+ * konteztusaban.
25
+ */
26
+ export interface DyNTS_LVS_BM25_DocScore {
27
+ /** Dokumentum azonosito (mint az LVS_SearchResult `id`-jaben). */
28
+ id: string;
29
+ /** Nyers BM25 score (0..∞). NEM normalizalt. */
30
+ score: number;
31
+ }
32
+ /**
33
+ * Felepitett BM25 corpus — egy adott dokumentumhalmaz indexe. A `score()` az
34
+ * indexen kerdez le egy query-t es minden dokumentumra ad egy score-t.
35
+ *
36
+ * Egy corpus egyszer-hasznalatos a hybrid search hivasban — NEM kell cache-elni,
37
+ * a felepites O(N * |doc|) ami pici N-re elhanyagolhato.
38
+ */
39
+ export declare class DyNTS_LVS_BM25_Corpus {
40
+ /** Tokenizalt dokumentumok: id -> tokens. */
41
+ private readonly docTokens;
42
+ /** Doc-length: id -> token count. */
43
+ private readonly docLengths;
44
+ /** Term -> doc-frequency (hany docban szerepel az adott term, legalabb 1x). */
45
+ private readonly termDocFreq;
46
+ /** Term -> id -> term-frequency a docban. */
47
+ private readonly termFreqByDoc;
48
+ /** Atlagos dokumentum-hossz (token count). */
49
+ private avgDocLength;
50
+ /** Total doc count. */
51
+ private docCount;
52
+ /**
53
+ * Letrehoz egy uj corpus-t a megadott id->text parok-bol.
54
+ * NEM dob hibat ures input-ra — ures corpus ervenyes (minden score = 0).
55
+ */
56
+ constructor(docs: {
57
+ id: string;
58
+ text: string;
59
+ }[]);
60
+ /**
61
+ * Public tokenizer — exportalt, hogy spec-ek + hivok ugyanazt a normalizalast
62
+ * tudjak hasznalni mint a corpus.
63
+ */
64
+ static tokenize(text: string): string[];
65
+ /**
66
+ * Visszaadja a corpus dokumentum-szamat (NEM-ures docok).
67
+ */
68
+ size(): number;
69
+ /**
70
+ * BM25 score minden dokumentumra a query-re.
71
+ *
72
+ * Ures query → minden score 0 (degenerate case; a hivo kezelje ha kell).
73
+ * Ures corpus → ures array.
74
+ */
75
+ score(query: string): DyNTS_LVS_BM25_DocScore[];
76
+ }
77
+ /**
78
+ * Min-max normalizalas [0,1] tartomanyra. A hybrid score-merge-hez kell a BM25
79
+ * score-okat a candidate-szetten 0..1 sav-ba hozni (a cosine mar 0..1).
80
+ *
81
+ * Edge case-ek:
82
+ * - Ures array → [].
83
+ * - Minden score azonos (max-min === 0) → minden 0.0 (NEM 0.5 vagy 1.0; ha
84
+ * nincs diszkriminacio, ne tegyunk hozza signal-t).
85
+ * - Negativ score-ok (BM25+IDF garantal pozitivat, de defensive): a min-max
86
+ * ugyanugy mukodik.
87
+ */
88
+ export declare function dyNTS_LVS_BM25_minMaxNormalize(scores: DyNTS_LVS_BM25_DocScore[]): DyNTS_LVS_BM25_DocScore[];
89
+ //# sourceMappingURL=lvs-bm25.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lvs-bm25.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_services/lvs-bm25.util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAaH;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,kEAAkE;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;CACf;AAGD;;;;;;GAMG;AACH,qBAAa,qBAAqB;IAEhC,6CAA6C;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsD;IAChF,qCAAqC;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkD;IAC7E,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkD;IAC9E,6CAA6C;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4E;IAC1G,8CAA8C;IAC9C,OAAO,CAAC,YAAY,CAAa;IACjC,uBAAuB;IACvB,OAAO,CAAC,QAAQ,CAAa;IAE7B;;;OAGG;gBACS,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE;IAmChD;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAMvC;;OAEG;IACH,IAAI,IAAI,MAAM;IAKd;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,uBAAuB,EAAE;CAwChD;AAGD;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,uBAAuB,EAAE,GAChC,uBAAuB,EAAE,CAmB3B"}
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ /**
3
+ * BM25 text-search ranking util a LVS hybrid search-hez (FR-004).
4
+ *
5
+ * Pure TypeScript, dependency-free. In-memory corpus alapjan szamol score-okat,
6
+ * NEM perzisztal indexet (a hybrid hivasonkent ujraepiti a corpus-t a candidate
7
+ * dokumentumokon — kis (~100..10000 dokumentum) LVS-corpus eseten ez gyors es
8
+ * egyszeru).
9
+ *
10
+ * Canonical params: k1=1.2, b=0.75 (industry standard a "lucene-szeru"
11
+ * implementaciokban). NEM expose-oltak — ha kell, FR-002 kovetkezo iteracioban
12
+ * tehetjuk parameterizalhatova.
13
+ *
14
+ * Tokenizer: `text.toLowerCase().match(/\w+/g) || []`. Case-insensitive,
15
+ * alphanumeric+underscore boundary-k. `UserController` egy token marad (jo az
16
+ * identifier match-re), `auth-flow` ket tokenre esik (auth + flow).
17
+ *
18
+ * IDF formula (BM25+): `log((N - df + 0.5) / (df + 0.5) + 1)`. A +1 a logon
19
+ * belul garantalja, hogy a kozos szavak is pozitiv (kicsi) IDF-et kapjanak,
20
+ * NEM negativ-t — fontos a hybrid score-merge-nel hogy ne huzzon le dokumentumot
21
+ * ahol kozos szo szerepel.
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.DyNTS_LVS_BM25_Corpus = void 0;
25
+ exports.dyNTS_LVS_BM25_minMaxNormalize = dyNTS_LVS_BM25_minMaxNormalize;
26
+ /** BM25 k1 parameter (term saturation control). Canonical default. */
27
+ const BM25_K1 = 1.2;
28
+ /** BM25 b parameter (length normalization weight, 0=off, 1=full). Canonical default. */
29
+ const BM25_B = 0.75;
30
+ /** Token regex — alphanumeric + underscore. */
31
+ const TOKEN_REGEX = /\w+/g;
32
+ /**
33
+ * Felepitett BM25 corpus — egy adott dokumentumhalmaz indexe. A `score()` az
34
+ * indexen kerdez le egy query-t es minden dokumentumra ad egy score-t.
35
+ *
36
+ * Egy corpus egyszer-hasznalatos a hybrid search hivasban — NEM kell cache-elni,
37
+ * a felepites O(N * |doc|) ami pici N-re elhanyagolhato.
38
+ */
39
+ class DyNTS_LVS_BM25_Corpus {
40
+ /** Tokenizalt dokumentumok: id -> tokens. */
41
+ docTokens = new Map();
42
+ /** Doc-length: id -> token count. */
43
+ docLengths = new Map();
44
+ /** Term -> doc-frequency (hany docban szerepel az adott term, legalabb 1x). */
45
+ termDocFreq = new Map();
46
+ /** Term -> id -> term-frequency a docban. */
47
+ termFreqByDoc = new Map();
48
+ /** Atlagos dokumentum-hossz (token count). */
49
+ avgDocLength = 0;
50
+ /** Total doc count. */
51
+ docCount = 0;
52
+ /**
53
+ * Letrehoz egy uj corpus-t a megadott id->text parok-bol.
54
+ * NEM dob hibat ures input-ra — ures corpus ervenyes (minden score = 0).
55
+ */
56
+ constructor(docs) {
57
+ if (!Array.isArray(docs) || docs.length === 0) {
58
+ return;
59
+ }
60
+ let totalLength = 0;
61
+ for (const doc of docs) {
62
+ if (!doc || typeof doc.id !== 'string' || typeof doc.text !== 'string') {
63
+ continue;
64
+ }
65
+ const tokens = DyNTS_LVS_BM25_Corpus.tokenize(doc.text);
66
+ this.docTokens.set(doc.id, tokens);
67
+ this.docLengths.set(doc.id, tokens.length);
68
+ totalLength += tokens.length;
69
+ // Term-frequency a docban
70
+ const localTf = new Map();
71
+ for (const tok of tokens) {
72
+ localTf.set(tok, (localTf.get(tok) ?? 0) + 1);
73
+ }
74
+ for (const [term, tf] of localTf) {
75
+ // Doc-frequency: +1 per term, per doc
76
+ this.termDocFreq.set(term, (this.termDocFreq.get(term) ?? 0) + 1);
77
+ // Term-freq-by-doc reverse index
78
+ let perDoc = this.termFreqByDoc.get(term);
79
+ if (!perDoc) {
80
+ perDoc = new Map();
81
+ this.termFreqByDoc.set(term, perDoc);
82
+ }
83
+ perDoc.set(doc.id, tf);
84
+ }
85
+ }
86
+ this.docCount = this.docTokens.size;
87
+ this.avgDocLength = this.docCount > 0 ? totalLength / this.docCount : 0;
88
+ }
89
+ /**
90
+ * Public tokenizer — exportalt, hogy spec-ek + hivok ugyanazt a normalizalast
91
+ * tudjak hasznalni mint a corpus.
92
+ */
93
+ static tokenize(text) {
94
+ if (typeof text !== 'string' || text.length === 0) {
95
+ return [];
96
+ }
97
+ return text.toLowerCase().match(TOKEN_REGEX) ?? [];
98
+ }
99
+ /**
100
+ * Visszaadja a corpus dokumentum-szamat (NEM-ures docok).
101
+ */
102
+ size() {
103
+ return this.docCount;
104
+ }
105
+ /**
106
+ * BM25 score minden dokumentumra a query-re.
107
+ *
108
+ * Ures query → minden score 0 (degenerate case; a hivo kezelje ha kell).
109
+ * Ures corpus → ures array.
110
+ */
111
+ score(query) {
112
+ if (this.docCount === 0) {
113
+ return [];
114
+ }
115
+ const queryTokens = DyNTS_LVS_BM25_Corpus.tokenize(query);
116
+ if (queryTokens.length === 0) {
117
+ // Minden doc 0 score-t kap
118
+ const results = [];
119
+ for (const id of this.docTokens.keys()) {
120
+ results.push({ id: id, score: 0 });
121
+ }
122
+ return results;
123
+ }
124
+ // Egyedi query-termek halmaza (ismetlodes nem ad nagyobb IDF-et)
125
+ const uniqueTerms = Array.from(new Set(queryTokens));
126
+ // Pre-compute IDF a query-termekre
127
+ const idfMap = new Map();
128
+ for (const term of uniqueTerms) {
129
+ const df = this.termDocFreq.get(term) ?? 0;
130
+ // BM25+ IDF: log((N - df + 0.5) / (df + 0.5) + 1)
131
+ const idf = Math.log((this.docCount - df + 0.5) / (df + 0.5) + 1);
132
+ idfMap.set(term, idf);
133
+ }
134
+ // Per-doc BM25 score
135
+ const results = [];
136
+ for (const [docId, docLen] of this.docLengths) {
137
+ let score = 0;
138
+ for (const term of uniqueTerms) {
139
+ const tf = this.termFreqByDoc.get(term)?.get(docId) ?? 0;
140
+ if (tf === 0) {
141
+ continue;
142
+ }
143
+ const idf = idfMap.get(term) ?? 0;
144
+ const norm = 1 - BM25_B + BM25_B * (docLen / (this.avgDocLength || 1));
145
+ score += idf * (tf * (BM25_K1 + 1)) / (tf + BM25_K1 * norm);
146
+ }
147
+ results.push({ id: docId, score: score });
148
+ }
149
+ return results;
150
+ }
151
+ }
152
+ exports.DyNTS_LVS_BM25_Corpus = DyNTS_LVS_BM25_Corpus;
153
+ /**
154
+ * Min-max normalizalas [0,1] tartomanyra. A hybrid score-merge-hez kell a BM25
155
+ * score-okat a candidate-szetten 0..1 sav-ba hozni (a cosine mar 0..1).
156
+ *
157
+ * Edge case-ek:
158
+ * - Ures array → [].
159
+ * - Minden score azonos (max-min === 0) → minden 0.0 (NEM 0.5 vagy 1.0; ha
160
+ * nincs diszkriminacio, ne tegyunk hozza signal-t).
161
+ * - Negativ score-ok (BM25+IDF garantal pozitivat, de defensive): a min-max
162
+ * ugyanugy mukodik.
163
+ */
164
+ function dyNTS_LVS_BM25_minMaxNormalize(scores) {
165
+ if (!Array.isArray(scores) || scores.length === 0) {
166
+ return [];
167
+ }
168
+ let min = Infinity;
169
+ let max = -Infinity;
170
+ for (const s of scores) {
171
+ if (s.score < min) {
172
+ min = s.score;
173
+ }
174
+ if (s.score > max) {
175
+ max = s.score;
176
+ }
177
+ }
178
+ const range = max - min;
179
+ if (range === 0) {
180
+ // Nincs diszkriminacio — minden 0.0 (NEM huzzon le, NEM huzzon fel)
181
+ return scores.map((s) => ({
182
+ id: s.id, score: 0,
183
+ }));
184
+ }
185
+ return scores.map((s) => ({
186
+ id: s.id,
187
+ score: (s.score - min) / range,
188
+ }));
189
+ }
190
+ //# sourceMappingURL=lvs-bm25.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lvs-bm25.util.js","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_services/lvs-bm25.util.ts"],"names":[],"mappings":"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"}
@@ -89,10 +89,26 @@ export declare class DyNTS_LVS_VectorDataService<T extends DyFM_Metadata> extend
89
89
  */
90
90
  filterBy?: DyFM_DBFilter<T>;
91
91
  /**
92
- * Search mode (cosine similarity or L2 distance)
93
- * Defaults to this.defaultSearchMode
92
+ * Search mode (cosine similarity, L2 distance, or hybrid).
93
+ * Defaults to this.defaultSearchMode.
94
+ *
95
+ * `hybrid` mode combines cosine similarity (vector half) with BM25
96
+ * text scoring (text half) — `textSearchKey` is REQUIRED in hybrid mode.
94
97
  */
95
98
  searchMode?: LVS_Search_Mode;
99
+ /**
100
+ * Csak `hybrid` modban — weighted score-merge a cosine es a BM25 kozott.
101
+ * Default: { vector: 0.5, text: 0.5 }. Mindkettonek 0..1 tartomany javasolt.
102
+ */
103
+ hybridWeight?: {
104
+ vector: number;
105
+ text: number;
106
+ };
107
+ /**
108
+ * Csak `hybrid` modban — KOTELEZO; melyik string property-n fut a BM25
109
+ * text-search. NEM kell hogy a vectorized property legyen.
110
+ */
111
+ textSearchKey?: keyof T;
96
112
  }): Promise<T[]>;
97
113
  }
98
114
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"lvs-local-vector-search.data-service.d.ts","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EAErB,aAAa,EACb,aAAa,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2EAA2E,CAAC;AAGxH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,2BAA2B,CAAC,CAAC,SAAS,aAAa,CAAE,SAAQ,2BAA2B,CAAC,CAAC,CAAC;IAEtG;;;OAGG;IACH,iBAAiB,EAAE,eAAe,CAAoC;IAEtE;;;OAGG;IACH,kBAAkB,EAAE,OAAO,CAAQ;IAEnC;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAsE;;IAGtF;;OAEG;IACH,IAAI,EAAE,CAAC;IACP;;OAEG;IACH,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACpC;;OAEG;IACH,cAAc,EAAE,iBAAiB;IACjC;;OAEG;IACH,MAAM,EAAE,MAAM;IAKhB;;;;;;;;;;;;;OAaG;IACY,YAAY,CACzB,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,iDAAiD;QACjD,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf;;;WAGG;QACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B;;WAEG;QACH,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;QAC5B;;;WAGG;QACH,UAAU,CAAC,EAAE,eAAe,CAAC;KAC9B,GACA,OAAO,CAAC,CAAC,EAAE,CAAC;CAmLhB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG"}
1
+ {"version":3,"file":"lvs-local-vector-search.data-service.d.ts","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EAErB,aAAa,EACb,aAAa,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAQjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2EAA2E,CAAC;AAGxH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,2BAA2B,CAAC,CAAC,SAAS,aAAa,CAAE,SAAQ,2BAA2B,CAAC,CAAC,CAAC;IAEtG;;;OAGG;IACH,iBAAiB,EAAE,eAAe,CAAoC;IAEtE;;;OAGG;IACH,kBAAkB,EAAE,OAAO,CAAQ;IAEnC;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAsE;;IAGtF;;OAEG;IACH,IAAI,EAAE,CAAC;IACP;;OAEG;IACH,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACpC;;OAEG;IACH,cAAc,EAAE,iBAAiB;IACjC;;OAEG;IACH,MAAM,EAAE,MAAM;IAKhB;;;;;;;;;;;;;OAaG;IACY,YAAY,CACzB,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,iDAAiD;QACjD,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf;;;WAGG;QACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B;;WAEG;QACH,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;QAC5B;;;;;;WAMG;QACH,UAAU,CAAC,EAAE,eAAe,CAAC;QAC7B;;;WAGG;QACH,YAAY,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAChD;;;WAGG;QACH,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;KACzB,GACA,OAAO,CAAC,CAAC,EAAE,CAAC;CAuPhB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG"}
@@ -4,6 +4,7 @@ exports.DyNTS_LVS_VectorDataService = void 0;
4
4
  const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
5
5
  const lvs_search_mode_enum_1 = require("../_enums/lvs-search-mode.enum");
6
6
  const lvs_vector_pool_control_service_1 = require("./lvs-vector-pool.control-service");
7
+ const lvs_bm25_util_1 = require("./lvs-bm25.util");
7
8
  const oai_vector_data_service_1 = require("../../ai/_modules/open-ai/_services/data-services/oai-vector-data.service");
8
9
  const global_settings_const_1 = require("../../../_collections/global-settings.const");
9
10
  /**
@@ -89,7 +90,26 @@ class DyNTS_LVS_VectorDataService extends oai_vector_data_service_1.DyNTS_OAI_Ve
89
90
  });
90
91
  }
91
92
  set.limit ??= 3;
92
- const { input, searchInKey, limit, filterBy, searchMode } = set;
93
+ const { input, searchInKey, limit, filterBy, searchMode, hybridWeight, textSearchKey } = set;
94
+ const effectiveMode = searchMode ?? this.defaultSearchMode;
95
+ // Hybrid mode korai validacio
96
+ if (effectiveMode === lvs_search_mode_enum_1.LVS_Search_Mode.hybrid) {
97
+ if (!textSearchKey) {
98
+ throw new fsm_dynamo_1.DyFM_Error({
99
+ ...this.getDefaultErrorSettings('vectorSearch', new Error('textSearchKey is required when searchMode is hybrid')),
100
+ errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|DyNTS-LVS-VS4`,
101
+ });
102
+ }
103
+ if (hybridWeight) {
104
+ const w = hybridWeight;
105
+ if (!Number.isFinite(w.vector) || !Number.isFinite(w.text) || w.vector < 0 || w.text < 0) {
106
+ throw new fsm_dynamo_1.DyFM_Error({
107
+ ...this.getDefaultErrorSettings('vectorSearch', new Error('hybridWeight.vector and .text must be non-negative finite numbers')),
108
+ errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|DyNTS-LVS-VS5`,
109
+ });
110
+ }
111
+ }
112
+ }
93
113
  // Validáljuk, hogy a searchInKey létezik-e
94
114
  const property = this.dataParams.properties[searchInKey];
95
115
  if (!property) {
@@ -175,11 +195,45 @@ class DyNTS_LVS_VectorDataService extends oai_vector_data_service_1.DyNTS_OAI_Ve
175
195
  }
176
196
  const queryVector = await this.vectorize(input, property.embeddingModel);
177
197
  // 4. Végrehajtjuk a local vector search-t
178
- const mode = searchMode ?? this.defaultSearchMode;
198
+ const mode = effectiveMode;
179
199
  if (this.debugLog) {
180
200
  fsm_dynamo_1.DyFM_Log.log(`Local vector search: searching with mode "${mode}", limit: ${limit}...`);
181
201
  }
182
- const searchResults = this.vectorPool.search(queryVector, limit, mode);
202
+ let searchResults;
203
+ if (mode === lvs_search_mode_enum_1.LVS_Search_Mode.hybrid) {
204
+ // Hybrid: cosine ALL candidate-re + BM25 ALL candidate-re + min-max norm + weighted sum
205
+ const allCandidatesCosine = this.vectorPool.search(queryVector, dataMap.size, lvs_search_mode_enum_1.LVS_Search_Mode.cosineSimilarity);
206
+ // BM25 corpus epitese a `textSearchKey` property-bol
207
+ const docs = [];
208
+ for (const [docId, dataItem] of dataMap) {
209
+ const textValue = dataItem[textSearchKey];
210
+ docs.push({
211
+ id: docId,
212
+ text: typeof textValue === 'string' ? textValue : '',
213
+ });
214
+ }
215
+ const bm25Corpus = new lvs_bm25_util_1.DyNTS_LVS_BM25_Corpus(docs);
216
+ const bm25Raw = bm25Corpus.score(input);
217
+ const bm25Normalized = (0, lvs_bm25_util_1.dyNTS_LVS_BM25_minMaxNormalize)(bm25Raw);
218
+ const bm25ScoreById = new Map();
219
+ for (const s of bm25Normalized) {
220
+ bm25ScoreById.set(s.id, s.score);
221
+ }
222
+ const wVector = hybridWeight?.vector ?? 0.5;
223
+ const wText = hybridWeight?.text ?? 0.5;
224
+ const merged = allCandidatesCosine.map((c) => {
225
+ const bm25Score = bm25ScoreById.get(c.id) ?? 0;
226
+ return {
227
+ id: c.id,
228
+ score: wVector * c.score + wText * bm25Score,
229
+ };
230
+ });
231
+ merged.sort((a, b) => b.score - a.score);
232
+ searchResults = merged.slice(0, limit);
233
+ }
234
+ else {
235
+ searchResults = this.vectorPool.search(queryVector, limit, mode);
236
+ }
183
237
  if (this.debugLog) {
184
238
  fsm_dynamo_1.DyFM_Log.log(`Local vector search: found ${searchResults.length} results`);
185
239
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lvs-local-vector-search.data-service.js","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lvs-local-vector-search.data-service.js","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import { DyFM_AnyError, DyFM_BasicProperty_Type, DyFM_DataModel_Params, DyFM_DBFilter, DyFM_DSSort, DyFM_Error_Settings, DyFM_Metadata, DyFM_RangeValue, DyFM_SearchQuery, DyFM_SearchResult, DyFM_SpecialSearch } from '@futdevpro/fsm-dynamo';
2
+ import { DyNTS_CompareData_Options } from '../../_models/interfaces/compare-data-options.interface';
3
+ import { DyNTS_CompareData_Result } from '../../_models/interfaces/compare-data-result.interface';
2
4
  import { DyNTS_DBUpdate } from '../../_models/types/db-update.type';
3
5
  import { DyNTS_ArchiveDataService } from './archive-data.service';
4
6
  import { DyNTS_DBService } from './db.service';
@@ -315,5 +317,66 @@ export declare class DyNTS_DataService<T extends DyFM_Metadata> {
315
317
  protected getDefaultErrorSettings(fnName: string, error: DyFM_AnyError,
316
318
  /** @deprecated we wont support the separate user message in the future, use the message instead */
317
319
  useMessageAsUserMessage?: boolean): DyFM_Error_Settings;
320
+ /**
321
+ * Generic, field-szintu osszehasonlitas ket adat-objektum kozott.
322
+ *
323
+ * **Auto-discovery mod** (`options.fields` nelkul): a metodus mindket
324
+ * objektum kulcs-uniojan iter, KIVEVE a `DyFM_Metadata` skip-listet
325
+ * (`_id`, `__created`, `__createdBy`, `__lastModified`, `__lastModifiedBy`).
326
+ *
327
+ * **Scope-szukito mod** (`options.fields = [...]`): KIZAROLAG a felsorolt
328
+ * mezoket vizsgalja. A skip-list IGNORALODIK — explicit fields override.
329
+ *
330
+ * **Custom comparator** (`options.customComparators`): per-field override
331
+ * a default deep-equal helyett (pl. set-equality array-ekre,
332
+ * case-insensitive string compare-re). A custom function `true`-val signal-ozza
333
+ * az equality-t.
334
+ *
335
+ * **Return:** `'equal'` ha minden vizsgalt field egyezik; `'modified'` ha
336
+ * legalabb egy elter — ilyenkor `changedFields` tartalmazza a TELJES
337
+ * mismatch-listat (nem early-return).
338
+ *
339
+ * **Throws:**
340
+ * - `newData` vagy `oldData` null/undefined → `DyFM_Error(400, DyNTS-DS0-CD1)`
341
+ * - `options.fields = []` ures array → `DyFM_Error(400, DyNTS-DS0-CD2)`
342
+ *
343
+ * **Sync method** (nincs I/O szukseglet); a host wrappel-i ha async kell.
344
+ *
345
+ * @example
346
+ * const result = userService.compareData(newUser, oldUser);
347
+ * if (result.result === 'modified') {
348
+ * console.log('Changed:', result.changedFields);
349
+ * }
350
+ *
351
+ * @example // Scope-szukites + custom comparator
352
+ * userService.compareData(newUser, oldUser, {
353
+ * fields: ['email', 'roles'],
354
+ * customComparators: {
355
+ * roles: (a, b) => new Set(a).size === new Set([...a, ...b]).size,
356
+ * },
357
+ * });
358
+ */
359
+ compareData(newData: T, oldData: T, options?: DyNTS_CompareData_Options<T>): DyNTS_CompareData_Result<T>;
360
+ /**
361
+ * Eldonti az osszehasonlitando fields-listat:
362
+ * - explicit `options.fields` esetan annak masolata (skip-list ignoralt)
363
+ * - egyebkent `Object.keys(newData) UNION Object.keys(oldData)` minus skip-list
364
+ */
365
+ private _resolveCompareFields;
366
+ /**
367
+ * Deep-equal helper.
368
+ *
369
+ * - Primitive (`string`/`number`/`boolean`/`null`/`undefined`): `===` / `Object.is`
370
+ * (a `NaN === NaN` esetet `Object.is` kezeli helyesen)
371
+ * - `Date`: `.getTime()` egyenloseg (kulonbozo Date instance-ok same-time-mal egyenlonek)
372
+ * - Array: length + index-szerinti rekurziv deep-equal
373
+ * - POJO: keys-union + per-key rekurzio
374
+ * - Egyeb (RegExp / Map / Set / Buffer): `Object.is` fallback (reference compare)
375
+ *
376
+ * NEM kezelt: cyclic references — a hivo objektum-grafja flat / fa kell legyen
377
+ * (a tipikus FDP data-model esete; cycle eseten stack overflow lesz, ami ertelmes
378
+ * jelzes a programozonak).
379
+ */
380
+ private _deepEqual;
318
381
  }
319
382
  //# sourceMappingURL=data.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.service.d.ts","sourceRoot":"","sources":["../../../src/_services/base/data.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.service.d.ts","sourceRoot":"","sources":["../../../src/_services/base/data.service.ts"],"names":[],"mappings":"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"}