@memberjunction/ai-vector-dupe 1.2.1 → 1.3.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.
- package/dist/duplicateRecordDetector.d.ts +14 -12
- package/dist/duplicateRecordDetector.d.ts.map +1 -1
- package/dist/duplicateRecordDetector.js +254 -90
- package/dist/duplicateRecordDetector.js.map +1 -1
- package/dist/generic/entity.types.d.ts +1 -0
- package/dist/generic/entity.types.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import { Embeddings } from "@memberjunction/ai";
|
|
2
|
-
import { PotentialDuplicateRequest, PotentialDuplicateResponse,
|
|
2
|
+
import { PotentialDuplicateRequest, PotentialDuplicateResponse, UserInfo } from "@memberjunction/core";
|
|
3
3
|
import { VectorDBBase } from "@memberjunction/ai-vectordb";
|
|
4
|
-
import {
|
|
5
|
-
export declare class DuplicateRecordDetector {
|
|
6
|
-
_contextUser: UserInfo;
|
|
7
|
-
_runView: RunView;
|
|
4
|
+
import { VectorBase } from "@memberjunction/ai-vectors";
|
|
5
|
+
export declare class DuplicateRecordDetector extends VectorBase {
|
|
8
6
|
_vectorDB: VectorDBBase;
|
|
9
7
|
_embedding: Embeddings;
|
|
10
|
-
|
|
11
|
-
protected GetVectorDatabase(): VectorDatabaseEntity;
|
|
8
|
+
constructor();
|
|
12
9
|
getDuplicateRecords(params: PotentialDuplicateRequest, contextUser?: UserInfo): Promise<PotentialDuplicateResponse>;
|
|
13
|
-
private
|
|
14
|
-
private
|
|
15
|
-
private
|
|
16
|
-
private
|
|
17
|
-
|
|
10
|
+
private GetRecordsByListID;
|
|
11
|
+
private createDuplicateRunRecord;
|
|
12
|
+
private createDuplicateRunDetailRecords;
|
|
13
|
+
private createDuplicateRunDetailRecordsByListID;
|
|
14
|
+
private getListEntity;
|
|
15
|
+
private getDuplicateRunEntity;
|
|
16
|
+
private getDuplicateRunEntityByListID;
|
|
17
|
+
private createListForDupeRun;
|
|
18
|
+
private createDuplicateRunDetailMatchesForRecord;
|
|
19
|
+
private mergeRecords;
|
|
18
20
|
}
|
|
19
21
|
//# sourceMappingURL=duplicateRecordDetector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicateRecordDetector.d.ts","sourceRoot":"","sources":["../src/duplicateRecordDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,oBAAoB,CAAC;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"duplicateRecordDetector.d.ts","sourceRoot":"","sources":["../src/duplicateRecordDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAyB,QAAQ,EAA6F,MAAM,sBAAsB,CAAC;AAEzN,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,qBAAa,uBAAwB,SAAQ,UAAU;IAEnD,SAAS,EAAE,YAAY,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;;IAOV,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,EAAE,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,0BAA0B,CAAC;YAsJlH,kBAAkB;YAoBlB,wBAAwB;YAmBxB,+BAA+B;YAmB/B,uCAAuC;YA8BvC,aAAa;YAYb,qBAAqB;YAYrB,6BAA6B;YAS7B,oBAAoB;YAiBpB,wCAAwC;YAuBxC,YAAY;CAwC7B"}
|
|
@@ -6,118 +6,282 @@ const core_1 = require("@memberjunction/core");
|
|
|
6
6
|
const core_2 = require("@memberjunction/core");
|
|
7
7
|
const ai_vectordb_1 = require("@memberjunction/ai-vectordb");
|
|
8
8
|
const global_1 = require("@memberjunction/global");
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
_runView;
|
|
9
|
+
const ai_vectors_1 = require("@memberjunction/ai-vectors");
|
|
10
|
+
const ai_vector_sync_1 = require("@memberjunction/ai-vector-sync");
|
|
11
|
+
class DuplicateRecordDetector extends ai_vectors_1.VectorBase {
|
|
13
12
|
_vectorDB;
|
|
14
13
|
_embedding;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
constructor() {
|
|
15
|
+
super();
|
|
16
|
+
this._runView = new core_1.RunView();
|
|
18
17
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
async getDuplicateRecords(params, contextUser) {
|
|
19
|
+
super.CurrentUser = contextUser;
|
|
20
|
+
let vectorizer = new ai_vector_sync_1.EntityVectorSyncer();
|
|
21
|
+
vectorizer.CurrentUser = super.CurrentUser;
|
|
22
|
+
let entityDocument = null;
|
|
23
|
+
if (params.EntityDocumentID) {
|
|
24
|
+
entityDocument = await vectorizer.GetEntityDocument(params.EntityDocumentID);
|
|
22
25
|
}
|
|
23
26
|
else {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
this._contextUser = contextUser;
|
|
29
|
-
if (!this._contextUser) {
|
|
30
|
-
(0, core_1.LogError)("Context User not found, using default");
|
|
31
|
-
const md = new core_1.Metadata();
|
|
32
|
-
this._contextUser = md.CurrentUser;
|
|
27
|
+
entityDocument = await vectorizer.GetFirstActiveEntityDocumentForEntity(params.EntityID);
|
|
28
|
+
if (!entityDocument) {
|
|
29
|
+
throw Error(`No active Entity Document found for entity ${params.EntityID}`);
|
|
30
|
+
}
|
|
33
31
|
}
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
let response = new core_1.PotentialDuplicateResponse();
|
|
33
|
+
response.PotentialDuplicateResult = [];
|
|
34
|
+
if (!entityDocument) {
|
|
35
|
+
response.ErrorMessage = `No active Entity Document found for entity ${params.EntityID}`;
|
|
36
|
+
response.Status = 'Error';
|
|
37
|
+
return response;
|
|
36
38
|
}
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
+
const list = await this.getListEntity(params.ListID);
|
|
40
|
+
let duplicateRun = params.Options?.DuplicateRunID ? await this.getDuplicateRunEntity(params.Options?.DuplicateRunID) : await this.getDuplicateRunEntityByListID(list.ID);
|
|
41
|
+
const duplicateRunDetails = await this.createDuplicateRunDetailRecordsByListID(list.ID, duplicateRun.ID);
|
|
42
|
+
(0, core_2.LogStatus)(`Using vector database ${entityDocument.VectorDatabaseID} and AI Model ${entityDocument.AIModelID}`);
|
|
43
|
+
const vectorDB = this.getVectorDatabase(entityDocument.VectorDatabaseID);
|
|
44
|
+
const aiModel = this.getAIModel(entityDocument.AIModelID);
|
|
45
|
+
(0, core_2.LogStatus)(`AIModel driver class: ${aiModel.DriverClass}`);
|
|
46
|
+
(0, core_2.LogStatus)(`VectorDB class key: ${vectorDB.ClassKey}`);
|
|
39
47
|
const embeddingAPIKey = (0, ai_1.GetAIAPIKey)(aiModel.DriverClass);
|
|
40
48
|
const vectorDBAPIKey = (0, ai_1.GetAIAPIKey)(vectorDB.ClassKey);
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
if (!embeddingAPIKey) {
|
|
50
|
+
throw Error(`No API Key found for AI Model ${aiModel.DriverClass}`);
|
|
51
|
+
}
|
|
52
|
+
if (!vectorDBAPIKey) {
|
|
53
|
+
throw Error(`No API Key found for Vector Database ${vectorDB.ClassKey}`);
|
|
54
|
+
}
|
|
43
55
|
this._embedding = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(ai_1.Embeddings, aiModel.DriverClass, embeddingAPIKey);
|
|
44
56
|
this._vectorDB = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(ai_vectordb_1.VectorDBBase, vectorDB.ClassKey, vectorDBAPIKey);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (!entityDocument) {
|
|
48
|
-
(0, core_2.LogStatus)("Entity Document not found");
|
|
49
|
-
return { EntityID: params.EntityDocumentID, Duplicates: [] };
|
|
50
|
-
}
|
|
51
|
-
const entityRecord = await this.getEntityRecord(entityDocument.Type, params.PrimaryKeyValues);
|
|
52
|
-
if (!entityRecord) {
|
|
53
|
-
(0, core_2.LogStatus)("Entity Record not found");
|
|
54
|
-
return { EntityID: entityDocument.EntityID, Duplicates: [] };
|
|
55
|
-
}
|
|
56
|
-
const template = this.parseStringTemplate(entityDocument.Template, entityRecord);
|
|
57
|
-
const embedding = await this._embedding.EmbedText({ text: template, model: "mistral-embed" });
|
|
58
|
-
const vector = embedding.data;
|
|
59
|
-
const topK = 10;
|
|
60
|
-
const queryResult = await this._vectorDB.queryIndex({ vector: vector, topK: topK, includeMetadata: true, includeValues: true });
|
|
61
|
-
return this.processDuplicateRecords(queryResult.data.matches, entityDocument);
|
|
62
|
-
}
|
|
63
|
-
async getEntityDocumennt(id) {
|
|
64
|
-
const rvResult = await this._runView.RunView({
|
|
65
|
-
EntityName: "Entity Documents",
|
|
66
|
-
ExtraFilter: `ID = '${id}'`
|
|
67
|
-
}, this._contextUser);
|
|
68
|
-
if (!rvResult || rvResult.RowCount === 0) {
|
|
69
|
-
return null;
|
|
57
|
+
if (!this._embedding) {
|
|
58
|
+
throw Error(`Failed to create Embeddings instance for AI Model ${aiModel.DriverClass}`);
|
|
70
59
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
60
|
+
if (!this._vectorDB) {
|
|
61
|
+
throw Error(`Failed to create Vector Database instance for ${vectorDB.ClassKey}`);
|
|
62
|
+
}
|
|
63
|
+
let records = await this.GetRecordsByListID(list.ID, entityDocument.EntityID);
|
|
64
|
+
(0, core_2.LogStatus)("Vectorizing " + records.length + " records");
|
|
65
|
+
const templateParser = ai_vector_sync_1.EntityDocumentTemplateParser.CreateInstance();
|
|
66
|
+
const recordTemplates = [];
|
|
67
|
+
let sampleTemplate = entityDocument.Template;
|
|
68
|
+
for (const record of records) {
|
|
69
|
+
const template = await templateParser.Parse(sampleTemplate, entityDocument.EntityID, record, contextUser);
|
|
70
|
+
recordTemplates.push(template);
|
|
71
|
+
}
|
|
72
|
+
let embedTextsResult = await this._embedding.EmbedTexts({ texts: recordTemplates, model: null });
|
|
73
|
+
const topK = 5;
|
|
74
|
+
let results = [];
|
|
75
|
+
for (const [index, vector] of embedTextsResult.vectors.entries()) {
|
|
76
|
+
const compositeKey = records[index].CompositeKey;
|
|
77
|
+
let queryResult = await this._vectorDB.getVectorDuplicates({ vector: vector, topK: topK, includeMetadata: true, includeValues: false });
|
|
78
|
+
if (queryResult.success) {
|
|
79
|
+
queryResult.data.Duplicates = queryResult.data.Duplicates.filter((dupe) => {
|
|
80
|
+
return dupe.ProbabilityScore >= entityDocument.PotentialMatchThreshold;
|
|
81
|
+
});
|
|
82
|
+
let result = queryResult.data;
|
|
83
|
+
result.EntityID = entityDocument.EntityID;
|
|
84
|
+
result.RecordCompositeKey = compositeKey;
|
|
85
|
+
results.push(result);
|
|
86
|
+
let dupeRunDetail = duplicateRunDetails.find((detail) => detail.RecordID === compositeKey.ToString());
|
|
87
|
+
if (dupeRunDetail) {
|
|
88
|
+
const matchRecords = await this.createDuplicateRunDetailMatchesForRecord(dupeRunDetail.ID, result);
|
|
89
|
+
result.DuplicateRunDetailMatchRecordIDs = matchRecords.map((match) => match.ID);
|
|
90
|
+
dupeRunDetail.MatchStatus = 'Complete';
|
|
91
|
+
let success = await super.SaveEntity(dupeRunDetail);
|
|
92
|
+
if (!success) {
|
|
93
|
+
(0, core_2.LogStatus)(`Failed to update Duplicate Run Detail record ${dupeRunDetail.ID}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
(0, core_1.LogError)(`Failed to find Duplicate Run Detail record for ${compositeKey.ToString()}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
75
100
|
}
|
|
101
|
+
duplicateRun.ProcessingStatus = 'Complete';
|
|
102
|
+
duplicateRun.EndedAt = new Date();
|
|
103
|
+
let success = await super.SaveEntity(duplicateRun);
|
|
104
|
+
if (!success) {
|
|
105
|
+
throw new Error(`Failed to update Duplicate Run record ${duplicateRun.ID}`);
|
|
106
|
+
}
|
|
107
|
+
await this.mergeRecords(response, entityDocument);
|
|
108
|
+
response.PotentialDuplicateResult = results;
|
|
109
|
+
response.Status = 'Success';
|
|
110
|
+
(0, core_2.LogStatus)("Dupe Run complete. Response:");
|
|
111
|
+
(0, core_2.LogStatus)(JSON.stringify(response, null, "\t"));
|
|
112
|
+
return response;
|
|
76
113
|
}
|
|
77
|
-
async
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}, this._contextUser);
|
|
82
|
-
if (!rvResult || rvResult.RowCount === 0) {
|
|
83
|
-
return null;
|
|
114
|
+
async GetRecordsByListID(listID, entityID) {
|
|
115
|
+
const entity = await super.runViewForSingleValue("Entities", `ID = ${entityID}`);
|
|
116
|
+
if (!entity) {
|
|
117
|
+
throw new Error(`Failed to load Entity record ${entityID}`);
|
|
84
118
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
119
|
+
const rvResult = await super.RunView.RunView({
|
|
120
|
+
EntityName: entity.Name,
|
|
121
|
+
ExtraFilter: `ID IN (SELECT RecordID FROM __mj.vwListDetails WHERE ListID = ${listID})`,
|
|
122
|
+
ResultType: 'entity_object'
|
|
123
|
+
}, super.CurrentUser);
|
|
124
|
+
if (!rvResult.Success) {
|
|
125
|
+
throw new Error(rvResult.ErrorMessage);
|
|
89
126
|
}
|
|
127
|
+
const records = rvResult.Results;
|
|
128
|
+
return records;
|
|
90
129
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
130
|
+
async createDuplicateRunRecord(entityDocument, listID) {
|
|
131
|
+
const md = new core_1.Metadata();
|
|
132
|
+
let duplicateRun = await md.GetEntityObject('Duplicate Runs');
|
|
133
|
+
duplicateRun.NewRecord();
|
|
134
|
+
duplicateRun.EntityID = entityDocument.EntityID;
|
|
135
|
+
duplicateRun.StartedByUserID = super.CurrentUser.ID;
|
|
136
|
+
duplicateRun.StartedAt = new Date();
|
|
137
|
+
duplicateRun.ProcessingStatus = 'In Progress';
|
|
138
|
+
duplicateRun.ApprovalStatus = 'Pending';
|
|
139
|
+
duplicateRun.SourceListID = listID;
|
|
140
|
+
const saveResult = await super.SaveEntity(duplicateRun);
|
|
141
|
+
if (!saveResult) {
|
|
142
|
+
throw new Error(`Failed to save list for Potential Duplicate Run`);
|
|
143
|
+
}
|
|
144
|
+
return duplicateRun;
|
|
95
145
|
}
|
|
96
|
-
|
|
97
|
-
let results =
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
146
|
+
async createDuplicateRunDetailRecords(recordIDs, duplicateRunID) {
|
|
147
|
+
let results = [];
|
|
148
|
+
const md = new core_1.Metadata();
|
|
149
|
+
for (const recordID of recordIDs) {
|
|
150
|
+
let runDetail = await md.GetEntityObject('Duplicate Run Details');
|
|
151
|
+
runDetail.NewRecord();
|
|
152
|
+
runDetail.DuplicateRunID = duplicateRunID;
|
|
153
|
+
runDetail.RecordID = recordID.ToString();
|
|
154
|
+
runDetail.MatchStatus = 'Pending';
|
|
155
|
+
runDetail.MergeStatus = 'Pending';
|
|
156
|
+
const success = await super.SaveEntity(runDetail);
|
|
157
|
+
if (success) {
|
|
158
|
+
results.push(runDetail);
|
|
104
159
|
}
|
|
105
|
-
let potentialDuplicate = new core_1.PotentialDuplicate();
|
|
106
|
-
potentialDuplicate.PrimaryKeyValues = [];
|
|
107
|
-
potentialDuplicate.PrimaryKeyValues.push({
|
|
108
|
-
FieldName: "ID",
|
|
109
|
-
Value: duplicate.id
|
|
110
|
-
});
|
|
111
|
-
potentialDuplicate.ProbabilityScore = duplicate.score;
|
|
112
|
-
results.Duplicates.push(potentialDuplicate);
|
|
113
160
|
}
|
|
114
161
|
return results;
|
|
115
162
|
}
|
|
116
|
-
|
|
117
|
-
let
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
163
|
+
async createDuplicateRunDetailRecordsByListID(listID, duplicateRunID) {
|
|
164
|
+
let results = [];
|
|
165
|
+
const viewResults = await super.RunView.RunView({
|
|
166
|
+
EntityName: 'List Details',
|
|
167
|
+
ExtraFilter: `ListID = ${listID}`,
|
|
168
|
+
ResultType: 'entity_object'
|
|
169
|
+
}, super.CurrentUser);
|
|
170
|
+
if (!viewResults.Success) {
|
|
171
|
+
throw new Error(viewResults.ErrorMessage);
|
|
172
|
+
}
|
|
173
|
+
const md = new core_1.Metadata();
|
|
174
|
+
const listDetails = viewResults.Results;
|
|
175
|
+
for (const listDetail of listDetails) {
|
|
176
|
+
let runDetail = await md.GetEntityObject('Duplicate Run Details');
|
|
177
|
+
runDetail.NewRecord();
|
|
178
|
+
runDetail.DuplicateRunID = duplicateRunID;
|
|
179
|
+
runDetail.RecordID = `ID = ${listDetail.RecordID}`;
|
|
180
|
+
runDetail.MatchStatus = 'Pending';
|
|
181
|
+
runDetail.MergeStatus = 'Pending';
|
|
182
|
+
const success = await super.SaveEntity(runDetail);
|
|
183
|
+
if (success) {
|
|
184
|
+
results.push(runDetail);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return results;
|
|
188
|
+
}
|
|
189
|
+
async getListEntity(listID) {
|
|
190
|
+
const md = new core_1.Metadata();
|
|
191
|
+
let list = await md.GetEntityObject('Lists');
|
|
192
|
+
list.ContextCurrentUser = super.CurrentUser;
|
|
193
|
+
const success = await list.Load(listID);
|
|
194
|
+
if (!success) {
|
|
195
|
+
throw new Error(`Failed to load List record ${listID}`);
|
|
196
|
+
}
|
|
197
|
+
return list;
|
|
198
|
+
}
|
|
199
|
+
async getDuplicateRunEntity(DupeRunID) {
|
|
200
|
+
const md = new core_1.Metadata();
|
|
201
|
+
let dupeRun = await md.GetEntityObject('Duplicate Runs');
|
|
202
|
+
dupeRun.ContextCurrentUser = super.CurrentUser;
|
|
203
|
+
const success = await dupeRun.Load(DupeRunID);
|
|
204
|
+
if (!success) {
|
|
205
|
+
throw new Error(`Failed to load Duplicate Run record ${DupeRunID}`);
|
|
206
|
+
}
|
|
207
|
+
return dupeRun;
|
|
208
|
+
}
|
|
209
|
+
async getDuplicateRunEntityByListID(listID) {
|
|
210
|
+
const entity = await super.runViewForSingleValue('Duplicate Runs', `SourceListID = ${listID}`);
|
|
211
|
+
if (!entity) {
|
|
212
|
+
throw new Error(`Failed to load Duplicate Run record for List ${listID}`);
|
|
213
|
+
}
|
|
214
|
+
return entity;
|
|
215
|
+
}
|
|
216
|
+
async createListForDupeRun(entityDocument) {
|
|
217
|
+
const md = new core_1.Metadata();
|
|
218
|
+
const list = await md.GetEntityObject('Lists');
|
|
219
|
+
list.NewRecord();
|
|
220
|
+
list.Name = `Potential Duplicate Run`;
|
|
221
|
+
list.Description = `Potential Duplicate Run for ${entityDocument.Entity} Entity`;
|
|
222
|
+
list.EntityID = entityDocument.EntityID;
|
|
223
|
+
list.UserID = super.CurrentUser.ID;
|
|
224
|
+
const saveResult = await super.SaveEntity(list);
|
|
225
|
+
if (!saveResult) {
|
|
226
|
+
throw new Error(`Failed to save list for Potential Duplicate Run`);
|
|
227
|
+
}
|
|
228
|
+
return list;
|
|
229
|
+
}
|
|
230
|
+
async createDuplicateRunDetailMatchesForRecord(DuplicateRunDetailID, duplicateResult) {
|
|
231
|
+
const md = new core_1.Metadata();
|
|
232
|
+
let matchRecords = [];
|
|
233
|
+
for (const dupe of duplicateResult.Duplicates) {
|
|
234
|
+
const match = await md.GetEntityObject('Duplicate Run Detail Matches');
|
|
235
|
+
match.NewRecord();
|
|
236
|
+
match.DuplicateRunDetailID = DuplicateRunDetailID;
|
|
237
|
+
match.MatchRecordID = dupe.ToString();
|
|
238
|
+
match.MatchProbability = dupe.ProbabilityScore;
|
|
239
|
+
match.MatchedAt = new Date();
|
|
240
|
+
match.MergedAt = new Date();
|
|
241
|
+
match.Action = '';
|
|
242
|
+
match.ApprovalStatus = 'Pending';
|
|
243
|
+
match.MergeStatus = 'Pending';
|
|
244
|
+
let success = await super.SaveEntity(match);
|
|
245
|
+
if (success) {
|
|
246
|
+
matchRecords.push(match);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return matchRecords;
|
|
250
|
+
}
|
|
251
|
+
async mergeRecords(dupeResponse, entityDocument) {
|
|
252
|
+
const md = new core_1.Metadata();
|
|
253
|
+
for (const dupeResult of dupeResponse.PotentialDuplicateResult) {
|
|
254
|
+
for (const [index, dupe] of dupeResult.Duplicates.entries()) {
|
|
255
|
+
if (dupe.ToString() === dupeResult.RecordCompositeKey.ToString()) {
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
if (dupe.ProbabilityScore >= entityDocument.AbsoluteMatchThreshold) {
|
|
259
|
+
let mergeParams = new core_1.RecordMergeRequest();
|
|
260
|
+
mergeParams.EntityName = entityDocument.Entity;
|
|
261
|
+
mergeParams.SurvivingRecordCompositeKey = dupeResult.RecordCompositeKey;
|
|
262
|
+
mergeParams.RecordsToMerge = [dupe];
|
|
263
|
+
let result = await md.MergeRecords(mergeParams, super.CurrentUser);
|
|
264
|
+
if (result.Success) {
|
|
265
|
+
let dupeRunMatchRecord = await md.GetEntityObject('Duplicate Run Detail Matches', super.CurrentUser);
|
|
266
|
+
let loadResult = await dupeRunMatchRecord.Load(dupeResult.DuplicateRunDetailMatchRecordIDs[index]);
|
|
267
|
+
if (!loadResult) {
|
|
268
|
+
(0, core_1.LogError)(`Failed to load Duplicate Run Match record ${dupeResult.DuplicateRunDetailMatchRecordIDs[index]}`);
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
dupeRunMatchRecord.MergeStatus = 'Complete';
|
|
272
|
+
dupeRunMatchRecord.Action = 'Merged';
|
|
273
|
+
dupeRunMatchRecord.MergedAt = new Date();
|
|
274
|
+
let saveResult = await dupeRunMatchRecord.Save();
|
|
275
|
+
if (!saveResult) {
|
|
276
|
+
(0, core_1.LogError)(`Failed to update Duplicate Run Match record ${dupeRunMatchRecord.ID}`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
(0, core_1.LogError)(`Failed to merge records ${dupeResult.RecordCompositeKey.ToString()} and ${dupe.ToString()}`);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
121
285
|
}
|
|
122
286
|
}
|
|
123
287
|
exports.DuplicateRecordDetector = DuplicateRecordDetector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicateRecordDetector.js","sourceRoot":"","sources":["../src/duplicateRecordDetector.ts"],"names":[],"mappings":";;;AAAA,2CAA6D;AAC7D,+CAA6M;AAE7M,+CAAiD;AACjD,6DAA2D;AAC3D,mDAAkD;AAElD,uDAAoD;AAEpD,MAAa,uBAAuB;IAEhC,YAAY,CAAW;IACvB,QAAQ,CAAU;IAClB,SAAS,CAAe;IACxB,UAAU,CAAY;IAMZ,UAAU;QAChB,MAAM,KAAK,GAAG,mBAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,CAA8E,CAAA;QAC3I,OAAO,KAAK,CAAC;IACjB,CAAC;IAMS,iBAAiB;QACvB,IAAG,mBAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAC,CAAC;YACpC,OAAO,mBAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;aACG,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,MAAiC,EAAE,WAAsB;QAEtF,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAEhC,IAAG,CAAC,IAAI,CAAC,YAAY,EAAC,CAAC;YACnB,IAAA,eAAQ,EAAC,uCAAuC,CAAC,CAAC;YAClD,MAAM,EAAE,GAAG,IAAI,eAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,WAAW,CAAC;QACvC,CAAC;QAED,IAAG,CAAC,IAAI,CAAC,QAAQ,EAAC,CAAC;YACf,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAO,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,OAAO,GAAkB,IAAI,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAyB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAChE,MAAM,eAAe,GAAW,IAAA,gBAAW,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,cAAc,GAAW,IAAA,gBAAW,EAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE9D,IAAA,gBAAS,EAAC,qBAAqB,EAAE,eAAe,CAAC,CAAC;QAClD,IAAA,gBAAS,EAAC,2BAA2B,EAAE,cAAc,CAAC,CAAC;QAEvD,IAAI,CAAC,UAAU,GAAG,iBAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAa,eAAU,EAAE,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;QAC7H,IAAI,CAAC,SAAS,GAAG,iBAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAe,0BAAY,EAAE,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAI9H,MAAM,cAAc,GAAmB,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC9F,IAAA,gBAAS,EAAC,mBAAmB,GAAG,cAAc,CAAC,CAAC;QAEhD,IAAG,CAAC,cAAc,EAAC,CAAC;YAChB,IAAA,gBAAS,EAAC,2BAA2B,CAAC,CAAC;YACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,gBAAgB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QACjE,CAAC;QAGD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAE9F,IAAG,CAAC,YAAY,EAAC,CAAC;YACd,IAAA,gBAAS,EAAC,yBAAyB,CAAC,CAAC;YACrC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QACjE,CAAC;QAGD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACjF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QAE9F,MAAM,MAAM,GAAa,SAAS,CAAC,IAAI,CAAC;QAGxC,MAAM,IAAI,GAAW,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/H,OAAO,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAClF,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,EAAU;QACvC,MAAM,QAAQ,GAAkB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACxD,UAAU,EAAE,kBAAkB;YAC9B,WAAW,EAAE,SAAS,EAAE,GAAG;SAC9B,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAErB,IAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC,EAAC,CAAC;YAErC,OAAO,IAAI,CAAC;QAChB,CAAC;aACG,CAAC;YACD,MAAM,SAAS,GAAG,QAAQ,EAAE,OAAgB,CAAC;YAC7C,MAAM,cAAc,GAAmB,SAAS,CAAC,CAAC,CAAC,CAAC;YACpD,OAAO,cAAc,CAAC;QAC1B,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,UAAkB,EAAE,SAA4B;QAC1E,MAAM,QAAQ,GAAkB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACxD,UAAU,EAAE,UAAU;YACtB,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;SAChD,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEtB,IAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC,EAAC,CAAC;YAErC,OAAO,IAAI,CAAC;QAChB,CAAC;aACG,CAAC;YACD,MAAM,SAAS,GAAG,QAAQ,EAAE,OAAgB,CAAC;YAC7C,MAAM,cAAc,GAAmB,SAAS,CAAC,CAAC,CAAC,CAAC;YACpD,OAAO,cAAc,CAAC;QAC1B,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,SAA4B;QACjD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YACrC,OAAO,QAAQ,CAAC,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QACvD,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAGO,uBAAuB,CAAC,WAAgB,EAAE,cAA8B;QAC5E,IAAI,OAAO,GAA+B;YACtC,QAAQ,EAAE,cAAc,CAAC,QAAQ;YACjC,UAAU,EAAE,EAAE;SACjB,CAAC;QAEF,KAAI,IAAI,SAAS,IAAI,WAAW,EAAC,CAAC;YAE9B,IAAG,SAAS,CAAC,KAAK,GAAG,CAAC,EAAC,CAAC;gBAEpB,SAAS;YACb,CAAC;YAED,IAAI,kBAAkB,GAAuB,IAAI,yBAAkB,EAAE,CAAC;YACtE,kBAAkB,CAAC,gBAAgB,GAAG,EAAE,CAAC;YACzC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACrC,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,SAAS,CAAC,EAAE;aACtB,CAAC,CAAC;YACH,kBAAkB,CAAC,gBAAgB,GAAG,SAAS,CAAC,KAAK,CAAC;YACtD,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAES,mBAAmB,CAAC,GAAW,EAAE,GAAQ;QAE/C,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAGjD,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAI5C,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3G,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,UAAU,CAAC,CAAC;IACrD,CAAC;CACJ;AApKD,0DAoKC"}
|
|
1
|
+
{"version":3,"file":"duplicateRecordDetector.js","sourceRoot":"","sources":["../src/duplicateRecordDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.types.d.ts","sourceRoot":"","sources":["../../src/generic/entity.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,EAAE,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"entity.types.d.ts","sourceRoot":"","sources":["../../src/generic/entity.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,EAAE,IAAI,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAA;CACjC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ai-vector-dupe",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "MemberJunction: AI Vector/Entity Sync Package - Handles synchronization between Vector DB and MJ CDP Data",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -15,14 +15,14 @@
|
|
|
15
15
|
"author": "MemberJunction.com",
|
|
16
16
|
"license": "ISC",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@memberjunction/ai": "~1.
|
|
19
|
-
"@memberjunction/ai-vectordb": "~1.
|
|
20
|
-
"@memberjunction/ai-vectors": "~1.
|
|
21
|
-
"@memberjunction/ai-
|
|
22
|
-
"@memberjunction/aiengine": "~1.
|
|
23
|
-
"@memberjunction/core": "~1.
|
|
24
|
-
"@memberjunction/global": "~1.
|
|
25
|
-
"@memberjunction/core-entities": "~1.
|
|
18
|
+
"@memberjunction/ai": "~1.3.0",
|
|
19
|
+
"@memberjunction/ai-vectordb": "~1.3.0",
|
|
20
|
+
"@memberjunction/ai-vectors": "~1.3.0",
|
|
21
|
+
"@memberjunction/ai-vector-sync": "~1.3.0",
|
|
22
|
+
"@memberjunction/aiengine": "~1.3.0",
|
|
23
|
+
"@memberjunction/core": "~1.3.0",
|
|
24
|
+
"@memberjunction/global": "~1.3.0",
|
|
25
|
+
"@memberjunction/core-entities": "~1.3.0",
|
|
26
26
|
"dotenv": "^16.0.3",
|
|
27
27
|
"typeorm": "^0.3.20"
|
|
28
28
|
},
|