@memberjunction/content-autotagging 5.23.0 → 5.25.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 (48) hide show
  1. package/dist/CloudStorage/generic/CloudStorageBase.d.ts +1 -1
  2. package/dist/CloudStorage/generic/CloudStorageBase.d.ts.map +1 -1
  3. package/dist/CloudStorage/generic/CloudStorageBase.js +2 -1
  4. package/dist/CloudStorage/generic/CloudStorageBase.js.map +1 -1
  5. package/dist/CloudStorage/index.d.ts +5 -0
  6. package/dist/CloudStorage/index.d.ts.map +1 -1
  7. package/dist/CloudStorage/index.js +5 -0
  8. package/dist/CloudStorage/index.js.map +1 -1
  9. package/dist/CloudStorage/providers/AutotagCloudStorage.d.ts +61 -0
  10. package/dist/CloudStorage/providers/AutotagCloudStorage.d.ts.map +1 -0
  11. package/dist/CloudStorage/providers/AutotagCloudStorage.js +257 -0
  12. package/dist/CloudStorage/providers/AutotagCloudStorage.js.map +1 -0
  13. package/dist/Core/generic/AutotagBase.d.ts +10 -1
  14. package/dist/Core/generic/AutotagBase.d.ts.map +1 -1
  15. package/dist/Core/generic/AutotagBase.js.map +1 -1
  16. package/dist/Engine/generic/AutotagBaseEngine.d.ts +324 -18
  17. package/dist/Engine/generic/AutotagBaseEngine.d.ts.map +1 -1
  18. package/dist/Engine/generic/AutotagBaseEngine.js +1036 -178
  19. package/dist/Engine/generic/AutotagBaseEngine.js.map +1 -1
  20. package/dist/Engine/generic/RateLimiter.d.ts +49 -0
  21. package/dist/Engine/generic/RateLimiter.d.ts.map +1 -0
  22. package/dist/Engine/generic/RateLimiter.js +98 -0
  23. package/dist/Engine/generic/RateLimiter.js.map +1 -0
  24. package/dist/Engine/index.d.ts +1 -0
  25. package/dist/Engine/index.d.ts.map +1 -1
  26. package/dist/Engine/index.js +1 -0
  27. package/dist/Engine/index.js.map +1 -1
  28. package/dist/Entity/generic/AutotagEntity.d.ts +68 -14
  29. package/dist/Entity/generic/AutotagEntity.d.ts.map +1 -1
  30. package/dist/Entity/generic/AutotagEntity.js +396 -83
  31. package/dist/Entity/generic/AutotagEntity.js.map +1 -1
  32. package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.d.ts +1 -1
  33. package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.d.ts.map +1 -1
  34. package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.js +2 -1
  35. package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.js.map +1 -1
  36. package/dist/RSSFeed/generic/AutotagRSSFeed.d.ts +47 -16
  37. package/dist/RSSFeed/generic/AutotagRSSFeed.d.ts.map +1 -1
  38. package/dist/RSSFeed/generic/AutotagRSSFeed.js +239 -120
  39. package/dist/RSSFeed/generic/AutotagRSSFeed.js.map +1 -1
  40. package/dist/Websites/generic/AutotagWebsite.d.ts +1 -1
  41. package/dist/Websites/generic/AutotagWebsite.d.ts.map +1 -1
  42. package/dist/Websites/generic/AutotagWebsite.js +2 -1
  43. package/dist/Websites/generic/AutotagWebsite.js.map +1 -1
  44. package/dist/index.d.ts +1 -0
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +1 -0
  47. package/dist/index.js.map +1 -1
  48. package/package.json +16 -11
