@memberjunction/ng-core-entity-forms 2.69.1 → 2.71.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/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +65 -0
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +578 -0
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -0
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.d.ts +1 -0
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +282 -0
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -0
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +58 -0
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +400 -0
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +119 -23
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1815 -924
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +159 -0
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js +315 -0
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -0
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +67 -0
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +463 -0
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -0
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +82 -0
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +708 -0
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +65 -0
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +379 -0
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -0
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +58 -0
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +373 -0
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -0
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +61 -0
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +459 -0
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -0
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +12 -2
- 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 +385 -228
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts +72 -0
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts.map +1 -0
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +526 -0
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +90 -10
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +1159 -687
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +27 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +88 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -0
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +69 -0
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -0
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +442 -0
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +2 -2
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +40 -32
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +35 -3
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.d.ts +8 -2
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +58 -23
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +16 -16
|
@@ -18,7 +18,8 @@ import * as i4 from "@progress/kendo-angular-layout";
|
|
|
18
18
|
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
|
-
import * as i8 from "
|
|
21
|
+
import * as i8 from "./chat-message-viewer.component";
|
|
22
|
+
import * as i9 from "@angular/common";
|
|
22
23
|
const _forTrack0 = ($index, $item) => $item.attemptNumber;
|
|
23
24
|
const _forTrack1 = ($index, $item) => $item.ID;
|
|
24
25
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -31,7 +32,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_11_Template(
|
|
|
31
32
|
i0.ɵɵtextInterpolate1("#", ctx_r1.record.ID.substring(0, 8), "");
|
|
32
33
|
} }
|
|
33
34
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
34
|
-
i0.ɵɵelementStart(0, "span",
|
|
35
|
+
i0.ɵɵelementStart(0, "span", 33);
|
|
35
36
|
i0.ɵɵelement(1, "i");
|
|
36
37
|
i0.ɵɵtext(2);
|
|
37
38
|
i0.ɵɵelementEnd();
|
|
@@ -45,9 +46,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_16_Template(
|
|
|
45
46
|
} }
|
|
46
47
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
47
48
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
48
|
-
i0.ɵɵelementStart(0, "span",
|
|
49
|
+
i0.ɵɵelementStart(0, "span", 34);
|
|
49
50
|
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)); });
|
|
50
|
-
i0.ɵɵelement(1, "i",
|
|
51
|
+
i0.ɵɵelement(1, "i", 35);
|
|
51
52
|
i0.ɵɵtext(2);
|
|
52
53
|
i0.ɵɵelementEnd();
|
|
53
54
|
} if (rf & 2) {
|
|
@@ -57,9 +58,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template(
|
|
|
57
58
|
} }
|
|
58
59
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
59
60
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
60
|
-
i0.ɵɵelementStart(0, "span",
|
|
61
|
+
i0.ɵɵelementStart(0, "span", 36);
|
|
61
62
|
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)); });
|
|
62
|
-
i0.ɵɵelement(1, "i",
|
|
63
|
+
i0.ɵɵelement(1, "i", 37);
|
|
63
64
|
i0.ɵɵtext(2);
|
|
64
65
|
i0.ɵɵelementEnd();
|
|
65
66
|
} if (rf & 2) {
|
|
@@ -69,9 +70,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template(
|
|
|
69
70
|
} }
|
|
70
71
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
71
72
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
72
|
-
i0.ɵɵelementStart(0, "span",
|
|
73
|
+
i0.ɵɵelementStart(0, "span", 38);
|
|
73
74
|
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",
|
|
75
|
+
i0.ɵɵelement(1, "i", 39);
|
|
75
76
|
i0.ɵɵtext(2);
|
|
76
77
|
i0.ɵɵelementEnd();
|
|
77
78
|
} if (rf & 2) {
|
|
@@ -81,7 +82,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_19_Template(
|
|
|
81
82
|
} }
|
|
82
83
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
83
84
|
i0.ɵɵelementStart(0, "div", 21);
|
|
84
|
-
i0.ɵɵelement(1, "i",
|
|
85
|
+
i0.ɵɵelement(1, "i", 40);
|
|
85
86
|
i0.ɵɵelementStart(2, "div", 23)(3, "div", 24);
|
|
86
87
|
i0.ɵɵtext(4, "Started");
|
|
87
88
|
i0.ɵɵelementEnd();
|
|
@@ -95,47 +96,154 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_Template(
|
|
|
95
96
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
|
|
96
97
|
} }
|
|
97
98
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
98
|
-
i0.ɵɵelementStart(0, "span",
|
|
99
|
+
i0.ɵɵelementStart(0, "span", 42);
|
|
99
100
|
i0.ɵɵtext(1, "JSON");
|
|
100
101
|
i0.ɵɵelementEnd();
|
|
101
102
|
} }
|
|
102
103
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Template(rf, ctx) { if (rf & 1) {
|
|
103
|
-
i0.ɵɵelementStart(0, "span",
|
|
104
|
-
i0.ɵɵelement(1, "i",
|
|
105
|
-
i0.ɵɵtext(2, " Input
|
|
106
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Conditional_3_Template, 2, 0, "span",
|
|
104
|
+
i0.ɵɵelementStart(0, "span", 41);
|
|
105
|
+
i0.ɵɵelement(1, "i", 35);
|
|
106
|
+
i0.ɵɵtext(2, " Input ");
|
|
107
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_49_Conditional_3_Template, 2, 0, "span", 42);
|
|
107
108
|
i0.ɵɵelementEnd();
|
|
108
109
|
} if (rf & 2) {
|
|
109
110
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
110
111
|
i0.ɵɵadvance(3);
|
|
111
112
|
i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
|
|
112
113
|
} }
|
|
114
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_ng_template_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
115
|
+
i0.ɵɵelementStart(0, "span", 58);
|
|
116
|
+
i0.ɵɵtext(1);
|
|
117
|
+
i0.ɵɵelementEnd();
|
|
118
|
+
} if (rf & 2) {
|
|
119
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
120
|
+
i0.ɵɵadvance();
|
|
121
|
+
i0.ɵɵtextInterpolate1("(", ctx_r1.chatMessages.length, ")");
|
|
122
|
+
} }
|
|
123
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
124
|
+
i0.ɵɵelementStart(0, "span", 56);
|
|
125
|
+
i0.ɵɵelement(1, "i", 57);
|
|
126
|
+
i0.ɵɵtext(2, " Messages ");
|
|
127
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_ng_template_2_Conditional_3_Template, 2, 1, "span", 58);
|
|
128
|
+
i0.ɵɵelementEnd();
|
|
129
|
+
} if (rf & 2) {
|
|
130
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
131
|
+
i0.ɵɵadvance(3);
|
|
132
|
+
i0.ɵɵconditional(ctx_r1.chatMessages.length > 0 ? 3 : -1);
|
|
133
|
+
} }
|
|
134
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
135
|
+
i0.ɵɵelementStart(0, "div", 49);
|
|
136
|
+
i0.ɵɵelement(1, "i", 59);
|
|
137
|
+
i0.ɵɵelementStart(2, "p");
|
|
138
|
+
i0.ɵɵtext(3, "Loading messages...");
|
|
139
|
+
i0.ɵɵelementEnd()();
|
|
140
|
+
} }
|
|
141
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
142
|
+
i0.ɵɵelement(0, "mj-chat-message-viewer", 50);
|
|
143
|
+
} if (rf & 2) {
|
|
144
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
145
|
+
i0.ɵɵproperty("messages", ctx_r1.chatMessages);
|
|
146
|
+
} }
|
|
147
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
148
|
+
i0.ɵɵelementStart(0, "div", 45);
|
|
149
|
+
i0.ɵɵelement(1, "i", 60);
|
|
150
|
+
i0.ɵɵelementStart(2, "p");
|
|
151
|
+
i0.ɵɵtext(3, "No chat messages found");
|
|
152
|
+
i0.ɵɵelementEnd()();
|
|
153
|
+
} }
|
|
154
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_ng_template_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
155
|
+
i0.ɵɵelementStart(0, "span", 42);
|
|
156
|
+
i0.ɵɵtext(1, "Object");
|
|
157
|
+
i0.ɵɵelementEnd();
|
|
158
|
+
} }
|
|
159
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_ng_template_8_Template(rf, ctx) { if (rf & 1) {
|
|
160
|
+
i0.ɵɵelementStart(0, "span", 56);
|
|
161
|
+
i0.ɵɵelement(1, "i", 61);
|
|
162
|
+
i0.ɵɵtext(2, " Data ");
|
|
163
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_ng_template_8_Conditional_3_Template, 2, 0, "span", 42);
|
|
164
|
+
i0.ɵɵelementEnd();
|
|
165
|
+
} if (rf & 2) {
|
|
166
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
167
|
+
i0.ɵɵadvance(3);
|
|
168
|
+
i0.ɵɵconditional(ctx_r1.inputData ? 3 : -1);
|
|
169
|
+
} }
|
|
170
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
171
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
172
|
+
i0.ɵɵelementStart(0, "div", 51)(1, "div", 52)(2, "button", 53);
|
|
173
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Conditional_10_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedData, "Data")); });
|
|
174
|
+
i0.ɵɵelement(3, "i", 54);
|
|
175
|
+
i0.ɵɵtext(4, " Copy ");
|
|
176
|
+
i0.ɵɵelementEnd()();
|
|
177
|
+
i0.ɵɵelementStart(5, "mj-code-editor", 62);
|
|
178
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Conditional_10_Template_mj_code_editor_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedData, $event) || (ctx_r1.formattedData = $event); return i0.ɵɵresetView($event); });
|
|
179
|
+
i0.ɵɵelementEnd()();
|
|
180
|
+
} if (rf & 2) {
|
|
181
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
182
|
+
i0.ɵɵadvance(5);
|
|
183
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedData);
|
|
184
|
+
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
185
|
+
} }
|
|
186
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
187
|
+
i0.ɵɵelementStart(0, "div", 45);
|
|
188
|
+
i0.ɵɵelement(1, "i", 61);
|
|
189
|
+
i0.ɵɵelementStart(2, "p");
|
|
190
|
+
i0.ɵɵtext(3, "No data object found");
|
|
191
|
+
i0.ɵɵelementEnd()();
|
|
192
|
+
} }
|
|
193
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_ng_template_13_Template(rf, ctx) { if (rf & 1) {
|
|
194
|
+
i0.ɵɵelementStart(0, "span", 56);
|
|
195
|
+
i0.ɵɵelement(1, "i", 63);
|
|
196
|
+
i0.ɵɵtext(2, " Raw ");
|
|
197
|
+
i0.ɵɵelementEnd();
|
|
198
|
+
} }
|
|
113
199
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
114
200
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
115
|
-
i0.ɵɵelementStart(0, "div",
|
|
116
|
-
i0.ɵɵ
|
|
117
|
-
i0.ɵɵ
|
|
118
|
-
i0.ɵɵ
|
|
201
|
+
i0.ɵɵelementStart(0, "div", 44)(1, "kendo-expansionpanel", 46);
|
|
202
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_ng_template_2_Template, 4, 1, "ng-template", 47);
|
|
203
|
+
i0.ɵɵelementStart(3, "div", 48);
|
|
204
|
+
i0.ɵɵtemplate(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Conditional_4_Template, 4, 0, "div", 49)(5, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 50)(6, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Conditional_6_Template, 4, 0, "div", 45);
|
|
119
205
|
i0.ɵɵelementEnd()();
|
|
120
|
-
i0.ɵɵelementStart(
|
|
121
|
-
i0.ɵɵ
|
|
206
|
+
i0.ɵɵelementStart(7, "kendo-expansionpanel", 46);
|
|
207
|
+
i0.ɵɵtemplate(8, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_ng_template_8_Template, 4, 1, "ng-template", 47);
|
|
208
|
+
i0.ɵɵelementStart(9, "div", 48);
|
|
209
|
+
i0.ɵɵtemplate(10, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Conditional_10_Template, 6, 4, "div", 51)(11, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Conditional_11_Template, 4, 0, "div", 45);
|
|
122
210
|
i0.ɵɵelementEnd()();
|
|
211
|
+
i0.ɵɵelementStart(12, "kendo-expansionpanel", 46);
|
|
212
|
+
i0.ɵɵtemplate(13, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_ng_template_13_Template, 3, 0, "ng-template", 47);
|
|
213
|
+
i0.ɵɵelementStart(14, "div", 48)(15, "div", 51)(16, "div", 52)(17, "button", 53);
|
|
214
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
|
|
215
|
+
i0.ɵɵelement(18, "i", 54);
|
|
216
|
+
i0.ɵɵtext(19, " Copy ");
|
|
217
|
+
i0.ɵɵelementEnd()();
|
|
218
|
+
i0.ɵɵelementStart(20, "mj-code-editor", 55);
|
|
219
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Template_mj_code_editor_ngModelChange_20_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); });
|
|
220
|
+
i0.ɵɵelementEnd()()()()();
|
|
123
221
|
} if (rf & 2) {
|
|
124
222
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
125
|
-
i0.ɵɵadvance(
|
|
223
|
+
i0.ɵɵadvance();
|
|
224
|
+
i0.ɵɵproperty("expanded", ctx_r1.messagesExpanded)("animation", false);
|
|
225
|
+
i0.ɵɵadvance(3);
|
|
226
|
+
i0.ɵɵconditional(ctx_r1.isParsingMessages || ctx_r1.isLoadingRelatedData ? 4 : ctx_r1.chatMessages.length > 0 ? 5 : 6);
|
|
227
|
+
i0.ɵɵadvance(3);
|
|
228
|
+
i0.ɵɵproperty("expanded", ctx_r1.dataExpanded)("animation", false);
|
|
229
|
+
i0.ɵɵadvance(3);
|
|
230
|
+
i0.ɵɵconditional(ctx_r1.inputData && ctx_r1.formattedData ? 10 : 11);
|
|
231
|
+
i0.ɵɵadvance(2);
|
|
232
|
+
i0.ɵɵproperty("expanded", ctx_r1.rawExpanded)("animation", false);
|
|
233
|
+
i0.ɵɵadvance(8);
|
|
126
234
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedMessages);
|
|
127
235
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
128
236
|
} }
|
|
129
237
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
130
|
-
i0.ɵɵelementStart(0, "div",
|
|
131
|
-
i0.ɵɵelement(1, "i",
|
|
238
|
+
i0.ɵɵelementStart(0, "div", 45);
|
|
239
|
+
i0.ɵɵelement(1, "i", 60);
|
|
132
240
|
i0.ɵɵelementStart(2, "p");
|
|
133
241
|
i0.ɵɵtext(3, "No input messages recorded");
|
|
134
242
|
i0.ɵɵelementEnd()();
|
|
135
243
|
} }
|
|
136
244
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Template(rf, ctx) { if (rf & 1) {
|
|
137
|
-
i0.ɵɵelementStart(0, "div",
|
|
138
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Template,
|
|
245
|
+
i0.ɵɵelementStart(0, "div", 43);
|
|
246
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_1_Template, 21, 12, "div", 44)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Conditional_2_Template, 4, 0, "div", 45);
|
|
139
247
|
i0.ɵɵelementEnd();
|
|
140
248
|
} if (rf & 2) {
|
|
141
249
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -143,20 +251,20 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_50_Template(
|
|
|
143
251
|
i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 1 : 2);
|
|
144
252
|
} }
|
|
145
253
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
146
|
-
i0.ɵɵelementStart(0, "span",
|
|
254
|
+
i0.ɵɵelementStart(0, "span", 42);
|
|
147
255
|
i0.ɵɵtext(1, "JSON");
|
|
148
256
|
i0.ɵɵelementEnd();
|
|
149
257
|
} }
|
|
150
258
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
151
|
-
i0.ɵɵelementStart(0, "span",
|
|
259
|
+
i0.ɵɵelementStart(0, "span", 65);
|
|
152
260
|
i0.ɵɵtext(1, "Error");
|
|
153
261
|
i0.ɵɵelementEnd();
|
|
154
262
|
} }
|
|
155
263
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Template(rf, ctx) { if (rf & 1) {
|
|
156
|
-
i0.ɵɵelementStart(0, "span",
|
|
157
|
-
i0.ɵɵelement(1, "i",
|
|
264
|
+
i0.ɵɵelementStart(0, "span", 41);
|
|
265
|
+
i0.ɵɵelement(1, "i", 64);
|
|
158
266
|
i0.ɵɵtext(2, " Result ");
|
|
159
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_3_Template, 2, 0, "span",
|
|
267
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_3_Template, 2, 0, "span", 42)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Conditional_4_Template, 2, 0, "span", 65);
|
|
160
268
|
i0.ɵɵelementEnd();
|
|
161
269
|
} if (rf & 2) {
|
|
162
270
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -166,9 +274,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_52_Template(
|
|
|
166
274
|
i0.ɵɵconditional(ctx_r1.record.ErrorMessage ? 4 : -1);
|
|
167
275
|
} }
|
|
168
276
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
169
|
-
i0.ɵɵelementStart(0, "div",
|
|
170
|
-
i0.ɵɵelement(1, "i",
|
|
171
|
-
i0.ɵɵelementStart(2, "div",
|
|
277
|
+
i0.ɵɵelementStart(0, "div", 66);
|
|
278
|
+
i0.ɵɵelement(1, "i", 67);
|
|
279
|
+
i0.ɵɵelementStart(2, "div", 68)(3, "h4");
|
|
172
280
|
i0.ɵɵtext(4, "Error Message");
|
|
173
281
|
i0.ɵɵelementEnd();
|
|
174
282
|
i0.ɵɵelementStart(5, "p");
|
|
@@ -180,14 +288,14 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Condition
|
|
|
180
288
|
i0.ɵɵtextInterpolate(ctx_r1.record.ErrorMessage);
|
|
181
289
|
} }
|
|
182
290
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
183
|
-
const
|
|
184
|
-
i0.ɵɵelementStart(0, "div",
|
|
185
|
-
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_2_Template_button_click_2_listener() { i0.ɵɵrestoreView(
|
|
186
|
-
i0.ɵɵelement(3, "i",
|
|
291
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
292
|
+
i0.ɵɵelementStart(0, "div", 51)(1, "div", 52)(2, "button", 53);
|
|
293
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_2_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedResult, "Result")); });
|
|
294
|
+
i0.ɵɵelement(3, "i", 54);
|
|
187
295
|
i0.ɵɵtext(4, " Copy ");
|
|
188
296
|
i0.ɵɵelementEnd()();
|
|
189
|
-
i0.ɵɵelementStart(5, "mj-code-editor",
|
|
190
|
-
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_2_Template_mj_code_editor_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(
|
|
297
|
+
i0.ɵɵelementStart(5, "mj-code-editor", 69);
|
|
298
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_2_Template_mj_code_editor_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedResult, $event) || (ctx_r1.formattedResult = $event); return i0.ɵɵresetView($event); });
|
|
191
299
|
i0.ɵɵelementEnd()();
|
|
192
300
|
} if (rf & 2) {
|
|
193
301
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -196,15 +304,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Condition
|
|
|
196
304
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
197
305
|
} }
|
|
198
306
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
199
|
-
i0.ɵɵelementStart(0, "div",
|
|
200
|
-
i0.ɵɵelement(1, "i",
|
|
307
|
+
i0.ɵɵelementStart(0, "div", 45);
|
|
308
|
+
i0.ɵɵelement(1, "i", 70);
|
|
201
309
|
i0.ɵɵelementStart(2, "p");
|
|
202
310
|
i0.ɵɵtext(3, "No result data recorded");
|
|
203
311
|
i0.ɵɵelementEnd()();
|
|
204
312
|
} }
|
|
205
313
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Template(rf, ctx) { if (rf & 1) {
|
|
206
|
-
i0.ɵɵelementStart(0, "div",
|
|
207
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_1_Template, 7, 1, "div",
|
|
314
|
+
i0.ɵɵelementStart(0, "div", 43);
|
|
315
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_1_Template, 7, 1, "div", 66)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_2_Template, 6, 4, "div", 51)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_3_Template, 4, 0, "div", 45);
|
|
208
316
|
i0.ɵɵelementEnd();
|
|
209
317
|
} if (rf & 2) {
|
|
210
318
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -214,13 +322,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Template(
|
|
|
214
322
|
i0.ɵɵconditional(ctx_r1.record.Result && ctx_r1.record.Result.trim() !== "" ? 2 : !ctx_r1.record.ErrorMessage ? 3 : -1);
|
|
215
323
|
} }
|
|
216
324
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_55_Template(rf, ctx) { if (rf & 1) {
|
|
217
|
-
i0.ɵɵelementStart(0, "span",
|
|
218
|
-
i0.ɵɵelement(1, "i",
|
|
325
|
+
i0.ɵɵelementStart(0, "span", 41);
|
|
326
|
+
i0.ɵɵelement(1, "i", 71);
|
|
219
327
|
i0.ɵɵtext(2, " Token Usage & Metrics ");
|
|
220
328
|
i0.ɵɵelementEnd();
|
|
221
329
|
} }
|
|
222
330
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
223
|
-
i0.ɵɵelementStart(0, "div",
|
|
331
|
+
i0.ɵɵelementStart(0, "div", 77)(1, "span");
|
|
224
332
|
i0.ɵɵtext(2);
|
|
225
333
|
i0.ɵɵelementEnd()();
|
|
226
334
|
} if (rf & 2) {
|
|
@@ -229,7 +337,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Condition
|
|
|
229
337
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensPromptRollup), "");
|
|
230
338
|
} }
|
|
231
339
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
232
|
-
i0.ɵɵelementStart(0, "div",
|
|
340
|
+
i0.ɵɵelementStart(0, "div", 77)(1, "span");
|
|
233
341
|
i0.ɵɵtext(2);
|
|
234
342
|
i0.ɵɵelementEnd()();
|
|
235
343
|
} if (rf & 2) {
|
|
@@ -238,7 +346,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Condition
|
|
|
238
346
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensCompletionRollup), "");
|
|
239
347
|
} }
|
|
240
348
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
241
|
-
i0.ɵɵelementStart(0, "div",
|
|
349
|
+
i0.ɵɵelementStart(0, "div", 77)(1, "span");
|
|
242
350
|
i0.ɵɵtext(2);
|
|
243
351
|
i0.ɵɵelementEnd()();
|
|
244
352
|
} if (rf & 2) {
|
|
@@ -247,7 +355,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Condition
|
|
|
247
355
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup), "");
|
|
248
356
|
} }
|
|
249
357
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
250
|
-
i0.ɵɵelementStart(0, "div",
|
|
358
|
+
i0.ɵɵelementStart(0, "div", 77)(1, "span");
|
|
251
359
|
i0.ɵɵtext(2);
|
|
252
360
|
i0.ɵɵelementEnd()();
|
|
253
361
|
} if (rf & 2) {
|
|
@@ -256,7 +364,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Condition
|
|
|
256
364
|
i0.ɵɵtextInterpolate1("Total: ", ctx_r1.formatCost(ctx_r1.record.TotalCost), "");
|
|
257
365
|
} }
|
|
258
366
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
259
|
-
i0.ɵɵelementStart(0, "div",
|
|
367
|
+
i0.ɵɵelementStart(0, "div", 79);
|
|
260
368
|
i0.ɵɵtext(1);
|
|
261
369
|
i0.ɵɵelementEnd();
|
|
262
370
|
} if (rf & 2) {
|
|
@@ -265,7 +373,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Condition
|
|
|
265
373
|
i0.ɵɵtextInterpolate(ctx_r1.record.CostCurrency);
|
|
266
374
|
} }
|
|
267
375
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
268
|
-
i0.ɵɵelementStart(0, "div",
|
|
376
|
+
i0.ɵɵelementStart(0, "div", 81)(1, "span", 24);
|
|
269
377
|
i0.ɵɵtext(2, "Execution Order:");
|
|
270
378
|
i0.ɵɵelementEnd();
|
|
271
379
|
i0.ɵɵelementStart(3, "span", 25);
|
|
@@ -277,7 +385,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Condition
|
|
|
277
385
|
i0.ɵɵtextInterpolate(ctx_r1.record.ExecutionOrder);
|
|
278
386
|
} }
|
|
279
387
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
280
|
-
i0.ɵɵelementStart(0, "div",
|
|
388
|
+
i0.ɵɵelementStart(0, "div", 81)(1, "span", 24);
|
|
281
389
|
i0.ɵɵtext(2, "Configuration:");
|
|
282
390
|
i0.ɵɵelementEnd();
|
|
283
391
|
i0.ɵɵelementStart(3, "span", 25);
|
|
@@ -289,14 +397,14 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Condition
|
|
|
289
397
|
i0.ɵɵtextInterpolate(ctx_r1.record.Configuration);
|
|
290
398
|
} }
|
|
291
399
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
292
|
-
const
|
|
293
|
-
i0.ɵɵelementStart(0, "div",
|
|
400
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
401
|
+
i0.ɵɵelementStart(0, "div", 81)(1, "span", 24);
|
|
294
402
|
i0.ɵɵtext(2, "Agent:");
|
|
295
403
|
i0.ɵɵelementEnd();
|
|
296
|
-
i0.ɵɵelementStart(3, "span",
|
|
297
|
-
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_38_Template_span_click_3_listener() { i0.ɵɵrestoreView(
|
|
404
|
+
i0.ɵɵelementStart(3, "span", 82);
|
|
405
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_38_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Agents", ctx_r1.record.AgentID)); });
|
|
298
406
|
i0.ɵɵtext(4);
|
|
299
|
-
i0.ɵɵelement(5, "i",
|
|
407
|
+
i0.ɵɵelement(5, "i", 83);
|
|
300
408
|
i0.ɵɵelementEnd()();
|
|
301
409
|
} if (rf & 2) {
|
|
302
410
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -304,48 +412,48 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Condition
|
|
|
304
412
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
|
|
305
413
|
} }
|
|
306
414
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template(rf, ctx) { if (rf & 1) {
|
|
307
|
-
i0.ɵɵelementStart(0, "div",
|
|
308
|
-
i0.ɵɵelement(4, "i",
|
|
415
|
+
i0.ɵɵelementStart(0, "div", 43)(1, "div", 72)(2, "div", 73)(3, "div", 74);
|
|
416
|
+
i0.ɵɵelement(4, "i", 75);
|
|
309
417
|
i0.ɵɵelementStart(5, "h4");
|
|
310
418
|
i0.ɵɵtext(6, "Prompt Tokens");
|
|
311
419
|
i0.ɵɵelementEnd()();
|
|
312
|
-
i0.ɵɵelementStart(7, "div",
|
|
420
|
+
i0.ɵɵelementStart(7, "div", 76);
|
|
313
421
|
i0.ɵɵtext(8);
|
|
314
422
|
i0.ɵɵelementEnd();
|
|
315
|
-
i0.ɵɵtemplate(9, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_9_Template, 3, 1, "div",
|
|
423
|
+
i0.ɵɵtemplate(9, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_9_Template, 3, 1, "div", 77);
|
|
316
424
|
i0.ɵɵelementEnd();
|
|
317
|
-
i0.ɵɵelementStart(10, "div",
|
|
318
|
-
i0.ɵɵelement(12, "i",
|
|
425
|
+
i0.ɵɵelementStart(10, "div", 73)(11, "div", 74);
|
|
426
|
+
i0.ɵɵelement(12, "i", 78);
|
|
319
427
|
i0.ɵɵelementStart(13, "h4");
|
|
320
428
|
i0.ɵɵtext(14, "Completion Tokens");
|
|
321
429
|
i0.ɵɵelementEnd()();
|
|
322
|
-
i0.ɵɵelementStart(15, "div",
|
|
430
|
+
i0.ɵɵelementStart(15, "div", 76);
|
|
323
431
|
i0.ɵɵtext(16);
|
|
324
432
|
i0.ɵɵelementEnd();
|
|
325
|
-
i0.ɵɵtemplate(17, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_17_Template, 3, 1, "div",
|
|
433
|
+
i0.ɵɵtemplate(17, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_17_Template, 3, 1, "div", 77);
|
|
326
434
|
i0.ɵɵelementEnd();
|
|
327
|
-
i0.ɵɵelementStart(18, "div",
|
|
435
|
+
i0.ɵɵelementStart(18, "div", 73)(19, "div", 74);
|
|
328
436
|
i0.ɵɵelement(20, "i", 26);
|
|
329
437
|
i0.ɵɵelementStart(21, "h4");
|
|
330
438
|
i0.ɵɵtext(22, "Total Tokens");
|
|
331
439
|
i0.ɵɵelementEnd()();
|
|
332
|
-
i0.ɵɵelementStart(23, "div",
|
|
440
|
+
i0.ɵɵelementStart(23, "div", 76);
|
|
333
441
|
i0.ɵɵtext(24);
|
|
334
442
|
i0.ɵɵelementEnd();
|
|
335
|
-
i0.ɵɵtemplate(25, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_25_Template, 3, 1, "div",
|
|
443
|
+
i0.ɵɵtemplate(25, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_25_Template, 3, 1, "div", 77);
|
|
336
444
|
i0.ɵɵelementEnd();
|
|
337
|
-
i0.ɵɵelementStart(26, "div",
|
|
445
|
+
i0.ɵɵelementStart(26, "div", 73)(27, "div", 74);
|
|
338
446
|
i0.ɵɵelement(28, "i", 27);
|
|
339
447
|
i0.ɵɵelementStart(29, "h4");
|
|
340
448
|
i0.ɵɵtext(30, "Cost");
|
|
341
449
|
i0.ɵɵelementEnd()();
|
|
342
|
-
i0.ɵɵelementStart(31, "div",
|
|
450
|
+
i0.ɵɵelementStart(31, "div", 76);
|
|
343
451
|
i0.ɵɵtext(32);
|
|
344
452
|
i0.ɵɵelementEnd();
|
|
345
|
-
i0.ɵɵtemplate(33, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_33_Template, 3, 1, "div",
|
|
453
|
+
i0.ɵɵtemplate(33, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_33_Template, 3, 1, "div", 77)(34, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_34_Template, 2, 1, "div", 79);
|
|
346
454
|
i0.ɵɵelementEnd()();
|
|
347
|
-
i0.ɵɵelementStart(35, "div",
|
|
348
|
-
i0.ɵɵtemplate(36, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_36_Template, 5, 1, "div",
|
|
455
|
+
i0.ɵɵelementStart(35, "div", 80);
|
|
456
|
+
i0.ɵɵtemplate(36, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_36_Template, 5, 1, "div", 81)(37, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_37_Template, 5, 1, "div", 81)(38, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_38_Template, 6, 1, "div", 81);
|
|
349
457
|
i0.ɵɵelementEnd()();
|
|
350
458
|
} if (rf & 2) {
|
|
351
459
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -375,7 +483,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template(
|
|
|
375
483
|
i0.ɵɵconditional(ctx_r1.record.AgentID ? 38 : -1);
|
|
376
484
|
} }
|
|
377
485
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
378
|
-
i0.ɵɵelementStart(0, "span",
|
|
486
|
+
i0.ɵɵelementStart(0, "span", 58);
|
|
379
487
|
i0.ɵɵtext(1);
|
|
380
488
|
i0.ɵɵelementEnd();
|
|
381
489
|
} if (rf & 2) {
|
|
@@ -384,20 +492,20 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_templa
|
|
|
384
492
|
i0.ɵɵtextInterpolate1("(", ctx_r1.record.ValidationAttemptCount, " attempts)");
|
|
385
493
|
} }
|
|
386
494
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
387
|
-
i0.ɵɵelementStart(0, "span",
|
|
495
|
+
i0.ɵɵelementStart(0, "span", 85);
|
|
388
496
|
i0.ɵɵtext(1, "Passed");
|
|
389
497
|
i0.ɵɵelementEnd();
|
|
390
498
|
} }
|
|
391
499
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
392
|
-
i0.ɵɵelementStart(0, "span",
|
|
500
|
+
i0.ɵɵelementStart(0, "span", 65);
|
|
393
501
|
i0.ɵɵtext(1, "Failed");
|
|
394
502
|
i0.ɵɵelementEnd();
|
|
395
503
|
} }
|
|
396
504
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
397
|
-
i0.ɵɵelementStart(0, "span",
|
|
398
|
-
i0.ɵɵelement(1, "i",
|
|
505
|
+
i0.ɵɵelementStart(0, "span", 41);
|
|
506
|
+
i0.ɵɵelement(1, "i", 84);
|
|
399
507
|
i0.ɵɵtext(2, " Validation & Retries ");
|
|
400
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Conditional_3_Template, 2, 1, "span",
|
|
508
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Conditional_3_Template, 2, 1, "span", 58)(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Conditional_4_Template, 2, 0, "span", 85)(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_1_Conditional_5_Template, 2, 0, "span", 65);
|
|
401
509
|
i0.ɵɵelementEnd();
|
|
402
510
|
} if (rf & 2) {
|
|
403
511
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -407,7 +515,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_templa
|
|
|
407
515
|
i0.ɵɵconditional(ctx_r1.record.FinalValidationPassed ? 4 : ctx_r1.record.FinalValidationPassed === false ? 5 : -1);
|
|
408
516
|
} }
|
|
409
517
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_29_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
410
|
-
i0.ɵɵelementStart(0, "span",
|
|
518
|
+
i0.ɵɵelementStart(0, "span", 96);
|
|
411
519
|
i0.ɵɵtext(1);
|
|
412
520
|
i0.ɵɵelementEnd();
|
|
413
521
|
} if (rf & 2) {
|
|
@@ -416,14 +524,14 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_templa
|
|
|
416
524
|
i0.ɵɵtextInterpolate1("", ctx_r1.record.ValidationErrorCount, " validation errors");
|
|
417
525
|
} }
|
|
418
526
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
419
|
-
i0.ɵɵelementStart(0, "div",
|
|
420
|
-
i0.ɵɵelement(2, "i",
|
|
527
|
+
i0.ɵɵelementStart(0, "div", 91)(1, "h5");
|
|
528
|
+
i0.ɵɵelement(2, "i", 67);
|
|
421
529
|
i0.ɵɵtext(3, " Final Validation Error");
|
|
422
530
|
i0.ɵɵelementEnd();
|
|
423
531
|
i0.ɵɵelementStart(4, "p");
|
|
424
532
|
i0.ɵɵtext(5);
|
|
425
533
|
i0.ɵɵelementEnd();
|
|
426
|
-
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_29_Conditional_6_Template, 2, 1, "span",
|
|
534
|
+
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_29_Conditional_6_Template, 2, 1, "span", 96);
|
|
427
535
|
i0.ɵɵelementEnd();
|
|
428
536
|
} if (rf & 2) {
|
|
429
537
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -433,8 +541,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_templa
|
|
|
433
541
|
i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationErrorCount && ctx_r1.record.ValidationErrorCount > 0 ? 6 : -1);
|
|
434
542
|
} }
|
|
435
543
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
436
|
-
i0.ɵɵelementStart(0, "div",
|
|
437
|
-
i0.ɵɵelement(2, "i",
|
|
544
|
+
i0.ɵɵelementStart(0, "div", 92)(1, "h5");
|
|
545
|
+
i0.ɵɵelement(2, "i", 97);
|
|
438
546
|
i0.ɵɵtext(3, " Most Common Error");
|
|
439
547
|
i0.ɵɵelementEnd();
|
|
440
548
|
i0.ɵɵelementStart(4, "p");
|
|
@@ -446,23 +554,23 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_templa
|
|
|
446
554
|
i0.ɵɵtextInterpolate(ctx_r1.record.CommonValidationError);
|
|
447
555
|
} }
|
|
448
556
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
449
|
-
i0.ɵɵelementStart(0, "div",
|
|
557
|
+
i0.ɵɵelementStart(0, "div", 93)(1, "h4");
|
|
450
558
|
i0.ɵɵtext(2, "Retry Timeline");
|
|
451
559
|
i0.ɵɵelementEnd();
|
|
452
|
-
i0.ɵɵelementStart(3, "div",
|
|
560
|
+
i0.ɵɵelementStart(3, "div", 98)(4, "div", 99);
|
|
453
561
|
i0.ɵɵelement(5, "i", 22);
|
|
454
562
|
i0.ɵɵelementStart(6, "span");
|
|
455
563
|
i0.ɵɵtext(7);
|
|
456
564
|
i0.ɵɵpipe(8, "date");
|
|
457
565
|
i0.ɵɵelementEnd()();
|
|
458
|
-
i0.ɵɵelementStart(9, "div",
|
|
459
|
-
i0.ɵɵelement(10, "i",
|
|
566
|
+
i0.ɵɵelementStart(9, "div", 99);
|
|
567
|
+
i0.ɵɵelement(10, "i", 100);
|
|
460
568
|
i0.ɵɵelementStart(11, "span");
|
|
461
569
|
i0.ɵɵtext(12);
|
|
462
570
|
i0.ɵɵpipe(13, "date");
|
|
463
571
|
i0.ɵɵelementEnd()();
|
|
464
|
-
i0.ɵɵelementStart(14, "div",
|
|
465
|
-
i0.ɵɵelement(15, "i",
|
|
572
|
+
i0.ɵɵelementStart(14, "div", 99);
|
|
573
|
+
i0.ɵɵelement(15, "i", 101);
|
|
466
574
|
i0.ɵɵelementStart(16, "span");
|
|
467
575
|
i0.ɵɵtext(17);
|
|
468
576
|
i0.ɵɵelementEnd()()()();
|
|
@@ -476,65 +584,65 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_templa
|
|
|
476
584
|
i0.ɵɵtextInterpolate1("Total Retry Duration: ", ctx_r1.formatDuration(ctx_r1.record.TotalRetryDurationMS), "");
|
|
477
585
|
} }
|
|
478
586
|
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",
|
|
587
|
+
i0.ɵɵelementStart(0, "span", 96);
|
|
480
588
|
i0.ɵɵtext(1);
|
|
481
589
|
i0.ɵɵelementEnd();
|
|
482
590
|
} if (rf & 2) {
|
|
483
|
-
const
|
|
591
|
+
const attempt_r10 = i0.ɵɵnextContext(2).$implicit;
|
|
484
592
|
i0.ɵɵadvance();
|
|
485
|
-
i0.ɵɵtextInterpolate1("(",
|
|
593
|
+
i0.ɵɵtextInterpolate1("(", attempt_r10.validationErrorCount, " errors)");
|
|
486
594
|
} }
|
|
487
595
|
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",
|
|
596
|
+
i0.ɵɵelementStart(0, "span", 109);
|
|
489
597
|
i0.ɵɵtext(1);
|
|
490
598
|
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",
|
|
599
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 96);
|
|
492
600
|
} if (rf & 2) {
|
|
493
|
-
const
|
|
601
|
+
const attempt_r10 = i0.ɵɵnextContext().$implicit;
|
|
494
602
|
i0.ɵɵadvance();
|
|
495
|
-
i0.ɵɵtextInterpolate(
|
|
603
|
+
i0.ɵɵtextInterpolate(attempt_r10.errorMessage || "Unknown error");
|
|
496
604
|
i0.ɵɵadvance();
|
|
497
|
-
i0.ɵɵconditional(
|
|
605
|
+
i0.ɵɵconditional(attempt_r10.validationErrorCount > 0 ? 2 : -1);
|
|
498
606
|
} }
|
|
499
607
|
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",
|
|
608
|
+
i0.ɵɵelementStart(0, "span", 108);
|
|
501
609
|
i0.ɵɵtext(1);
|
|
502
610
|
i0.ɵɵelementEnd();
|
|
503
611
|
} if (rf & 2) {
|
|
504
|
-
const
|
|
612
|
+
const attempt_r10 = i0.ɵɵnextContext().$implicit;
|
|
505
613
|
i0.ɵɵadvance();
|
|
506
|
-
i0.ɵɵtextInterpolate1("Output: ",
|
|
614
|
+
i0.ɵɵtextInterpolate1("Output: ", attempt_r10.outputLength, " chars");
|
|
507
615
|
} }
|
|
508
616
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
509
|
-
i0.ɵɵelementStart(0, "div",
|
|
617
|
+
i0.ɵɵelementStart(0, "div", 104)(1, "div", 105);
|
|
510
618
|
i0.ɵɵelement(2, "i");
|
|
511
619
|
i0.ɵɵtext(3);
|
|
512
620
|
i0.ɵɵelementEnd();
|
|
513
|
-
i0.ɵɵelementStart(4, "div",
|
|
621
|
+
i0.ɵɵelementStart(4, "div", 106)(5, "span", 107);
|
|
514
622
|
i0.ɵɵtext(6);
|
|
515
623
|
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",
|
|
624
|
+
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", 108);
|
|
517
625
|
i0.ɵɵelementEnd()();
|
|
518
626
|
} if (rf & 2) {
|
|
519
|
-
const
|
|
520
|
-
i0.ɵɵclassProp("success",
|
|
627
|
+
const attempt_r10 = ctx.$implicit;
|
|
628
|
+
i0.ɵɵclassProp("success", attempt_r10.success)("failed", !attempt_r10.success);
|
|
521
629
|
i0.ɵɵadvance(2);
|
|
522
|
-
i0.ɵɵclassMap(
|
|
630
|
+
i0.ɵɵclassMap(attempt_r10.success ? "fa-solid fa-check" : "fa-solid fa-times");
|
|
523
631
|
i0.ɵɵadvance();
|
|
524
|
-
i0.ɵɵtextInterpolate1(" Attempt #",
|
|
632
|
+
i0.ɵɵtextInterpolate1(" Attempt #", attempt_r10.attemptNumber, " ");
|
|
525
633
|
i0.ɵɵadvance(3);
|
|
526
|
-
i0.ɵɵtextInterpolate(
|
|
634
|
+
i0.ɵɵtextInterpolate(attempt_r10.timestamp);
|
|
527
635
|
i0.ɵɵadvance();
|
|
528
|
-
i0.ɵɵconditional(!
|
|
636
|
+
i0.ɵɵconditional(!attempt_r10.success ? 7 : -1);
|
|
529
637
|
i0.ɵɵadvance();
|
|
530
|
-
i0.ɵɵconditional(
|
|
638
|
+
i0.ɵɵconditional(attempt_r10.outputLength ? 8 : -1);
|
|
531
639
|
} }
|
|
532
640
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
533
|
-
i0.ɵɵelementStart(0, "div",
|
|
641
|
+
i0.ɵɵelementStart(0, "div", 94)(1, "h4");
|
|
534
642
|
i0.ɵɵtext(2, "Validation Attempts");
|
|
535
643
|
i0.ɵɵelementEnd();
|
|
536
|
-
i0.ɵɵelementStart(3, "div",
|
|
537
|
-
i0.ɵɵrepeaterCreate(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_For_5_Template, 9, 10, "div",
|
|
644
|
+
i0.ɵɵelementStart(3, "div", 102);
|
|
645
|
+
i0.ɵɵrepeaterCreate(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_For_5_Template, 9, 10, "div", 103, _forTrack0);
|
|
538
646
|
i0.ɵɵelementEnd()();
|
|
539
647
|
} if (rf & 2) {
|
|
540
648
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -542,12 +650,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_templa
|
|
|
542
650
|
i0.ɵɵrepeater(ctx_r1.validationAttempts);
|
|
543
651
|
} }
|
|
544
652
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
545
|
-
const
|
|
546
|
-
i0.ɵɵelementStart(0, "div",
|
|
653
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
654
|
+
i0.ɵɵelementStart(0, "div", 95)(1, "h4");
|
|
547
655
|
i0.ɵɵtext(2, "Validation Summary Details");
|
|
548
656
|
i0.ɵɵelementEnd();
|
|
549
|
-
i0.ɵɵelementStart(3, "div",
|
|
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(
|
|
657
|
+
i0.ɵɵelementStart(3, "div", 110)(4, "mj-code-editor", 111);
|
|
658
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_33_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationSummary, $event) || (ctx_r1.formattedValidationSummary = $event); return i0.ɵɵresetView($event); });
|
|
551
659
|
i0.ɵɵelementEnd()()();
|
|
552
660
|
} if (rf & 2) {
|
|
553
661
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -556,12 +664,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_templa
|
|
|
556
664
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
557
665
|
} }
|
|
558
666
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
559
|
-
const
|
|
560
|
-
i0.ɵɵelementStart(0, "div",
|
|
667
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
668
|
+
i0.ɵɵelementStart(0, "div", 95)(1, "h4");
|
|
561
669
|
i0.ɵɵtext(2, "Validation Attempts (Raw JSON)");
|
|
562
670
|
i0.ɵɵelementEnd();
|
|
563
|
-
i0.ɵɵelementStart(3, "div",
|
|
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(
|
|
671
|
+
i0.ɵɵelementStart(3, "div", 110)(4, "mj-code-editor", 112);
|
|
672
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_34_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationAttempts, $event) || (ctx_r1.formattedValidationAttempts = $event); return i0.ɵɵresetView($event); });
|
|
565
673
|
i0.ɵɵelementEnd()()();
|
|
566
674
|
} if (rf & 2) {
|
|
567
675
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -570,40 +678,40 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_templa
|
|
|
570
678
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
571
679
|
} }
|
|
572
680
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
573
|
-
i0.ɵɵelementStart(0, "div",
|
|
681
|
+
i0.ɵɵelementStart(0, "div", 43)(1, "div", 86)(2, "div", 87)(3, "h4");
|
|
574
682
|
i0.ɵɵtext(4, "Validation Summary");
|
|
575
683
|
i0.ɵɵelementEnd();
|
|
576
|
-
i0.ɵɵelementStart(5, "div",
|
|
684
|
+
i0.ɵɵelementStart(5, "div", 88);
|
|
577
685
|
i0.ɵɵelement(6, "i");
|
|
578
686
|
i0.ɵɵtext(7);
|
|
579
687
|
i0.ɵɵelementEnd()();
|
|
580
|
-
i0.ɵɵelementStart(8, "div",
|
|
688
|
+
i0.ɵɵelementStart(8, "div", 89)(9, "div", 90)(10, "div", 24);
|
|
581
689
|
i0.ɵɵtext(11, "Total Attempts");
|
|
582
690
|
i0.ɵɵelementEnd();
|
|
583
691
|
i0.ɵɵelementStart(12, "div", 25);
|
|
584
692
|
i0.ɵɵtext(13);
|
|
585
693
|
i0.ɵɵelementEnd()();
|
|
586
|
-
i0.ɵɵelementStart(14, "div",
|
|
694
|
+
i0.ɵɵelementStart(14, "div", 90)(15, "div", 24);
|
|
587
695
|
i0.ɵɵtext(16, "Successful");
|
|
588
696
|
i0.ɵɵelementEnd();
|
|
589
697
|
i0.ɵɵelementStart(17, "div", 25);
|
|
590
698
|
i0.ɵɵtext(18);
|
|
591
699
|
i0.ɵɵelementEnd()();
|
|
592
|
-
i0.ɵɵelementStart(19, "div",
|
|
700
|
+
i0.ɵɵelementStart(19, "div", 90)(20, "div", 24);
|
|
593
701
|
i0.ɵɵtext(21, "Behavior");
|
|
594
702
|
i0.ɵɵelementEnd();
|
|
595
703
|
i0.ɵɵelementStart(22, "div", 25);
|
|
596
704
|
i0.ɵɵtext(23);
|
|
597
705
|
i0.ɵɵelementEnd()();
|
|
598
|
-
i0.ɵɵelementStart(24, "div",
|
|
706
|
+
i0.ɵɵelementStart(24, "div", 90)(25, "div", 24);
|
|
599
707
|
i0.ɵɵtext(26, "Retry Strategy");
|
|
600
708
|
i0.ɵɵelementEnd();
|
|
601
709
|
i0.ɵɵelementStart(27, "div", 25);
|
|
602
710
|
i0.ɵɵtext(28);
|
|
603
711
|
i0.ɵɵelementEnd()()();
|
|
604
|
-
i0.ɵɵtemplate(29, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_29_Template, 7, 2, "div",
|
|
712
|
+
i0.ɵɵtemplate(29, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_29_Template, 7, 2, "div", 91)(30, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_30_Template, 6, 1, "div", 92);
|
|
605
713
|
i0.ɵɵelementEnd();
|
|
606
|
-
i0.ɵɵtemplate(31, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_31_Template, 18, 9, "div",
|
|
714
|
+
i0.ɵɵtemplate(31, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_31_Template, 18, 9, "div", 93)(32, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_32_Template, 6, 0, "div", 94)(33, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_33_Template, 5, 4, "div", 95)(34, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_template_2_Conditional_34_Template, 5, 4, "div", 95);
|
|
607
715
|
i0.ɵɵelementEnd();
|
|
608
716
|
} if (rf & 2) {
|
|
609
717
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -635,7 +743,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_ng_templa
|
|
|
635
743
|
i0.ɵɵconditional(ctx_r1.record.ValidationAttempts ? 34 : -1);
|
|
636
744
|
} }
|
|
637
745
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_Template(rf, ctx) { if (rf & 1) {
|
|
638
|
-
i0.ɵɵelementStart(0, "kendo-panelbar-item",
|
|
746
|
+
i0.ɵɵelementStart(0, "kendo-panelbar-item", 32);
|
|
639
747
|
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
748
|
i0.ɵɵelementEnd();
|
|
641
749
|
} if (rf & 2) {
|
|
@@ -643,7 +751,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_Template(
|
|
|
643
751
|
i0.ɵɵproperty("expanded", ctx_r1.validationExpanded);
|
|
644
752
|
} }
|
|
645
753
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
646
|
-
i0.ɵɵelementStart(0, "span",
|
|
754
|
+
i0.ɵɵelementStart(0, "span", 58);
|
|
647
755
|
i0.ɵɵtext(1);
|
|
648
756
|
i0.ɵɵelementEnd();
|
|
649
757
|
} if (rf & 2) {
|
|
@@ -652,10 +760,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_templa
|
|
|
652
760
|
i0.ɵɵtextInterpolate1("(", ctx_r1.childRuns.length, " children)");
|
|
653
761
|
} }
|
|
654
762
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
655
|
-
i0.ɵɵelementStart(0, "span",
|
|
656
|
-
i0.ɵɵelement(1, "i",
|
|
763
|
+
i0.ɵɵelementStart(0, "span", 41);
|
|
764
|
+
i0.ɵɵelement(1, "i", 113);
|
|
657
765
|
i0.ɵɵtext(2, " Run Hierarchy ");
|
|
658
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_1_Conditional_3_Template, 2, 1, "span",
|
|
766
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_1_Conditional_3_Template, 2, 1, "span", 58);
|
|
659
767
|
i0.ɵɵelementEnd();
|
|
660
768
|
} if (rf & 2) {
|
|
661
769
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -663,22 +771,22 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_templa
|
|
|
663
771
|
i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 3 : -1);
|
|
664
772
|
} }
|
|
665
773
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
666
|
-
const
|
|
667
|
-
i0.ɵɵelementStart(0, "div",
|
|
668
|
-
i0.ɵɵelement(2, "i",
|
|
774
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
775
|
+
i0.ɵɵelementStart(0, "div", 114)(1, "h4");
|
|
776
|
+
i0.ɵɵelement(2, "i", 116);
|
|
669
777
|
i0.ɵɵtext(3, " Parent Run");
|
|
670
778
|
i0.ɵɵelementEnd();
|
|
671
|
-
i0.ɵɵelementStart(4, "div",
|
|
672
|
-
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_1_Template_div_click_4_listener() { i0.ɵɵrestoreView(
|
|
673
|
-
i0.ɵɵelementStart(5, "div",
|
|
779
|
+
i0.ɵɵelementStart(4, "div", 117);
|
|
780
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_1_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
|
|
781
|
+
i0.ɵɵelementStart(5, "div", 118);
|
|
674
782
|
i0.ɵɵelement(6, "i");
|
|
675
783
|
i0.ɵɵelementEnd();
|
|
676
|
-
i0.ɵɵelementStart(7, "div",
|
|
784
|
+
i0.ɵɵelementStart(7, "div", 119)(8, "div", 120);
|
|
677
785
|
i0.ɵɵtext(9);
|
|
678
|
-
i0.ɵɵelementStart(10, "span",
|
|
786
|
+
i0.ɵɵelementStart(10, "span", 121);
|
|
679
787
|
i0.ɵɵtext(11);
|
|
680
788
|
i0.ɵɵelementEnd()();
|
|
681
|
-
i0.ɵɵelementStart(12, "div",
|
|
789
|
+
i0.ɵɵelementStart(12, "div", 122)(13, "span");
|
|
682
790
|
i0.ɵɵelement(14, "i", 22);
|
|
683
791
|
i0.ɵɵtext(15);
|
|
684
792
|
i0.ɵɵelementEnd();
|
|
@@ -687,11 +795,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_templa
|
|
|
687
795
|
i0.ɵɵtext(18);
|
|
688
796
|
i0.ɵɵelementEnd();
|
|
689
797
|
i0.ɵɵelementStart(19, "span");
|
|
690
|
-
i0.ɵɵelement(20, "i",
|
|
798
|
+
i0.ɵɵelement(20, "i", 40);
|
|
691
799
|
i0.ɵɵtext(21);
|
|
692
800
|
i0.ɵɵpipe(22, "date");
|
|
693
801
|
i0.ɵɵelementEnd()()();
|
|
694
|
-
i0.ɵɵelement(23, "i",
|
|
802
|
+
i0.ɵɵelement(23, "i", 83);
|
|
695
803
|
i0.ɵɵelementEnd()();
|
|
696
804
|
} if (rf & 2) {
|
|
697
805
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -711,28 +819,28 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_templa
|
|
|
711
819
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"), "");
|
|
712
820
|
} }
|
|
713
821
|
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",
|
|
822
|
+
i0.ɵɵelementStart(0, "span", 127);
|
|
715
823
|
i0.ɵɵtext(1);
|
|
716
824
|
i0.ɵɵelementEnd();
|
|
717
825
|
} if (rf & 2) {
|
|
718
|
-
const
|
|
826
|
+
const childRun_r15 = i0.ɵɵnextContext().$implicit;
|
|
719
827
|
i0.ɵɵadvance();
|
|
720
|
-
i0.ɵɵtextInterpolate1("#",
|
|
828
|
+
i0.ɵɵtextInterpolate1("#", childRun_r15.ExecutionOrder, "");
|
|
721
829
|
} }
|
|
722
830
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
723
|
-
const
|
|
724
|
-
i0.ɵɵelementStart(0, "div",
|
|
725
|
-
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_For_6_Template_div_click_0_listener() { const
|
|
726
|
-
i0.ɵɵelementStart(1, "div",
|
|
831
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
832
|
+
i0.ɵɵelementStart(0, "div", 126);
|
|
833
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_For_6_Template_div_click_0_listener() { const childRun_r15 = i0.ɵɵrestoreView(_r14).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r15.ID)); });
|
|
834
|
+
i0.ɵɵelementStart(1, "div", 118);
|
|
727
835
|
i0.ɵɵelement(2, "i");
|
|
728
836
|
i0.ɵɵelementEnd();
|
|
729
|
-
i0.ɵɵelementStart(3, "div",
|
|
837
|
+
i0.ɵɵelementStart(3, "div", 119)(4, "div", 120);
|
|
730
838
|
i0.ɵɵtext(5);
|
|
731
|
-
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_For_6_Conditional_6_Template, 2, 1, "span",
|
|
732
|
-
i0.ɵɵelementStart(7, "span",
|
|
839
|
+
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_For_6_Conditional_6_Template, 2, 1, "span", 127);
|
|
840
|
+
i0.ɵɵelementStart(7, "span", 121);
|
|
733
841
|
i0.ɵɵtext(8);
|
|
734
842
|
i0.ɵɵelementEnd()();
|
|
735
|
-
i0.ɵɵelementStart(9, "div",
|
|
843
|
+
i0.ɵɵelementStart(9, "div", 122)(10, "span", 128);
|
|
736
844
|
i0.ɵɵelement(11, "i");
|
|
737
845
|
i0.ɵɵtext(12);
|
|
738
846
|
i0.ɵɵelementEnd();
|
|
@@ -744,39 +852,39 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_templa
|
|
|
744
852
|
i0.ɵɵelement(17, "i", 26);
|
|
745
853
|
i0.ɵɵtext(18);
|
|
746
854
|
i0.ɵɵelementEnd()()();
|
|
747
|
-
i0.ɵɵelement(19, "i",
|
|
855
|
+
i0.ɵɵelement(19, "i", 83);
|
|
748
856
|
i0.ɵɵelementEnd();
|
|
749
857
|
} if (rf & 2) {
|
|
750
|
-
const
|
|
858
|
+
const childRun_r15 = ctx.$implicit;
|
|
751
859
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
752
860
|
i0.ɵɵadvance();
|
|
753
861
|
i0.ɵɵstyleProp("background-color", ctx_r1.getStatusColor() + "20");
|
|
754
862
|
i0.ɵɵadvance();
|
|
755
|
-
i0.ɵɵclassMap("fa-solid " + ctx_r1.getRunTypeIcon(
|
|
863
|
+
i0.ɵɵclassMap("fa-solid " + ctx_r1.getRunTypeIcon(childRun_r15.RunType));
|
|
756
864
|
i0.ɵɵadvance(3);
|
|
757
|
-
i0.ɵɵtextInterpolate1(" Child Run #",
|
|
865
|
+
i0.ɵɵtextInterpolate1(" Child Run #", childRun_r15.ID.substring(0, 8), " ");
|
|
758
866
|
i0.ɵɵadvance();
|
|
759
|
-
i0.ɵɵconditional(
|
|
867
|
+
i0.ɵɵconditional(childRun_r15.ExecutionOrder !== null ? 6 : -1);
|
|
760
868
|
i0.ɵɵadvance(2);
|
|
761
|
-
i0.ɵɵtextInterpolate(
|
|
869
|
+
i0.ɵɵtextInterpolate(childRun_r15.RunType);
|
|
762
870
|
i0.ɵɵadvance(2);
|
|
763
871
|
i0.ɵɵstyleProp("color", ctx_r1.getStatusColor());
|
|
764
872
|
i0.ɵɵadvance();
|
|
765
873
|
i0.ɵɵclassMap("fa-solid " + ctx_r1.getStatusIcon());
|
|
766
874
|
i0.ɵɵadvance();
|
|
767
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
875
|
+
i0.ɵɵtextInterpolate1(" ", childRun_r15.Success ? "Success" : childRun_r15.ErrorMessage ? "Failed" : "Running", " ");
|
|
768
876
|
i0.ɵɵadvance(3);
|
|
769
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(
|
|
877
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(childRun_r15.ExecutionTimeMS), "");
|
|
770
878
|
i0.ɵɵadvance(3);
|
|
771
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(
|
|
879
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r15.TokensUsed), "");
|
|
772
880
|
} }
|
|
773
881
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
774
|
-
i0.ɵɵelementStart(0, "div",
|
|
775
|
-
i0.ɵɵelement(2, "i",
|
|
882
|
+
i0.ɵɵelementStart(0, "div", 115)(1, "h4");
|
|
883
|
+
i0.ɵɵelement(2, "i", 123);
|
|
776
884
|
i0.ɵɵtext(3, " Child Runs");
|
|
777
885
|
i0.ɵɵelementEnd();
|
|
778
|
-
i0.ɵɵelementStart(4, "div",
|
|
779
|
-
i0.ɵɵrepeaterCreate(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_For_6_Template, 20, 14, "div",
|
|
886
|
+
i0.ɵɵelementStart(4, "div", 124);
|
|
887
|
+
i0.ɵɵrepeaterCreate(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_For_6_Template, 20, 14, "div", 125, _forTrack1);
|
|
780
888
|
i0.ɵɵelementEnd()();
|
|
781
889
|
} if (rf & 2) {
|
|
782
890
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -784,8 +892,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_templa
|
|
|
784
892
|
i0.ɵɵrepeater(ctx_r1.childRuns);
|
|
785
893
|
} }
|
|
786
894
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
787
|
-
i0.ɵɵelementStart(0, "div",
|
|
788
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_1_Template, 24, 12, "div",
|
|
895
|
+
i0.ɵɵelementStart(0, "div", 43);
|
|
896
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_1_Template, 24, 12, "div", 114)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_template_2_Conditional_2_Template, 7, 0, "div", 115);
|
|
789
897
|
i0.ɵɵelementEnd();
|
|
790
898
|
} if (rf & 2) {
|
|
791
899
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -795,7 +903,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_ng_templa
|
|
|
795
903
|
i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 2 : -1);
|
|
796
904
|
} }
|
|
797
905
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_Template(rf, ctx) { if (rf & 1) {
|
|
798
|
-
i0.ɵɵelementStart(0, "kendo-panelbar-item",
|
|
906
|
+
i0.ɵɵelementStart(0, "kendo-panelbar-item", 32);
|
|
799
907
|
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);
|
|
800
908
|
i0.ɵɵelementEnd();
|
|
801
909
|
} if (rf & 2) {
|
|
@@ -803,21 +911,21 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_Template(
|
|
|
803
911
|
i0.ɵɵproperty("expanded", ctx_r1.hierarchyExpanded);
|
|
804
912
|
} }
|
|
805
913
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Template(rf, ctx) { if (rf & 1) {
|
|
806
|
-
i0.ɵɵelementStart(0, "span",
|
|
807
|
-
i0.ɵɵelement(1, "i",
|
|
914
|
+
i0.ɵɵelementStart(0, "span", 41);
|
|
915
|
+
i0.ɵɵelement(1, "i", 129);
|
|
808
916
|
i0.ɵɵtext(2, " Additional Details ");
|
|
809
917
|
i0.ɵɵelementEnd();
|
|
810
918
|
} }
|
|
811
919
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
812
|
-
const
|
|
813
|
-
i0.ɵɵelementStart(0, "div",
|
|
920
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
921
|
+
i0.ɵɵelementStart(0, "div", 131)(1, "label");
|
|
814
922
|
i0.ɵɵtext(2, "Agent");
|
|
815
923
|
i0.ɵɵelementEnd();
|
|
816
|
-
i0.ɵɵelementStart(3, "div",
|
|
817
|
-
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_2_Template_div_click_3_listener() { i0.ɵɵrestoreView(
|
|
818
|
-
i0.ɵɵelement(4, "i",
|
|
924
|
+
i0.ɵɵelementStart(3, "div", 139);
|
|
925
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_2_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Agents", ctx_r1.record.AgentID)); });
|
|
926
|
+
i0.ɵɵelement(4, "i", 140);
|
|
819
927
|
i0.ɵɵtext(5);
|
|
820
|
-
i0.ɵɵelement(6, "i",
|
|
928
|
+
i0.ɵɵelement(6, "i", 83);
|
|
821
929
|
i0.ɵɵelementEnd()();
|
|
822
930
|
} if (rf & 2) {
|
|
823
931
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -825,11 +933,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Condition
|
|
|
825
933
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Unknown", " ");
|
|
826
934
|
} }
|
|
827
935
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
828
|
-
i0.ɵɵelementStart(0, "div",
|
|
936
|
+
i0.ɵɵelementStart(0, "div", 131)(1, "label");
|
|
829
937
|
i0.ɵɵtext(2, "Configuration");
|
|
830
938
|
i0.ɵɵelementEnd();
|
|
831
|
-
i0.ɵɵelementStart(3, "div",
|
|
832
|
-
i0.ɵɵelement(4, "i",
|
|
939
|
+
i0.ɵɵelementStart(3, "div", 132);
|
|
940
|
+
i0.ɵɵelement(4, "i", 141);
|
|
833
941
|
i0.ɵɵtext(5);
|
|
834
942
|
i0.ɵɵelementEnd()();
|
|
835
943
|
} if (rf & 2) {
|
|
@@ -838,10 +946,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Condition
|
|
|
838
946
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Configuration || "Unknown", " ");
|
|
839
947
|
} }
|
|
840
948
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
841
|
-
i0.ɵɵelementStart(0, "div",
|
|
949
|
+
i0.ɵɵelementStart(0, "div", 131)(1, "label");
|
|
842
950
|
i0.ɵɵtext(2, "Run Type");
|
|
843
951
|
i0.ɵɵelementEnd();
|
|
844
|
-
i0.ɵɵelementStart(3, "div",
|
|
952
|
+
i0.ɵɵelementStart(3, "div", 132);
|
|
845
953
|
i0.ɵɵelement(4, "i");
|
|
846
954
|
i0.ɵɵtext(5);
|
|
847
955
|
i0.ɵɵelementEnd()();
|
|
@@ -853,11 +961,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Condition
|
|
|
853
961
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
|
|
854
962
|
} }
|
|
855
963
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
856
|
-
i0.ɵɵelementStart(0, "div",
|
|
964
|
+
i0.ɵɵelementStart(0, "div", 131)(1, "label");
|
|
857
965
|
i0.ɵɵtext(2, "Response Format");
|
|
858
966
|
i0.ɵɵelementEnd();
|
|
859
|
-
i0.ɵɵelementStart(3, "div",
|
|
860
|
-
i0.ɵɵelement(4, "i",
|
|
967
|
+
i0.ɵɵelementStart(3, "div", 132);
|
|
968
|
+
i0.ɵɵelement(4, "i", 63);
|
|
861
969
|
i0.ɵɵtext(5);
|
|
862
970
|
i0.ɵɵelementEnd()();
|
|
863
971
|
} if (rf & 2) {
|
|
@@ -866,10 +974,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Condition
|
|
|
866
974
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.ResponseFormat, " ");
|
|
867
975
|
} }
|
|
868
976
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_48_Template(rf, ctx) { if (rf & 1) {
|
|
869
|
-
i0.ɵɵelementStart(0, "div",
|
|
977
|
+
i0.ɵɵelementStart(0, "div", 131)(1, "label");
|
|
870
978
|
i0.ɵɵtext(2, "Started At");
|
|
871
979
|
i0.ɵɵelementEnd();
|
|
872
|
-
i0.ɵɵelementStart(3, "div",
|
|
980
|
+
i0.ɵɵelementStart(3, "div", 132);
|
|
873
981
|
i0.ɵɵelement(4, "i", 22);
|
|
874
982
|
i0.ɵɵtext(5);
|
|
875
983
|
i0.ɵɵpipe(6, "date");
|
|
@@ -880,11 +988,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Condition
|
|
|
880
988
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.RunAt, "medium"), " ");
|
|
881
989
|
} }
|
|
882
990
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_49_Template(rf, ctx) { if (rf & 1) {
|
|
883
|
-
i0.ɵɵelementStart(0, "div",
|
|
991
|
+
i0.ɵɵelementStart(0, "div", 131)(1, "label");
|
|
884
992
|
i0.ɵɵtext(2, "Completed At");
|
|
885
993
|
i0.ɵɵelementEnd();
|
|
886
|
-
i0.ɵɵelementStart(3, "div",
|
|
887
|
-
i0.ɵɵelement(4, "i",
|
|
994
|
+
i0.ɵɵelementStart(3, "div", 132);
|
|
995
|
+
i0.ɵɵelement(4, "i", 142);
|
|
888
996
|
i0.ɵɵtext(5);
|
|
889
997
|
i0.ɵɵpipe(6, "date");
|
|
890
998
|
i0.ɵɵelementEnd()();
|
|
@@ -894,58 +1002,58 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Condition
|
|
|
894
1002
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.CompletedAt, "medium"), " ");
|
|
895
1003
|
} }
|
|
896
1004
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Template(rf, ctx) { if (rf & 1) {
|
|
897
|
-
i0.ɵɵelementStart(0, "div",
|
|
898
|
-
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_2_Template, 7, 1, "div",
|
|
899
|
-
i0.ɵɵelementStart(6, "div",
|
|
1005
|
+
i0.ɵɵelementStart(0, "div", 43)(1, "div", 130);
|
|
1006
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_2_Template, 7, 1, "div", 131)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_3_Template, 6, 1, "div", 131)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_4_Template, 6, 3, "div", 131)(5, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_5_Template, 6, 1, "div", 131);
|
|
1007
|
+
i0.ɵɵelementStart(6, "div", 131)(7, "label");
|
|
900
1008
|
i0.ɵɵtext(8, "Temperature");
|
|
901
1009
|
i0.ɵɵelementEnd();
|
|
902
|
-
i0.ɵɵelementStart(9, "div",
|
|
903
|
-
i0.ɵɵelement(10, "i",
|
|
1010
|
+
i0.ɵɵelementStart(9, "div", 132);
|
|
1011
|
+
i0.ɵɵelement(10, "i", 133);
|
|
904
1012
|
i0.ɵɵtext(11);
|
|
905
1013
|
i0.ɵɵelementEnd()();
|
|
906
|
-
i0.ɵɵelementStart(12, "div",
|
|
1014
|
+
i0.ɵɵelementStart(12, "div", 131)(13, "label");
|
|
907
1015
|
i0.ɵɵtext(14, "Top P");
|
|
908
1016
|
i0.ɵɵelementEnd();
|
|
909
|
-
i0.ɵɵelementStart(15, "div",
|
|
910
|
-
i0.ɵɵelement(16, "i",
|
|
1017
|
+
i0.ɵɵelementStart(15, "div", 132);
|
|
1018
|
+
i0.ɵɵelement(16, "i", 134);
|
|
911
1019
|
i0.ɵɵtext(17);
|
|
912
1020
|
i0.ɵɵelementEnd()();
|
|
913
|
-
i0.ɵɵelementStart(18, "div",
|
|
1021
|
+
i0.ɵɵelementStart(18, "div", 131)(19, "label");
|
|
914
1022
|
i0.ɵɵtext(20, "Top K");
|
|
915
1023
|
i0.ɵɵelementEnd();
|
|
916
|
-
i0.ɵɵelementStart(21, "div",
|
|
917
|
-
i0.ɵɵelement(22, "i",
|
|
1024
|
+
i0.ɵɵelementStart(21, "div", 132);
|
|
1025
|
+
i0.ɵɵelement(22, "i", 135);
|
|
918
1026
|
i0.ɵɵtext(23);
|
|
919
1027
|
i0.ɵɵelementEnd()();
|
|
920
|
-
i0.ɵɵelementStart(24, "div",
|
|
1028
|
+
i0.ɵɵelementStart(24, "div", 131)(25, "label");
|
|
921
1029
|
i0.ɵɵtext(26, "Min P");
|
|
922
1030
|
i0.ɵɵelementEnd();
|
|
923
|
-
i0.ɵɵelementStart(27, "div",
|
|
924
|
-
i0.ɵɵelement(28, "i",
|
|
1031
|
+
i0.ɵɵelementStart(27, "div", 132);
|
|
1032
|
+
i0.ɵɵelement(28, "i", 136);
|
|
925
1033
|
i0.ɵɵtext(29);
|
|
926
1034
|
i0.ɵɵelementEnd()();
|
|
927
|
-
i0.ɵɵelementStart(30, "div",
|
|
1035
|
+
i0.ɵɵelementStart(30, "div", 131)(31, "label");
|
|
928
1036
|
i0.ɵɵtext(32, "Frequency Penalty");
|
|
929
1037
|
i0.ɵɵelementEnd();
|
|
930
|
-
i0.ɵɵelementStart(33, "div",
|
|
931
|
-
i0.ɵɵelement(34, "i",
|
|
1038
|
+
i0.ɵɵelementStart(33, "div", 132);
|
|
1039
|
+
i0.ɵɵelement(34, "i", 97);
|
|
932
1040
|
i0.ɵɵtext(35);
|
|
933
1041
|
i0.ɵɵelementEnd()();
|
|
934
|
-
i0.ɵɵelementStart(36, "div",
|
|
1042
|
+
i0.ɵɵelementStart(36, "div", 131)(37, "label");
|
|
935
1043
|
i0.ɵɵtext(38, "Presence Penalty");
|
|
936
1044
|
i0.ɵɵelementEnd();
|
|
937
|
-
i0.ɵɵelementStart(39, "div",
|
|
938
|
-
i0.ɵɵelement(40, "i",
|
|
1045
|
+
i0.ɵɵelementStart(39, "div", 132);
|
|
1046
|
+
i0.ɵɵelement(40, "i", 137);
|
|
939
1047
|
i0.ɵɵtext(41);
|
|
940
1048
|
i0.ɵɵelementEnd()();
|
|
941
|
-
i0.ɵɵelementStart(42, "div",
|
|
1049
|
+
i0.ɵɵelementStart(42, "div", 131)(43, "label");
|
|
942
1050
|
i0.ɵɵtext(44, "Seed");
|
|
943
1051
|
i0.ɵɵelementEnd();
|
|
944
|
-
i0.ɵɵelementStart(45, "div",
|
|
945
|
-
i0.ɵɵelement(46, "i",
|
|
1052
|
+
i0.ɵɵelementStart(45, "div", 132);
|
|
1053
|
+
i0.ɵɵelement(46, "i", 138);
|
|
946
1054
|
i0.ɵɵtext(47);
|
|
947
1055
|
i0.ɵɵelementEnd()();
|
|
948
|
-
i0.ɵɵtemplate(48, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_48_Template, 7, 4, "div",
|
|
1056
|
+
i0.ɵɵtemplate(48, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_48_Template, 7, 4, "div", 131)(49, AIPromptRunFormComponentExtended_Conditional_1_ng_template_61_Conditional_49_Template, 7, 4, "div", 131);
|
|
949
1057
|
i0.ɵɵelementEnd()();
|
|
950
1058
|
} if (rf & 2) {
|
|
951
1059
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1038,16 +1146,17 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
|
|
|
1038
1146
|
i0.ɵɵtemplate(45, AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_Template, 8, 4, "div", 21);
|
|
1039
1147
|
i0.ɵɵelementEnd()();
|
|
1040
1148
|
i0.ɵɵelementStart(46, "div", 28)(47, "kendo-panelbar")(48, "kendo-panelbar-item", 29);
|
|
1149
|
+
i0.ɵɵlistener("stateChange", function AIPromptRunFormComponentExtended_Conditional_1_Template_kendo_panelbar_item_stateChange_48_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputPanelToggle()); });
|
|
1041
1150
|
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);
|
|
1042
1151
|
i0.ɵɵelementEnd();
|
|
1043
|
-
i0.ɵɵelementStart(51, "kendo-panelbar-item",
|
|
1152
|
+
i0.ɵɵelementStart(51, "kendo-panelbar-item", 32);
|
|
1044
1153
|
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);
|
|
1045
1154
|
i0.ɵɵelementEnd();
|
|
1046
|
-
i0.ɵɵelementStart(54, "kendo-panelbar-item",
|
|
1155
|
+
i0.ɵɵelementStart(54, "kendo-panelbar-item", 32);
|
|
1047
1156
|
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);
|
|
1048
1157
|
i0.ɵɵelementEnd();
|
|
1049
|
-
i0.ɵɵtemplate(57, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_Template, 3, 1, "kendo-panelbar-item",
|
|
1050
|
-
i0.ɵɵelementStart(59, "kendo-panelbar-item",
|
|
1158
|
+
i0.ɵɵtemplate(57, AIPromptRunFormComponentExtended_Conditional_1_Conditional_57_Template, 3, 1, "kendo-panelbar-item", 32)(58, AIPromptRunFormComponentExtended_Conditional_1_Conditional_58_Template, 3, 1, "kendo-panelbar-item", 32);
|
|
1159
|
+
i0.ɵɵelementStart(59, "kendo-panelbar-item", 32);
|
|
1051
1160
|
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);
|
|
1052
1161
|
i0.ɵɵelementEnd()()()();
|
|
1053
1162
|
} if (rf & 2) {
|
|
@@ -1084,7 +1193,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
|
|
|
1084
1193
|
i0.ɵɵadvance();
|
|
1085
1194
|
i0.ɵɵconditional(ctx_r1.record.RunAt ? 45 : -1);
|
|
1086
1195
|
i0.ɵɵadvance(3);
|
|
1087
|
-
i0.ɵɵproperty("expanded", ctx_r1.
|
|
1196
|
+
i0.ɵɵproperty("expanded", ctx_r1.inputExpanded);
|
|
1088
1197
|
i0.ɵɵadvance(3);
|
|
1089
1198
|
i0.ɵɵproperty("expanded", ctx_r1.resultExpanded);
|
|
1090
1199
|
i0.ɵɵadvance(3);
|
|
@@ -1107,7 +1216,11 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1107
1216
|
this.childRuns = [];
|
|
1108
1217
|
// UI state
|
|
1109
1218
|
this.isLoadingRelatedData = false;
|
|
1219
|
+
this.isParsingMessages = true; // Add loading state for message parsing
|
|
1220
|
+
this.inputExpanded = true;
|
|
1110
1221
|
this.messagesExpanded = true;
|
|
1222
|
+
this.dataExpanded = false; // Changed to false - often blank
|
|
1223
|
+
this.rawExpanded = false;
|
|
1111
1224
|
this.resultExpanded = true;
|
|
1112
1225
|
this.metricsExpanded = false;
|
|
1113
1226
|
this.hierarchyExpanded = false;
|
|
@@ -1117,6 +1230,10 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1117
1230
|
this.formattedResult = '';
|
|
1118
1231
|
this.formattedValidationSummary = '';
|
|
1119
1232
|
this.formattedValidationAttempts = '';
|
|
1233
|
+
this.formattedData = '';
|
|
1234
|
+
// Parsed input data
|
|
1235
|
+
this.chatMessages = [];
|
|
1236
|
+
this.inputData = null;
|
|
1120
1237
|
// Validation data
|
|
1121
1238
|
this.validationAttempts = [];
|
|
1122
1239
|
this.validationSummary = null;
|
|
@@ -1129,6 +1246,19 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1129
1246
|
this.loadValidationData();
|
|
1130
1247
|
}
|
|
1131
1248
|
}
|
|
1249
|
+
ngAfterViewInit() {
|
|
1250
|
+
// Force change detection to ensure expansion panels render correctly
|
|
1251
|
+
setTimeout(() => {
|
|
1252
|
+
this.cdr.detectChanges();
|
|
1253
|
+
}, 0);
|
|
1254
|
+
}
|
|
1255
|
+
onInputPanelToggle() {
|
|
1256
|
+
// Force change detection when parent panel is toggled
|
|
1257
|
+
// This helps ensure nested expansion panels render correctly
|
|
1258
|
+
setTimeout(() => {
|
|
1259
|
+
this.cdr.detectChanges();
|
|
1260
|
+
}, 100);
|
|
1261
|
+
}
|
|
1132
1262
|
async loadRelatedData() {
|
|
1133
1263
|
this.isLoadingRelatedData = true;
|
|
1134
1264
|
try {
|
|
@@ -1176,6 +1306,7 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1176
1306
|
this.childRuns = result.Results;
|
|
1177
1307
|
}
|
|
1178
1308
|
formatJsonFields() {
|
|
1309
|
+
this.isParsingMessages = true; // Start parsing
|
|
1179
1310
|
const parseOptions = {
|
|
1180
1311
|
extractInlineJson: true,
|
|
1181
1312
|
maxDepth: 100,
|
|
@@ -1187,14 +1318,40 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1187
1318
|
const parsed = JSON.parse(this.record.Messages);
|
|
1188
1319
|
const recursivelyParsed = ParseJSONRecursive(parsed, parseOptions);
|
|
1189
1320
|
this.formattedMessages = JSON.stringify(recursivelyParsed, null, 2);
|
|
1321
|
+
// Extract messages array and data
|
|
1322
|
+
if (recursivelyParsed && typeof recursivelyParsed === 'object') {
|
|
1323
|
+
// Extract chat messages if they exist
|
|
1324
|
+
if (recursivelyParsed.messages && Array.isArray(recursivelyParsed.messages)) {
|
|
1325
|
+
this.chatMessages = recursivelyParsed.messages;
|
|
1326
|
+
}
|
|
1327
|
+
else {
|
|
1328
|
+
this.chatMessages = [];
|
|
1329
|
+
}
|
|
1330
|
+
// Extract data object if it exists
|
|
1331
|
+
if (recursivelyParsed.data) {
|
|
1332
|
+
this.inputData = recursivelyParsed.data;
|
|
1333
|
+
this.formattedData = JSON.stringify(recursivelyParsed.data, null, 2);
|
|
1334
|
+
}
|
|
1335
|
+
else {
|
|
1336
|
+
this.inputData = null;
|
|
1337
|
+
this.formattedData = '';
|
|
1338
|
+
}
|
|
1339
|
+
}
|
|
1190
1340
|
}
|
|
1191
1341
|
catch {
|
|
1192
1342
|
this.formattedMessages = this.record.Messages;
|
|
1343
|
+
this.chatMessages = [];
|
|
1344
|
+
this.inputData = null;
|
|
1345
|
+
this.formattedData = '';
|
|
1193
1346
|
}
|
|
1194
1347
|
}
|
|
1195
1348
|
else {
|
|
1196
1349
|
this.formattedMessages = '';
|
|
1350
|
+
this.chatMessages = [];
|
|
1351
|
+
this.inputData = null;
|
|
1352
|
+
this.formattedData = '';
|
|
1197
1353
|
}
|
|
1354
|
+
this.isParsingMessages = false; // Done parsing
|
|
1198
1355
|
// Format result with recursive JSON parsing
|
|
1199
1356
|
if (this.record.Result) {
|
|
1200
1357
|
try {
|
|
@@ -1376,14 +1533,14 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1376
1533
|
this.validationExpanded = (this.record.ValidationAttemptCount || 0) > 1;
|
|
1377
1534
|
}
|
|
1378
1535
|
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)); }; }
|
|
1379
|
-
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"], ["kendoButton", "", "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, "
|
|
1536
|
+
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"], ["kendoButton", "", "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, "stateChange", "expanded"], ["kendoPanelBarItemTitle", ""], ["kendoPanelBarContent", ""], [3, "expanded"], [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, "nested-panels"], [1, "empty-state"], [1, "sub-expansion-panel", 3, "expanded", "animation"], ["kendoExpansionPanelTitleDirective", ""], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], [1, "json-editor-container"], [1, "json-toolbar"], ["kendoButton", "", "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, "sub-panel-title"], [1, "fa-solid", "fa-comments"], [1, "panel-count"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-comment-slash"], [1, "fa-solid", "fa-database"], ["name", "formattedData", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-code"], [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-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-check-circle"]], template: function AIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
1380
1537
|
i0.ɵɵelementStart(0, "div", 1);
|
|
1381
1538
|
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Template, 62, 27, "form", 2);
|
|
1382
1539
|
i0.ɵɵelementEnd();
|
|
1383
1540
|
} if (rf & 2) {
|
|
1384
1541
|
i0.ɵɵadvance();
|
|
1385
1542
|
i0.ɵɵconditional(ctx.record ? 1 : -1);
|
|
1386
|
-
} }, 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}"] }); }
|
|
1543
|
+
} }, dependencies: [i3.ɵNgNoValidate, i3.NgControlStatus, i3.NgControlStatusGroup, i3.NgModel, i3.NgForm, i4.PanelBarComponent, i4.PanelBarItemComponent, i4.PanelBarContentDirective, i4.PanelBarItemTitleDirective, i4.ExpansionPanelComponent, i4.ExpansionPanelTitleDirective, i5.ButtonComponent, i6.FormToolbarComponent, i7.CodeEditorComponent, i8.ChatMessageViewerComponent, i9.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\n\n.sub-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n\n\n.k-panelbar[_ngcontent-%COMP%] .k-panelbar[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n}\n\n.k-panelbar[_ngcontent-%COMP%] .k-panelbar[_ngcontent-%COMP%] > .k-item[_ngcontent-%COMP%] {\n border: 1px solid #e5e7eb;\n margin-bottom: 8px;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.k-panelbar[_ngcontent-%COMP%] .k-panelbar[_ngcontent-%COMP%] > .k-item[_ngcontent-%COMP%] > .k-link[_ngcontent-%COMP%] {\n background-color: #f9fafb;\n padding: 12px 16px;\n}\n\n.k-panelbar[_ngcontent-%COMP%] .k-panelbar[_ngcontent-%COMP%] > .k-item.k-expanded[_ngcontent-%COMP%] > .k-link[_ngcontent-%COMP%] {\n background-color: #f3f4f6;\n}\n\n.k-panelbar[_ngcontent-%COMP%] .k-panelbar[_ngcontent-%COMP%] .k-content[_ngcontent-%COMP%] {\n padding: 0;\n background: white;\n}\n\n\n\n.sub-panel-content[_ngcontent-%COMP%] mj-chat-message-viewer[_ngcontent-%COMP%] {\n display: block;\n min-height: 200px;\n max-height: 750px; \n\n height: auto;\n overflow: hidden;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n.sub-expansion-panel[_ngcontent-%COMP%] .k-expander {\n background-color: #f7fafc;\n border-color: #e2e8f0;\n}\n\n.sub-expansion-panel[_ngcontent-%COMP%] .k-expander:hover {\n background-color: #edf2f7;\n}\n\n.sub-expansion-panel[_ngcontent-%COMP%] .k-header {\n background-color: #f7fafc;\n border-color: #e2e8f0;\n}\n\n.sub-expansion-panel[_ngcontent-%COMP%] .k-content {\n background-color: #ffffff;\n border-color: #e2e8f0;\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.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: #6c757d;\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: #007bff;\n}\n\n.loading-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}"] }); }
|
|
1387
1544
|
};
|
|
1388
1545
|
AIPromptRunFormComponentExtended = __decorate([
|
|
1389
1546
|
RegisterClass(BaseFormComponent, 'MJ: AI Prompt Runs')
|
|
@@ -1391,7 +1548,7 @@ AIPromptRunFormComponentExtended = __decorate([
|
|
|
1391
1548
|
export { AIPromptRunFormComponentExtended };
|
|
1392
1549
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIPromptRunFormComponentExtended, [{
|
|
1393
1550
|
type: Component,
|
|
1394
|
-
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 <button kendoButton fillMode=\"outline\" size=\"small\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </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 <button kendoButton\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 </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 <button kendoButton\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 </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}"] }]
|
|
1551
|
+
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 <button kendoButton fillMode=\"outline\" size=\"small\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </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 Panel with nested sub-panels -->\n <kendo-panelbar-item [expanded]=\"inputExpanded\" (stateChange)=\"onInputPanelToggle()\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input\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 <!-- Nested expansion panels for sub-sections -->\n <div class=\"nested-panels\">\n <!-- Messages Sub-Panel -->\n <kendo-expansionpanel \n [expanded]=\"messagesExpanded\" \n class=\"sub-expansion-panel\"\n [animation]=\"false\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Messages\n @if (chatMessages.length > 0) {\n <span class=\"panel-count\">({{ chatMessages.length }})</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (isParsingMessages || isLoadingRelatedData) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading messages...</p>\n </div>\n } @else if (chatMessages.length > 0) {\n <mj-chat-message-viewer \n [messages]=\"chatMessages\">\n </mj-chat-message-viewer>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No chat messages found</p>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n \n <!-- Data Sub-Panel -->\n <kendo-expansionpanel \n [expanded]=\"dataExpanded\" \n class=\"sub-expansion-panel\"\n [animation]=\"false\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-database\"></i>\n Data\n @if (inputData) {\n <span class=\"panel-badge\">Object</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (inputData && formattedData) {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button kendoButton\n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedData\"\n name=\"formattedData\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No data object found</p>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n \n <!-- Raw Sub-Panel -->\n <kendo-expansionpanel \n [expanded]=\"rawExpanded\" \n class=\"sub-expansion-panel\"\n [animation]=\"false\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Raw\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button kendoButton\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 </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 </div>\n </kendo-expansionpanel>\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 <button kendoButton\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 </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/* Nested Sub-Panel Styles */\n.sub-panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content {\n padding: 0;\n}\n\n/* Nested kendo-panelbar styles */\n.k-panelbar .k-panelbar {\n border: none;\n background: transparent;\n}\n\n.k-panelbar .k-panelbar > .k-item {\n border: 1px solid #e5e7eb;\n margin-bottom: 8px;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.k-panelbar .k-panelbar > .k-item > .k-link {\n background-color: #f9fafb;\n padding: 12px 16px;\n}\n\n.k-panelbar .k-panelbar > .k-item.k-expanded > .k-link {\n background-color: #f3f4f6;\n}\n\n.k-panelbar .k-panelbar .k-content {\n padding: 0;\n background: white;\n}\n\n/* Ensure chat message viewer takes appropriate height */\n.sub-panel-content mj-chat-message-viewer {\n display: block;\n min-height: 200px;\n max-height: 750px; /* Increased by 50% from 500px */\n height: auto;\n overflow: hidden;\n}\n\n/* Different colors for sub-expansion panels */\n.sub-expansion-panel {\n margin-bottom: 8px;\n}\n\n.sub-expansion-panel::ng-deep .k-expander {\n background-color: #f7fafc;\n border-color: #e2e8f0;\n}\n\n.sub-expansion-panel::ng-deep .k-expander:hover {\n background-color: #edf2f7;\n}\n\n.sub-expansion-panel::ng-deep .k-header {\n background-color: #f7fafc;\n border-color: #e2e8f0;\n}\n\n.sub-expansion-panel::ng-deep .k-content {\n background-color: #ffffff;\n border-color: #e2e8f0;\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/* Loading State */\n.loading-state {\n text-align: center;\n padding: 60px 40px;\n color: #6c757d;\n}\n\n.loading-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: #007bff;\n}\n\n.loading-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}"] }]
|
|
1395
1552
|
}], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], null); })();
|
|
1396
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIPromptRunFormComponentExtended, { className: "AIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber:
|
|
1553
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIPromptRunFormComponentExtended, { className: "AIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 17 }); })();
|
|
1397
1554
|
//# sourceMappingURL=ai-prompt-run-form.component.js.map
|