@memberjunction/ng-core-entity-forms 2.54.0 → 2.56.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 +1 -206
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +31 -5
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +558 -502
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +36 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +325 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +41 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +87 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -0
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +6 -0
- 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 +656 -235
- 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 +9 -2
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +549 -511
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +1 -0
- 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 +4 -0
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +5 -0
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +9 -2
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +5 -4
- 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 +150 -72
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +31 -35
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +23 -43
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +11 -12
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.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 +13 -4
- package/dist/lib/generated/Entities/AIAgent/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js +7 -8
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js +7 -8
- package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js +7 -8
- package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js +11 -12
- package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js +11 -12
- package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js +11 -12
- package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js +139 -4
- package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js +11 -12
- package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Action/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Action/sections/details.component.js +13 -4
- package/dist/lib/generated/Entities/Action/sections/details.component.js.map +1 -1
- package/dist/public-api.d.ts +2 -3
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -16
- package/dist/public-api.js.map +1 -1
- package/package.json +13 -12
- package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.d.ts +0 -273
- package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.d.ts.map +0 -1
- package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.js +0 -1429
- package/dist/lib/custom/ai-test-harness/agent-execution-monitor.component.js.map +0 -1
- package/dist/lib/custom/ai-test-harness/agent-execution-node.component.d.ts +0 -19
- package/dist/lib/custom/ai-test-harness/agent-execution-node.component.d.ts.map +0 -1
- package/dist/lib/custom/ai-test-harness/agent-execution-node.component.js +0 -458
- package/dist/lib/custom/ai-test-harness/agent-execution-node.component.js.map +0 -1
- package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.d.ts +0 -78
- package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.d.ts.map +0 -1
- package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.js +0 -157
- package/dist/lib/custom/ai-test-harness/ai-test-harness-dialog.component.js.map +0 -1
- package/dist/lib/custom/ai-test-harness/ai-test-harness.component.d.ts +0 -631
- package/dist/lib/custom/ai-test-harness/ai-test-harness.component.d.ts.map +0 -1
- package/dist/lib/custom/ai-test-harness/ai-test-harness.component.js +0 -3380
- package/dist/lib/custom/ai-test-harness/ai-test-harness.component.js.map +0 -1
- package/dist/lib/custom/ai-test-harness/json-viewer-window.component.d.ts +0 -8
- package/dist/lib/custom/ai-test-harness/json-viewer-window.component.d.ts.map +0 -1
- package/dist/lib/custom/ai-test-harness/json-viewer-window.component.js +0 -57
- package/dist/lib/custom/ai-test-harness/json-viewer-window.component.js.map +0 -1
- package/dist/lib/custom/test-harness-dialog.service.d.ts +0 -111
- package/dist/lib/custom/test-harness-dialog.service.d.ts.map +0 -1
- package/dist/lib/custom/test-harness-dialog.service.js +0 -211
- package/dist/lib/custom/test-harness-dialog.service.js.map +0 -1
|
@@ -19,7 +19,8 @@ import * as i5 from "@progress/kendo-angular-buttons";
|
|
|
19
19
|
import * as i6 from "@memberjunction/ng-form-toolbar";
|
|
20
20
|
import * as i7 from "@memberjunction/ng-code-editor";
|
|
21
21
|
import * as i8 from "@angular/common";
|
|
22
|
-
const _forTrack0 = ($index, $item) => $item.
|
|
22
|
+
const _forTrack0 = ($index, $item) => $item.attemptNumber;
|
|
23
|
+
const _forTrack1 = ($index, $item) => $item.ID;
|
|
23
24
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
24
25
|
i0.ɵɵelementStart(0, "span", 10);
|
|
25
26
|
i0.ɵɵtext(1);
|
|
@@ -30,7 +31,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_11_Template(
|
|
|
30
31
|
i0.ɵɵtextInterpolate1("#", ctx_r1.record.ID.substring(0, 8), "");
|
|
31
32
|
} }
|
|
32
33
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
33
|
-
i0.ɵɵelementStart(0, "span",
|
|
34
|
+
i0.ɵɵelementStart(0, "span", 32);
|
|
34
35
|
i0.ɵɵelement(1, "i");
|
|
35
36
|
i0.ɵɵtext(2);
|
|
36
37
|
i0.ɵɵelementEnd();
|
|
@@ -44,9 +45,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_16_Template(
|
|
|
44
45
|
} }
|
|
45
46
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
46
47
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
47
|
-
i0.ɵɵelementStart(0, "span",
|
|
48
|
+
i0.ɵɵelementStart(0, "span", 33);
|
|
48
49
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Prompts", ctx_r1.prompt.ID)); });
|
|
49
|
-
i0.ɵɵelement(1, "i",
|
|
50
|
+
i0.ɵɵelement(1, "i", 34);
|
|
50
51
|
i0.ɵɵtext(2);
|
|
51
52
|
i0.ɵɵelementEnd();
|
|
52
53
|
} if (rf & 2) {
|
|
@@ -56,9 +57,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template(
|
|
|
56
57
|
} }
|
|
57
58
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
58
59
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
59
|
-
i0.ɵɵelementStart(0, "span",
|
|
60
|
+
i0.ɵɵelementStart(0, "span", 35);
|
|
60
61
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Models", ctx_r1.model.ID)); });
|
|
61
|
-
i0.ɵɵelement(1, "i",
|
|
62
|
+
i0.ɵɵelement(1, "i", 36);
|
|
62
63
|
i0.ɵɵtext(2);
|
|
63
64
|
i0.ɵɵelementEnd();
|
|
64
65
|
} if (rf & 2) {
|
|
@@ -66,13 +67,25 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template(
|
|
|
66
67
|
i0.ɵɵadvance(2);
|
|
67
68
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.model.Name, " ");
|
|
68
69
|
} }
|
|
69
|
-
function
|
|
70
|
-
i0.ɵɵ
|
|
71
|
-
i0.ɵɵ
|
|
72
|
-
i0.ɵɵ
|
|
70
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
71
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
72
|
+
i0.ɵɵelementStart(0, "span", 37);
|
|
73
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_19_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Vendors", ctx_r1.record.VendorID)); });
|
|
74
|
+
i0.ɵɵelement(1, "i", 38);
|
|
75
|
+
i0.ɵɵtext(2);
|
|
76
|
+
i0.ɵɵelementEnd();
|
|
77
|
+
} if (rf & 2) {
|
|
78
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
79
|
+
i0.ɵɵadvance(2);
|
|
80
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Vendor, " ");
|
|
81
|
+
} }
|
|
82
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
83
|
+
i0.ɵɵelementStart(0, "div", 21);
|
|
84
|
+
i0.ɵɵelement(1, "i", 39);
|
|
85
|
+
i0.ɵɵelementStart(2, "div", 23)(3, "div", 24);
|
|
73
86
|
i0.ɵɵtext(4, "Started");
|
|
74
87
|
i0.ɵɵelementEnd();
|
|
75
|
-
i0.ɵɵelementStart(5, "div",
|
|
88
|
+
i0.ɵɵelementStart(5, "div", 25);
|
|
76
89
|
i0.ɵɵtext(6);
|
|
77
90
|
i0.ɵɵpipe(7, "date");
|
|
78
91
|
i0.ɵɵelementEnd()()();
|
|
@@ -81,31 +94,31 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_44_Template(
|
|
|
81
94
|
i0.ɵɵadvance(6);
|
|
82
95
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
|
|
83
96
|
} }
|
|
84
|
-
function
|
|
85
|
-
i0.ɵɵelementStart(0, "span",
|
|
97
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
98
|
+
i0.ɵɵelementStart(0, "span", 41);
|
|
86
99
|
i0.ɵɵtext(1, "JSON");
|
|
87
100
|
i0.ɵɵelementEnd();
|
|
88
101
|
} }
|
|
89
|
-
function
|
|
90
|
-
i0.ɵɵelementStart(0, "span",
|
|
91
|
-
i0.ɵɵelement(1, "i",
|
|
102
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Template(rf, ctx) { if (rf & 1) {
|
|
103
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
104
|
+
i0.ɵɵelement(1, "i", 34);
|
|
92
105
|
i0.ɵɵtext(2, " Input Messages ");
|
|
93
|
-
i0.ɵɵtemplate(3,
|
|
106
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Conditional_3_Template, 2, 0, "span", 41);
|
|
94
107
|
i0.ɵɵelementEnd();
|
|
95
108
|
} if (rf & 2) {
|
|
96
109
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
97
110
|
i0.ɵɵadvance(3);
|
|
98
111
|
i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
|
|
99
112
|
} }
|
|
100
|
-
function
|
|
101
|
-
const
|
|
102
|
-
i0.ɵɵelementStart(0, "div",
|
|
103
|
-
i0.ɵɵlistener("click", function
|
|
104
|
-
i0.ɵɵelement(3, "i",
|
|
113
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
114
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
115
|
+
i0.ɵɵelementStart(0, "div", 43)(1, "div", 45)(2, "kendo-button", 46);
|
|
116
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Template_kendo_button_click_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
|
|
117
|
+
i0.ɵɵelement(3, "i", 47);
|
|
105
118
|
i0.ɵɵtext(4, " Copy ");
|
|
106
119
|
i0.ɵɵelementEnd()();
|
|
107
|
-
i0.ɵɵelementStart(5, "mj-code-editor",
|
|
108
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
120
|
+
i0.ɵɵelementStart(5, "mj-code-editor", 48);
|
|
121
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Template_mj_code_editor_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedMessages, $event) || (ctx_r1.formattedMessages = $event); return i0.ɵɵresetView($event); });
|
|
109
122
|
i0.ɵɵelementEnd()();
|
|
110
123
|
} if (rf & 2) {
|
|
111
124
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -113,37 +126,37 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Condition
|
|
|
113
126
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedMessages);
|
|
114
127
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
115
128
|
} }
|
|
116
|
-
function
|
|
117
|
-
i0.ɵɵelementStart(0, "div",
|
|
118
|
-
i0.ɵɵelement(1, "i",
|
|
129
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
130
|
+
i0.ɵɵelementStart(0, "div", 44);
|
|
131
|
+
i0.ɵɵelement(1, "i", 49);
|
|
119
132
|
i0.ɵɵelementStart(2, "p");
|
|
120
133
|
i0.ɵɵtext(3, "No input messages recorded");
|
|
121
134
|
i0.ɵɵelementEnd()();
|
|
122
135
|
} }
|
|
123
|
-
function
|
|
124
|
-
i0.ɵɵelementStart(0, "div",
|
|
125
|
-
i0.ɵɵtemplate(1,
|
|
136
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Template(rf, ctx) { if (rf & 1) {
|
|
137
|
+
i0.ɵɵelementStart(0, "div", 42);
|
|
138
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Template, 6, 4, "div", 43)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_2_Template, 4, 0, "div", 44);
|
|
126
139
|
i0.ɵɵelementEnd();
|
|
127
140
|
} if (rf & 2) {
|
|
128
141
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
129
142
|
i0.ɵɵadvance();
|
|
130
143
|
i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 1 : 2);
|
|
131
144
|
} }
|
|
132
|
-
function
|
|
133
|
-
i0.ɵɵelementStart(0, "span",
|
|
145
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
146
|
+
i0.ɵɵelementStart(0, "span", 41);
|
|
134
147
|
i0.ɵɵtext(1, "JSON");
|
|
135
148
|
i0.ɵɵelementEnd();
|
|
136
149
|
} }
|
|
137
|
-
function
|
|
138
|
-
i0.ɵɵelementStart(0, "span",
|
|
150
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
151
|
+
i0.ɵɵelementStart(0, "span", 51);
|
|
139
152
|
i0.ɵɵtext(1, "Error");
|
|
140
153
|
i0.ɵɵelementEnd();
|
|
141
154
|
} }
|
|
142
|
-
function
|
|
143
|
-
i0.ɵɵelementStart(0, "span",
|
|
144
|
-
i0.ɵɵelement(1, "i",
|
|
155
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Template(rf, ctx) { if (rf & 1) {
|
|
156
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
157
|
+
i0.ɵɵelement(1, "i", 50);
|
|
145
158
|
i0.ɵɵtext(2, " Result ");
|
|
146
|
-
i0.ɵɵtemplate(3,
|
|
159
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_3_Template, 2, 0, "span", 41)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_4_Template, 2, 0, "span", 51);
|
|
147
160
|
i0.ɵɵelementEnd();
|
|
148
161
|
} if (rf & 2) {
|
|
149
162
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -152,10 +165,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_51_Template(
|
|
|
152
165
|
i0.ɵɵadvance();
|
|
153
166
|
i0.ɵɵconditional(ctx_r1.record.ErrorMessage ? 4 : -1);
|
|
154
167
|
} }
|
|
155
|
-
function
|
|
156
|
-
i0.ɵɵelementStart(0, "div",
|
|
157
|
-
i0.ɵɵelement(1, "i",
|
|
158
|
-
i0.ɵɵelementStart(2, "div",
|
|
168
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
169
|
+
i0.ɵɵelementStart(0, "div", 52);
|
|
170
|
+
i0.ɵɵelement(1, "i", 53);
|
|
171
|
+
i0.ɵɵelementStart(2, "div", 54)(3, "h4");
|
|
159
172
|
i0.ɵɵtext(4, "Error Message");
|
|
160
173
|
i0.ɵɵelementEnd();
|
|
161
174
|
i0.ɵɵelementStart(5, "p");
|
|
@@ -166,15 +179,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Condition
|
|
|
166
179
|
i0.ɵɵadvance(6);
|
|
167
180
|
i0.ɵɵtextInterpolate(ctx_r1.record.ErrorMessage);
|
|
168
181
|
} }
|
|
169
|
-
function
|
|
170
|
-
const
|
|
171
|
-
i0.ɵɵelementStart(0, "div",
|
|
172
|
-
i0.ɵɵlistener("click", function
|
|
173
|
-
i0.ɵɵelement(3, "i",
|
|
182
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
183
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
184
|
+
i0.ɵɵelementStart(0, "div", 43)(1, "div", 45)(2, "kendo-button", 46);
|
|
185
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_2_Template_kendo_button_click_2_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedResult, "Result")); });
|
|
186
|
+
i0.ɵɵelement(3, "i", 47);
|
|
174
187
|
i0.ɵɵtext(4, " Copy ");
|
|
175
188
|
i0.ɵɵelementEnd()();
|
|
176
|
-
i0.ɵɵelementStart(5, "mj-code-editor",
|
|
177
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
189
|
+
i0.ɵɵelementStart(5, "mj-code-editor", 55);
|
|
190
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_2_Template_mj_code_editor_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedResult, $event) || (ctx_r1.formattedResult = $event); return i0.ɵɵresetView($event); });
|
|
178
191
|
i0.ɵɵelementEnd()();
|
|
179
192
|
} if (rf & 2) {
|
|
180
193
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -182,16 +195,16 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Condition
|
|
|
182
195
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedResult);
|
|
183
196
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
184
197
|
} }
|
|
185
|
-
function
|
|
186
|
-
i0.ɵɵelementStart(0, "div",
|
|
187
|
-
i0.ɵɵelement(1, "i",
|
|
198
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
199
|
+
i0.ɵɵelementStart(0, "div", 44);
|
|
200
|
+
i0.ɵɵelement(1, "i", 56);
|
|
188
201
|
i0.ɵɵelementStart(2, "p");
|
|
189
202
|
i0.ɵɵtext(3, "No result data recorded");
|
|
190
203
|
i0.ɵɵelementEnd()();
|
|
191
204
|
} }
|
|
192
|
-
function
|
|
193
|
-
i0.ɵɵelementStart(0, "div",
|
|
194
|
-
i0.ɵɵtemplate(1,
|
|
205
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Template(rf, ctx) { if (rf & 1) {
|
|
206
|
+
i0.ɵɵelementStart(0, "div", 42);
|
|
207
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_1_Template, 7, 1, "div", 52)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_2_Template, 6, 4, "div", 43)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_3_Template, 4, 0, "div", 44);
|
|
195
208
|
i0.ɵɵelementEnd();
|
|
196
209
|
} if (rf & 2) {
|
|
197
210
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -200,14 +213,14 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Template(
|
|
|
200
213
|
i0.ɵɵadvance();
|
|
201
214
|
i0.ɵɵconditional(ctx_r1.record.Result && ctx_r1.record.Result.trim() !== "" ? 2 : !ctx_r1.record.ErrorMessage ? 3 : -1);
|
|
202
215
|
} }
|
|
203
|
-
function
|
|
204
|
-
i0.ɵɵelementStart(0, "span",
|
|
205
|
-
i0.ɵɵelement(1, "i",
|
|
216
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Template(rf, ctx) { if (rf & 1) {
|
|
217
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
218
|
+
i0.ɵɵelement(1, "i", 57);
|
|
206
219
|
i0.ɵɵtext(2, " Token Usage & Metrics ");
|
|
207
220
|
i0.ɵɵelementEnd();
|
|
208
221
|
} }
|
|
209
|
-
function
|
|
210
|
-
i0.ɵɵelementStart(0, "div",
|
|
222
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
223
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "span");
|
|
211
224
|
i0.ɵɵtext(2);
|
|
212
225
|
i0.ɵɵelementEnd()();
|
|
213
226
|
} if (rf & 2) {
|
|
@@ -215,8 +228,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Condition
|
|
|
215
228
|
i0.ɵɵadvance(2);
|
|
216
229
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensPromptRollup), "");
|
|
217
230
|
} }
|
|
218
|
-
function
|
|
219
|
-
i0.ɵɵelementStart(0, "div",
|
|
231
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
232
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "span");
|
|
220
233
|
i0.ɵɵtext(2);
|
|
221
234
|
i0.ɵɵelementEnd()();
|
|
222
235
|
} if (rf & 2) {
|
|
@@ -224,8 +237,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Condition
|
|
|
224
237
|
i0.ɵɵadvance(2);
|
|
225
238
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensCompletionRollup), "");
|
|
226
239
|
} }
|
|
227
|
-
function
|
|
228
|
-
i0.ɵɵelementStart(0, "div",
|
|
240
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
241
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "span");
|
|
229
242
|
i0.ɵɵtext(2);
|
|
230
243
|
i0.ɵɵelementEnd()();
|
|
231
244
|
} if (rf & 2) {
|
|
@@ -233,8 +246,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Condition
|
|
|
233
246
|
i0.ɵɵadvance(2);
|
|
234
247
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup), "");
|
|
235
248
|
} }
|
|
236
|
-
function
|
|
237
|
-
i0.ɵɵelementStart(0, "div",
|
|
249
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
250
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "span");
|
|
238
251
|
i0.ɵɵtext(2);
|
|
239
252
|
i0.ɵɵelementEnd()();
|
|
240
253
|
} if (rf & 2) {
|
|
@@ -242,8 +255,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Condition
|
|
|
242
255
|
i0.ɵɵadvance(2);
|
|
243
256
|
i0.ɵɵtextInterpolate1("Total: ", ctx_r1.formatCost(ctx_r1.record.TotalCost), "");
|
|
244
257
|
} }
|
|
245
|
-
function
|
|
246
|
-
i0.ɵɵelementStart(0, "div",
|
|
258
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
259
|
+
i0.ɵɵelementStart(0, "div", 65);
|
|
247
260
|
i0.ɵɵtext(1);
|
|
248
261
|
i0.ɵɵelementEnd();
|
|
249
262
|
} if (rf & 2) {
|
|
@@ -251,11 +264,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Condition
|
|
|
251
264
|
i0.ɵɵadvance();
|
|
252
265
|
i0.ɵɵtextInterpolate(ctx_r1.record.CostCurrency);
|
|
253
266
|
} }
|
|
254
|
-
function
|
|
255
|
-
i0.ɵɵelementStart(0, "div",
|
|
267
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
268
|
+
i0.ɵɵelementStart(0, "div", 67)(1, "span", 24);
|
|
256
269
|
i0.ɵɵtext(2, "Execution Order:");
|
|
257
270
|
i0.ɵɵelementEnd();
|
|
258
|
-
i0.ɵɵelementStart(3, "span",
|
|
271
|
+
i0.ɵɵelementStart(3, "span", 25);
|
|
259
272
|
i0.ɵɵtext(4);
|
|
260
273
|
i0.ɵɵelementEnd()();
|
|
261
274
|
} if (rf & 2) {
|
|
@@ -263,11 +276,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Condition
|
|
|
263
276
|
i0.ɵɵadvance(4);
|
|
264
277
|
i0.ɵɵtextInterpolate(ctx_r1.record.ExecutionOrder);
|
|
265
278
|
} }
|
|
266
|
-
function
|
|
267
|
-
i0.ɵɵelementStart(0, "div",
|
|
279
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
280
|
+
i0.ɵɵelementStart(0, "div", 67)(1, "span", 24);
|
|
268
281
|
i0.ɵɵtext(2, "Configuration:");
|
|
269
282
|
i0.ɵɵelementEnd();
|
|
270
|
-
i0.ɵɵelementStart(3, "span",
|
|
283
|
+
i0.ɵɵelementStart(3, "span", 25);
|
|
271
284
|
i0.ɵɵtext(4);
|
|
272
285
|
i0.ɵɵelementEnd()();
|
|
273
286
|
} if (rf & 2) {
|
|
@@ -275,64 +288,64 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Condition
|
|
|
275
288
|
i0.ɵɵadvance(4);
|
|
276
289
|
i0.ɵɵtextInterpolate(ctx_r1.record.Configuration);
|
|
277
290
|
} }
|
|
278
|
-
function
|
|
279
|
-
const
|
|
280
|
-
i0.ɵɵelementStart(0, "div",
|
|
291
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
292
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
293
|
+
i0.ɵɵelementStart(0, "div", 67)(1, "span", 24);
|
|
281
294
|
i0.ɵɵtext(2, "Agent:");
|
|
282
295
|
i0.ɵɵelementEnd();
|
|
283
|
-
i0.ɵɵelementStart(3, "span",
|
|
284
|
-
i0.ɵɵlistener("click", function
|
|
296
|
+
i0.ɵɵelementStart(3, "span", 68);
|
|
297
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_38_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Agents", ctx_r1.record.AgentID)); });
|
|
285
298
|
i0.ɵɵtext(4);
|
|
286
|
-
i0.ɵɵelement(5, "i",
|
|
299
|
+
i0.ɵɵelement(5, "i", 69);
|
|
287
300
|
i0.ɵɵelementEnd()();
|
|
288
301
|
} if (rf & 2) {
|
|
289
302
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
290
303
|
i0.ɵɵadvance(4);
|
|
291
304
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
|
|
292
305
|
} }
|
|
293
|
-
function
|
|
294
|
-
i0.ɵɵelementStart(0, "div",
|
|
295
|
-
i0.ɵɵelement(4, "i",
|
|
306
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template(rf, ctx) { if (rf & 1) {
|
|
307
|
+
i0.ɵɵelementStart(0, "div", 42)(1, "div", 58)(2, "div", 59)(3, "div", 60);
|
|
308
|
+
i0.ɵɵelement(4, "i", 61);
|
|
296
309
|
i0.ɵɵelementStart(5, "h4");
|
|
297
310
|
i0.ɵɵtext(6, "Prompt Tokens");
|
|
298
311
|
i0.ɵɵelementEnd()();
|
|
299
|
-
i0.ɵɵelementStart(7, "div",
|
|
312
|
+
i0.ɵɵelementStart(7, "div", 62);
|
|
300
313
|
i0.ɵɵtext(8);
|
|
301
314
|
i0.ɵɵelementEnd();
|
|
302
|
-
i0.ɵɵtemplate(9,
|
|
315
|
+
i0.ɵɵtemplate(9, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_9_Template, 3, 1, "div", 63);
|
|
303
316
|
i0.ɵɵelementEnd();
|
|
304
|
-
i0.ɵɵelementStart(10, "div",
|
|
305
|
-
i0.ɵɵelement(12, "i",
|
|
317
|
+
i0.ɵɵelementStart(10, "div", 59)(11, "div", 60);
|
|
318
|
+
i0.ɵɵelement(12, "i", 64);
|
|
306
319
|
i0.ɵɵelementStart(13, "h4");
|
|
307
320
|
i0.ɵɵtext(14, "Completion Tokens");
|
|
308
321
|
i0.ɵɵelementEnd()();
|
|
309
|
-
i0.ɵɵelementStart(15, "div",
|
|
322
|
+
i0.ɵɵelementStart(15, "div", 62);
|
|
310
323
|
i0.ɵɵtext(16);
|
|
311
324
|
i0.ɵɵelementEnd();
|
|
312
|
-
i0.ɵɵtemplate(17,
|
|
325
|
+
i0.ɵɵtemplate(17, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_17_Template, 3, 1, "div", 63);
|
|
313
326
|
i0.ɵɵelementEnd();
|
|
314
|
-
i0.ɵɵelementStart(18, "div",
|
|
315
|
-
i0.ɵɵelement(20, "i",
|
|
327
|
+
i0.ɵɵelementStart(18, "div", 59)(19, "div", 60);
|
|
328
|
+
i0.ɵɵelement(20, "i", 26);
|
|
316
329
|
i0.ɵɵelementStart(21, "h4");
|
|
317
330
|
i0.ɵɵtext(22, "Total Tokens");
|
|
318
331
|
i0.ɵɵelementEnd()();
|
|
319
|
-
i0.ɵɵelementStart(23, "div",
|
|
332
|
+
i0.ɵɵelementStart(23, "div", 62);
|
|
320
333
|
i0.ɵɵtext(24);
|
|
321
334
|
i0.ɵɵelementEnd();
|
|
322
|
-
i0.ɵɵtemplate(25,
|
|
335
|
+
i0.ɵɵtemplate(25, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_25_Template, 3, 1, "div", 63);
|
|
323
336
|
i0.ɵɵelementEnd();
|
|
324
|
-
i0.ɵɵelementStart(26, "div",
|
|
325
|
-
i0.ɵɵelement(28, "i",
|
|
337
|
+
i0.ɵɵelementStart(26, "div", 59)(27, "div", 60);
|
|
338
|
+
i0.ɵɵelement(28, "i", 27);
|
|
326
339
|
i0.ɵɵelementStart(29, "h4");
|
|
327
340
|
i0.ɵɵtext(30, "Cost");
|
|
328
341
|
i0.ɵɵelementEnd()();
|
|
329
|
-
i0.ɵɵelementStart(31, "div",
|
|
342
|
+
i0.ɵɵelementStart(31, "div", 62);
|
|
330
343
|
i0.ɵɵtext(32);
|
|
331
344
|
i0.ɵɵelementEnd();
|
|
332
|
-
i0.ɵɵtemplate(33,
|
|
345
|
+
i0.ɵɵtemplate(33, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_33_Template, 3, 1, "div", 63)(34, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_34_Template, 2, 1, "div", 65);
|
|
333
346
|
i0.ɵɵelementEnd()();
|
|
334
|
-
i0.ɵɵelementStart(35, "div",
|
|
335
|
-
i0.ɵɵtemplate(36,
|
|
347
|
+
i0.ɵɵelementStart(35, "div", 66);
|
|
348
|
+
i0.ɵɵtemplate(36, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_36_Template, 5, 1, "div", 67)(37, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_37_Template, 5, 1, "div", 67)(38, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_38_Template, 6, 1, "div", 67);
|
|
336
349
|
i0.ɵɵelementEnd()();
|
|
337
350
|
} if (rf & 2) {
|
|
338
351
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -361,8 +374,276 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Template(
|
|
|
361
374
|
i0.ɵɵadvance();
|
|
362
375
|
i0.ɵɵconditional(ctx_r1.record.AgentID ? 38 : -1);
|
|
363
376
|
} }
|
|
364
|
-
function
|
|
365
|
-
i0.ɵɵelementStart(0, "span",
|
|
377
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
378
|
+
i0.ɵɵelementStart(0, "span", 71);
|
|
379
|
+
i0.ɵɵtext(1);
|
|
380
|
+
i0.ɵɵelementEnd();
|
|
381
|
+
} if (rf & 2) {
|
|
382
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
383
|
+
i0.ɵɵadvance();
|
|
384
|
+
i0.ɵɵtextInterpolate1("(", ctx_r1.record.ValidationAttemptCount, " attempts)");
|
|
385
|
+
} }
|
|
386
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
387
|
+
i0.ɵɵelementStart(0, "span", 72);
|
|
388
|
+
i0.ɵɵtext(1, "Passed");
|
|
389
|
+
i0.ɵɵelementEnd();
|
|
390
|
+
} }
|
|
391
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
392
|
+
i0.ɵɵelementStart(0, "span", 51);
|
|
393
|
+
i0.ɵɵtext(1, "Failed");
|
|
394
|
+
i0.ɵɵelementEnd();
|
|
395
|
+
} }
|
|
396
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
397
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
398
|
+
i0.ɵɵelement(1, "i", 70);
|
|
399
|
+
i0.ɵɵtext(2, " Validation & Retries ");
|
|
400
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Conditional_3_Template, 2, 1, "span", 71)(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Conditional_4_Template, 2, 0, "span", 72)(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Conditional_5_Template, 2, 0, "span", 51);
|
|
401
|
+
i0.ɵɵelementEnd();
|
|
402
|
+
} if (rf & 2) {
|
|
403
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
404
|
+
i0.ɵɵadvance(3);
|
|
405
|
+
i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 1 ? 3 : -1);
|
|
406
|
+
i0.ɵɵadvance();
|
|
407
|
+
i0.ɵɵconditional(ctx_r1.record.FinalValidationPassed ? 4 : ctx_r1.record.FinalValidationPassed === false ? 5 : -1);
|
|
408
|
+
} }
|
|
409
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_29_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
410
|
+
i0.ɵɵelementStart(0, "span", 83);
|
|
411
|
+
i0.ɵɵtext(1);
|
|
412
|
+
i0.ɵɵelementEnd();
|
|
413
|
+
} if (rf & 2) {
|
|
414
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
415
|
+
i0.ɵɵadvance();
|
|
416
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.record.ValidationErrorCount, " validation errors");
|
|
417
|
+
} }
|
|
418
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
419
|
+
i0.ɵɵelementStart(0, "div", 78)(1, "h5");
|
|
420
|
+
i0.ɵɵelement(2, "i", 53);
|
|
421
|
+
i0.ɵɵtext(3, " Final Validation Error");
|
|
422
|
+
i0.ɵɵelementEnd();
|
|
423
|
+
i0.ɵɵelementStart(4, "p");
|
|
424
|
+
i0.ɵɵtext(5);
|
|
425
|
+
i0.ɵɵelementEnd();
|
|
426
|
+
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_29_Conditional_6_Template, 2, 1, "span", 83);
|
|
427
|
+
i0.ɵɵelementEnd();
|
|
428
|
+
} if (rf & 2) {
|
|
429
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
430
|
+
i0.ɵɵadvance(5);
|
|
431
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.FinalValidationError);
|
|
432
|
+
i0.ɵɵadvance();
|
|
433
|
+
i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationErrorCount && ctx_r1.record.ValidationErrorCount > 0 ? 6 : -1);
|
|
434
|
+
} }
|
|
435
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
436
|
+
i0.ɵɵelementStart(0, "div", 79)(1, "h5");
|
|
437
|
+
i0.ɵɵelement(2, "i", 84);
|
|
438
|
+
i0.ɵɵtext(3, " Most Common Error");
|
|
439
|
+
i0.ɵɵelementEnd();
|
|
440
|
+
i0.ɵɵelementStart(4, "p");
|
|
441
|
+
i0.ɵɵtext(5);
|
|
442
|
+
i0.ɵɵelementEnd()();
|
|
443
|
+
} if (rf & 2) {
|
|
444
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
445
|
+
i0.ɵɵadvance(5);
|
|
446
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.CommonValidationError);
|
|
447
|
+
} }
|
|
448
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
449
|
+
i0.ɵɵelementStart(0, "div", 80)(1, "h4");
|
|
450
|
+
i0.ɵɵtext(2, "Retry Timeline");
|
|
451
|
+
i0.ɵɵelementEnd();
|
|
452
|
+
i0.ɵɵelementStart(3, "div", 85)(4, "div", 86);
|
|
453
|
+
i0.ɵɵelement(5, "i", 22);
|
|
454
|
+
i0.ɵɵelementStart(6, "span");
|
|
455
|
+
i0.ɵɵtext(7);
|
|
456
|
+
i0.ɵɵpipe(8, "date");
|
|
457
|
+
i0.ɵɵelementEnd()();
|
|
458
|
+
i0.ɵɵelementStart(9, "div", 86);
|
|
459
|
+
i0.ɵɵelement(10, "i", 87);
|
|
460
|
+
i0.ɵɵelementStart(11, "span");
|
|
461
|
+
i0.ɵɵtext(12);
|
|
462
|
+
i0.ɵɵpipe(13, "date");
|
|
463
|
+
i0.ɵɵelementEnd()();
|
|
464
|
+
i0.ɵɵelementStart(14, "div", 86);
|
|
465
|
+
i0.ɵɵelement(15, "i", 88);
|
|
466
|
+
i0.ɵɵelementStart(16, "span");
|
|
467
|
+
i0.ɵɵtext(17);
|
|
468
|
+
i0.ɵɵelementEnd()()()();
|
|
469
|
+
} if (rf & 2) {
|
|
470
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
471
|
+
i0.ɵɵadvance(7);
|
|
472
|
+
i0.ɵɵtextInterpolate1("First Attempt: ", i0.ɵɵpipeBind2(8, 3, ctx_r1.record.FirstAttemptAt, "short"), "");
|
|
473
|
+
i0.ɵɵadvance(5);
|
|
474
|
+
i0.ɵɵtextInterpolate1("Last Attempt: ", i0.ɵɵpipeBind2(13, 6, ctx_r1.record.LastAttemptAt, "short"), "");
|
|
475
|
+
i0.ɵɵadvance(5);
|
|
476
|
+
i0.ɵɵtextInterpolate1("Total Retry Duration: ", ctx_r1.formatDuration(ctx_r1.record.TotalRetryDurationMS), "");
|
|
477
|
+
} }
|
|
478
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
479
|
+
i0.ɵɵelementStart(0, "span", 83);
|
|
480
|
+
i0.ɵɵtext(1);
|
|
481
|
+
i0.ɵɵelementEnd();
|
|
482
|
+
} if (rf & 2) {
|
|
483
|
+
const attempt_r9 = i0.ɵɵnextContext(2).$implicit;
|
|
484
|
+
i0.ɵɵadvance();
|
|
485
|
+
i0.ɵɵtextInterpolate1("(", attempt_r9.validationErrorCount, " errors)");
|
|
486
|
+
} }
|
|
487
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
488
|
+
i0.ɵɵelementStart(0, "span", 96);
|
|
489
|
+
i0.ɵɵtext(1);
|
|
490
|
+
i0.ɵɵelementEnd();
|
|
491
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 83);
|
|
492
|
+
} if (rf & 2) {
|
|
493
|
+
const attempt_r9 = i0.ɵɵnextContext().$implicit;
|
|
494
|
+
i0.ɵɵadvance();
|
|
495
|
+
i0.ɵɵtextInterpolate(attempt_r9.errorMessage || "Unknown error");
|
|
496
|
+
i0.ɵɵadvance();
|
|
497
|
+
i0.ɵɵconditional(attempt_r9.validationErrorCount > 0 ? 2 : -1);
|
|
498
|
+
} }
|
|
499
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
500
|
+
i0.ɵɵelementStart(0, "span", 95);
|
|
501
|
+
i0.ɵɵtext(1);
|
|
502
|
+
i0.ɵɵelementEnd();
|
|
503
|
+
} if (rf & 2) {
|
|
504
|
+
const attempt_r9 = i0.ɵɵnextContext().$implicit;
|
|
505
|
+
i0.ɵɵadvance();
|
|
506
|
+
i0.ɵɵtextInterpolate1("Output: ", attempt_r9.outputLength, " chars");
|
|
507
|
+
} }
|
|
508
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
509
|
+
i0.ɵɵelementStart(0, "div", 91)(1, "div", 92);
|
|
510
|
+
i0.ɵɵelement(2, "i");
|
|
511
|
+
i0.ɵɵtext(3);
|
|
512
|
+
i0.ɵɵelementEnd();
|
|
513
|
+
i0.ɵɵelementStart(4, "div", 93)(5, "span", 94);
|
|
514
|
+
i0.ɵɵtext(6);
|
|
515
|
+
i0.ɵɵelementEnd();
|
|
516
|
+
i0.ɵɵtemplate(7, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_For_5_Conditional_7_Template, 3, 2)(8, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_For_5_Conditional_8_Template, 2, 1, "span", 95);
|
|
517
|
+
i0.ɵɵelementEnd()();
|
|
518
|
+
} if (rf & 2) {
|
|
519
|
+
const attempt_r9 = ctx.$implicit;
|
|
520
|
+
i0.ɵɵclassProp("success", attempt_r9.success)("failed", !attempt_r9.success);
|
|
521
|
+
i0.ɵɵadvance(2);
|
|
522
|
+
i0.ɵɵclassMap(attempt_r9.success ? "fa-solid fa-check" : "fa-solid fa-times");
|
|
523
|
+
i0.ɵɵadvance();
|
|
524
|
+
i0.ɵɵtextInterpolate1(" Attempt #", attempt_r9.attemptNumber, " ");
|
|
525
|
+
i0.ɵɵadvance(3);
|
|
526
|
+
i0.ɵɵtextInterpolate(attempt_r9.timestamp);
|
|
527
|
+
i0.ɵɵadvance();
|
|
528
|
+
i0.ɵɵconditional(!attempt_r9.success ? 7 : -1);
|
|
529
|
+
i0.ɵɵadvance();
|
|
530
|
+
i0.ɵɵconditional(attempt_r9.outputLength ? 8 : -1);
|
|
531
|
+
} }
|
|
532
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
533
|
+
i0.ɵɵelementStart(0, "div", 81)(1, "h4");
|
|
534
|
+
i0.ɵɵtext(2, "Validation Attempts");
|
|
535
|
+
i0.ɵɵelementEnd();
|
|
536
|
+
i0.ɵɵelementStart(3, "div", 89);
|
|
537
|
+
i0.ɵɵrepeaterCreate(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_For_5_Template, 9, 10, "div", 90, _forTrack0);
|
|
538
|
+
i0.ɵɵelementEnd()();
|
|
539
|
+
} if (rf & 2) {
|
|
540
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
541
|
+
i0.ɵɵadvance(4);
|
|
542
|
+
i0.ɵɵrepeater(ctx_r1.validationAttempts);
|
|
543
|
+
} }
|
|
544
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
545
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
546
|
+
i0.ɵɵelementStart(0, "div", 82)(1, "h4");
|
|
547
|
+
i0.ɵɵtext(2, "Validation Summary Details");
|
|
548
|
+
i0.ɵɵelementEnd();
|
|
549
|
+
i0.ɵɵelementStart(3, "div", 97)(4, "mj-code-editor", 98);
|
|
550
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_33_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationSummary, $event) || (ctx_r1.formattedValidationSummary = $event); return i0.ɵɵresetView($event); });
|
|
551
|
+
i0.ɵɵelementEnd()()();
|
|
552
|
+
} if (rf & 2) {
|
|
553
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
554
|
+
i0.ɵɵadvance(4);
|
|
555
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationSummary);
|
|
556
|
+
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
557
|
+
} }
|
|
558
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
559
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
560
|
+
i0.ɵɵelementStart(0, "div", 82)(1, "h4");
|
|
561
|
+
i0.ɵɵtext(2, "Validation Attempts (Raw JSON)");
|
|
562
|
+
i0.ɵɵelementEnd();
|
|
563
|
+
i0.ɵɵelementStart(3, "div", 97)(4, "mj-code-editor", 99);
|
|
564
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_34_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationAttempts, $event) || (ctx_r1.formattedValidationAttempts = $event); return i0.ɵɵresetView($event); });
|
|
565
|
+
i0.ɵɵelementEnd()()();
|
|
566
|
+
} if (rf & 2) {
|
|
567
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
568
|
+
i0.ɵɵadvance(4);
|
|
569
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationAttempts);
|
|
570
|
+
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
571
|
+
} }
|
|
572
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
573
|
+
i0.ɵɵelementStart(0, "div", 42)(1, "div", 73)(2, "div", 74)(3, "h4");
|
|
574
|
+
i0.ɵɵtext(4, "Validation Summary");
|
|
575
|
+
i0.ɵɵelementEnd();
|
|
576
|
+
i0.ɵɵelementStart(5, "div", 75);
|
|
577
|
+
i0.ɵɵelement(6, "i");
|
|
578
|
+
i0.ɵɵtext(7);
|
|
579
|
+
i0.ɵɵelementEnd()();
|
|
580
|
+
i0.ɵɵelementStart(8, "div", 76)(9, "div", 77)(10, "div", 24);
|
|
581
|
+
i0.ɵɵtext(11, "Total Attempts");
|
|
582
|
+
i0.ɵɵelementEnd();
|
|
583
|
+
i0.ɵɵelementStart(12, "div", 25);
|
|
584
|
+
i0.ɵɵtext(13);
|
|
585
|
+
i0.ɵɵelementEnd()();
|
|
586
|
+
i0.ɵɵelementStart(14, "div", 77)(15, "div", 24);
|
|
587
|
+
i0.ɵɵtext(16, "Successful");
|
|
588
|
+
i0.ɵɵelementEnd();
|
|
589
|
+
i0.ɵɵelementStart(17, "div", 25);
|
|
590
|
+
i0.ɵɵtext(18);
|
|
591
|
+
i0.ɵɵelementEnd()();
|
|
592
|
+
i0.ɵɵelementStart(19, "div", 77)(20, "div", 24);
|
|
593
|
+
i0.ɵɵtext(21, "Behavior");
|
|
594
|
+
i0.ɵɵelementEnd();
|
|
595
|
+
i0.ɵɵelementStart(22, "div", 25);
|
|
596
|
+
i0.ɵɵtext(23);
|
|
597
|
+
i0.ɵɵelementEnd()();
|
|
598
|
+
i0.ɵɵelementStart(24, "div", 77)(25, "div", 24);
|
|
599
|
+
i0.ɵɵtext(26, "Retry Strategy");
|
|
600
|
+
i0.ɵɵelementEnd();
|
|
601
|
+
i0.ɵɵelementStart(27, "div", 25);
|
|
602
|
+
i0.ɵɵtext(28);
|
|
603
|
+
i0.ɵɵelementEnd()()();
|
|
604
|
+
i0.ɵɵtemplate(29, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_29_Template, 7, 2, "div", 78)(30, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_30_Template, 6, 1, "div", 79);
|
|
605
|
+
i0.ɵɵelementEnd();
|
|
606
|
+
i0.ɵɵtemplate(31, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_31_Template, 18, 9, "div", 80)(32, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_Template, 6, 0, "div", 81)(33, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_33_Template, 5, 4, "div", 82)(34, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_34_Template, 5, 4, "div", 82);
|
|
607
|
+
i0.ɵɵelementEnd();
|
|
608
|
+
} if (rf & 2) {
|
|
609
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
610
|
+
i0.ɵɵadvance(5);
|
|
611
|
+
i0.ɵɵclassProp("success", ctx_r1.record.FinalValidationPassed)("failed", !ctx_r1.record.FinalValidationPassed);
|
|
612
|
+
i0.ɵɵadvance();
|
|
613
|
+
i0.ɵɵclassMap(ctx_r1.record.FinalValidationPassed ? "fa-solid fa-check-circle" : "fa-solid fa-times-circle");
|
|
614
|
+
i0.ɵɵadvance();
|
|
615
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.FinalValidationPassed ? "Validation Passed" : "Validation Failed", " ");
|
|
616
|
+
i0.ɵɵadvance(6);
|
|
617
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.ValidationAttemptCount || 0);
|
|
618
|
+
i0.ɵɵadvance(5);
|
|
619
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.SuccessfulValidationCount || 0);
|
|
620
|
+
i0.ɵɵadvance(5);
|
|
621
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.ValidationBehavior || "Not set");
|
|
622
|
+
i0.ɵɵadvance(5);
|
|
623
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.RetryStrategy || "Not set");
|
|
624
|
+
i0.ɵɵadvance();
|
|
625
|
+
i0.ɵɵconditional(ctx_r1.record.FinalValidationError ? 29 : -1);
|
|
626
|
+
i0.ɵɵadvance();
|
|
627
|
+
i0.ɵɵconditional(ctx_r1.record.CommonValidationError && ctx_r1.record.CommonValidationError !== ctx_r1.record.FinalValidationError ? 30 : -1);
|
|
628
|
+
i0.ɵɵadvance();
|
|
629
|
+
i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 1 ? 31 : -1);
|
|
630
|
+
i0.ɵɵadvance();
|
|
631
|
+
i0.ɵɵconditional(ctx_r1.validationAttempts && ctx_r1.validationAttempts.length > 0 ? 32 : -1);
|
|
632
|
+
i0.ɵɵadvance();
|
|
633
|
+
i0.ɵɵconditional(ctx_r1.validationSummary ? 33 : -1);
|
|
634
|
+
i0.ɵɵadvance();
|
|
635
|
+
i0.ɵɵconditional(ctx_r1.record.ValidationAttempts ? 34 : -1);
|
|
636
|
+
} }
|
|
637
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_Template(rf, ctx) { if (rf & 1) {
|
|
638
|
+
i0.ɵɵelementStart(0, "kendo-panelbar-item", 29);
|
|
639
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Template, 6, 2, "ng-template", 30)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Template, 35, 17, "ng-template", 31);
|
|
640
|
+
i0.ɵɵelementEnd();
|
|
641
|
+
} if (rf & 2) {
|
|
642
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
643
|
+
i0.ɵɵproperty("expanded", ctx_r1.validationExpanded);
|
|
644
|
+
} }
|
|
645
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
646
|
+
i0.ɵɵelementStart(0, "span", 71);
|
|
366
647
|
i0.ɵɵtext(1);
|
|
367
648
|
i0.ɵɵelementEnd();
|
|
368
649
|
} if (rf & 2) {
|
|
@@ -370,47 +651,47 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_templa
|
|
|
370
651
|
i0.ɵɵadvance();
|
|
371
652
|
i0.ɵɵtextInterpolate1("(", ctx_r1.childRuns.length, " children)");
|
|
372
653
|
} }
|
|
373
|
-
function
|
|
374
|
-
i0.ɵɵelementStart(0, "span",
|
|
375
|
-
i0.ɵɵelement(1, "i",
|
|
654
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
655
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
656
|
+
i0.ɵɵelement(1, "i", 100);
|
|
376
657
|
i0.ɵɵtext(2, " Run Hierarchy ");
|
|
377
|
-
i0.ɵɵtemplate(3,
|
|
658
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_1_Conditional_3_Template, 2, 1, "span", 71);
|
|
378
659
|
i0.ɵɵelementEnd();
|
|
379
660
|
} if (rf & 2) {
|
|
380
661
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
381
662
|
i0.ɵɵadvance(3);
|
|
382
663
|
i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 3 : -1);
|
|
383
664
|
} }
|
|
384
|
-
function
|
|
385
|
-
const
|
|
386
|
-
i0.ɵɵelementStart(0, "div",
|
|
387
|
-
i0.ɵɵelement(2, "i",
|
|
665
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
666
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
667
|
+
i0.ɵɵelementStart(0, "div", 101)(1, "h4");
|
|
668
|
+
i0.ɵɵelement(2, "i", 103);
|
|
388
669
|
i0.ɵɵtext(3, " Parent Run");
|
|
389
670
|
i0.ɵɵelementEnd();
|
|
390
|
-
i0.ɵɵelementStart(4, "div",
|
|
391
|
-
i0.ɵɵlistener("click", function
|
|
392
|
-
i0.ɵɵelementStart(5, "div",
|
|
671
|
+
i0.ɵɵelementStart(4, "div", 104);
|
|
672
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_1_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
|
|
673
|
+
i0.ɵɵelementStart(5, "div", 105);
|
|
393
674
|
i0.ɵɵelement(6, "i");
|
|
394
675
|
i0.ɵɵelementEnd();
|
|
395
|
-
i0.ɵɵelementStart(7, "div",
|
|
676
|
+
i0.ɵɵelementStart(7, "div", 106)(8, "div", 107);
|
|
396
677
|
i0.ɵɵtext(9);
|
|
397
|
-
i0.ɵɵelementStart(10, "span",
|
|
678
|
+
i0.ɵɵelementStart(10, "span", 108);
|
|
398
679
|
i0.ɵɵtext(11);
|
|
399
680
|
i0.ɵɵelementEnd()();
|
|
400
|
-
i0.ɵɵelementStart(12, "div",
|
|
401
|
-
i0.ɵɵelement(14, "i",
|
|
681
|
+
i0.ɵɵelementStart(12, "div", 109)(13, "span");
|
|
682
|
+
i0.ɵɵelement(14, "i", 22);
|
|
402
683
|
i0.ɵɵtext(15);
|
|
403
684
|
i0.ɵɵelementEnd();
|
|
404
685
|
i0.ɵɵelementStart(16, "span");
|
|
405
|
-
i0.ɵɵelement(17, "i",
|
|
686
|
+
i0.ɵɵelement(17, "i", 26);
|
|
406
687
|
i0.ɵɵtext(18);
|
|
407
688
|
i0.ɵɵelementEnd();
|
|
408
689
|
i0.ɵɵelementStart(19, "span");
|
|
409
|
-
i0.ɵɵelement(20, "i",
|
|
690
|
+
i0.ɵɵelement(20, "i", 39);
|
|
410
691
|
i0.ɵɵtext(21);
|
|
411
692
|
i0.ɵɵpipe(22, "date");
|
|
412
693
|
i0.ɵɵelementEnd()()();
|
|
413
|
-
i0.ɵɵelement(23, "i",
|
|
694
|
+
i0.ɵɵelement(23, "i", 69);
|
|
414
695
|
i0.ɵɵelementEnd()();
|
|
415
696
|
} if (rf & 2) {
|
|
416
697
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -429,82 +710,82 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_templa
|
|
|
429
710
|
i0.ɵɵadvance(3);
|
|
430
711
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"), "");
|
|
431
712
|
} }
|
|
432
|
-
function
|
|
433
|
-
i0.ɵɵelementStart(0, "span",
|
|
713
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
714
|
+
i0.ɵɵelementStart(0, "span", 114);
|
|
434
715
|
i0.ɵɵtext(1);
|
|
435
716
|
i0.ɵɵelementEnd();
|
|
436
717
|
} if (rf & 2) {
|
|
437
|
-
const
|
|
718
|
+
const childRun_r14 = i0.ɵɵnextContext().$implicit;
|
|
438
719
|
i0.ɵɵadvance();
|
|
439
|
-
i0.ɵɵtextInterpolate1("#",
|
|
720
|
+
i0.ɵɵtextInterpolate1("#", childRun_r14.ExecutionOrder, "");
|
|
440
721
|
} }
|
|
441
|
-
function
|
|
442
|
-
const
|
|
443
|
-
i0.ɵɵelementStart(0, "div",
|
|
444
|
-
i0.ɵɵlistener("click", function
|
|
445
|
-
i0.ɵɵelementStart(1, "div",
|
|
722
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
723
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
724
|
+
i0.ɵɵelementStart(0, "div", 113);
|
|
725
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_For_6_Template_div_click_0_listener() { const childRun_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r14.ID)); });
|
|
726
|
+
i0.ɵɵelementStart(1, "div", 105);
|
|
446
727
|
i0.ɵɵelement(2, "i");
|
|
447
728
|
i0.ɵɵelementEnd();
|
|
448
|
-
i0.ɵɵelementStart(3, "div",
|
|
729
|
+
i0.ɵɵelementStart(3, "div", 106)(4, "div", 107);
|
|
449
730
|
i0.ɵɵtext(5);
|
|
450
|
-
i0.ɵɵtemplate(6,
|
|
451
|
-
i0.ɵɵelementStart(7, "span",
|
|
731
|
+
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_For_6_Conditional_6_Template, 2, 1, "span", 114);
|
|
732
|
+
i0.ɵɵelementStart(7, "span", 108);
|
|
452
733
|
i0.ɵɵtext(8);
|
|
453
734
|
i0.ɵɵelementEnd()();
|
|
454
|
-
i0.ɵɵelementStart(9, "div",
|
|
735
|
+
i0.ɵɵelementStart(9, "div", 109)(10, "span", 115);
|
|
455
736
|
i0.ɵɵelement(11, "i");
|
|
456
737
|
i0.ɵɵtext(12);
|
|
457
738
|
i0.ɵɵelementEnd();
|
|
458
739
|
i0.ɵɵelementStart(13, "span");
|
|
459
|
-
i0.ɵɵelement(14, "i",
|
|
740
|
+
i0.ɵɵelement(14, "i", 22);
|
|
460
741
|
i0.ɵɵtext(15);
|
|
461
742
|
i0.ɵɵelementEnd();
|
|
462
743
|
i0.ɵɵelementStart(16, "span");
|
|
463
|
-
i0.ɵɵelement(17, "i",
|
|
744
|
+
i0.ɵɵelement(17, "i", 26);
|
|
464
745
|
i0.ɵɵtext(18);
|
|
465
746
|
i0.ɵɵelementEnd()()();
|
|
466
|
-
i0.ɵɵelement(19, "i",
|
|
747
|
+
i0.ɵɵelement(19, "i", 69);
|
|
467
748
|
i0.ɵɵelementEnd();
|
|
468
749
|
} if (rf & 2) {
|
|
469
|
-
const
|
|
750
|
+
const childRun_r14 = ctx.$implicit;
|
|
470
751
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
471
752
|
i0.ɵɵadvance();
|
|
472
753
|
i0.ɵɵstyleProp("background-color", ctx_r1.getStatusColor() + "20");
|
|
473
754
|
i0.ɵɵadvance();
|
|
474
|
-
i0.ɵɵclassMap("fa-solid " + ctx_r1.getRunTypeIcon(
|
|
755
|
+
i0.ɵɵclassMap("fa-solid " + ctx_r1.getRunTypeIcon(childRun_r14.RunType));
|
|
475
756
|
i0.ɵɵadvance(3);
|
|
476
|
-
i0.ɵɵtextInterpolate1(" Child Run #",
|
|
757
|
+
i0.ɵɵtextInterpolate1(" Child Run #", childRun_r14.ID.substring(0, 8), " ");
|
|
477
758
|
i0.ɵɵadvance();
|
|
478
|
-
i0.ɵɵconditional(
|
|
759
|
+
i0.ɵɵconditional(childRun_r14.ExecutionOrder !== null ? 6 : -1);
|
|
479
760
|
i0.ɵɵadvance(2);
|
|
480
|
-
i0.ɵɵtextInterpolate(
|
|
761
|
+
i0.ɵɵtextInterpolate(childRun_r14.RunType);
|
|
481
762
|
i0.ɵɵadvance(2);
|
|
482
763
|
i0.ɵɵstyleProp("color", ctx_r1.getStatusColor());
|
|
483
764
|
i0.ɵɵadvance();
|
|
484
765
|
i0.ɵɵclassMap("fa-solid " + ctx_r1.getStatusIcon());
|
|
485
766
|
i0.ɵɵadvance();
|
|
486
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
767
|
+
i0.ɵɵtextInterpolate1(" ", childRun_r14.Success ? "Success" : childRun_r14.ErrorMessage ? "Failed" : "Running", " ");
|
|
487
768
|
i0.ɵɵadvance(3);
|
|
488
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(
|
|
769
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(childRun_r14.ExecutionTimeMS), "");
|
|
489
770
|
i0.ɵɵadvance(3);
|
|
490
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(
|
|
771
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r14.TokensUsed), "");
|
|
491
772
|
} }
|
|
492
|
-
function
|
|
493
|
-
i0.ɵɵelementStart(0, "div",
|
|
494
|
-
i0.ɵɵelement(2, "i",
|
|
773
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
774
|
+
i0.ɵɵelementStart(0, "div", 102)(1, "h4");
|
|
775
|
+
i0.ɵɵelement(2, "i", 110);
|
|
495
776
|
i0.ɵɵtext(3, " Child Runs");
|
|
496
777
|
i0.ɵɵelementEnd();
|
|
497
|
-
i0.ɵɵelementStart(4, "div",
|
|
498
|
-
i0.ɵɵrepeaterCreate(5,
|
|
778
|
+
i0.ɵɵelementStart(4, "div", 111);
|
|
779
|
+
i0.ɵɵrepeaterCreate(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_For_6_Template, 20, 14, "div", 112, _forTrack1);
|
|
499
780
|
i0.ɵɵelementEnd()();
|
|
500
781
|
} if (rf & 2) {
|
|
501
782
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
502
783
|
i0.ɵɵadvance(5);
|
|
503
784
|
i0.ɵɵrepeater(ctx_r1.childRuns);
|
|
504
785
|
} }
|
|
505
|
-
function
|
|
506
|
-
i0.ɵɵelementStart(0, "div",
|
|
507
|
-
i0.ɵɵtemplate(1,
|
|
786
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
787
|
+
i0.ɵɵelementStart(0, "div", 42);
|
|
788
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_1_Template, 24, 12, "div", 101)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_Template, 7, 0, "div", 102);
|
|
508
789
|
i0.ɵɵelementEnd();
|
|
509
790
|
} if (rf & 2) {
|
|
510
791
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -513,71 +794,83 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_56_ng_templa
|
|
|
513
794
|
i0.ɵɵadvance();
|
|
514
795
|
i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 2 : -1);
|
|
515
796
|
} }
|
|
516
|
-
function
|
|
517
|
-
i0.ɵɵelementStart(0, "kendo-panelbar-item",
|
|
518
|
-
i0.ɵɵtemplate(1,
|
|
797
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_Template(rf, ctx) { if (rf & 1) {
|
|
798
|
+
i0.ɵɵelementStart(0, "kendo-panelbar-item", 29);
|
|
799
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_1_Template, 4, 1, "ng-template", 30)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Template, 3, 2, "ng-template", 31);
|
|
519
800
|
i0.ɵɵelementEnd();
|
|
520
801
|
} if (rf & 2) {
|
|
521
802
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
522
803
|
i0.ɵɵproperty("expanded", ctx_r1.hierarchyExpanded);
|
|
523
804
|
} }
|
|
524
|
-
function
|
|
525
|
-
i0.ɵɵelementStart(0, "span",
|
|
526
|
-
i0.ɵɵelement(1, "i",
|
|
805
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Template(rf, ctx) { if (rf & 1) {
|
|
806
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
807
|
+
i0.ɵɵelement(1, "i", 116);
|
|
527
808
|
i0.ɵɵtext(2, " Additional Details ");
|
|
528
809
|
i0.ɵɵelementEnd();
|
|
529
810
|
} }
|
|
530
|
-
function
|
|
531
|
-
const
|
|
532
|
-
i0.ɵɵelementStart(0, "div",
|
|
533
|
-
i0.ɵɵtext(2, "
|
|
811
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
812
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
813
|
+
i0.ɵɵelementStart(0, "div", 118)(1, "label");
|
|
814
|
+
i0.ɵɵtext(2, "Agent");
|
|
534
815
|
i0.ɵɵelementEnd();
|
|
535
|
-
i0.ɵɵelementStart(3, "div",
|
|
536
|
-
i0.ɵɵlistener("click", function
|
|
537
|
-
i0.ɵɵelement(4, "i",
|
|
816
|
+
i0.ɵɵelementStart(3, "div", 126);
|
|
817
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_2_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Agents", ctx_r1.record.AgentID)); });
|
|
818
|
+
i0.ɵɵelement(4, "i", 127);
|
|
538
819
|
i0.ɵɵtext(5);
|
|
539
|
-
i0.ɵɵelement(6, "i",
|
|
820
|
+
i0.ɵɵelement(6, "i", 69);
|
|
540
821
|
i0.ɵɵelementEnd()();
|
|
541
822
|
} if (rf & 2) {
|
|
542
823
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
543
824
|
i0.ɵɵadvance(5);
|
|
544
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.
|
|
825
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Unknown", " ");
|
|
545
826
|
} }
|
|
546
|
-
function
|
|
547
|
-
|
|
548
|
-
i0.ɵɵ
|
|
549
|
-
i0.ɵɵtext(2, "Agent");
|
|
827
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
828
|
+
i0.ɵɵelementStart(0, "div", 118)(1, "label");
|
|
829
|
+
i0.ɵɵtext(2, "Configuration");
|
|
550
830
|
i0.ɵɵelementEnd();
|
|
551
|
-
i0.ɵɵelementStart(3, "div",
|
|
552
|
-
i0.ɵɵ
|
|
553
|
-
i0.ɵɵelement(4, "i", 90);
|
|
831
|
+
i0.ɵɵelementStart(3, "div", 119);
|
|
832
|
+
i0.ɵɵelement(4, "i", 128);
|
|
554
833
|
i0.ɵɵtext(5);
|
|
555
|
-
i0.ɵɵelement(6, "i", 66);
|
|
556
834
|
i0.ɵɵelementEnd()();
|
|
557
835
|
} if (rf & 2) {
|
|
558
836
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
559
837
|
i0.ɵɵadvance(5);
|
|
560
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.
|
|
838
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Configuration || "Unknown", " ");
|
|
561
839
|
} }
|
|
562
|
-
function
|
|
563
|
-
i0.ɵɵelementStart(0, "div",
|
|
564
|
-
i0.ɵɵtext(2, "
|
|
840
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
841
|
+
i0.ɵɵelementStart(0, "div", 118)(1, "label");
|
|
842
|
+
i0.ɵɵtext(2, "Run Type");
|
|
565
843
|
i0.ɵɵelementEnd();
|
|
566
|
-
i0.ɵɵelementStart(3, "div",
|
|
567
|
-
i0.ɵɵelement(4, "i"
|
|
844
|
+
i0.ɵɵelementStart(3, "div", 119);
|
|
845
|
+
i0.ɵɵelement(4, "i");
|
|
846
|
+
i0.ɵɵtext(5);
|
|
847
|
+
i0.ɵɵelementEnd()();
|
|
848
|
+
} if (rf & 2) {
|
|
849
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
850
|
+
i0.ɵɵadvance(4);
|
|
851
|
+
i0.ɵɵclassMap("fa-solid " + ctx_r1.getRunTypeIcon(ctx_r1.record.RunType));
|
|
852
|
+
i0.ɵɵadvance();
|
|
853
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
|
|
854
|
+
} }
|
|
855
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
856
|
+
i0.ɵɵelementStart(0, "div", 118)(1, "label");
|
|
857
|
+
i0.ɵɵtext(2, "Response Format");
|
|
858
|
+
i0.ɵɵelementEnd();
|
|
859
|
+
i0.ɵɵelementStart(3, "div", 119);
|
|
860
|
+
i0.ɵɵelement(4, "i", 129);
|
|
568
861
|
i0.ɵɵtext(5);
|
|
569
862
|
i0.ɵɵelementEnd()();
|
|
570
863
|
} if (rf & 2) {
|
|
571
864
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
572
865
|
i0.ɵɵadvance(5);
|
|
573
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.
|
|
866
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.ResponseFormat, " ");
|
|
574
867
|
} }
|
|
575
|
-
function
|
|
576
|
-
i0.ɵɵelementStart(0, "div",
|
|
868
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_48_Template(rf, ctx) { if (rf & 1) {
|
|
869
|
+
i0.ɵɵelementStart(0, "div", 118)(1, "label");
|
|
577
870
|
i0.ɵɵtext(2, "Started At");
|
|
578
871
|
i0.ɵɵelementEnd();
|
|
579
|
-
i0.ɵɵelementStart(3, "div",
|
|
580
|
-
i0.ɵɵelement(4, "i",
|
|
872
|
+
i0.ɵɵelementStart(3, "div", 119);
|
|
873
|
+
i0.ɵɵelement(4, "i", 22);
|
|
581
874
|
i0.ɵɵtext(5);
|
|
582
875
|
i0.ɵɵpipe(6, "date");
|
|
583
876
|
i0.ɵɵelementEnd()();
|
|
@@ -586,12 +879,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Condition
|
|
|
586
879
|
i0.ɵɵadvance(5);
|
|
587
880
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.RunAt, "medium"), " ");
|
|
588
881
|
} }
|
|
589
|
-
function
|
|
590
|
-
i0.ɵɵelementStart(0, "div",
|
|
882
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_49_Template(rf, ctx) { if (rf & 1) {
|
|
883
|
+
i0.ɵɵelementStart(0, "div", 118)(1, "label");
|
|
591
884
|
i0.ɵɵtext(2, "Completed At");
|
|
592
885
|
i0.ɵɵelementEnd();
|
|
593
|
-
i0.ɵɵelementStart(3, "div",
|
|
594
|
-
i0.ɵɵelement(4, "i",
|
|
886
|
+
i0.ɵɵelementStart(3, "div", 119);
|
|
887
|
+
i0.ɵɵelement(4, "i", 130);
|
|
595
888
|
i0.ɵɵtext(5);
|
|
596
889
|
i0.ɵɵpipe(6, "date");
|
|
597
890
|
i0.ɵɵelementEnd()();
|
|
@@ -600,22 +893,102 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Condition
|
|
|
600
893
|
i0.ɵɵadvance(5);
|
|
601
894
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.CompletedAt, "medium"), " ");
|
|
602
895
|
} }
|
|
603
|
-
function
|
|
604
|
-
i0.ɵɵelementStart(0, "div",
|
|
605
|
-
i0.ɵɵtemplate(2,
|
|
896
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Template(rf, ctx) { if (rf & 1) {
|
|
897
|
+
i0.ɵɵelementStart(0, "div", 42)(1, "div", 117);
|
|
898
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_2_Template, 7, 1, "div", 118)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_3_Template, 6, 1, "div", 118)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_4_Template, 6, 3, "div", 118)(5, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_5_Template, 6, 1, "div", 118);
|
|
899
|
+
i0.ɵɵelementStart(6, "div", 118)(7, "label");
|
|
900
|
+
i0.ɵɵtext(8, "Temperature");
|
|
901
|
+
i0.ɵɵelementEnd();
|
|
902
|
+
i0.ɵɵelementStart(9, "div", 119);
|
|
903
|
+
i0.ɵɵelement(10, "i", 120);
|
|
904
|
+
i0.ɵɵtext(11);
|
|
905
|
+
i0.ɵɵelementEnd()();
|
|
906
|
+
i0.ɵɵelementStart(12, "div", 118)(13, "label");
|
|
907
|
+
i0.ɵɵtext(14, "Top P");
|
|
908
|
+
i0.ɵɵelementEnd();
|
|
909
|
+
i0.ɵɵelementStart(15, "div", 119);
|
|
910
|
+
i0.ɵɵelement(16, "i", 121);
|
|
911
|
+
i0.ɵɵtext(17);
|
|
912
|
+
i0.ɵɵelementEnd()();
|
|
913
|
+
i0.ɵɵelementStart(18, "div", 118)(19, "label");
|
|
914
|
+
i0.ɵɵtext(20, "Top K");
|
|
915
|
+
i0.ɵɵelementEnd();
|
|
916
|
+
i0.ɵɵelementStart(21, "div", 119);
|
|
917
|
+
i0.ɵɵelement(22, "i", 122);
|
|
918
|
+
i0.ɵɵtext(23);
|
|
919
|
+
i0.ɵɵelementEnd()();
|
|
920
|
+
i0.ɵɵelementStart(24, "div", 118)(25, "label");
|
|
921
|
+
i0.ɵɵtext(26, "Min P");
|
|
922
|
+
i0.ɵɵelementEnd();
|
|
923
|
+
i0.ɵɵelementStart(27, "div", 119);
|
|
924
|
+
i0.ɵɵelement(28, "i", 123);
|
|
925
|
+
i0.ɵɵtext(29);
|
|
926
|
+
i0.ɵɵelementEnd()();
|
|
927
|
+
i0.ɵɵelementStart(30, "div", 118)(31, "label");
|
|
928
|
+
i0.ɵɵtext(32, "Frequency Penalty");
|
|
929
|
+
i0.ɵɵelementEnd();
|
|
930
|
+
i0.ɵɵelementStart(33, "div", 119);
|
|
931
|
+
i0.ɵɵelement(34, "i", 84);
|
|
932
|
+
i0.ɵɵtext(35);
|
|
933
|
+
i0.ɵɵelementEnd()();
|
|
934
|
+
i0.ɵɵelementStart(36, "div", 118)(37, "label");
|
|
935
|
+
i0.ɵɵtext(38, "Presence Penalty");
|
|
936
|
+
i0.ɵɵelementEnd();
|
|
937
|
+
i0.ɵɵelementStart(39, "div", 119);
|
|
938
|
+
i0.ɵɵelement(40, "i", 124);
|
|
939
|
+
i0.ɵɵtext(41);
|
|
940
|
+
i0.ɵɵelementEnd()();
|
|
941
|
+
i0.ɵɵelementStart(42, "div", 118)(43, "label");
|
|
942
|
+
i0.ɵɵtext(44, "Seed");
|
|
943
|
+
i0.ɵɵelementEnd();
|
|
944
|
+
i0.ɵɵelementStart(45, "div", 119);
|
|
945
|
+
i0.ɵɵelement(46, "i", 125);
|
|
946
|
+
i0.ɵɵtext(47);
|
|
947
|
+
i0.ɵɵelementEnd()();
|
|
948
|
+
i0.ɵɵtemplate(48, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_48_Template, 7, 4, "div", 118)(49, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_49_Template, 7, 4, "div", 118);
|
|
606
949
|
i0.ɵɵelementEnd()();
|
|
607
950
|
} if (rf & 2) {
|
|
608
951
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
609
952
|
i0.ɵɵadvance(2);
|
|
610
|
-
i0.ɵɵconditional(ctx_r1.record.
|
|
953
|
+
i0.ɵɵconditional(ctx_r1.record.AgentID ? 2 : -1);
|
|
611
954
|
i0.ɵɵadvance();
|
|
612
|
-
i0.ɵɵconditional(ctx_r1.record.
|
|
955
|
+
i0.ɵɵconditional(ctx_r1.record.ConfigurationID ? 3 : -1);
|
|
613
956
|
i0.ɵɵadvance();
|
|
614
|
-
i0.ɵɵconditional(ctx_r1.record.
|
|
957
|
+
i0.ɵɵconditional(ctx_r1.record.RunType ? 4 : -1);
|
|
615
958
|
i0.ɵɵadvance();
|
|
616
|
-
i0.ɵɵconditional(ctx_r1.record.
|
|
959
|
+
i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 5 : -1);
|
|
960
|
+
i0.ɵɵadvance(4);
|
|
961
|
+
i0.ɵɵclassProp("null-value", ctx_r1.record.Temperature === null || ctx_r1.record.Temperature === undefined);
|
|
962
|
+
i0.ɵɵadvance(2);
|
|
963
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Temperature !== null && ctx_r1.record.Temperature !== undefined ? ctx_r1.record.Temperature : "\u2014", " ");
|
|
964
|
+
i0.ɵɵadvance(4);
|
|
965
|
+
i0.ɵɵclassProp("null-value", ctx_r1.record.TopP === null || ctx_r1.record.TopP === undefined);
|
|
966
|
+
i0.ɵɵadvance(2);
|
|
967
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.TopP !== null && ctx_r1.record.TopP !== undefined ? ctx_r1.record.TopP : "\u2014", " ");
|
|
968
|
+
i0.ɵɵadvance(4);
|
|
969
|
+
i0.ɵɵclassProp("null-value", ctx_r1.record.TopK === null || ctx_r1.record.TopK === undefined);
|
|
970
|
+
i0.ɵɵadvance(2);
|
|
971
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.TopK !== null && ctx_r1.record.TopK !== undefined ? ctx_r1.record.TopK : "\u2014", " ");
|
|
972
|
+
i0.ɵɵadvance(4);
|
|
973
|
+
i0.ɵɵclassProp("null-value", ctx_r1.record.MinP === null || ctx_r1.record.MinP === undefined);
|
|
974
|
+
i0.ɵɵadvance(2);
|
|
975
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.MinP !== null && ctx_r1.record.MinP !== undefined ? ctx_r1.record.MinP : "\u2014", " ");
|
|
976
|
+
i0.ɵɵadvance(4);
|
|
977
|
+
i0.ɵɵclassProp("null-value", ctx_r1.record.FrequencyPenalty === null || ctx_r1.record.FrequencyPenalty === undefined);
|
|
978
|
+
i0.ɵɵadvance(2);
|
|
979
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.FrequencyPenalty !== null && ctx_r1.record.FrequencyPenalty !== undefined ? ctx_r1.record.FrequencyPenalty : "\u2014", " ");
|
|
980
|
+
i0.ɵɵadvance(4);
|
|
981
|
+
i0.ɵɵclassProp("null-value", ctx_r1.record.PresencePenalty === null || ctx_r1.record.PresencePenalty === undefined);
|
|
982
|
+
i0.ɵɵadvance(2);
|
|
983
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.PresencePenalty !== null && ctx_r1.record.PresencePenalty !== undefined ? ctx_r1.record.PresencePenalty : "\u2014", " ");
|
|
984
|
+
i0.ɵɵadvance(4);
|
|
985
|
+
i0.ɵɵclassProp("null-value", ctx_r1.record.Seed === null || ctx_r1.record.Seed === undefined);
|
|
986
|
+
i0.ɵɵadvance(2);
|
|
987
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Seed !== null && ctx_r1.record.Seed !== undefined ? ctx_r1.record.Seed : "\u2014", " ");
|
|
617
988
|
i0.ɵɵadvance();
|
|
618
|
-
i0.ɵɵconditional(ctx_r1.record.
|
|
989
|
+
i0.ɵɵconditional(ctx_r1.record.RunAt ? 48 : -1);
|
|
990
|
+
i0.ɵɵadvance();
|
|
991
|
+
i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 49 : -1);
|
|
619
992
|
} }
|
|
620
993
|
function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
621
994
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
@@ -632,50 +1005,50 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
|
|
|
632
1005
|
i0.ɵɵelement(14, "i");
|
|
633
1006
|
i0.ɵɵtext(15);
|
|
634
1007
|
i0.ɵɵelementEnd();
|
|
635
|
-
i0.ɵɵtemplate(16, AIPromptRunFormComponentExtended_Conditional_1_Conditional_16_Template, 3, 5, "span", 13)(17, AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template, 3, 1, "span", 14)(18, AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template, 3, 1, "span", 15);
|
|
1008
|
+
i0.ɵɵtemplate(16, AIPromptRunFormComponentExtended_Conditional_1_Conditional_16_Template, 3, 5, "span", 13)(17, AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template, 3, 1, "span", 14)(18, AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template, 3, 1, "span", 15)(19, AIPromptRunFormComponentExtended_Conditional_1_Conditional_19_Template, 3, 1, "span", 16);
|
|
636
1009
|
i0.ɵɵelementEnd()()();
|
|
637
|
-
i0.ɵɵelementStart(
|
|
638
|
-
i0.ɵɵlistener("click", function
|
|
639
|
-
i0.ɵɵelement(
|
|
1010
|
+
i0.ɵɵelementStart(20, "div", 17)(21, "kendo-button", 18);
|
|
1011
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Template_kendo_button_click_21_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.refreshData()); });
|
|
1012
|
+
i0.ɵɵelement(22, "i", 19);
|
|
640
1013
|
i0.ɵɵelementEnd()()();
|
|
641
|
-
i0.ɵɵelementStart(
|
|
642
|
-
i0.ɵɵelement(
|
|
643
|
-
i0.ɵɵelementStart(
|
|
644
|
-
i0.ɵɵtext(
|
|
1014
|
+
i0.ɵɵelementStart(23, "div", 20)(24, "div", 21);
|
|
1015
|
+
i0.ɵɵelement(25, "i", 22);
|
|
1016
|
+
i0.ɵɵelementStart(26, "div", 23)(27, "div", 24);
|
|
1017
|
+
i0.ɵɵtext(28, "Duration");
|
|
645
1018
|
i0.ɵɵelementEnd();
|
|
646
|
-
i0.ɵɵelementStart(
|
|
647
|
-
i0.ɵɵtext(
|
|
1019
|
+
i0.ɵɵelementStart(29, "div", 25);
|
|
1020
|
+
i0.ɵɵtext(30);
|
|
648
1021
|
i0.ɵɵelementEnd()()();
|
|
649
|
-
i0.ɵɵelementStart(
|
|
650
|
-
i0.ɵɵelement(
|
|
651
|
-
i0.ɵɵelementStart(
|
|
652
|
-
i0.ɵɵtext(
|
|
1022
|
+
i0.ɵɵelementStart(31, "div", 21);
|
|
1023
|
+
i0.ɵɵelement(32, "i", 26);
|
|
1024
|
+
i0.ɵɵelementStart(33, "div", 23)(34, "div", 24);
|
|
1025
|
+
i0.ɵɵtext(35, "Total Tokens");
|
|
653
1026
|
i0.ɵɵelementEnd();
|
|
654
|
-
i0.ɵɵelementStart(
|
|
655
|
-
i0.ɵɵtext(
|
|
1027
|
+
i0.ɵɵelementStart(36, "div", 25);
|
|
1028
|
+
i0.ɵɵtext(37);
|
|
656
1029
|
i0.ɵɵelementEnd()()();
|
|
657
|
-
i0.ɵɵelementStart(
|
|
658
|
-
i0.ɵɵelement(
|
|
659
|
-
i0.ɵɵelementStart(
|
|
660
|
-
i0.ɵɵtext(
|
|
1030
|
+
i0.ɵɵelementStart(38, "div", 21);
|
|
1031
|
+
i0.ɵɵelement(39, "i", 27);
|
|
1032
|
+
i0.ɵɵelementStart(40, "div", 23)(41, "div", 24);
|
|
1033
|
+
i0.ɵɵtext(42, "Cost");
|
|
661
1034
|
i0.ɵɵelementEnd();
|
|
662
|
-
i0.ɵɵelementStart(
|
|
663
|
-
i0.ɵɵtext(
|
|
1035
|
+
i0.ɵɵelementStart(43, "div", 25);
|
|
1036
|
+
i0.ɵɵtext(44);
|
|
664
1037
|
i0.ɵɵelementEnd()()();
|
|
665
|
-
i0.ɵɵtemplate(
|
|
1038
|
+
i0.ɵɵtemplate(45, AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_Template, 8, 4, "div", 21);
|
|
666
1039
|
i0.ɵɵelementEnd()();
|
|
667
|
-
i0.ɵɵelementStart(
|
|
668
|
-
i0.ɵɵtemplate(
|
|
1040
|
+
i0.ɵɵelementStart(46, "div", 28)(47, "kendo-panelbar")(48, "kendo-panelbar-item", 29);
|
|
1041
|
+
i0.ɵɵtemplate(49, AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Template, 4, 1, "ng-template", 30)(50, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Template, 3, 1, "ng-template", 31);
|
|
669
1042
|
i0.ɵɵelementEnd();
|
|
670
|
-
i0.ɵɵelementStart(
|
|
671
|
-
i0.ɵɵtemplate(
|
|
1043
|
+
i0.ɵɵelementStart(51, "kendo-panelbar-item", 29);
|
|
1044
|
+
i0.ɵɵtemplate(52, AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Template, 5, 2, "ng-template", 30)(53, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Template, 4, 2, "ng-template", 31);
|
|
672
1045
|
i0.ɵɵelementEnd();
|
|
673
|
-
i0.ɵɵelementStart(
|
|
674
|
-
i0.ɵɵtemplate(
|
|
1046
|
+
i0.ɵɵelementStart(54, "kendo-panelbar-item", 29);
|
|
1047
|
+
i0.ɵɵtemplate(55, AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Template, 3, 0, "ng-template", 30)(56, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template, 39, 12, "ng-template", 31);
|
|
675
1048
|
i0.ɵɵelementEnd();
|
|
676
|
-
i0.ɵɵtemplate(
|
|
677
|
-
i0.ɵɵelementStart(
|
|
678
|
-
i0.ɵɵtemplate(
|
|
1049
|
+
i0.ɵɵtemplate(57, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_Template, 3, 1, "kendo-panelbar-item", 29)(58, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_Template, 3, 1, "kendo-panelbar-item", 29);
|
|
1050
|
+
i0.ɵɵelementStart(59, "kendo-panelbar-item", 29);
|
|
1051
|
+
i0.ɵɵtemplate(60, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Template, 3, 0, "ng-template", 30)(61, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Template, 50, 27, "ng-template", 31);
|
|
679
1052
|
i0.ɵɵelementEnd()()()();
|
|
680
1053
|
} if (rf & 2) {
|
|
681
1054
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -700,6 +1073,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
|
|
|
700
1073
|
i0.ɵɵconditional(ctx_r1.prompt ? 17 : -1);
|
|
701
1074
|
i0.ɵɵadvance();
|
|
702
1075
|
i0.ɵɵconditional(ctx_r1.model ? 18 : -1);
|
|
1076
|
+
i0.ɵɵadvance();
|
|
1077
|
+
i0.ɵɵconditional(ctx_r1.record.Vendor ? 19 : -1);
|
|
703
1078
|
i0.ɵɵadvance(11);
|
|
704
1079
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.ExecutionTimeMS));
|
|
705
1080
|
i0.ɵɵadvance(7);
|
|
@@ -707,7 +1082,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
|
|
|
707
1082
|
i0.ɵɵadvance(7);
|
|
708
1083
|
i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
|
|
709
1084
|
i0.ɵɵadvance();
|
|
710
|
-
i0.ɵɵconditional(ctx_r1.record.RunAt ?
|
|
1085
|
+
i0.ɵɵconditional(ctx_r1.record.RunAt ? 45 : -1);
|
|
711
1086
|
i0.ɵɵadvance(3);
|
|
712
1087
|
i0.ɵɵproperty("expanded", ctx_r1.messagesExpanded);
|
|
713
1088
|
i0.ɵɵadvance(3);
|
|
@@ -715,7 +1090,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
|
|
|
715
1090
|
i0.ɵɵadvance(3);
|
|
716
1091
|
i0.ɵɵproperty("expanded", ctx_r1.metricsExpanded);
|
|
717
1092
|
i0.ɵɵadvance(3);
|
|
718
|
-
i0.ɵɵconditional(ctx_r1.record.
|
|
1093
|
+
i0.ɵɵconditional(ctx_r1.record && (ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 0 || ctx_r1.record.ValidationBehavior) ? 57 : -1);
|
|
1094
|
+
i0.ɵɵadvance();
|
|
1095
|
+
i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ? 58 : -1);
|
|
719
1096
|
i0.ɵɵadvance();
|
|
720
1097
|
i0.ɵɵproperty("expanded", false);
|
|
721
1098
|
} }
|
|
@@ -734,15 +1111,22 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
734
1111
|
this.resultExpanded = true;
|
|
735
1112
|
this.metricsExpanded = false;
|
|
736
1113
|
this.hierarchyExpanded = false;
|
|
1114
|
+
this.validationExpanded = true; // Expand validation panel by default if there are retries
|
|
737
1115
|
// Formatted values
|
|
738
1116
|
this.formattedMessages = '';
|
|
739
1117
|
this.formattedResult = '';
|
|
1118
|
+
this.formattedValidationSummary = '';
|
|
1119
|
+
this.formattedValidationAttempts = '';
|
|
1120
|
+
// Validation data
|
|
1121
|
+
this.validationAttempts = [];
|
|
1122
|
+
this.validationSummary = null;
|
|
740
1123
|
}
|
|
741
1124
|
async ngOnInit() {
|
|
742
1125
|
await super.ngOnInit();
|
|
743
1126
|
if (this.record?.ID) {
|
|
744
1127
|
await this.loadRelatedData();
|
|
745
1128
|
this.formatJsonFields();
|
|
1129
|
+
this.loadValidationData();
|
|
746
1130
|
}
|
|
747
1131
|
}
|
|
748
1132
|
async loadRelatedData() {
|
|
@@ -939,17 +1323,54 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
939
1323
|
await this.record.Load(this.record.ID);
|
|
940
1324
|
await this.loadRelatedData();
|
|
941
1325
|
this.formatJsonFields();
|
|
1326
|
+
this.loadValidationData();
|
|
1327
|
+
}
|
|
1328
|
+
}
|
|
1329
|
+
loadValidationData() {
|
|
1330
|
+
// Parse validation attempts if available
|
|
1331
|
+
if (this.record.ValidationAttempts) {
|
|
1332
|
+
try {
|
|
1333
|
+
this.validationAttempts = JSON.parse(this.record.ValidationAttempts);
|
|
1334
|
+
this.formattedValidationAttempts = JSON.stringify(this.validationAttempts, null, 2);
|
|
1335
|
+
}
|
|
1336
|
+
catch (error) {
|
|
1337
|
+
console.error('Error parsing ValidationAttempts:', error);
|
|
1338
|
+
this.validationAttempts = [];
|
|
1339
|
+
this.formattedValidationAttempts = '';
|
|
1340
|
+
}
|
|
1341
|
+
}
|
|
1342
|
+
else {
|
|
1343
|
+
this.validationAttempts = [];
|
|
1344
|
+
this.formattedValidationAttempts = '';
|
|
1345
|
+
}
|
|
1346
|
+
// Parse validation summary if available
|
|
1347
|
+
if (this.record.ValidationSummary) {
|
|
1348
|
+
try {
|
|
1349
|
+
this.validationSummary = JSON.parse(this.record.ValidationSummary);
|
|
1350
|
+
this.formattedValidationSummary = JSON.stringify(this.validationSummary, null, 2);
|
|
1351
|
+
}
|
|
1352
|
+
catch (error) {
|
|
1353
|
+
console.error('Error parsing ValidationSummary:', error);
|
|
1354
|
+
this.validationSummary = null;
|
|
1355
|
+
this.formattedValidationSummary = '';
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
else {
|
|
1359
|
+
this.validationSummary = null;
|
|
1360
|
+
this.formattedValidationSummary = '';
|
|
942
1361
|
}
|
|
1362
|
+
// Set validation panel expansion based on whether there were retries
|
|
1363
|
+
this.validationExpanded = (this.record.ValidationAttemptCount || 0) > 1;
|
|
943
1364
|
}
|
|
944
1365
|
static { this.ɵfac = function AIPromptRunFormComponentExtended_Factory(t) { return new (t || AIPromptRunFormComponentExtended)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
|
|
945
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [["form", "ngForm"], [1, "record-form-container"], [1, "record-form"], [3, "form"], [1, "prompt-run-header"], [1, "header-content"], [1, "run-overview"], [1, "run-icon-wrapper"], [1, "run-info"], [1, "run-title"], [1, "run-id"], [1, "run-meta"], [1, "status-badge"], [1, "run-type-badge", 3, "color"], ["title", "View Prompt", 1, "prompt-name"], ["title", "View Model", 1, "model-name"], [1, "run-actions"], ["fillMode", "outline", "size", "small", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "metric-item"], [1, "fa-solid", "fa-clock"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], [1, "fa-solid", "fa-coins"], [1, "fa-solid", "fa-dollar-sign"], [1, "form-content"], [3, "expanded"], ["kendoPanelBarItemTitle", ""], ["kendoPanelBarContent", ""], [1, "run-type-badge"], ["title", "View Prompt", 1, "prompt-name", 3, "click"], [1, "fa-solid", "fa-comment-dots"], ["title", "View Model", 1, "model-name", 3, "click"], [1, "fa-solid", "fa-microchip"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "panel-badge"], [1, "panel-content"], [1, "json-editor-container"], [1, "empty-state"], [1, "json-toolbar"], ["fillMode", "flat", "size", "small", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-comment-slash"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "error-message"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], ["name", "formattedResult", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-inbox"], [1, "fa-solid", "fa-chart-line"], [1, "metrics-grid"], [1, "metric-card"], [1, "metric-header"], [1, "fa-solid", "fa-message"], [1, "metric-value", "large"], [1, "metric-rollup"], [1, "fa-solid", "fa-reply"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [1, "metric-value", "link", 3, "click"], [1, "fa-solid", "fa-external-link"], [1, "fa-solid", "fa-
|
|
1366
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [["form", "ngForm"], [1, "record-form-container"], [1, "record-form"], [3, "form"], [1, "prompt-run-header"], [1, "header-content"], [1, "run-overview"], [1, "run-icon-wrapper"], [1, "run-info"], [1, "run-title"], [1, "run-id"], [1, "run-meta"], [1, "status-badge"], [1, "run-type-badge", 3, "color"], ["title", "View Prompt", 1, "prompt-name"], ["title", "View Model", 1, "model-name"], ["title", "View Vendor", 1, "vendor-name"], [1, "run-actions"], ["fillMode", "outline", "size", "small", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "metric-item"], [1, "fa-solid", "fa-clock"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], [1, "fa-solid", "fa-coins"], [1, "fa-solid", "fa-dollar-sign"], [1, "form-content"], [3, "expanded"], ["kendoPanelBarItemTitle", ""], ["kendoPanelBarContent", ""], [1, "run-type-badge"], ["title", "View Prompt", 1, "prompt-name", 3, "click"], [1, "fa-solid", "fa-comment-dots"], ["title", "View Model", 1, "model-name", 3, "click"], [1, "fa-solid", "fa-microchip"], ["title", "View Vendor", 1, "vendor-name", 3, "click"], [1, "fa-solid", "fa-building"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "panel-badge"], [1, "panel-content"], [1, "json-editor-container"], [1, "empty-state"], [1, "json-toolbar"], ["fillMode", "flat", "size", "small", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-comment-slash"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "error-message"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], ["name", "formattedResult", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-inbox"], [1, "fa-solid", "fa-chart-line"], [1, "metrics-grid"], [1, "metric-card"], [1, "metric-header"], [1, "fa-solid", "fa-message"], [1, "metric-value", "large"], [1, "metric-rollup"], [1, "fa-solid", "fa-reply"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [1, "metric-value", "link", 3, "click"], [1, "fa-solid", "fa-external-link"], [1, "fa-solid", "fa-shield-check"], [1, "panel-count"], [1, "panel-badge", "success"], [1, "validation-summary"], [1, "summary-header"], [1, "validation-status"], [1, "validation-metrics"], [1, "metric-card", "small"], [1, "validation-error"], [1, "common-error"], [1, "retry-timeline"], [1, "validation-attempts"], [1, "validation-json"], [1, "error-count"], [1, "fa-solid", "fa-repeat"], [1, "timeline-info"], [1, "timeline-stat"], [1, "fa-solid", "fa-flag-checkered"], [1, "fa-solid", "fa-stopwatch"], [1, "attempts-list"], [1, "attempt-item", 3, "success", "failed"], [1, "attempt-item"], [1, "attempt-number"], [1, "attempt-details"], [1, "attempt-time"], [1, "output-length"], [1, "attempt-error"], [1, "json-viewer-container"], ["name", "formattedValidationSummary", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedValidationAttempts", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-sitemap"], [1, "parent-run-section"], [1, "child-runs-section"], [1, "fa-solid", "fa-level-up-alt"], [1, "run-item", "parent", 3, "click"], [1, "run-item-icon"], [1, "run-item-content"], [1, "run-item-title"], [1, "run-item-type"], [1, "run-item-meta"], [1, "fa-solid", "fa-level-down-alt"], [1, "runs-list"], [1, "run-item", "child"], [1, "run-item", "child", 3, "click"], [1, "execution-order"], [1, "status-indicator"], [1, "fa-solid", "fa-info-circle"], [1, "detail-fields-grid"], [1, "detail-field"], [1, "detail-value"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], ["title", "View Agent", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-check-circle"]], template: function AIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
946
1367
|
i0.ɵɵelementStart(0, "div", 1);
|
|
947
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Template,
|
|
1368
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Template, 62, 27, "form", 2);
|
|
948
1369
|
i0.ɵɵelementEnd();
|
|
949
1370
|
} if (rf & 2) {
|
|
950
1371
|
i0.ɵɵadvance();
|
|
951
1372
|
i0.ɵɵconditional(ctx.record ? 1 : -1);
|
|
952
|
-
} }, dependencies: [i3.ɵNgNoValidate, i3.NgControlStatus, i3.NgControlStatusGroup, i3.NgModel, i3.NgForm, i4.PanelBarComponent, i4.PanelBarItemComponent, i4.PanelBarContentDirective, i4.PanelBarItemTitleDirective, i5.ButtonComponent, i6.FormToolbarComponent, i7.CodeEditorComponent, i8.DatePipe], styles: ["\n\n.prompt-run-header[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border-bottom: 2px solid #e9ecef;\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.run-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: #6c757d;\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n color: white;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.9em;\n}\n\n.run-type-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #f1f3f5;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.prompt-name[_ngcontent-%COMP%], .model-name[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.85em;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.prompt-name[_ngcontent-%COMP%]:hover, .model-name[_ngcontent-%COMP%]:hover {\n background: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.run-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n flex-wrap: wrap;\n}\n\n.metric-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: #6c757d;\n width: 24px;\n text-align: center;\n}\n\n.metric-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 0.75em;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n font-weight: 600;\n color: #2c3e50;\n}\n\n\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: #dc3545;\n color: white;\n}\n\n.panel-count[_ngcontent-%COMP%] {\n color: #6c757d;\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n\n\n.json-editor-container[_ngcontent-%COMP%] {\n border: 1px solid #e9ecef;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n background: #f8f9fa;\n padding: 8px 12px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: flex-end;\n}\n\n\n\n.error-message[_ngcontent-%COMP%] {\n background: #dc354510;\n border: 1px solid #dc3545;\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5em;\n color: #dc3545;\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: #dc3545;\n font-size: 1em;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #495057;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: #6c757d;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.metrics-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.metric-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9em;\n color: #6c757d;\n font-weight: 500;\n}\n\n.metric-value.large[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 700;\n color: #2c3e50;\n}\n\n.metric-rollup[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.metric-currency[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 0.85em;\n color: #6c757d;\n text-transform: uppercase;\n}\n\n\n\n.additional-metrics[_ngcontent-%COMP%] {\n border-top: 1px solid #e9ecef;\n padding-top: 16px;\n}\n\n.metric-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid #f1f3f5;\n}\n\n.metric-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #6c757d;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-weight: 400;\n color: #2c3e50;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%] {\n color: #007bff;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%]:hover {\n color: #0056b3;\n}\n\n\n\n.parent-run-section[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.parent-run-section[_ngcontent-%COMP%]:last-child, \n.child-runs-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #dee2e6;\n}\n\n.run-item.parent[_ngcontent-%COMP%] {\n background: #e3f2fd;\n border-color: #90caf9;\n}\n\n.run-item.parent[_ngcontent-%COMP%]:hover {\n background: #bbdefb;\n}\n\n.run-item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #2c3e50;\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order[_ngcontent-%COMP%] {\n background: #6c757d;\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 400;\n}\n\n.run-item-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.run-item-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]:last-child {\n color: #6c757d;\n font-size: 0.85em;\n}\n\n\n\n.detail-fields-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: #2c3e50;\n padding: 10px 14px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n color: #6c757d;\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%]:last-child {\n opacity: 1;\n}\n\n\n\nkendo-panelbar[_ngcontent-%COMP%] {\n border: none !important;\n}\n\nkendo-panelbar-item[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n border: 1px solid #e9ecef !important;\n border-radius: 8px !important;\n overflow: hidden;\n}\n\nkendo-panelbar-item[_ngcontent-%COMP%] .k-panelbar-header[_ngcontent-%COMP%] {\n background: #f8f9fa !important;\n border: none !important;\n padding: 12px 16px !important;\n}\n\nkendo-panelbar-item[_ngcontent-%COMP%] .k-panelbar-header[_ngcontent-%COMP%]:hover {\n background: #e9ecef !important;\n}\n\nkendo-panelbar-item[_ngcontent-%COMP%] .k-panelbar-content[_ngcontent-%COMP%] {\n border: none !important;\n padding: 0 !important;\n}"] }); }
|
|
1373
|
+
} }, dependencies: [i3.ɵNgNoValidate, i3.NgControlStatus, i3.NgControlStatusGroup, i3.NgModel, i3.NgForm, i4.PanelBarComponent, i4.PanelBarItemComponent, i4.PanelBarContentDirective, i4.PanelBarItemTitleDirective, i5.ButtonComponent, i6.FormToolbarComponent, i7.CodeEditorComponent, i8.DatePipe], styles: ["\n\n.prompt-run-header[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border-bottom: 2px solid #e9ecef;\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.run-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: #6c757d;\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n color: white;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.9em;\n}\n\n.run-type-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #f1f3f5;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.prompt-name[_ngcontent-%COMP%], .model-name[_ngcontent-%COMP%], .vendor-name[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.85em;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.prompt-name[_ngcontent-%COMP%]:hover, .model-name[_ngcontent-%COMP%]:hover, .vendor-name[_ngcontent-%COMP%]:hover {\n background: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.run-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n flex-wrap: wrap;\n}\n\n.metric-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: #6c757d;\n width: 24px;\n text-align: center;\n}\n\n.metric-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 0.75em;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n font-weight: 600;\n color: #2c3e50;\n}\n\n\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: #dc3545;\n color: white;\n}\n\n.panel-count[_ngcontent-%COMP%] {\n color: #6c757d;\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n\n\n.json-editor-container[_ngcontent-%COMP%] {\n border: 1px solid #e9ecef;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n background: #f8f9fa;\n padding: 8px 12px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: flex-end;\n}\n\n\n\n.error-message[_ngcontent-%COMP%] {\n background: #dc354510;\n border: 1px solid #dc3545;\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5em;\n color: #dc3545;\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: #dc3545;\n font-size: 1em;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #495057;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: #6c757d;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.metrics-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.metric-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9em;\n color: #6c757d;\n font-weight: 500;\n}\n\n.metric-value.large[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 700;\n color: #2c3e50;\n}\n\n.metric-rollup[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.metric-currency[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 0.85em;\n color: #6c757d;\n text-transform: uppercase;\n}\n\n\n\n.additional-metrics[_ngcontent-%COMP%] {\n border-top: 1px solid #e9ecef;\n padding-top: 16px;\n}\n\n.metric-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid #f1f3f5;\n}\n\n.metric-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #6c757d;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-weight: 400;\n color: #2c3e50;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%] {\n color: #007bff;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%]:hover {\n color: #0056b3;\n}\n\n\n\n.parent-run-section[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.parent-run-section[_ngcontent-%COMP%]:last-child, \n.child-runs-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #dee2e6;\n}\n\n.run-item.parent[_ngcontent-%COMP%] {\n background: #e3f2fd;\n border-color: #90caf9;\n}\n\n.run-item.parent[_ngcontent-%COMP%]:hover {\n background: #bbdefb;\n}\n\n.run-item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #2c3e50;\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order[_ngcontent-%COMP%] {\n background: #6c757d;\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 400;\n}\n\n.run-item-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.run-item-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]:last-child {\n color: #6c757d;\n font-size: 0.85em;\n}\n\n\n\n.detail-fields-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: #2c3e50;\n padding: 10px 14px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n color: #6c757d;\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%]:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] {\n color: #adb5bd;\n font-style: italic;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n opacity: 0.5;\n}\n\n\n\nkendo-panelbar[_ngcontent-%COMP%] {\n border: none !important;\n}\n\nkendo-panelbar-item[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n border: 1px solid #e9ecef !important;\n border-radius: 8px !important;\n overflow: hidden;\n}\n\nkendo-panelbar-item[_ngcontent-%COMP%] .k-panelbar-header[_ngcontent-%COMP%] {\n background: #f8f9fa !important;\n border: none !important;\n padding: 12px 16px !important;\n}\n\nkendo-panelbar-item[_ngcontent-%COMP%] .k-panelbar-header[_ngcontent-%COMP%]:hover {\n background: #e9ecef !important;\n}\n\nkendo-panelbar-item[_ngcontent-%COMP%] .k-panelbar-content[_ngcontent-%COMP%] {\n border: none !important;\n padding: 0 !important;\n max-height: none !important;\n overflow: visible !important;\n}\n\n\n\n.validation-summary[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.summary-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: #2c3e50;\n}\n\n.validation-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success[_ngcontent-%COMP%] {\n background: #28a74520;\n color: #28a745;\n}\n\n.validation-status.failed[_ngcontent-%COMP%] {\n background: #dc354520;\n color: #dc3545;\n}\n\n.validation-metrics[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] {\n background: #dc354510;\n border: 1px solid #dc354530;\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: #dc3545;\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #495057;\n font-size: 0.9em;\n}\n\n.error-count[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: #dc3545;\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n\n\n.retry-timeline[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.retry-timeline[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: #495057;\n}\n\n.timeline-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #6c757d;\n font-size: 0.9em;\n}\n\n.timeline-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n\n\n.validation-attempts[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.validation-attempts[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: #495057;\n}\n\n.attempts-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item[_ngcontent-%COMP%] {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success[_ngcontent-%COMP%] {\n background: #28a74510;\n border-color: #28a74530;\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] {\n background: #dc354510;\n border-color: #dc354530;\n}\n\n.attempt-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.attempt-item.success[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: #dc3545;\n}\n\n.attempt-details[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time[_ngcontent-%COMP%] {\n color: #6c757d;\n}\n\n.attempt-error[_ngcontent-%COMP%] {\n color: #dc3545;\n flex: 1 0 100%;\n}\n\n.output-length[_ngcontent-%COMP%] {\n color: #6c757d;\n font-style: italic;\n}\n\n\n\n.validation-json[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.validation-json[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: #495057;\n}\n\n.json-viewer-container[_ngcontent-%COMP%] {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n\n.panel-badge.success[_ngcontent-%COMP%] {\n background: #28a745;\n color: white;\n}"] }); }
|
|
953
1374
|
};
|
|
954
1375
|
AIPromptRunFormComponentExtended = __decorate([
|
|
955
1376
|
RegisterClass(BaseFormComponent, 'MJ: AI Prompt Runs')
|
|
@@ -957,7 +1378,7 @@ AIPromptRunFormComponentExtended = __decorate([
|
|
|
957
1378
|
export { AIPromptRunFormComponentExtended };
|
|
958
1379
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIPromptRunFormComponentExtended, [{
|
|
959
1380
|
type: Component,
|
|
960
|
-
args: [{ selector: 'mj-ai-prompt-run-form', template: "<div class=\"record-form-container\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\">\n <mj-form-toolbar [form]=\"this\"></mj-form-toolbar>\n\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <span class=\"status-badge\" [style.background-color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ getStatusText() }}\n </span>\n @if (record.RunType) {\n <span class=\"run-type-badge\" [style.color]=\"getRunTypeColor(record.RunType)\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </span>\n }\n @if (prompt) {\n <span class=\"prompt-name\" (click)=\"navigateToEntity('AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n {{ prompt.Name }}\n </span>\n }\n @if (model) {\n <span class=\"model-name\" (click)=\"navigateToEntity('AI Models', model.ID)\" title=\"View Model\">\n <i class=\"fa-solid fa-microchip\"></i>\n {{ model.Name }}\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions\">\n <kendo-button fillMode=\"outline\" size=\"small\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </kendo-button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensUsed) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\">\n <kendo-panelbar>\n \n <!-- Input Messages Panel -->\n <kendo-panelbar-item [expanded]=\"messagesExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input Messages\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <kendo-button \n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </kendo-button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessages\"\n name=\"formattedMessages\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Result Panel -->\n <kendo-panelbar-item [expanded]=\"resultExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <kendo-button \n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </kendo-button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedResult\"\n name=\"formattedResult\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (!record.ErrorMessage) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No result data recorded</p>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Token Usage & Metrics Panel -->\n <kendo-panelbar-item [expanded]=\"metricsExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage & Metrics\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensPrompt) }}</div>\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensUsed) }}</div>\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.ConfigurationID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Configuration:</span>\n <span class=\"metric-value\">{{ record.Configuration }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <kendo-panelbar-item [expanded]=\"hierarchyExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Run Hierarchy\n @if (childRuns.length > 0) {\n <span class=\"panel-count\">({{ childRuns.length }} children)</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (parentRun) {\n <div class=\"parent-run-section\">\n <h4><i class=\"fa-solid fa-level-up-alt\"></i> Parent Run</h4>\n <div class=\"run-item parent\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', parentRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(parentRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Parent Run #{{ parentRun.ID.substring(0, 8) }}\n <span class=\"run-item-type\">{{ parentRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(parentRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(parentRun.TokensUsed) }}</span>\n <span><i class=\"fa-solid fa-calendar\"></i> {{ parentRun.RunAt | date:'short' }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (childRuns.length > 0) {\n <div class=\"child-runs-section\">\n <h4><i class=\"fa-solid fa-level-down-alt\"></i> Child Runs</h4>\n <div class=\"runs-list\">\n @for (childRun of childRuns; track childRun.ID) {\n <div class=\"run-item child\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', childRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(childRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Child Run #{{ childRun.ID.substring(0, 8) }}\n @if (childRun.ExecutionOrder !== null) {\n <span class=\"execution-order\">#{{ childRun.ExecutionOrder }}</span>\n }\n <span class=\"run-item-type\">{{ childRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span class=\"status-indicator\" [style.color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ childRun.Success ? 'Success' : childRun.ErrorMessage ? 'Failed' : 'Running' }}\n </span>\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(childRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(childRun.TokensUsed) }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n \n <!-- Additional Details Panel -->\n <kendo-panelbar-item [expanded]=\"false\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.VendorID) {\n <div class=\"detail-field\">\n <label>Vendor</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Vendors', record.VendorID)\" title=\"View Vendor\">\n <i class=\"fa-solid fa-building\"></i>\n {{ record.Vendor || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('AI Agents', record.AgentID)\" title=\"View Agent\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ record.Agent || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.ConfigurationID) {\n <div class=\"detail-field\">\n <label>Configuration</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ record.Configuration || 'Unknown' }}\n </div>\n </div>\n }\n \n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n </kendo-panelbar>\n </div>\n </form>\n }\n</div>", styles: ["/* Header Section */\n.prompt-run-header {\n background: #f8f9fa;\n border-bottom: 2px solid #e9ecef;\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper i {\n font-size: 24px;\n}\n\n.run-info {\n flex: 1;\n min-width: 0;\n}\n\n.run-title {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: #6c757d;\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n color: white;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.status-badge i {\n font-size: 0.9em;\n}\n\n.run-type-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #f1f3f5;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.prompt-name, .model-name {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.85em;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.prompt-name:hover, .model-name:hover {\n background: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.run-actions {\n display: flex;\n gap: 8px;\n}\n\n/* Metrics Bar */\n.metrics-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n flex-wrap: wrap;\n}\n\n.metric-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item > i {\n font-size: 1.2em;\n color: #6c757d;\n width: 24px;\n text-align: center;\n}\n\n.metric-content {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label {\n font-size: 0.75em;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value {\n font-size: 1.1em;\n font-weight: 600;\n color: #2c3e50;\n}\n\n/* Panels */\n.form-content {\n padding: 16px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: #dc3545;\n color: white;\n}\n\n.panel-count {\n color: #6c757d;\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content {\n padding: 20px;\n}\n\n/* JSON Editor Container */\n.json-editor-container {\n border: 1px solid #e9ecef;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: #f8f9fa;\n padding: 8px 12px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: #dc354510;\n border: 1px solid #dc3545;\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message i {\n font-size: 1.5em;\n color: #dc3545;\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: #dc3545;\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: #495057;\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: #6c757d;\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Metrics Grid */\n.metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header i {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: #6c757d;\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: #2c3e50;\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: #6c757d;\n text-transform: uppercase;\n}\n\n/* Additional Metrics */\n.additional-metrics {\n border-top: 1px solid #e9ecef;\n padding-top: 16px;\n}\n\n.metric-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid #f1f3f5;\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: #6c757d;\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: #2c3e50;\n}\n\n.metric-row .metric-value.link {\n color: #007bff;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row .metric-value.link:hover {\n color: #0056b3;\n}\n\n/* Hierarchy Section */\n.parent-run-section,\n.child-runs-section {\n margin-bottom: 24px;\n}\n\n.parent-run-section:last-child,\n.child-runs-section:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section h4,\n.child-runs-section h4 {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item:hover {\n background: #e9ecef;\n border-color: #dee2e6;\n}\n\n.run-item.parent {\n background: #e3f2fd;\n border-color: #90caf9;\n}\n\n.run-item.parent:hover {\n background: #bbdefb;\n}\n\n.run-item-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title {\n font-weight: 500;\n color: #2c3e50;\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: #6c757d;\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 400;\n}\n\n.run-item-meta {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.run-item-meta span {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator {\n font-weight: 500;\n}\n\n.run-item > i:last-child {\n color: #6c757d;\n font-size: 0.85em;\n}\n\n/* Detail Fields Grid */\n.detail-fields-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field label {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: #2c3e50;\n padding: 10px 14px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: #6c757d;\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable {\n cursor: pointer;\n}\n\n.detail-value.clickable:hover {\n background: #e9ecef;\n border-color: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable i:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable:hover i:last-child {\n opacity: 1;\n}\n\n/* Kendo Overrides */\nkendo-panelbar {\n border: none !important;\n}\n\nkendo-panelbar-item {\n margin-bottom: 8px;\n border: 1px solid #e9ecef !important;\n border-radius: 8px !important;\n overflow: hidden;\n}\n\nkendo-panelbar-item .k-panelbar-header {\n background: #f8f9fa !important;\n border: none !important;\n padding: 12px 16px !important;\n}\n\nkendo-panelbar-item .k-panelbar-header:hover {\n background: #e9ecef !important;\n}\n\nkendo-panelbar-item .k-panelbar-content {\n border: none !important;\n padding: 0 !important;\n}"] }]
|
|
1381
|
+
args: [{ selector: 'mj-ai-prompt-run-form', template: "<div class=\"record-form-container\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\">\n <mj-form-toolbar [form]=\"this\"></mj-form-toolbar>\n\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <span class=\"status-badge\" [style.background-color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ getStatusText() }}\n </span>\n @if (record.RunType) {\n <span class=\"run-type-badge\" [style.color]=\"getRunTypeColor(record.RunType)\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </span>\n }\n @if (prompt) {\n <span class=\"prompt-name\" (click)=\"navigateToEntity('AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n {{ prompt.Name }}\n </span>\n }\n @if (model) {\n <span class=\"model-name\" (click)=\"navigateToEntity('AI Models', model.ID)\" title=\"View Model\">\n <i class=\"fa-solid fa-microchip\"></i>\n {{ model.Name }}\n </span>\n }\n @if (record.Vendor) {\n <span class=\"vendor-name\" (click)=\"navigateToEntity('MJ: AI Vendors', record.VendorID)\" title=\"View Vendor\">\n <i class=\"fa-solid fa-building\"></i>\n {{ record.Vendor }}\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions\">\n <kendo-button fillMode=\"outline\" size=\"small\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </kendo-button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensUsed) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\">\n <kendo-panelbar>\n \n <!-- Input Messages Panel -->\n <kendo-panelbar-item [expanded]=\"messagesExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input Messages\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <kendo-button \n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </kendo-button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessages\"\n name=\"formattedMessages\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Result Panel -->\n <kendo-panelbar-item [expanded]=\"resultExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <kendo-button \n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </kendo-button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedResult\"\n name=\"formattedResult\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (!record.ErrorMessage) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No result data recorded</p>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Token Usage & Metrics Panel -->\n <kendo-panelbar-item [expanded]=\"metricsExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage & Metrics\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensPrompt) }}</div>\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensUsed) }}</div>\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.ConfigurationID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Configuration:</span>\n <span class=\"metric-value\">{{ record.Configuration }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <kendo-panelbar-item [expanded]=\"validationExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation & Retries\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <span class=\"panel-count\">({{ record.ValidationAttemptCount }} attempts)</span>\n }\n @if (record.FinalValidationPassed) {\n <span class=\"panel-badge success\">Passed</span>\n } @else if (record.FinalValidationPassed === false) {\n <span class=\"panel-badge error\">Failed</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <!-- Validation Summary -->\n <div class=\"validation-summary\">\n <div class=\"summary-header\">\n <h4>Validation Summary</h4>\n <div class=\"validation-status\" [class.success]=\"record.FinalValidationPassed\" [class.failed]=\"!record.FinalValidationPassed\">\n <i [class]=\"record.FinalValidationPassed ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.FinalValidationPassed ? 'Validation Passed' : 'Validation Failed' }}\n </div>\n </div>\n \n <div class=\"validation-metrics\">\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Total Attempts</div>\n <div class=\"metric-value\">{{ record.ValidationAttemptCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Successful</div>\n <div class=\"metric-value\">{{ record.SuccessfulValidationCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Behavior</div>\n <div class=\"metric-value\">{{ record.ValidationBehavior || 'Not set' }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Retry Strategy</div>\n <div class=\"metric-value\">{{ record.RetryStrategy || 'Not set' }}</div>\n </div>\n </div>\n \n @if (record.FinalValidationError) {\n <div class=\"validation-error\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Final Validation Error</h5>\n <p>{{ record.FinalValidationError }}</p>\n @if (record && record.ValidationErrorCount && record.ValidationErrorCount > 0) {\n <span class=\"error-count\">{{ record.ValidationErrorCount }} validation errors</span>\n }\n </div>\n }\n \n @if (record.CommonValidationError && record.CommonValidationError !== record.FinalValidationError) {\n <div class=\"common-error\">\n <h5><i class=\"fa-solid fa-repeat\"></i> Most Common Error</h5>\n <p>{{ record.CommonValidationError }}</p>\n </div>\n }\n </div>\n \n <!-- Retry Timeline -->\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <div class=\"retry-timeline\">\n <h4>Retry Timeline</h4>\n <div class=\"timeline-info\">\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>First Attempt: {{ record.FirstAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <span>Last Attempt: {{ record.LastAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span>Total Retry Duration: {{ formatDuration(record.TotalRetryDurationMS) }}</span>\n </div>\n </div>\n </div>\n }\n \n <!-- Validation Attempts Details -->\n @if (validationAttempts && validationAttempts.length > 0) {\n <div class=\"validation-attempts\">\n <h4>Validation Attempts</h4>\n <div class=\"attempts-list\">\n @for (attempt of validationAttempts; track attempt.attemptNumber) {\n <div class=\"attempt-item\" [class.success]=\"attempt.success\" [class.failed]=\"!attempt.success\">\n <div class=\"attempt-number\">\n <i [class]=\"attempt.success ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n Attempt #{{ attempt.attemptNumber }}\n </div>\n <div class=\"attempt-details\">\n <span class=\"attempt-time\">{{ attempt.timestamp }}</span>\n @if (!attempt.success) {\n <span class=\"attempt-error\">{{ attempt.errorMessage || 'Unknown error' }}</span>\n @if (attempt.validationErrorCount > 0) {\n <span class=\"error-count\">({{ attempt.validationErrorCount }} errors)</span>\n }\n }\n @if (attempt.outputLength) {\n <span class=\"output-length\">Output: {{ attempt.outputLength }} chars</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Validation Summary JSON -->\n @if (validationSummary) {\n <div class=\"validation-json\">\n <h4>Validation Summary Details</h4>\n <div class=\"json-viewer-container\">\n <mj-code-editor \n [(ngModel)]=\"formattedValidationSummary\"\n name=\"formattedValidationSummary\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Validation Attempts JSON -->\n @if (record.ValidationAttempts) {\n <div class=\"validation-json\">\n <h4>Validation Attempts (Raw JSON)</h4>\n <div class=\"json-viewer-container\">\n <mj-code-editor \n [(ngModel)]=\"formattedValidationAttempts\"\n name=\"formattedValidationAttempts\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n \n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <kendo-panelbar-item [expanded]=\"hierarchyExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Run Hierarchy\n @if (childRuns.length > 0) {\n <span class=\"panel-count\">({{ childRuns.length }} children)</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (parentRun) {\n <div class=\"parent-run-section\">\n <h4><i class=\"fa-solid fa-level-up-alt\"></i> Parent Run</h4>\n <div class=\"run-item parent\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', parentRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(parentRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Parent Run #{{ parentRun.ID.substring(0, 8) }}\n <span class=\"run-item-type\">{{ parentRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(parentRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(parentRun.TokensUsed) }}</span>\n <span><i class=\"fa-solid fa-calendar\"></i> {{ parentRun.RunAt | date:'short' }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (childRuns.length > 0) {\n <div class=\"child-runs-section\">\n <h4><i class=\"fa-solid fa-level-down-alt\"></i> Child Runs</h4>\n <div class=\"runs-list\">\n @for (childRun of childRuns; track childRun.ID) {\n <div class=\"run-item child\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', childRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(childRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Child Run #{{ childRun.ID.substring(0, 8) }}\n @if (childRun.ExecutionOrder !== null) {\n <span class=\"execution-order\">#{{ childRun.ExecutionOrder }}</span>\n }\n <span class=\"run-item-type\">{{ childRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span class=\"status-indicator\" [style.color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ childRun.Success ? 'Success' : childRun.ErrorMessage ? 'Failed' : 'Running' }}\n </span>\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(childRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(childRun.TokensUsed) }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n \n <!-- Additional Details Panel -->\n <kendo-panelbar-item [expanded]=\"false\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('AI Agents', record.AgentID)\" title=\"View Agent\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ record.Agent || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.ConfigurationID) {\n <div class=\"detail-field\">\n <label>Configuration</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ record.Configuration || 'Unknown' }}\n </div>\n </div>\n }\n \n @if (record.RunType) {\n <div class=\"detail-field\">\n <label>Run Type</label>\n <div class=\"detail-value\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n \n @if (record.ResponseFormat) {\n <div class=\"detail-field\">\n <label>Response Format</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-code\"></i>\n {{ record.ResponseFormat }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Temperature</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Temperature === null || record.Temperature === undefined\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n {{ record.Temperature !== null && record.Temperature !== undefined ? record.Temperature : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopP === null || record.TopP === undefined\">\n <i class=\"fa-solid fa-percentage\"></i>\n {{ record.TopP !== null && record.TopP !== undefined ? record.TopP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top K</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopK === null || record.TopK === undefined\">\n <i class=\"fa-solid fa-list-ol\"></i>\n {{ record.TopK !== null && record.TopK !== undefined ? record.TopK : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Min P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.MinP === null || record.MinP === undefined\">\n <i class=\"fa-solid fa-filter\"></i>\n {{ record.MinP !== null && record.MinP !== undefined ? record.MinP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Frequency Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.FrequencyPenalty === null || record.FrequencyPenalty === undefined\">\n <i class=\"fa-solid fa-repeat\"></i>\n {{ record.FrequencyPenalty !== null && record.FrequencyPenalty !== undefined ? record.FrequencyPenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Presence Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.PresencePenalty === null || record.PresencePenalty === undefined\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n {{ record.PresencePenalty !== null && record.PresencePenalty !== undefined ? record.PresencePenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Seed</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Seed === null || record.Seed === undefined\">\n <i class=\"fa-solid fa-seedling\"></i>\n {{ record.Seed !== null && record.Seed !== undefined ? record.Seed : '\u2014' }}\n </div>\n </div>\n \n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n </kendo-panelbar>\n </div>\n </form>\n }\n</div>", styles: ["/* Header Section */\n.prompt-run-header {\n background: #f8f9fa;\n border-bottom: 2px solid #e9ecef;\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper i {\n font-size: 24px;\n}\n\n.run-info {\n flex: 1;\n min-width: 0;\n}\n\n.run-title {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: #6c757d;\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n color: white;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.status-badge i {\n font-size: 0.9em;\n}\n\n.run-type-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #f1f3f5;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.prompt-name, .model-name, .vendor-name {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.85em;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.prompt-name:hover, .model-name:hover, .vendor-name:hover {\n background: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.run-actions {\n display: flex;\n gap: 8px;\n}\n\n/* Metrics Bar */\n.metrics-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n flex-wrap: wrap;\n}\n\n.metric-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item > i {\n font-size: 1.2em;\n color: #6c757d;\n width: 24px;\n text-align: center;\n}\n\n.metric-content {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label {\n font-size: 0.75em;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value {\n font-size: 1.1em;\n font-weight: 600;\n color: #2c3e50;\n}\n\n/* Panels */\n.form-content {\n padding: 16px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: #dc3545;\n color: white;\n}\n\n.panel-count {\n color: #6c757d;\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* JSON Editor Container */\n.json-editor-container {\n border: 1px solid #e9ecef;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: #f8f9fa;\n padding: 8px 12px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: #dc354510;\n border: 1px solid #dc3545;\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message i {\n font-size: 1.5em;\n color: #dc3545;\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: #dc3545;\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: #495057;\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: #6c757d;\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Metrics Grid */\n.metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header i {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: #6c757d;\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: #2c3e50;\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: #6c757d;\n text-transform: uppercase;\n}\n\n/* Additional Metrics */\n.additional-metrics {\n border-top: 1px solid #e9ecef;\n padding-top: 16px;\n}\n\n.metric-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid #f1f3f5;\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: #6c757d;\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: #2c3e50;\n}\n\n.metric-row .metric-value.link {\n color: #007bff;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row .metric-value.link:hover {\n color: #0056b3;\n}\n\n/* Hierarchy Section */\n.parent-run-section,\n.child-runs-section {\n margin-bottom: 24px;\n}\n\n.parent-run-section:last-child,\n.child-runs-section:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section h4,\n.child-runs-section h4 {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item:hover {\n background: #e9ecef;\n border-color: #dee2e6;\n}\n\n.run-item.parent {\n background: #e3f2fd;\n border-color: #90caf9;\n}\n\n.run-item.parent:hover {\n background: #bbdefb;\n}\n\n.run-item-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title {\n font-weight: 500;\n color: #2c3e50;\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: #6c757d;\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 400;\n}\n\n.run-item-meta {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.run-item-meta span {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator {\n font-weight: 500;\n}\n\n.run-item > i:last-child {\n color: #6c757d;\n font-size: 0.85em;\n}\n\n/* Detail Fields Grid */\n.detail-fields-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field label {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: #2c3e50;\n padding: 10px 14px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: #6c757d;\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable {\n cursor: pointer;\n}\n\n.detail-value.clickable:hover {\n background: #e9ecef;\n border-color: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable i:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable:hover i:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value {\n color: #adb5bd;\n font-style: italic;\n}\n\n.detail-value.null-value i:first-child {\n opacity: 0.5;\n}\n\n/* Kendo Overrides */\nkendo-panelbar {\n border: none !important;\n}\n\nkendo-panelbar-item {\n margin-bottom: 8px;\n border: 1px solid #e9ecef !important;\n border-radius: 8px !important;\n overflow: hidden;\n}\n\nkendo-panelbar-item .k-panelbar-header {\n background: #f8f9fa !important;\n border: none !important;\n padding: 12px 16px !important;\n}\n\nkendo-panelbar-item .k-panelbar-header:hover {\n background: #e9ecef !important;\n}\n\nkendo-panelbar-item .k-panelbar-content {\n border: none !important;\n padding: 0 !important;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* Validation Panel Styles */\n.validation-summary {\n margin-bottom: 24px;\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header h4 {\n margin: 0;\n font-size: 1.1em;\n color: #2c3e50;\n}\n\n.validation-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success {\n background: #28a74520;\n color: #28a745;\n}\n\n.validation-status.failed {\n background: #dc354520;\n color: #dc3545;\n}\n\n.validation-metrics {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small .metric-label {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small .metric-value {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error,\n.common-error {\n background: #dc354510;\n border: 1px solid #dc354530;\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error h5,\n.common-error h5 {\n margin: 0 0 8px 0;\n color: #dc3545;\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error p,\n.common-error p {\n margin: 0;\n color: #495057;\n font-size: 0.9em;\n}\n\n.error-count {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: #dc3545;\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n/* Retry Timeline */\n.retry-timeline {\n margin-bottom: 24px;\n}\n\n.retry-timeline h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: #495057;\n}\n\n.timeline-info {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #6c757d;\n font-size: 0.9em;\n}\n\n.timeline-stat i {\n font-size: 1.1em;\n}\n\n/* Validation Attempts */\n.validation-attempts {\n margin-bottom: 24px;\n}\n\n.validation-attempts h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: #495057;\n}\n\n.attempts-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success {\n background: #28a74510;\n border-color: #28a74530;\n}\n\n.attempt-item.failed {\n background: #dc354510;\n border-color: #dc354530;\n}\n\n.attempt-number {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.attempt-item.success .attempt-number {\n color: #28a745;\n}\n\n.attempt-item.failed .attempt-number {\n color: #dc3545;\n}\n\n.attempt-details {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time {\n color: #6c757d;\n}\n\n.attempt-error {\n color: #dc3545;\n flex: 1 0 100%;\n}\n\n.output-length {\n color: #6c757d;\n font-style: italic;\n}\n\n/* Validation JSON */\n.validation-json {\n margin-top: 24px;\n}\n\n.validation-json h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: #495057;\n}\n\n.json-viewer-container {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Panel badge styles */\n.panel-badge.success {\n background: #28a745;\n color: white;\n}"] }]
|
|
961
1382
|
}], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], null); })();
|
|
962
1383
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIPromptRunFormComponentExtended, { className: "AIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 16 }); })();
|
|
963
1384
|
//# sourceMappingURL=ai-prompt-run-form.component.js.map
|