@@ -4,127 +4,440 @@ 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
- var __metadata = (this && this.__metadata) || function (k, v) {
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
- this.engine = AutotagBaseEngine.Instance;
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
- const contentSources = await this.engine.getAllContentSources(this.contextUser, this.contentSourceTypeID) || [];
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
- await this.engine.ExtractTextAndProcessWithLLM(contentItemsToProcess, this.contextUser, undefined, onProgress);
42
+ // Also pick up previously failed items — ContentItems that exist but have
43
+ // no tags (LLM call failed due to rate limits, network errors, etc.)
44
+ const retryItems = await this.GetUntaggedContentItems(contentSources);
45
+ if (retryItems.length > 0) {
46
+ LogStatus(`AutotagEntity: found ${retryItems.length} previously failed items to retry`);
47
+ }
48
+ // Merge new + retry items, deduplicating by ID
49
+ const seen = new Set(contentItemsToProcess.map(ci => ci.ID));
50
+ for (const item of retryItems) {
51
+ if (!seen.has(item.ID)) {
52
+ contentItemsToProcess.push(item);
53
+ seen.add(item.ID);
54
+ }
55
+ }
56
+ if (contentItemsToProcess.length > 0) {
57
+ await this.engine.ExtractTextAndProcessWithLLM(contentItemsToProcess, contextUser, undefined, undefined, onProgress);
58
+ }
59
+ else {
60
+ LogStatus('AutotagEntity: no new, modified, or failed entity records to process');
61
+ }
62
+ // Clean up engine state
63
+ this.engine.TaxonomyContext = null;
64
+ this.engine.OnContentItemTagSaved = null;
65
+ return contentItemsToProcess.length;
66
+ }
67
+ /**
68
+ * Initialize the TagEngine, inject taxonomy into the prompt, and set up the
69
+ * bridge callback that links ContentItemTags to formal Tag + TaggedItem records.
70
+ */
71
+ async SetupTaxonomyAndBridge(contentSources, contextUser) {
72
+ // Cache source configs for bridge callback — use CodeGen-generated typed accessor
73
+ for (const source of contentSources) {
74
+ const normalizedID = NormalizeUUID(source.ID);
75
+ this.contentSourceMap.set(normalizedID, source);
76
+ const config = source.ConfigurationObject;
77
+ if (config) {
78
+ this.sourceConfigMap.set(normalizedID, config);
79
+ }
80
+ }
81
+ // Initialize TagEngine (loads tags + generates embeddings)
82
+ try {
83
+ await TagEngine.Instance.Config(false, contextUser);
84
+ }
85
+ catch (e) {
86
+ const msg = e instanceof Error ? e.message : String(e);
87
+ LogError(`AutotagEntity: TagEngine initialization failed, taxonomy features disabled: ${msg}`);
88
+ return;
89
+ }
90
+ // Inject taxonomy context into the prompt (if any source has ShareTaxonomyWithLLM enabled)
91
+ const shouldShareTaxonomy = Array.from(this.sourceConfigMap.values()).some(c => c.ShareTaxonomyWithLLM !== false // default true
92
+ );
93
+ if (shouldShareTaxonomy && TagEngine.Instance.Tags.length > 0) {
94
+ // Determine the narrowest taxonomy root across all sources
95
+ const rootIDs = Array.from(this.sourceConfigMap.values())
96
+ .map(c => c.TagRootID)
97
+ .filter((id) => id != null);
98
+ const taxonomyRoot = rootIDs.length === 1 ? rootIDs[0] : undefined;
99
+ const tree = TagEngine.Instance.GetTaxonomyTree(taxonomyRoot);
100
+ this.engine.TaxonomyContext = JSON.stringify(tree, null, 2);
101
+ }
102
+ // Set up the bridge callback for tag taxonomy linking
103
+ this.engine.OnContentItemTagSaved = async (contentItemTag, parentTagName, ctxUser) => {
104
+ await this.BridgeContentItemTagToTaxonomy(contentItemTag, parentTagName, ctxUser);
105
+ };
106
+ }
107
+ /**
108
+ * Bridge a ContentItemTag to the formal MJ Tag taxonomy.
109
+ * Uses TagEngine.ResolveTag() for semantic matching with mode/threshold from source config.
110
+ * Creates a TaggedItem linking the resolved Tag to the source entity record.
111
+ */
112
+ async BridgeContentItemTagToTaxonomy(contentItemTag, parentTagName, contextUser) {
113
+ // Find the source config for this content item
114
+ const rv = new RunView();
115
+ const ciResult = await rv.RunView({
116
+ EntityName: 'MJ: Content Items',
117
+ ExtraFilter: `ID='${contentItemTag.ItemID}'`,
118
+ Fields: ['ID', 'ContentSourceID', 'EntityRecordDocumentID'],
119
+ ResultType: 'simple',
120
+ MaxRows: 1
121
+ }, contextUser);
122
+ if (!ciResult.Success || ciResult.Results.length === 0)
123
+ return;
124
+ const ci = ciResult.Results[0];
125
+ const erdID = ci.EntityRecordDocumentID;
126
+ if (!erdID)
127
+ return; // not entity-sourced
128
+ const sourceID = ci.ContentSourceID;
129
+ const config = this.sourceConfigMap.get(NormalizeUUID(sourceID));
130
+ const mode = config?.TagTaxonomyMode ?? 'auto-grow';
131
+ const rootID = config?.TagRootID ?? null;
132
+ const threshold = config?.TagMatchThreshold ?? 0.9;
133
+ // If parent tag is suggested by LLM, resolve it through the mutex too
134
+ // to prevent duplicate parent tags from concurrent batch processing.
135
+ // ResolveTag handles find-or-create atomically.
136
+ if (parentTagName && mode !== 'constrained') {
137
+ await TagEngine.Instance.ResolveTag(parentTagName, 0, mode, rootID, threshold, contextUser);
138
+ }
139
+ // Resolve the tag to a formal Tag record
140
+ const formalTag = await TagEngine.Instance.ResolveTag(contentItemTag.Tag, contentItemTag.Weight, mode, rootID, threshold, contextUser);
141
+ if (!formalTag)
142
+ return; // constrained mode, no match
143
+ // Link ContentItemTag to formal Tag
144
+ contentItemTag.TagID = formalTag.ID;
145
+ await contentItemTag.Save();
146
+ // Load ERD to get source entity info
147
+ const erdResult = await rv.RunView({
148
+ EntityName: 'MJ: Entity Record Documents',
149
+ ExtraFilter: `ID='${erdID}'`,
150
+ Fields: ['ID', 'EntityID', 'RecordID'],
151
+ ResultType: 'simple',
152
+ MaxRows: 1
153
+ }, contextUser);
154
+ if (!erdResult.Success || erdResult.Results.length === 0)
155
+ return;
156
+ const erd = erdResult.Results[0];
157
+ // Create TaggedItem linking formal Tag to source entity record
158
+ await TagEngine.Instance.CreateTaggedItem(formalTag.ID, erd.EntityID, erd.RecordID, contentItemTag.Weight, contextUser);
159
+ }
160
+ /**
161
+ * Find ContentItems that exist for these sources but have no ContentItemTag records.
162
+ * These are items where the LLM tagging failed on a previous run (rate limits, network errors, etc.).
163
+ */
164
+ async GetUntaggedContentItems(contentSources) {
165
+ if (contentSources.length === 0)
166
+ return [];
167
+ const sourceIDs = contentSources.map(s => `'${s.ID}'`).join(',');
168
+ const rv = new RunView();
169
+ const result = await rv.RunView({
170
+ EntityName: 'MJ: Content Items',
171
+ ExtraFilter: `ContentSourceID IN (${sourceIDs}) AND NOT EXISTS (SELECT 1 FROM [__mj].vwContentItemTags cit WHERE cit.ItemID = [__mj].vwContentItems.ID)`,
172
+ ResultType: 'entity_object'
173
+ }, this.contextUser);
174
+ if (result.Success) {
175
+ return result.Results;
176
+ }
177
+ return [];
25
178
  }
