@memberjunction/templates 2.13.0 → 2.13.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.
|
@@ -9,6 +9,7 @@ type Context = any;
|
|
|
9
9
|
* This class is an extension for the Nunjucks template engine that allows for the use of an AI prompt in a template.
|
|
10
10
|
*/
|
|
11
11
|
export declare class AIPromptExtension extends TemplateExtensionBase {
|
|
12
|
+
AllowFormattingText: string;
|
|
12
13
|
constructor(contextUser: UserInfo);
|
|
13
14
|
parse(parser: Parser, nodes: Nodes, lexer: Lexer): any;
|
|
14
15
|
run(context: Context, body: any, errorBody: any, params: any, callBack: NunjucksCallback, a: any, b: any, c: any): void;
|
|
@@ -23,5 +24,16 @@ export declare class AIPromptExtension extends TemplateExtensionBase {
|
|
|
23
24
|
*/
|
|
24
25
|
protected GetAIModel(vendorName: string, contextUser: UserInfo): Promise<AIModelEntityExtended>;
|
|
25
26
|
}
|
|
27
|
+
export type AIPromptConfig = {
|
|
28
|
+
/**
|
|
29
|
+
* The AI model to use for the prompt. If not provided, the extension will use the highest power model available.
|
|
30
|
+
*/
|
|
31
|
+
AIModel?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Whether or not to allow the AI Model to return its reponse formatted, HTML, Markdown, JSON, etc.
|
|
34
|
+
* If false, the AI Model will return the response as plain text
|
|
35
|
+
*/
|
|
36
|
+
AllowFormatting?: boolean;
|
|
37
|
+
};
|
|
26
38
|
export {};
|
|
27
39
|
//# sourceMappingURL=AIPrompt.extension.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIPrompt.extension.d.ts","sourceRoot":"","sources":["../../src/extensions/AIPrompt.extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGlF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,KAAK,MAAM,GAAG,GAAG,CAAC;AAClB,KAAK,KAAK,GAAG,GAAG,CAAC;AACjB,KAAK,KAAK,GAAG,GAAG,CAAC;AACjB,KAAK,OAAO,GAAG,GAAG,CAAC;AAEnB;;GAEG;AACH,qBACa,iBAAkB,SAAQ,qBAAqB;
|
|
1
|
+
{"version":3,"file":"AIPrompt.extension.d.ts","sourceRoot":"","sources":["../../src/extensions/AIPrompt.extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGlF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,KAAK,MAAM,GAAG,GAAG,CAAC;AAClB,KAAK,KAAK,GAAG,GAAG,CAAC;AACjB,KAAK,KAAK,GAAG,GAAG,CAAC;AACjB,KAAK,OAAO,GAAG,GAAG,CAAC;AAEnB;;GAEG;AACH,qBACa,iBAAkB,SAAQ,qBAAqB;IAExD,mBAAmB,EAAE,MAAM,CAAgE;gBAE/E,WAAW,EAAE,QAAQ;IAK1B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IAkChD,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,KAAA,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,KAAA,EAAE,CAAC,KAAA,EAAE,CAAC,KAAA;IA+DnG;;;OAGG;IACH,SAAS,KAAK,mBAAmB,IAAI,MAAM,CAE1C;IAED;;;OAGG;cACa,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAQxG;AAED,MAAM,MAAM,cAAc,GAAG;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC"}
|
|
@@ -21,6 +21,7 @@ const ai_1 = require("@memberjunction/ai");
|
|
|
21
21
|
let AIPromptExtension = class AIPromptExtension extends TemplateExtensionBase_1.TemplateExtensionBase {
|
|
22
22
|
constructor(contextUser) {
|
|
23
23
|
super(contextUser);
|
|
24
|
+
this.AllowFormattingText = "Do not use markdown, HTML, or any other special formatting.";
|
|
24
25
|
this.tags = ['AIPrompt'];
|
|
25
26
|
}
|
|
26
27
|
parse(parser, nodes, lexer) {
|
|
@@ -50,6 +51,19 @@ let AIPromptExtension = class AIPromptExtension extends TemplateExtensionBase_1.
|
|
|
50
51
|
}
|
|
51
52
|
run(context, body, errorBody, params, callBack, a, b, c) {
|
|
52
53
|
const prompt = body();
|
|
54
|
+
let config = {};
|
|
55
|
+
if (prompt.includes("<!--!!") && prompt.includes("!!-->")) {
|
|
56
|
+
// we have a config block in the prompt
|
|
57
|
+
const configBlock = prompt.substring(prompt.indexOf("<!--!!") + 6, prompt.indexOf("!!-->"));
|
|
58
|
+
try {
|
|
59
|
+
config = JSON.parse(configBlock);
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
// try-catch because we don't want to crash if the JSON is invalid
|
|
63
|
+
(0, core_1.LogError)(`Unable to parse JSON: ${configBlock}`);
|
|
64
|
+
(0, core_1.LogError)(e);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
53
67
|
// we now have the LLM prompt in the prompt variable
|
|
54
68
|
// we can't use async/await here because this is a synchronous function
|
|
55
69
|
// so instead we will use the callback pattern
|
|
@@ -57,15 +71,20 @@ let AIPromptExtension = class AIPromptExtension extends TemplateExtensionBase_1.
|
|
|
57
71
|
// then we will create an instance of the LLM class
|
|
58
72
|
aiengine_1.AIEngine.Instance.Config(false, this.ContextUser).then(async () => {
|
|
59
73
|
try {
|
|
60
|
-
|
|
74
|
+
let model = null;
|
|
75
|
+
if (config.AIModel) {
|
|
76
|
+
model = aiengine_1.AIEngine.Instance.Models.find(m => m.Name.toLowerCase() == config.AIModel.toLowerCase());
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
model = await aiengine_1.AIEngine.Instance.GetHighestPowerModel('Groq', 'llm', this.ContextUser);
|
|
80
|
+
}
|
|
61
81
|
const llm = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(ai_1.BaseLLM, model.DriverClass, (0, ai_1.GetAIAPIKey)(model.DriverClass));
|
|
62
82
|
const llmResult = await llm.ChatCompletion({
|
|
63
83
|
messages: [
|
|
64
84
|
{
|
|
65
85
|
role: 'system',
|
|
66
86
|
content: `Background: The output from this will be DIRECTLY inserted into a messaging template going to a recipient. For this reason whenever
|
|
67
|
-
you are prompted to provide a result, do not preface it with any text, just provide the result itself.
|
|
68
|
-
markdown, HTML, or any other special formatting. Assume that the text you are generating will go directly into a message.
|
|
87
|
+
you are prompted to provide a result, do not preface it with any text, just provide the result itself. ${config.AllowFormatting ? "" : this.AllowFormattingText} Assume that the text you are generating will go directly into a message.
|
|
69
88
|
<IMPORTANT>ONLY PROVIDE THE RESPONSE REQUESTED FOR THE MESSAGE - **** DO NOT ADD ANYTHING ELSE ****</IMPORTANT>`,
|
|
70
89
|
},
|
|
71
90
|
{
|
|
@@ -76,7 +95,9 @@ let AIPromptExtension = class AIPromptExtension extends TemplateExtensionBase_1.
|
|
|
76
95
|
model: model.APINameOrName
|
|
77
96
|
});
|
|
78
97
|
if (llmResult && llmResult.success) {
|
|
79
|
-
|
|
98
|
+
let response = llmResult.data.choices[0].message.content;
|
|
99
|
+
response = response.replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&");
|
|
100
|
+
callBack(null, response);
|
|
80
101
|
}
|
|
81
102
|
}
|
|
82
103
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIPrompt.extension.js","sourceRoot":"","sources":["../../src/extensions/AIPrompt.extension.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA0D;AAC1D,mDAAiE;AACjE,mEAAkF;AAClF,uDAAoD;AACpD,2CAA0D;AAQ1D;;GAEG;AAEI,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,6CAAqB;
|
|
1
|
+
{"version":3,"file":"AIPrompt.extension.js","sourceRoot":"","sources":["../../src/extensions/AIPrompt.extension.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/templates",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.1",
|
|
4
4
|
"description": "MemberJunction Templating Engine and Utilities - Used for any application that requires templating utility functionality. NOTE: this package does use Angular Universal for compilation but is not marked with the usual ng prefix because it is a server-side library and not used within Angular apps.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
"typescript": "^5.4.5"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@memberjunction/core": "2.13.
|
|
22
|
-
"@memberjunction/templates-base-types": "2.13.
|
|
23
|
-
"@memberjunction/ai": "2.13.
|
|
24
|
-
"@memberjunction/aiengine": "2.13.
|
|
25
|
-
"@memberjunction/ai-groq": "2.13.
|
|
26
|
-
"@memberjunction/core-entities": "2.13.
|
|
27
|
-
"@memberjunction/global": "2.13.
|
|
21
|
+
"@memberjunction/core": "2.13.1",
|
|
22
|
+
"@memberjunction/templates-base-types": "2.13.1",
|
|
23
|
+
"@memberjunction/ai": "2.13.1",
|
|
24
|
+
"@memberjunction/aiengine": "2.13.1",
|
|
25
|
+
"@memberjunction/ai-groq": "2.13.1",
|
|
26
|
+
"@memberjunction/core-entities": "2.13.1",
|
|
27
|
+
"@memberjunction/global": "2.13.1",
|
|
28
28
|
"nunjucks": "3.2.4"
|
|
29
29
|
}
|
|
30
30
|
}
|