@memberjunction/content-autotagging 3.4.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CloudStorage/generic/CloudStorageBase.d.ts +28 -0
- package/dist/CloudStorage/generic/CloudStorageBase.d.ts.map +1 -0
- package/dist/CloudStorage/generic/CloudStorageBase.js +38 -0
- package/dist/CloudStorage/generic/CloudStorageBase.js.map +1 -0
- package/dist/CloudStorage/index.d.ts +3 -0
- package/dist/CloudStorage/index.d.ts.map +1 -0
- package/dist/CloudStorage/index.js +3 -0
- package/dist/CloudStorage/index.js.map +1 -0
- package/dist/CloudStorage/providers/AutotagAzureBlob.d.ts +20 -0
- package/dist/CloudStorage/providers/AutotagAzureBlob.d.ts.map +1 -0
- package/dist/CloudStorage/providers/AutotagAzureBlob.js +86 -0
- package/dist/CloudStorage/providers/AutotagAzureBlob.js.map +1 -0
- package/dist/Core/generic/AutotagBase.d.ts +7 -0
- package/dist/Core/generic/AutotagBase.d.ts.map +1 -0
- package/dist/Core/generic/AutotagBase.js +3 -0
- package/dist/Core/generic/AutotagBase.js.map +1 -0
- package/dist/Core/index.d.ts +2 -0
- package/dist/Core/index.d.ts.map +1 -0
- package/dist/Core/index.js +2 -0
- package/dist/Core/index.js.map +1 -0
- package/dist/Engine/generic/AutotagBaseEngine.d.ts +131 -0
- package/dist/Engine/generic/AutotagBaseEngine.d.ts.map +1 -0
- package/dist/Engine/generic/AutotagBaseEngine.js +620 -0
- package/dist/Engine/generic/AutotagBaseEngine.js.map +1 -0
- package/dist/Engine/generic/content.types.d.ts +32 -0
- package/dist/Engine/generic/content.types.d.ts.map +1 -0
- package/dist/Engine/generic/content.types.js +7 -0
- package/dist/Engine/generic/content.types.js.map +1 -0
- package/dist/Engine/generic/process.types.d.ts +30 -0
- package/dist/Engine/generic/process.types.d.ts.map +1 -0
- package/dist/Engine/generic/process.types.js +7 -0
- package/dist/Engine/generic/process.types.js.map +1 -0
- package/dist/Engine/index.d.ts +4 -0
- package/dist/Engine/index.d.ts.map +1 -0
- package/dist/Engine/index.js +4 -0
- package/dist/Engine/index.js.map +1 -0
- package/dist/Entity/generic/AutotagEntity.d.ts +19 -0
- package/dist/Entity/generic/AutotagEntity.d.ts.map +1 -0
- package/dist/Entity/generic/AutotagEntity.js +127 -0
- package/dist/Entity/generic/AutotagEntity.js.map +1 -0
- package/dist/Entity/index.d.ts +2 -0
- package/dist/Entity/index.d.ts.map +1 -0
- package/dist/Entity/index.js +2 -0
- package/dist/Entity/index.js.map +1 -0
- package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.d.ts +39 -0
- package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.d.ts.map +1 -0
- package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.js +171 -0
- package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.js.map +1 -0
- package/dist/LocalFileSystem/index.d.ts +2 -0
- package/dist/LocalFileSystem/index.d.ts.map +1 -0
- package/dist/LocalFileSystem/index.js +2 -0
- package/dist/LocalFileSystem/index.js.map +1 -0
- package/dist/RSSFeed/generic/AutotagRSSFeed.d.ts +30 -0
- package/dist/RSSFeed/generic/AutotagRSSFeed.d.ts.map +1 -0
- package/dist/RSSFeed/generic/AutotagRSSFeed.js +177 -0
- package/dist/RSSFeed/generic/AutotagRSSFeed.js.map +1 -0
- package/dist/RSSFeed/generic/RSS.types.d.ts +13 -0
- package/dist/RSSFeed/generic/RSS.types.d.ts.map +1 -0
- package/dist/RSSFeed/generic/RSS.types.js +3 -0
- package/dist/RSSFeed/generic/RSS.types.js.map +1 -0
- package/dist/RSSFeed/index.d.ts +3 -0
- package/dist/RSSFeed/index.d.ts.map +1 -0
- package/dist/RSSFeed/index.js +3 -0
- package/dist/RSSFeed/index.js.map +1 -0
- package/dist/Websites/generic/AutotagWebsite.d.ts +85 -0
- package/dist/Websites/generic/AutotagWebsite.d.ts.map +1 -0
- package/dist/Websites/generic/AutotagWebsite.js +355 -0
- package/dist/Websites/generic/AutotagWebsite.js.map +1 -0
- package/dist/Websites/index.d.ts +2 -0
- package/dist/Websites/index.d.ts.map +1 -0
- package/dist/Websites/index.js +2 -0
- package/dist/Websites/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/src/CloudStorage/generic/CloudStorageBase.d.ts +3 -3
- package/dist/src/CloudStorage/generic/CloudStorageBase.js +2 -2
- package/dist/src/CloudStorage/index.d.ts +2 -2
- package/dist/src/CloudStorage/index.js +2 -2
- package/dist/src/CloudStorage/providers/AutotagAzureBlob.d.ts +2 -2
- package/dist/src/CloudStorage/providers/AutotagAzureBlob.js +1 -1
- package/dist/src/Core/index.d.ts +1 -1
- package/dist/src/Core/index.js +1 -1
- package/dist/src/Engine/generic/AutotagBaseEngine.d.ts +2 -2
- package/dist/src/Engine/generic/AutotagBaseEngine.js +2 -2
- package/dist/src/Engine/index.d.ts +3 -3
- package/dist/src/Engine/index.js +3 -3
- package/dist/src/Entity/generic/AutotagEntity.d.ts +2 -2
- package/dist/src/Entity/generic/AutotagEntity.js +2 -2
- package/dist/src/Entity/index.d.ts +1 -1
- package/dist/src/Entity/index.js +1 -1
- package/dist/src/LocalFileSystem/generic/AutotagLocalFileSystem.d.ts +2 -2
- package/dist/src/LocalFileSystem/generic/AutotagLocalFileSystem.js +2 -2
- package/dist/src/LocalFileSystem/index.d.ts +1 -1
- package/dist/src/LocalFileSystem/index.js +1 -1
- package/dist/src/RSSFeed/generic/AutotagRSSFeed.d.ts +3 -3
- package/dist/src/RSSFeed/generic/AutotagRSSFeed.js +3 -3
- package/dist/src/RSSFeed/index.d.ts +2 -2
- package/dist/src/RSSFeed/index.js +2 -2
- package/dist/src/Websites/generic/AutotagWebsite.d.ts +2 -2
- package/dist/src/Websites/generic/AutotagWebsite.js +2 -2
- package/dist/src/Websites/index.d.ts +1 -1
- package/dist/src/Websites/index.js +1 -1
- package/dist/src/index.d.ts +6 -6
- package/dist/src/index.js +6 -6
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +21 -20
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AutotagBase } from "../../Core/index.js";
|
|
2
|
+
import { AutotagBaseEngine } from "../../Engine/index.js";
|
|
3
|
+
import { ContentSourceParams } from "../../Engine/index.js";
|
|
4
|
+
import { UserInfo } from "@memberjunction/core";
|
|
5
|
+
import { ContentSourceEntity, ContentItemEntity } from "@memberjunction/core-entities";
|
|
6
|
+
export declare abstract class CloudStorageBase extends AutotagBase {
|
|
7
|
+
protected contextUser: UserInfo;
|
|
8
|
+
protected engine: AutotagBaseEngine;
|
|
9
|
+
protected contentSourceTypeID: string;
|
|
10
|
+
constructor();
|
|
11
|
+
/**
|
|
12
|
+
* Abstract method to be implemented in the subclass. This method authenticates the user to the cloud storage.
|
|
13
|
+
*/
|
|
14
|
+
abstract Authenticate(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Abstract method to be implemented in the subclass. Given a list of content sources, this method should return a list
|
|
17
|
+
* of content source items that have been modified or added after the most recent process run for that content source.
|
|
18
|
+
* Each cloud storage provider has a different way of accessing files and checking for modified or added items.
|
|
19
|
+
* @param contentSources - An array of content sources to check for modified or added content source items
|
|
20
|
+
* @param lastRunDate - The date of the most recent process run for the content source
|
|
21
|
+
* @param contextUser - The user context for the autotagging process
|
|
22
|
+
* @returns - An array of content source items that have been modified or added after the most recent process run for that content source
|
|
23
|
+
*/
|
|
24
|
+
abstract SetNewAndModifiedContentItems(contentSourceParams: ContentSourceParams, lastRunDate: Date, contextUser: UserInfo): Promise<ContentItemEntity[]>;
|
|
25
|
+
Autotag(contextUser: UserInfo): Promise<void>;
|
|
26
|
+
SetContentItemsToProcess(contentSources: ContentSourceEntity[]): Promise<ContentItemEntity[]>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=CloudStorageBase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CloudStorageBase.d.ts","sourceRoot":"","sources":["../../../src/CloudStorage/generic/CloudStorageBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAIvF,8BAAsB,gBAAiB,SAAQ,WAAW;IACtD,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC;IAChC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACpC,SAAS,CAAC,mBAAmB,EAAE,MAAM,CAAA;;IAOrC;;MAEE;aACc,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAE7C;;;;;;;;MAQE;aACc,6BAA6B,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAElJ,OAAO,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C,wBAAwB,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;CAyB7G"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { AutotagBase } from "../../Core/index.js";
|
|
2
|
+
import { AutotagBaseEngine } from "../../Engine/index.js";
|
|
3
|
+
import dotenv from 'dotenv';
|
|
4
|
+
dotenv.config({ quiet: true });
|
|
5
|
+
export class CloudStorageBase extends AutotagBase {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
this.engine = AutotagBaseEngine.Instance;
|
|
9
|
+
}
|
|
10
|
+
async Autotag(contextUser) {
|
|
11
|
+
this.contextUser = contextUser;
|
|
12
|
+
this.contentSourceTypeID = await this.engine.setSubclassContentSourceType('Cloud Storage', this.contextUser);
|
|
13
|
+
const contentSources = await this.engine.getAllContentSources(this.contextUser, this.contentSourceTypeID) || [];
|
|
14
|
+
const contentItemsToProcess = await this.SetContentItemsToProcess(contentSources);
|
|
15
|
+
await this.engine.ExtractTextAndProcessWithLLM(contentItemsToProcess, this.contextUser);
|
|
16
|
+
}
|
|
17
|
+
async SetContentItemsToProcess(contentSources) {
|
|
18
|
+
const contentItemsToProcess = [];
|
|
19
|
+
for (const contentSource of contentSources) {
|
|
20
|
+
await this.Authenticate();
|
|
21
|
+
const contentSourceParams = {
|
|
22
|
+
contentSourceID: contentSource.ID,
|
|
23
|
+
name: contentSource.Name,
|
|
24
|
+
ContentTypeID: contentSource.ContentTypeID,
|
|
25
|
+
ContentSourceTypeID: contentSource.ContentSourceTypeID,
|
|
26
|
+
ContentFileTypeID: contentSource.ContentFileTypeID,
|
|
27
|
+
URL: contentSource.URL
|
|
28
|
+
};
|
|
29
|
+
const lastRunDate = await this.engine.getContentSourceLastRunDate(contentSourceParams.contentSourceID, this.contextUser);
|
|
30
|
+
if (lastRunDate) {
|
|
31
|
+
const contentItems = await this.SetNewAndModifiedContentItems(contentSourceParams, lastRunDate, this.contextUser);
|
|
32
|
+
contentItemsToProcess.push(...contentItems);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return contentItemsToProcess;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=CloudStorageBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CloudStorageBase.js","sourceRoot":"","sources":["../../../src/CloudStorage/generic/CloudStorageBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAIjD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAE9B,MAAM,OAAgB,gBAAiB,SAAQ,WAAW;IAKtD;QACI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAC7C,CAAC;IAkBM,KAAK,CAAC,OAAO,CAAC,WAAqB;QACtC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,mBAAmB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7G,MAAM,cAAc,GAA0B,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;QACvI,MAAM,qBAAqB,GAAwB,MAAM,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAA;QACtG,MAAM,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,qBAAqB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5F,CAAC;IAEM,KAAK,CAAC,wBAAwB,CAAC,cAAqC;QACvE,MAAM,qBAAqB,GAAwB,EAAE,CAAA;QAErD,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAE1B,MAAM,mBAAmB,GAAwB;gBAC7C,eAAe,EAAE,aAAa,CAAC,EAAE;gBACjC,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,aAAa,EAAE,aAAa,CAAC,aAAa;gBAC1C,mBAAmB,EAAE,aAAa,CAAC,mBAAmB;gBACtD,iBAAiB,EAAE,aAAa,CAAC,iBAAiB;gBAClD,GAAG,EAAE,aAAa,CAAC,GAAG;aACzB,CAAA;YAED,MAAM,WAAW,GAAS,MAAM,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAE/H,IAAI,WAAW,EAAE,CAAC;gBACd,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,6BAA6B,CAAC,mBAAmB,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBAClH,qBAAqB,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YAChD,CAAC;QACL,CAAC;QAED,OAAO,qBAAqB,CAAC;IACjC,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/CloudStorage/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/CloudStorage/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CloudStorageBase } from "../generic/CloudStorageBase.js";
|
|
2
|
+
import { UserInfo } from "@memberjunction/core";
|
|
3
|
+
import { ContentItemEntity } from "@memberjunction/core-entities";
|
|
4
|
+
import { ContentSourceParams } from "../../Engine/index.js";
|
|
5
|
+
export declare class AutotagAzureBlob extends CloudStorageBase {
|
|
6
|
+
private blobServiceClient;
|
|
7
|
+
private containerClient;
|
|
8
|
+
private connectionString;
|
|
9
|
+
private containerName;
|
|
10
|
+
constructor(connectionString: string, containerName: string);
|
|
11
|
+
/**
|
|
12
|
+
* Implemented abstract method from the CloudStorageBase class for cloud storage authentication. This method authenticates the user to the Azure Blob Storage.
|
|
13
|
+
* @returns void
|
|
14
|
+
*/
|
|
15
|
+
Authenticate(): Promise<void>;
|
|
16
|
+
SetNewAndModifiedContentItems(contentSourceParams: ContentSourceParams, lastRunDate: Date, contextUser: UserInfo, prefix?: string): Promise<ContentItemEntity[]>;
|
|
17
|
+
extractText(file: string): Promise<string>;
|
|
18
|
+
streamToBuffer(readableStream: NodeJS.ReadableStream): Promise<Buffer>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=AutotagAzureBlob.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutotagAzureBlob.d.ts","sourceRoot":"","sources":["../../../src/CloudStorage/providers/AutotagAzureBlob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnD,qBAAa,gBAAiB,SAAQ,gBAAgB;IAClD,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,aAAa,CAAS;gBAElB,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAO3D;;;MAGE;IACW,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAc7B,6BAA6B,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAG,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAwC1J,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ1C,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAYtF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { CloudStorageBase } from "../generic/CloudStorageBase.js";
|
|
2
|
+
import { BlobServiceClient } from '@azure/storage-blob';
|
|
3
|
+
import dotenv from 'dotenv';
|
|
4
|
+
import { Metadata } from "@memberjunction/core";
|
|
5
|
+
import path from "path";
|
|
6
|
+
dotenv.config({ quiet: true });
|
|
7
|
+
export class AutotagAzureBlob extends CloudStorageBase {
|
|
8
|
+
constructor(connectionString, containerName) {
|
|
9
|
+
super();
|
|
10
|
+
this.connectionString = connectionString;
|
|
11
|
+
this.containerName = containerName;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Implemented abstract method from the CloudStorageBase class for cloud storage authentication. This method authenticates the user to the Azure Blob Storage.
|
|
15
|
+
* @returns void
|
|
16
|
+
*/
|
|
17
|
+
async Authenticate() {
|
|
18
|
+
try {
|
|
19
|
+
this.blobServiceClient = BlobServiceClient.fromConnectionString(this.connectionString);
|
|
20
|
+
for await (const container of this.blobServiceClient.listContainers()) {
|
|
21
|
+
console.log(`Container: ${container.name}`);
|
|
22
|
+
}
|
|
23
|
+
this.containerClient = this.blobServiceClient.getContainerClient(this.containerName);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error(error);
|
|
27
|
+
throw new Error('Error authenticating to Azure Blob Storage');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async SetNewAndModifiedContentItems(contentSourceParams, lastRunDate, contextUser, prefix = '') {
|
|
31
|
+
const contentItemsToProcess = [];
|
|
32
|
+
for await (const blob of this.containerClient.listBlobsFlat()) {
|
|
33
|
+
const filePath = path.join(this.containerName, blob.name);
|
|
34
|
+
if (blob.properties.createdOn && blob.properties.createdOn > lastRunDate) {
|
|
35
|
+
// The file has been created, add a new record for this file
|
|
36
|
+
const md = new Metadata();
|
|
37
|
+
const contentItem = await md.GetEntityObject('Content Items', contextUser);
|
|
38
|
+
const text = await this.extractText(blob.name);
|
|
39
|
+
contentItem.ContentSourceID = contentSourceParams.contentSourceID;
|
|
40
|
+
contentItem.Name = blob.name;
|
|
41
|
+
contentItem.Description = await this.engine.getContentItemDescription(contentSourceParams, contextUser);
|
|
42
|
+
contentItem.URL = filePath;
|
|
43
|
+
contentItem.ContentTypeID = contentSourceParams.ContentTypeID;
|
|
44
|
+
contentItem.ContentSourceTypeID = contentSourceParams.ContentSourceTypeID;
|
|
45
|
+
contentItem.ContentFileTypeID = contentSourceParams.ContentFileTypeID;
|
|
46
|
+
contentItem.Checksum = await this.engine.getChecksumFromText(text);
|
|
47
|
+
contentItem.Text = text;
|
|
48
|
+
await contentItem.Save();
|
|
49
|
+
contentItemsToProcess.push(contentItem);
|
|
50
|
+
}
|
|
51
|
+
else if (blob.properties.lastModified && blob.properties.lastModified > lastRunDate) {
|
|
52
|
+
// The file has been modified, update the record for this file
|
|
53
|
+
const md = new Metadata();
|
|
54
|
+
const contentItem = await md.GetEntityObject('Content Items', contextUser);
|
|
55
|
+
const contentItemID = await this.engine.getContentItemIDFromURL(contentSourceParams, contextUser);
|
|
56
|
+
await contentItem.Load(contentItemID);
|
|
57
|
+
const text = await this.extractText(blob.name);
|
|
58
|
+
contentItem.Text = text;
|
|
59
|
+
contentItem.Checksum = await this.engine.getChecksumFromText(text);
|
|
60
|
+
contentItem.Save();
|
|
61
|
+
contentItemsToProcess.push(contentItem);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return contentItemsToProcess;
|
|
65
|
+
}
|
|
66
|
+
async extractText(file) {
|
|
67
|
+
const blockBlobClient = this.containerClient.getBlockBlobClient(file);
|
|
68
|
+
const downloadBlockBlobResponse = await blockBlobClient.download();
|
|
69
|
+
const document = await this.streamToBuffer(downloadBlockBlobResponse.readableStreamBody);
|
|
70
|
+
const text = await this.engine.parsePDF(document);
|
|
71
|
+
return text;
|
|
72
|
+
}
|
|
73
|
+
async streamToBuffer(readableStream) {
|
|
74
|
+
return new Promise((resolve, reject) => {
|
|
75
|
+
const chunks = [];
|
|
76
|
+
readableStream.on("data", (data) => {
|
|
77
|
+
chunks.push(data instanceof Buffer ? data : Buffer.from(data));
|
|
78
|
+
});
|
|
79
|
+
readableStream.on("end", () => {
|
|
80
|
+
resolve(Buffer.concat(chunks));
|
|
81
|
+
});
|
|
82
|
+
readableStream.on("error", reject);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=AutotagAzureBlob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutotagAzureBlob.js","sourceRoot":"","sources":["../../../src/CloudStorage/providers/AutotagAzureBlob.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { UserInfo } from '@memberjunction/core';
|
|
2
|
+
import { ContentSourceEntity, ContentItemEntity } from '@memberjunction/core-entities';
|
|
3
|
+
export declare abstract class AutotagBase {
|
|
4
|
+
abstract SetContentItemsToProcess(contentSources: ContentSourceEntity[]): Promise<ContentItemEntity[]>;
|
|
5
|
+
abstract Autotag(contextUser: UserInfo): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=AutotagBase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutotagBase.d.ts","sourceRoot":"","sources":["../../../src/Core/generic/AutotagBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvF,8BAAsB,WAAW;aACb,wBAAwB,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;aAC7F,OAAO,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAChE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutotagBase.js","sourceRoot":"","sources":["../../../src/Core/generic/AutotagBase.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,WAAW;CAGhC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Core/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Core/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { UserInfo } from '@memberjunction/core';
|
|
2
|
+
import { ContentSourceEntity, ContentItemEntity } from '@memberjunction/core-entities';
|
|
3
|
+
import { ContentSourceParams, ContentSourceTypeParams } from './content.types.js';
|
|
4
|
+
import { ProcessRunParams, JsonObject, ContentItemProcessParams } from './process.types.js';
|
|
5
|
+
import { BaseLLM } from '@memberjunction/ai';
|
|
6
|
+
import { AIEngine } from '@memberjunction/aiengine';
|
|
7
|
+
export declare class AutotagBaseEngine extends AIEngine {
|
|
8
|
+
constructor();
|
|
9
|
+
static get Instance(): AutotagBaseEngine;
|
|
10
|
+
/**
|
|
11
|
+
* Given a list of content items, extract the text from each content item with the LLM and send off the required parameters to the LLM for tagging.
|
|
12
|
+
* @param contentItems
|
|
13
|
+
* @returns
|
|
14
|
+
*/
|
|
15
|
+
ExtractTextAndProcessWithLLM(contentItems: ContentItemEntity[], contextUser: UserInfo): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Given processing parameters that include the text from our content item, process the text with the LLM and extract the
|
|
18
|
+
* information related to that content type.
|
|
19
|
+
* @param params
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
22
|
+
ProcessContentItemText(params: ContentItemProcessParams, contextUser: UserInfo): Promise<void>;
|
|
23
|
+
promptAndRetrieveResultsFromLLM(params: ContentItemProcessParams, contextUser: UserInfo): Promise<JsonObject>;
|
|
24
|
+
processChunkWithLLM(llm: BaseLLM, systemPrompt: string, userPrompt: string, LLMResults: JsonObject, modelAPIName: string): Promise<JsonObject>;
|
|
25
|
+
getLLMPrompts(params: ContentItemProcessParams, chunk: string, LLMResults: JsonObject, contextUser: UserInfo): Promise<{
|
|
26
|
+
systemPrompt: string;
|
|
27
|
+
userPrompt: string;
|
|
28
|
+
}>;
|
|
29
|
+
saveLLMResults(LLMResults: JsonObject, contextUser: UserInfo): Promise<void>;
|
|
30
|
+
deleteInvalidContentItem(contentItemID: string, contextUser: UserInfo): Promise<void>;
|
|
31
|
+
chunkExtractedText(text: string, tokenLimit: number): string[];
|
|
32
|
+
/**
|
|
33
|
+
* Given the processing results from the LLM and the Content Element Item that was saved to the database, this function saves the tags as Content Element Tags in the database.
|
|
34
|
+
* @param md: The metadata object to save the tags
|
|
35
|
+
* @param contentElementItem: The content element item that was saved to the database
|
|
36
|
+
* @param results: The results of the processing from the LLM
|
|
37
|
+
* @param contextUser: The user context to save the tags
|
|
38
|
+
* @returns
|
|
39
|
+
*/
|
|
40
|
+
saveContentItemTags(contentItemID: string, LLMResults: JsonObject, contextUser: UserInfo): Promise<void>;
|
|
41
|
+
saveResultsToContentItemAttribute(LLMResults: JsonObject, contextUser: UserInfo): Promise<void>;
|
|
42
|
+
/***
|
|
43
|
+
* Retrieves all of the content sources of a given content source type data from the database.
|
|
44
|
+
* @param contextUser: The user context to retrieve the content source data
|
|
45
|
+
* @returns A list of content sources
|
|
46
|
+
*/
|
|
47
|
+
getAllContentSources(contextUser: UserInfo, contentSourceTypeID: string): Promise<ContentSourceEntity[]>;
|
|
48
|
+
setSubclassContentSourceType(subclass: string, contextUser: UserInfo): Promise<string>;
|
|
49
|
+
getContentSourceParams(contentSource: ContentSourceEntity, contextUser: UserInfo): Promise<any>;
|
|
50
|
+
getDefaultContentSourceTypeParams(contentSourceTypeParamID: string, contextUser: UserInfo): Promise<ContentSourceTypeParams>;
|
|
51
|
+
castValueAsCorrectType(value: string, type: string): any;
|
|
52
|
+
stringToBoolean(string: string): boolean;
|
|
53
|
+
parseStringArray(value: string): string[];
|
|
54
|
+
/**
|
|
55
|
+
* Given a run date, this function converts the run date to the user's timezone and formats it as a date object.
|
|
56
|
+
* @param lastRunDate: The retrieved last run date from the database
|
|
57
|
+
* @returns The last run date converted to the user's timezone
|
|
58
|
+
*/
|
|
59
|
+
convertLastRunDateToTimezone(lastRunDate: Date): Promise<Date>;
|
|
60
|
+
/**
|
|
61
|
+
* Retrieves the last run date of the provided content source from the database. If no previous runs exist, the epoch date is returned.
|
|
62
|
+
* @param contentSourceID: The ID of the content source to retrieve the last run date
|
|
63
|
+
* @param contextUser: The user context to retrieve the last run date
|
|
64
|
+
* @returns
|
|
65
|
+
*/
|
|
66
|
+
getContentSourceLastRunDate(contentSourceID: string, contextUser: UserInfo): Promise<Date>;
|
|
67
|
+
getContentItemParams(contentTypeID: string, contextUser: UserInfo): Promise<{
|
|
68
|
+
modelID: string;
|
|
69
|
+
minTags: number;
|
|
70
|
+
maxTags: number;
|
|
71
|
+
}>;
|
|
72
|
+
/**
|
|
73
|
+
* Given a content source type ID, this function retrieves the content source type name from the database.
|
|
74
|
+
* @param contentSourceTypeID
|
|
75
|
+
* @param contextUser
|
|
76
|
+
* @returns
|
|
77
|
+
*/
|
|
78
|
+
getContentSourceTypeName(contentSourceTypeID: string, contextUser: UserInfo): Promise<string>;
|
|
79
|
+
/**
|
|
80
|
+
* Given a content type ID, this function retrieves the content type name from the database.
|
|
81
|
+
* @param contentTypeID
|
|
82
|
+
* @param contextUser
|
|
83
|
+
* @returns
|
|
84
|
+
*/
|
|
85
|
+
getContentTypeName(contentTypeID: string, contextUser: UserInfo): Promise<string>;
|
|
86
|
+
/**
|
|
87
|
+
* Given a content file type ID, this function retrieves the content file type name from the database.
|
|
88
|
+
* @param contentFileTypeID
|
|
89
|
+
* @param contextUser
|
|
90
|
+
* @returns
|
|
91
|
+
*/
|
|
92
|
+
getContentFileTypeName(contentFileTypeID: string, contextUser: UserInfo): Promise<string>;
|
|
93
|
+
getAdditionalContentTypePrompt(contentTypeID: string, contextUser: UserInfo): Promise<string>;
|
|
94
|
+
/**
|
|
95
|
+
* Given the content source parameters, this function creates a description of the content source item.
|
|
96
|
+
* @param contentSourceParams: The parameters of the content source item
|
|
97
|
+
* @returns The description of the content source item
|
|
98
|
+
*/
|
|
99
|
+
getContentItemDescription(contentSourceParams: ContentSourceParams, contextUser: any): Promise<string>;
|
|
100
|
+
getChecksumFromURL(url: string): Promise<string>;
|
|
101
|
+
getChecksumFromText(text: string): Promise<string>;
|
|
102
|
+
getContentItemIDFromURL(contentSourceParams: ContentSourceParams, contextUser: UserInfo): Promise<string>;
|
|
103
|
+
/**
|
|
104
|
+
* Given the results of the processing from the LLM, this function saves the details of the process run in the database.
|
|
105
|
+
* @param processRunParams: The parameters holding the details of the process run
|
|
106
|
+
* @param contextUser: The user context to save the process run
|
|
107
|
+
* @returns
|
|
108
|
+
*/
|
|
109
|
+
saveProcessRun(processRunParams: ProcessRunParams, contextUser: UserInfo): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Given a buffer of data, this function extracts text from a PDF file
|
|
112
|
+
* @param dataBuffer: The buffer of data to extract text from
|
|
113
|
+
* @returns The extracted text from the PDF file
|
|
114
|
+
*/
|
|
115
|
+
parsePDF(dataBuffer: Buffer): Promise<string>;
|
|
116
|
+
/**
|
|
117
|
+
* Given a buffer of data, this function extracts text from a DOCX file
|
|
118
|
+
* @param dataBuffer: The buffer of data to extract text from
|
|
119
|
+
* @returns The extracted text from the DOCX file
|
|
120
|
+
*/
|
|
121
|
+
parseDOCX(dataBuffer: Buffer): Promise<string>;
|
|
122
|
+
parseHTML(data: string): Promise<string>;
|
|
123
|
+
/**
|
|
124
|
+
* Given a file path, as along as its one of the supported file types, this function choses the correct parser
|
|
125
|
+
* and returns the extracted text.
|
|
126
|
+
* @param filePath - The path to the file to extract text from
|
|
127
|
+
* @returns - The extracted text from the file
|
|
128
|
+
*/
|
|
129
|
+
parseFileFromPath(filePath: string): Promise<string>;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=AutotagBaseEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutotagBaseEngine.d.ts","sourceRoot":"","sources":["../../../src/Engine/generic/AutotagBaseEngine.ts"],"names":[],"mappings":"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"}
|