26
179
  async SetContentItemsToProcess(contentSources) {
27
180
  const contentItemsToProcess = [];
28
181
  for (const contentSource of contentSources) {
29
- const contentSourceParamsMap = await this.engine.getContentSourceParams(contentSource, this.contextUser);
30
- if (contentSourceParamsMap) {
31
- this.applyContentSourceParams(contentSourceParamsMap);
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);
182
+ try {
183
+ const items = await this.ProcessContentSource(contentSource);
184
+ contentItemsToProcess.push(...items);
44
185
  }
45
- else {
46
- LogStatus(`No content items found to process for content source: ${contentSource.Name}`);
186
+ catch (e) {
187
+ const msg = e instanceof Error ? e.message : String(e);
188
+ LogError(`AutotagEntity: failed to process content source "${contentSource.Name}": ${msg}`);
47
189
  }
48
190
  }
49
191
  return contentItemsToProcess;
50
192
  }
51
193
  /**
52
- * Applies content source parameters to this instance's known configurable fields.
194
+ * Process a single entity-type ContentSource: load entity records modified since last run,
195
+ * render via EntityDocument template, create/update ERD and ContentItem records.
53
196
  */
54
- applyContentSourceParams(params) {
55
- const configurableKeys = new Set(['EntityName', 'EntityFields']);
56
- params.forEach((value, key) => {
57
- if (configurableKeys.has(key)) {
58
- if (key === 'EntityName' && typeof value === 'string') {
59
- this.EntityName = value;
60
- }
61
- else if (key === 'EntityFields' && Array.isArray(value)) {
62
- this.EntityFields = value;
197
+ async ProcessContentSource(contentSource) {
198
+ const entityID = contentSource.EntityID;
199
+ const entityDocumentID = contentSource.EntityDocumentID;
200
+ if (!entityID || !entityDocumentID) {
201
+ LogError(`AutotagEntity: content source "${contentSource.Name}" is missing EntityID or EntityDocumentID`);
202
+ return [];
203
+ }
204
+ // Load the EntityDocument
205
+ const entityDocument = await this.LoadEntityDocument(entityDocumentID);
206
+ if (!entityDocument) {
207
+ LogError(`AutotagEntity: EntityDocument ${entityDocumentID} not found for source "${contentSource.Name}"`);
208
+ return [];
209
+ }
210
+ const templateText = await this.GetTemplateText(entityDocument);
211
+ if (!templateText) {
212
+ LogError(`AutotagEntity: no template content found for EntityDocument "${entityDocument.Name}"`);
213
+ return [];
214
+ }
215
+ // Resolve the entity name from metadata
216
+ const md = new Metadata();
217
+ const entityInfo = md.Entities.find(e => UUIDsEqual(e.ID, entityID));
218
+ if (!entityInfo) {
219
+ LogError(`AutotagEntity: entity with ID ${entityID} not found in metadata`);
220
+ return [];
221
+ }
222
+ // Get records modified since last run
223
+ const lastRunDate = await this.engine.getContentSourceLastRunDate(contentSource.ID, this.contextUser);
224
+ const modifiedRecords = await this.GetModifiedRecords(entityInfo.Name, lastRunDate);
225
+ if (modifiedRecords.length === 0) {
226
+ LogStatus(`AutotagEntity: no modified records for entity "${entityInfo.Name}" since ${lastRunDate.toISOString()}`);
227
+ return [];
228
+ }
229
+ LogStatus(`AutotagEntity: processing ${modifiedRecords.length} modified records for entity "${entityInfo.Name}"`);
230
+ // Load existing ERD records for this entity document to enable upsert
231
+ const existingERDs = await this.LoadExistingERDs(entityDocumentID, entityID);
232
+ // Load existing ContentItems for this source to enable upsert
233
+ const existingContentItems = await this.LoadExistingContentItems(contentSource.ID);
234
+ // Process each record: render template → create/update ERD → create/update ContentItem
235
+ const contentItems = [];
236
+ const parser = EntityDocumentTemplateParser.CreateInstance();
237
+ const pkFieldName = entityInfo.FirstPrimaryKey.Name;
238
+ for (const record of modifiedRecords) {
239
+ const recordID = String(record[pkFieldName] ?? '');
240
+ try {
241
+ const contentItem = await this.ProcessSingleRecord(record, recordID, contentSource, entityDocument, templateText, parser, existingERDs, existingContentItems);
242
+ if (contentItem) {
243
+ contentItems.push(contentItem);
63
244
  }
64
245
  }
65
- });
246
+ catch (e) {
247
+ const msg = e instanceof Error ? e.message : String(e);
248
+ LogError(`AutotagEntity: failed to process record ${recordID} for entity "${entityInfo.Name}": ${msg}`);
249
+ }
250
+ }
251
+ return contentItems;
66
252
  }
67
- async getNewOrModifiedContentItems(contentSourceParams, contextUser) {
68
- const lastRunDate = await this.engine.getContentSourceLastRunDate(contentSourceParams.contentSourceID, contextUser);
69
- const lastRunDateISOString = lastRunDate.toISOString();
253
+ /**
254
+ * Load an EntityDocument by ID using RunView.
255
+ */
256
+ async LoadEntityDocument(entityDocumentID) {
70
257
  const rv = new RunView();
71
- const results = await rv.RunView({
72
- EntityName: this.EntityName,
73
- Fields: this.EntityFields,
74
- ExtraFilter: `__mj_UpdatedAt > '${lastRunDateISOString}'`,
75
- ResultType: 'entity_object'
76
- }, contextUser);
77
- if (results.Results && results.Results.length > 0) {
78
- return this.setContentItemsFromEntityResults(results.Results, contentSourceParams, lastRunDate);
258
+ const result = await rv.RunView({
259
+ EntityName: 'MJ: Entity Documents',
260
+ ExtraFilter: `ID='${entityDocumentID}'`,
261
+ ResultType: 'entity_object',
262
+ MaxRows: 1
263
+ }, this.contextUser);
264
+ if (result.Success && result.Results.length > 0) {
265
+ return result.Results[0];
266
+ }
267
+ return null;
268
+ }
269
+ /**
270
+ * Retrieves the template text from the EntityDocument's linked Template.
271
+ * Ensures TemplateEngineServer is configured before accessing Templates.
272
+ */
273
+ async GetTemplateText(entityDocument) {
274
+ if (!entityDocument.TemplateID)
275
+ return null;
276
+ // Ensure engine is loaded (no-op if already configured)
277
+ await TemplateEngineServer.Instance.Config(false, this.contextUser);
278
+ const template = TemplateEngineServer.Instance.Templates.find((t) => UUIDsEqual(t.ID, entityDocument.TemplateID));
279
+ if (!template || template.Content.length === 0) {
280
+ return null;
281
+ }
282
+ return template.Content[0].TemplateText;
283
+ }
284
+ /**
285
+ * Query entity records modified since lastRunDate using __mj_UpdatedAt.
286
+ */
287
+ async GetModifiedRecords(entityName, lastRunDate) {
288
+ const rv = new RunView();
289
+ const result = await rv.RunView({
290
+ EntityName: entityName,
291
+ ExtraFilter: `__mj_UpdatedAt > '${lastRunDate.toISOString()}'`,
292
+ ResultType: 'simple'
293
+ }, this.contextUser);
294
+ if (result.Success) {
295
+ return result.Results;
79
296
  }
80
297
  return [];
81
298
  }
82
- async setContentItemsFromEntityResults(results, contentSourceParams, lastRunDate) {
83
- const contentItems = [];
84
- for (const result of results) {
85
- const lastUpdatedAt = result.Get('__mj_UpdatedAt');
86
- if (lastUpdatedAt > lastRunDate) {
87
- const contentItem = await this.setNewContentItem(result, contentSourceParams);
88
- if (contentItem) {
89
- contentItems.push(contentItem);
299
+ /**
300
+ * Load existing EntityRecordDocument records for this entity document,
301
+ * keyed by normalized RecordID for fast lookup.
302
+ */
303
+ async LoadExistingERDs(entityDocumentID, entityID) {
304
+ const rv = new RunView();
305
+ const result = await rv.RunView({
306
+ EntityName: 'MJ: Entity Record Documents',
307
+ ExtraFilter: `EntityDocumentID='${entityDocumentID}' AND EntityID='${entityID}'`,
308
+ ResultType: 'entity_object'
309
+ }, this.contextUser);
310
+ const map = new Map();
311
+ if (result.Success) {
312
+ for (const erd of result.Results) {
313
+ map.set(erd.RecordID, erd);
314
+ }
315
+ }
316
+ return map;
317
+ }
318
+ /**
319
+ * Load existing ContentItems for this content source, keyed by normalized
320
+ * EntityRecordDocumentID for fast lookup during upsert.
321
+ */
322
+ async LoadExistingContentItems(contentSourceID) {
323
+ const rv = new RunView();
324
+ const result = await rv.RunView({
325
+ EntityName: 'MJ: Content Items',
326
+ ExtraFilter: `ContentSourceID='${contentSourceID}'`,
327
+ ResultType: 'entity_object'
328
+ }, this.contextUser);
329
+ const map = new Map();
330
+ if (result.Success) {
331
+ for (const ci of result.Results) {
332
+ if (ci.EntityRecordDocumentID) {
333
+ map.set(NormalizeUUID(ci.EntityRecordDocumentID), ci);
90
334
  }
91
335
  }
92
336
  }
93
- return contentItems;
337
+ return map;
94
338
  }
95
- async setNewContentItem(item, contentSourceParams) {
339
+ /**
340
+ * Process a single entity record: render template, create/update ERD, create/update ContentItem.
341
+ */
342
+ async ProcessSingleRecord(record, recordID, contentSource, entityDocument, templateText, parser, existingERDs, existingContentItems) {
343
+ const entityID = contentSource.EntityID;
344
+ // 1. Render the template for this record
345
+ const renderedText = await parser.Parse(templateText, entityID, record, this.contextUser);
346
+ if (!renderedText || renderedText.trim().length === 0) {
347
+ LogStatus(`AutotagEntity: empty rendered text for record ${recordID}, skipping`);
348
+ return null;
349
+ }
350
+ // 2. Create or update EntityRecordDocument
351
+ const erd = await this.UpsertEntityRecordDocument(entityID, recordID, entityDocument, renderedText, existingERDs);
352
+ // 3. Compute checksum to detect content changes
353
+ const checksum = await this.engine.getChecksumFromText(renderedText);
354
+ // 4. Create or update ContentItem linked to ERD
355
+ const contentItem = await this.UpsertContentItem(contentSource, erd, renderedText, checksum, record, existingContentItems);
356
+ return contentItem;
357
+ }
358
+ /**
359
+ * Create or update an EntityRecordDocument snapshot.
360
+ */
361
+ async UpsertEntityRecordDocument(entityID, recordID, entityDocument, documentText, existingERDs) {
96
362
  const md = new Metadata();
97
- const text = this.getTextFromEntityResult(item);
98
- const contentItem = await md.GetEntityObject('MJ: Content Items', this.contextUser);
99
- contentItem.NewRecord();
100
- contentItem.ContentSourceID = contentSourceParams.contentSourceID;
101
- contentItem.Name = contentSourceParams.name;
102
- contentItem.Description = this.engine.GetContentItemDescription(contentSourceParams);
103
- contentItem.ContentTypeID = contentSourceParams.ContentTypeID;
104
- contentItem.ContentFileTypeID = contentSourceParams.ContentFileTypeID;
105
- contentItem.ContentSourceTypeID = contentSourceParams.ContentSourceTypeID;
106
- contentItem.Text = text;
107
- contentItem.Checksum = await this.engine.getChecksumFromText(text);
108
- contentItem.URL = contentSourceParams.URL;
109
- if (await contentItem.Save()) {
110
- return contentItem;
363
+ let erd = existingERDs.get(recordID);
364
+ if (erd) {
365
+ // Update existing
366
+ erd.DocumentText = documentText;
367
+ erd.EntityRecordUpdatedAt = new Date();
368
+ }
369
+ else {
370
+ // Create new
371
+ erd = await md.GetEntityObject('MJ: Entity Record Documents', this.contextUser);
372
+ erd.NewRecord();
373
+ erd.EntityID = entityID;
374
+ erd.RecordID = recordID;
375
+ erd.EntityDocumentID = entityDocument.ID;
376
+ erd.DocumentText = documentText;
377
+ erd.VectorIndexID = entityDocument.VectorIndexID;
378
+ erd.EntityRecordUpdatedAt = new Date();
111
379
  }
112
- throw new Error('Failed to save content item');
380
+ const saved = await erd.Save();
381
+ if (!saved) {
382
+ throw new Error(`Failed to save EntityRecordDocument for record ${recordID}`);
383
+ }
384
+ // Update cache for subsequent lookups in this batch
385
+ existingERDs.set(recordID, erd);
386
+ return erd;
113
387
  }
114
388
  /**
115
- * Concatenates entity field values into a text string for processing.
116
- * Uses typed property access via GetAll() since entity fields are dynamic.
389
+ * Create or update a ContentItem linked to the EntityRecordDocument.
390
+ * Only creates a new ContentItem if the checksum changed (content actually changed)
391
+ * or if no ContentItem exists yet for this ERD.
117
392
  */
118
- getTextFromEntityResult(result) {
119
- const allData = result.GetAll();
120
- return this.EntityFields
121
- .map(field => `${field}: ${allData[field] ?? ''}`)
122
- .join('\n');
393
+ async UpsertContentItem(contentSource, erd, text, checksum, record, existingContentItems) {
394
+ const md = new Metadata();
395
+ const erdNormalizedID = NormalizeUUID(erd.ID);
396
+ const existing = existingContentItems.get(erdNormalizedID);
397
+ // If content hasn't changed, skip
398
+ if (existing && existing.Checksum === checksum) {
399
+ return null;
400
+ }
401
+ const contentSourceParams = {
402
+ contentSourceID: contentSource.ID,
403
+ name: contentSource.Name ?? '',
404
+ ContentTypeID: contentSource.ContentTypeID,
405
+ ContentFileTypeID: contentSource.ContentFileTypeID,
406
+ ContentSourceTypeID: contentSource.ContentSourceTypeID,
407
+ URL: contentSource.URL
408
+ };
409
+ let contentItem;
410
+ if (existing) {
411
+ // Update existing content item
412
+ contentItem = existing;
413
+ }
414
+ else {
415
+ // Create new content item
416
+ contentItem = await md.GetEntityObject('MJ: Content Items', this.contextUser);
417
+ contentItem.NewRecord();
418
+ contentItem.ContentSourceID = contentSourceParams.contentSourceID;
419
+ contentItem.ContentTypeID = contentSourceParams.ContentTypeID;
420
+ contentItem.ContentFileTypeID = contentSourceParams.ContentFileTypeID;
421
+ contentItem.ContentSourceTypeID = contentSourceParams.ContentSourceTypeID;
422
+ contentItem.URL = contentSourceParams.URL;
423
+ }
424
+ // Set/update fields
425
+ contentItem.Name = record['Name'] ?? contentSourceParams.name;
426
+ contentItem.Description = this.engine.GetContentItemDescription(contentSourceParams);
427
+ contentItem.Text = text;
428
+ contentItem.Checksum = checksum;
429
+ contentItem.EntityRecordDocumentID = erd.ID;
430
+ const saved = await contentItem.Save();
431
+ if (!saved) {
432
+ throw new Error(`Failed to save ContentItem for ERD ${erd.ID}`);
433
+ }
434
+ // Update cache
435
+ existingContentItems.set(erdNormalizedID, contentItem);
436
+ return contentItem;
123
437
  }
124
438
  };
125
439
  AutotagEntity = __decorate([
126
- RegisterClass(AutotagBase, 'AutotagEntity'),
127
- __metadata("design:paramtypes", [])
440
+ RegisterClass(AutotagBase, 'AutotagEntity')
128
441
  ], AutotagEntity);
129
442
  export { AutotagEntity };
130
443
  //# 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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"}
@@ -15,7 +15,7 @@ export declare class AutotagLocalFileSystem extends AutotagBase {
15
15
  * It initializes the connection, retrieves the content sources corresponding to the content source type, sets the content items that we want to process,
16
16
  * extracts and processes the text, and sets the results in the database.
17
17
  */
18
- Autotag(contextUser: UserInfo, onProgress?: AutotagProgressCallback): Promise<void>;
18
+ Autotag(contextUser: UserInfo, onProgress?: AutotagProgressCallback): Promise<number>;
19
19
  /**
20
20
  * Implemented abstract method from the AutotagBase class. Given a list of content sources, this method should return a list
21
21
  * of content source items that have been modified or added after the most recent process run for that content source.
@@ -1 +1 @@
1
- {"version":3,"file":"AutotagLocalFileSystem.d.ts","sourceRoot":"","sources":["../../../src/LocalFileSystem/generic/AutotagLocalFileSystem.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAqB,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,qBACa,sBAAuB,SAAQ,WAAW;IACnD,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,MAAM,CAAoB;IAClC,SAAS,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACrC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;;IAOhB,cAAc,IAAI,QAAQ,GAAG,IAAI;IAIxC;;;;OAIG;IACU,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhG;;;;;MAKE;IACW,wBAAwB,CAAC,cAAc,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA+BjG,sBAAsB,CAAC,aAAa,EAAE,qBAAqB;IAwBxE;;;;;;;OAOG;IACU,6BAA6B,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA+BjJ,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAuB7G,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAgBhI"}
1
+ {"version":3,"file":"AutotagLocalFileSystem.d.ts","sourceRoot":"","sources":["../../../src/LocalFileSystem/generic/AutotagLocalFileSystem.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAqB,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,qBACa,sBAAuB,SAAQ,WAAW;IACnD,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,MAAM,CAAoB;IAClC,SAAS,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACrC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;;IAOhB,cAAc,IAAI,QAAQ,GAAG,IAAI;IAIxC;;;;OAIG;IACU,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IASlG;;;;;MAKE;IACW,wBAAwB,CAAC,cAAc,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA+BjG,sBAAsB,CAAC,aAAa,EAAE,qBAAqB;IAwBxE;;;;;;;OAOG;IACU,6BAA6B,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA+BjJ,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAuB7G,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAgBhI"}
@@ -33,7 +33,8 @@ 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
+ return contentItemsToProcess.length;
37
38
  }
38
39
  /**
39
40
  * 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":"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"}
1
+ {"version":3,"file":"AutotagLocalFileSystem.js","sourceRoot":"","sources":["../../../src/LocalFileSystem/generic/AutotagLocalFileSystem.ts"],"names":[],"mappings":"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"}