@memberjunction/ai-vector-sync 1.8.0 → 2.0.0

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 (41) hide show
  1. package/dist/index.d.ts +866 -5
  2. package/dist/index.js +4 -21
  3. package/dist/index.js.map +1 -1
  4. package/package.json +19 -14
  5. package/dist/config.d.ts +0 -13
  6. package/dist/config.d.ts.map +0 -1
  7. package/dist/config.js +0 -21
  8. package/dist/config.js.map +0 -1
  9. package/dist/constants.d.ts +0 -2
  10. package/dist/constants.d.ts.map +0 -1
  11. package/dist/constants.js +0 -5
  12. package/dist/constants.js.map +0 -1
  13. package/dist/db/db.d.ts +0 -4
  14. package/dist/db/db.d.ts.map +0 -1
  15. package/dist/db/db.js +0 -40
  16. package/dist/db/db.js.map +0 -1
  17. package/dist/db/dbAI.d.ts +0 -4
  18. package/dist/db/dbAI.d.ts.map +0 -1
  19. package/dist/db/dbAI.js +0 -18
  20. package/dist/db/dbAI.js.map +0 -1
  21. package/dist/generic/EntityDocumentTemplateParser.d.ts +0 -18
  22. package/dist/generic/EntityDocumentTemplateParser.d.ts.map +0 -1
  23. package/dist/generic/EntityDocumentTemplateParser.js +0 -145
  24. package/dist/generic/EntityDocumentTemplateParser.js.map +0 -1
  25. package/dist/generic/entitySyncConfig.types.d.ts +0 -11
  26. package/dist/generic/entitySyncConfig.types.d.ts.map +0 -1
  27. package/dist/generic/entitySyncConfig.types.js +0 -3
  28. package/dist/generic/entitySyncConfig.types.js.map +0 -1
  29. package/dist/generic/vectorSync.types.d.ts +0 -12
  30. package/dist/generic/vectorSync.types.d.ts.map +0 -1
  31. package/dist/generic/vectorSync.types.js +0 -3
  32. package/dist/generic/vectorSync.types.js.map +0 -1
  33. package/dist/index.d.ts.map +0 -1
  34. package/dist/models/EntityDocumentCache.d.ts +0 -19
  35. package/dist/models/EntityDocumentCache.d.ts.map +0 -1
  36. package/dist/models/EntityDocumentCache.js +0 -62
  37. package/dist/models/EntityDocumentCache.js.map +0 -1
  38. package/dist/models/entityVectorSync.d.ts +0 -26
  39. package/dist/models/entityVectorSync.d.ts.map +0 -1
  40. package/dist/models/entityVectorSync.js +0 -234
  41. package/dist/models/entityVectorSync.js.map +0 -1
