@memberjunction/ai 0.9.1

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.
@@ -0,0 +1,36 @@
1
+ import { BaseModel, BaseResult } from "./generic/baseModel";
2
+ import { BaseEntity, UserInfo } from "@memberjunction/core";
3
+ export declare class AIActionParams {
4
+ actionId: number;
5
+ modelId: number;
6
+ modelName?: string;
7
+ systemPrompt?: string;
8
+ userMessage?: string;
9
+ }
10
+ export declare class EntityAIActionParams extends AIActionParams {
11
+ entityAIActionId: number;
12
+ entityRecord: BaseEntity;
13
+ }
14
+ export declare class AIEngine {
15
+ private static _instance;
16
+ private static _globalInstanceKey;
17
+ private _models;
18
+ private _actions;
19
+ private _entityActions;
20
+ private _modelActions;
21
+ private _metadataLoaded;
22
+ LoadAIMetadata(contextUser?: UserInfo): Promise<boolean>;
23
+ static LoadAIMetadata(contextUser?: UserInfo): Promise<boolean>;
24
+ static get Models(): BaseEntity[];
25
+ static get ModelActions(): BaseEntity[];
26
+ static get Actions(): BaseEntity[];
27
+ static get EntityAIActions(): BaseEntity[];
28
+ static get Instance(): AIEngine;
29
+ protected static checkMetadataLoaded(): void;
30
+ ExecuteEntityAIAction(params: EntityAIActionParams): Promise<BaseResult>;
31
+ protected markupUserMessage(entityRecord: BaseEntity, userMessage: string): string;
32
+ ExecuteAIAction(params: AIActionParams): Promise<BaseResult>;
33
+ protected GetStringOutputFromActionResults(action: BaseEntity, result: BaseResult): string;
34
+ protected getDriver(model: BaseEntity): Promise<BaseModel>;
35
+ constructor();
36
+ }
@@ -0,0 +1,259 @@
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.AIEngine = exports.EntityAIActionParams = exports.AIActionParams = void 0;
27
+ const core_1 = require("@memberjunction/core");
28
+ const global_1 = require("@memberjunction/global");
29
+ class AIActionParams {
30
+ }
31
+ exports.AIActionParams = AIActionParams;
32
+ class EntityAIActionParams extends AIActionParams {
33
+ }
34
+ exports.EntityAIActionParams = EntityAIActionParams;
35
+ class AIEngine {
36
+ async LoadAIMetadata(contextUser) {
37
+ if (this._metadataLoaded === false) {
38
+ const rv = new core_1.RunView();
39
+ const models = await rv.RunView({ EntityName: 'AI Models' }, contextUser);
40
+ this._models = models?.Results;
41
+ const actions = await rv.RunView({ EntityName: 'AI Actions' }, contextUser);
42
+ this._actions = actions?.Results;
43
+ const modelActions = await rv.RunView({ EntityName: 'AI Model Actions' }, contextUser);
44
+ this._modelActions = modelActions?.Results;
45
+ const entityAIActions = await rv.RunView({ EntityName: 'Entity AI Actions' }, contextUser);
46
+ this._entityActions = entityAIActions?.Results;
47
+ this._metadataLoaded = true;
48
+ }
49
+ return this._metadataLoaded;
50
+ }
51
+ static async LoadAIMetadata(contextUser) {
52
+ return AIEngine.Instance.LoadAIMetadata(contextUser);
53
+ }
54
+ static get Models() {
55
+ AIEngine.checkMetadataLoaded();
56
+ return AIEngine.Instance._models;
57
+ }
58
+ static get ModelActions() {
59
+ AIEngine.checkMetadataLoaded();
60
+ return AIEngine.Instance._modelActions;
61
+ }
62
+ static get Actions() {
63
+ AIEngine.checkMetadataLoaded();
64
+ return AIEngine.Instance._actions;
65
+ }
66
+ static get EntityAIActions() {
67
+ AIEngine.checkMetadataLoaded();
68
+ return AIEngine.Instance._entityActions;
69
+ }
70
+ static get Instance() {
71
+ if (AIEngine._instance === null)
72
+ AIEngine._instance = new AIEngine();
73
+ return AIEngine._instance;
74
+ }
75
+ static checkMetadataLoaded() {
76
+ if (!AIEngine.Instance._metadataLoaded)
77
+ throw new Error("AI Metadata not loaded, call AIEngine.LoadAIMetadata() first.");
78
+ }
79
+ async ExecuteEntityAIAction(params) {
80
+ const startTime = new Date();
81
+ try {
82
+ const entityAction = AIEngine.EntityAIActions.find(ea => ea.ID === params.entityAIActionId);
83
+ if (!entityAction)
84
+ throw new Error(`Entity AI Action ${params.entityAIActionId} not found.`);
85
+ const action = AIEngine.Actions.find(a => a.ID === entityAction.AIActionID);
86
+ if (!action)
87
+ throw new Error(`Action ${entityAction.AIActionID} not found, from the EntityAIAction ${params.entityAIActionId}.`);
88
+ if (entityAction.SkipIfOutputFieldNotEmpty &&
89
+ entityAction.OutputType.trim().toLowerCase() === 'field') {
90
+ const val = params.entityRecord.Get(entityAction.OutputField);
91
+ if (val && val.length > 0)
92
+ return null;
93
+ }
94
+ const entityPrompt = params.systemPrompt ? params.systemPrompt :
95
+ (entityAction.Prompt && entityAction.Prompt.length > 0 ? entityAction.Prompt : action.DefaultPrompt);
96
+ const userMessage = params.userMessage ? params.userMessage : this.markupUserMessage(params.entityRecord, entityAction.UserMessage);
97
+ const modelId = entityAction.AIModelID || action.DefaultModelID;
98
+ const model = AIEngine.Models.find(m => m.ID === modelId);
99
+ const entityParams = {
100
+ name: entityAction.Name,
101
+ actionId: entityAction.AIActionID,
102
+ modelId: modelId,
103
+ systemPrompt: entityPrompt,
104
+ userMessage: userMessage,
105
+ result: null
106
+ };
107
+ if (!await params.entityRecord.BeforeEntityAIAction(entityParams))
108
+ return null;
109
+ const results = await this.ExecuteAIAction({
110
+ actionId: entityParams.actionId,
111
+ modelId: entityParams.modelId,
112
+ systemPrompt: entityParams.systemPrompt,
113
+ userMessage: entityParams.userMessage,
114
+ modelName: model.Name,
115
+ });
116
+ if (results) {
117
+ const sOutput = this.GetStringOutputFromActionResults(action, results);
118
+ entityParams.result = results;
119
+ if (!await params.entityRecord.AfterEntityAIAction(entityParams))
120
+ return results;
121
+ if (entityAction.OutputType.trim().toLowerCase() === 'field') {
122
+ params.entityRecord.Set(entityAction.OutputField, sOutput);
123
+ if (entityAction.TriggerEvent.trim().toLowerCase() === 'after save') {
124
+ await params.entityRecord.Save({
125
+ SkipEntityAIActions: true,
126
+ IgnoreDirtyState: false
127
+ });
128
+ }
129
+ }
130
+ else if (entityAction.OutputType.trim().toLowerCase() === 'entity') {
131
+ const md = new core_1.Metadata();
132
+ const newRecord = await md.GetEntityObject(entityAction.OutputEntity);
133
+ newRecord.NewRecord();
134
+ newRecord.Set('EntityID', params.entityRecord.EntityInfo.ID);
135
+ newRecord.Set('RecordID', params.entityRecord.ID);
136
+ newRecord.Set(entityAction.OutputField, sOutput);
137
+ await newRecord.Save();
138
+ }
139
+ }
140
+ return results;
141
+ }
142
+ catch (err) {
143
+ console.error(err);
144
+ return {
145
+ success: false,
146
+ startTime: startTime,
147
+ endTime: new Date(),
148
+ timeElapsed: new Date().getTime() - startTime.getTime(),
149
+ errorMessage: err.message,
150
+ exception: err
151
+ };
152
+ }
153
+ }
154
+ markupUserMessage(entityRecord, userMessage) {
155
+ let temp = userMessage;
156
+ const markupTokens = temp.match(/{[a-zA-Z0-9]+}/g);
157
+ if (markupTokens && markupTokens.length > 0) {
158
+ markupTokens.forEach(token => {
159
+ const fieldName = token.replace('{', '').replace('}', '');
160
+ const fieldValue = entityRecord.Get(fieldName);
161
+ temp = temp.replace(token, fieldValue ? fieldValue : '');
162
+ });
163
+ }
164
+ return temp;
165
+ }
166
+ async ExecuteAIAction(params) {
167
+ const action = AIEngine.Actions.find(a => a.ID === params.actionId);
168
+ if (!action)
169
+ throw new Error(`Action ${params.actionId} not found.`);
170
+ if (action.IsActive === false)
171
+ throw new Error(`Action ${params.actionId} is not active.`);
172
+ const model = AIEngine.Models.find(m => m.ID === params.modelId);
173
+ if (!model)
174
+ throw new Error(`Model ${params.modelId} not found.`);
175
+ if (model.IsActive === false)
176
+ throw new Error(`Model ${params.modelId} is not active.`);
177
+ const driver = await this.getDriver(model);
178
+ if (driver) {
179
+ switch (action.Name.trim().toLowerCase()) {
180
+ case 'classify':
181
+ const classifyResult = await driver.ClassifyText({
182
+ model: params.modelName,
183
+ userMessage: params.userMessage,
184
+ systemPrompt: params.systemPrompt
185
+ });
186
+ return classifyResult;
187
+ case 'summarize':
188
+ const summarizeResult = await driver.SummarizeText({
189
+ model: params.modelName,
190
+ userMessage: params.userMessage,
191
+ systemPrompt: params.systemPrompt
192
+ });
193
+ return summarizeResult;
194
+ case 'chat':
195
+ const chatResult = await driver.ChatCompletion({
196
+ model: params.modelName,
197
+ userMessage: params.userMessage,
198
+ systemPrompt: params.systemPrompt,
199
+ messages: [],
200
+ });
201
+ return chatResult;
202
+ default:
203
+ throw new Error(`Action ${action.Name} not supported.`);
204
+ }
205
+ }
206
+ else
207
+ throw new Error(`Driver ${model.DriverClass} not found or couldn't be loaded.`);
208
+ }
209
+ GetStringOutputFromActionResults(action, result) {
210
+ switch (action.Name.trim().toLowerCase()) {
211
+ case 'classify':
212
+ const classifyResult = result;
213
+ return classifyResult.tags.map(t => t.tag).join(', ');
214
+ case 'summarize':
215
+ const summarizeResult = result;
216
+ return summarizeResult.summaryText;
217
+ case 'chat':
218
+ const chatResult = result;
219
+ return chatResult.data.choices[0].message.content;
220
+ default:
221
+ throw new Error(`Action ${action.Get('Name').Name} not supported.`);
222
+ }
223
+ }
224
+ async getDriver(model) {
225
+ const driverClassName = model.Get('DriverClass');
226
+ const driverModuleName = model.Get('DriverImportPath');
227
+ try {
228
+ const driverModule = await Promise.resolve(`${driverModuleName}`).then(s => __importStar(require(s)));
229
+ const DriverClass = driverModule[driverClassName];
230
+ return new DriverClass();
231
+ }
232
+ catch (e) {
233
+ throw new Error(`Error loading driver '${driverModuleName}' / '${driverClassName}' : ${e.message}`);
234
+ }
235
+ }
236
+ constructor() {
237
+ this._models = null;
238
+ this._actions = null;
239
+ this._entityActions = null;
240
+ this._modelActions = null;
241
+ this._metadataLoaded = false;
242
+ if (AIEngine._instance === null) {
243
+ const g = global_1.MJGlobal.Instance.GetGlobalObjectStore();
244
+ if (g && g[AIEngine._globalInstanceKey]) {
245
+ AIEngine._instance = g[AIEngine._globalInstanceKey];
246
+ }
247
+ else {
248
+ if (g)
249
+ g[AIEngine._globalInstanceKey] = this;
250
+ AIEngine._instance = this;
251
+ }
252
+ }
253
+ return AIEngine._instance;
254
+ }
255
+ }
256
+ AIEngine._instance = null;
257
+ AIEngine._globalInstanceKey = '__mj_ai_engine_instance__';
258
+ exports.AIEngine = AIEngine;
259
+ //# sourceMappingURL=AIEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AIEngine.js","sourceRoot":"","sources":["../src/AIEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function SkipAnalyzeData(userQuestion: string, sql: string, sampleDataJSON: string): Promise<string>;
2
+ export declare function SkipExplainQuery(userQuestion: string, sql: string): Promise<string>;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SkipExplainQuery = exports.SkipAnalyzeData = void 0;
4
+ const openai_1 = require("openai");
5
+ const openai_2 = require("./models/openai");
6
+ async function SkipAnalyzeData(userQuestion, sql, sampleDataJSON) {
7
+ const model = new openai_2.OpenAILLM();
8
+ const result = await model.ChatCompletion({
9
+ systemPrompt: `You are an expert data analyst who is great at finding unique insights in data and explaning them to non-technical people. The user message will include:
10
+ 1) a question that was asked by a non-technical user
11
+ 2) a sql query that was created to get data to answer the question
12
+ 3) either a sample, or all, of the data the SQL query returned
13
+ Your job is to write a series of 3 to 6 bullet points that will provide unique insights
14
+ about the data answer's the user question. Use markdown for the bullets. DO NOT include a header like "Insights:" just start with the first bullet point.`,
15
+ userMessage: '',
16
+ model: 'gpt-3.5-turbo-0613',
17
+ messages: [
18
+ {
19
+ role: openai_1.ChatCompletionRequestMessageRoleEnum.User,
20
+ content: `User Question: ${userQuestion}\nSQL Query: ${sql}\nSample Data: ${sampleDataJSON}`,
21
+ },
22
+ ],
23
+ });
24
+ if (result && result.data && result.data.choices && result.data.choices.length > 0)
25
+ return result.data.choices[0].message.content;
26
+ else
27
+ return null;
28
+ }
29
+ exports.SkipAnalyzeData = SkipAnalyzeData;
30
+ async function SkipExplainQuery(userQuestion, sql) {
31
+ const model = new openai_2.OpenAILLM();
32
+ const result = await model.ChatCompletion({
33
+ systemPrompt: `You're an expert data analyst. A user has asked a question of an AI agent. The AI agent has generated a SQL
34
+ query to run to get results. Your job is to review the user question and the SQL query the other AI agent created and
35
+ write a 100-200 word paragraph describing in non-technical terms what the query is outputing. Don't worry about the
36
+ specifics of HOW it works, just explain what it is returning in simple terms.
37
+ Provide this information impersonating the other Agent, who's name is Skip (he's a friendly AI agent), pretend you are Skip explaining YOUR work, don't talk about what
38
+ the AI agent did explain it as if you create the SQL Query. Also don't use any technical terms like SQL or Query.
39
+
40
+ don't start your message with a greeting like "Hey There", just jump right into the analysis as your text will be added to an existing conversation.`,
41
+ userMessage: '',
42
+ model: 'gpt-3.5-turbo-0613',
43
+ messages: [
44
+ {
45
+ role: openai_1.ChatCompletionRequestMessageRoleEnum.User,
46
+ content: `User Question: ${userQuestion}\nSQL Query: ${sql}`,
47
+ },
48
+ ],
49
+ });
50
+ if (result && result.data && result.data.choices && result.data.choices.length > 0)
51
+ return result.data.choices[0].message.content;
52
+ else
53
+ return null;
54
+ }
55
+ exports.SkipExplainQuery = SkipExplainQuery;
56
+ //# sourceMappingURL=AskSkip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskSkip.js","sourceRoot":"","sources":["../src/AskSkip.ts"],"names":[],"mappings":";;;AAAA,mCAA8D;AAC9D,4CAA4C;AAGrC,KAAK,UAAU,eAAe,CAAC,YAAoB,EAAE,GAAW,EAAE,cAAsB;IAC7F,MAAM,KAAK,GAAG,IAAI,kBAAS,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC;QACxC,YAAY,EAAE;;;;;kLAKgK;QAC9K,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,oBAAoB;QAC3B,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,6CAAoC,CAAC,IAAI;gBAC/C,OAAO,EAAE,kBAAkB,YAAY,gBAAgB,GAAG,kBAAkB,cAAc,EAAE;aAC7F;SACF;KACF,CAAC,CAAC;IACH,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;;QAC7H,OAAO,IAAI,CAAC;AACnB,CAAC;AApBD,0CAoBC;AAEM,KAAK,UAAU,gBAAgB,CAAC,YAAoB,EAAE,GAAW;IACtE,MAAM,KAAK,GAAG,IAAI,kBAAS,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC;QACxC,YAAY,EAAE;;;;;;;iKAO+I;QAC7J,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,oBAAoB;QAC3B,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,6CAAoC,CAAC,IAAI;gBAC/C,OAAO,EAAE,kBAAkB,YAAY,gBAAgB,GAAG,EAAE;aAC7D;SACF;KACF,CAAC,CAAC;IACH,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;;QAC7H,OAAO,IAAI,CAAC;AACnB,CAAC;AAtBD,4CAsBC"}
File without changes
package/dist/config.js ADDED
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import { BaseParams, BaseResult, ModelUsage } from "./baseModel";
2
+ export type ChatMessage = {
3
+ role: string;
4
+ content: string;
5
+ };
6
+ export declare class ChatParams extends BaseParams {
7
+ messages: ChatMessage[];
8
+ }
9
+ export type ChatResultChoice = {
10
+ message: ChatMessage;
11
+ finish_reason: string;
12
+ index: number;
13
+ };
14
+ export type ChatResultData = {
15
+ choices: ChatResultChoice[];
16
+ usage: ModelUsage;
17
+ };
18
+ export declare class ChatResult extends BaseResult {
19
+ data: ChatResultData;
20
+ status: string;
21
+ statusText: string;
22
+ }
23
+ export interface IChat {
24
+ ChatCompletion(params: ChatParams): Promise<ChatResult>;
25
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChatResult = exports.ChatParams = void 0;
4
+ const baseModel_1 = require("./baseModel");
5
+ class ChatParams extends baseModel_1.BaseParams {
6
+ }
7
+ exports.ChatParams = ChatParams;
8
+ class ChatResult extends baseModel_1.BaseResult {
9
+ }
10
+ exports.ChatResult = ChatResult;
11
+ //# sourceMappingURL=IChat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IChat.js","sourceRoot":"","sources":["../../src/generic/IChat.ts"],"names":[],"mappings":";;;AAAA,2CAAgE;AAOhE,MAAa,UAAW,SAAQ,sBAAU;CAEzC;AAFD,gCAEC;AAaD,MAAa,UAAW,SAAQ,sBAAU;CAIzC;AAJD,gCAIC"}
@@ -0,0 +1,16 @@
1
+ import { BaseResult, BaseParams } from "./baseModel";
2
+ export declare class ClassifyParams extends BaseParams {
3
+ }
4
+ export declare class ClassifyTag {
5
+ constructor(tag: string, confidence: number);
6
+ tag: string;
7
+ confidence: number;
8
+ }
9
+ export declare class ClassifyResult extends BaseResult {
10
+ inputText: string;
11
+ tags: ClassifyTag[];
12
+ statusMessage: string;
13
+ }
14
+ export interface IClassify {
15
+ ClassifyText(params: ClassifyParams): Promise<ClassifyResult>;
16
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClassifyResult = exports.ClassifyTag = exports.ClassifyParams = void 0;
4
+ const baseModel_1 = require("./baseModel");
5
+ class ClassifyParams extends baseModel_1.BaseParams {
6
+ }
7
+ exports.ClassifyParams = ClassifyParams;
8
+ class ClassifyTag {
9
+ constructor(tag, confidence) {
10
+ this.tag = tag;
11
+ this.confidence = confidence;
12
+ }
13
+ }
14
+ exports.ClassifyTag = ClassifyTag;
15
+ class ClassifyResult extends baseModel_1.BaseResult {
16
+ }
17
+ exports.ClassifyResult = ClassifyResult;
18
+ //# sourceMappingURL=IClassify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IClassify.js","sourceRoot":"","sources":["../../src/generic/IClassify.ts"],"names":[],"mappings":";;;AACA,2CAAoD;AAEpD,MAAa,cAAe,SAAQ,sBAAU;CAC7C;AADD,wCACC;AAED,MAAa,WAAW;IACpB,YAAY,GAAW,EAAE,UAAkB;QACvC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;CAGJ;AAPD,kCAOC;AAED,MAAa,cAAe,SAAQ,sBAAU;CAI7C;AAJD,wCAIC"}
@@ -0,0 +1,11 @@
1
+ import { BaseParams, BaseResult } from "./baseModel";
2
+ export declare class SummarizeParams extends BaseParams {
3
+ }
4
+ export declare class SummarizeResult extends BaseResult {
5
+ text: string;
6
+ summaryText: string;
7
+ constructor(text: string, summaryText: string, success: boolean, startTime: Date, endTime: Date);
8
+ }
9
+ export interface ISummarize {
10
+ SummarizeText(params: SummarizeParams): Promise<SummarizeResult>;
11
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SummarizeResult = exports.SummarizeParams = void 0;
4
+ const baseModel_1 = require("./baseModel");
5
+ class SummarizeParams extends baseModel_1.BaseParams {
6
+ }
7
+ exports.SummarizeParams = SummarizeParams;
8
+ class SummarizeResult extends baseModel_1.BaseResult {
9
+ constructor(text, summaryText, success, startTime, endTime) {
10
+ super(success, startTime, endTime);
11
+ this.text = text;
12
+ this.summaryText = summaryText;
13
+ }
14
+ }
15
+ exports.SummarizeResult = SummarizeResult;
16
+ //# sourceMappingURL=ISummarize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ISummarize.js","sourceRoot":"","sources":["../../src/generic/ISummarize.ts"],"names":[],"mappings":";;;AAAA,2CAAoD;AAEpD,MAAa,eAAgB,SAAQ,sBAAU;CAE9C;AAFD,0CAEC;AAED,MAAa,eAAgB,SAAQ,sBAAU;IAG3C,YAAa,IAAY,EAAE,WAAmB,EAAE,OAAgB,EAAE,SAAe,EAAE,OAAa;QAC5F,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;CACJ;AARD,0CAQC"}
@@ -0,0 +1,26 @@
1
+ export declare class BaseResult {
2
+ success: boolean;
3
+ startTime: Date;
4
+ endTime: Date;
5
+ errorMessage: string;
6
+ exception: any;
7
+ get timeElapsed(): number;
8
+ constructor(success: boolean, startTime: Date, endTime: Date);
9
+ }
10
+ export declare class BaseParams {
11
+ model: string;
12
+ systemPrompt: string;
13
+ userMessage: string;
14
+ }
15
+ export declare class ModelUsage {
16
+ constructor(promptTokens: number, completionTokens: number);
17
+ promptTokens: number;
18
+ completionTokens: number;
19
+ get totalTokens(): number;
20
+ }
21
+ export declare abstract class BaseModel {
22
+ }
23
+ export declare abstract class BaseLLM extends BaseModel {
24
+ }
25
+ export declare abstract class BaseDiffusion extends BaseModel {
26
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseDiffusion = exports.BaseLLM = exports.BaseModel = exports.ModelUsage = exports.BaseParams = exports.BaseResult = void 0;
4
+ class BaseResult {
5
+ get timeElapsed() {
6
+ return this.endTime.getTime() - this.startTime.getTime();
7
+ }
8
+ constructor(success, startTime, endTime) {
9
+ this.success = success;
10
+ this.startTime = startTime;
11
+ this.endTime = endTime;
12
+ }
13
+ }
14
+ exports.BaseResult = BaseResult;
15
+ class BaseParams {
16
+ }
17
+ exports.BaseParams = BaseParams;
18
+ class ModelUsage {
19
+ constructor(promptTokens, completionTokens) {
20
+ this.promptTokens = promptTokens;
21
+ this.completionTokens = completionTokens;
22
+ }
23
+ get totalTokens() {
24
+ return this.promptTokens + this.completionTokens;
25
+ }
26
+ }
27
+ exports.ModelUsage = ModelUsage;
28
+ class BaseModel {
29
+ }
30
+ exports.BaseModel = BaseModel;
31
+ class BaseLLM extends BaseModel {
32
+ }
33
+ exports.BaseLLM = BaseLLM;
34
+ class BaseDiffusion extends BaseModel {
35
+ }
36
+ exports.BaseDiffusion = BaseDiffusion;
37
+ //# sourceMappingURL=baseModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseModel.js","sourceRoot":"","sources":["../../src/generic/baseModel.ts"],"names":[],"mappings":";;;AAAA,MAAa,UAAU;IAMnB,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC7D,CAAC;IACD,YAAa,OAAgB,EAAE,SAAe,EAAE,OAAa;QACzD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;CACJ;AAdD,gCAcC;AAED,MAAa,UAAU;CAItB;AAJD,gCAIC;AAED,MAAa,UAAU;IACnB,YAAY,YAAoB,EAAE,gBAAwB;QACtD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC7C,CAAC;IAGD,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACrD,CAAC;CACJ;AAVD,gCAUC;AAED,MAAsB,SAAS;CAC9B;AADD,8BACC;AAED,MAAsB,OAAQ,SAAQ,SAAS;CAC9C;AADD,0BACC;AAED,MAAsB,aAAc,SAAQ,SAAS;CACpD;AADD,sCACC"}
@@ -0,0 +1,7 @@
1
+ export * from './AskSkip';
2
+ export * from "./models/openai";
3
+ export * from './generic/baseModel';
4
+ export * from './generic/IChat';
5
+ export * from './generic/IClassify';
6
+ export * from './generic/ISummarize';
7
+ export * from './AIEngine';
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
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("./AskSkip"), exports);
18
+ __exportStar(require("./models/openai"), exports);
19
+ __exportStar(require("./generic/baseModel"), exports);
20
+ __exportStar(require("./generic/IChat"), exports);
21
+ __exportStar(require("./generic/IClassify"), exports);
22
+ __exportStar(require("./generic/ISummarize"), exports);
23
+ __exportStar(require("./AIEngine"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAAyB;AACzB,kDAAgC;AAChC,sDAAmC;AACnC,kDAA+B;AAC/B,sDAAmC;AACnC,uDAAoC;AACpC,6CAA0B"}
@@ -0,0 +1,11 @@
1
+ import { BaseLLM } from "../generic/baseModel";
2
+ import { ChatParams, ChatResult, IChat } from "../generic/IChat";
3
+ import { ISummarize, SummarizeParams, SummarizeResult } from '../generic/ISummarize';
4
+ import { ClassifyParams, ClassifyResult, IClassify } from '../generic/IClassify';
5
+ export declare class AnthropicLLM extends BaseLLM implements IChat, ISummarize, IClassify {
6
+ static _anthropic: any;
7
+ constructor();
8
+ ChatCompletion(params: ChatParams): Promise<ChatResult>;
9
+ SummarizeText(params: SummarizeParams): Promise<SummarizeResult>;
10
+ ClassifyText(params: ClassifyParams): Promise<ClassifyResult>;
11
+ }
@@ -0,0 +1,52 @@
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.AnthropicLLM = void 0;
7
+ const dotenv_1 = __importDefault(require("dotenv"));
8
+ dotenv_1.default.config();
9
+ const baseModel_1 = require("../generic/baseModel");
10
+ const ISummarize_1 = require("../generic/ISummarize");
11
+ const sdk_1 = require("@anthropic-ai/sdk");
12
+ class AnthropicLLM extends baseModel_1.BaseLLM {
13
+ constructor() {
14
+ super();
15
+ if (!AnthropicLLM._anthropic) {
16
+ const apiKey = process.env.ANTHROPIC_API_KEY;
17
+ if (!apiKey) {
18
+ throw new Error("The ANTHROPIC_API_KEY environment variable must be set");
19
+ }
20
+ AnthropicLLM._anthropic = new sdk_1.Client(apiKey);
21
+ }
22
+ }
23
+ async ChatCompletion(params) {
24
+ throw new Error("Method not implemented.");
25
+ }
26
+ async SummarizeText(params) {
27
+ const sPrompt = `${sdk_1.HUMAN_PROMPT} the following is a SYSTEM prompt that is important to comply with at all times
28
+ ${params.systemPrompt}
29
+ ${sdk_1.AI_PROMPT} OK
30
+ ${sdk_1.HUMAN_PROMPT} the following is the user message to process
31
+ ${params.userMessage}`;
32
+ const startTime = new Date();
33
+ const sample = await AnthropicLLM._anthropic
34
+ .complete({
35
+ prompt: sPrompt,
36
+ stop_sequences: [sdk_1.HUMAN_PROMPT],
37
+ max_tokens_to_sample: 2000,
38
+ model: "claude-v1",
39
+ });
40
+ const endTime = new Date();
41
+ const success = sample && sample.completion;
42
+ let summaryText = null;
43
+ if (success)
44
+ summaryText = sample.completion;
45
+ return new ISummarize_1.SummarizeResult(params.userMessage, summaryText, success, startTime, endTime);
46
+ }
47
+ async ClassifyText(params) {
48
+ throw new Error("Method not implemented.");
49
+ }
50
+ }
51
+ exports.AnthropicLLM = AnthropicLLM;
52
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/models/anthropic.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,oDAAsE;AAEtE,sDAAqF;AAErF,2CAAoE;AAEpE,MAAa,YAAa,SAAQ,mBAAO;IAIrC;QACI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;YAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;aAC3E;YAED,YAAY,CAAC,UAAU,GAAG,IAAI,YAAM,CAAC,MAAM,CAAC,CAAC;SAChD;IACL,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,MAAkB;QAC1C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,MAAuB;QAC9C,MAAM,OAAO,GAAW,GAAG,kBAAY;EAC7C,MAAM,CAAC,YAAY;EACnB,eAAS;EACT,kBAAY;EACZ,MAAM,CAAC,WAAW,EAAE,CAAA;QAEd,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU;aAC3C,QAAQ,CAAC;YACR,MAAM,EAAE,OAAO;YACf,cAAc,EAAE,CAAC,kBAAY,CAAC;YAC9B,oBAAoB,EAAE,IAAI;YAC1B,KAAK,EAAE,WAAW;SACnB,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAE3B,MAAM,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC;QAC5C,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,IAAI,OAAO;YACP,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QAEpC,OAAO,IAAI,4BAAe,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7F,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,MAAsB;QAC5C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;CAEJ;AAjDD,oCAiDC"}
@@ -0,0 +1,12 @@
1
+ import { BaseLLM } from "../generic/baseModel";
2
+ import { ChatParams, ChatResult, IChat } from "../generic/IChat";
3
+ import { ISummarize, SummarizeParams, SummarizeResult } from '../generic/ISummarize';
4
+ import { ClassifyParams, ClassifyResult, IClassify } from '../generic/IClassify';
5
+ export declare class OpenAILLM extends BaseLLM implements IChat, ISummarize, IClassify {
6
+ static _openAI: any;
7
+ constructor();
8
+ ChatCompletion(params: ChatParams): Promise<ChatResult>;
9
+ protected convertRole(role: string): any;
10
+ SummarizeText(params: SummarizeParams): Promise<SummarizeResult>;
11
+ ClassifyText(params: ClassifyParams): Promise<ClassifyResult>;
12
+ }
@@ -0,0 +1,105 @@
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.OpenAILLM = void 0;
7
+ const dotenv_1 = __importDefault(require("dotenv"));
8
+ dotenv_1.default.config();
9
+ const baseModel_1 = require("../generic/baseModel");
10
+ const ISummarize_1 = require("../generic/ISummarize");
11
+ const { ChatCompletionRequestMessageRoleEnum, Configuration, OpenAIApi } = require("openai");
12
+ class OpenAILLM extends baseModel_1.BaseLLM {
13
+ constructor() {
14
+ super();
15
+ const configuration = new Configuration({
16
+ apiKey: process.env.OPEN_AI_API_KEY
17
+ });
18
+ if (!OpenAILLM._openAI)
19
+ OpenAILLM._openAI = new OpenAIApi(configuration);
20
+ }
21
+ async ChatCompletion(params) {
22
+ const messages = [];
23
+ if (params.systemPrompt && params.systemPrompt.length > 0)
24
+ messages.push({
25
+ role: ChatCompletionRequestMessageRoleEnum.System,
26
+ content: params.systemPrompt
27
+ });
28
+ params.messages.forEach(m => {
29
+ messages.push({
30
+ role: this.convertRole(m.role),
31
+ content: m.content
32
+ });
33
+ });
34
+ const startTime = new Date();
35
+ const result = await OpenAILLM._openAI.createChatCompletion({
36
+ model: params.model,
37
+ messages: messages
38
+ });
39
+ const endTime = new Date();
40
+ const timeElapsed = endTime.getTime() - startTime.getTime();
41
+ return {
42
+ data: {
43
+ choices: result.data.choices.map((c) => {
44
+ return {
45
+ message: {
46
+ role: ChatCompletionRequestMessageRoleEnum[c.message.role],
47
+ content: c.message.content
48
+ },
49
+ finish_reason: c.finish_reason,
50
+ index: c.index
51
+ };
52
+ }),
53
+ usage: new baseModel_1.ModelUsage(result.data.usage.prompt_tokens, result.data.usage.completion_tokens)
54
+ },
55
+ success: result.success,
56
+ status: result.status,
57
+ statusText: result.statusText,
58
+ startTime: startTime,
59
+ endTime: endTime,
60
+ timeElapsed: timeElapsed,
61
+ errorMessage: null,
62
+ exception: null
63
+ };
64
+ }
65
+ convertRole(role) {
66
+ switch (role.trim().toLowerCase()) {
67
+ case 'system':
68
+ return ChatCompletionRequestMessageRoleEnum.System;
69
+ case 'user':
70
+ return ChatCompletionRequestMessageRoleEnum.User;
71
+ case 'assistant':
72
+ return ChatCompletionRequestMessageRoleEnum.Assistant;
73
+ default:
74
+ throw new Error(`Unknown role ${role}`);
75
+ }
76
+ }
77
+ async SummarizeText(params) {
78
+ const messages = [];
79
+ if (params.systemPrompt && params.systemPrompt.length > 0)
80
+ messages.push({
81
+ role: ChatCompletionRequestMessageRoleEnum.System,
82
+ content: params.systemPrompt
83
+ });
84
+ messages.push({
85
+ role: ChatCompletionRequestMessageRoleEnum.User,
86
+ content: params.userMessage
87
+ });
88
+ const startTime = new Date();
89
+ const result = await OpenAILLM._openAI.createChatCompletion({
90
+ model: params.model,
91
+ messages: messages
92
+ });
93
+ const endTime = new Date();
94
+ const success = result.data && result.data.choices && result.data.choices.length > 0;
95
+ let summaryText = null;
96
+ if (success)
97
+ summaryText = result.data.choices[0].message.content;
98
+ return new ISummarize_1.SummarizeResult(params.userMessage, summaryText, success, startTime, endTime);
99
+ }
100
+ async ClassifyText(params) {
101
+ throw new Error("Method not implemented.");
102
+ }
103
+ }
104
+ exports.OpenAILLM = OpenAILLM;
105
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/models/openai.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@memberjunction/ai",
3
+ "version": "0.9.1",
4
+ "description": "MemberJunction AI Module - LLMs and other AI services wrapped and abstracted for use in MemberJunction",
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
+ "@anthropic-ai/sdk": "^0.4.3",
19
+ "@memberjunction/core": "^0.9.0",
20
+ "@memberjunction/global": "^0.9.0",
21
+ "dotenv": "^16.0.3",
22
+ "openai": "^3.2.1",
23
+ "rxjs": "^7.8.1",
24
+ "typeorm": "^0.3.16"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^20.1.7",
28
+ "ts-node-dev": "^2.0.0",
29
+ "typescript": "^5.0.3"
30
+ }
31
+ }