@memberjunction/content-autotagging 5.23.0 → 5.24.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/CloudStorage/generic/CloudStorageBase.js +1 -1
- package/dist/CloudStorage/generic/CloudStorageBase.js.map +1 -1
- package/dist/CloudStorage/index.d.ts +5 -0
- package/dist/CloudStorage/index.d.ts.map +1 -1
- package/dist/CloudStorage/index.js +5 -0
- package/dist/CloudStorage/index.js.map +1 -1
- package/dist/CloudStorage/providers/AutotagCloudStorage.d.ts +61 -0
- package/dist/CloudStorage/providers/AutotagCloudStorage.d.ts.map +1 -0
- package/dist/CloudStorage/providers/AutotagCloudStorage.js +256 -0
- package/dist/CloudStorage/providers/AutotagCloudStorage.js.map +1 -0
- package/dist/Core/generic/AutotagBase.d.ts +7 -1
- package/dist/Core/generic/AutotagBase.d.ts.map +1 -1
- package/dist/Core/generic/AutotagBase.js.map +1 -1
- package/dist/Engine/generic/AutotagBaseEngine.d.ts +318 -18
- package/dist/Engine/generic/AutotagBaseEngine.d.ts.map +1 -1
- package/dist/Engine/generic/AutotagBaseEngine.js +1024 -176
- package/dist/Engine/generic/AutotagBaseEngine.js.map +1 -1
- package/dist/Engine/generic/RateLimiter.d.ts +49 -0
- package/dist/Engine/generic/RateLimiter.d.ts.map +1 -0
- package/dist/Engine/generic/RateLimiter.js +98 -0
- package/dist/Engine/generic/RateLimiter.js.map +1 -0
- package/dist/Engine/index.d.ts +1 -0
- package/dist/Engine/index.d.ts.map +1 -1
- package/dist/Engine/index.js +1 -0
- package/dist/Engine/index.js.map +1 -1
- package/dist/Entity/generic/AutotagEntity.d.ts +63 -14
- package/dist/Entity/generic/AutotagEntity.d.ts.map +1 -1
- package/dist/Entity/generic/AutotagEntity.js +362 -83
- package/dist/Entity/generic/AutotagEntity.js.map +1 -1
- package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.js +1 -1
- package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.js.map +1 -1
- package/dist/RSSFeed/generic/AutotagRSSFeed.d.ts +47 -16
- package/dist/RSSFeed/generic/AutotagRSSFeed.d.ts.map +1 -1
- package/dist/RSSFeed/generic/AutotagRSSFeed.js +238 -120
- package/dist/RSSFeed/generic/AutotagRSSFeed.js.map +1 -1
- package/dist/Websites/generic/AutotagWebsite.js +1 -1
- package/dist/Websites/generic/AutotagWebsite.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +16 -11
|
@@ -4,127 +4,406 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
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;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { RegisterClass } from "@memberjunction/global";
|
|
7
|
+
import { RegisterClass, UUIDsEqual, NormalizeUUID } from "@memberjunction/global";
|
|
11
8
|
import { AutotagBase } from "../../Core/index.js";
|
|
12
9
|
import { AutotagBaseEngine } from "../../Engine/index.js";
|
|
13
|
-
import { Metadata, RunView, LogStatus } from "@memberjunction/core";
|
|
10
|
+
import { Metadata, RunView, LogStatus, LogError } from "@memberjunction/core";
|
|
11
|
+
import { EntityDocumentTemplateParser } from "@memberjunction/ai-vector-sync";
|
|
12
|
+
import { TemplateEngineServer } from "@memberjunction/templates";
|
|
13
|
+
import { TagEngine } from "@memberjunction/tag-engine";
|
|
14
|
+
/**
|
|
15
|
+
* Autotag provider for MJ entity records. Uses the EntityDocument template pipeline
|
|
16
|
+
* to render records into text, creates EntityRecordDocument snapshots, links them
|
|
17
|
+
* to ContentItems, and feeds the text through the LLM autotagging pipeline.
|
|
18
|
+
*
|
|
19
|
+
* Configuration is driven by ContentSource.EntityID and ContentSource.EntityDocumentID
|
|
20
|
+
* rather than the legacy ContentSourceParam key/value approach.
|
|
21
|
+
*/
|
|
14
22
|
let AutotagEntity = class AutotagEntity extends AutotagBase {
|
|
15
23
|
constructor() {
|
|
16
|
-
super();
|
|
17
|
-
|
|
24
|
+
super(...arguments);
|
|
25
|
+
/** Cached content source configs keyed by normalized source ID for bridge callback */
|
|
26
|
+
this.sourceConfigMap = new Map();
|
|
27
|
+
/** Cached content source entities keyed by normalized source ID for ERD lookups */
|
|
28
|
+
this.contentSourceMap = new Map();
|
|
18
29
|
}
|
|
19
|
-
async Autotag(contextUser, onProgress) {
|
|
30
|
+
async Autotag(contextUser, onProgress, contentSourceIDs) {
|
|
20
31
|
this.contextUser = contextUser;
|
|
32
|
+
this.engine = AutotagBaseEngine.Instance;
|
|
21
33
|
this.contentSourceTypeID = this.engine.SetSubclassContentSourceType('Entity');
|
|
22
|
-
|
|
34
|
+
let contentSources = await this.engine.getAllContentSources(contextUser, this.contentSourceTypeID);
|
|
35
|
+
// Apply source ID filter if specified
|
|
36
|
+
if (contentSourceIDs && contentSourceIDs.length > 0) {
|
|
37
|
+
contentSources = contentSources.filter(s => contentSourceIDs.some(id => UUIDsEqual(id, s.ID)));
|
|
38
|
+
}
|
|
39
|
+
// Cache content source configs and set up taxonomy
|
|
40
|
+
await this.SetupTaxonomyAndBridge(contentSources, contextUser);
|
|
23
41
|
const contentItemsToProcess = await this.SetContentItemsToProcess(contentSources);
|
|
24
|
-
|
|
42
|
+
if (contentItemsToProcess.length > 0) {
|
|
43
|
+
await this.engine.ExtractTextAndProcessWithLLM(contentItemsToProcess, contextUser, undefined, undefined, onProgress);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
LogStatus('AutotagEntity: no new or modified entity records to process');
|
|
47
|
+
}
|
|
48
|
+
// Clean up engine state
|
|
49
|
+
this.engine.TaxonomyContext = null;
|
|
50
|
+
this.engine.OnContentItemTagSaved = null;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Initialize the TagEngine, inject taxonomy into the prompt, and set up the
|
|
54
|
+
* bridge callback that links ContentItemTags to formal Tag + TaggedItem records.
|
|
55
|
+
*/
|
|
56
|
+
async SetupTaxonomyAndBridge(contentSources, contextUser) {
|
|
57
|
+
// Cache source configs for bridge callback — use CodeGen-generated typed accessor
|
|
58
|
+
for (const source of contentSources) {
|
|
59
|
+
const normalizedID = NormalizeUUID(source.ID);
|
|
60
|
+
this.contentSourceMap.set(normalizedID, source);
|
|
61
|
+
const config = source.ConfigurationObject;
|
|
62
|
+
if (config) {
|
|
63
|
+
this.sourceConfigMap.set(normalizedID, config);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Initialize TagEngine (loads tags + generates embeddings)
|
|
67
|
+
try {
|
|
68
|
+
await TagEngine.Instance.Config(false, contextUser);
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
72
|
+
LogError(`AutotagEntity: TagEngine initialization failed, taxonomy features disabled: ${msg}`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// Inject taxonomy context into the prompt (if any source has ShareTaxonomyWithLLM enabled)
|
|
76
|
+
const shouldShareTaxonomy = Array.from(this.sourceConfigMap.values()).some(c => c.ShareTaxonomyWithLLM !== false // default true
|
|
77
|
+
);
|
|
78
|
+
if (shouldShareTaxonomy && TagEngine.Instance.Tags.length > 0) {
|
|
79
|
+
// Determine the narrowest taxonomy root across all sources
|
|
80
|
+
const rootIDs = Array.from(this.sourceConfigMap.values())
|
|
81
|
+
.map(c => c.TagRootID)
|
|
82
|
+
.filter((id) => id != null);
|
|
83
|
+
const taxonomyRoot = rootIDs.length === 1 ? rootIDs[0] : undefined;
|
|
84
|
+
const tree = TagEngine.Instance.GetTaxonomyTree(taxonomyRoot);
|
|
85
|
+
this.engine.TaxonomyContext = JSON.stringify(tree, null, 2);
|
|
86
|
+
}
|
|
87
|
+
// Set up the bridge callback for tag taxonomy linking
|
|
88
|
+
this.engine.OnContentItemTagSaved = async (contentItemTag, parentTagName, ctxUser) => {
|
|
89
|
+
await this.BridgeContentItemTagToTaxonomy(contentItemTag, parentTagName, ctxUser);
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Bridge a ContentItemTag to the formal MJ Tag taxonomy.
|
|
94
|
+
* Uses TagEngine.ResolveTag() for semantic matching with mode/threshold from source config.
|
|
95
|
+
* Creates a TaggedItem linking the resolved Tag to the source entity record.
|
|
96
|
+
*/
|
|
97
|
+
async BridgeContentItemTagToTaxonomy(contentItemTag, parentTagName, contextUser) {
|
|
98
|
+
// Find the source config for this content item
|
|
99
|
+
const rv = new RunView();
|
|
100
|
+
const ciResult = await rv.RunView({
|
|
101
|
+
EntityName: 'MJ: Content Items',
|
|
102
|
+
ExtraFilter: `ID='${contentItemTag.ItemID}'`,
|
|
103
|
+
Fields: ['ID', 'ContentSourceID', 'EntityRecordDocumentID'],
|
|
104
|
+
ResultType: 'simple',
|
|
105
|
+
MaxRows: 1
|
|
106
|
+
}, contextUser);
|
|
107
|
+
if (!ciResult.Success || ciResult.Results.length === 0)
|
|
108
|
+
return;
|
|
109
|
+
const ci = ciResult.Results[0];
|
|
110
|
+
const erdID = ci.EntityRecordDocumentID;
|
|
111
|
+
if (!erdID)
|
|
112
|
+
return; // not entity-sourced
|
|
113
|
+
const sourceID = ci.ContentSourceID;
|
|
114
|
+
const config = this.sourceConfigMap.get(NormalizeUUID(sourceID));
|
|
115
|
+
const mode = config?.TagTaxonomyMode ?? 'auto-grow';
|
|
116
|
+
const rootID = config?.TagRootID ?? null;
|
|
117
|
+
const threshold = config?.TagMatchThreshold ?? 0.9;
|
|
118
|
+
// If parent tag is suggested by LLM, resolve it through the mutex too
|
|
119
|
+
// to prevent duplicate parent tags from concurrent batch processing.
|
|
120
|
+
// ResolveTag handles find-or-create atomically.
|
|
121
|
+
if (parentTagName && mode !== 'constrained') {
|
|
122
|
+
await TagEngine.Instance.ResolveTag(parentTagName, 0, mode, rootID, threshold, contextUser);
|
|
123
|
+
}
|
|
124
|
+
// Resolve the tag to a formal Tag record
|
|
125
|
+
const formalTag = await TagEngine.Instance.ResolveTag(contentItemTag.Tag, contentItemTag.Weight, mode, rootID, threshold, contextUser);
|
|
126
|
+
if (!formalTag)
|
|
127
|
+
return; // constrained mode, no match
|
|
128
|
+
// Link ContentItemTag to formal Tag
|
|
129
|
+
contentItemTag.TagID = formalTag.ID;
|
|
130
|
+
await contentItemTag.Save();
|
|
131
|
+
// Load ERD to get source entity info
|
|
132
|
+
const erdResult = await rv.RunView({
|
|
133
|
+
EntityName: 'MJ: Entity Record Documents',
|
|
134
|
+
ExtraFilter: `ID='${erdID}'`,
|
|
135
|
+
Fields: ['ID', 'EntityID', 'RecordID'],
|
|
136
|
+
ResultType: 'simple',
|
|
137
|
+
MaxRows: 1
|
|
138
|
+
}, contextUser);
|
|
139
|
+
if (!erdResult.Success || erdResult.Results.length === 0)
|
|
140
|
+
return;
|
|
141
|
+
const erd = erdResult.Results[0];
|
|
142
|
+
// Create TaggedItem linking formal Tag to source entity record
|
|
143
|
+
await TagEngine.Instance.CreateTaggedItem(formalTag.ID, erd.EntityID, erd.RecordID, contentItemTag.Weight, contextUser);
|
|
25
144
|
}
|
|
26
145
|
async SetContentItemsToProcess(contentSources) {
|
|
27
146
|
const contentItemsToProcess = [];
|
|
28
147
|
for (const contentSource of contentSources) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
const contentSourceParams = {
|
|
34
|
-
contentSourceID: contentSource.ID,
|
|
35
|
-
name: contentSource.Name,
|
|
36
|
-
ContentTypeID: contentSource.ContentTypeID,
|
|
37
|
-
ContentFileTypeID: contentSource.ContentFileTypeID,
|
|
38
|
-
ContentSourceTypeID: contentSource.ContentSourceTypeID,
|
|
39
|
-
URL: contentSource.URL
|
|
40
|
-
};
|
|
41
|
-
const contentItems = await this.getNewOrModifiedContentItems(contentSourceParams, this.contextUser);
|
|
42
|
-
if (contentItems && contentItems.length > 0) {
|
|
43
|
-
contentItemsToProcess.push(...contentItems);
|
|
148
|
+
try {
|
|
149
|
+
const items = await this.ProcessContentSource(contentSource);
|
|
150
|
+
contentItemsToProcess.push(...items);
|
|
44
151
|
}
|
|
45
|
-
|
|
46
|
-
|
|
152
|
+
catch (e) {
|
|
153
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
154
|
+
LogError(`AutotagEntity: failed to process content source "${contentSource.Name}": ${msg}`);
|
|
47
155
|
}
|
|
48
156
|
}
|
|
49
157
|
return contentItemsToProcess;
|
|
50
158
|
}
|
|
51
159
|
/**
|
|
52
|
-
*
|
|
160
|
+
* Process a single entity-type ContentSource: load entity records modified since last run,
|
|
161
|
+
* render via EntityDocument template, create/update ERD and ContentItem records.
|
|
53
162
|
*/
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
163
|
+
async ProcessContentSource(contentSource) {
|
|
164
|
+
const entityID = contentSource.EntityID;
|
|
165
|
+
const entityDocumentID = contentSource.EntityDocumentID;
|
|
166
|
+
if (!entityID || !entityDocumentID) {
|
|
167
|
+
LogError(`AutotagEntity: content source "${contentSource.Name}" is missing EntityID or EntityDocumentID`);
|
|
168
|
+
return [];
|
|
169
|
+
}
|
|
170
|
+
// Load the EntityDocument
|
|
171
|
+
const entityDocument = await this.LoadEntityDocument(entityDocumentID);
|
|
172
|
+
if (!entityDocument) {
|
|
173
|
+
LogError(`AutotagEntity: EntityDocument ${entityDocumentID} not found for source "${contentSource.Name}"`);
|
|
174
|
+
return [];
|
|
175
|
+
}
|
|
176
|
+
const templateText = await this.GetTemplateText(entityDocument);
|
|
177
|
+
if (!templateText) {
|
|
178
|
+
LogError(`AutotagEntity: no template content found for EntityDocument "${entityDocument.Name}"`);
|
|
179
|
+
return [];
|
|
180
|
+
}
|
|
181
|
+
// Resolve the entity name from metadata
|
|
182
|
+
const md = new Metadata();
|
|
183
|
+
const entityInfo = md.Entities.find(e => UUIDsEqual(e.ID, entityID));
|
|
184
|
+
if (!entityInfo) {
|
|
185
|
+
LogError(`AutotagEntity: entity with ID ${entityID} not found in metadata`);
|
|
186
|
+
return [];
|
|
187
|
+
}
|
|
188
|
+
// Get records modified since last run
|
|
189
|
+
const lastRunDate = await this.engine.getContentSourceLastRunDate(contentSource.ID, this.contextUser);
|
|
190
|
+
const modifiedRecords = await this.GetModifiedRecords(entityInfo.Name, lastRunDate);
|
|
191
|
+
if (modifiedRecords.length === 0) {
|
|
192
|
+
LogStatus(`AutotagEntity: no modified records for entity "${entityInfo.Name}" since ${lastRunDate.toISOString()}`);
|
|
193
|
+
return [];
|
|
194
|
+
}
|
|
195
|
+
LogStatus(`AutotagEntity: processing ${modifiedRecords.length} modified records for entity "${entityInfo.Name}"`);
|
|
196
|
+
// Load existing ERD records for this entity document to enable upsert
|
|
197
|
+
const existingERDs = await this.LoadExistingERDs(entityDocumentID, entityID);
|
|
198
|
+
// Load existing ContentItems for this source to enable upsert
|
|
199
|
+
const existingContentItems = await this.LoadExistingContentItems(contentSource.ID);
|
|
200
|
+
// Process each record: render template → create/update ERD → create/update ContentItem
|
|
201
|
+
const contentItems = [];
|
|
202
|
+
const parser = EntityDocumentTemplateParser.CreateInstance();
|
|
203
|
+
const pkFieldName = entityInfo.FirstPrimaryKey.Name;
|
|
204
|
+
for (const record of modifiedRecords) {
|
|
205
|
+
const recordID = String(record[pkFieldName] ?? '');
|
|
206
|
+
try {
|
|
207
|
+
const contentItem = await this.ProcessSingleRecord(record, recordID, contentSource, entityDocument, templateText, parser, existingERDs, existingContentItems);
|
|
208
|
+
if (contentItem) {
|
|
209
|
+
contentItems.push(contentItem);
|
|
63
210
|
}
|
|
64
211
|
}
|
|
65
|
-
|
|
212
|
+
catch (e) {
|
|
213
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
214
|
+
LogError(`AutotagEntity: failed to process record ${recordID} for entity "${entityInfo.Name}": ${msg}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return contentItems;
|
|
66
218
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
219
|
+
/**
|
|
220
|
+
* Load an EntityDocument by ID using RunView.
|
|
221
|
+
*/
|
|
222
|
+
async LoadEntityDocument(entityDocumentID) {
|
|
70
223
|
const rv = new RunView();
|
|
71
|
-
const
|
|
72
|
-
EntityName:
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}, contextUser);
|
|
77
|
-
if (
|
|
78
|
-
return
|
|
224
|
+
const result = await rv.RunView({
|
|
225
|
+
EntityName: 'MJ: Entity Documents',
|
|
226
|
+
ExtraFilter: `ID='${entityDocumentID}'`,
|
|
227
|
+
ResultType: 'entity_object',
|
|
228
|
+
MaxRows: 1
|
|
229
|
+
}, this.contextUser);
|
|
230
|
+
if (result.Success && result.Results.length > 0) {
|
|
231
|
+
return result.Results[0];
|
|
232
|
+
}
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Retrieves the template text from the EntityDocument's linked Template.
|
|
237
|
+
* Ensures TemplateEngineServer is configured before accessing Templates.
|
|
238
|
+
*/
|
|
239
|
+
async GetTemplateText(entityDocument) {
|
|
240
|
+
if (!entityDocument.TemplateID)
|
|
241
|
+
return null;
|
|
242
|
+
// Ensure engine is loaded (no-op if already configured)
|
|
243
|
+
await TemplateEngineServer.Instance.Config(false, this.contextUser);
|
|
244
|
+
const template = TemplateEngineServer.Instance.Templates.find((t) => UUIDsEqual(t.ID, entityDocument.TemplateID));
|
|
245
|
+
if (!template || template.Content.length === 0) {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
return template.Content[0].TemplateText;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Query entity records modified since lastRunDate using __mj_UpdatedAt.
|
|
252
|
+
*/
|
|
253
|
+
async GetModifiedRecords(entityName, lastRunDate) {
|
|
254
|
+
const rv = new RunView();
|
|
255
|
+
const result = await rv.RunView({
|
|
256
|
+
EntityName: entityName,
|
|
257
|
+
ExtraFilter: `__mj_UpdatedAt > '${lastRunDate.toISOString()}'`,
|
|
258
|
+
ResultType: 'simple'
|
|
259
|
+
}, this.contextUser);
|
|
260
|
+
if (result.Success) {
|
|
261
|
+
return result.Results;
|
|
79
262
|
}
|
|
80
263
|
return [];
|
|
81
264
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
265
|
+
/**
|
|
266
|
+
* Load existing EntityRecordDocument records for this entity document,
|
|
267
|
+
* keyed by normalized RecordID for fast lookup.
|
|
268
|
+
*/
|
|
269
|
+
async LoadExistingERDs(entityDocumentID, entityID) {
|
|
270
|
+
const rv = new RunView();
|
|
271
|
+
const result = await rv.RunView({
|
|
272
|
+
EntityName: 'MJ: Entity Record Documents',
|
|
273
|
+
ExtraFilter: `EntityDocumentID='${entityDocumentID}' AND EntityID='${entityID}'`,
|
|
274
|
+
ResultType: 'entity_object'
|
|
275
|
+
}, this.contextUser);
|
|
276
|
+
const map = new Map();
|
|
277
|
+
if (result.Success) {
|
|
278
|
+
for (const erd of result.Results) {
|
|
279
|
+
map.set(erd.RecordID, erd);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return map;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Load existing ContentItems for this content source, keyed by normalized
|
|
286
|
+
* EntityRecordDocumentID for fast lookup during upsert.
|
|
287
|
+
*/
|
|
288
|
+
async LoadExistingContentItems(contentSourceID) {
|
|
289
|
+
const rv = new RunView();
|
|
290
|
+
const result = await rv.RunView({
|
|
291
|
+
EntityName: 'MJ: Content Items',
|
|
292
|
+
ExtraFilter: `ContentSourceID='${contentSourceID}'`,
|
|
293
|
+
ResultType: 'entity_object'
|
|
294
|
+
}, this.contextUser);
|
|
295
|
+
const map = new Map();
|
|
296
|
+
if (result.Success) {
|
|
297
|
+
for (const ci of result.Results) {
|
|
298
|
+
if (ci.EntityRecordDocumentID) {
|
|
299
|
+
map.set(NormalizeUUID(ci.EntityRecordDocumentID), ci);
|
|
90
300
|
}
|
|
91
301
|
}
|
|
92
302
|
}
|
|
93
|
-
return
|
|
303
|
+
return map;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Process a single entity record: render template, create/update ERD, create/update ContentItem.
|
|
307
|
+
*/
|
|
308
|
+
async ProcessSingleRecord(record, recordID, contentSource, entityDocument, templateText, parser, existingERDs, existingContentItems) {
|
|
309
|
+
const entityID = contentSource.EntityID;
|
|
310
|
+
// 1. Render the template for this record
|
|
311
|
+
const renderedText = await parser.Parse(templateText, entityID, record, this.contextUser);
|
|
312
|
+
if (!renderedText || renderedText.trim().length === 0) {
|
|
313
|
+
LogStatus(`AutotagEntity: empty rendered text for record ${recordID}, skipping`);
|
|
314
|
+
return null;
|
|
315
|
+
}
|
|
316
|
+
// 2. Create or update EntityRecordDocument
|
|
317
|
+
const erd = await this.UpsertEntityRecordDocument(entityID, recordID, entityDocument, renderedText, existingERDs);
|
|
318
|
+
// 3. Compute checksum to detect content changes
|
|
319
|
+
const checksum = await this.engine.getChecksumFromText(renderedText);
|
|
320
|
+
// 4. Create or update ContentItem linked to ERD
|
|
321
|
+
const contentItem = await this.UpsertContentItem(contentSource, erd, renderedText, checksum, record, existingContentItems);
|
|
322
|
+
return contentItem;
|
|
94
323
|
}
|
|
95
|
-
|
|
324
|
+
/**
|
|
325
|
+
* Create or update an EntityRecordDocument snapshot.
|
|
326
|
+
*/
|
|
327
|
+
async UpsertEntityRecordDocument(entityID, recordID, entityDocument, documentText, existingERDs) {
|
|
96
328
|
const md = new Metadata();
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
329
|
+
let erd = existingERDs.get(recordID);
|
|
330
|
+
if (erd) {
|
|
331
|
+
// Update existing
|
|
332
|
+
erd.DocumentText = documentText;
|
|
333
|
+
erd.EntityRecordUpdatedAt = new Date();
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
// Create new
|
|
337
|
+
erd = await md.GetEntityObject('MJ: Entity Record Documents', this.contextUser);
|
|
338
|
+
erd.NewRecord();
|
|
339
|
+
erd.EntityID = entityID;
|
|
340
|
+
erd.RecordID = recordID;
|
|
341
|
+
erd.EntityDocumentID = entityDocument.ID;
|
|
342
|
+
erd.DocumentText = documentText;
|
|
343
|
+
erd.VectorIndexID = entityDocument.VectorIndexID;
|
|
344
|
+
erd.EntityRecordUpdatedAt = new Date();
|
|
345
|
+
}
|
|
346
|
+
const saved = await erd.Save();
|
|
347
|
+
if (!saved) {
|
|
348
|
+
throw new Error(`Failed to save EntityRecordDocument for record ${recordID}`);
|
|
111
349
|
}
|
|
112
|
-
|
|
350
|
+
// Update cache for subsequent lookups in this batch
|
|
351
|
+
existingERDs.set(recordID, erd);
|
|
352
|
+
return erd;
|
|
113
353
|
}
|
|
114
354
|
/**
|
|
115
|
-
*
|
|
116
|
-
*
|
|
355
|
+
* Create or update a ContentItem linked to the EntityRecordDocument.
|
|
356
|
+
* Only creates a new ContentItem if the checksum changed (content actually changed)
|
|
357
|
+
* or if no ContentItem exists yet for this ERD.
|
|
117
358
|
*/
|
|
118
|
-
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
359
|
+
async UpsertContentItem(contentSource, erd, text, checksum, record, existingContentItems) {
|
|
360
|
+
const md = new Metadata();
|
|
361
|
+
const erdNormalizedID = NormalizeUUID(erd.ID);
|
|
362
|
+
const existing = existingContentItems.get(erdNormalizedID);
|
|
363
|
+
// If content hasn't changed, skip
|
|
364
|
+
if (existing && existing.Checksum === checksum) {
|
|
365
|
+
return null;
|
|
366
|
+
}
|
|
367
|
+
const contentSourceParams = {
|
|
368
|
+
contentSourceID: contentSource.ID,
|
|
369
|
+
name: contentSource.Name ?? '',
|
|
370
|
+
ContentTypeID: contentSource.ContentTypeID,
|
|
371
|
+
ContentFileTypeID: contentSource.ContentFileTypeID,
|
|
372
|
+
ContentSourceTypeID: contentSource.ContentSourceTypeID,
|
|
373
|
+
URL: contentSource.URL
|
|
374
|
+
};
|
|
375
|
+
let contentItem;
|
|
376
|
+
if (existing) {
|
|
377
|
+
// Update existing content item
|
|
378
|
+
contentItem = existing;
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
// Create new content item
|
|
382
|
+
contentItem = await md.GetEntityObject('MJ: Content Items', this.contextUser);
|
|
383
|
+
contentItem.NewRecord();
|
|
384
|
+
contentItem.ContentSourceID = contentSourceParams.contentSourceID;
|
|
385
|
+
contentItem.ContentTypeID = contentSourceParams.ContentTypeID;
|
|
386
|
+
contentItem.ContentFileTypeID = contentSourceParams.ContentFileTypeID;
|
|
387
|
+
contentItem.ContentSourceTypeID = contentSourceParams.ContentSourceTypeID;
|
|
388
|
+
contentItem.URL = contentSourceParams.URL;
|
|
389
|
+
}
|
|
390
|
+
// Set/update fields
|
|
391
|
+
contentItem.Name = record['Name'] ?? contentSourceParams.name;
|
|
392
|
+
contentItem.Description = this.engine.GetContentItemDescription(contentSourceParams);
|
|
393
|
+
contentItem.Text = text;
|
|
394
|
+
contentItem.Checksum = checksum;
|
|
395
|
+
contentItem.EntityRecordDocumentID = erd.ID;
|
|
396
|
+
const saved = await contentItem.Save();
|
|
397
|
+
if (!saved) {
|
|
398
|
+
throw new Error(`Failed to save ContentItem for ERD ${erd.ID}`);
|
|
399
|
+
}
|
|
400
|
+
// Update cache
|
|
401
|
+
existingContentItems.set(erdNormalizedID, contentItem);
|
|
402
|
+
return contentItem;
|
|
123
403
|
}
|
|
124
404
|
};
|
|
125
405
|
AutotagEntity = __decorate([
|
|
126
|
-
RegisterClass(AutotagBase, 'AutotagEntity')
|
|
127
|
-
__metadata("design:paramtypes", [])
|
|
406
|
+
RegisterClass(AutotagBase, 'AutotagEntity')
|
|
128
407
|
], AutotagEntity);
|
|
129
408
|
export { AutotagEntity };
|
|
130
409
|
//# sourceMappingURL=AutotagEntity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutotagEntity.js","sourceRoot":"","sources":["../../../src/Entity/generic/AutotagEntity.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AutotagEntity.js","sourceRoot":"","sources":["../../../src/Entity/generic/AutotagEntity.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,7 @@ let AutotagLocalFileSystem = class AutotagLocalFileSystem extends AutotagBase {
|
|
|
33
33
|
this.contentSourceTypeID = this.engine.SetSubclassContentSourceType('Local File System');
|
|
34
34
|
const contentSources = await this.engine.getAllContentSources(this.contextUser, this.contentSourceTypeID) || [];
|
|
35
35
|
const contentItemsToProcess = await this.SetContentItemsToProcess(contentSources);
|
|
36
|
-
await this.engine.ExtractTextAndProcessWithLLM(contentItemsToProcess, this.contextUser, undefined, onProgress);
|
|
36
|
+
await this.engine.ExtractTextAndProcessWithLLM(contentItemsToProcess, this.contextUser, undefined, undefined, onProgress);
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
39
|
* Implemented abstract method from the AutotagBase class. Given a list of content sources, this method should return a list
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutotagLocalFileSystem.js","sourceRoot":"","sources":["../../../src/LocalFileSystem/generic/AutotagLocalFileSystem.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,WAAW,EAA2B,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAuB,MAAM,cAAc,CAAC;AACtE,OAAO,EAAY,QAAQ,EAAW,MAAM,sBAAsB,CAAC;AAGnE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAGvB,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,WAAW;IAMnD;QACI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAC7C,CAAC;IAEM,cAAc;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO,CAAC,WAAqB,EAAE,UAAoC;QAC5E,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,mBAAmB,CAAC,CAAC;QACzF,MAAM,cAAc,GAA4B,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;QACzI,MAAM,qBAAqB,GAA0B,MAAM,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAA;QACxG,MAAM,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,qBAAqB,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"AutotagLocalFileSystem.js","sourceRoot":"","sources":["../../../src/LocalFileSystem/generic/AutotagLocalFileSystem.ts"],"names":[],"mappings":"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"}
|