agentic-flow 2.0.1-alpha.17 → 2.0.1-alpha.18
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/CHANGELOG.md +38 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/intelligence/EmbeddingCache.d.ts +105 -0
- package/dist/intelligence/EmbeddingCache.d.ts.map +1 -0
- package/dist/intelligence/EmbeddingCache.js +253 -0
- package/dist/intelligence/EmbeddingCache.js.map +1 -0
- package/dist/intelligence/EmbeddingService.d.ts +31 -1
- package/dist/intelligence/EmbeddingService.d.ts.map +1 -1
- package/dist/intelligence/EmbeddingService.js +86 -7
- package/dist/intelligence/EmbeddingService.js.map +1 -1
- package/package.json +1 -1
- package/wasm/reasoningbank/reasoningbank_wasm_bg.js +2 -2
- package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmbeddingService.js","sourceRoot":"","sources":["../../src/intelligence/EmbeddingService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA2DH,0BAA0B;AAC1B,IAAI,aAAa,GAAmB,IAAI,CAAC;AACzC,IAAI,cAAc,GAA0B,IAAI,CAAC;AAEjD;;GAEG;AACH,KAAK,UAAU,UAAU;IACvB,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAA8B,CAAC;QAClE,cAAc,GAAG,GAAG,CAAC;QACrB,aAAa,GAAG,GAAG,CAAC,eAAe,EAAE,EAAE,IAAI,KAAK,CAAC;QACjD,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2DAA2D;QAC3D,aAAa,GAAG,KAAK,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,cAAc;IACV,KAAK,GAA8B,IAAI,GAAG,EAAE,CAAC;IAC7C,OAAO,CAAS;IAExB,YAAY,UAAkB,IAAI;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,KAAK,EAAE,CAAC;YACV,mCAAmC;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAmB;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAChD,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAC,QAAQ,GAA4B,IAAI,CAAC;IAEhD,OAAO,CAAmB;IAC1B,gBAAgB,GAA4B,IAAI,CAAC;IACjD,SAAS,CAAS;IAClB,SAAS,CAAS;IAE1B,aAAa;IACL,WAAW,GAAY,KAAK,CAAC;IAC7B,cAAc,GAAyB,IAAI,CAAC;IAEpD,QAAQ;IACA,eAAe,GAAW,CAAC,CAAC;IAC5B,cAAc,GAAW,CAAC,CAAC;IAC3B,SAAS,GAAW,CAAC,CAAC;IAE9B,QAAQ;IACA,KAAK,CAAiB;IACtB,YAAY,CAAU;IAE9B,+BAA+B;IACvB,MAAM,GAAoD,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAEhG;QACE,mEAAmE;QACnE,IAAI,CAAC,OAAO,GAAI,OAAO,CAAC,GAAG,CAAC,uBAA4C,IAAI,MAAM,CAAC;QACnF,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,kBAAkB,CAAC;QAChF,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,wCAAwC;QAC9D,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,OAAO,CAAC;QACzE,IAAI,CAAC,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC/B,gBAAgB,CAAC,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACrD,CAAC;QACD,OAAO,gBAAgB,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAC/B,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;YACpD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,6BAA6B;YACrD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC;YACrC,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;gBAC5B,MAAM,UAAU,EAAE,CAAC,CAAC,0BAA0B;gBAC9C,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,cAAc;QACd,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACrD,IAAI,SAAuB,CAAC;QAE5B,IAAI,gBAAgB,KAAK,MAAM,IAAI,cAAc,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC;gBACtB,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;gBAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAED,eAAe;QACf,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAErD,eAAe;QACf,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,kCAAkC;QAClC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,aAAa,GAA4B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YACzF,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACvD,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;gBAC/B,OAAO,aAA+B,CAAC;YACzC,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAErD,IAAI,gBAAgB,KAAK,MAAM,IAAI,cAAc,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,MAAM,EAAE,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;gBACpE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;gBAErC,8BAA8B;gBAC9B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;gBAED,eAAe;gBACf,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC;gBACrC,IAAI,CAAC,cAAc,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBACrD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBAExB,OAAO,UAAU,CAAC;YACpB,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,KAAa;QAC3C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAErD,IAAI,gBAAgB,KAAK,MAAM,IAAI,cAAc,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC7D,OAAO,MAAM,CAAC,UAAU,CAAC;QAC3B,CAAC;QAED,kCAAkC;QAClC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAe;QACpC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,MAAM,MAAM,GAAe,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,kBAAkB;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACnB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,YAAY;YAClC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,KAAe;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,OAAe,CAAC;QAClD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1B,KAAK,EAAE,CAAC;gBACR,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QAED,mDAAmD;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,KAAe,EAAE,YAAoB,GAAG;QAC3D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,MAAM,GAAqB,EAAE,CAAC;QAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,SAAS;YAE7B,MAAM,KAAK,GAAmB;gBAC5B,OAAO,EAAE,CAAC,CAAC,CAAC;gBACZ,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjB,UAAU,EAAE,GAAG;aAChB,CAAC;YAEF,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,SAAS;gBAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;oBACrB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACtB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3B,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;oBACnD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAChB,KAAe,EACf,IAAY,CAAC,EACb,gBAAwB,GAAG;QAE3B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAE3B,gFAAgF;QAChF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAC1C,OAAO,eAAe,CAAC,IAAI,GAAG,CAAC,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5D,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,SAAS,GAAmB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAClE,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC;YAChD,oCAAoC;YACpC,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACvC,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrD,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC;wBAClB,OAAO,GAAG,GAAG,CAAC;wBACd,WAAW,GAAG,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;gBACD,OAAO,WAAW,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,oBAAoB;YACpB,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,QAAQ,GAAG,WAAW,CAAC;YACvB,IAAI,CAAC,OAAO;gBAAE,MAAM;YAEpB,mBAAmB;YACnB,MAAM,YAAY,GAAmB,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YAED,sBAAsB;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClB,IAAI,IAAI,GAAG,CAAC,CAAC;oBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC7B,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;wBAChC,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClD,CAAC;oBACD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC7B,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;YACD,SAAS,GAAG,YAAY,CAAC;QAC3B,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,CAAC,WAAW,CAAC,KAAe,EAAE,YAAoB,EAAE;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM;oBACJ,KAAK,EAAE,CAAC,GAAG,CAAC;oBACZ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;iBACzB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY,EAAE,MAAc,GAAG;QACzC,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAExC,0CAA0C;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC;YACjC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAC/C,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAClD,CAAC;QAED,YAAY;QACZ,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACvB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,CAAe,EAAE,CAAe;QAC/C,IAAI,cAAc,EAAE,gBAAgB,EAAE,CAAC;YACrC,OAAO,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,cAAc;QACd,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC;QACxD,MAAM,aAAa,GAAG,cAAc,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC;QAEzD,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,gBAAgB,EAAE,SAAS;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,YAAY,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACvF,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAC5D,aAAa,EAAE,aAAa,CAAC,aAAa,IAAI,aAAa;YAC3D,eAAe,EAAE,aAAa,CAAC,WAAW,IAAI,SAAS;SACxD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,cAAc,EAAE,QAAQ,EAAE,CAAC;YAC7B,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK;QAChB,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC7C,CAAC;QACD,gBAAgB,CAAC,QAAQ,GAAG,IAAI,CAAC;QACjC,aAAa,GAAG,IAAI,CAAC;QACrB,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;;AAGH,0BAA0B;AAC1B,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAY;IACtC,OAAO,mBAAmB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAe;IAC9C,OAAO,mBAAmB,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,KAAa;IAC/D,OAAO,mBAAmB,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc,GAAG;IACzD,OAAO,mBAAmB,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAe;IACpD,OAAO,mBAAmB,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,OAAe,CAAC;IAClE,OAAO,mBAAmB,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAe,EAAE,YAAoB,GAAG;IAC3E,OAAO,mBAAmB,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAe,EAAE,IAAY,CAAC;IAC/D,OAAO,mBAAmB,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC","sourcesContent":["/**\n * EmbeddingService - Unified embedding interface for agentic-flow\n *\n * Uses ruvector@0.1.61+ for ONNX embeddings with:\n * - SIMD128 acceleration (6x faster)\n * - Parallel worker threads (7 workers)\n * - all-MiniLM-L6-v2 model (384 dimensions)\n *\n * Configure via:\n * - AGENTIC_FLOW_EMBEDDINGS=simple|onnx|auto (default: auto)\n * - AGENTIC_FLOW_EMBEDDING_MODEL=all-MiniLM-L6-v2 (default)\n */\n\nexport type EmbeddingBackend = 'simple' | 'onnx' | 'auto';\n\nexport interface EmbeddingStats {\n backend: EmbeddingBackend;\n effectiveBackend: EmbeddingBackend;\n dimension: number;\n totalEmbeddings: number;\n totalLatencyMs: number;\n avgLatencyMs: number;\n cacheHits: number;\n modelLoaded: boolean;\n modelName?: string;\n simdAvailable?: boolean;\n parallelWorkers?: number;\n}\n\nexport interface SimilarityResult {\n similarity: number;\n timeMs: number;\n}\n\nexport interface SearchResult {\n text: string;\n index: number;\n similarity: number;\n}\n\nexport interface DuplicateGroup {\n indices: number[];\n texts: string[];\n similarity: number;\n}\n\n// Ruvector embedding result types\ninterface EmbeddingResult {\n embedding: Float32Array;\n timeMs?: number;\n}\n\ninterface BatchEmbeddingResult {\n embeddings: Float32Array[];\n timeMs?: number;\n}\n\n// Ruvector module interface\ninterface RuvectorModule {\n isOnnxAvailable: () => boolean;\n getDefaultEmbeddingService: () => any;\n embed: (text: string) => Promise<EmbeddingResult | null>;\n embedBatch: (texts: string[]) => Promise<BatchEmbeddingResult | null>;\n similarity: (text1: string, text2: string) => Promise<SimilarityResult>;\n toFloat32Array: (arr: number[]) => Float32Array;\n cosineSimilarity: (a: Float32Array, b: Float32Array) => number;\n getStats: () => any;\n shutdown: () => Promise<void>;\n}\n\n// ONNX availability cache\nlet onnxAvailable: boolean | null = null;\nlet ruvectorModule: RuvectorModule | null = null;\n\n/**\n * Detect ONNX/SIMD support by loading ruvector\n */\nasync function detectOnnx(): Promise<boolean> {\n if (onnxAvailable !== null) {\n return onnxAvailable;\n }\n\n try {\n const mod = await import('ruvector') as unknown as RuvectorModule;\n ruvectorModule = mod;\n onnxAvailable = mod.isOnnxAvailable?.() ?? false;\n return onnxAvailable;\n } catch (error) {\n // Ruvector loading failed - fall back to simple embeddings\n onnxAvailable = false;\n return false;\n }\n}\n\n// Simple LRU cache for embeddings\nclass EmbeddingCache {\n private cache: Map<string, Float32Array> = new Map();\n private maxSize: number;\n\n constructor(maxSize: number = 1000) {\n this.maxSize = maxSize;\n }\n\n get(key: string): Float32Array | undefined {\n const value = this.cache.get(key);\n if (value) {\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n\n set(key: string, value: Float32Array): void {\n if (this.cache.size >= this.maxSize) {\n // Delete oldest (first) entry\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(key, value);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n get size(): number {\n return this.cache.size;\n }\n}\n\nexport class EmbeddingService {\n private static instance: EmbeddingService | null = null;\n\n private backend: EmbeddingBackend;\n private effectiveBackend: EmbeddingBackend | null = null;\n private dimension: number;\n private modelName: string;\n\n // ONNX state\n private modelLoaded: boolean = false;\n private loadingPromise: Promise<void> | null = null;\n\n // Stats\n private totalEmbeddings: number = 0;\n private totalLatencyMs: number = 0;\n private cacheHits: number = 0;\n\n // Cache\n private cache: EmbeddingCache;\n private cacheEnabled: boolean;\n\n // Corpus for search operations\n private corpus: { texts: string[]; embeddings: Float32Array[] } = { texts: [], embeddings: [] };\n\n private constructor() {\n // Default to 'auto' which will detect ONNX and use it if available\n this.backend = (process.env.AGENTIC_FLOW_EMBEDDINGS as EmbeddingBackend) || 'auto';\n this.modelName = process.env.AGENTIC_FLOW_EMBEDDING_MODEL || 'all-MiniLM-L6-v2';\n this.dimension = 256; // Will be updated when ONNX loads (384)\n this.cacheEnabled = process.env.AGENTIC_FLOW_EMBEDDING_CACHE !== 'false';\n this.cache = new EmbeddingCache(1000);\n }\n\n static getInstance(): EmbeddingService {\n if (!EmbeddingService.instance) {\n EmbeddingService.instance = new EmbeddingService();\n }\n return EmbeddingService.instance;\n }\n\n /**\n * Resolve the effective backend based on ONNX detection\n */\n private async resolveBackend(): Promise<EmbeddingBackend> {\n if (this.effectiveBackend) {\n return this.effectiveBackend;\n }\n\n if (this.backend === 'auto') {\n const hasOnnx = await detectOnnx();\n this.effectiveBackend = hasOnnx ? 'onnx' : 'simple';\n if (hasOnnx) {\n this.dimension = 384; // all-MiniLM-L6-v2 dimension\n }\n } else {\n this.effectiveBackend = this.backend;\n if (this.backend === 'onnx') {\n await detectOnnx(); // Ensure module is loaded\n this.dimension = 384;\n }\n }\n\n return this.effectiveBackend;\n }\n\n /**\n * Get configured backend (may be 'auto')\n */\n getBackend(): EmbeddingBackend {\n return this.backend;\n }\n\n /**\n * Get effective backend after detection\n */\n getEffectiveBackend(): EmbeddingBackend {\n return this.effectiveBackend || this.backend;\n }\n\n /**\n * Get embedding dimension\n */\n getDimension(): number {\n return this.dimension;\n }\n\n /**\n * Check if ONNX model is loaded\n */\n isModelLoaded(): boolean {\n return this.modelLoaded;\n }\n\n /**\n * Generate embedding for text\n * Auto-detects ONNX and uses it if available (default behavior)\n */\n async embed(text: string): Promise<Float32Array> {\n const startTime = performance.now();\n\n // Check cache\n if (this.cacheEnabled) {\n const cached = this.cache.get(text);\n if (cached) {\n this.cacheHits++;\n return cached;\n }\n }\n\n // Resolve backend (handles 'auto' mode)\n const effectiveBackend = await this.resolveBackend();\n let embedding: Float32Array;\n\n if (effectiveBackend === 'onnx' && ruvectorModule) {\n const result = await ruvectorModule.embed(text);\n if (result?.embedding) {\n embedding = result.embedding;\n this.modelLoaded = true;\n } else {\n embedding = this.simpleEmbed(text);\n }\n } else {\n embedding = this.simpleEmbed(text);\n }\n\n // Update stats\n this.totalEmbeddings++;\n this.totalLatencyMs += performance.now() - startTime;\n\n // Cache result\n if (this.cacheEnabled) {\n this.cache.set(text, embedding);\n }\n\n return embedding;\n }\n\n /**\n * Generate embeddings for multiple texts (batch processing with parallel workers)\n * Batch processing provides significant speedup with parallel ONNX workers\n */\n async embedBatch(texts: string[]): Promise<Float32Array[]> {\n const startTime = performance.now();\n\n // Check cache for all texts first\n if (this.cacheEnabled) {\n const cachedResults: (Float32Array | null)[] = texts.map(t => this.cache.get(t) || null);\n const allCached = cachedResults.every(r => r !== null);\n if (allCached) {\n this.cacheHits += texts.length;\n return cachedResults as Float32Array[];\n }\n }\n\n // Resolve backend\n const effectiveBackend = await this.resolveBackend();\n\n if (effectiveBackend === 'onnx' && ruvectorModule) {\n const result = await ruvectorModule.embedBatch(texts);\n if (result?.embeddings && result.embeddings.length === texts.length) {\n const embeddings = result.embeddings;\n\n // Cache individual embeddings\n if (this.cacheEnabled) {\n for (let i = 0; i < texts.length; i++) {\n this.cache.set(texts[i], embeddings[i]);\n }\n }\n\n // Update stats\n this.totalEmbeddings += texts.length;\n this.totalLatencyMs += performance.now() - startTime;\n this.modelLoaded = true;\n\n return embeddings;\n }\n }\n\n // Fall back to sequential for simple backend\n return Promise.all(texts.map(t => this.embed(t)));\n }\n\n /**\n * Compute similarity between two texts\n */\n async similarity(text1: string, text2: string): Promise<number> {\n const effectiveBackend = await this.resolveBackend();\n\n if (effectiveBackend === 'onnx' && ruvectorModule) {\n const result = await ruvectorModule.similarity(text1, text2);\n return result.similarity;\n }\n\n // Fall back to embedding + cosine\n const [e1, e2] = await Promise.all([this.embed(text1), this.embed(text2)]);\n return this.cosineSimilarity(e1, e2);\n }\n\n /**\n * Compute NxN similarity matrix for a list of texts\n * Uses parallel workers for ONNX backend\n */\n async similarityMatrix(texts: string[]): Promise<number[][]> {\n const embeddings = await this.embedBatch(texts);\n const n = texts.length;\n const matrix: number[][] = Array(n).fill(null).map(() => Array(n).fill(0));\n\n for (let i = 0; i < n; i++) {\n matrix[i][i] = 1.0; // Self-similarity\n for (let j = i + 1; j < n; j++) {\n const sim = this.cosineSimilarity(embeddings[i], embeddings[j]);\n matrix[i][j] = sim;\n matrix[j][i] = sim; // Symmetric\n }\n }\n\n return matrix;\n }\n\n /**\n * Build a corpus for semantic search\n */\n async buildCorpus(texts: string[]): Promise<void> {\n this.corpus.texts = texts;\n this.corpus.embeddings = await this.embedBatch(texts);\n }\n\n /**\n * Semantic search against the corpus\n * Returns top-k most similar texts\n */\n async semanticSearch(query: string, topK: number = 5): Promise<SearchResult[]> {\n if (this.corpus.texts.length === 0) {\n throw new Error('Corpus not built. Call buildCorpus() first.');\n }\n\n const queryEmbedding = await this.embed(query);\n const results: SearchResult[] = [];\n\n for (let i = 0; i < this.corpus.texts.length; i++) {\n const sim = this.cosineSimilarity(queryEmbedding, this.corpus.embeddings[i]);\n results.push({\n text: this.corpus.texts[i],\n index: i,\n similarity: sim,\n });\n }\n\n // Sort by similarity (descending) and return top-k\n results.sort((a, b) => b.similarity - a.similarity);\n return results.slice(0, topK);\n }\n\n /**\n * Find near-duplicate texts in a list\n * Groups texts with similarity above threshold\n */\n async findDuplicates(texts: string[], threshold: number = 0.9): Promise<DuplicateGroup[]> {\n const embeddings = await this.embedBatch(texts);\n const n = texts.length;\n const visited = new Set<number>();\n const groups: DuplicateGroup[] = [];\n\n for (let i = 0; i < n; i++) {\n if (visited.has(i)) continue;\n\n const group: DuplicateGroup = {\n indices: [i],\n texts: [texts[i]],\n similarity: 1.0,\n };\n\n for (let j = i + 1; j < n; j++) {\n if (visited.has(j)) continue;\n\n const sim = this.cosineSimilarity(embeddings[i], embeddings[j]);\n if (sim >= threshold) {\n group.indices.push(j);\n group.texts.push(texts[j]);\n group.similarity = Math.min(group.similarity, sim);\n visited.add(j);\n }\n }\n\n if (group.indices.length > 1) {\n visited.add(i);\n groups.push(group);\n }\n }\n\n return groups;\n }\n\n /**\n * K-means clustering of texts\n * Returns cluster assignments and centroids\n */\n async clusterTexts(\n texts: string[],\n k: number = 3,\n maxIterations: number = 100\n ): Promise<{ clusters: number[]; centroids: Float32Array[] }> {\n const embeddings = await this.embedBatch(texts);\n const n = texts.length;\n const dim = this.dimension;\n\n // Initialize centroids randomly (copy to new ArrayBuffer for consistent typing)\n const centroidIndices = new Set<number>();\n while (centroidIndices.size < k && centroidIndices.size < n) {\n centroidIndices.add(Math.floor(Math.random() * n));\n }\n let centroids: Float32Array[] = Array.from(centroidIndices).map(i => {\n const copy = new Float32Array(dim);\n copy.set(embeddings[i]);\n return copy;\n });\n\n let clusters = new Array(n).fill(0);\n\n for (let iter = 0; iter < maxIterations; iter++) {\n // Assign points to nearest centroid\n const newClusters = embeddings.map(emb => {\n let bestCluster = 0;\n let bestSim = -Infinity;\n for (let c = 0; c < k; c++) {\n const sim = this.cosineSimilarity(emb, centroids[c]);\n if (sim > bestSim) {\n bestSim = sim;\n bestCluster = c;\n }\n }\n return bestCluster;\n });\n\n // Check convergence\n const changed = newClusters.some((c, i) => c !== clusters[i]);\n clusters = newClusters;\n if (!changed) break;\n\n // Update centroids\n const newCentroids: Float32Array[] = [];\n for (let c = 0; c < k; c++) {\n newCentroids.push(new Float32Array(dim));\n }\n const counts = new Array(k).fill(0);\n\n for (let i = 0; i < n; i++) {\n const c = clusters[i];\n counts[c]++;\n for (let d = 0; d < dim; d++) {\n newCentroids[c][d] += embeddings[i][d];\n }\n }\n\n // Normalize centroids\n for (let c = 0; c < k; c++) {\n if (counts[c] > 0) {\n let norm = 0;\n for (let d = 0; d < dim; d++) {\n newCentroids[c][d] /= counts[c];\n norm += newCentroids[c][d] * newCentroids[c][d];\n }\n norm = Math.sqrt(norm) || 1;\n for (let d = 0; d < dim; d++) {\n newCentroids[c][d] /= norm;\n }\n }\n }\n centroids = newCentroids;\n }\n\n return { clusters, centroids };\n }\n\n /**\n * Stream embeddings for large batches (memory efficient)\n * Yields embeddings one at a time\n */\n async *streamEmbed(texts: string[], batchSize: number = 32): AsyncGenerator<{ index: number; text: string; embedding: Float32Array }> {\n for (let i = 0; i < texts.length; i += batchSize) {\n const batch = texts.slice(i, i + batchSize);\n const embeddings = await this.embedBatch(batch);\n\n for (let j = 0; j < batch.length; j++) {\n yield {\n index: i + j,\n text: batch[j],\n embedding: embeddings[j],\n };\n }\n }\n }\n\n /**\n * Simple hash-based embedding (fast, not semantic)\n */\n simpleEmbed(text: string, dim: number = 256): Float32Array {\n const embedding = new Float32Array(dim);\n\n // Multi-pass hash for better distribution\n for (let i = 0; i < text.length; i++) {\n const code = text.charCodeAt(i);\n embedding[i % dim] += code / 255;\n embedding[(i * 7) % dim] += (code * 0.3) / 255;\n embedding[(i * 13) % dim] += (code * 0.2) / 255;\n }\n\n // Normalize\n let norm = 0;\n for (let i = 0; i < dim; i++) {\n norm += embedding[i] * embedding[i];\n }\n norm = Math.sqrt(norm) || 1;\n for (let i = 0; i < dim; i++) {\n embedding[i] /= norm;\n }\n\n return embedding;\n }\n\n /**\n * Compute cosine similarity between two embeddings\n */\n cosineSimilarity(a: Float32Array, b: Float32Array): number {\n if (ruvectorModule?.cosineSimilarity) {\n return ruvectorModule.cosineSimilarity(a, b);\n }\n\n // JS fallback\n let dot = 0;\n let normA = 0;\n let normB = 0;\n for (let i = 0; i < a.length; i++) {\n dot += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n return dot / (Math.sqrt(normA) * Math.sqrt(normB) || 1);\n }\n\n /**\n * Get statistics\n */\n getStats(): EmbeddingStats {\n const effective = this.effectiveBackend || this.backend;\n const ruvectorStats = ruvectorModule?.getStats?.() || {};\n\n return {\n backend: this.backend,\n effectiveBackend: effective,\n dimension: this.dimension,\n totalEmbeddings: this.totalEmbeddings,\n totalLatencyMs: this.totalLatencyMs,\n avgLatencyMs: this.totalEmbeddings > 0 ? this.totalLatencyMs / this.totalEmbeddings : 0,\n cacheHits: this.cacheHits,\n modelLoaded: this.modelLoaded,\n modelName: effective === 'onnx' ? this.modelName : undefined,\n simdAvailable: ruvectorStats.simdAvailable ?? onnxAvailable,\n parallelWorkers: ruvectorStats.workerCount ?? undefined,\n };\n }\n\n /**\n * Clear cache\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Clear corpus\n */\n clearCorpus(): void {\n this.corpus = { texts: [], embeddings: [] };\n }\n\n /**\n * Shutdown (cleanup workers)\n */\n async shutdown(): Promise<void> {\n if (ruvectorModule?.shutdown) {\n await ruvectorModule.shutdown();\n }\n }\n\n /**\n * Reset instance (for testing)\n */\n static async reset(): Promise<void> {\n if (EmbeddingService.instance) {\n await EmbeddingService.instance.shutdown();\n }\n EmbeddingService.instance = null;\n onnxAvailable = null;\n ruvectorModule = null;\n }\n}\n\n// Export singleton getter\nexport function getEmbeddingService(): EmbeddingService {\n return EmbeddingService.getInstance();\n}\n\n// Export convenience functions\nexport async function embed(text: string): Promise<Float32Array> {\n return getEmbeddingService().embed(text);\n}\n\nexport async function embedBatch(texts: string[]): Promise<Float32Array[]> {\n return getEmbeddingService().embedBatch(texts);\n}\n\nexport async function textSimilarity(text1: string, text2: string): Promise<number> {\n return getEmbeddingService().similarity(text1, text2);\n}\n\nexport function simpleEmbed(text: string, dim: number = 256): Float32Array {\n return getEmbeddingService().simpleEmbed(text, dim);\n}\n\nexport async function similarityMatrix(texts: string[]): Promise<number[][]> {\n return getEmbeddingService().similarityMatrix(texts);\n}\n\nexport async function semanticSearch(query: string, topK: number = 5): Promise<SearchResult[]> {\n return getEmbeddingService().semanticSearch(query, topK);\n}\n\nexport async function findDuplicates(texts: string[], threshold: number = 0.9): Promise<DuplicateGroup[]> {\n return getEmbeddingService().findDuplicates(texts, threshold);\n}\n\nexport async function clusterTexts(texts: string[], k: number = 3): Promise<{ clusters: number[]; centroids: Float32Array[] }> {\n return getEmbeddingService().clusterTexts(texts, k);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"EmbeddingService.js","sourceRoot":"","sources":["../../src/intelligence/EmbeddingService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,iBAAiB,EAAuB,MAAM,qBAAqB,CAAC;AAoE7E,0BAA0B;AAC1B,IAAI,aAAa,GAAmB,IAAI,CAAC;AACzC,IAAI,cAAc,GAA0B,IAAI,CAAC;AAEjD;;GAEG;AACH,KAAK,UAAU,UAAU;IACvB,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAA8B,CAAC;QAClE,cAAc,GAAG,GAAG,CAAC;QACrB,aAAa,GAAG,GAAG,CAAC,eAAe,EAAE,EAAE,IAAI,KAAK,CAAC;QACjD,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2DAA2D;QAC3D,aAAa,GAAG,KAAK,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,oDAAoD;AACpD,MAAM,QAAQ;IACJ,KAAK,GAA8B,IAAI,GAAG,EAAE,CAAC;IAC7C,OAAO,CAAS;IAExB,YAAY,UAAkB,IAAI;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,KAAK,EAAE,CAAC;YACV,mCAAmC;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAmB;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAChD,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAC,QAAQ,GAA4B,IAAI,CAAC;IAEhD,OAAO,CAAmB;IAC1B,gBAAgB,GAA4B,IAAI,CAAC;IACjD,SAAS,CAAS;IAClB,SAAS,CAAS;IAE1B,aAAa;IACL,WAAW,GAAY,KAAK,CAAC;IAC7B,cAAc,GAAyB,IAAI,CAAC;IAEpD,QAAQ;IACA,eAAe,GAAW,CAAC,CAAC;IAC5B,cAAc,GAAW,CAAC,CAAC;IAC3B,SAAS,GAAW,CAAC,CAAC;IAE9B,wBAAwB;IAChB,KAAK,CAAW;IAChB,YAAY,CAAU;IAE9B,4BAA4B;IACpB,eAAe,GAA0B,IAAI,CAAC;IAC9C,sBAAsB,CAAU;IAExC,+BAA+B;IACvB,MAAM,GAAoD,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAEhG;QACE,mEAAmE;QACnE,IAAI,CAAC,OAAO,GAAI,OAAO,CAAC,GAAG,CAAC,uBAA4C,IAAI,MAAM,CAAC;QACnF,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,kBAAkB,CAAC;QAChF,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,wCAAwC;QAC9D,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,OAAO,CAAC;QACzE,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,OAAO,CAAC;QACpF,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEhC,8BAA8B;QAC9B,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,IAAI,CAAC,eAAe,GAAG,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAC;gBACxE,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC/B,gBAAgB,CAAC,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACrD,CAAC;QACD,OAAO,gBAAgB,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAC/B,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;YACpD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,6BAA6B;YACrD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC;YACrC,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;gBAC5B,MAAM,UAAU,EAAE,CAAC,CAAC,0BAA0B;gBAC9C,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,wCAAwC;QACxC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,0DAA0D;gBAC1D,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC/B,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACrD,IAAI,SAAuB,CAAC;QAE5B,IAAI,gBAAgB,KAAK,MAAM,IAAI,cAAc,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC;gBACtB,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;gBAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAED,eAAe;QACf,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAErD,yBAAyB;QACzB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClC,CAAC;QAED,gDAAgD;QAChD,IAAI,IAAI,CAAC,eAAe,IAAI,gBAAgB,KAAK,MAAM,EAAE,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,kCAAkC;QAClC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,aAAa,GAA4B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YACzF,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACvD,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;gBAC/B,OAAO,aAA+B,CAAC;YACzC,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAErD,IAAI,gBAAgB,KAAK,MAAM,IAAI,cAAc,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,MAAM,EAAE,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;gBACpE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;gBAErC,8BAA8B;gBAC9B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;gBAED,eAAe;gBACf,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC;gBACrC,IAAI,CAAC,cAAc,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBACrD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBAExB,OAAO,UAAU,CAAC;YACpB,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,KAAa;QAC3C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAErD,IAAI,gBAAgB,KAAK,MAAM,IAAI,cAAc,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC7D,OAAO,MAAM,CAAC,UAAU,CAAC;QAC3B,CAAC;QAED,kCAAkC;QAClC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAe;QACpC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,MAAM,MAAM,GAAe,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,kBAAkB;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACnB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,YAAY;YAClC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,KAAe;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,OAAe,CAAC;QAClD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1B,KAAK,EAAE,CAAC;gBACR,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QAED,mDAAmD;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,KAAe,EAAE,YAAoB,GAAG;QAC3D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,MAAM,GAAqB,EAAE,CAAC;QAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,SAAS;YAE7B,MAAM,KAAK,GAAmB;gBAC5B,OAAO,EAAE,CAAC,CAAC,CAAC;gBACZ,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjB,UAAU,EAAE,GAAG;aAChB,CAAC;YAEF,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,SAAS;gBAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;oBACrB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACtB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3B,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;oBACnD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAChB,KAAe,EACf,IAAY,CAAC,EACb,gBAAwB,GAAG;QAE3B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAE3B,gFAAgF;QAChF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAC1C,OAAO,eAAe,CAAC,IAAI,GAAG,CAAC,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5D,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,SAAS,GAAmB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAClE,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC;YAChD,oCAAoC;YACpC,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACvC,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrD,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC;wBAClB,OAAO,GAAG,GAAG,CAAC;wBACd,WAAW,GAAG,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;gBACD,OAAO,WAAW,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,oBAAoB;YACpB,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,QAAQ,GAAG,WAAW,CAAC;YACvB,IAAI,CAAC,OAAO;gBAAE,MAAM;YAEpB,mBAAmB;YACnB,MAAM,YAAY,GAAmB,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YAED,sBAAsB;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClB,IAAI,IAAI,GAAG,CAAC,CAAC;oBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC7B,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;wBAChC,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClD,CAAC;oBACD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC7B,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;YACD,SAAS,GAAG,YAAY,CAAC;QAC3B,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,CAAC,WAAW,CAAC,KAAe,EAAE,YAAoB,EAAE;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM;oBACJ,KAAK,EAAE,CAAC,GAAG,CAAC;oBACZ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;iBACzB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY,EAAE,MAAc,GAAG;QACzC,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAExC,0CAA0C;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC;YACjC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAC/C,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAClD,CAAC;QAED,YAAY;QACZ,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACvB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,CAAe,EAAE,CAAe;QAC/C,IAAI,cAAc,EAAE,gBAAgB,EAAE,CAAC;YACrC,OAAO,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,cAAc;QACd,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC;QACxD,MAAM,aAAa,GAAG,cAAc,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC;QAEzD,6BAA6B;QAC7B,IAAI,oBAAmE,CAAC;QACxE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;YACnD,oBAAoB,GAAG;gBACrB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,UAAU,CAAC,YAAY;gBAChC,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;aACpD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,gBAAgB,EAAE,SAAS;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,YAAY,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACvF,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAC5D,aAAa,EAAE,aAAa,CAAC,aAAa,IAAI,aAAa;YAC3D,eAAe,EAAE,aAAa,CAAC,WAAW,IAAI,SAAS;YACvD,eAAe,EAAE,oBAAoB;SACtC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QAC9C,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,YAAY;YAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,cAAc,EAAE,QAAQ,EAAE,CAAC;YAC7B,MAAM,cAAc,CAAC,QAAQ,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK;QAChB,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC7C,CAAC;QACD,gBAAgB,CAAC,QAAQ,GAAG,IAAI,CAAC;QACjC,aAAa,GAAG,IAAI,CAAC;QACrB,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;;AAGH,0BAA0B;AAC1B,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAY;IACtC,OAAO,mBAAmB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAe;IAC9C,OAAO,mBAAmB,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,KAAa;IAC/D,OAAO,mBAAmB,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc,GAAG;IACzD,OAAO,mBAAmB,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAe;IACpD,OAAO,mBAAmB,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,OAAe,CAAC;IAClE,OAAO,mBAAmB,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAe,EAAE,YAAoB,GAAG;IAC3E,OAAO,mBAAmB,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAe,EAAE,IAAY,CAAC;IAC/D,OAAO,mBAAmB,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC","sourcesContent":["/**\n * EmbeddingService - Unified embedding interface for agentic-flow\n *\n * Uses ruvector@0.1.61+ for ONNX embeddings with:\n * - SIMD128 acceleration (6x faster)\n * - Parallel worker threads (7 workers)\n * - all-MiniLM-L6-v2 model (384 dimensions)\n * - Persistent SQLite cache (0.1ms vs 400ms)\n *\n * Configure via:\n * - AGENTIC_FLOW_EMBEDDINGS=simple|onnx|auto (default: auto)\n * - AGENTIC_FLOW_EMBEDDING_MODEL=all-MiniLM-L6-v2 (default)\n * - AGENTIC_FLOW_EMBEDDING_CACHE=true|false (default: true)\n * - AGENTIC_FLOW_PERSISTENT_CACHE=true|false (default: true)\n */\n\nimport { getEmbeddingCache, type EmbeddingCache } from './EmbeddingCache.js';\n\nexport type EmbeddingBackend = 'simple' | 'onnx' | 'auto';\n\nexport interface EmbeddingStats {\n backend: EmbeddingBackend;\n effectiveBackend: EmbeddingBackend;\n dimension: number;\n totalEmbeddings: number;\n totalLatencyMs: number;\n avgLatencyMs: number;\n cacheHits: number;\n modelLoaded: boolean;\n modelName?: string;\n simdAvailable?: boolean;\n parallelWorkers?: number;\n // Persistent cache stats\n persistentCache?: {\n enabled: boolean;\n entries: number;\n hits: number;\n misses: number;\n hitRate: number;\n dbSizeKB: number;\n };\n}\n\nexport interface SimilarityResult {\n similarity: number;\n timeMs: number;\n}\n\nexport interface SearchResult {\n text: string;\n index: number;\n similarity: number;\n}\n\nexport interface DuplicateGroup {\n indices: number[];\n texts: string[];\n similarity: number;\n}\n\n// Ruvector embedding result types\ninterface EmbeddingResult {\n embedding: Float32Array;\n timeMs?: number;\n}\n\ninterface BatchEmbeddingResult {\n embeddings: Float32Array[];\n timeMs?: number;\n}\n\n// Ruvector module interface\ninterface RuvectorModule {\n isOnnxAvailable: () => boolean;\n getDefaultEmbeddingService: () => any;\n embed: (text: string) => Promise<EmbeddingResult | null>;\n embedBatch: (texts: string[]) => Promise<BatchEmbeddingResult | null>;\n similarity: (text1: string, text2: string) => Promise<SimilarityResult>;\n toFloat32Array: (arr: number[]) => Float32Array;\n cosineSimilarity: (a: Float32Array, b: Float32Array) => number;\n getStats: () => any;\n shutdown: () => Promise<void>;\n}\n\n// ONNX availability cache\nlet onnxAvailable: boolean | null = null;\nlet ruvectorModule: RuvectorModule | null = null;\n\n/**\n * Detect ONNX/SIMD support by loading ruvector\n */\nasync function detectOnnx(): Promise<boolean> {\n if (onnxAvailable !== null) {\n return onnxAvailable;\n }\n\n try {\n const mod = await import('ruvector') as unknown as RuvectorModule;\n ruvectorModule = mod;\n onnxAvailable = mod.isOnnxAvailable?.() ?? false;\n return onnxAvailable;\n } catch (error) {\n // Ruvector loading failed - fall back to simple embeddings\n onnxAvailable = false;\n return false;\n }\n}\n\n// Simple LRU cache for embeddings (in-memory, fast)\nclass LRUCache {\n private cache: Map<string, Float32Array> = new Map();\n private maxSize: number;\n\n constructor(maxSize: number = 1000) {\n this.maxSize = maxSize;\n }\n\n get(key: string): Float32Array | undefined {\n const value = this.cache.get(key);\n if (value) {\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n\n set(key: string, value: Float32Array): void {\n if (this.cache.size >= this.maxSize) {\n // Delete oldest (first) entry\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(key, value);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n get size(): number {\n return this.cache.size;\n }\n}\n\nexport class EmbeddingService {\n private static instance: EmbeddingService | null = null;\n\n private backend: EmbeddingBackend;\n private effectiveBackend: EmbeddingBackend | null = null;\n private dimension: number;\n private modelName: string;\n\n // ONNX state\n private modelLoaded: boolean = false;\n private loadingPromise: Promise<void> | null = null;\n\n // Stats\n private totalEmbeddings: number = 0;\n private totalLatencyMs: number = 0;\n private cacheHits: number = 0;\n\n // Cache (in-memory LRU)\n private cache: LRUCache;\n private cacheEnabled: boolean;\n\n // Persistent cache (SQLite)\n private persistentCache: EmbeddingCache | null = null;\n private persistentCacheEnabled: boolean;\n\n // Corpus for search operations\n private corpus: { texts: string[]; embeddings: Float32Array[] } = { texts: [], embeddings: [] };\n\n private constructor() {\n // Default to 'auto' which will detect ONNX and use it if available\n this.backend = (process.env.AGENTIC_FLOW_EMBEDDINGS as EmbeddingBackend) || 'auto';\n this.modelName = process.env.AGENTIC_FLOW_EMBEDDING_MODEL || 'all-MiniLM-L6-v2';\n this.dimension = 256; // Will be updated when ONNX loads (384)\n this.cacheEnabled = process.env.AGENTIC_FLOW_EMBEDDING_CACHE !== 'false';\n this.persistentCacheEnabled = process.env.AGENTIC_FLOW_PERSISTENT_CACHE !== 'false';\n this.cache = new LRUCache(1000);\n\n // Initialize persistent cache\n if (this.persistentCacheEnabled) {\n try {\n this.persistentCache = getEmbeddingCache({ dimension: 384 });\n } catch (error) {\n console.warn('[EmbeddingService] Persistent cache unavailable:', error);\n this.persistentCacheEnabled = false;\n }\n }\n }\n\n static getInstance(): EmbeddingService {\n if (!EmbeddingService.instance) {\n EmbeddingService.instance = new EmbeddingService();\n }\n return EmbeddingService.instance;\n }\n\n /**\n * Resolve the effective backend based on ONNX detection\n */\n private async resolveBackend(): Promise<EmbeddingBackend> {\n if (this.effectiveBackend) {\n return this.effectiveBackend;\n }\n\n if (this.backend === 'auto') {\n const hasOnnx = await detectOnnx();\n this.effectiveBackend = hasOnnx ? 'onnx' : 'simple';\n if (hasOnnx) {\n this.dimension = 384; // all-MiniLM-L6-v2 dimension\n }\n } else {\n this.effectiveBackend = this.backend;\n if (this.backend === 'onnx') {\n await detectOnnx(); // Ensure module is loaded\n this.dimension = 384;\n }\n }\n\n return this.effectiveBackend;\n }\n\n /**\n * Get configured backend (may be 'auto')\n */\n getBackend(): EmbeddingBackend {\n return this.backend;\n }\n\n /**\n * Get effective backend after detection\n */\n getEffectiveBackend(): EmbeddingBackend {\n return this.effectiveBackend || this.backend;\n }\n\n /**\n * Get embedding dimension\n */\n getDimension(): number {\n return this.dimension;\n }\n\n /**\n * Check if ONNX model is loaded\n */\n isModelLoaded(): boolean {\n return this.modelLoaded;\n }\n\n /**\n * Generate embedding for text\n * Auto-detects ONNX and uses it if available (default behavior)\n */\n async embed(text: string): Promise<Float32Array> {\n const startTime = performance.now();\n\n // Check in-memory cache first (fastest)\n if (this.cacheEnabled) {\n const cached = this.cache.get(text);\n if (cached) {\n this.cacheHits++;\n return cached;\n }\n }\n\n // Check persistent cache (SQLite, ~0.1ms)\n if (this.persistentCache) {\n const cached = this.persistentCache.get(text, this.modelName);\n if (cached) {\n this.cacheHits++;\n // Also store in memory cache for faster subsequent access\n if (this.cacheEnabled) {\n this.cache.set(text, cached);\n }\n return cached;\n }\n }\n\n // Resolve backend (handles 'auto' mode)\n const effectiveBackend = await this.resolveBackend();\n let embedding: Float32Array;\n\n if (effectiveBackend === 'onnx' && ruvectorModule) {\n const result = await ruvectorModule.embed(text);\n if (result?.embedding) {\n embedding = result.embedding;\n this.modelLoaded = true;\n } else {\n embedding = this.simpleEmbed(text);\n }\n } else {\n embedding = this.simpleEmbed(text);\n }\n\n // Update stats\n this.totalEmbeddings++;\n this.totalLatencyMs += performance.now() - startTime;\n\n // Cache result in memory\n if (this.cacheEnabled) {\n this.cache.set(text, embedding);\n }\n\n // Cache result persistently (for cross-session)\n if (this.persistentCache && effectiveBackend === 'onnx') {\n this.persistentCache.set(text, embedding, this.modelName);\n }\n\n return embedding;\n }\n\n /**\n * Generate embeddings for multiple texts (batch processing with parallel workers)\n * Batch processing provides significant speedup with parallel ONNX workers\n */\n async embedBatch(texts: string[]): Promise<Float32Array[]> {\n const startTime = performance.now();\n\n // Check cache for all texts first\n if (this.cacheEnabled) {\n const cachedResults: (Float32Array | null)[] = texts.map(t => this.cache.get(t) || null);\n const allCached = cachedResults.every(r => r !== null);\n if (allCached) {\n this.cacheHits += texts.length;\n return cachedResults as Float32Array[];\n }\n }\n\n // Resolve backend\n const effectiveBackend = await this.resolveBackend();\n\n if (effectiveBackend === 'onnx' && ruvectorModule) {\n const result = await ruvectorModule.embedBatch(texts);\n if (result?.embeddings && result.embeddings.length === texts.length) {\n const embeddings = result.embeddings;\n\n // Cache individual embeddings\n if (this.cacheEnabled) {\n for (let i = 0; i < texts.length; i++) {\n this.cache.set(texts[i], embeddings[i]);\n }\n }\n\n // Update stats\n this.totalEmbeddings += texts.length;\n this.totalLatencyMs += performance.now() - startTime;\n this.modelLoaded = true;\n\n return embeddings;\n }\n }\n\n // Fall back to sequential for simple backend\n return Promise.all(texts.map(t => this.embed(t)));\n }\n\n /**\n * Compute similarity between two texts\n */\n async similarity(text1: string, text2: string): Promise<number> {\n const effectiveBackend = await this.resolveBackend();\n\n if (effectiveBackend === 'onnx' && ruvectorModule) {\n const result = await ruvectorModule.similarity(text1, text2);\n return result.similarity;\n }\n\n // Fall back to embedding + cosine\n const [e1, e2] = await Promise.all([this.embed(text1), this.embed(text2)]);\n return this.cosineSimilarity(e1, e2);\n }\n\n /**\n * Compute NxN similarity matrix for a list of texts\n * Uses parallel workers for ONNX backend\n */\n async similarityMatrix(texts: string[]): Promise<number[][]> {\n const embeddings = await this.embedBatch(texts);\n const n = texts.length;\n const matrix: number[][] = Array(n).fill(null).map(() => Array(n).fill(0));\n\n for (let i = 0; i < n; i++) {\n matrix[i][i] = 1.0; // Self-similarity\n for (let j = i + 1; j < n; j++) {\n const sim = this.cosineSimilarity(embeddings[i], embeddings[j]);\n matrix[i][j] = sim;\n matrix[j][i] = sim; // Symmetric\n }\n }\n\n return matrix;\n }\n\n /**\n * Build a corpus for semantic search\n */\n async buildCorpus(texts: string[]): Promise<void> {\n this.corpus.texts = texts;\n this.corpus.embeddings = await this.embedBatch(texts);\n }\n\n /**\n * Semantic search against the corpus\n * Returns top-k most similar texts\n */\n async semanticSearch(query: string, topK: number = 5): Promise<SearchResult[]> {\n if (this.corpus.texts.length === 0) {\n throw new Error('Corpus not built. Call buildCorpus() first.');\n }\n\n const queryEmbedding = await this.embed(query);\n const results: SearchResult[] = [];\n\n for (let i = 0; i < this.corpus.texts.length; i++) {\n const sim = this.cosineSimilarity(queryEmbedding, this.corpus.embeddings[i]);\n results.push({\n text: this.corpus.texts[i],\n index: i,\n similarity: sim,\n });\n }\n\n // Sort by similarity (descending) and return top-k\n results.sort((a, b) => b.similarity - a.similarity);\n return results.slice(0, topK);\n }\n\n /**\n * Find near-duplicate texts in a list\n * Groups texts with similarity above threshold\n */\n async findDuplicates(texts: string[], threshold: number = 0.9): Promise<DuplicateGroup[]> {\n const embeddings = await this.embedBatch(texts);\n const n = texts.length;\n const visited = new Set<number>();\n const groups: DuplicateGroup[] = [];\n\n for (let i = 0; i < n; i++) {\n if (visited.has(i)) continue;\n\n const group: DuplicateGroup = {\n indices: [i],\n texts: [texts[i]],\n similarity: 1.0,\n };\n\n for (let j = i + 1; j < n; j++) {\n if (visited.has(j)) continue;\n\n const sim = this.cosineSimilarity(embeddings[i], embeddings[j]);\n if (sim >= threshold) {\n group.indices.push(j);\n group.texts.push(texts[j]);\n group.similarity = Math.min(group.similarity, sim);\n visited.add(j);\n }\n }\n\n if (group.indices.length > 1) {\n visited.add(i);\n groups.push(group);\n }\n }\n\n return groups;\n }\n\n /**\n * K-means clustering of texts\n * Returns cluster assignments and centroids\n */\n async clusterTexts(\n texts: string[],\n k: number = 3,\n maxIterations: number = 100\n ): Promise<{ clusters: number[]; centroids: Float32Array[] }> {\n const embeddings = await this.embedBatch(texts);\n const n = texts.length;\n const dim = this.dimension;\n\n // Initialize centroids randomly (copy to new ArrayBuffer for consistent typing)\n const centroidIndices = new Set<number>();\n while (centroidIndices.size < k && centroidIndices.size < n) {\n centroidIndices.add(Math.floor(Math.random() * n));\n }\n let centroids: Float32Array[] = Array.from(centroidIndices).map(i => {\n const copy = new Float32Array(dim);\n copy.set(embeddings[i]);\n return copy;\n });\n\n let clusters = new Array(n).fill(0);\n\n for (let iter = 0; iter < maxIterations; iter++) {\n // Assign points to nearest centroid\n const newClusters = embeddings.map(emb => {\n let bestCluster = 0;\n let bestSim = -Infinity;\n for (let c = 0; c < k; c++) {\n const sim = this.cosineSimilarity(emb, centroids[c]);\n if (sim > bestSim) {\n bestSim = sim;\n bestCluster = c;\n }\n }\n return bestCluster;\n });\n\n // Check convergence\n const changed = newClusters.some((c, i) => c !== clusters[i]);\n clusters = newClusters;\n if (!changed) break;\n\n // Update centroids\n const newCentroids: Float32Array[] = [];\n for (let c = 0; c < k; c++) {\n newCentroids.push(new Float32Array(dim));\n }\n const counts = new Array(k).fill(0);\n\n for (let i = 0; i < n; i++) {\n const c = clusters[i];\n counts[c]++;\n for (let d = 0; d < dim; d++) {\n newCentroids[c][d] += embeddings[i][d];\n }\n }\n\n // Normalize centroids\n for (let c = 0; c < k; c++) {\n if (counts[c] > 0) {\n let norm = 0;\n for (let d = 0; d < dim; d++) {\n newCentroids[c][d] /= counts[c];\n norm += newCentroids[c][d] * newCentroids[c][d];\n }\n norm = Math.sqrt(norm) || 1;\n for (let d = 0; d < dim; d++) {\n newCentroids[c][d] /= norm;\n }\n }\n }\n centroids = newCentroids;\n }\n\n return { clusters, centroids };\n }\n\n /**\n * Stream embeddings for large batches (memory efficient)\n * Yields embeddings one at a time\n */\n async *streamEmbed(texts: string[], batchSize: number = 32): AsyncGenerator<{ index: number; text: string; embedding: Float32Array }> {\n for (let i = 0; i < texts.length; i += batchSize) {\n const batch = texts.slice(i, i + batchSize);\n const embeddings = await this.embedBatch(batch);\n\n for (let j = 0; j < batch.length; j++) {\n yield {\n index: i + j,\n text: batch[j],\n embedding: embeddings[j],\n };\n }\n }\n }\n\n /**\n * Simple hash-based embedding (fast, not semantic)\n */\n simpleEmbed(text: string, dim: number = 256): Float32Array {\n const embedding = new Float32Array(dim);\n\n // Multi-pass hash for better distribution\n for (let i = 0; i < text.length; i++) {\n const code = text.charCodeAt(i);\n embedding[i % dim] += code / 255;\n embedding[(i * 7) % dim] += (code * 0.3) / 255;\n embedding[(i * 13) % dim] += (code * 0.2) / 255;\n }\n\n // Normalize\n let norm = 0;\n for (let i = 0; i < dim; i++) {\n norm += embedding[i] * embedding[i];\n }\n norm = Math.sqrt(norm) || 1;\n for (let i = 0; i < dim; i++) {\n embedding[i] /= norm;\n }\n\n return embedding;\n }\n\n /**\n * Compute cosine similarity between two embeddings\n */\n cosineSimilarity(a: Float32Array, b: Float32Array): number {\n if (ruvectorModule?.cosineSimilarity) {\n return ruvectorModule.cosineSimilarity(a, b);\n }\n\n // JS fallback\n let dot = 0;\n let normA = 0;\n let normB = 0;\n for (let i = 0; i < a.length; i++) {\n dot += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n return dot / (Math.sqrt(normA) * Math.sqrt(normB) || 1);\n }\n\n /**\n * Get statistics\n */\n getStats(): EmbeddingStats {\n const effective = this.effectiveBackend || this.backend;\n const ruvectorStats = ruvectorModule?.getStats?.() || {};\n\n // Get persistent cache stats\n let persistentCacheStats: EmbeddingStats['persistentCache'] | undefined;\n if (this.persistentCache) {\n const cacheStats = this.persistentCache.getStats();\n persistentCacheStats = {\n enabled: true,\n entries: cacheStats.totalEntries,\n hits: cacheStats.hits,\n misses: cacheStats.misses,\n hitRate: cacheStats.hitRate,\n dbSizeKB: Math.round(cacheStats.dbSizeBytes / 1024),\n };\n }\n\n return {\n backend: this.backend,\n effectiveBackend: effective,\n dimension: this.dimension,\n totalEmbeddings: this.totalEmbeddings,\n totalLatencyMs: this.totalLatencyMs,\n avgLatencyMs: this.totalEmbeddings > 0 ? this.totalLatencyMs / this.totalEmbeddings : 0,\n cacheHits: this.cacheHits,\n modelLoaded: this.modelLoaded,\n modelName: effective === 'onnx' ? this.modelName : undefined,\n simdAvailable: ruvectorStats.simdAvailable ?? onnxAvailable,\n parallelWorkers: ruvectorStats.workerCount ?? undefined,\n persistentCache: persistentCacheStats,\n };\n }\n\n /**\n * Clear in-memory cache\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Clear persistent cache (SQLite)\n */\n clearPersistentCache(): void {\n if (this.persistentCache) {\n this.persistentCache.clear();\n }\n }\n\n /**\n * Clear all caches (memory + persistent)\n */\n clearAllCaches(): void {\n this.cache.clear();\n if (this.persistentCache) {\n this.persistentCache.clear();\n }\n }\n\n /**\n * Get persistent cache stats\n */\n getPersistentCacheStats(): { entries: number; hits: number; misses: number; hitRate: number } | null {\n if (!this.persistentCache) return null;\n const stats = this.persistentCache.getStats();\n return {\n entries: stats.totalEntries,\n hits: stats.hits,\n misses: stats.misses,\n hitRate: stats.hitRate,\n };\n }\n\n /**\n * Clear corpus\n */\n clearCorpus(): void {\n this.corpus = { texts: [], embeddings: [] };\n }\n\n /**\n * Shutdown (cleanup workers)\n */\n async shutdown(): Promise<void> {\n if (ruvectorModule?.shutdown) {\n await ruvectorModule.shutdown();\n }\n }\n\n /**\n * Reset instance (for testing)\n */\n static async reset(): Promise<void> {\n if (EmbeddingService.instance) {\n await EmbeddingService.instance.shutdown();\n }\n EmbeddingService.instance = null;\n onnxAvailable = null;\n ruvectorModule = null;\n }\n}\n\n// Export singleton getter\nexport function getEmbeddingService(): EmbeddingService {\n return EmbeddingService.getInstance();\n}\n\n// Export convenience functions\nexport async function embed(text: string): Promise<Float32Array> {\n return getEmbeddingService().embed(text);\n}\n\nexport async function embedBatch(texts: string[]): Promise<Float32Array[]> {\n return getEmbeddingService().embedBatch(texts);\n}\n\nexport async function textSimilarity(text1: string, text2: string): Promise<number> {\n return getEmbeddingService().similarity(text1, text2);\n}\n\nexport function simpleEmbed(text: string, dim: number = 256): Float32Array {\n return getEmbeddingService().simpleEmbed(text, dim);\n}\n\nexport async function similarityMatrix(texts: string[]): Promise<number[][]> {\n return getEmbeddingService().similarityMatrix(texts);\n}\n\nexport async function semanticSearch(query: string, topK: number = 5): Promise<SearchResult[]> {\n return getEmbeddingService().semanticSearch(query, topK);\n}\n\nexport async function findDuplicates(texts: string[], threshold: number = 0.9): Promise<DuplicateGroup[]> {\n return getEmbeddingService().findDuplicates(texts, threshold);\n}\n\nexport async function clusterTexts(texts: string[], k: number = 3): Promise<{ clusters: number[]; centroids: Float32Array[] }> {\n return getEmbeddingService().clusterTexts(texts, k);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-flow",
|
|
3
|
-
"version": "2.0.1-alpha.
|
|
3
|
+
"version": "2.0.1-alpha.18",
|
|
4
4
|
"description": "Production-ready AI agent orchestration platform with 66 specialized agents, 213 MCP tools, ReasoningBank learning memory, and autonomous multi-agent swarms. Built by @ruvnet with Claude Agent SDK, neural networks, memory persistence, GitHub integration, and distributed consensus protocols.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -258,7 +258,7 @@ export function log(message) {
|
|
|
258
258
|
wasm.log(ptr0, len0);
|
|
259
259
|
}
|
|
260
260
|
|
|
261
|
-
function
|
|
261
|
+
function __wbg_adapter_4(arg0, arg1, arg2) {
|
|
262
262
|
wasm.__wbindgen_export_5(arg0, arg1, addHeapObject(arg2));
|
|
263
263
|
}
|
|
264
264
|
|
|
@@ -540,7 +540,7 @@ export function __wbindgen_cast_2241b6af4c4b2941(arg0, arg1) {
|
|
|
540
540
|
|
|
541
541
|
export function __wbindgen_cast_8eb6fd44e7238d11(arg0, arg1) {
|
|
542
542
|
// Cast intrinsic for `Closure(Closure { dtor_idx: 62, function: Function { arguments: [Externref], shim_idx: 63, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
543
|
-
const ret = makeMutClosure(arg0, arg1, 62,
|
|
543
|
+
const ret = makeMutClosure(arg0, arg1, 62, __wbg_adapter_4);
|
|
544
544
|
return addHeapObject(ret);
|
|
545
545
|
};
|
|
546
546
|
|
|
Binary file
|