@memberjunction/ai-vector-dupe 0.9.2
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/config.d.ts +12 -0
- package/dist/config.js +21 -0
- package/dist/config.js.map +1 -0
- package/dist/duplicateRecordDetector.d.ts +9 -0
- package/dist/duplicateRecordDetector.js +100 -0
- package/dist/duplicateRecordDetector.js.map +1 -0
- package/dist/generic/entity.types.d.ts +23 -0
- package/dist/generic/entity.types.js +3 -0
- package/dist/generic/entity.types.js.map +1 -0
- package/dist/generic/vectorSyncBase.d.ts +19 -0
- package/dist/generic/vectorSyncBase.js +70 -0
- package/dist/generic/vectorSyncBase.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/models/entitySyncConfig.d.ts +10 -0
- package/dist/models/entitySyncConfig.js +3 -0
- package/dist/models/entitySyncConfig.js.map +1 -0
- package/package.json +35 -0
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const openAIAPIKey: string;
|
|
2
|
+
export declare const pineconeHost: string;
|
|
3
|
+
export declare const pineconeAPIKey: string;
|
|
4
|
+
export declare const pineconeDefaultIndex: string;
|
|
5
|
+
export declare const dbHost: string;
|
|
6
|
+
export declare const dbPort: number;
|
|
7
|
+
export declare const dbUsername: string;
|
|
8
|
+
export declare const dbPassword: string;
|
|
9
|
+
export declare const dbDatabase: string;
|
|
10
|
+
export declare const serverPort: number;
|
|
11
|
+
export declare const currentUserEmail: string;
|
|
12
|
+
export declare const mistralAPIKey: string;
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.mistralAPIKey = exports.currentUserEmail = exports.serverPort = exports.dbDatabase = exports.dbPassword = exports.dbUsername = exports.dbPort = exports.dbHost = exports.pineconeDefaultIndex = exports.pineconeAPIKey = exports.pineconeHost = exports.openAIAPIKey = void 0;
|
|
7
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
8
|
+
dotenv_1.default.config();
|
|
9
|
+
exports.openAIAPIKey = process.env.OPENAI_API_KEY;
|
|
10
|
+
exports.pineconeHost = process.env.PINECONE_HOST;
|
|
11
|
+
exports.pineconeAPIKey = process.env.PINECONE_API_KEY;
|
|
12
|
+
exports.pineconeDefaultIndex = process.env.PINECONE_DEFAULT_INDEX;
|
|
13
|
+
exports.dbHost = process.env.DB_HOST;
|
|
14
|
+
exports.dbPort = Number(process.env.DB_PORT) || 1433;
|
|
15
|
+
exports.dbUsername = process.env.DB_USERNAME;
|
|
16
|
+
exports.dbPassword = process.env.DB_PASSWORD;
|
|
17
|
+
exports.dbDatabase = process.env.DB_DATABASE;
|
|
18
|
+
exports.serverPort = Number(process.env.PORT) || 8000;
|
|
19
|
+
exports.currentUserEmail = process.env.CURRENT_USER_EMAIL;
|
|
20
|
+
exports.mistralAPIKey = process.env.MISTRAL_API_KEY;
|
|
21
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEH,QAAA,YAAY,GAAW,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAClD,QAAA,YAAY,GAAW,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AACjD,QAAA,cAAc,GAAW,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACtD,QAAA,oBAAoB,GAAW,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;AAElE,QAAA,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AAC7B,QAAA,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AAC7C,QAAA,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AACrC,QAAA,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AACrC,QAAA,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AACrC,QAAA,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAE9C,QAAA,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAElD,QAAA,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { VectorSyncBase } from "./generic/vectorSyncBase";
|
|
2
|
+
import { PotentialDuplicateRequest, PotentialDuplicateResponse, UserInfo } from "@memberjunction/core";
|
|
3
|
+
export declare class DuplicateRecordDetector extends VectorSyncBase {
|
|
4
|
+
getDuplicateRecords(params: PotentialDuplicateRequest, contextUser?: UserInfo): Promise<PotentialDuplicateResponse>;
|
|
5
|
+
private getEntityDocumennt;
|
|
6
|
+
private getEntityRecord;
|
|
7
|
+
private buildExtraFilter;
|
|
8
|
+
private processDuplicateRecords;
|
|
9
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DuplicateRecordDetector = void 0;
|
|
4
|
+
const ai_1 = require("@memberjunction/ai");
|
|
5
|
+
const vectorSyncBase_1 = require("./generic/vectorSyncBase");
|
|
6
|
+
const ai_mistral_1 = require("@memberjunction/ai-mistral");
|
|
7
|
+
const ai_vectors_pinecone_1 = require("@memberjunction/ai-vectors-pinecone");
|
|
8
|
+
const core_1 = require("@memberjunction/core");
|
|
9
|
+
const core_2 = require("@memberjunction/core");
|
|
10
|
+
class DuplicateRecordDetector extends vectorSyncBase_1.VectorSyncBase {
|
|
11
|
+
async getDuplicateRecords(params, contextUser) {
|
|
12
|
+
this._contextUser = contextUser;
|
|
13
|
+
if (!this._contextUser) {
|
|
14
|
+
(0, core_1.LogError)("Context User not found, using default");
|
|
15
|
+
const md = new core_1.Metadata();
|
|
16
|
+
this._contextUser = md.CurrentUser;
|
|
17
|
+
}
|
|
18
|
+
if (!this._runView) {
|
|
19
|
+
this._runView = new core_1.RunView();
|
|
20
|
+
}
|
|
21
|
+
const pineconeAPIKey = (0, ai_1.GetAIAPIKey)("PineconeDatabase");
|
|
22
|
+
const mistralAPIKey = (0, ai_1.GetAIAPIKey)("MistralLLM");
|
|
23
|
+
this._pineconeDB = new ai_vectors_pinecone_1.PineconeDatabase(pineconeAPIKey);
|
|
24
|
+
this._embedding = new ai_mistral_1.MistralLLM(mistralAPIKey);
|
|
25
|
+
this._languageModel = new ai_mistral_1.MistralLLM(mistralAPIKey);
|
|
26
|
+
const entitiyDocument = await this.getEntityDocumennt(params.EntityDocumentID);
|
|
27
|
+
(0, core_2.LogStatus)("Entity Document: " + entitiyDocument);
|
|
28
|
+
if (!entitiyDocument) {
|
|
29
|
+
(0, core_2.LogStatus)("Entity Document not found");
|
|
30
|
+
return { EntityID: params.EntityDocumentID, Duplicates: [] };
|
|
31
|
+
}
|
|
32
|
+
const entityRecord = await this.getEntityRecord(entitiyDocument.Type, params.PrimaryKeyValues);
|
|
33
|
+
(0, core_2.LogStatus)("Entity Record: ", entityRecord);
|
|
34
|
+
if (!entityRecord) {
|
|
35
|
+
(0, core_2.LogStatus)("Entity Record not found");
|
|
36
|
+
return { EntityID: entitiyDocument.EntityID, Duplicates: [] };
|
|
37
|
+
}
|
|
38
|
+
const template = super.parseStringTemplate(entitiyDocument.Template, entityRecord);
|
|
39
|
+
const embedding = await this._languageModel.EmbedText({ text: template, model: "mistral-embed" });
|
|
40
|
+
const vector = embedding.data;
|
|
41
|
+
const topK = 10;
|
|
42
|
+
const queryResult = await this._pineconeDB.queryIndex({ vector: vector, topK: topK, includeMetadata: true, includeValues: true });
|
|
43
|
+
return this.processDuplicateRecords(queryResult.data.matches, entitiyDocument);
|
|
44
|
+
}
|
|
45
|
+
async getEntityDocumennt(id) {
|
|
46
|
+
const rvResult = await this._runView.RunView({
|
|
47
|
+
EntityName: "Entity Documents",
|
|
48
|
+
ExtraFilter: `ID = '${id}'`
|
|
49
|
+
}, this._contextUser);
|
|
50
|
+
if (!rvResult || rvResult.RowCount === 0) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const vdResults = rvResult?.Results;
|
|
55
|
+
const entityDocument = vdResults[0];
|
|
56
|
+
return entityDocument;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async getEntityRecord(entityName, keyValues) {
|
|
60
|
+
const rvResult = await this._runView.RunView({
|
|
61
|
+
EntityName: entityName,
|
|
62
|
+
ExtraFilter: this.buildExtraFilter(keyValues)
|
|
63
|
+
}, this._contextUser);
|
|
64
|
+
if (!rvResult || rvResult.RowCount === 0) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
const vdResults = rvResult?.Results;
|
|
69
|
+
const entityDocument = vdResults[0];
|
|
70
|
+
return entityDocument;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
buildExtraFilter(keyValues) {
|
|
74
|
+
return keyValues.map((keyValue, index) => {
|
|
75
|
+
return keyValue.FieldName + " = " + keyValue.Value;
|
|
76
|
+
}).join(" AND ");
|
|
77
|
+
}
|
|
78
|
+
processDuplicateRecords(queryResult, entityDocument) {
|
|
79
|
+
let results = {
|
|
80
|
+
EntityID: entityDocument.EntityID,
|
|
81
|
+
Duplicates: []
|
|
82
|
+
};
|
|
83
|
+
for (let duplicate of queryResult) {
|
|
84
|
+
if (duplicate.score > 1) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
let potentialDuplicate = new core_1.PotentialDuplicate();
|
|
88
|
+
potentialDuplicate.PrimaryKeyValues = [];
|
|
89
|
+
potentialDuplicate.PrimaryKeyValues.push({
|
|
90
|
+
FieldName: "ID",
|
|
91
|
+
Value: duplicate.id
|
|
92
|
+
});
|
|
93
|
+
potentialDuplicate.ProbabilityScore = duplicate.score;
|
|
94
|
+
results.Duplicates.push(potentialDuplicate);
|
|
95
|
+
}
|
|
96
|
+
return results;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.DuplicateRecordDetector = DuplicateRecordDetector;
|
|
100
|
+
//# sourceMappingURL=duplicateRecordDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duplicateRecordDetector.js","sourceRoot":"","sources":["../src/duplicateRecordDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type EntityDocument = {
|
|
2
|
+
ID: number;
|
|
3
|
+
Name: string;
|
|
4
|
+
EntityID: number;
|
|
5
|
+
TypeID: number;
|
|
6
|
+
Status: string;
|
|
7
|
+
Template: string;
|
|
8
|
+
CreatedAt: Date;
|
|
9
|
+
UpdatedAt: Date;
|
|
10
|
+
Type: string;
|
|
11
|
+
VectorIndexID: number;
|
|
12
|
+
VectorID: number;
|
|
13
|
+
};
|
|
14
|
+
export type EntitiyRecordDocument = {
|
|
15
|
+
ID: number;
|
|
16
|
+
EntityID: number;
|
|
17
|
+
RecordID: number;
|
|
18
|
+
DocumentText: string;
|
|
19
|
+
VectorIndexID: number;
|
|
20
|
+
VectorID: number;
|
|
21
|
+
VectorJSON: string;
|
|
22
|
+
EntitiyRecordUpdatedAt: Date;
|
|
23
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.types.js","sourceRoot":"","sources":["../../src/generic/entity.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BaseLLM } from "@memberjunction/ai";
|
|
2
|
+
import { PineconeDatabase } from "@memberjunction/ai-vectors-pinecone";
|
|
3
|
+
import { UserInfo, RunView } from "@memberjunction/core";
|
|
4
|
+
export declare class VectorSyncBase {
|
|
5
|
+
_contextUser: UserInfo;
|
|
6
|
+
_runView: RunView;
|
|
7
|
+
_startTime: Date;
|
|
8
|
+
_endTime: Date;
|
|
9
|
+
_pineconeDB: PineconeDatabase;
|
|
10
|
+
_embedding: BaseLLM;
|
|
11
|
+
_languageModel: BaseLLM;
|
|
12
|
+
protected timer(ms: number): Promise<unknown>;
|
|
13
|
+
protected parseStringTemplate(str: string, obj: any): string;
|
|
14
|
+
protected start(): void;
|
|
15
|
+
protected end(): void;
|
|
16
|
+
protected timeDiff(): number;
|
|
17
|
+
protected saveJSONData(data: any, path: string): void;
|
|
18
|
+
protected isEmpty(obj: any): boolean;
|
|
19
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.VectorSyncBase = void 0;
|
|
27
|
+
const fs = __importStar(require("fs"));
|
|
28
|
+
class VectorSyncBase {
|
|
29
|
+
_contextUser;
|
|
30
|
+
_runView;
|
|
31
|
+
_startTime;
|
|
32
|
+
_endTime;
|
|
33
|
+
_pineconeDB;
|
|
34
|
+
_embedding;
|
|
35
|
+
_languageModel;
|
|
36
|
+
async timer(ms) {
|
|
37
|
+
return new Promise(res => setTimeout(res, ms));
|
|
38
|
+
}
|
|
39
|
+
parseStringTemplate(str, obj) {
|
|
40
|
+
let parts = str.split(/\$\{(?!\d)[\wæøåÆØÅ]*\}/);
|
|
41
|
+
let args = str.match(/[^{\}]+(?=})/g) || [];
|
|
42
|
+
let parameters = args.map(argument => obj[argument] || (obj[argument] === undefined ? "" : obj[argument]));
|
|
43
|
+
return String.raw({ raw: parts }, ...parameters);
|
|
44
|
+
}
|
|
45
|
+
start() {
|
|
46
|
+
this._startTime = new Date();
|
|
47
|
+
}
|
|
48
|
+
end() {
|
|
49
|
+
this._endTime = new Date();
|
|
50
|
+
}
|
|
51
|
+
timeDiff() {
|
|
52
|
+
let timeDiff = this._endTime.valueOf() - this._startTime.valueOf();
|
|
53
|
+
timeDiff /= 1000;
|
|
54
|
+
var seconds = Math.round(timeDiff);
|
|
55
|
+
return seconds;
|
|
56
|
+
}
|
|
57
|
+
saveJSONData(data, path) {
|
|
58
|
+
fs.writeFileSync(path, JSON.stringify(data, null, 2));
|
|
59
|
+
}
|
|
60
|
+
isEmpty(obj) {
|
|
61
|
+
for (const prop in obj) {
|
|
62
|
+
if (Object.hasOwn(obj, prop)) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.VectorSyncBase = VectorSyncBase;
|
|
70
|
+
//# sourceMappingURL=vectorSyncBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vectorSyncBase.js","sourceRoot":"","sources":["../../src/generic/vectorSyncBase.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AAKzB,MAAa,cAAc;IACvB,YAAY,CAAW;IACvB,QAAQ,CAAU;IAElB,UAAU,CAAO;IACjB,QAAQ,CAAO;IAEf,WAAW,CAAmB;IAC9B,UAAU,CAAU;IACpB,cAAc,CAAU;IAEd,KAAK,CAAC,KAAK,CAAC,EAAU;QAC5B,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,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;IAES,KAAK;QACX,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;IACjC,CAAC;IAES,GAAG;QACT,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAES,QAAQ;QACd,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAEnE,QAAQ,IAAI,IAAI,CAAC;QAGjB,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC;IACnB,CAAC;IAES,YAAY,CAAC,IAAS,EAAE,IAAY;QAC1C,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAES,OAAO,CAAC,GAAG;QACjB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACvB,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AA3DD,wCA2DC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./generic/entity.types"), exports);
|
|
18
|
+
__exportStar(require("./generic/vectorSyncBase"), exports);
|
|
19
|
+
__exportStar(require("./models/entitySyncConfig"), exports);
|
|
20
|
+
__exportStar(require("./duplicateRecordDetector"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,2DAAyC;AACzC,4DAA0C;AAC1C,4DAA0C"}
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitySyncConfig.js","sourceRoot":"","sources":["../../src/models/entitySyncConfig.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@memberjunction/ai-vector-dupe",
|
|
3
|
+
"version": "0.9.2",
|
|
4
|
+
"description": "MemberJunction: AI Vector/Entity Sync Package - Handles synchronization between Vector DB and MJ CDP Data",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"/dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"start": "ts-node-dev src/index.ts",
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
14
|
+
},
|
|
15
|
+
"author": "MemberJunction.com",
|
|
16
|
+
"license": "ISC",
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@memberjunction/ai": "^0.9.159",
|
|
19
|
+
"@memberjunction/ai-mistral": "^0.9.16",
|
|
20
|
+
"@memberjunction/ai-vectordb": "^0.9.3",
|
|
21
|
+
"@memberjunction/ai-vectors": "^0.9.4",
|
|
22
|
+
"@memberjunction/ai-vectors-pinecone": "^0.9.2",
|
|
23
|
+
"@memberjunction/aiengine": "^0.9.56",
|
|
24
|
+
"@memberjunction/core": "^0.9.171",
|
|
25
|
+
"@memberjunction/global": "^0.9.152",
|
|
26
|
+
"dotenv": "^16.0.3",
|
|
27
|
+
"typeorm": "^0.3.20"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/mssql": "^9.1.5",
|
|
31
|
+
"@types/node": "^20.1.7",
|
|
32
|
+
"ts-node-dev": "^2.0.0",
|
|
33
|
+
"typescript": "^5.3.3"
|
|
34
|
+
}
|
|
35
|
+
}
|