@memberjunction/server 1.3.3 → 1.4.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.
- package/CHANGELOG.json +359 -1
- package/CHANGELOG.md +78 -2
- package/dist/auth/exampleNewUserSubClass.js +1 -1
- package/dist/auth/exampleNewUserSubClass.js.map +1 -1
- package/dist/entitySubclasses/EntityBehavior.server.d.ts +29 -0
- package/dist/entitySubclasses/EntityBehavior.server.d.ts.map +1 -0
- package/dist/entitySubclasses/EntityBehavior.server.js +213 -0
- package/dist/entitySubclasses/EntityBehavior.server.js.map +1 -0
- package/dist/generated/generated.d.ts +2235 -1334
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +7461 -3779
- package/dist/generated/generated.js.map +1 -1
- package/dist/generic/DeleteOptionsInput.d.ts +5 -0
- package/dist/generic/DeleteOptionsInput.d.ts.map +1 -0
- package/dist/generic/DeleteOptionsInput.js +28 -0
- package/dist/generic/DeleteOptionsInput.js.map +1 -0
- package/dist/generic/KeyInputOutputTypes.d.ts +16 -0
- package/dist/generic/KeyInputOutputTypes.d.ts.map +1 -0
- package/dist/generic/KeyInputOutputTypes.js +62 -0
- package/dist/generic/KeyInputOutputTypes.js.map +1 -0
- package/dist/generic/KeyValuePairInput.d.ts +5 -0
- package/dist/generic/KeyValuePairInput.d.ts.map +1 -0
- package/dist/generic/KeyValuePairInput.js +28 -0
- package/dist/generic/KeyValuePairInput.js.map +1 -0
- package/dist/generic/ResolverBase.d.ts +17 -5
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +176 -0
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/resolvers/AskSkipResolver.d.ts +3 -3
- package/dist/resolvers/AskSkipResolver.d.ts.map +1 -1
- package/dist/resolvers/AskSkipResolver.js +29 -16
- package/dist/resolvers/AskSkipResolver.js.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.d.ts +3 -2
- package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.js +13 -12
- package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
- package/dist/resolvers/FileCategoryResolver.d.ts +2 -2
- package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -1
- package/dist/resolvers/FileCategoryResolver.js +23 -11
- package/dist/resolvers/FileCategoryResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.d.ts +2 -2
- package/dist/resolvers/FileResolver.d.ts.map +1 -1
- package/dist/resolvers/FileResolver.js +6 -5
- package/dist/resolvers/FileResolver.js.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.d.ts +1 -9
- package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.js +8 -36
- package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +2 -8
- package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.js +5 -25
- package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
- package/dist/resolvers/UserFavoriteResolver.d.ts +5 -5
- package/dist/resolvers/UserFavoriteResolver.d.ts.map +1 -1
- package/dist/resolvers/UserFavoriteResolver.js +11 -10
- package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
- package/package.json +20 -15
- package/src/auth/exampleNewUserSubClass.ts +1 -1
- package/src/entitySubclasses/EntityBehavior.server.ts +241 -0
- package/src/generated/generated.ts +6590 -5576
- package/src/generic/DeleteOptionsInput.ts +13 -0
- package/src/generic/KeyInputOutputTypes.ts +35 -0
- package/src/generic/KeyValuePairInput.ts +14 -0
- package/src/generic/ResolverBase.ts +239 -1
- package/src/index.ts +10 -0
- package/src/resolvers/AskSkipResolver.ts +40 -16
- package/src/resolvers/EntityRecordNameResolver.ts +49 -11
- package/src/resolvers/FileCategoryResolver.ts +34 -10
- package/src/resolvers/FileResolver.ts +3 -2
- package/src/resolvers/MergeRecordsResolver.ts +1 -20
- package/src/resolvers/PotentialDuplicateRecordResolver.ts +1 -13
- package/src/resolvers/UserFavoriteResolver.ts +10 -8
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ValidateEntityBehaviorCodeGenerator = exports.EntityBehaviorTypeCodeGeneratorBase = exports.EntityBehaviorEntity_Server = void 0;
|
|
10
|
+
const global_1 = require("@memberjunction/global");
|
|
11
|
+
const core_1 = require("@memberjunction/core");
|
|
12
|
+
const core_entities_1 = require("@memberjunction/core-entities");
|
|
13
|
+
const ai_1 = require("@memberjunction/ai");
|
|
14
|
+
const aiengine_1 = require("@memberjunction/aiengine");
|
|
15
|
+
const ai_openai_1 = require("@memberjunction/ai-openai");
|
|
16
|
+
(0, ai_openai_1.LoadOpenAILLM)();
|
|
17
|
+
let EntityBehaviorEntity_Server = class EntityBehaviorEntity_Server extends core_entities_1.EntityBehaviorEntityExtended {
|
|
18
|
+
get AIVendorName() {
|
|
19
|
+
return 'OpenAI';
|
|
20
|
+
}
|
|
21
|
+
async GetAIModel() {
|
|
22
|
+
await aiengine_1.AIEngine.LoadAIMetadata(this.ContextCurrentUser);
|
|
23
|
+
const models = aiengine_1.AIEngine.Models.filter(m => m.AIModelType.trim().toLowerCase() === 'llm' &&
|
|
24
|
+
m.Vendor.trim().toLowerCase() === this.AIVendorName.trim().toLowerCase());
|
|
25
|
+
models.sort((a, b) => b.PowerRank - a.PowerRank);
|
|
26
|
+
return models[0];
|
|
27
|
+
}
|
|
28
|
+
async Save(options) {
|
|
29
|
+
if (this.CodeGenerated && this.RegenerateCode) {
|
|
30
|
+
const md = new core_1.Metadata();
|
|
31
|
+
const ei = md.Entities.find(e => e.ID === this.EntityID);
|
|
32
|
+
const bt = await md.GetEntityObject("Entity Behavior Types", this.ContextCurrentUser);
|
|
33
|
+
await bt.Load(this.BehaviorTypeID);
|
|
34
|
+
const codeGen = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(EntityBehaviorTypeCodeGeneratorBase, bt.Name);
|
|
35
|
+
if (!codeGen)
|
|
36
|
+
throw new Error(`No code generator found for behavior type ${bt.Name}`);
|
|
37
|
+
let result;
|
|
38
|
+
if (codeGen.Type == 'Prompt') {
|
|
39
|
+
const btPrompt = await codeGen.GenerateSysPrompt(ei, bt);
|
|
40
|
+
result = await this.GenerateCode(this.Description, btPrompt, bt, ei);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
result = await codeGen.GenerateCode(this.Description, bt, ei);
|
|
44
|
+
}
|
|
45
|
+
if (result) {
|
|
46
|
+
this.Code = result.code;
|
|
47
|
+
this.CodeExplanation = result.explanation;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.Code = null;
|
|
51
|
+
this.CodeExplanation = 'No code generated';
|
|
52
|
+
}
|
|
53
|
+
this.RegenerateCode = false;
|
|
54
|
+
}
|
|
55
|
+
return super.Save(options);
|
|
56
|
+
}
|
|
57
|
+
async GenerateCode(behaviorDescription, behaviorTypePrompt, behaviorType, entityInfo) {
|
|
58
|
+
try {
|
|
59
|
+
const model = await this.GetAIModel();
|
|
60
|
+
const llm = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(ai_1.BaseLLM, model.DriverClass, (0, ai_1.GetAIAPIKey)(model.DriverClass));
|
|
61
|
+
const chatParams = {
|
|
62
|
+
model: model.APINameOrName,
|
|
63
|
+
messages: [
|
|
64
|
+
{
|
|
65
|
+
role: 'system',
|
|
66
|
+
content: this.GenerateSysPrompt(entityInfo, behaviorTypePrompt, behaviorType)
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
role: 'user',
|
|
70
|
+
content: behaviorDescription,
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
};
|
|
74
|
+
const result = await llm.ChatCompletion(chatParams);
|
|
75
|
+
if (result && result.data) {
|
|
76
|
+
const llmResponse = result.data.choices[0].message.content;
|
|
77
|
+
if (llmResponse) {
|
|
78
|
+
try {
|
|
79
|
+
const cleansed = (0, global_1.CleanJSON)(llmResponse);
|
|
80
|
+
if (!cleansed)
|
|
81
|
+
throw new Error('Invalid JSON response from AI: ' + llmResponse);
|
|
82
|
+
const parsed = JSON.parse(cleansed);
|
|
83
|
+
if (parsed.code && parsed.code.length > 0) {
|
|
84
|
+
const trimmed = parsed.code.trim();
|
|
85
|
+
return {
|
|
86
|
+
code: trimmed,
|
|
87
|
+
explanation: parsed.explanation
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
else if (parsed.code !== undefined && parsed.code !== null) {
|
|
91
|
+
return {
|
|
92
|
+
code: '',
|
|
93
|
+
explanation: parsed.explanation
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
throw new Error('Invalid response from AI, no code property found in response: ' + llmResponse);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
(0, core_1.LogError)(e);
|
|
102
|
+
throw new Error('Error parsing JSON response from AI: ' + llmResponse);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else
|
|
106
|
+
throw new Error('Null response from AI');
|
|
107
|
+
}
|
|
108
|
+
else
|
|
109
|
+
throw new Error('No result returned from AI');
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
(0, core_1.LogError)(e);
|
|
113
|
+
throw e;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
GenerateSysPrompt(entityInfo, behaviorTypePrompt, behaviorType) {
|
|
117
|
+
const prompt = `You are an expert in TypeScript coding and business applications. You take great pride in easy to read, commented, and BEAUTIFULLY formatted code.
|
|
118
|
+
You will be provided a system administrator's request for how to handle a specific type of behavior for the ${entityInfo.Name} entity in our system.
|
|
119
|
+
|
|
120
|
+
The type of behavior is ${behaviorType.Name} and is described as follows:
|
|
121
|
+
<BEHAVIOR_SPECIFIC_INFO>
|
|
122
|
+
${behaviorTypePrompt}
|
|
123
|
+
</BEHAVIOR_SPECIFIC_INFO>
|
|
124
|
+
|
|
125
|
+
The next message, which will be a user message in the conversation, will contain the sys admin's requested behavior for this entity.
|
|
126
|
+
|
|
127
|
+
Here is the entity's schema information. When generating code that use the getter/setter methods for fields inside the object instance make sure to use the CodeName for the related entity field which sometimes
|
|
128
|
+
is different from the SQL Field Name if the SQL Field Name contains characters that are not valid in TypeScript variable names.
|
|
129
|
+
|
|
130
|
+
${entityInfo.Name} (${entityInfo.SchemaName}.${entityInfo.BaseView})
|
|
131
|
+
${entityInfo.Description ? `Description: ${entityInfo.Description}` : ''}
|
|
132
|
+
Fields:
|
|
133
|
+
${entityInfo.Fields.map(f => {
|
|
134
|
+
let ret = `${f.Name} (${f.Type}) (CodeName: ${f.CodeName})`;
|
|
135
|
+
if (f.RelatedEntity) {
|
|
136
|
+
ret += ` (fkey to ${f.RelatedEntityBaseView})`;
|
|
137
|
+
}
|
|
138
|
+
return ret;
|
|
139
|
+
}).join(',')}
|
|
140
|
+
|
|
141
|
+
<CRITICAL>
|
|
142
|
+
I am a bot and can only understand JSON. Your response must be parsable into this type:
|
|
143
|
+
const returnType = {
|
|
144
|
+
code: string, // The typescript code you will create that will work in the context described above. MAKE SURE TO PRETTY FORMAT THIS WITH SPACE INDENTS AND LINE BREAKS IN THE CODE!
|
|
145
|
+
explanation: string // an explanation for the system admin of how the code works and why it was written that way
|
|
146
|
+
};
|
|
147
|
+
</CRITICAL>
|
|
148
|
+
**** REMEMBER **** I am a BOT, do not return anything other than JSON to me or I will choke on your response!
|
|
149
|
+
`;
|
|
150
|
+
return prompt;
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
exports.EntityBehaviorEntity_Server = EntityBehaviorEntity_Server;
|
|
154
|
+
exports.EntityBehaviorEntity_Server = EntityBehaviorEntity_Server = __decorate([
|
|
155
|
+
(0, global_1.RegisterClass)(core_1.BaseEntity, 'Entity Behaviors', 3)
|
|
156
|
+
], EntityBehaviorEntity_Server);
|
|
157
|
+
class EntityBehaviorTypeCodeGeneratorBase {
|
|
158
|
+
}
|
|
159
|
+
exports.EntityBehaviorTypeCodeGeneratorBase = EntityBehaviorTypeCodeGeneratorBase;
|
|
160
|
+
let ValidateEntityBehaviorCodeGenerator = class ValidateEntityBehaviorCodeGenerator extends EntityBehaviorTypeCodeGeneratorBase {
|
|
161
|
+
get Type() {
|
|
162
|
+
return 'Prompt';
|
|
163
|
+
}
|
|
164
|
+
async GenerateCode(behaviorDescription, behaviorType, entityInfo) {
|
|
165
|
+
throw new Error('Not implemented');
|
|
166
|
+
}
|
|
167
|
+
async GenerateSysPrompt(entityInfo, behaviorType) {
|
|
168
|
+
return `
|
|
169
|
+
Your job is to create TypeScript code that will be executed within a Validate() method in a TypeScript sub-class of BaseEntity.
|
|
170
|
+
BaseEntity is an ORM style model entity that is being sub-classed for this entity specifically and we want to incorporate the logic for
|
|
171
|
+
the Validate method requested into TypeScript code that we will insert into an override of the BaseClass Validate method. It is important that you
|
|
172
|
+
call super.Validate() at some point in your code to incorporate the base class Validation.
|
|
173
|
+
|
|
174
|
+
For example, you might define the Validate() function as follows, and in your generated code you would get rid of the comments I have below and replace with your own relevant comments.
|
|
175
|
+
|
|
176
|
+
public Validate(): ValidationResult {
|
|
177
|
+
const result = super.Validate();
|
|
178
|
+
|
|
179
|
+
// The above super.Validate() may have returned a false or true Success property. Either way, do your custom
|
|
180
|
+
// validation here to add to
|
|
181
|
+
|
|
182
|
+
// ADD YOUR CUSTOM VALIDATION LOGIC HERE and update result.Success to false if anything fails and for each
|
|
183
|
+
// failed valdiation condition add the ValidationErrorInfo to the Errors array of the result variable.
|
|
184
|
+
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
Validate must return a ValidationResult as defined below. Make sure your return type code complies with these strong type definitions.
|
|
189
|
+
class ValidationErrorInfo {
|
|
190
|
+
Source: string
|
|
191
|
+
Message: string
|
|
192
|
+
Value: string
|
|
193
|
+
Type: ValidationErrorType
|
|
194
|
+
}
|
|
195
|
+
const ValidationErrorType = {
|
|
196
|
+
Failure: ''Failure'',
|
|
197
|
+
Warning: ''Warning'',
|
|
198
|
+
} as const;
|
|
199
|
+
|
|
200
|
+
class ValidationResult {
|
|
201
|
+
Success: boolean
|
|
202
|
+
Errors: ValidationErrorInfo[] = []
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
<IMPORTANT>The code you must return is ONLY the Validate() function, do not return anything else inside the code property in the JSON object!</IMPORTANT>
|
|
206
|
+
`;
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
exports.ValidateEntityBehaviorCodeGenerator = ValidateEntityBehaviorCodeGenerator;
|
|
210
|
+
exports.ValidateEntityBehaviorCodeGenerator = ValidateEntityBehaviorCodeGenerator = __decorate([
|
|
211
|
+
(0, global_1.RegisterClass)(EntityBehaviorTypeCodeGeneratorBase, 'Validation', 1)
|
|
212
|
+
], ValidateEntityBehaviorCodeGenerator);
|
|
213
|
+
//# sourceMappingURL=EntityBehavior.server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityBehavior.server.js","sourceRoot":"","sources":["../../src/entitySubclasses/EntityBehavior.server.ts"],"names":[],"mappings":"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"}
|