@memberjunction/core-entities-server 2.112.0 → 2.113.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/README.md +4 -4
- package/dist/custom/AIAgentExampleEntity.server.d.ts +18 -0
- package/dist/custom/AIAgentExampleEntity.server.d.ts.map +1 -0
- package/dist/custom/AIAgentExampleEntity.server.js +61 -0
- package/dist/custom/AIAgentExampleEntity.server.js.map +1 -0
- package/dist/custom/AIAgentNoteEntity.server.d.ts +18 -0
- package/dist/custom/AIAgentNoteEntity.server.d.ts.map +1 -0
- package/dist/custom/AIAgentNoteEntity.server.js +62 -0
- package/dist/custom/AIAgentNoteEntity.server.js.map +1 -0
- package/dist/custom/AIPromptEntityExtended.server.d.ts +2 -2
- package/dist/custom/AIPromptEntityExtended.server.d.ts.map +1 -1
- package/dist/custom/AIPromptEntityExtended.server.js +32 -31
- package/dist/custom/AIPromptEntityExtended.server.js.map +1 -1
- package/dist/custom/AIPromptRunEntity.server.d.ts +2 -2
- package/dist/custom/AIPromptRunEntity.server.d.ts.map +1 -1
- package/dist/custom/AIPromptRunEntity.server.js +15 -14
- package/dist/custom/AIPromptRunEntity.server.js.map +1 -1
- package/dist/custom/ActionEntity.server.d.ts +2 -2
- package/dist/custom/ActionEntity.server.d.ts.map +1 -1
- package/dist/custom/ActionEntity.server.js +46 -45
- package/dist/custom/ActionEntity.server.js.map +1 -1
- package/dist/custom/ArtifactVersionExtended.server.d.ts +2 -2
- package/dist/custom/ArtifactVersionExtended.server.d.ts.map +1 -1
- package/dist/custom/ArtifactVersionExtended.server.js +15 -16
- package/dist/custom/ArtifactVersionExtended.server.js.map +1 -1
- package/dist/custom/ComponentEntity.server.d.ts +2 -2
- package/dist/custom/ComponentEntity.server.d.ts.map +1 -1
- package/dist/custom/ComponentEntity.server.js +9 -9
- package/dist/custom/ComponentEntity.server.js.map +1 -1
- package/dist/custom/DuplicateRunEntity.server.d.ts +1 -1
- package/dist/custom/DuplicateRunEntity.server.d.ts.map +1 -1
- package/dist/custom/DuplicateRunEntity.server.js +3 -3
- package/dist/custom/DuplicateRunEntity.server.js.map +1 -1
- package/dist/custom/QueryEntity.server.d.ts +2 -2
- package/dist/custom/QueryEntity.server.d.ts.map +1 -1
- package/dist/custom/QueryEntity.server.js +72 -65
- package/dist/custom/QueryEntity.server.js.map +1 -1
- package/dist/custom/TemplateContentEntity.server.d.ts +2 -2
- package/dist/custom/TemplateContentEntity.server.d.ts.map +1 -1
- package/dist/custom/TemplateContentEntity.server.js +23 -20
- package/dist/custom/TemplateContentEntity.server.js.map +1 -1
- package/dist/custom/reportEntity.server.d.ts +1 -1
- package/dist/custom/reportEntity.server.d.ts.map +1 -1
- package/dist/custom/reportEntity.server.js +6 -6
- package/dist/custom/reportEntity.server.js.map +1 -1
- package/dist/custom/userViewEntity.server.d.ts +1 -1
- package/dist/custom/userViewEntity.server.d.ts.map +1 -1
- package/dist/custom/userViewEntity.server.js +34 -36
- package/dist/custom/userViewEntity.server.js.map +1 -1
- package/dist/custom/util.d.ts +1 -1
- package/dist/custom/util.d.ts.map +1 -1
- package/dist/custom/util.js +1 -1
- package/dist/custom/util.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/package.json +11 -10
package/README.md
CHANGED
|
@@ -44,7 +44,7 @@ LoadCoreEntitiesServerSubClasses();
|
|
|
44
44
|
The package includes an extended AI Prompt entity that automatically manages Template and Template Contents records:
|
|
45
45
|
|
|
46
46
|
```typescript
|
|
47
|
-
import { Metadata } from '@memberjunction/
|
|
47
|
+
import { Metadata } from '@memberjunction/core';
|
|
48
48
|
|
|
49
49
|
// The metadata system will automatically use the server-side subclass
|
|
50
50
|
const md = new Metadata();
|
|
@@ -126,7 +126,7 @@ export class AIPromptEntityExtendedServer extends AIPromptEntity {
|
|
|
126
126
|
Example:
|
|
127
127
|
|
|
128
128
|
```typescript
|
|
129
|
-
import { BaseEntity, RegisterClass } from '@memberjunction/
|
|
129
|
+
import { BaseEntity, RegisterClass } from '@memberjunction/core';
|
|
130
130
|
import { UserEntity } from '@memberjunction/core-entities';
|
|
131
131
|
|
|
132
132
|
@RegisterClass(BaseEntity, 'Users')
|
|
@@ -177,7 +177,7 @@ A shared utility function that simplifies embedding generation for any server-si
|
|
|
177
177
|
|
|
178
178
|
```typescript
|
|
179
179
|
import { EmbedTextLocalHelper } from '@memberjunction/core-entities-server';
|
|
180
|
-
import { BaseEntity, SimpleEmbeddingResult } from '@memberjunction/
|
|
180
|
+
import { BaseEntity, SimpleEmbeddingResult } from '@memberjunction/core';
|
|
181
181
|
|
|
182
182
|
@RegisterClass(BaseEntity, 'MyEntity')
|
|
183
183
|
export class MyEntityServer extends MyEntity {
|
|
@@ -295,4 +295,4 @@ When contributing new server-side entities:
|
|
|
295
295
|
|
|
296
296
|
## License
|
|
297
297
|
|
|
298
|
-
This package is part of the MemberJunction open-source project.
|
|
298
|
+
This package is part of the MemberJunction open-source project.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { EntitySaveOptions, SimpleEmbeddingResult } from "@memberjunction/core";
|
|
2
|
+
import { AIAgentExampleEntity } from "@memberjunction/core-entities";
|
|
3
|
+
/**
|
|
4
|
+
* Server-side extension of AIAgentExampleEntity that auto-generates embeddings
|
|
5
|
+
* when the ExampleInput field changes, following the QueryEntity pattern.
|
|
6
|
+
*/
|
|
7
|
+
export declare class AIAgentExampleEntityExtended extends AIAgentExampleEntity {
|
|
8
|
+
/**
|
|
9
|
+
* Override EmbedTextLocal to use helper
|
|
10
|
+
*/
|
|
11
|
+
protected EmbedTextLocal(textToEmbed: string): Promise<SimpleEmbeddingResult>;
|
|
12
|
+
Save(options?: EntitySaveOptions): Promise<boolean>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Required export for MJ class factory registration
|
|
16
|
+
*/
|
|
17
|
+
export declare function LoadAIAgentExampleEntityServerSubClass(): void;
|
|
18
|
+
//# sourceMappingURL=AIAgentExampleEntity.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIAgentExampleEntity.server.d.ts","sourceRoot":"","sources":["../../src/custom/AIAgentExampleEntity.server.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,iBAAiB,EAAY,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGrE;;;GAGG;AACH,qBACa,4BAA6B,SAAQ,oBAAoB;IAClE;;OAEG;cACsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAI7E,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;CAwBrE;AAED;;GAEG;AACH,wBAAgB,sCAAsC,SAErD"}
|
|
@@ -0,0 +1,61 @@
|
|
|
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.LoadAIAgentExampleEntityServerSubClass = exports.AIAgentExampleEntityExtended = 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 util_1 = require("./util");
|
|
14
|
+
/**
|
|
15
|
+
* Server-side extension of AIAgentExampleEntity that auto-generates embeddings
|
|
16
|
+
* when the ExampleInput field changes, following the QueryEntity pattern.
|
|
17
|
+
*/
|
|
18
|
+
let AIAgentExampleEntityExtended = class AIAgentExampleEntityExtended extends core_entities_1.AIAgentExampleEntity {
|
|
19
|
+
/**
|
|
20
|
+
* Override EmbedTextLocal to use helper
|
|
21
|
+
*/
|
|
22
|
+
async EmbedTextLocal(textToEmbed) {
|
|
23
|
+
return (0, util_1.EmbedTextLocalHelper)(this, textToEmbed);
|
|
24
|
+
}
|
|
25
|
+
async Save(options) {
|
|
26
|
+
try {
|
|
27
|
+
// Check if ExampleInput field has changed
|
|
28
|
+
const inputField = this.GetFieldByName('ExampleInput');
|
|
29
|
+
const shouldGenerateEmbedding = !this.IsSaved || inputField.Dirty;
|
|
30
|
+
// Generate embedding for ExampleInput field if needed
|
|
31
|
+
if (shouldGenerateEmbedding && this.ExampleInput && this.ExampleInput.trim().length > 0) {
|
|
32
|
+
await this.GenerateEmbeddingByFieldName("ExampleInput", "EmbeddingVector", "EmbeddingModelID");
|
|
33
|
+
}
|
|
34
|
+
else if (!this.ExampleInput || this.ExampleInput.trim().length === 0) {
|
|
35
|
+
// Clear embedding if input is empty
|
|
36
|
+
this.EmbeddingVector = null;
|
|
37
|
+
this.EmbeddingModelID = null;
|
|
38
|
+
}
|
|
39
|
+
return await super.Save(options);
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
(0, core_1.LogError)('Failed to save AI Agent Example:', e);
|
|
43
|
+
if (this.LatestResult) {
|
|
44
|
+
this.LatestResult.Errors.push(e);
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
exports.AIAgentExampleEntityExtended = AIAgentExampleEntityExtended;
|
|
51
|
+
exports.AIAgentExampleEntityExtended = AIAgentExampleEntityExtended = __decorate([
|
|
52
|
+
(0, global_1.RegisterClass)(core_1.BaseEntity, 'AI Agent Examples')
|
|
53
|
+
], AIAgentExampleEntityExtended);
|
|
54
|
+
/**
|
|
55
|
+
* Required export for MJ class factory registration
|
|
56
|
+
*/
|
|
57
|
+
function LoadAIAgentExampleEntityServerSubClass() {
|
|
58
|
+
// Registration happens via @RegisterClass decorator
|
|
59
|
+
}
|
|
60
|
+
exports.LoadAIAgentExampleEntityServerSubClass = LoadAIAgentExampleEntityServerSubClass;
|
|
61
|
+
//# sourceMappingURL=AIAgentExampleEntity.server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIAgentExampleEntity.server.js","sourceRoot":"","sources":["../../src/custom/AIAgentExampleEntity.server.ts"],"names":[],"mappings":";;;;;;;;;AAAA,mDAAuD;AACvD,+CAAsG;AACtG,iEAAqE;AACrE,iCAA8C;AAE9C;;;GAGG;AAEI,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,oCAAoB;IAClE;;OAEG;IACgB,KAAK,CAAC,cAAc,CAAC,WAAmB;QACvD,OAAO,IAAA,2BAAoB,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC;IAEQ,KAAK,CAAC,IAAI,CAAC,OAA2B;QAC3C,IAAI,CAAC;YACD,0CAA0C;YAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YACvD,MAAM,uBAAuB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC;YAElE,sDAAsD;YACtD,IAAI,uBAAuB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtF,MAAM,IAAI,CAAC,4BAA4B,CAAC,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;YACnG,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrE,oCAAoC;gBACpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YACjC,CAAC;YAED,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAA,eAAQ,EAAC,kCAAkC,EAAE,CAAC,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ,CAAA;AAhCY,oEAA4B;uCAA5B,4BAA4B;IADxC,IAAA,sBAAa,EAAC,iBAAU,EAAE,mBAAmB,CAAC;GAClC,4BAA4B,CAgCxC;AAED;;GAEG;AACH,SAAgB,sCAAsC;IAClD,oDAAoD;AACxD,CAAC;AAFD,wFAEC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { EntitySaveOptions, SimpleEmbeddingResult } from "@memberjunction/core";
|
|
2
|
+
import { AIAgentNoteEntity } from "@memberjunction/core-entities";
|
|
3
|
+
/**
|
|
4
|
+
* Server-side extension of AIAgentNoteEntity that auto-generates embeddings
|
|
5
|
+
* when the Note field changes, following the QueryEntity pattern.
|
|
6
|
+
*/
|
|
7
|
+
export declare class AIAgentNoteEntityExtended extends AIAgentNoteEntity {
|
|
8
|
+
/**
|
|
9
|
+
* Override EmbedTextLocal to use helper
|
|
10
|
+
*/
|
|
11
|
+
protected EmbedTextLocal(textToEmbed: string): Promise<SimpleEmbeddingResult>;
|
|
12
|
+
Save(options?: EntitySaveOptions): Promise<boolean>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Required export for MJ class factory registration
|
|
16
|
+
*/
|
|
17
|
+
export declare function LoadAIAgentNoteEntityServerSubClass(): void;
|
|
18
|
+
//# sourceMappingURL=AIAgentNoteEntity.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIAgentNoteEntity.server.d.ts","sourceRoot":"","sources":["../../src/custom/AIAgentNoteEntity.server.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,iBAAiB,EAAY,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE;;;GAGG;AACH,qBACa,yBAA0B,SAAQ,iBAAiB;IAC5D;;OAEG;cACsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAI7E,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;CAyBrE;AAED;;GAEG;AACH,wBAAgB,mCAAmC,SAElD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
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.LoadAIAgentNoteEntityServerSubClass = exports.AIAgentNoteEntityExtended = 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 util_1 = require("./util");
|
|
14
|
+
/**
|
|
15
|
+
* Server-side extension of AIAgentNoteEntity that auto-generates embeddings
|
|
16
|
+
* when the Note field changes, following the QueryEntity pattern.
|
|
17
|
+
*/
|
|
18
|
+
let AIAgentNoteEntityExtended = class AIAgentNoteEntityExtended extends core_entities_1.AIAgentNoteEntity {
|
|
19
|
+
/**
|
|
20
|
+
* Override EmbedTextLocal to use helper
|
|
21
|
+
*/
|
|
22
|
+
async EmbedTextLocal(textToEmbed) {
|
|
23
|
+
return (0, util_1.EmbedTextLocalHelper)(this, textToEmbed);
|
|
24
|
+
}
|
|
25
|
+
async Save(options) {
|
|
26
|
+
try {
|
|
27
|
+
// Check if Note field has changed
|
|
28
|
+
const noteField = this.GetFieldByName('Note');
|
|
29
|
+
const shouldGenerateEmbedding = !this.IsSaved || noteField.Dirty;
|
|
30
|
+
// Generate embedding for Note field if needed
|
|
31
|
+
if (shouldGenerateEmbedding && this.Note && this.Note.trim().length > 0) {
|
|
32
|
+
await this.GenerateEmbeddingByFieldName("Note", "EmbeddingVector", "EmbeddingModelID");
|
|
33
|
+
}
|
|
34
|
+
else if (!this.Note || this.Note.trim().length === 0) {
|
|
35
|
+
// Clear embedding if note is empty
|
|
36
|
+
this.EmbeddingVector = null;
|
|
37
|
+
this.EmbeddingModelID = null;
|
|
38
|
+
}
|
|
39
|
+
// Save using parent
|
|
40
|
+
return await super.Save(options);
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
(0, core_1.LogError)('Failed to save AI Agent Note:', e);
|
|
44
|
+
if (this.LatestResult) {
|
|
45
|
+
this.LatestResult.Errors.push(e);
|
|
46
|
+
}
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
exports.AIAgentNoteEntityExtended = AIAgentNoteEntityExtended;
|
|
52
|
+
exports.AIAgentNoteEntityExtended = AIAgentNoteEntityExtended = __decorate([
|
|
53
|
+
(0, global_1.RegisterClass)(core_1.BaseEntity, 'AI Agent Notes')
|
|
54
|
+
], AIAgentNoteEntityExtended);
|
|
55
|
+
/**
|
|
56
|
+
* Required export for MJ class factory registration
|
|
57
|
+
*/
|
|
58
|
+
function LoadAIAgentNoteEntityServerSubClass() {
|
|
59
|
+
// Registration happens via @RegisterClass decorator
|
|
60
|
+
}
|
|
61
|
+
exports.LoadAIAgentNoteEntityServerSubClass = LoadAIAgentNoteEntityServerSubClass;
|
|
62
|
+
//# sourceMappingURL=AIAgentNoteEntity.server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIAgentNoteEntity.server.js","sourceRoot":"","sources":["../../src/custom/AIAgentNoteEntity.server.ts"],"names":[],"mappings":";;;;;;;;;AAAA,mDAAuD;AACvD,+CAAsG;AACtG,iEAAkE;AAClE,iCAA8C;AAE9C;;;GAGG;AAEI,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,iCAAiB;IAC5D;;OAEG;IACgB,KAAK,CAAC,cAAc,CAAC,WAAmB;QACvD,OAAO,IAAA,2BAAoB,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC;IAEQ,KAAK,CAAC,IAAI,CAAC,OAA2B;QAC3C,IAAI,CAAC;YACD,kCAAkC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,uBAAuB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC;YAEjE,8CAA8C;YAC9C,IAAI,uBAAuB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtE,MAAM,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;YAC3F,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrD,mCAAmC;gBACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YACjC,CAAC;YAED,oBAAoB;YACpB,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAA,eAAQ,EAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ,CAAA;AAjCY,8DAAyB;oCAAzB,yBAAyB;IADrC,IAAA,sBAAa,EAAC,iBAAU,EAAE,gBAAgB,CAAC;GAC/B,yBAAyB,CAiCrC;AAED;;GAEG;AACH,SAAgB,mCAAmC;IAC/C,oDAAoD;AACxD,CAAC;AAFD,kFAEC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { EntitySaveOptions, IMetadataProvider, TransactionGroupBase } from
|
|
2
|
-
import { TemplateEntity, AIPromptEntityExtended } from
|
|
1
|
+
import { EntitySaveOptions, IMetadataProvider, TransactionGroupBase } from "@memberjunction/core";
|
|
2
|
+
import { TemplateEntity, AIPromptEntityExtended } from "@memberjunction/core-entities";
|
|
3
3
|
/**
|
|
4
4
|
* Server specific sub-class that handles the automatic creation and updating of
|
|
5
5
|
* Templates and Template Contents entity records linked to the AI Prompt.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIPromptEntityExtended.server.d.ts","sourceRoot":"","sources":["../../src/custom/AIPromptEntityExtended.server.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AIPromptEntityExtended.server.d.ts","sourceRoot":"","sources":["../../src/custom/AIPromptEntityExtended.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,iBAAiB,EAAE,iBAAiB,EAAmD,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE/L,OAAO,EAA4E,cAAc,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEjK;;;;;;GAMG;AACH,qBACa,4BAA6B,SAAQ,sBAAsB;IACpE,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAuB;IAC5D;;;;OAIG;IACH,WAAkB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAEvD;IACD,WAAkB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAE3D;IAED,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAuB;IAC7D;;;;;;;;;;OAUG;IACH,WAAkB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAExD;IACD,WAAkB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAE5D;IAED;;;;;;;;;OASG;cACa,iCAAiC,IAAI,OAAO,CAAC,MAAM,CAAC;IA0BpE;;;;;;OAMG;cACa,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBzE;;;;;;OAMG;IACY,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IA8ClE;;;;;;OAMG;cACa,4BAA4B,CAAC,EAAE,EAAE,iBAAiB,EAAE,EAAE,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAoDhH;;;;;OAKG;cACa,uCAAuC,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IA2C9G;;;OAGG;cACa,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;CAoB9D;AAGD,wBAAgB,wCAAwC,SAAK"}
|
|
@@ -8,8 +8,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var AIPromptEntityExtendedServer_1;
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.LoadAIPromptEntityExtendedServerSubClass = exports.AIPromptEntityExtendedServer = void 0;
|
|
11
|
+
const core_1 = require("@memberjunction/core");
|
|
11
12
|
const global_1 = require("@memberjunction/global");
|
|
12
|
-
const global_2 = require("@memberjunction/global");
|
|
13
13
|
const core_entities_1 = require("@memberjunction/core-entities");
|
|
14
14
|
/**
|
|
15
15
|
* Server specific sub-class that handles the automatic creation and updating of
|
|
@@ -63,12 +63,13 @@ let AIPromptEntityExtendedServer = AIPromptEntityExtendedServer_1 = class AIProm
|
|
|
63
63
|
}
|
|
64
64
|
// look for an existing root level category with the name "AI Prompts"
|
|
65
65
|
const e = this.EntityInfo;
|
|
66
|
-
const catName = e.Settings.find(
|
|
66
|
+
const catName = e.Settings.find(s => s.Name.trim().toLowerCase() ===
|
|
67
|
+
"Root Template Category Name")?.Value || "AI Prompts";
|
|
67
68
|
const rv = this.RunViewProviderToUse;
|
|
68
69
|
const result = await rv.RunView({
|
|
69
|
-
EntityName:
|
|
70
|
+
EntityName: "Template Categories",
|
|
70
71
|
ExtraFilter: `Name='${catName}' AND ParentID IS NULL`,
|
|
71
|
-
OrderBy:
|
|
72
|
+
OrderBy: "__mj_CreatedAt ASC" // first one
|
|
72
73
|
}, this.ContextCurrentUser);
|
|
73
74
|
if (result && result.Success && result.Results.length > 0) {
|
|
74
75
|
// we found an existing root category, cache it and return it
|
|
@@ -89,10 +90,10 @@ let AIPromptEntityExtendedServer = AIPromptEntityExtendedServer_1 = class AIProm
|
|
|
89
90
|
*/
|
|
90
91
|
async createRootTemplateCategory(name) {
|
|
91
92
|
const md = this.ProviderToUse;
|
|
92
|
-
const rootCategory = await md.GetEntityObject(
|
|
93
|
+
const rootCategory = await md.GetEntityObject("Template Categories", this.ContextCurrentUser);
|
|
93
94
|
rootCategory.NewRecord();
|
|
94
95
|
rootCategory.Name = name;
|
|
95
|
-
rootCategory.Description =
|
|
96
|
+
rootCategory.Description = "Root category for AI Prompts (Auto-Created by AI Prompts Entity)";
|
|
96
97
|
rootCategory.UserID = this.ContextCurrentUser.ID;
|
|
97
98
|
// save the category
|
|
98
99
|
if (rootCategory.Save()) {
|
|
@@ -123,20 +124,20 @@ let AIPromptEntityExtendedServer = AIPromptEntityExtendedServer_1 = class AIProm
|
|
|
123
124
|
else {
|
|
124
125
|
success = false; // if we failed to create the linked Template, we should not save the AI Prompt
|
|
125
126
|
// we need to push an error to the Results of the BaseEntity
|
|
126
|
-
const result = new
|
|
127
|
+
const result = new core_1.BaseEntityResult();
|
|
127
128
|
result.Success = false;
|
|
128
|
-
result.Message =
|
|
129
|
+
result.Message = "Failed to create linked Template for the AI Prompt. Please check the logs for more details.";
|
|
129
130
|
this.ResultHistory.push(result);
|
|
130
131
|
}
|
|
131
132
|
}
|
|
132
133
|
else if (this.TemplateID && this.TemplateText?.trim().length > 0 && this.TemplateTextDirty) {
|
|
133
134
|
// we have a linked Template, so update the Template Contents associated with it
|
|
134
|
-
if (!
|
|
135
|
+
if (!await this.UpdateLinkedTemplateContents(md)) {
|
|
135
136
|
success = false; // if we failed to update the linked Template Contents, we should not save the AI Prompt
|
|
136
137
|
// we need to push an error to the Results of the BaseEntity
|
|
137
|
-
const result = new
|
|
138
|
+
const result = new core_1.BaseEntityResult();
|
|
138
139
|
result.Success = false;
|
|
139
|
-
result.Message =
|
|
140
|
+
result.Message = "Failed to update linked Template Contents for the AI Prompt. Please check the logs for more details.";
|
|
140
141
|
this.ResultHistory.push(result);
|
|
141
142
|
}
|
|
142
143
|
}
|
|
@@ -164,17 +165,17 @@ let AIPromptEntityExtendedServer = AIPromptEntityExtendedServer_1 = class AIProm
|
|
|
164
165
|
*/
|
|
165
166
|
async UpdateLinkedTemplateContents(md, tg) {
|
|
166
167
|
try {
|
|
167
|
-
// we have a linked Template, so update the Template Contents associated with it
|
|
168
|
+
// we have a linked Template, so update the Template Contents associated with it
|
|
168
169
|
if (!this.TemplateID) {
|
|
169
|
-
throw new Error(
|
|
170
|
+
throw new Error("Cannot update linked Template Contents because TemplateID is null.");
|
|
170
171
|
}
|
|
171
172
|
const rv = this.RunViewProviderToUse;
|
|
172
173
|
const result = await rv.RunView({
|
|
173
|
-
EntityName:
|
|
174
|
+
EntityName: "Template Contents",
|
|
174
175
|
ExtraFilter: `TemplateID='${this.TemplateID}'`,
|
|
175
|
-
OrderBy:
|
|
176
|
+
OrderBy: "__mj_CreatedAt ASC", // first one
|
|
176
177
|
ResultType: 'entity_object',
|
|
177
|
-
MaxRows: 1
|
|
178
|
+
MaxRows: 1 // should only be one row
|
|
178
179
|
}, this.ContextCurrentUser);
|
|
179
180
|
let tc = undefined;
|
|
180
181
|
if (result && result.Success && result.Results.length > 0) {
|
|
@@ -182,7 +183,7 @@ let AIPromptEntityExtendedServer = AIPromptEntityExtendedServer_1 = class AIProm
|
|
|
182
183
|
tc = result.Results[0];
|
|
183
184
|
}
|
|
184
185
|
else {
|
|
185
|
-
tc = await md.GetEntityObject(
|
|
186
|
+
tc = await md.GetEntityObject("Template Contents", this.ContextCurrentUser);
|
|
186
187
|
tc.NewRecord();
|
|
187
188
|
tc.TemplateID = this.TemplateID; // link to the existing Template
|
|
188
189
|
tc.TypeID = await this.getTemplateContentTypeID(); // use the Template Content Type ID for AI Prompts
|
|
@@ -201,11 +202,11 @@ let AIPromptEntityExtendedServer = AIPromptEntityExtendedServer_1 = class AIProm
|
|
|
201
202
|
}
|
|
202
203
|
else {
|
|
203
204
|
// if we failed to save, throw an error
|
|
204
|
-
throw new Error(
|
|
205
|
+
throw new Error("Failed to update linked Template Contents for the AI Prompt: " + tc.LatestResult.Message);
|
|
205
206
|
}
|
|
206
207
|
}
|
|
207
208
|
catch (e) {
|
|
208
|
-
(0,
|
|
209
|
+
(0, core_1.LogErrorEx)({
|
|
209
210
|
message: e.message,
|
|
210
211
|
includeStack: true,
|
|
211
212
|
additionalArgs: e,
|
|
@@ -222,19 +223,19 @@ let AIPromptEntityExtendedServer = AIPromptEntityExtendedServer_1 = class AIProm
|
|
|
222
223
|
async CreateLinkedTemplateAndTemplateContents(md) {
|
|
223
224
|
try {
|
|
224
225
|
// we have no linked template, but we have template text, so create a new template and template contents
|
|
225
|
-
const t = await md.GetEntityObject(
|
|
226
|
+
const t = await md.GetEntityObject("Templates", this.ContextCurrentUser);
|
|
226
227
|
t.NewRecord();
|
|
227
|
-
t.ID = (0,
|
|
228
|
+
t.ID = (0, global_1.uuidv4)(); // generate a new ID - we want to do this explicitly so that we can control the ID that goes into the SQL script so this can be part of a migration file
|
|
228
229
|
t.Name = this.Name; // propagate the name
|
|
229
|
-
t.Description =
|
|
230
|
+
t.Description = "Template for AI Prompt: " + this.Name;
|
|
230
231
|
t.UserID = this.ContextCurrentUser.ID;
|
|
231
232
|
t.CategoryID = await this.getOrCreateRootTemplateCategoryID();
|
|
232
233
|
t.IsActive = true;
|
|
233
234
|
if (await t.Save()) {
|
|
234
235
|
// now create the template contents
|
|
235
|
-
const tc = await md.GetEntityObject(
|
|
236
|
+
const tc = await md.GetEntityObject("Template Contents", this.ContextCurrentUser);
|
|
236
237
|
tc.NewRecord();
|
|
237
|
-
tc.ID = (0,
|
|
238
|
+
tc.ID = (0, global_1.uuidv4)(); // generate a new ID for the Template Content - do here as well for same reason as above with Template.ID
|
|
238
239
|
tc.TemplateID = t.ID;
|
|
239
240
|
tc.TypeID = await this.getTemplateContentTypeID();
|
|
240
241
|
tc.TemplateText = this.TemplateText;
|
|
@@ -244,16 +245,16 @@ let AIPromptEntityExtendedServer = AIPromptEntityExtendedServer_1 = class AIProm
|
|
|
244
245
|
return t;
|
|
245
246
|
}
|
|
246
247
|
else {
|
|
247
|
-
throw new Error(
|
|
248
|
+
throw new Error("Failed to save Template Contents for the new Template.");
|
|
248
249
|
}
|
|
249
250
|
}
|
|
250
251
|
else {
|
|
251
|
-
throw new Error(
|
|
252
|
+
throw new Error("Failed to save new Template for the AI Prompt.");
|
|
252
253
|
}
|
|
253
254
|
}
|
|
254
255
|
catch (e) {
|
|
255
256
|
// log the error and return null
|
|
256
|
-
(0,
|
|
257
|
+
(0, core_1.LogErrorEx)({
|
|
257
258
|
message: e.message,
|
|
258
259
|
includeStack: true,
|
|
259
260
|
additionalArgs: e,
|
|
@@ -272,9 +273,9 @@ let AIPromptEntityExtendedServer = AIPromptEntityExtendedServer_1 = class AIProm
|
|
|
272
273
|
// we will use the TemplateEntityType for AI Prompts
|
|
273
274
|
const rv = this.ProviderToUse;
|
|
274
275
|
const result = await rv.RunView({
|
|
275
|
-
EntityName:
|
|
276
|
+
EntityName: "Template Content Types",
|
|
276
277
|
ExtraFilter: "Name='Text'",
|
|
277
|
-
OrderBy:
|
|
278
|
+
OrderBy: "__mj_CreatedAt ASC" // first one
|
|
278
279
|
}, this.ContextCurrentUser);
|
|
279
280
|
if (result && result.Success && result.Results.length > 0) {
|
|
280
281
|
// we found a Template Content Type, return its ID but cache it first
|
|
@@ -282,7 +283,7 @@ let AIPromptEntityExtendedServer = AIPromptEntityExtendedServer_1 = class AIProm
|
|
|
282
283
|
return result.Results[0].ID;
|
|
283
284
|
}
|
|
284
285
|
else {
|
|
285
|
-
throw new Error(
|
|
286
|
+
throw new Error("Failed to find Template Content Type ID (Text) for AI Prompts.");
|
|
286
287
|
}
|
|
287
288
|
}
|
|
288
289
|
};
|
|
@@ -290,7 +291,7 @@ exports.AIPromptEntityExtendedServer = AIPromptEntityExtendedServer;
|
|
|
290
291
|
AIPromptEntityExtendedServer._templateContentTypeID = null;
|
|
291
292
|
AIPromptEntityExtendedServer._rootTemplateCategoryID = null;
|
|
292
293
|
exports.AIPromptEntityExtendedServer = AIPromptEntityExtendedServer = AIPromptEntityExtendedServer_1 = __decorate([
|
|
293
|
-
(0,
|
|
294
|
+
(0, global_1.RegisterClass)(core_1.BaseEntity, "AI Prompts")
|
|
294
295
|
], AIPromptEntityExtendedServer);
|
|
295
296
|
function LoadAIPromptEntityExtendedServerSubClass() { }
|
|
296
297
|
exports.LoadAIPromptEntityExtendedServerSubClass = LoadAIPromptEntityExtendedServerSubClass;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIPromptEntityExtended.server.js","sourceRoot":"","sources":["../../src/custom/AIPromptEntityExtended.server.ts"],"names":[],"mappings":";;;;;;;;;;AAAA
|
|
1
|
+
{"version":3,"file":"AIPromptEntityExtended.server.js","sourceRoot":"","sources":["../../src/custom/AIPromptEntityExtended.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { EntitySaveOptions } from
|
|
2
|
-
import { AIPromptRunEntityExtended } from
|
|
1
|
+
import { EntitySaveOptions } from "@memberjunction/core";
|
|
2
|
+
import { AIPromptRunEntityExtended } from "@memberjunction/core-entities";
|
|
3
3
|
/**
|
|
4
4
|
* Server-side subclass for AIPromptRunEntity that automatically calculates costs
|
|
5
5
|
* when a prompt run is completed or errors out. The cost calculation is based on
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIPromptRunEntity.server.d.ts","sourceRoot":"","sources":["../../src/custom/AIPromptRunEntity.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,iBAAiB,EAAkD,MAAM,
|
|
1
|
+
{"version":3,"file":"AIPromptRunEntity.server.d.ts","sourceRoot":"","sources":["../../src/custom/AIPromptRunEntity.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,iBAAiB,EAAkD,MAAM,sBAAsB,CAAC;AAErH,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAG1E;;;;;;GAMG;AACH,qBACa,uBAAwB,SAAQ,yBAAyB;IAElE;;OAEG;IACY,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IA6BlE;;;OAGG;IACH,SAAS,CAAC,mBAAmB,IAAI,OAAO;IAkCxC;;OAEG;cACa,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6DpD;;OAEG;cACa,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBxD;;;;OAIG;IACU,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BlD;;;;OAIG;IACH,IAAW,cAAc,CAAC,KAAK,EAAE,MAAM,EAGtC;IAED,IAAW,cAAc,IAAI,MAAM,CAElC;IAED;;;;OAIG;IACH,IAAW,IAAI,CAAC,KAAK,EAAE,MAAM,EAG5B;IAED,IAAW,IAAI,IAAI,MAAM,CAExB;IACD;;;;;OAKG;IACH,SAAS,CAAC,eAAe,IAAI,IAAI;CAKpC;AAED;;GAEG;AACH,wBAAgB,mCAAmC,SAAK"}
|
|
@@ -7,8 +7,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.LoadAIPromptRunEntityServerSubClass = exports.AIPromptRunEntityServer = void 0;
|
|
10
|
+
const core_1 = require("@memberjunction/core");
|
|
10
11
|
const global_1 = require("@memberjunction/global");
|
|
11
|
-
const global_2 = require("@memberjunction/global");
|
|
12
12
|
const core_entities_1 = require("@memberjunction/core-entities");
|
|
13
13
|
const ai_engine_base_1 = require("@memberjunction/ai-engine-base");
|
|
14
14
|
/**
|
|
@@ -41,7 +41,7 @@ let AIPromptRunEntityServer = class AIPromptRunEntityServer extends core_entitie
|
|
|
41
41
|
return result;
|
|
42
42
|
}
|
|
43
43
|
catch (err) {
|
|
44
|
-
(0,
|
|
44
|
+
(0, core_1.LogError)(`Error in AIPromptRunEntityServer.Save: ${err}`);
|
|
45
45
|
throw err;
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -56,7 +56,7 @@ let AIPromptRunEntityServer = class AIPromptRunEntityServer extends core_entitie
|
|
|
56
56
|
}
|
|
57
57
|
// Check if CompletedAt was just set (either new record or just changed)
|
|
58
58
|
// For existing records, check if any fields have changed
|
|
59
|
-
const f = this.Fields.find(
|
|
59
|
+
const f = this.Fields.find(f => f.Name === 'CompletedAt');
|
|
60
60
|
const completedAtChanged = !this.IsSaved || f.Dirty;
|
|
61
61
|
if (!completedAtChanged) {
|
|
62
62
|
return false;
|
|
@@ -66,7 +66,8 @@ let AIPromptRunEntityServer = class AIPromptRunEntityServer extends core_entitie
|
|
|
66
66
|
return false;
|
|
67
67
|
}
|
|
68
68
|
// Must have token usage to calculate (at least one token field > 0)
|
|
69
|
-
if (!this.TokensPrompt || !this.TokensCompletion ||
|
|
69
|
+
if (!this.TokensPrompt || !this.TokensCompletion ||
|
|
70
|
+
(this.TokensPrompt <= 0 && this.TokensCompletion <= 0)) {
|
|
70
71
|
return false;
|
|
71
72
|
}
|
|
72
73
|
// Must have model and vendor information
|
|
@@ -86,19 +87,19 @@ let AIPromptRunEntityServer = class AIPromptRunEntityServer extends core_entitie
|
|
|
86
87
|
const activeCost = ai_engine_base_1.AIEngineBase.Instance.GetActiveModelCost(this.ModelID, this.VendorID, 'Realtime' // For now, assume all prompt runs are realtime
|
|
87
88
|
);
|
|
88
89
|
if (!activeCost) {
|
|
89
|
-
(0,
|
|
90
|
+
(0, core_1.LogError)(`No active cost configuration found for Model: ${this.ModelID}, Vendor: ${this.VendorID}`);
|
|
90
91
|
return;
|
|
91
92
|
}
|
|
92
93
|
// Get the price unit type to understand the normalization
|
|
93
|
-
const priceUnitType = ai_engine_base_1.AIEngineBase.Instance.ModelPriceUnitTypes.find(
|
|
94
|
+
const priceUnitType = ai_engine_base_1.AIEngineBase.Instance.ModelPriceUnitTypes.find(put => put.ID === activeCost.UnitTypeID);
|
|
94
95
|
if (!priceUnitType) {
|
|
95
|
-
(0,
|
|
96
|
+
(0, core_1.LogError)(`Price unit type not found: ${activeCost.UnitTypeID}`);
|
|
96
97
|
return;
|
|
97
98
|
}
|
|
98
99
|
// Calculate costs using the driver class
|
|
99
|
-
const priceCalculator =
|
|
100
|
+
const priceCalculator = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(ai_engine_base_1.BasePriceUnitType, priceUnitType.DriverClass);
|
|
100
101
|
if (!priceCalculator) {
|
|
101
|
-
(0,
|
|
102
|
+
(0, core_1.LogError)(`Failed to create price calculator for driver class: ${priceUnitType.DriverClass}`);
|
|
102
103
|
return;
|
|
103
104
|
}
|
|
104
105
|
const normalizedCost = priceCalculator.CalculateNormalizedCost(activeCost, this.TokensPrompt, this.TokensCompletion);
|
|
@@ -113,7 +114,7 @@ let AIPromptRunEntityServer = class AIPromptRunEntityServer extends core_entitie
|
|
|
113
114
|
// For child nodes, TotalCost will be calculated during rollup
|
|
114
115
|
}
|
|
115
116
|
catch (err) {
|
|
116
|
-
(0,
|
|
117
|
+
(0, core_1.LogError)(`Error calculating cost for AIPromptRun ${this.ID}: ${err}`);
|
|
117
118
|
// Don't throw - we don't want to prevent saving just because cost calc failed
|
|
118
119
|
}
|
|
119
120
|
}
|
|
@@ -132,7 +133,7 @@ let AIPromptRunEntityServer = class AIPromptRunEntityServer extends core_entitie
|
|
|
132
133
|
}
|
|
133
134
|
}
|
|
134
135
|
catch (err) {
|
|
135
|
-
(0,
|
|
136
|
+
(0, core_1.LogError)(`Error triggering parent cost rollup: ${err}`);
|
|
136
137
|
}
|
|
137
138
|
}
|
|
138
139
|
/**
|
|
@@ -149,7 +150,7 @@ let AIPromptRunEntityServer = class AIPromptRunEntityServer extends core_entitie
|
|
|
149
150
|
const childRuns = await rv.RunView({
|
|
150
151
|
EntityName: 'MJ: AI Prompt Runs',
|
|
151
152
|
ExtraFilter: `ParentID = '${this.ID}'`,
|
|
152
|
-
ResultType: 'simple'
|
|
153
|
+
ResultType: 'simple'
|
|
153
154
|
}, this.ContextCurrentUser);
|
|
154
155
|
if (childRuns.Success && childRuns.Results) {
|
|
155
156
|
// Sum up all child total costs
|
|
@@ -163,7 +164,7 @@ let AIPromptRunEntityServer = class AIPromptRunEntityServer extends core_entitie
|
|
|
163
164
|
this.DescendantCost = descendantCost;
|
|
164
165
|
}
|
|
165
166
|
catch (err) {
|
|
166
|
-
(0,
|
|
167
|
+
(0, core_1.LogError)(`Error recalculating total cost for prompt run ${this.ID}: ${err}`);
|
|
167
168
|
}
|
|
168
169
|
}
|
|
169
170
|
/**
|
|
@@ -206,7 +207,7 @@ let AIPromptRunEntityServer = class AIPromptRunEntityServer extends core_entitie
|
|
|
206
207
|
};
|
|
207
208
|
exports.AIPromptRunEntityServer = AIPromptRunEntityServer;
|
|
208
209
|
exports.AIPromptRunEntityServer = AIPromptRunEntityServer = __decorate([
|
|
209
|
-
(0,
|
|
210
|
+
(0, global_1.RegisterClass)(core_1.BaseEntity, "MJ: AI Prompt Runs")
|
|
210
211
|
], AIPromptRunEntityServer);
|
|
211
212
|
/**
|
|
212
213
|
* This function is used to ensure the class is loaded and registered
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIPromptRunEntity.server.js","sourceRoot":"","sources":["../../src/custom/AIPromptRunEntity.server.ts"],"names":[],"mappings":";;;;;;;;;AAAA
|
|
1
|
+
{"version":3,"file":"AIPromptRunEntity.server.js","sourceRoot":"","sources":["../../src/custom/AIPromptRunEntity.server.ts"],"names":[],"mappings":"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"}
|