@@ -1,145 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var EntityDocumentTemplateParser_1;
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.EntityDocumentTemplateParser = exports.EntityDocumentTemplateParserBase = void 0;
11
- const core_1 = require("@memberjunction/core");
12
- const global_1 = require("@memberjunction/global");
13
- const entityVectorSync_1 = require("../models/entityVectorSync");
14
- class EntityDocumentTemplateParserBase {
15
- static ClearCache() {
16
- EntityDocumentTemplateParserBase.__cache = {};
17
- }
18
- static CreateCacheKey(EntityID, EntityRecordPrimaryKey, Content) {
19
- return `${EntityID}___${EntityRecordPrimaryKey}___${Content}`;
20
- }
21
- static __cache = {};
22
- static get _cache() {
23
- return EntityDocumentTemplateParserBase.__cache;
24
- }
25
- async Parse(Template, EntityID, EntityRecord, ContextUser) {
26
- if (!ContextUser) {
27
- throw new Error('ContextUser is required to parse the template');
28
- }
29
- const md = new core_1.Metadata();
30
- const entityInfo = md.Entities.find(e => e.ID === EntityID);
31
- if (!entityInfo) {
32
- throw new Error(`Entity with ID ${EntityID} not found.`);
33
- }
34
- let compositeKey = new core_1.CompositeKey();
35
- compositeKey.LoadFromEntityInfoAndRecord(entityInfo, EntityRecord);
36
- const regex = /\$\{([^{}]+)\}/g;
37
- const matches = Template.matchAll(regex);
38
- const replacements = Array.from(matches).map(async (match) => {
39
- const content = match[1];
40
- const cacheKey = EntityDocumentTemplateParserBase.CreateCacheKey(EntityID, compositeKey.ToString(), content);
41
- if (!EntityDocumentTemplateParserBase._cache[cacheKey]) {
42
- EntityDocumentTemplateParserBase._cache[cacheKey] = await this.evalSingleArgument(content, EntityID, EntityRecord, ContextUser);
43
- }
44
- return {
45
- old: match[0],
46
- new: EntityDocumentTemplateParserBase._cache[cacheKey]
47
- };
48
- });
49
- const resolvedReplacements = await Promise.all(replacements);
50
- let resolvedTemplate = Template;
51
- resolvedReplacements.forEach(replacement => {
52
- resolvedTemplate = resolvedTemplate.replace(replacement.old, replacement.new);
53
- });
54
- return resolvedTemplate;
55
- }
56
- async evalSingleArgument(argument, entityID, entityRecord, ContextUser) {
57
- const funcMatch = argument.match(/(\w+)\(([^)]*)\)/);
58
- if (funcMatch) {
59
- const [, funcName, paramsString] = funcMatch;
60
- const params = paramsString.split(',').map(param => {
61
- param = param.trim();
62
- if (param.startsWith('"') && param.endsWith('"')) {
63
- return param.slice(1, -1);
64
- }
65
- else if (param.startsWith("'") && param.endsWith("'")) {
66
- return param.slice(1, -1);
67
- }
68
- else {
69
- return param;
70
- }
71
- });
72
- if (typeof this[funcName] === 'function') {
73
- return this[funcName](entityID, entityRecord, ContextUser, ...params);
74
- }
75
- else {
76
- throw new Error(`Function ${funcName} is not defined.`);
77
- }
78
- }
79
- else {
80
- return entityRecord[argument] !== undefined ? entityRecord[argument] : "";
81
- }
82
- }
83
- ;
84
- }
85
- exports.EntityDocumentTemplateParserBase = EntityDocumentTemplateParserBase;
86
- let EntityDocumentTemplateParser = EntityDocumentTemplateParser_1 = class EntityDocumentTemplateParser extends EntityDocumentTemplateParserBase {
87
- static CreateInstance() {
88
- return global_1.MJGlobal.Instance.ClassFactory.CreateInstance(EntityDocumentTemplateParser_1);
89
- }
90
- async Relationship(entityID, entityRecord, ContextUser, relationshipName, maxRows, entityDocumentName) {
91
- const md = new core_1.Metadata();
92
- const vectorSyncer = new entityVectorSync_1.EntityVectorSyncer();
93
- vectorSyncer.CurrentUser = ContextUser;
94
- const entityInfo = md.Entities.find(e => e.ID === entityID);
95
- if (!entityInfo) {
96
- throw new Error(`Entity with ID ${entityID} not found.`);
97
- }
98
- const re = entityInfo.RelatedEntities.find(re => re.RelatedEntity === relationshipName);
99
- if (!re) {
100
- throw new Error(`Relationship ${relationshipName} not found for entity ${entityInfo.Name}`);
101
- }
102
- const obj = await md.GetEntityObject(entityInfo.Name, ContextUser);
103
- let compositeKey = new core_1.CompositeKey();
104
- compositeKey.LoadFromEntityInfoAndRecord(entityInfo, entityRecord);
105
- let loadResult = await obj.InnerLoad(compositeKey);
106
- if (!loadResult) {
107
- (0, core_1.LogError)(`Failed to load entity ${entityInfo.Name} with ID ${compositeKey.ToString()}`);
108
- return "";
109
- }
110
- const reData = await obj.GetRelatedEntityDataExt(re, null, maxRows);
111
- if (reData && reData.Data) {
112
- if (entityDocumentName && entityDocumentName.trim().length > 0) {
113
- const doc = await vectorSyncer.GetEntityDocumentByName(entityDocumentName, ContextUser);
114
- if (doc) {
115
- const parser = EntityDocumentTemplateParser_1.CreateInstance();
116
- const batchSize = 10;
117
- const results = [];
118
- for (let i = 0; i < reData.Data.length; i += batchSize) {
119
- const batchPromises = reData.Data.slice(i, i + batchSize).map(data => {
120
- return parser.Parse(doc.Template, re.RelatedEntityID, data, ContextUser);
121
- });
122
- const batchResults = await Promise.all(batchPromises);
123
- results.push(...batchResults);
124
- }
125
- return results.map(r => r + "\n\n").join('');
126
- }
127
- else {
128
- (0, core_1.LogStatus)(`Entity Document with name ${entityDocumentName} not found.`);
129
- return "";
130
- }
131
- }
132
- else {
133
- return JSON.stringify({ Relationship: relationshipName, Data: reData.Data });
134
- }
135
- }
136
- else {
137
- return "{ No Data for: " + relationshipName + " }";
138
- }
139
- }
140
- };
141
- exports.EntityDocumentTemplateParser = EntityDocumentTemplateParser;
142
- exports.EntityDocumentTemplateParser = EntityDocumentTemplateParser = EntityDocumentTemplateParser_1 = __decorate([
143
- (0, global_1.RegisterClass)(EntityDocumentTemplateParser)
144
- ], EntityDocumentTemplateParser);
145
- //# sourceMappingURL=EntityDocumentTemplateParser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntityDocumentTemplateParser.js","sourceRoot":"","sources":["../../src/generic/EntityDocumentTemplateParser.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import { RunViewParams } from "@memberjunction/core";
2
- export type EntitySyncConfig = {
3
- EntityDocumentID: number;
4
- Interval: number;
5
- RunViewParams: RunViewParams;
6
- IncludeInSync: boolean;
7
- LastRunDate: string;
8
- VectorIndexID: number;
9
- VectorID: number;
10
- };
11
- //# sourceMappingURL=entitySyncConfig.types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entitySyncConfig.types.d.ts","sourceRoot":"","sources":["../../src/generic/entitySyncConfig.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,MAAM,gBAAgB,GAAG;IAI3B,gBAAgB,EAAE,MAAM,CAAC;IAIzB,QAAQ,EAAE,MAAM,CAAC;IAMjB,aAAa,EAAE,aAAa,CAAC;IAI7B,aAAa,EAAE,OAAO,CAAC;IAMvB,WAAW,EAAE,MAAM,CAAC;IAIpB,aAAa,EAAE,MAAM,CAAC;IAItB,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=entitySyncConfig.types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entitySyncConfig.types.js","sourceRoot":"","sources":["../../src/generic/entitySyncConfig.types.ts"],"names":[],"mappings":""}
@@ -1,12 +0,0 @@
1
- export type VectorSyncRequest = {
2
- entityID: number;
3
- entityDocumentID?: number;
4
- batchCount?: number;
5
- options?: any;
6
- };
7
- export type vectorSyncResponse = {
8
- success: boolean;
9
- status: string;
10
- errorMessage: string;
11
- };
12
- //# sourceMappingURL=vectorSync.types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vectorSync.types.d.ts","sourceRoot":"","sources":["../../src/generic/vectorSync.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAK1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,GAAG,CAAC;CACjB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACxB,CAAA"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=vectorSync.types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vectorSync.types.js","sourceRoot":"","sources":["../../src/generic/vectorSync.types.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wCAAwC,CAAC"}
@@ -1,19 +0,0 @@
1
- import { UserInfo } from "@memberjunction/core";
2
- import { EntityDocumentEntity } from "@memberjunction/core-entities";
3
- export declare class EntityDocumentCache {
4
- private static _instance;
5
- private _loaded;
6
- private _cache;
7
- private _contextUser;
8
- private constructor();
9
- static get Instance(): EntityDocumentCache;
10
- get IsLoaded(): boolean;
11
- protected Cache(): {
12
- [key: number]: EntityDocumentEntity;
13
- };
14
- GetDocument(EntityDocumentID: number): EntityDocumentEntity | null;
15
- GetDocumentByName(EntityDocumentName: string): EntityDocumentEntity | null;
16
- SetCurrentUser(user: UserInfo): void;
17
- Refresh(ContextUser?: UserInfo): Promise<void>;
18
- }
19
- //# sourceMappingURL=EntityDocumentCache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntityDocumentCache.d.ts","sourceRoot":"","sources":["../../src/models/EntityDocumentCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAKrE,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAsB;IAC9C,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,YAAY,CAAyB;IAE7C,OAAO;IAKP,WAAkB,QAAQ,IAAI,mBAAmB,CAKhD;IAED,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,SAAS,CAAC,KAAK,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAAA;KAAE;IAInD,WAAW,CAAC,gBAAgB,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI;IASlE,iBAAiB,CAAC,kBAAkB,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI;IAa1E,cAAc,CAAC,IAAI,EAAE,QAAQ;IAIvB,OAAO,CAAC,WAAW,CAAC,EAAE,QAAQ;CAkB9C"}
@@ -1,62 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EntityDocumentCache = void 0;
4
- const core_1 = require("@memberjunction/core");
5
- class EntityDocumentCache {
6
- static _instance;
7
- _loaded = false;
8
- _cache = {};
9
- _contextUser = null;
10
- constructor() {
11
- this._cache = {};
12
- }
13
- static get Instance() {
14
- if (!EntityDocumentCache._instance) {
15
- EntityDocumentCache._instance = new EntityDocumentCache();
16
- }
17
- return EntityDocumentCache._instance;
18
- }
19
- get IsLoaded() {
20
- return this._loaded;
21
- }
22
- Cache() {
23
- return this._cache;
24
- }
25
- GetDocument(EntityDocumentID) {
26
- let document = this._cache[EntityDocumentID];
27
- if (!document) {
28
- (0, core_1.LogStatus)(`EntityDocumentCache.GetDocument: Cache miss for EntityDocumentID: ${EntityDocumentID}`);
29
- }
30
- return document || null;
31
- }
32
- GetDocumentByName(EntityDocumentName) {
33
- const toLower = EntityDocumentName.trim().toLowerCase();
34
- let docuement = Object.values(this._cache).find((ed) => {
35
- ed.Name.trim().toLowerCase() === toLower;
36
- });
37
- if (!docuement) {
38
- (0, core_1.LogStatus)(`EntityDocumentCache.GetDocumentByName: Cache miss for EntityDocumentName: ${EntityDocumentName}`);
39
- }
40
- return docuement || null;
41
- }
42
- SetCurrentUser(user) {
43
- this._contextUser = user;
44
- }
45
- async Refresh(ContextUser) {
46
- (0, core_1.LogStatus)('Refreshing Entity Document Cache');
47
- this._cache = {};
48
- const rv = new core_1.RunView();
49
- const result = await rv.RunView({
50
- EntityName: "Entity Documents",
51
- ResultType: "entity_object"
52
- }, ContextUser || this._contextUser);
53
- if (result && result.Success) {
54
- for (const entityDocument of result.Results) {
55
- this._cache[entityDocument.ID] = entityDocument;
56
- }
57
- this._loaded = true;
58
- }
59
- }
60
- }
61
- exports.EntityDocumentCache = EntityDocumentCache;
62
- //# sourceMappingURL=EntityDocumentCache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntityDocumentCache.js","sourceRoot":"","sources":["../../src/models/EntityDocumentCache.ts"],"names":[],"mappings":";;;AAAA,+CAAoE;AAMpE,MAAa,mBAAmB;IACpB,MAAM,CAAC,SAAS,CAAsB;IACtC,OAAO,GAAY,KAAK,CAAC;IACzB,MAAM,GAA4C,EAAE,CAAC;IACrD,YAAY,GAAoB,IAAI,CAAC;IAE7C;QAEI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;IAEM,MAAM,KAAK,QAAQ;QACtB,IAAG,CAAC,mBAAmB,CAAC,SAAS,EAAC,CAAC;YAC/B,mBAAmB,CAAC,SAAS,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC9D,CAAC;QACD,OAAO,mBAAmB,CAAC,SAAS,CAAC;IACzC,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAES,KAAK;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,WAAW,CAAC,gBAAwB;QACvC,IAAI,QAAQ,GAAyB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,IAAA,gBAAS,EAAC,qEAAqE,gBAAgB,EAAE,CAAC,CAAC;QACvG,CAAC;QAED,OAAO,QAAQ,IAAI,IAAI,CAAC;IAC5B,CAAC;IAEM,iBAAiB,CAAC,kBAA0B;QAC/C,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxD,IAAI,SAAS,GAAyB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAwB,EAAE,EAAE;YAC/F,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,IAAA,gBAAS,EAAC,6EAA6E,kBAAkB,EAAE,CAAC,CAAC;QACjH,CAAC;QAED,OAAO,SAAS,IAAI,IAAI,CAAC;IAC7B,CAAC;IAEM,cAAc,CAAC,IAAc;QAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,WAAsB;QACvC,IAAA,gBAAS,EAAC,kCAAkC,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAGjB,MAAM,EAAE,GAAG,IAAI,cAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC;YAC5B,UAAU,EAAE,kBAAkB;YAC9B,UAAU,EAAE,eAAe;SAC9B,EAAE,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;QAErC,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC3B,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC;YACpD,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,CAAC;IACL,CAAC;CACJ;AAtED,kDAsEC"}
@@ -1,26 +0,0 @@
1
- import { UserInfo } from "@memberjunction/core";
2
- import { Embeddings } from '@memberjunction/ai';
3
- import { VectorDBBase } from '@memberjunction/ai-vectordb';
4
- import { AIModelEntity, EntityDocumentEntity, VectorDatabaseEntity } from '@memberjunction/core-entities';
5
- import { VectorSyncRequest } from '../generic/vectorSync.types';
6
- import { VectorBase } from '@memberjunction/ai-vectors';
7
- export declare class EntityVectorSyncer extends VectorBase {
8
- _startTime: Date;
9
- _endTime: Date;
10
- constructor();
11
- VectorizeEntity(request: VectorSyncRequest, contextUser: UserInfo): Promise<any>;
12
- CreateDefaultEntityDocument(EntityID: number, VectorDatabase: VectorDatabaseEntity, AIModel: AIModelEntity): Promise<EntityDocumentEntity>;
13
- protected GetVectorDatabaseAndEmbeddingClassByEntityDocumentID(entityDocumentID: number, createDocumentIfNotFound?: boolean): Promise<{
14
- embedding: Embeddings;
15
- vectorDB: VectorDBBase;
16
- }>;
17
- GetEntityDocument(EntityDocumentID: number): Promise<EntityDocumentEntity | null>;
18
- GetEntityDocumentByName(EntityDocumentName: string, ContextUser?: UserInfo): Promise<EntityDocumentEntity | null>;
19
- GetFirstActiveEntityDocumentForEntity(entityID: number): Promise<EntityDocumentEntity | null>;
20
- private GetOrCreateVectorIndex;
21
- private chunkArray;
22
- private convertPrimaryKeysToList;
23
- private ConvertEntityFieldsToString;
24
- private delay;
25
- }
26
- //# sourceMappingURL=entityVectorSync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entityVectorSync.d.ts","sourceRoot":"","sources":["../../src/models/entityVectorSync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwE,QAAQ,EAAI,MAAM,sBAAsB,CAAC;AACxH,OAAO,EAAoB,UAAU,EAAc,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAgB,YAAY,EAAgB,MAAM,6BAA6B,CAAC;AAEvF,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAA8B,oBAAoB,EAAqB,MAAM,+BAA+B,CAAC;AACzJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAKvD,qBAAa,kBAAmB,SAAQ,UAAU;IAC9C,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;;IAMF,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAkGhF,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC;cA4BvI,oDAAoD,CAAC,gBAAgB,EAAE,MAAM,EAAE,wBAAwB,GAAE,OAAe,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAC,CAAC;IA+CtL,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAQjF,uBAAuB,CAAC,kBAAkB,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAQjH,qCAAqC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;YAU5F,sBAAsB;IAiCpC,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,wBAAwB;IAMhC,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,KAAK,CAEX;CACL"}
@@ -1,234 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EntityVectorSyncer = void 0;
4
- const core_1 = require("@memberjunction/core");
5
- const ai_1 = require("@memberjunction/ai");
6
- const ai_vectordb_1 = require("@memberjunction/ai-vectordb");
7
- const global_1 = require("@memberjunction/global");
8
- const ai_vectors_1 = require("@memberjunction/ai-vectors");
9
- const EntityDocumentTemplateParser_1 = require("../generic/EntityDocumentTemplateParser");
10
- const constants_1 = require("../constants");
11
- const EntityDocumentCache_1 = require("./EntityDocumentCache");
12
- class EntityVectorSyncer extends ai_vectors_1.VectorBase {
13
- _startTime;
14
- _endTime;
15
- constructor() {
16
- super();
17
- }
18
- async VectorizeEntity(request, contextUser) {
19
- if (!contextUser) {
20
- throw new Error('ContextUser is required to vectorize the entity');
21
- }
22
- const startTime = new Date().getTime();
23
- super.CurrentUser = contextUser;
24
- const parser = EntityDocumentTemplateParser_1.EntityDocumentTemplateParser.CreateInstance();
25
- const entityDocument = await this.GetEntityDocument(request.entityDocumentID);
26
- const vectorIndexEntity = await this.GetOrCreateVectorIndex(entityDocument);
27
- const obj = await this.GetVectorDatabaseAndEmbeddingClassByEntityDocumentID(request.entityDocumentID);
28
- const allrecords = await super.getRecordsByEntityID(request.entityID);
29
- const batchSize = 20;
30
- const chunks = this.chunkArray(allrecords, batchSize);
31
- (0, core_1.LogStatus)(`Processing ${allrecords.length} records in ${chunks.length} chunks of ${batchSize} records each`);
32
- let count = 0;
33
- for (const batch of chunks) {
34
- const promises = [];
35
- let templates = [];
36
- for (const record of batch) {
37
- let template = await parser.Parse(entityDocument.Template, request.entityID, record, contextUser);
38
- templates.push(template);
39
- }
40
- (0, core_1.LogStatus)(`parsing batch ${count}: done`);
41
- const embeddings = await obj.embedding.EmbedTexts({ texts: templates, model: null });
42
- (0, core_1.LogStatus)(`embedding batch ${count}: done`);
43
- const vectorRecords = embeddings.vectors.map((vector, index) => {
44
- const record = batch[index];
45
- const recordID = record.PrimaryKey.Values("|");
46
- return {
47
- id: `${entityDocument.Entity}_${entityDocument.ID}_${recordID}`,
48
- values: vector,
49
- metadata: {
50
- EntityID: entityDocument.EntityID,
51
- EntityName: entityDocument.Entity,
52
- EntityDocumentID: entityDocument.ID,
53
- PrimaryKey: record.PrimaryKey.ToString(),
54
- Template: templates[index],
55
- Data: this.ConvertEntityFieldsToString(record)
56
- }
57
- };
58
- });
59
- const response = await obj.vectorDB.createRecords(vectorRecords);
60
- if (response.success && vectorIndexEntity) {
61
- (0, core_1.LogStatus)("Successfully created vector records, creating associated Entity Record Documents...");
62
- for (const [index, vectorRecord] of vectorRecords.entries()) {
63
- try {
64
- let erdEntity = await super.Metadata.GetEntityObject("Entity Record Documents");
65
- erdEntity.NewRecord();
66
- erdEntity.EntityID = entityDocument.EntityID;
67
- erdEntity.RecordID = batch[index].PrimaryKey.ToString();
68
- erdEntity.DocumentText = templates[index];
69
- erdEntity.VectorID = vectorRecord.id;
70
- erdEntity.VectorJSON = JSON.stringify(vectorRecord.values);
71
- erdEntity.VectorIndexID = vectorIndexEntity.ID;
72
- erdEntity.EntityRecordUpdatedAt = new Date();
73
- erdEntity.EntityDocumentID = entityDocument.ID;
74
- let erdEntitySaveResult = await super.SaveEntity(erdEntity);
75
- if (!erdEntitySaveResult) {
76
- (0, core_1.LogError)("Error saving Entity Record Document Entity");
77
- }
78
- }
79
- catch (err) {
80
- (0, core_1.LogError)("Error saving Entity Record Document Entity");
81
- (0, core_1.LogError)(err);
82
- }
83
- }
84
- }
85
- else {
86
- (0, core_1.LogError)("Unable to successfully save records to vector database", undefined, response.message);
87
- }
88
- let delayRes = await this.delay(1000);
89
- count += 1;
90
- (0, core_1.LogStatus)(`Chunk ${count} of out ${chunks.length} processed`);
91
- }
92
- const endTime = new Date().getTime();
93
- (0, core_1.LogStatus)(`Finished vectorizing ${entityDocument.Entity} entity in ${endTime - startTime} ms`);
94
- return null;
95
- }
96
- async CreateDefaultEntityDocument(EntityID, VectorDatabase, AIModel) {
97
- const md = new core_1.Metadata();
98
- const entity = md.Entities.find(e => e.ID === EntityID);
99
- if (!entity)
100
- throw new Error(`Entity with ID ${EntityID} not found.`);
101
- const EDTemplate = entity.Fields.map(ef => {
102
- return `${ef.Name}: \$\{${ef.Name}\}`;
103
- }).join(" ");
104
- const entityDocument = await md.GetEntityObject("Entity Documents");
105
- entityDocument.NewRecord();
106
- entityDocument.Name = `Default duplicate record Entity Document for the ${entity.Name} entity using vector database ${VectorDatabase.Name} and AI Model ${AIModel.Name}`;
107
- entityDocument.EntityID = EntityID;
108
- entityDocument.TypeID = constants_1.RECORD_DUPLICATES_TYPE_ID;
109
- entityDocument.Status = "Active";
110
- entityDocument.Template = EDTemplate;
111
- entityDocument.VectorDatabaseID = VectorDatabase.ID;
112
- entityDocument.AIModelID = AIModel.ID;
113
- let saveResult = await this.SaveEntity(entityDocument);
114
- if (saveResult) {
115
- return entityDocument;
116
- }
117
- else {
118
- throw new Error(`Failed to save Entity Document for ${EntityID}`);
119
- }
120
- }
121
- async GetVectorDatabaseAndEmbeddingClassByEntityDocumentID(entityDocumentID, createDocumentIfNotFound = false) {
122
- let entityDocument = await this.GetEntityDocument(entityDocumentID) || await this.GetFirstActiveEntityDocumentForEntity(entityDocumentID);
123
- if (!entityDocument) {
124
- if (createDocumentIfNotFound) {
125
- if (!entityDocument) {
126
- (0, core_1.LogStatus)(`No active Entity Document found for entity ${entityDocumentID}, creating one`);
127
- const defaultVectorDB = this.getVectorDatabase();
128
- const defaultAIModel = this.getAIModel();
129
- entityDocument = await this.CreateDefaultEntityDocument(entityDocumentID, defaultVectorDB, defaultAIModel);
130
- }
131
- }
132
- else {
133
- throw new Error(`No Entity Document found for ID=${entityDocumentID}`);
134
- }
135
- }
136
- (0, core_1.LogStatus)(`Using vector database ${entityDocument.VectorDatabaseID} and AI Model ${entityDocument.AIModelID}`);
137
- const vectorDBEntity = this.getVectorDatabase(entityDocument.VectorDatabaseID);
138
- const aiModelEntity = this.getAIModel(entityDocument.AIModelID);
139
- const embeddingAPIKey = (0, ai_1.GetAIAPIKey)(aiModelEntity.DriverClass);
140
- const vectorDBAPIKey = (0, ai_1.GetAIAPIKey)(vectorDBEntity.ClassKey);
141
- if (!embeddingAPIKey) {
142
- throw Error(`No API Key found for AI Model ${aiModelEntity.DriverClass}`);
143
- }
144
- if (!vectorDBAPIKey) {
145
- throw Error(`No API Key found for Vector Database ${vectorDBEntity.ClassKey}`);
146
- }
147
- const embedding = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(ai_1.Embeddings, aiModelEntity.DriverClass, embeddingAPIKey);
148
- const vectorDB = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(ai_vectordb_1.VectorDBBase, vectorDBEntity.ClassKey, vectorDBAPIKey);
149
- if (!embedding) {
150
- throw Error(`Failed to create Embeddings instance for AI Model ${aiModelEntity.DriverClass}`);
151
- }
152
- if (!vectorDB) {
153
- throw Error(`Failed to create Vector Database instance for ${vectorDBEntity.ClassKey}`);
154
- }
155
- return { embedding, vectorDB };
156
- }
157
- async GetEntityDocument(EntityDocumentID) {
158
- const cache = EntityDocumentCache_1.EntityDocumentCache.Instance;
159
- if (!cache.IsLoaded) {
160
- await cache.Refresh(super.CurrentUser);
161
- }
162
- return cache.GetDocument(EntityDocumentID);
163
- }
164
- async GetEntityDocumentByName(EntityDocumentName, ContextUser) {
165
- const cache = EntityDocumentCache_1.EntityDocumentCache.Instance;
166
- if (!cache.IsLoaded) {
167
- await cache.Refresh(ContextUser);
168
- }
169
- return cache.GetDocumentByName(EntityDocumentName);
170
- }
171
- async GetFirstActiveEntityDocumentForEntity(entityID) {
172
- const entityDocument = await this.runViewForSingleValue("Entity Documents", `EntityID = ${entityID} AND TypeID = 9 AND Status = 'Active'`);
173
- if (!entityDocument) {
174
- (0, core_1.LogError)(`No active Entity Document with entityID=${entityID} found`);
175
- return null;
176
- }
177
- return entityDocument;
178
- }
179
- async GetOrCreateVectorIndex(entityDocument) {
180
- let vectorIndexEntity = await super.runViewForSingleValue("Vector Indexes", `VectorDatabaseID = ${entityDocument.VectorDatabaseID} AND EmbeddingModelID = ${entityDocument.AIModelID}`);
181
- if (vectorIndexEntity) {
182
- return vectorIndexEntity;
183
- }
184
- (0, core_1.LogStatus)(`No Vector Index found for entityDocument ${entityDocument.ID}, creating one`);
185
- try {
186
- vectorIndexEntity = await super.Metadata.GetEntityObject("Vector Indexes");
187
- vectorIndexEntity.NewRecord();
188
- vectorIndexEntity.VectorDatabaseID = entityDocument.VectorDatabaseID;
189
- vectorIndexEntity.EmbeddingModelID = entityDocument.AIModelID;
190
- vectorIndexEntity.Name = `Vector Index for entityDocument ${entityDocument.EntityID}`;
191
- vectorIndexEntity.Set("EntityRecordUpdatedAt", new Date());
192
- vectorIndexEntity.Set("EntityDocumentID", entityDocument.ID);
193
- vectorIndexEntity.Description = `Vector Index that uses the Vector database ${entityDocument.VectorDatabaseID} and ${entityDocument.AIModelID} as the embedding model`;
194
- const saveResult = await super.SaveEntity(vectorIndexEntity);
195
- if (saveResult) {
196
- (0, core_1.LogStatus)(`Successfully created new Vector Index Entity`);
197
- return vectorIndexEntity;
198
- }
199
- else {
200
- (0, core_1.LogError)("Error saving Vector Index Entity");
201
- return null;
202
- }
203
- }
204
- catch (err) {
205
- (0, core_1.LogError)(err);
206
- return null;
207
- }
208
- }
209
- chunkArray(array, chunkSize) {
210
- let arrayCopy = [...array];
211
- let result = [];
212
- while (arrayCopy.length) {
213
- result.push(arrayCopy.splice(0, chunkSize));
214
- }
215
- return result;
216
- }
217
- convertPrimaryKeysToList(primaryKeys) {
218
- return primaryKeys.map((pk) => {
219
- return `${pk.Name}=${pk.Value}`;
220
- });
221
- }
222
- ConvertEntityFieldsToString(entity) {
223
- let obj = {};
224
- for (const field of entity.Fields) {
225
- obj[field.Name] = field.Value;
226
- }
227
- return JSON.stringify(obj);
228
- }
229
- delay = (delayInms) => {
230
- return new Promise(resolve => setTimeout(resolve, delayInms));
231
- };
232
- }
233
- exports.EntityVectorSyncer = EntityVectorSyncer;
234
- //# sourceMappingURL=entityVectorSync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entityVectorSync.js","sourceRoot":"","sources":["../../src/models/entityVectorSync.ts"],"names":[],"mappings":"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"}