@memberjunction/ng-core-entity-forms 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 +10 -10
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.js +45 -45
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +7 -6
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/mj-integrated-flow-editor.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/mj-integrated-flow-editor.component.js +32 -17
- package/dist/lib/custom/AIAgents/FlowAgentType/mj-integrated-flow-editor.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +36 -37
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-permissions-dialog.component.d.ts +1 -1
- package/dist/lib/custom/AIAgents/agent-permissions-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-permissions-dialog.component.js +25 -18
- package/dist/lib/custom/AIAgents/agent-permissions-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +11 -10
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +147 -159
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +10 -11
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +32 -36
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +5 -5
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +13 -15
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +15 -13
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +23 -28
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +12 -15
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +86 -105
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +20 -13
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +7 -4
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +80 -99
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-test-harness.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-test-harness.component.js +17 -24
- package/dist/lib/custom/Actions/action-test-harness.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.js +8 -8
- package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +2 -2
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +44 -32
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +22 -24
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +21 -15
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +17 -29
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +26 -25
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +274 -335
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +8 -8
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +28 -24
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +30 -25
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +21 -20
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +7 -6
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.js +33 -47
- package/dist/lib/generated/Entities/AIAgent/sections/aiagent-form-overview.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/sections/details.component.js +31 -4
- package/dist/lib/generated/Entities/AIAgent/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentExample/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentExample/sections/details.component.js +33 -4
- package/dist/lib/generated/Entities/AIAgentExample/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentNote/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentNote/sections/details.component.js +33 -4
- package/dist/lib/generated/Entities/AIAgentNote/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRelationship/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRelationship/sections/details.component.js +22 -4
- package/dist/lib/generated/Entities/AIAgentRelationship/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js +6 -6
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js +8 -8
- package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js +34 -14
- package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ArtifactUse/artifactuse.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/ArtifactUse/artifactuse.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/ArtifactUse/artifactuse.form.component.js +59 -0
- package/dist/lib/generated/Entities/ArtifactUse/artifactuse.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/ArtifactUse/sections/details.component.d.ts +11 -0
- package/dist/lib/generated/Entities/ArtifactUse/sections/details.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/ArtifactUse/sections/details.component.js +129 -0
- package/dist/lib/generated/Entities/ArtifactUse/sections/details.component.js.map +1 -0
- package/dist/lib/generated/Entities/ArtifactVersion/artifactversion.form.component.js +24 -4
- package/dist/lib/generated/Entities/ArtifactVersion/artifactversion.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CollectionArtifact/sections/details.component.js +10 -10
- package/dist/lib/generated/Entities/CollectionArtifact/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationArtifact/conversationartifact.form.component.js +6 -6
- package/dist/lib/generated/Entities/ConversationArtifact/conversationartifact.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.js +18 -8
- package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.js +59 -0
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/ConversationDetailRating/sections/details.component.d.ts +11 -0
- package/dist/lib/generated/Entities/ConversationDetailRating/sections/details.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/ConversationDetailRating/sections/details.component.js +120 -0
- package/dist/lib/generated/Entities/ConversationDetailRating/sections/details.component.js.map +1 -0
- package/dist/lib/generated/Entities/User/user.form.component.js +49 -29
- package/dist/lib/generated/Entities/User/user.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +336 -327
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +199 -126
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +27 -26
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +17 -16
|
@@ -8,7 +8,7 @@ import { Component, ViewChild } from '@angular/core';
|
|
|
8
8
|
import { RegisterClass } from '@memberjunction/global';
|
|
9
9
|
import { BaseFormComponent } from '@memberjunction/ng-base-forms';
|
|
10
10
|
import { SharedService } from '@memberjunction/ng-shared';
|
|
11
|
-
import { Metadata, RunView, CompositeKey } from '@memberjunction/
|
|
11
|
+
import { Metadata, RunView, CompositeKey } from '@memberjunction/core';
|
|
12
12
|
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
13
13
|
import { AIPromptFormComponent } from '../../generated/Entities/AIPrompt/aiprompt.form.component';
|
|
14
14
|
import { AIEngineBase } from '@memberjunction/ai-engine-base';
|
|
@@ -1578,7 +1578,7 @@ function AIPromptFormComponentExtended_Conditional_3_Template(rf, ctx) { if (rf
|
|
|
1578
1578
|
let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends AIPromptFormComponent {
|
|
1579
1579
|
// Main AI Prompt permissions inherited from BaseFormComponent:
|
|
1580
1580
|
// - UserCanEdit (Update permission)
|
|
1581
|
-
// - UserCanRead (Read permission)
|
|
1581
|
+
// - UserCanRead (Read permission)
|
|
1582
1582
|
// - UserCanCreate (Create permission)
|
|
1583
1583
|
// - UserCanDelete (Delete permission)
|
|
1584
1584
|
/** Check if user can create Templates */
|
|
@@ -1629,7 +1629,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1629
1629
|
return this._permissionCache.get(cacheKey);
|
|
1630
1630
|
}
|
|
1631
1631
|
try {
|
|
1632
|
-
const entityInfo = this._metadata.Entities.find(
|
|
1632
|
+
const entityInfo = this._metadata.Entities.find(e => e.Name === entityName);
|
|
1633
1633
|
if (!entityInfo) {
|
|
1634
1634
|
console.warn(`Entity '${entityName}' not found for permission check`);
|
|
1635
1635
|
this._permissionCache.set(cacheKey, false);
|
|
@@ -1671,7 +1671,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1671
1671
|
return {
|
|
1672
1672
|
allowEdit: this.EditMode && this.UserCanUpdateTemplateContents,
|
|
1673
1673
|
showRunButton: false,
|
|
1674
|
-
compactMode: false
|
|
1674
|
+
compactMode: false
|
|
1675
1675
|
};
|
|
1676
1676
|
}
|
|
1677
1677
|
constructor(elementRef, sharedService, router, route, cdr, testHarnessService, viewContainerRef, promptManagementService) {
|
|
@@ -1725,8 +1725,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1725
1725
|
// make sure AI Engine Base is configured, this will load stuff only if not already
|
|
1726
1726
|
// loaded in the current process space
|
|
1727
1727
|
await AIEngineBase.Instance.Config(false, this._metadata.CurrentUser);
|
|
1728
|
-
this.__InferenceProvider_VendorTypeDefinitionID =
|
|
1729
|
-
AIEngineBase.Instance.VendorTypeDefinitions.find((vtd) => vtd.Name.trim().toLowerCase() === 'inference provider')?.ID || '';
|
|
1728
|
+
this.__InferenceProvider_VendorTypeDefinitionID = AIEngineBase.Instance.VendorTypeDefinitions.find(vtd => vtd.Name.trim().toLowerCase() === 'inference provider')?.ID || '';
|
|
1730
1729
|
if (!this.__InferenceProvider_VendorTypeDefinitionID) {
|
|
1731
1730
|
console.error('Inference Provider Vendor Type Definition ID not found');
|
|
1732
1731
|
MJNotificationService.Instance.CreateSimpleNotification('Inference Provider Vendor Type Definition not found', 'error', 5000);
|
|
@@ -1748,7 +1747,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1748
1747
|
this.loadAvailablePromptTypes(),
|
|
1749
1748
|
this.loadAvailableConfigurations(),
|
|
1750
1749
|
this.loadPromptModels(),
|
|
1751
|
-
this.loadResultSelectorTreeData()
|
|
1750
|
+
this.loadResultSelectorTreeData()
|
|
1752
1751
|
]);
|
|
1753
1752
|
// Load execution history if record is saved
|
|
1754
1753
|
if (this.record?.IsSaved) {
|
|
@@ -1776,7 +1775,8 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1776
1775
|
return;
|
|
1777
1776
|
}
|
|
1778
1777
|
// First check if we already have this template in pending records (newly created)
|
|
1779
|
-
const pendingTemplate = this.PendingRecords.find(
|
|
1778
|
+
const pendingTemplate = this.PendingRecords.find(p => p.entityObject.EntityInfo.Name === 'Templates' &&
|
|
1779
|
+
p.entityObject.Get('ID') === this.record.TemplateID);
|
|
1780
1780
|
if (pendingTemplate) {
|
|
1781
1781
|
// Use the pending template
|
|
1782
1782
|
this.template = pendingTemplate.entityObject;
|
|
@@ -1799,7 +1799,10 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1799
1799
|
}
|
|
1800
1800
|
else {
|
|
1801
1801
|
// Load template content and parameters
|
|
1802
|
-
await Promise.all([
|
|
1802
|
+
await Promise.all([
|
|
1803
|
+
this.loadTemplateContent(),
|
|
1804
|
+
this.loadTemplateParams()
|
|
1805
|
+
]);
|
|
1803
1806
|
}
|
|
1804
1807
|
}
|
|
1805
1808
|
catch (error) {
|
|
@@ -1830,16 +1833,14 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1830
1833
|
*/
|
|
1831
1834
|
async linkExistingTemplate() {
|
|
1832
1835
|
try {
|
|
1833
|
-
this.promptManagementService
|
|
1834
|
-
.openTemplateSelectorDialog({
|
|
1836
|
+
this.promptManagementService.openTemplateSelectorDialog({
|
|
1835
1837
|
title: 'Link Existing Template',
|
|
1836
1838
|
multiSelect: false,
|
|
1837
1839
|
showCreateNew: true,
|
|
1838
1840
|
showActiveOnly: true,
|
|
1839
1841
|
selectedTemplateIds: this.record.TemplateID ? [this.record.TemplateID] : [],
|
|
1840
|
-
viewContainerRef: this.viewContainerRef
|
|
1841
|
-
})
|
|
1842
|
-
.subscribe({
|
|
1842
|
+
viewContainerRef: this.viewContainerRef
|
|
1843
|
+
}).subscribe({
|
|
1843
1844
|
next: async (result) => {
|
|
1844
1845
|
if (result && result.selectedTemplates.length > 0) {
|
|
1845
1846
|
const selectedTemplate = result.selectedTemplates[0];
|
|
@@ -1862,7 +1863,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1862
1863
|
error: (error) => {
|
|
1863
1864
|
console.error('Error opening template selector:', error);
|
|
1864
1865
|
MJNotificationService.Instance.CreateSimpleNotification('Error opening template selector. Please try again.', 'error', 3000);
|
|
1865
|
-
}
|
|
1866
|
+
}
|
|
1866
1867
|
});
|
|
1867
1868
|
}
|
|
1868
1869
|
catch (error) {
|
|
@@ -1888,7 +1889,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1888
1889
|
// First, clean up any pending changes related to the old template
|
|
1889
1890
|
this.cleanupOldTemplateRecords();
|
|
1890
1891
|
const newTemplate = await this._metadata.GetEntityObject('Templates');
|
|
1891
|
-
console.log(
|
|
1892
|
+
console.log("Record Name:", this.record.Name);
|
|
1892
1893
|
newTemplate.NewRecord();
|
|
1893
1894
|
newTemplate.Name = `${this.record.Name || 'AI Prompt'} Template`;
|
|
1894
1895
|
newTemplate.Description = `Template for AI Prompt: ${this.record.Name}`;
|
|
@@ -1896,7 +1897,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1896
1897
|
// Add to pending records instead of saving immediately
|
|
1897
1898
|
this.PendingRecords.push({
|
|
1898
1899
|
entityObject: newTemplate,
|
|
1899
|
-
action: 'save'
|
|
1900
|
+
action: 'save'
|
|
1900
1901
|
});
|
|
1901
1902
|
// Update the AI prompt to reference the new template
|
|
1902
1903
|
this.record.TemplateID = newTemplate.ID;
|
|
@@ -1949,7 +1950,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1949
1950
|
EntityName: 'Template Contents',
|
|
1950
1951
|
ExtraFilter: `TemplateID = '${this.template.ID}'`,
|
|
1951
1952
|
OrderBy: 'Priority ASC',
|
|
1952
|
-
ResultType: 'entity_object'
|
|
1953
|
+
ResultType: 'entity_object'
|
|
1953
1954
|
});
|
|
1954
1955
|
// Get the first content (highest priority)
|
|
1955
1956
|
this.templateContent = results.Results?.[0] || null;
|
|
@@ -1973,7 +1974,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
1973
1974
|
const results = await rv.RunView({
|
|
1974
1975
|
EntityName: 'Template Params',
|
|
1975
1976
|
ExtraFilter: `TemplateID = '${this.template.ID}'`,
|
|
1976
|
-
OrderBy: 'Name ASC'
|
|
1977
|
+
OrderBy: 'Name ASC'
|
|
1977
1978
|
});
|
|
1978
1979
|
this.templateParams = results.Results || [];
|
|
1979
1980
|
}
|
|
@@ -2020,7 +2021,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2020
2021
|
error: (error) => {
|
|
2021
2022
|
console.error('Test harness error:', error);
|
|
2022
2023
|
MJNotificationService.Instance.CreateSimpleNotification('Test failed: ' + error.message, 'error', 5000);
|
|
2023
|
-
}
|
|
2024
|
+
}
|
|
2024
2025
|
});
|
|
2025
2026
|
}
|
|
2026
2027
|
/**
|
|
@@ -2049,7 +2050,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2049
2050
|
// If it's saved, add to pending deletions
|
|
2050
2051
|
this.PendingRecords.push({
|
|
2051
2052
|
entityObject: templateContent,
|
|
2052
|
-
action: 'delete'
|
|
2053
|
+
action: 'delete'
|
|
2053
2054
|
});
|
|
2054
2055
|
}
|
|
2055
2056
|
else {
|
|
@@ -2058,7 +2059,8 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2058
2059
|
for (let i = currentPendingRecords.length - 1; i >= 0; i--) {
|
|
2059
2060
|
const record = currentPendingRecords[i];
|
|
2060
2061
|
if (record.entityObject === templateContent ||
|
|
2061
|
-
(record.entityObject.EntityInfo.Name === 'Template Contents' &&
|
|
2062
|
+
(record.entityObject.EntityInfo.Name === 'Template Contents' &&
|
|
2063
|
+
record.entityObject.Get('ID') === templateContent.Get('ID'))) {
|
|
2062
2064
|
currentPendingRecords.splice(i, 1);
|
|
2063
2065
|
break;
|
|
2064
2066
|
}
|
|
@@ -2075,7 +2077,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2075
2077
|
// Add to pending saves
|
|
2076
2078
|
this.PendingRecords.push({
|
|
2077
2079
|
entityObject: templateContent,
|
|
2078
|
-
action: 'save'
|
|
2080
|
+
action: 'save'
|
|
2079
2081
|
});
|
|
2080
2082
|
}
|
|
2081
2083
|
this.hasUnsavedChanges = true;
|
|
@@ -2114,16 +2116,11 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2114
2116
|
*/
|
|
2115
2117
|
getParallelizationModeDisplay() {
|
|
2116
2118
|
switch (this.record?.ParallelizationMode) {
|
|
2117
|
-
case 'None':
|
|
2118
|
-
|
|
2119
|
-
case '
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
return `Config parameter (${this.record.ParallelConfigParam || 'not set'})`;
|
|
2123
|
-
case 'ModelSpecific':
|
|
2124
|
-
return 'Model-specific configuration';
|
|
2125
|
-
default:
|
|
2126
|
-
return 'Unknown';
|
|
2119
|
+
case 'None': return 'None';
|
|
2120
|
+
case 'StaticCount': return `Static count (${this.record.ParallelCount || 1})`;
|
|
2121
|
+
case 'ConfigParam': return `Config parameter (${this.record.ParallelConfigParam || 'not set'})`;
|
|
2122
|
+
case 'ModelSpecific': return 'Model-specific configuration';
|
|
2123
|
+
default: return 'Unknown';
|
|
2127
2124
|
}
|
|
2128
2125
|
}
|
|
2129
2126
|
/**
|
|
@@ -2144,12 +2141,9 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2144
2141
|
*/
|
|
2145
2142
|
getValidationColor() {
|
|
2146
2143
|
switch (this.record?.ValidationBehavior) {
|
|
2147
|
-
case 'Strict':
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
return '#ffc107'; // yellow
|
|
2151
|
-
default:
|
|
2152
|
-
return '#6c757d'; // default gray
|
|
2144
|
+
case 'Strict': return '#dc3545'; // red
|
|
2145
|
+
case 'Warn': return '#ffc107'; // yellow
|
|
2146
|
+
default: return '#6c757d'; // default gray
|
|
2153
2147
|
}
|
|
2154
2148
|
}
|
|
2155
2149
|
/**
|
|
@@ -2174,21 +2168,20 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2174
2168
|
* Checks if the AI prompt can be executed
|
|
2175
2169
|
*/
|
|
2176
2170
|
get canExecute() {
|
|
2177
|
-
return !!(this.record?.ID &&
|
|
2171
|
+
return !!(this.record?.ID &&
|
|
2172
|
+
this.record.Status === 'Active' &&
|
|
2173
|
+
this.record.TemplateID &&
|
|
2174
|
+
this.template);
|
|
2178
2175
|
}
|
|
2179
2176
|
/**
|
|
2180
2177
|
* Gets status badge color
|
|
2181
2178
|
*/
|
|
2182
2179
|
getStatusBadgeColor() {
|
|
2183
2180
|
switch (this.record?.Status) {
|
|
2184
|
-
case 'Active':
|
|
2185
|
-
|
|
2186
|
-
case '
|
|
2187
|
-
|
|
2188
|
-
case 'Disabled':
|
|
2189
|
-
return '#6c757d';
|
|
2190
|
-
default:
|
|
2191
|
-
return '#6c757d';
|
|
2181
|
+
case 'Active': return '#28a745';
|
|
2182
|
+
case 'Pending': return '#ffc107';
|
|
2183
|
+
case 'Disabled': return '#6c757d';
|
|
2184
|
+
default: return '#6c757d';
|
|
2192
2185
|
}
|
|
2193
2186
|
}
|
|
2194
2187
|
/**
|
|
@@ -2274,9 +2267,9 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2274
2267
|
// Load model vendors for this model, filtering by TypeID for inference providers only
|
|
2275
2268
|
const engine = AIEngineBase.Instance;
|
|
2276
2269
|
await engine.Config(false);
|
|
2277
|
-
const modelVendors = engine.ModelVendors.filter(
|
|
2270
|
+
const modelVendors = engine.ModelVendors.filter(mv => mv.ModelID === modelId && mv.TypeID === this.__InferenceProvider_VendorTypeDefinitionID);
|
|
2278
2271
|
// filter vendors to just the vendors in the modelVendors array in VendorID
|
|
2279
|
-
const vendors = engine.Vendors.filter(
|
|
2272
|
+
const vendors = engine.Vendors.filter(v => modelVendors.some(mv => mv.VendorID === v.ID));
|
|
2280
2273
|
const result = { vendors, modelVendors };
|
|
2281
2274
|
this.modelVendorsMap.set(modelId, result);
|
|
2282
2275
|
return result;
|
|
@@ -2300,7 +2293,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2300
2293
|
const modelVendorData = this.modelVendorsMap.get(modelId);
|
|
2301
2294
|
if (!modelVendorData)
|
|
2302
2295
|
return 'Unknown';
|
|
2303
|
-
const modelVendor = modelVendorData.modelVendors.find(
|
|
2296
|
+
const modelVendor = modelVendorData.modelVendors.find(mv => mv.VendorID === vendorId);
|
|
2304
2297
|
return modelVendor?.Status || 'Unknown';
|
|
2305
2298
|
}
|
|
2306
2299
|
/**
|
|
@@ -2309,14 +2302,10 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2309
2302
|
getVendorStatusColor(modelId, vendorId) {
|
|
2310
2303
|
const status = this.getModelVendorStatus(modelId, vendorId);
|
|
2311
2304
|
switch (status) {
|
|
2312
|
-
case 'Active':
|
|
2313
|
-
|
|
2314
|
-
case '
|
|
2315
|
-
|
|
2316
|
-
case 'Pending':
|
|
2317
|
-
return '#ffc107'; // yellow
|
|
2318
|
-
default:
|
|
2319
|
-
return '#6c757d'; // gray
|
|
2305
|
+
case 'Active': return '#28a745'; // green
|
|
2306
|
+
case 'Inactive': return '#dc3545'; // red
|
|
2307
|
+
case 'Pending': return '#ffc107'; // yellow
|
|
2308
|
+
default: return '#6c757d'; // gray
|
|
2320
2309
|
}
|
|
2321
2310
|
}
|
|
2322
2311
|
/**
|
|
@@ -2380,14 +2369,16 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2380
2369
|
try {
|
|
2381
2370
|
const engine = AIEngineBase.Instance;
|
|
2382
2371
|
await engine.Config(false);
|
|
2383
|
-
this.promptModels = engine.PromptModels.filter(
|
|
2372
|
+
this.promptModels = engine.PromptModels.filter(pm => pm.PromptID === this.record.ID);
|
|
2384
2373
|
this.promptModels.sort((a, b) => {
|
|
2385
2374
|
// first sort on priority (descending), then by created date (ascending)
|
|
2386
2375
|
return b.Priority - a.Priority || new Date(a.__mj_CreatedAt).getTime() - new Date(b.__mj_CreatedAt).getTime();
|
|
2387
2376
|
});
|
|
2388
2377
|
// Load vendors for existing models
|
|
2389
|
-
const modelIds = this.promptModels
|
|
2390
|
-
|
|
2378
|
+
const modelIds = this.promptModels
|
|
2379
|
+
.map(pm => pm.ModelID)
|
|
2380
|
+
.filter(id => id); // Filter out null/undefined
|
|
2381
|
+
await Promise.all(modelIds.map(modelId => this.loadVendorsForModel(modelId)));
|
|
2391
2382
|
}
|
|
2392
2383
|
catch (error) {
|
|
2393
2384
|
console.error('Error loading prompt models:', error);
|
|
@@ -2437,7 +2428,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2437
2428
|
if (model.IsSaved) {
|
|
2438
2429
|
this.PendingRecords.push({
|
|
2439
2430
|
entityObject: model,
|
|
2440
|
-
action: 'delete'
|
|
2431
|
+
action: 'delete'
|
|
2441
2432
|
});
|
|
2442
2433
|
}
|
|
2443
2434
|
// Remove from local array
|
|
@@ -2460,7 +2451,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2460
2451
|
getModelDisplayName(modelId) {
|
|
2461
2452
|
if (!modelId)
|
|
2462
2453
|
return '';
|
|
2463
|
-
const model = this.availableModels.find(
|
|
2454
|
+
const model = this.availableModels.find(m => m.ID === modelId);
|
|
2464
2455
|
return model ? model.Name : modelId;
|
|
2465
2456
|
}
|
|
2466
2457
|
/**
|
|
@@ -2469,7 +2460,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2469
2460
|
getVendorDisplayName(vendorId) {
|
|
2470
2461
|
if (!vendorId)
|
|
2471
2462
|
return '';
|
|
2472
|
-
const vendor = this.availableVendors.find(
|
|
2463
|
+
const vendor = this.availableVendors.find(v => v.ID === vendorId);
|
|
2473
2464
|
return vendor ? vendor.Name : vendorId;
|
|
2474
2465
|
}
|
|
2475
2466
|
/**
|
|
@@ -2478,7 +2469,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2478
2469
|
getPromptTypeDisplayName(typeId) {
|
|
2479
2470
|
if (!typeId)
|
|
2480
2471
|
return '';
|
|
2481
|
-
const type = this.availablePromptTypes.find(
|
|
2472
|
+
const type = this.availablePromptTypes.find(t => t.ID === typeId);
|
|
2482
2473
|
return type ? type.Name : typeId;
|
|
2483
2474
|
}
|
|
2484
2475
|
/**
|
|
@@ -2487,7 +2478,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2487
2478
|
getConfigurationDisplayName(configurationId) {
|
|
2488
2479
|
if (!configurationId)
|
|
2489
2480
|
return 'Default';
|
|
2490
|
-
const config = this.availableConfigurations.find(
|
|
2481
|
+
const config = this.availableConfigurations.find(c => c.ID === configurationId);
|
|
2491
2482
|
return config ? config.Name : configurationId;
|
|
2492
2483
|
}
|
|
2493
2484
|
/**
|
|
@@ -2552,7 +2543,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2552
2543
|
}
|
|
2553
2544
|
this.PendingRecords.push({
|
|
2554
2545
|
entityObject: model,
|
|
2555
|
-
action: 'save'
|
|
2546
|
+
action: 'save'
|
|
2556
2547
|
});
|
|
2557
2548
|
}
|
|
2558
2549
|
}
|
|
@@ -2569,7 +2560,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2569
2560
|
const md = new Metadata();
|
|
2570
2561
|
const transactionGroup = await md.CreateTransactionGroup();
|
|
2571
2562
|
// First, save any templates that need to be saved (they must be saved before AI Prompts)
|
|
2572
|
-
const templateRecords = this.PendingRecords.filter(
|
|
2563
|
+
const templateRecords = this.PendingRecords.filter(p => p.entityObject.EntityInfo.Name === 'Templates');
|
|
2573
2564
|
for (const templateRecord of templateRecords) {
|
|
2574
2565
|
templateRecord.entityObject.TransactionGroup = transactionGroup;
|
|
2575
2566
|
if (templateRecord.action === 'save') {
|
|
@@ -2591,7 +2582,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2591
2582
|
return false;
|
|
2592
2583
|
}
|
|
2593
2584
|
// Then save all other pending records (excluding templates which we already saved)
|
|
2594
|
-
const otherRecords = this.PendingRecords.filter(
|
|
2585
|
+
const otherRecords = this.PendingRecords.filter(p => p.entityObject.EntityInfo.Name !== 'Templates');
|
|
2595
2586
|
for (const record of otherRecords) {
|
|
2596
2587
|
record.entityObject.TransactionGroup = transactionGroup;
|
|
2597
2588
|
if (record.action === 'save') {
|
|
@@ -2636,7 +2627,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2636
2627
|
const engine = AIEngineBase.Instance;
|
|
2637
2628
|
await engine.Config(false);
|
|
2638
2629
|
const categories = engine.PromptCategories;
|
|
2639
|
-
const prompts = engine.Prompts.filter(
|
|
2630
|
+
const prompts = engine.Prompts.filter(p => p.Status === 'Active');
|
|
2640
2631
|
categories.sort((a, b) => a.Name.localeCompare(b.Name));
|
|
2641
2632
|
prompts.sort((a, b) => a.Name.localeCompare(b.Name));
|
|
2642
2633
|
// Build tree structure
|
|
@@ -2661,11 +2652,11 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2661
2652
|
value: null,
|
|
2662
2653
|
hasChildren: false,
|
|
2663
2654
|
isCategory: false,
|
|
2664
|
-
isClearOption: true
|
|
2655
|
+
isClearOption: true
|
|
2665
2656
|
});
|
|
2666
2657
|
// Create category nodes
|
|
2667
2658
|
const categoryMap = new Map();
|
|
2668
|
-
categories.forEach(
|
|
2659
|
+
categories.forEach(category => {
|
|
2669
2660
|
const node = {
|
|
2670
2661
|
text: category.Name,
|
|
2671
2662
|
value: null, // Categories don't have values
|
|
@@ -2673,7 +2664,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2673
2664
|
hasChildren: true,
|
|
2674
2665
|
items: [],
|
|
2675
2666
|
isCategory: true,
|
|
2676
|
-
categoryId: category.ID
|
|
2667
|
+
categoryId: category.ID
|
|
2677
2668
|
};
|
|
2678
2669
|
categoryMap.set(category.ID, node);
|
|
2679
2670
|
// Handle parent-child relationships
|
|
@@ -2693,13 +2684,13 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2693
2684
|
// Collect uncategorized prompts
|
|
2694
2685
|
const uncategorizedPrompts = [];
|
|
2695
2686
|
// Add prompts to their categories
|
|
2696
|
-
prompts.forEach(
|
|
2687
|
+
prompts.forEach(prompt => {
|
|
2697
2688
|
const promptNode = {
|
|
2698
2689
|
text: prompt.Name,
|
|
2699
2690
|
value: prompt.ID,
|
|
2700
2691
|
hasChildren: false,
|
|
2701
2692
|
isCategory: false,
|
|
2702
|
-
promptId: prompt.ID
|
|
2693
|
+
promptId: prompt.ID
|
|
2703
2694
|
};
|
|
2704
2695
|
if (prompt.CategoryID) {
|
|
2705
2696
|
const categoryNode = categoryMap.get(prompt.CategoryID);
|
|
@@ -2725,7 +2716,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2725
2716
|
hasChildren: true,
|
|
2726
2717
|
items: uncategorizedPrompts,
|
|
2727
2718
|
isCategory: true,
|
|
2728
|
-
categoryId: 'uncategorized'
|
|
2719
|
+
categoryId: 'uncategorized'
|
|
2729
2720
|
});
|
|
2730
2721
|
}
|
|
2731
2722
|
return tree;
|
|
@@ -2765,7 +2756,8 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2765
2756
|
// Create new array to ensure Angular detects the change
|
|
2766
2757
|
const newModels = [...this.promptModels];
|
|
2767
2758
|
// Swap with previous item
|
|
2768
|
-
[newModels[index - 1], newModels[index]] =
|
|
2759
|
+
[newModels[index - 1], newModels[index]] =
|
|
2760
|
+
[newModels[index], newModels[index - 1]];
|
|
2769
2761
|
// Replace the array and force full re-render
|
|
2770
2762
|
this.promptModels = [...newModels];
|
|
2771
2763
|
this.hasUnsavedChanges = true;
|
|
@@ -2786,7 +2778,8 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2786
2778
|
// Create new array to ensure Angular detects the change
|
|
2787
2779
|
const newModels = [...this.promptModels];
|
|
2788
2780
|
// Swap with next item
|
|
2789
|
-
[newModels[index], newModels[index + 1]] =
|
|
2781
|
+
[newModels[index], newModels[index + 1]] =
|
|
2782
|
+
[newModels[index + 1], newModels[index]];
|
|
2790
2783
|
// Replace the array and force full re-render
|
|
2791
2784
|
this.promptModels = [...newModels];
|
|
2792
2785
|
this.hasUnsavedChanges = true;
|
|
@@ -2874,7 +2867,7 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
2874
2867
|
const result = await rv.RunView({
|
|
2875
2868
|
EntityName: 'MJ: AI Prompt Runs',
|
|
2876
2869
|
ExtraFilter: `PromptID='${this.record.ID}'`,
|
|
2877
|
-
OrderBy: 'RunAt DESC'
|
|
2870
|
+
OrderBy: 'RunAt DESC'
|
|
2878
2871
|
});
|
|
2879
2872
|
this.executionHistory = result.Results;
|
|
2880
2873
|
this.sortExecutionHistory();
|
|
@@ -3001,18 +2994,12 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
3001
2994
|
*/
|
|
3002
2995
|
getParamTypeIcon(type) {
|
|
3003
2996
|
switch (type) {
|
|
3004
|
-
case 'Scalar':
|
|
3005
|
-
|
|
3006
|
-
case '
|
|
3007
|
-
|
|
3008
|
-
case '
|
|
3009
|
-
|
|
3010
|
-
case 'Record':
|
|
3011
|
-
return 'fa-file-alt';
|
|
3012
|
-
case 'Entity':
|
|
3013
|
-
return 'fa-table';
|
|
3014
|
-
default:
|
|
3015
|
-
return 'fa-question';
|
|
2997
|
+
case 'Scalar': return 'fa-font';
|
|
2998
|
+
case 'Array': return 'fa-list';
|
|
2999
|
+
case 'Object': return 'fa-cube';
|
|
3000
|
+
case 'Record': return 'fa-file-alt';
|
|
3001
|
+
case 'Entity': return 'fa-table';
|
|
3002
|
+
default: return 'fa-question';
|
|
3016
3003
|
}
|
|
3017
3004
|
}
|
|
3018
3005
|
/**
|
|
@@ -3020,18 +3007,12 @@ let AIPromptFormComponentExtended = class AIPromptFormComponentExtended extends
|
|
|
3020
3007
|
*/
|
|
3021
3008
|
getParamTypeColor(type) {
|
|
3022
3009
|
switch (type) {
|
|
3023
|
-
case 'Scalar':
|
|
3024
|
-
|
|
3025
|
-
case '
|
|
3026
|
-
|
|
3027
|
-
case '
|
|
3028
|
-
|
|
3029
|
-
case 'Record':
|
|
3030
|
-
return '#fd7e14';
|
|
3031
|
-
case 'Entity':
|
|
3032
|
-
return '#dc3545';
|
|
3033
|
-
default:
|
|
3034
|
-
return '#6c757d';
|
|
3010
|
+
case 'Scalar': return '#17a2b8';
|
|
3011
|
+
case 'Array': return '#28a745';
|
|
3012
|
+
case 'Object': return '#6f42c1';
|
|
3013
|
+
case 'Record': return '#fd7e14';
|
|
3014
|
+
case 'Entity': return '#dc3545';
|
|
3015
|
+
default: return '#6c757d';
|
|
3035
3016
|
}
|
|
3036
3017
|
}
|
|
3037
3018
|
/**
|
|
@@ -3088,7 +3069,7 @@ export { AIPromptFormComponentExtended };
|
|
|
3088
3069
|
type: ViewChild,
|
|
3089
3070
|
args: ['templateEditor']
|
|
3090
3071
|
}] }); })();
|
|
3091
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIPromptFormComponentExtended, { className: "AIPromptFormComponentExtended", filePath: "src/lib/custom/AIPrompts/ai-prompt-form.component.ts", lineNumber:
|
|
3072
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIPromptFormComponentExtended, { className: "AIPromptFormComponentExtended", filePath: "src/lib/custom/AIPrompts/ai-prompt-form.component.ts", lineNumber: 21 }); })();
|
|
3092
3073
|
export function LoadAIPromptFormComponentExtended() {
|
|
3093
3074
|
// This function ensures the class isn't tree-shaken and registers it with MemberJunction
|
|
3094
3075
|
}
|