@memberjunction/ng-core-entity-forms 2.79.0 → 2.80.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +12 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +461 -291
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +16 -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 +784 -568
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +172 -178
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/package.json +16 -16
|
@@ -34,7 +34,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_11_Template(
|
|
|
34
34
|
i0.ɵɵtextInterpolate1("#", ctx_r1.record.ID.substring(0, 8), "");
|
|
35
35
|
} }
|
|
36
36
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
-
i0.ɵɵelementStart(0, "span",
|
|
37
|
+
i0.ɵɵelementStart(0, "span", 30);
|
|
38
38
|
i0.ɵɵelement(1, "i");
|
|
39
39
|
i0.ɵɵtext(2);
|
|
40
40
|
i0.ɵɵelementEnd();
|
|
@@ -48,9 +48,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_16_Template(
|
|
|
48
48
|
} }
|
|
49
49
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
50
50
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
51
|
-
i0.ɵɵelementStart(0, "span",
|
|
51
|
+
i0.ɵɵelementStart(0, "span", 31);
|
|
52
52
|
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)); });
|
|
53
|
-
i0.ɵɵelement(1, "i",
|
|
53
|
+
i0.ɵɵelement(1, "i", 32);
|
|
54
54
|
i0.ɵɵtext(2);
|
|
55
55
|
i0.ɵɵelementEnd();
|
|
56
56
|
} if (rf & 2) {
|
|
@@ -60,9 +60,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template(
|
|
|
60
60
|
} }
|
|
61
61
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
62
62
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
63
|
-
i0.ɵɵelementStart(0, "span",
|
|
63
|
+
i0.ɵɵelementStart(0, "span", 33);
|
|
64
64
|
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)); });
|
|
65
|
-
i0.ɵɵelement(1, "i",
|
|
65
|
+
i0.ɵɵelement(1, "i", 34);
|
|
66
66
|
i0.ɵɵtext(2);
|
|
67
67
|
i0.ɵɵelementEnd();
|
|
68
68
|
} if (rf & 2) {
|
|
@@ -72,9 +72,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template(
|
|
|
72
72
|
} }
|
|
73
73
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
74
74
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
75
|
-
i0.ɵɵelementStart(0, "span",
|
|
75
|
+
i0.ɵɵelementStart(0, "span", 35);
|
|
76
76
|
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)); });
|
|
77
|
-
i0.ɵɵelement(1, "i",
|
|
77
|
+
i0.ɵɵelement(1, "i", 36);
|
|
78
78
|
i0.ɵɵtext(2);
|
|
79
79
|
i0.ɵɵelementEnd();
|
|
80
80
|
} if (rf & 2) {
|
|
@@ -85,45 +85,214 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_19_Template(
|
|
|
85
85
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
86
86
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
87
87
|
i0.ɵɵelementStart(0, "span", 17);
|
|
88
|
-
i0.ɵɵelement(1, "i",
|
|
89
|
-
i0.ɵɵelementStart(2, "a",
|
|
88
|
+
i0.ɵɵelement(1, "i", 37);
|
|
89
|
+
i0.ɵɵelementStart(2, "a", 38);
|
|
90
90
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_20_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToOriginalRun()); });
|
|
91
91
|
i0.ɵɵtext(3, "Original Run");
|
|
92
92
|
i0.ɵɵelementEnd()();
|
|
93
93
|
} }
|
|
94
|
-
function
|
|
95
|
-
i0.ɵɵelementStart(0, "div",
|
|
96
|
-
i0.ɵɵelement(1, "i",
|
|
97
|
-
i0.ɵɵelementStart(2, "div",
|
|
94
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
95
|
+
i0.ɵɵelementStart(0, "div", 39);
|
|
96
|
+
i0.ɵɵelement(1, "i", 48);
|
|
97
|
+
i0.ɵɵelementStart(2, "div", 41)(3, "div", 42);
|
|
98
|
+
i0.ɵɵtext(4, "Temperature");
|
|
99
|
+
i0.ɵɵelementEnd();
|
|
100
|
+
i0.ɵɵelementStart(5, "div", 43);
|
|
101
|
+
i0.ɵɵtext(6);
|
|
102
|
+
i0.ɵɵelementEnd()()();
|
|
103
|
+
} if (rf & 2) {
|
|
104
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
105
|
+
i0.ɵɵadvance(6);
|
|
106
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.Temperature);
|
|
107
|
+
} }
|
|
108
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
109
|
+
i0.ɵɵelementStart(0, "div", 39);
|
|
110
|
+
i0.ɵɵelement(1, "i", 49);
|
|
111
|
+
i0.ɵɵelementStart(2, "div", 41)(3, "div", 42);
|
|
112
|
+
i0.ɵɵtext(4, "Top P");
|
|
113
|
+
i0.ɵɵelementEnd();
|
|
114
|
+
i0.ɵɵelementStart(5, "div", 43);
|
|
115
|
+
i0.ɵɵtext(6);
|
|
116
|
+
i0.ɵɵelementEnd()()();
|
|
117
|
+
} if (rf & 2) {
|
|
118
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
119
|
+
i0.ɵɵadvance(6);
|
|
120
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.TopP);
|
|
121
|
+
} }
|
|
122
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
123
|
+
i0.ɵɵelementStart(0, "div", 39);
|
|
124
|
+
i0.ɵɵelement(1, "i", 50);
|
|
125
|
+
i0.ɵɵelementStart(2, "div", 41)(3, "div", 42);
|
|
126
|
+
i0.ɵɵtext(4, "Top K");
|
|
127
|
+
i0.ɵɵelementEnd();
|
|
128
|
+
i0.ɵɵelementStart(5, "div", 43);
|
|
129
|
+
i0.ɵɵtext(6);
|
|
130
|
+
i0.ɵɵelementEnd()()();
|
|
131
|
+
} if (rf & 2) {
|
|
132
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
133
|
+
i0.ɵɵadvance(6);
|
|
134
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.TopK);
|
|
135
|
+
} }
|
|
136
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
137
|
+
i0.ɵɵelementStart(0, "div", 39);
|
|
138
|
+
i0.ɵɵelement(1, "i", 51);
|
|
139
|
+
i0.ɵɵelementStart(2, "div", 41)(3, "div", 42);
|
|
140
|
+
i0.ɵɵtext(4, "Response Format");
|
|
141
|
+
i0.ɵɵelementEnd();
|
|
142
|
+
i0.ɵɵelementStart(5, "div", 43);
|
|
143
|
+
i0.ɵɵtext(6);
|
|
144
|
+
i0.ɵɵelementEnd()()();
|
|
145
|
+
} if (rf & 2) {
|
|
146
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
147
|
+
i0.ɵɵadvance(6);
|
|
148
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.ResponseFormat);
|
|
149
|
+
} }
|
|
150
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
151
|
+
i0.ɵɵelementStart(0, "div", 39);
|
|
152
|
+
i0.ɵɵelement(1, "i", 52);
|
|
153
|
+
i0.ɵɵelementStart(2, "div", 41)(3, "div", 42);
|
|
98
154
|
i0.ɵɵtext(4, "Started");
|
|
99
155
|
i0.ɵɵelementEnd();
|
|
100
|
-
i0.ɵɵelementStart(5, "div",
|
|
156
|
+
i0.ɵɵelementStart(5, "div", 43);
|
|
101
157
|
i0.ɵɵtext(6);
|
|
102
158
|
i0.ɵɵpipe(7, "date");
|
|
103
159
|
i0.ɵɵelementEnd()()();
|
|
160
|
+
} if (rf & 2) {
|
|
161
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
162
|
+
i0.ɵɵadvance(6);
|
|
163
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
|
|
164
|
+
} }
|
|
165
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
166
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
167
|
+
i0.ɵɵelementStart(0, "div", 23)(1, "div", 39);
|
|
168
|
+
i0.ɵɵelement(2, "i", 40);
|
|
169
|
+
i0.ɵɵelementStart(3, "div", 41)(4, "div", 42);
|
|
170
|
+
i0.ɵɵtext(5, "Configuration");
|
|
171
|
+
i0.ɵɵelementEnd();
|
|
172
|
+
i0.ɵɵelementStart(6, "div", 43)(7, "a", 44);
|
|
173
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Template_a_click_7_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Configurations", ctx_r1.record.ConfigurationID)); });
|
|
174
|
+
i0.ɵɵtext(8);
|
|
175
|
+
i0.ɵɵelementEnd()()()();
|
|
176
|
+
i0.ɵɵtemplate(9, AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_9_Template, 7, 1, "div", 39)(10, AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_10_Template, 7, 1, "div", 39)(11, AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_11_Template, 7, 1, "div", 39)(12, AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_12_Template, 7, 1, "div", 39);
|
|
177
|
+
i0.ɵɵelementEnd();
|
|
178
|
+
i0.ɵɵelementStart(13, "div", 23)(14, "div", 39);
|
|
179
|
+
i0.ɵɵelement(15, "i", 45);
|
|
180
|
+
i0.ɵɵelementStart(16, "div", 41)(17, "div", 42);
|
|
181
|
+
i0.ɵɵtext(18, "Duration");
|
|
182
|
+
i0.ɵɵelementEnd();
|
|
183
|
+
i0.ɵɵelementStart(19, "div", 43);
|
|
184
|
+
i0.ɵɵtext(20);
|
|
185
|
+
i0.ɵɵelementEnd()()();
|
|
186
|
+
i0.ɵɵelementStart(21, "div", 39);
|
|
187
|
+
i0.ɵɵelement(22, "i", 46);
|
|
188
|
+
i0.ɵɵelementStart(23, "div", 41)(24, "div", 42);
|
|
189
|
+
i0.ɵɵtext(25, "Total Tokens");
|
|
190
|
+
i0.ɵɵelementEnd();
|
|
191
|
+
i0.ɵɵelementStart(26, "div", 43);
|
|
192
|
+
i0.ɵɵtext(27);
|
|
193
|
+
i0.ɵɵelementEnd()()();
|
|
194
|
+
i0.ɵɵelementStart(28, "div", 39);
|
|
195
|
+
i0.ɵɵelement(29, "i", 47);
|
|
196
|
+
i0.ɵɵelementStart(30, "div", 41)(31, "div", 42);
|
|
197
|
+
i0.ɵɵtext(32, "Cost");
|
|
198
|
+
i0.ɵɵelementEnd();
|
|
199
|
+
i0.ɵɵelementStart(33, "div", 43);
|
|
200
|
+
i0.ɵɵtext(34);
|
|
201
|
+
i0.ɵɵelementEnd()()();
|
|
202
|
+
i0.ɵɵtemplate(35, AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_35_Template, 8, 4, "div", 39);
|
|
203
|
+
i0.ɵɵelementEnd();
|
|
104
204
|
} if (rf & 2) {
|
|
105
205
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
206
|
+
i0.ɵɵadvance(8);
|
|
207
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Configuration || "Unknown", " ");
|
|
208
|
+
i0.ɵɵadvance();
|
|
209
|
+
i0.ɵɵconditional(ctx_r1.record.Temperature !== null && ctx_r1.record.Temperature !== undefined ? 9 : -1);
|
|
210
|
+
i0.ɵɵadvance();
|
|
211
|
+
i0.ɵɵconditional(ctx_r1.record.TopP !== null && ctx_r1.record.TopP !== undefined ? 10 : -1);
|
|
212
|
+
i0.ɵɵadvance();
|
|
213
|
+
i0.ɵɵconditional(ctx_r1.record.TopK !== null && ctx_r1.record.TopK !== undefined ? 11 : -1);
|
|
214
|
+
i0.ɵɵadvance();
|
|
215
|
+
i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 12 : -1);
|
|
216
|
+
i0.ɵɵadvance(8);
|
|
217
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.ExecutionTimeMS));
|
|
218
|
+
i0.ɵɵadvance(7);
|
|
219
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensUsed));
|
|
220
|
+
i0.ɵɵadvance(7);
|
|
221
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
|
|
222
|
+
i0.ɵɵadvance();
|
|
223
|
+
i0.ɵɵconditional(ctx_r1.record.RunAt ? 35 : -1);
|
|
224
|
+
} }
|
|
225
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_28_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
226
|
+
i0.ɵɵelementStart(0, "div", 39);
|
|
227
|
+
i0.ɵɵelement(1, "i", 52);
|
|
228
|
+
i0.ɵɵelementStart(2, "div", 41)(3, "div", 42);
|
|
229
|
+
i0.ɵɵtext(4, "Started");
|
|
230
|
+
i0.ɵɵelementEnd();
|
|
231
|
+
i0.ɵɵelementStart(5, "div", 43);
|
|
232
|
+
i0.ɵɵtext(6);
|
|
233
|
+
i0.ɵɵpipe(7, "date");
|
|
234
|
+
i0.ɵɵelementEnd()()();
|
|
235
|
+
} if (rf & 2) {
|
|
236
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
106
237
|
i0.ɵɵadvance(6);
|
|
107
238
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
|
|
108
239
|
} }
|
|
109
|
-
function
|
|
110
|
-
i0.ɵɵelementStart(0, "
|
|
240
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
241
|
+
i0.ɵɵelementStart(0, "div", 23)(1, "div", 39);
|
|
242
|
+
i0.ɵɵelement(2, "i", 45);
|
|
243
|
+
i0.ɵɵelementStart(3, "div", 41)(4, "div", 42);
|
|
244
|
+
i0.ɵɵtext(5, "Duration");
|
|
245
|
+
i0.ɵɵelementEnd();
|
|
246
|
+
i0.ɵɵelementStart(6, "div", 43);
|
|
247
|
+
i0.ɵɵtext(7);
|
|
248
|
+
i0.ɵɵelementEnd()()();
|
|
249
|
+
i0.ɵɵelementStart(8, "div", 39);
|
|
250
|
+
i0.ɵɵelement(9, "i", 46);
|
|
251
|
+
i0.ɵɵelementStart(10, "div", 41)(11, "div", 42);
|
|
252
|
+
i0.ɵɵtext(12, "Total Tokens");
|
|
253
|
+
i0.ɵɵelementEnd();
|
|
254
|
+
i0.ɵɵelementStart(13, "div", 43);
|
|
255
|
+
i0.ɵɵtext(14);
|
|
256
|
+
i0.ɵɵelementEnd()()();
|
|
257
|
+
i0.ɵɵelementStart(15, "div", 39);
|
|
258
|
+
i0.ɵɵelement(16, "i", 47);
|
|
259
|
+
i0.ɵɵelementStart(17, "div", 41)(18, "div", 42);
|
|
260
|
+
i0.ɵɵtext(19, "Cost");
|
|
261
|
+
i0.ɵɵelementEnd();
|
|
262
|
+
i0.ɵɵelementStart(20, "div", 43);
|
|
263
|
+
i0.ɵɵtext(21);
|
|
264
|
+
i0.ɵɵelementEnd()()();
|
|
265
|
+
i0.ɵɵtemplate(22, AIPromptRunFormComponentExtended_Conditional_1_Conditional_28_Conditional_22_Template, 8, 4, "div", 39);
|
|
266
|
+
i0.ɵɵelementEnd();
|
|
267
|
+
} if (rf & 2) {
|
|
268
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
269
|
+
i0.ɵɵadvance(7);
|
|
270
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.ExecutionTimeMS));
|
|
271
|
+
i0.ɵɵadvance(7);
|
|
272
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensUsed));
|
|
273
|
+
i0.ɵɵadvance(7);
|
|
274
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
|
|
275
|
+
i0.ɵɵadvance();
|
|
276
|
+
i0.ɵɵconditional(ctx_r1.record.RunAt ? 22 : -1);
|
|
277
|
+
} }
|
|
278
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_32_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
279
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
111
280
|
i0.ɵɵtext(1, "JSON");
|
|
112
281
|
i0.ɵɵelementEnd();
|
|
113
282
|
} }
|
|
114
|
-
function
|
|
115
|
-
i0.ɵɵelementStart(0, "span",
|
|
116
|
-
i0.ɵɵelement(1, "i",
|
|
283
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_32_Template(rf, ctx) { if (rf & 1) {
|
|
284
|
+
i0.ɵɵelementStart(0, "span", 53);
|
|
285
|
+
i0.ɵɵelement(1, "i", 32);
|
|
117
286
|
i0.ɵɵtext(2, " Input ");
|
|
118
|
-
i0.ɵɵtemplate(3,
|
|
287
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_32_Conditional_3_Template, 2, 0, "span", 54);
|
|
119
288
|
i0.ɵɵelementEnd();
|
|
120
289
|
} if (rf & 2) {
|
|
121
290
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
122
291
|
i0.ɵɵadvance(3);
|
|
123
292
|
i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
|
|
124
293
|
} }
|
|
125
|
-
function
|
|
126
|
-
i0.ɵɵelementStart(0, "span",
|
|
294
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
295
|
+
i0.ɵɵelementStart(0, "span", 70);
|
|
127
296
|
i0.ɵɵtext(1);
|
|
128
297
|
i0.ɵɵelementEnd();
|
|
129
298
|
} if (rf & 2) {
|
|
@@ -131,62 +300,62 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Condition
|
|
|
131
300
|
i0.ɵɵadvance();
|
|
132
301
|
i0.ɵɵtextInterpolate1("(", ctx_r1.chatMessages.length, ")");
|
|
133
302
|
} }
|
|
134
|
-
function
|
|
135
|
-
i0.ɵɵelementStart(0, "span",
|
|
136
|
-
i0.ɵɵelement(1, "i",
|
|
303
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
304
|
+
i0.ɵɵelementStart(0, "span", 68);
|
|
305
|
+
i0.ɵɵelement(1, "i", 69);
|
|
137
306
|
i0.ɵɵtext(2, " Messages ");
|
|
138
|
-
i0.ɵɵtemplate(3,
|
|
307
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_2_Conditional_3_Template, 2, 1, "span", 70);
|
|
139
308
|
i0.ɵɵelementEnd();
|
|
140
309
|
} if (rf & 2) {
|
|
141
310
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
142
311
|
i0.ɵɵadvance(3);
|
|
143
312
|
i0.ɵɵconditional(ctx_r1.chatMessages.length > 0 ? 3 : -1);
|
|
144
313
|
} }
|
|
145
|
-
function
|
|
146
|
-
i0.ɵɵelementStart(0, "div",
|
|
147
|
-
i0.ɵɵelement(1, "i",
|
|
314
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
315
|
+
i0.ɵɵelementStart(0, "div", 61);
|
|
316
|
+
i0.ɵɵelement(1, "i", 71);
|
|
148
317
|
i0.ɵɵelementStart(2, "p");
|
|
149
318
|
i0.ɵɵtext(3, "Loading messages...");
|
|
150
319
|
i0.ɵɵelementEnd()();
|
|
151
320
|
} }
|
|
152
|
-
function
|
|
153
|
-
i0.ɵɵelement(0, "mj-chat-message-viewer",
|
|
321
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
322
|
+
i0.ɵɵelement(0, "mj-chat-message-viewer", 62);
|
|
154
323
|
} if (rf & 2) {
|
|
155
324
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
156
325
|
i0.ɵɵproperty("messages", ctx_r1.chatMessages);
|
|
157
326
|
} }
|
|
158
|
-
function
|
|
159
|
-
i0.ɵɵelementStart(0, "div",
|
|
160
|
-
i0.ɵɵelement(1, "i",
|
|
327
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
328
|
+
i0.ɵɵelementStart(0, "div", 57);
|
|
329
|
+
i0.ɵɵelement(1, "i", 72);
|
|
161
330
|
i0.ɵɵelementStart(2, "p");
|
|
162
331
|
i0.ɵɵtext(3, "No chat messages found");
|
|
163
332
|
i0.ɵɵelementEnd()();
|
|
164
333
|
} }
|
|
165
|
-
function
|
|
166
|
-
i0.ɵɵelementStart(0, "span",
|
|
334
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
335
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
167
336
|
i0.ɵɵtext(1, "Object");
|
|
168
337
|
i0.ɵɵelementEnd();
|
|
169
338
|
} }
|
|
170
|
-
function
|
|
171
|
-
i0.ɵɵelementStart(0, "span",
|
|
172
|
-
i0.ɵɵelement(1, "i",
|
|
339
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_8_Template(rf, ctx) { if (rf & 1) {
|
|
340
|
+
i0.ɵɵelementStart(0, "span", 68);
|
|
341
|
+
i0.ɵɵelement(1, "i", 73);
|
|
173
342
|
i0.ɵɵtext(2, " Data ");
|
|
174
|
-
i0.ɵɵtemplate(3,
|
|
343
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_8_Conditional_3_Template, 2, 0, "span", 54);
|
|
175
344
|
i0.ɵɵelementEnd();
|
|
176
345
|
} if (rf & 2) {
|
|
177
346
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
178
347
|
i0.ɵɵadvance(3);
|
|
179
348
|
i0.ɵɵconditional(ctx_r1.inputData ? 3 : -1);
|
|
180
349
|
} }
|
|
181
|
-
function
|
|
182
|
-
const
|
|
183
|
-
i0.ɵɵelementStart(0, "div",
|
|
184
|
-
i0.ɵɵlistener("click", function
|
|
185
|
-
i0.ɵɵelement(3, "i",
|
|
350
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
351
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
352
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "div", 64)(2, "button", 65);
|
|
353
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_10_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedData, "Data")); });
|
|
354
|
+
i0.ɵɵelement(3, "i", 66);
|
|
186
355
|
i0.ɵɵtext(4, " Copy ");
|
|
187
356
|
i0.ɵɵelementEnd()();
|
|
188
|
-
i0.ɵɵelementStart(5, "mj-code-editor",
|
|
189
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
357
|
+
i0.ɵɵelementStart(5, "mj-code-editor", 74);
|
|
358
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_10_Template_mj_code_editor_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedData, $event) || (ctx_r1.formattedData = $event); return i0.ɵɵresetView($event); });
|
|
190
359
|
i0.ɵɵelementEnd()();
|
|
191
360
|
} if (rf & 2) {
|
|
192
361
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -194,40 +363,40 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Condition
|
|
|
194
363
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedData);
|
|
195
364
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
196
365
|
} }
|
|
197
|
-
function
|
|
198
|
-
i0.ɵɵelementStart(0, "div",
|
|
199
|
-
i0.ɵɵelement(1, "i",
|
|
366
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
367
|
+
i0.ɵɵelementStart(0, "div", 57);
|
|
368
|
+
i0.ɵɵelement(1, "i", 73);
|
|
200
369
|
i0.ɵɵelementStart(2, "p");
|
|
201
370
|
i0.ɵɵtext(3, "No data object found");
|
|
202
371
|
i0.ɵɵelementEnd()();
|
|
203
372
|
} }
|
|
204
|
-
function
|
|
205
|
-
i0.ɵɵelementStart(0, "span",
|
|
206
|
-
i0.ɵɵelement(1, "i",
|
|
373
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_13_Template(rf, ctx) { if (rf & 1) {
|
|
374
|
+
i0.ɵɵelementStart(0, "span", 68);
|
|
375
|
+
i0.ɵɵelement(1, "i", 51);
|
|
207
376
|
i0.ɵɵtext(2, " Raw ");
|
|
208
377
|
i0.ɵɵelementEnd();
|
|
209
378
|
} }
|
|
210
|
-
function
|
|
211
|
-
const
|
|
212
|
-
i0.ɵɵelementStart(0, "div",
|
|
213
|
-
i0.ɵɵtemplate(2,
|
|
214
|
-
i0.ɵɵelementStart(3, "div",
|
|
215
|
-
i0.ɵɵtemplate(4,
|
|
216
|
-
i0.ɵɵelementEnd()();
|
|
217
|
-
i0.ɵɵelementStart(7, "kendo-expansionpanel",
|
|
218
|
-
i0.ɵɵtemplate(8,
|
|
219
|
-
i0.ɵɵelementStart(9, "div",
|
|
220
|
-
i0.ɵɵtemplate(10,
|
|
221
|
-
i0.ɵɵelementEnd()();
|
|
222
|
-
i0.ɵɵelementStart(12, "kendo-expansionpanel",
|
|
223
|
-
i0.ɵɵtemplate(13,
|
|
224
|
-
i0.ɵɵelementStart(14, "div",
|
|
225
|
-
i0.ɵɵlistener("click", function
|
|
226
|
-
i0.ɵɵelement(18, "i",
|
|
379
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
380
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
381
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "kendo-expansionpanel", 58);
|
|
382
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_2_Template, 4, 1, "ng-template", 59);
|
|
383
|
+
i0.ɵɵelementStart(3, "div", 60);
|
|
384
|
+
i0.ɵɵtemplate(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_4_Template, 4, 0, "div", 61)(5, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 62)(6, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_6_Template, 4, 0, "div", 57);
|
|
385
|
+
i0.ɵɵelementEnd()();
|
|
386
|
+
i0.ɵɵelementStart(7, "kendo-expansionpanel", 58);
|
|
387
|
+
i0.ɵɵtemplate(8, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_8_Template, 4, 1, "ng-template", 59);
|
|
388
|
+
i0.ɵɵelementStart(9, "div", 60);
|
|
389
|
+
i0.ɵɵtemplate(10, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_10_Template, 6, 4, "div", 63)(11, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_11_Template, 4, 0, "div", 57);
|
|
390
|
+
i0.ɵɵelementEnd()();
|
|
391
|
+
i0.ɵɵelementStart(12, "kendo-expansionpanel", 58);
|
|
392
|
+
i0.ɵɵtemplate(13, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_13_Template, 3, 0, "ng-template", 59);
|
|
393
|
+
i0.ɵɵelementStart(14, "div", 60)(15, "div", 63)(16, "div", 64)(17, "button", 65);
|
|
394
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
|
|
395
|
+
i0.ɵɵelement(18, "i", 66);
|
|
227
396
|
i0.ɵɵtext(19, " Copy ");
|
|
228
397
|
i0.ɵɵelementEnd()();
|
|
229
|
-
i0.ɵɵelementStart(20, "mj-code-editor",
|
|
230
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
398
|
+
i0.ɵɵelementStart(20, "mj-code-editor", 67);
|
|
399
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Template_mj_code_editor_ngModelChange_20_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedMessages, $event) || (ctx_r1.formattedMessages = $event); return i0.ɵɵresetView($event); });
|
|
231
400
|
i0.ɵɵelementEnd()()()()();
|
|
232
401
|
} if (rf & 2) {
|
|
233
402
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -245,37 +414,37 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Condition
|
|
|
245
414
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedMessages);
|
|
246
415
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
247
416
|
} }
|
|
248
|
-
function
|
|
249
|
-
i0.ɵɵelementStart(0, "div",
|
|
250
|
-
i0.ɵɵelement(1, "i",
|
|
417
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
418
|
+
i0.ɵɵelementStart(0, "div", 57);
|
|
419
|
+
i0.ɵɵelement(1, "i", 72);
|
|
251
420
|
i0.ɵɵelementStart(2, "p");
|
|
252
421
|
i0.ɵɵtext(3, "No input messages recorded");
|
|
253
422
|
i0.ɵɵelementEnd()();
|
|
254
423
|
} }
|
|
255
|
-
function
|
|
256
|
-
i0.ɵɵelementStart(0, "div",
|
|
257
|
-
i0.ɵɵtemplate(1,
|
|
424
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Template(rf, ctx) { if (rf & 1) {
|
|
425
|
+
i0.ɵɵelementStart(0, "div", 55);
|
|
426
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Template, 21, 12, "div", 56)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_2_Template, 4, 0, "div", 57);
|
|
258
427
|
i0.ɵɵelementEnd();
|
|
259
428
|
} if (rf & 2) {
|
|
260
429
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
261
430
|
i0.ɵɵadvance();
|
|
262
431
|
i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 1 : 2);
|
|
263
432
|
} }
|
|
264
|
-
function
|
|
265
|
-
i0.ɵɵelementStart(0, "span",
|
|
433
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_35_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
434
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
266
435
|
i0.ɵɵtext(1, "JSON");
|
|
267
436
|
i0.ɵɵelementEnd();
|
|
268
437
|
} }
|
|
269
|
-
function
|
|
270
|
-
i0.ɵɵelementStart(0, "span",
|
|
438
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_35_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
439
|
+
i0.ɵɵelementStart(0, "span", 76);
|
|
271
440
|
i0.ɵɵtext(1, "Error");
|
|
272
441
|
i0.ɵɵelementEnd();
|
|
273
442
|
} }
|
|
274
|
-
function
|
|
275
|
-
i0.ɵɵelementStart(0, "span",
|
|
276
|
-
i0.ɵɵelement(1, "i",
|
|
443
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_35_Template(rf, ctx) { if (rf & 1) {
|
|
444
|
+
i0.ɵɵelementStart(0, "span", 53);
|
|
445
|
+
i0.ɵɵelement(1, "i", 75);
|
|
277
446
|
i0.ɵɵtext(2, " Result ");
|
|
278
|
-
i0.ɵɵtemplate(3,
|
|
447
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_35_Conditional_3_Template, 2, 0, "span", 54)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_35_Conditional_4_Template, 2, 0, "span", 76);
|
|
279
448
|
i0.ɵɵelementEnd();
|
|
280
449
|
} if (rf & 2) {
|
|
281
450
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -284,10 +453,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template(
|
|
|
284
453
|
i0.ɵɵadvance();
|
|
285
454
|
i0.ɵɵconditional(ctx_r1.record.ErrorMessage ? 4 : -1);
|
|
286
455
|
} }
|
|
287
|
-
function
|
|
288
|
-
i0.ɵɵelementStart(0, "div",
|
|
289
|
-
i0.ɵɵelement(1, "i",
|
|
290
|
-
i0.ɵɵelementStart(2, "div",
|
|
456
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
457
|
+
i0.ɵɵelementStart(0, "div", 77);
|
|
458
|
+
i0.ɵɵelement(1, "i", 78);
|
|
459
|
+
i0.ɵɵelementStart(2, "div", 79)(3, "h4");
|
|
291
460
|
i0.ɵɵtext(4, "Error Message");
|
|
292
461
|
i0.ɵɵelementEnd();
|
|
293
462
|
i0.ɵɵelementStart(5, "p");
|
|
@@ -298,15 +467,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Condition
|
|
|
298
467
|
i0.ɵɵadvance(6);
|
|
299
468
|
i0.ɵɵtextInterpolate(ctx_r1.record.ErrorMessage);
|
|
300
469
|
} }
|
|
301
|
-
function
|
|
302
|
-
const
|
|
303
|
-
i0.ɵɵelementStart(0, "div",
|
|
304
|
-
i0.ɵɵlistener("click", function
|
|
305
|
-
i0.ɵɵelement(3, "i",
|
|
470
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
471
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
472
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "div", 64)(2, "button", 65);
|
|
473
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_2_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedResult, "Result")); });
|
|
474
|
+
i0.ɵɵelement(3, "i", 66);
|
|
306
475
|
i0.ɵɵtext(4, " Copy ");
|
|
307
476
|
i0.ɵɵelementEnd()();
|
|
308
|
-
i0.ɵɵelementStart(5, "mj-code-editor",
|
|
309
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
477
|
+
i0.ɵɵelementStart(5, "mj-code-editor", 80);
|
|
478
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_2_Template_mj_code_editor_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedResult, $event) || (ctx_r1.formattedResult = $event); return i0.ɵɵresetView($event); });
|
|
310
479
|
i0.ɵɵelementEnd()();
|
|
311
480
|
} if (rf & 2) {
|
|
312
481
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -314,8 +483,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Condition
|
|
|
314
483
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedResult);
|
|
315
484
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
316
485
|
} }
|
|
317
|
-
function
|
|
318
|
-
i0.ɵɵelementStart(0, "p",
|
|
486
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
487
|
+
i0.ɵɵelementStart(0, "p", 83)(1, "strong");
|
|
319
488
|
i0.ɵɵtext(2, "Status:");
|
|
320
489
|
i0.ɵɵelementEnd();
|
|
321
490
|
i0.ɵɵtext(3);
|
|
@@ -325,25 +494,25 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Condition
|
|
|
325
494
|
i0.ɵɵadvance(3);
|
|
326
495
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
|
|
327
496
|
} }
|
|
328
|
-
function
|
|
329
|
-
i0.ɵɵelementStart(0, "div",
|
|
497
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
498
|
+
i0.ɵɵelementStart(0, "div", 84)(1, "h4");
|
|
330
499
|
i0.ɵɵtext(2, "Error Details");
|
|
331
500
|
i0.ɵɵelementEnd();
|
|
332
|
-
i0.ɵɵelement(3, "mj-code-editor",
|
|
501
|
+
i0.ɵɵelement(3, "mj-code-editor", 86);
|
|
333
502
|
i0.ɵɵelementEnd();
|
|
334
503
|
} if (rf & 2) {
|
|
335
504
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
336
505
|
i0.ɵɵadvance(3);
|
|
337
506
|
i0.ɵɵproperty("ngModel", ctx_r1.formattedErrorDetails)("disabled", true)("language", "json")("lineWrapping", true);
|
|
338
507
|
} }
|
|
339
|
-
function
|
|
340
|
-
i0.ɵɵelementStart(0, "p",
|
|
508
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
509
|
+
i0.ɵɵelementStart(0, "p", 85);
|
|
341
510
|
i0.ɵɵtext(1, " The prompt execution failed but no additional error information is available. ");
|
|
342
511
|
i0.ɵɵelementEnd();
|
|
343
512
|
} }
|
|
344
|
-
function
|
|
345
|
-
i0.ɵɵelementStart(0, "div",
|
|
346
|
-
i0.ɵɵtemplate(1,
|
|
513
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
514
|
+
i0.ɵɵelementStart(0, "div", 82);
|
|
515
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Conditional_1_Template, 4, 1, "p", 83)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Conditional_2_Template, 4, 4, "div", 84)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Conditional_3_Template, 2, 0, "p", 85);
|
|
347
516
|
i0.ɵɵelementEnd();
|
|
348
517
|
} if (rf & 2) {
|
|
349
518
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -354,22 +523,22 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Condition
|
|
|
354
523
|
i0.ɵɵadvance();
|
|
355
524
|
i0.ɵɵconditional(!ctx_r1.formattedErrorDetails ? 3 : -1);
|
|
356
525
|
} }
|
|
357
|
-
function
|
|
358
|
-
i0.ɵɵelementStart(0, "div",
|
|
359
|
-
i0.ɵɵelement(1, "i",
|
|
526
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
527
|
+
i0.ɵɵelementStart(0, "div", 57);
|
|
528
|
+
i0.ɵɵelement(1, "i", 81);
|
|
360
529
|
i0.ɵɵelementStart(2, "p");
|
|
361
530
|
i0.ɵɵtext(3, "No result data recorded");
|
|
362
531
|
i0.ɵɵelementEnd();
|
|
363
|
-
i0.ɵɵtemplate(4,
|
|
532
|
+
i0.ɵɵtemplate(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Template, 4, 3, "div", 82);
|
|
364
533
|
i0.ɵɵelementEnd();
|
|
365
534
|
} if (rf & 2) {
|
|
366
535
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
367
536
|
i0.ɵɵadvance(4);
|
|
368
537
|
i0.ɵɵconditional(ctx_r1.record.Status === "Failed" || ctx_r1.record.Success === false ? 4 : -1);
|
|
369
538
|
} }
|
|
370
|
-
function
|
|
371
|
-
i0.ɵɵelementStart(0, "div",
|
|
372
|
-
i0.ɵɵtemplate(1,
|
|
539
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Template(rf, ctx) { if (rf & 1) {
|
|
540
|
+
i0.ɵɵelementStart(0, "div", 55);
|
|
541
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_1_Template, 7, 1, "div", 77)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_2_Template, 6, 4, "div", 63)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Template, 5, 1, "div", 57);
|
|
373
542
|
i0.ɵɵelementEnd();
|
|
374
543
|
} if (rf & 2) {
|
|
375
544
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -378,14 +547,14 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Template(
|
|
|
378
547
|
i0.ɵɵadvance();
|
|
379
548
|
i0.ɵɵconditional(ctx_r1.record.Result && ctx_r1.record.Result.trim() !== "" ? 2 : !ctx_r1.record.ErrorMessage ? 3 : -1);
|
|
380
549
|
} }
|
|
381
|
-
function
|
|
382
|
-
i0.ɵɵelementStart(0, "span",
|
|
383
|
-
i0.ɵɵelement(1, "i",
|
|
550
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_38_Template(rf, ctx) { if (rf & 1) {
|
|
551
|
+
i0.ɵɵelementStart(0, "span", 53);
|
|
552
|
+
i0.ɵɵelement(1, "i", 87);
|
|
384
553
|
i0.ɵɵtext(2, " Token Usage & Metrics ");
|
|
385
554
|
i0.ɵɵelementEnd();
|
|
386
555
|
} }
|
|
387
|
-
function
|
|
388
|
-
i0.ɵɵelementStart(0, "div",
|
|
556
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
557
|
+
i0.ɵɵelementStart(0, "div", 93)(1, "span");
|
|
389
558
|
i0.ɵɵtext(2);
|
|
390
559
|
i0.ɵɵelementEnd()();
|
|
391
560
|
} if (rf & 2) {
|
|
@@ -393,8 +562,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
393
562
|
i0.ɵɵadvance(2);
|
|
394
563
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensPromptRollup), "");
|
|
395
564
|
} }
|
|
396
|
-
function
|
|
397
|
-
i0.ɵɵelementStart(0, "div",
|
|
565
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
566
|
+
i0.ɵɵelementStart(0, "div", 93)(1, "span");
|
|
398
567
|
i0.ɵɵtext(2);
|
|
399
568
|
i0.ɵɵelementEnd()();
|
|
400
569
|
} if (rf & 2) {
|
|
@@ -402,8 +571,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
402
571
|
i0.ɵɵadvance(2);
|
|
403
572
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensCompletionRollup), "");
|
|
404
573
|
} }
|
|
405
|
-
function
|
|
406
|
-
i0.ɵɵelementStart(0, "div",
|
|
574
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
575
|
+
i0.ɵɵelementStart(0, "div", 93)(1, "span");
|
|
407
576
|
i0.ɵɵtext(2);
|
|
408
577
|
i0.ɵɵelementEnd()();
|
|
409
578
|
} if (rf & 2) {
|
|
@@ -411,8 +580,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
411
580
|
i0.ɵɵadvance(2);
|
|
412
581
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup), "");
|
|
413
582
|
} }
|
|
414
|
-
function
|
|
415
|
-
i0.ɵɵelementStart(0, "div",
|
|
583
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
584
|
+
i0.ɵɵelementStart(0, "div", 93)(1, "span");
|
|
416
585
|
i0.ɵɵtext(2);
|
|
417
586
|
i0.ɵɵelementEnd()();
|
|
418
587
|
} if (rf & 2) {
|
|
@@ -420,8 +589,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
420
589
|
i0.ɵɵadvance(2);
|
|
421
590
|
i0.ɵɵtextInterpolate1("Total: ", ctx_r1.formatCost(ctx_r1.record.TotalCost), "");
|
|
422
591
|
} }
|
|
423
|
-
function
|
|
424
|
-
i0.ɵɵelementStart(0, "div",
|
|
592
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
593
|
+
i0.ɵɵelementStart(0, "div", 95);
|
|
425
594
|
i0.ɵɵtext(1);
|
|
426
595
|
i0.ɵɵelementEnd();
|
|
427
596
|
} if (rf & 2) {
|
|
@@ -429,13 +598,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
429
598
|
i0.ɵɵadvance();
|
|
430
599
|
i0.ɵɵtextInterpolate(ctx_r1.record.CostCurrency);
|
|
431
600
|
} }
|
|
432
|
-
function
|
|
433
|
-
i0.ɵɵelementStart(0, "div",
|
|
434
|
-
i0.ɵɵelement(2, "i",
|
|
601
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
602
|
+
i0.ɵɵelementStart(0, "div", 89)(1, "div", 90);
|
|
603
|
+
i0.ɵɵelement(2, "i", 98);
|
|
435
604
|
i0.ɵɵelementStart(3, "h4");
|
|
436
605
|
i0.ɵɵtext(4, "Queue Time");
|
|
437
606
|
i0.ɵɵelementEnd()();
|
|
438
|
-
i0.ɵɵelementStart(5, "div",
|
|
607
|
+
i0.ɵɵelementStart(5, "div", 92);
|
|
439
608
|
i0.ɵɵtext(6);
|
|
440
609
|
i0.ɵɵelementEnd()();
|
|
441
610
|
} if (rf & 2) {
|
|
@@ -443,13 +612,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
443
612
|
i0.ɵɵadvance(6);
|
|
444
613
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.QueueTime));
|
|
445
614
|
} }
|
|
446
|
-
function
|
|
447
|
-
i0.ɵɵelementStart(0, "div",
|
|
448
|
-
i0.ɵɵelement(2, "i",
|
|
615
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
616
|
+
i0.ɵɵelementStart(0, "div", 89)(1, "div", 90);
|
|
617
|
+
i0.ɵɵelement(2, "i", 99);
|
|
449
618
|
i0.ɵɵelementStart(3, "h4");
|
|
450
619
|
i0.ɵɵtext(4, "Prompt Time");
|
|
451
620
|
i0.ɵɵelementEnd()();
|
|
452
|
-
i0.ɵɵelementStart(5, "div",
|
|
621
|
+
i0.ɵɵelementStart(5, "div", 92);
|
|
453
622
|
i0.ɵɵtext(6);
|
|
454
623
|
i0.ɵɵelementEnd()();
|
|
455
624
|
} if (rf & 2) {
|
|
@@ -457,13 +626,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
457
626
|
i0.ɵɵadvance(6);
|
|
458
627
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.PromptTime));
|
|
459
628
|
} }
|
|
460
|
-
function
|
|
461
|
-
i0.ɵɵelementStart(0, "div",
|
|
462
|
-
i0.ɵɵelement(2, "i",
|
|
629
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
630
|
+
i0.ɵɵelementStart(0, "div", 89)(1, "div", 90);
|
|
631
|
+
i0.ɵɵelement(2, "i", 100);
|
|
463
632
|
i0.ɵɵelementStart(3, "h4");
|
|
464
633
|
i0.ɵɵtext(4, "Completion Time");
|
|
465
634
|
i0.ɵɵelementEnd()();
|
|
466
|
-
i0.ɵɵelementStart(5, "div",
|
|
635
|
+
i0.ɵɵelementStart(5, "div", 92);
|
|
467
636
|
i0.ɵɵtext(6);
|
|
468
637
|
i0.ɵɵelementEnd()();
|
|
469
638
|
} if (rf & 2) {
|
|
@@ -471,11 +640,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
471
640
|
i0.ɵɵadvance(6);
|
|
472
641
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.CompletionTime));
|
|
473
642
|
} }
|
|
474
|
-
function
|
|
475
|
-
i0.ɵɵelementStart(0, "div",
|
|
643
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_39_Template(rf, ctx) { if (rf & 1) {
|
|
644
|
+
i0.ɵɵelementStart(0, "div", 97)(1, "span", 42);
|
|
476
645
|
i0.ɵɵtext(2, "Execution Order:");
|
|
477
646
|
i0.ɵɵelementEnd();
|
|
478
|
-
i0.ɵɵelementStart(3, "span",
|
|
647
|
+
i0.ɵɵelementStart(3, "span", 43);
|
|
479
648
|
i0.ɵɵtext(4);
|
|
480
649
|
i0.ɵɵelementEnd()();
|
|
481
650
|
} if (rf & 2) {
|
|
@@ -483,78 +652,66 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
483
652
|
i0.ɵɵadvance(4);
|
|
484
653
|
i0.ɵɵtextInterpolate(ctx_r1.record.ExecutionOrder);
|
|
485
654
|
} }
|
|
486
|
-
function
|
|
487
|
-
i0.ɵɵ
|
|
488
|
-
i0.ɵɵ
|
|
489
|
-
i0.ɵɵelementEnd();
|
|
490
|
-
i0.ɵɵelementStart(3, "span", 28);
|
|
491
|
-
i0.ɵɵtext(4);
|
|
492
|
-
i0.ɵɵelementEnd()();
|
|
493
|
-
} if (rf & 2) {
|
|
494
|
-
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
495
|
-
i0.ɵɵadvance(4);
|
|
496
|
-
i0.ɵɵtextInterpolate(ctx_r1.record.Configuration);
|
|
497
|
-
} }
|
|
498
|
-
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
499
|
-
const _r10 = i0.ɵɵgetCurrentView();
|
|
500
|
-
i0.ɵɵelementStart(0, "div", 92)(1, "span", 27);
|
|
655
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_40_Template(rf, ctx) { if (rf & 1) {
|
|
656
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
657
|
+
i0.ɵɵelementStart(0, "div", 97)(1, "span", 42);
|
|
501
658
|
i0.ɵɵtext(2, "Agent:");
|
|
502
659
|
i0.ɵɵelementEnd();
|
|
503
|
-
i0.ɵɵelementStart(3, "span",
|
|
504
|
-
i0.ɵɵlistener("click", function
|
|
660
|
+
i0.ɵɵelementStart(3, "span", 101);
|
|
661
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_40_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Agents", ctx_r1.record.AgentID)); });
|
|
505
662
|
i0.ɵɵtext(4);
|
|
506
|
-
i0.ɵɵelement(5, "i",
|
|
663
|
+
i0.ɵɵelement(5, "i", 102);
|
|
507
664
|
i0.ɵɵelementEnd()();
|
|
508
665
|
} if (rf & 2) {
|
|
509
666
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
510
667
|
i0.ɵɵadvance(4);
|
|
511
668
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
|
|
512
669
|
} }
|
|
513
|
-
function
|
|
514
|
-
i0.ɵɵelementStart(0, "div",
|
|
515
|
-
i0.ɵɵelement(4, "i",
|
|
670
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Template(rf, ctx) { if (rf & 1) {
|
|
671
|
+
i0.ɵɵelementStart(0, "div", 55)(1, "div", 88)(2, "div", 89)(3, "div", 90);
|
|
672
|
+
i0.ɵɵelement(4, "i", 91);
|
|
516
673
|
i0.ɵɵelementStart(5, "h4");
|
|
517
674
|
i0.ɵɵtext(6, "Prompt Tokens");
|
|
518
675
|
i0.ɵɵelementEnd()();
|
|
519
|
-
i0.ɵɵelementStart(7, "div",
|
|
676
|
+
i0.ɵɵelementStart(7, "div", 92);
|
|
520
677
|
i0.ɵɵtext(8);
|
|
521
678
|
i0.ɵɵelementEnd();
|
|
522
|
-
i0.ɵɵtemplate(9,
|
|
679
|
+
i0.ɵɵtemplate(9, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_9_Template, 3, 1, "div", 93);
|
|
523
680
|
i0.ɵɵelementEnd();
|
|
524
|
-
i0.ɵɵelementStart(10, "div",
|
|
525
|
-
i0.ɵɵelement(12, "i",
|
|
681
|
+
i0.ɵɵelementStart(10, "div", 89)(11, "div", 90);
|
|
682
|
+
i0.ɵɵelement(12, "i", 94);
|
|
526
683
|
i0.ɵɵelementStart(13, "h4");
|
|
527
684
|
i0.ɵɵtext(14, "Completion Tokens");
|
|
528
685
|
i0.ɵɵelementEnd()();
|
|
529
|
-
i0.ɵɵelementStart(15, "div",
|
|
686
|
+
i0.ɵɵelementStart(15, "div", 92);
|
|
530
687
|
i0.ɵɵtext(16);
|
|
531
688
|
i0.ɵɵelementEnd();
|
|
532
|
-
i0.ɵɵtemplate(17,
|
|
689
|
+
i0.ɵɵtemplate(17, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_17_Template, 3, 1, "div", 93);
|
|
533
690
|
i0.ɵɵelementEnd();
|
|
534
|
-
i0.ɵɵelementStart(18, "div",
|
|
535
|
-
i0.ɵɵelement(20, "i",
|
|
691
|
+
i0.ɵɵelementStart(18, "div", 89)(19, "div", 90);
|
|
692
|
+
i0.ɵɵelement(20, "i", 46);
|
|
536
693
|
i0.ɵɵelementStart(21, "h4");
|
|
537
694
|
i0.ɵɵtext(22, "Total Tokens");
|
|
538
695
|
i0.ɵɵelementEnd()();
|
|
539
|
-
i0.ɵɵelementStart(23, "div",
|
|
696
|
+
i0.ɵɵelementStart(23, "div", 92);
|
|
540
697
|
i0.ɵɵtext(24);
|
|
541
698
|
i0.ɵɵelementEnd();
|
|
542
|
-
i0.ɵɵtemplate(25,
|
|
699
|
+
i0.ɵɵtemplate(25, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_25_Template, 3, 1, "div", 93);
|
|
543
700
|
i0.ɵɵelementEnd();
|
|
544
|
-
i0.ɵɵelementStart(26, "div",
|
|
545
|
-
i0.ɵɵelement(28, "i",
|
|
701
|
+
i0.ɵɵelementStart(26, "div", 89)(27, "div", 90);
|
|
702
|
+
i0.ɵɵelement(28, "i", 47);
|
|
546
703
|
i0.ɵɵelementStart(29, "h4");
|
|
547
704
|
i0.ɵɵtext(30, "Cost");
|
|
548
705
|
i0.ɵɵelementEnd()();
|
|
549
|
-
i0.ɵɵelementStart(31, "div",
|
|
706
|
+
i0.ɵɵelementStart(31, "div", 92);
|
|
550
707
|
i0.ɵɵtext(32);
|
|
551
708
|
i0.ɵɵelementEnd();
|
|
552
|
-
i0.ɵɵtemplate(33,
|
|
709
|
+
i0.ɵɵtemplate(33, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_33_Template, 3, 1, "div", 93)(34, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_34_Template, 2, 1, "div", 95);
|
|
553
710
|
i0.ɵɵelementEnd();
|
|
554
|
-
i0.ɵɵtemplate(35,
|
|
711
|
+
i0.ɵɵtemplate(35, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_35_Template, 7, 1, "div", 89)(36, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_36_Template, 7, 1, "div", 89)(37, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_37_Template, 7, 1, "div", 89);
|
|
555
712
|
i0.ɵɵelementEnd();
|
|
556
|
-
i0.ɵɵelementStart(38, "div",
|
|
557
|
-
i0.ɵɵtemplate(39,
|
|
713
|
+
i0.ɵɵelementStart(38, "div", 96);
|
|
714
|
+
i0.ɵɵtemplate(39, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_39_Template, 5, 1, "div", 97)(40, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_40_Template, 6, 1, "div", 97);
|
|
558
715
|
i0.ɵɵelementEnd()();
|
|
559
716
|
} if (rf & 2) {
|
|
560
717
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -585,12 +742,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Template(
|
|
|
585
742
|
i0.ɵɵadvance(2);
|
|
586
743
|
i0.ɵɵconditional(ctx_r1.record.ExecutionOrder !== null ? 39 : -1);
|
|
587
744
|
i0.ɵɵadvance();
|
|
588
|
-
i0.ɵɵconditional(ctx_r1.record.
|
|
589
|
-
i0.ɵɵadvance();
|
|
590
|
-
i0.ɵɵconditional(ctx_r1.record.AgentID ? 41 : -1);
|
|
745
|
+
i0.ɵɵconditional(ctx_r1.record.AgentID ? 40 : -1);
|
|
591
746
|
} }
|
|
592
|
-
function
|
|
593
|
-
i0.ɵɵelementStart(0, "span",
|
|
747
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
748
|
+
i0.ɵɵelementStart(0, "span", 70);
|
|
594
749
|
i0.ɵɵtext(1);
|
|
595
750
|
i0.ɵɵelementEnd();
|
|
596
751
|
} if (rf & 2) {
|
|
@@ -598,21 +753,21 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
598
753
|
i0.ɵɵadvance();
|
|
599
754
|
i0.ɵɵtextInterpolate1("(", ctx_r1.record.ValidationAttemptCount, " attempts)");
|
|
600
755
|
} }
|
|
601
|
-
function
|
|
602
|
-
i0.ɵɵelementStart(0, "span",
|
|
756
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
757
|
+
i0.ɵɵelementStart(0, "span", 104);
|
|
603
758
|
i0.ɵɵtext(1, "Passed");
|
|
604
759
|
i0.ɵɵelementEnd();
|
|
605
760
|
} }
|
|
606
|
-
function
|
|
607
|
-
i0.ɵɵelementStart(0, "span",
|
|
761
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
762
|
+
i0.ɵɵelementStart(0, "span", 76);
|
|
608
763
|
i0.ɵɵtext(1, "Failed");
|
|
609
764
|
i0.ɵɵelementEnd();
|
|
610
765
|
} }
|
|
611
|
-
function
|
|
612
|
-
i0.ɵɵelementStart(0, "span",
|
|
613
|
-
i0.ɵɵelement(1, "i",
|
|
766
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
767
|
+
i0.ɵɵelementStart(0, "span", 53);
|
|
768
|
+
i0.ɵɵelement(1, "i", 103);
|
|
614
769
|
i0.ɵɵtext(2, " Validation & Retries ");
|
|
615
|
-
i0.ɵɵtemplate(3,
|
|
770
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Conditional_3_Template, 2, 1, "span", 70)(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Conditional_4_Template, 2, 0, "span", 104)(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Conditional_5_Template, 2, 0, "span", 76);
|
|
616
771
|
i0.ɵɵelementEnd();
|
|
617
772
|
} if (rf & 2) {
|
|
618
773
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -621,8 +776,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
621
776
|
i0.ɵɵadvance();
|
|
622
777
|
i0.ɵɵconditional(ctx_r1.record.FinalValidationPassed ? 4 : ctx_r1.record.FinalValidationPassed === false ? 5 : -1);
|
|
623
778
|
} }
|
|
624
|
-
function
|
|
625
|
-
i0.ɵɵelementStart(0, "span",
|
|
779
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_29_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
780
|
+
i0.ɵɵelementStart(0, "span", 115);
|
|
626
781
|
i0.ɵɵtext(1);
|
|
627
782
|
i0.ɵɵelementEnd();
|
|
628
783
|
} if (rf & 2) {
|
|
@@ -630,15 +785,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
630
785
|
i0.ɵɵadvance();
|
|
631
786
|
i0.ɵɵtextInterpolate1("", ctx_r1.record.ValidationErrorCount, " validation errors");
|
|
632
787
|
} }
|
|
633
|
-
function
|
|
634
|
-
i0.ɵɵelementStart(0, "div",
|
|
635
|
-
i0.ɵɵelement(2, "i",
|
|
788
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
789
|
+
i0.ɵɵelementStart(0, "div", 110)(1, "h5");
|
|
790
|
+
i0.ɵɵelement(2, "i", 78);
|
|
636
791
|
i0.ɵɵtext(3, " Final Validation Error");
|
|
637
792
|
i0.ɵɵelementEnd();
|
|
638
793
|
i0.ɵɵelementStart(4, "p");
|
|
639
794
|
i0.ɵɵtext(5);
|
|
640
795
|
i0.ɵɵelementEnd();
|
|
641
|
-
i0.ɵɵtemplate(6,
|
|
796
|
+
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_29_Conditional_6_Template, 2, 1, "span", 115);
|
|
642
797
|
i0.ɵɵelementEnd();
|
|
643
798
|
} if (rf & 2) {
|
|
644
799
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -647,9 +802,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
647
802
|
i0.ɵɵadvance();
|
|
648
803
|
i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationErrorCount && ctx_r1.record.ValidationErrorCount > 0 ? 6 : -1);
|
|
649
804
|
} }
|
|
650
|
-
function
|
|
651
|
-
i0.ɵɵelementStart(0, "div",
|
|
652
|
-
i0.ɵɵelement(2, "i",
|
|
805
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
806
|
+
i0.ɵɵelementStart(0, "div", 111)(1, "h5");
|
|
807
|
+
i0.ɵɵelement(2, "i", 116);
|
|
653
808
|
i0.ɵɵtext(3, " Most Common Error");
|
|
654
809
|
i0.ɵɵelementEnd();
|
|
655
810
|
i0.ɵɵelementStart(4, "p");
|
|
@@ -660,24 +815,24 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
660
815
|
i0.ɵɵadvance(5);
|
|
661
816
|
i0.ɵɵtextInterpolate(ctx_r1.record.CommonValidationError);
|
|
662
817
|
} }
|
|
663
|
-
function
|
|
664
|
-
i0.ɵɵelementStart(0, "div",
|
|
818
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
819
|
+
i0.ɵɵelementStart(0, "div", 112)(1, "h4");
|
|
665
820
|
i0.ɵɵtext(2, "Retry Timeline");
|
|
666
821
|
i0.ɵɵelementEnd();
|
|
667
|
-
i0.ɵɵelementStart(3, "div",
|
|
668
|
-
i0.ɵɵelement(5, "i",
|
|
822
|
+
i0.ɵɵelementStart(3, "div", 117)(4, "div", 118);
|
|
823
|
+
i0.ɵɵelement(5, "i", 45);
|
|
669
824
|
i0.ɵɵelementStart(6, "span");
|
|
670
825
|
i0.ɵɵtext(7);
|
|
671
826
|
i0.ɵɵpipe(8, "date");
|
|
672
827
|
i0.ɵɵelementEnd()();
|
|
673
|
-
i0.ɵɵelementStart(9, "div",
|
|
674
|
-
i0.ɵɵelement(10, "i",
|
|
828
|
+
i0.ɵɵelementStart(9, "div", 118);
|
|
829
|
+
i0.ɵɵelement(10, "i", 100);
|
|
675
830
|
i0.ɵɵelementStart(11, "span");
|
|
676
831
|
i0.ɵɵtext(12);
|
|
677
832
|
i0.ɵɵpipe(13, "date");
|
|
678
833
|
i0.ɵɵelementEnd()();
|
|
679
|
-
i0.ɵɵelementStart(14, "div",
|
|
680
|
-
i0.ɵɵelement(15, "i",
|
|
834
|
+
i0.ɵɵelementStart(14, "div", 118);
|
|
835
|
+
i0.ɵɵelement(15, "i", 119);
|
|
681
836
|
i0.ɵɵelementStart(16, "span");
|
|
682
837
|
i0.ɵɵtext(17);
|
|
683
838
|
i0.ɵɵelementEnd()()()();
|
|
@@ -690,79 +845,79 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
690
845
|
i0.ɵɵadvance(5);
|
|
691
846
|
i0.ɵɵtextInterpolate1("Total Retry Duration: ", ctx_r1.formatDuration(ctx_r1.record.TotalRetryDurationMS), "");
|
|
692
847
|
} }
|
|
693
|
-
function
|
|
694
|
-
i0.ɵɵelementStart(0, "span",
|
|
848
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
849
|
+
i0.ɵɵelementStart(0, "span", 115);
|
|
695
850
|
i0.ɵɵtext(1);
|
|
696
851
|
i0.ɵɵelementEnd();
|
|
697
852
|
} if (rf & 2) {
|
|
698
|
-
const
|
|
853
|
+
const attempt_r13 = i0.ɵɵnextContext(2).$implicit;
|
|
699
854
|
i0.ɵɵadvance();
|
|
700
|
-
i0.ɵɵtextInterpolate1("(",
|
|
855
|
+
i0.ɵɵtextInterpolate1("(", attempt_r13.validationErrorCount, " errors)");
|
|
701
856
|
} }
|
|
702
|
-
function
|
|
703
|
-
i0.ɵɵelementStart(0, "span",
|
|
857
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
858
|
+
i0.ɵɵelementStart(0, "span", 127);
|
|
704
859
|
i0.ɵɵtext(1);
|
|
705
860
|
i0.ɵɵelementEnd();
|
|
706
|
-
i0.ɵɵtemplate(2,
|
|
861
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 115);
|
|
707
862
|
} if (rf & 2) {
|
|
708
|
-
const
|
|
863
|
+
const attempt_r13 = i0.ɵɵnextContext().$implicit;
|
|
709
864
|
i0.ɵɵadvance();
|
|
710
|
-
i0.ɵɵtextInterpolate(
|
|
865
|
+
i0.ɵɵtextInterpolate(attempt_r13.errorMessage || "Unknown error");
|
|
711
866
|
i0.ɵɵadvance();
|
|
712
|
-
i0.ɵɵconditional(
|
|
867
|
+
i0.ɵɵconditional(attempt_r13.validationErrorCount > 0 ? 2 : -1);
|
|
713
868
|
} }
|
|
714
|
-
function
|
|
715
|
-
i0.ɵɵelementStart(0, "span",
|
|
869
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
870
|
+
i0.ɵɵelementStart(0, "span", 126);
|
|
716
871
|
i0.ɵɵtext(1);
|
|
717
872
|
i0.ɵɵelementEnd();
|
|
718
873
|
} if (rf & 2) {
|
|
719
|
-
const
|
|
874
|
+
const attempt_r13 = i0.ɵɵnextContext().$implicit;
|
|
720
875
|
i0.ɵɵadvance();
|
|
721
|
-
i0.ɵɵtextInterpolate1("Output: ",
|
|
876
|
+
i0.ɵɵtextInterpolate1("Output: ", attempt_r13.outputLength, " chars");
|
|
722
877
|
} }
|
|
723
|
-
function
|
|
724
|
-
i0.ɵɵelementStart(0, "div",
|
|
878
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
879
|
+
i0.ɵɵelementStart(0, "div", 122)(1, "div", 123);
|
|
725
880
|
i0.ɵɵelement(2, "i");
|
|
726
881
|
i0.ɵɵtext(3);
|
|
727
882
|
i0.ɵɵelementEnd();
|
|
728
|
-
i0.ɵɵelementStart(4, "div",
|
|
883
|
+
i0.ɵɵelementStart(4, "div", 124)(5, "span", 125);
|
|
729
884
|
i0.ɵɵtext(6);
|
|
730
885
|
i0.ɵɵelementEnd();
|
|
731
|
-
i0.ɵɵtemplate(7,
|
|
886
|
+
i0.ɵɵtemplate(7, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_For_5_Conditional_7_Template, 3, 2)(8, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_For_5_Conditional_8_Template, 2, 1, "span", 126);
|
|
732
887
|
i0.ɵɵelementEnd()();
|
|
733
888
|
} if (rf & 2) {
|
|
734
|
-
const
|
|
735
|
-
i0.ɵɵclassProp("success",
|
|
889
|
+
const attempt_r13 = ctx.$implicit;
|
|
890
|
+
i0.ɵɵclassProp("success", attempt_r13.success)("failed", !attempt_r13.success);
|
|
736
891
|
i0.ɵɵadvance(2);
|
|
737
|
-
i0.ɵɵclassMap(
|
|
892
|
+
i0.ɵɵclassMap(attempt_r13.success ? "fa-solid fa-check" : "fa-solid fa-times");
|
|
738
893
|
i0.ɵɵadvance();
|
|
739
|
-
i0.ɵɵtextInterpolate1(" Attempt #",
|
|
894
|
+
i0.ɵɵtextInterpolate1(" Attempt #", attempt_r13.attemptNumber, " ");
|
|
740
895
|
i0.ɵɵadvance(3);
|
|
741
|
-
i0.ɵɵtextInterpolate(
|
|
896
|
+
i0.ɵɵtextInterpolate(attempt_r13.timestamp);
|
|
742
897
|
i0.ɵɵadvance();
|
|
743
|
-
i0.ɵɵconditional(!
|
|
898
|
+
i0.ɵɵconditional(!attempt_r13.success ? 7 : -1);
|
|
744
899
|
i0.ɵɵadvance();
|
|
745
|
-
i0.ɵɵconditional(
|
|
900
|
+
i0.ɵɵconditional(attempt_r13.outputLength ? 8 : -1);
|
|
746
901
|
} }
|
|
747
|
-
function
|
|
748
|
-
i0.ɵɵelementStart(0, "div",
|
|
902
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
903
|
+
i0.ɵɵelementStart(0, "div", 113)(1, "h4");
|
|
749
904
|
i0.ɵɵtext(2, "Validation Attempts");
|
|
750
905
|
i0.ɵɵelementEnd();
|
|
751
|
-
i0.ɵɵelementStart(3, "div",
|
|
752
|
-
i0.ɵɵrepeaterCreate(4,
|
|
906
|
+
i0.ɵɵelementStart(3, "div", 120);
|
|
907
|
+
i0.ɵɵrepeaterCreate(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_For_5_Template, 9, 10, "div", 121, _forTrack0);
|
|
753
908
|
i0.ɵɵelementEnd()();
|
|
754
909
|
} if (rf & 2) {
|
|
755
910
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
756
911
|
i0.ɵɵadvance(4);
|
|
757
912
|
i0.ɵɵrepeater(ctx_r1.validationAttempts);
|
|
758
913
|
} }
|
|
759
|
-
function
|
|
760
|
-
const
|
|
761
|
-
i0.ɵɵelementStart(0, "div",
|
|
914
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
915
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
916
|
+
i0.ɵɵelementStart(0, "div", 114)(1, "h4");
|
|
762
917
|
i0.ɵɵtext(2, "Validation Summary Details");
|
|
763
918
|
i0.ɵɵelementEnd();
|
|
764
|
-
i0.ɵɵelementStart(3, "div",
|
|
765
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
919
|
+
i0.ɵɵelementStart(3, "div", 128)(4, "mj-code-editor", 129);
|
|
920
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_33_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationSummary, $event) || (ctx_r1.formattedValidationSummary = $event); return i0.ɵɵresetView($event); });
|
|
766
921
|
i0.ɵɵelementEnd()()();
|
|
767
922
|
} if (rf & 2) {
|
|
768
923
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -770,13 +925,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
770
925
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationSummary);
|
|
771
926
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
772
927
|
} }
|
|
773
|
-
function
|
|
774
|
-
const
|
|
775
|
-
i0.ɵɵelementStart(0, "div",
|
|
928
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
929
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
930
|
+
i0.ɵɵelementStart(0, "div", 114)(1, "h4");
|
|
776
931
|
i0.ɵɵtext(2, "Validation Attempts (Raw JSON)");
|
|
777
932
|
i0.ɵɵelementEnd();
|
|
778
|
-
i0.ɵɵelementStart(3, "div",
|
|
779
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
933
|
+
i0.ɵɵelementStart(3, "div", 128)(4, "mj-code-editor", 130);
|
|
934
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_34_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationAttempts, $event) || (ctx_r1.formattedValidationAttempts = $event); return i0.ɵɵresetView($event); });
|
|
780
935
|
i0.ɵɵelementEnd()()();
|
|
781
936
|
} if (rf & 2) {
|
|
782
937
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -784,41 +939,41 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
784
939
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationAttempts);
|
|
785
940
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
786
941
|
} }
|
|
787
|
-
function
|
|
788
|
-
i0.ɵɵelementStart(0, "div",
|
|
942
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
943
|
+
i0.ɵɵelementStart(0, "div", 55)(1, "div", 105)(2, "div", 106)(3, "h4");
|
|
789
944
|
i0.ɵɵtext(4, "Validation Summary");
|
|
790
945
|
i0.ɵɵelementEnd();
|
|
791
|
-
i0.ɵɵelementStart(5, "div",
|
|
946
|
+
i0.ɵɵelementStart(5, "div", 107);
|
|
792
947
|
i0.ɵɵelement(6, "i");
|
|
793
948
|
i0.ɵɵtext(7);
|
|
794
949
|
i0.ɵɵelementEnd()();
|
|
795
|
-
i0.ɵɵelementStart(8, "div",
|
|
950
|
+
i0.ɵɵelementStart(8, "div", 108)(9, "div", 109)(10, "div", 42);
|
|
796
951
|
i0.ɵɵtext(11, "Total Attempts");
|
|
797
952
|
i0.ɵɵelementEnd();
|
|
798
|
-
i0.ɵɵelementStart(12, "div",
|
|
953
|
+
i0.ɵɵelementStart(12, "div", 43);
|
|
799
954
|
i0.ɵɵtext(13);
|
|
800
955
|
i0.ɵɵelementEnd()();
|
|
801
|
-
i0.ɵɵelementStart(14, "div",
|
|
956
|
+
i0.ɵɵelementStart(14, "div", 109)(15, "div", 42);
|
|
802
957
|
i0.ɵɵtext(16, "Successful");
|
|
803
958
|
i0.ɵɵelementEnd();
|
|
804
|
-
i0.ɵɵelementStart(17, "div",
|
|
959
|
+
i0.ɵɵelementStart(17, "div", 43);
|
|
805
960
|
i0.ɵɵtext(18);
|
|
806
961
|
i0.ɵɵelementEnd()();
|
|
807
|
-
i0.ɵɵelementStart(19, "div",
|
|
962
|
+
i0.ɵɵelementStart(19, "div", 109)(20, "div", 42);
|
|
808
963
|
i0.ɵɵtext(21, "Behavior");
|
|
809
964
|
i0.ɵɵelementEnd();
|
|
810
|
-
i0.ɵɵelementStart(22, "div",
|
|
965
|
+
i0.ɵɵelementStart(22, "div", 43);
|
|
811
966
|
i0.ɵɵtext(23);
|
|
812
967
|
i0.ɵɵelementEnd()();
|
|
813
|
-
i0.ɵɵelementStart(24, "div",
|
|
968
|
+
i0.ɵɵelementStart(24, "div", 109)(25, "div", 42);
|
|
814
969
|
i0.ɵɵtext(26, "Retry Strategy");
|
|
815
970
|
i0.ɵɵelementEnd();
|
|
816
|
-
i0.ɵɵelementStart(27, "div",
|
|
971
|
+
i0.ɵɵelementStart(27, "div", 43);
|
|
817
972
|
i0.ɵɵtext(28);
|
|
818
973
|
i0.ɵɵelementEnd()()();
|
|
819
|
-
i0.ɵɵtemplate(29,
|
|
974
|
+
i0.ɵɵtemplate(29, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_29_Template, 7, 2, "div", 110)(30, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_30_Template, 6, 1, "div", 111);
|
|
820
975
|
i0.ɵɵelementEnd();
|
|
821
|
-
i0.ɵɵtemplate(31,
|
|
976
|
+
i0.ɵɵtemplate(31, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_31_Template, 18, 9, "div", 112)(32, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_Template, 6, 0, "div", 113)(33, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_33_Template, 5, 4, "div", 114)(34, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_34_Template, 5, 4, "div", 114);
|
|
822
977
|
i0.ɵɵelementEnd();
|
|
823
978
|
} if (rf & 2) {
|
|
824
979
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -849,16 +1004,18 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
849
1004
|
i0.ɵɵadvance();
|
|
850
1005
|
i0.ɵɵconditional(ctx_r1.record.ValidationAttempts ? 34 : -1);
|
|
851
1006
|
} }
|
|
852
|
-
function
|
|
853
|
-
i0.ɵɵ
|
|
854
|
-
i0.ɵɵ
|
|
1007
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_Template(rf, ctx) { if (rf & 1) {
|
|
1008
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
1009
|
+
i0.ɵɵelementStart(0, "kendo-panelbar-item", 26);
|
|
1010
|
+
i0.ɵɵlistener("stateChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_Template_kendo_panelbar_item_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onValidationPanelToggle($event)); });
|
|
1011
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Template, 6, 2, "ng-template", 27)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Template, 35, 17, "ng-template", 28);
|
|
855
1012
|
i0.ɵɵelementEnd();
|
|
856
1013
|
} if (rf & 2) {
|
|
857
1014
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
858
1015
|
i0.ɵɵproperty("expanded", ctx_r1.validationExpanded);
|
|
859
1016
|
} }
|
|
860
|
-
function
|
|
861
|
-
i0.ɵɵelementStart(0, "span",
|
|
1017
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1018
|
+
i0.ɵɵelementStart(0, "span", 70);
|
|
862
1019
|
i0.ɵɵtext(1);
|
|
863
1020
|
i0.ɵɵelementEnd();
|
|
864
1021
|
} if (rf & 2) {
|
|
@@ -866,47 +1023,47 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
|
|
|
866
1023
|
i0.ɵɵadvance();
|
|
867
1024
|
i0.ɵɵtextInterpolate1("(", ctx_r1.childRuns.length, " children)");
|
|
868
1025
|
} }
|
|
869
|
-
function
|
|
870
|
-
i0.ɵɵelementStart(0, "span",
|
|
871
|
-
i0.ɵɵelement(1, "i",
|
|
1026
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1027
|
+
i0.ɵɵelementStart(0, "span", 53);
|
|
1028
|
+
i0.ɵɵelement(1, "i", 131);
|
|
872
1029
|
i0.ɵɵtext(2, " Run Hierarchy ");
|
|
873
|
-
i0.ɵɵtemplate(3,
|
|
1030
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_1_Conditional_3_Template, 2, 1, "span", 70);
|
|
874
1031
|
i0.ɵɵelementEnd();
|
|
875
1032
|
} if (rf & 2) {
|
|
876
1033
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
877
1034
|
i0.ɵɵadvance(3);
|
|
878
1035
|
i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 3 : -1);
|
|
879
1036
|
} }
|
|
880
|
-
function
|
|
881
|
-
const
|
|
882
|
-
i0.ɵɵelementStart(0, "div",
|
|
883
|
-
i0.ɵɵelement(2, "i",
|
|
1037
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1038
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
1039
|
+
i0.ɵɵelementStart(0, "div", 132)(1, "h4");
|
|
1040
|
+
i0.ɵɵelement(2, "i", 37);
|
|
884
1041
|
i0.ɵɵtext(3, " Parent Run");
|
|
885
1042
|
i0.ɵɵelementEnd();
|
|
886
|
-
i0.ɵɵelementStart(4, "div",
|
|
887
|
-
i0.ɵɵlistener("click", function
|
|
888
|
-
i0.ɵɵelementStart(5, "div",
|
|
1043
|
+
i0.ɵɵelementStart(4, "div", 134);
|
|
1044
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_1_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
|
|
1045
|
+
i0.ɵɵelementStart(5, "div", 135);
|
|
889
1046
|
i0.ɵɵelement(6, "i");
|
|
890
1047
|
i0.ɵɵelementEnd();
|
|
891
|
-
i0.ɵɵelementStart(7, "div",
|
|
1048
|
+
i0.ɵɵelementStart(7, "div", 136)(8, "div", 137);
|
|
892
1049
|
i0.ɵɵtext(9);
|
|
893
|
-
i0.ɵɵelementStart(10, "span",
|
|
1050
|
+
i0.ɵɵelementStart(10, "span", 138);
|
|
894
1051
|
i0.ɵɵtext(11);
|
|
895
1052
|
i0.ɵɵelementEnd()();
|
|
896
|
-
i0.ɵɵelementStart(12, "div",
|
|
897
|
-
i0.ɵɵelement(14, "i",
|
|
1053
|
+
i0.ɵɵelementStart(12, "div", 139)(13, "span");
|
|
1054
|
+
i0.ɵɵelement(14, "i", 45);
|
|
898
1055
|
i0.ɵɵtext(15);
|
|
899
1056
|
i0.ɵɵelementEnd();
|
|
900
1057
|
i0.ɵɵelementStart(16, "span");
|
|
901
|
-
i0.ɵɵelement(17, "i",
|
|
1058
|
+
i0.ɵɵelement(17, "i", 46);
|
|
902
1059
|
i0.ɵɵtext(18);
|
|
903
1060
|
i0.ɵɵelementEnd();
|
|
904
1061
|
i0.ɵɵelementStart(19, "span");
|
|
905
|
-
i0.ɵɵelement(20, "i",
|
|
1062
|
+
i0.ɵɵelement(20, "i", 52);
|
|
906
1063
|
i0.ɵɵtext(21);
|
|
907
1064
|
i0.ɵɵpipe(22, "date");
|
|
908
1065
|
i0.ɵɵelementEnd()()();
|
|
909
|
-
i0.ɵɵelement(23, "i",
|
|
1066
|
+
i0.ɵɵelement(23, "i", 102);
|
|
910
1067
|
i0.ɵɵelementEnd()();
|
|
911
1068
|
} if (rf & 2) {
|
|
912
1069
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -925,82 +1082,82 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
|
|
|
925
1082
|
i0.ɵɵadvance(3);
|
|
926
1083
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"), "");
|
|
927
1084
|
} }
|
|
928
|
-
function
|
|
929
|
-
i0.ɵɵelementStart(0, "span",
|
|
1085
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1086
|
+
i0.ɵɵelementStart(0, "span", 144);
|
|
930
1087
|
i0.ɵɵtext(1);
|
|
931
1088
|
i0.ɵɵelementEnd();
|
|
932
1089
|
} if (rf & 2) {
|
|
933
|
-
const
|
|
1090
|
+
const childRun_r18 = i0.ɵɵnextContext().$implicit;
|
|
934
1091
|
i0.ɵɵadvance();
|
|
935
|
-
i0.ɵɵtextInterpolate1("#",
|
|
1092
|
+
i0.ɵɵtextInterpolate1("#", childRun_r18.ExecutionOrder, "");
|
|
936
1093
|
} }
|
|
937
|
-
function
|
|
938
|
-
const
|
|
939
|
-
i0.ɵɵelementStart(0, "div",
|
|
940
|
-
i0.ɵɵlistener("click", function
|
|
941
|
-
i0.ɵɵelementStart(1, "div",
|
|
1094
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
1095
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
1096
|
+
i0.ɵɵelementStart(0, "div", 143);
|
|
1097
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_For_6_Template_div_click_0_listener() { const childRun_r18 = i0.ɵɵrestoreView(_r17).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r18.ID)); });
|
|
1098
|
+
i0.ɵɵelementStart(1, "div", 135);
|
|
942
1099
|
i0.ɵɵelement(2, "i");
|
|
943
1100
|
i0.ɵɵelementEnd();
|
|
944
|
-
i0.ɵɵelementStart(3, "div",
|
|
1101
|
+
i0.ɵɵelementStart(3, "div", 136)(4, "div", 137);
|
|
945
1102
|
i0.ɵɵtext(5);
|
|
946
|
-
i0.ɵɵtemplate(6,
|
|
947
|
-
i0.ɵɵelementStart(7, "span",
|
|
1103
|
+
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_For_6_Conditional_6_Template, 2, 1, "span", 144);
|
|
1104
|
+
i0.ɵɵelementStart(7, "span", 138);
|
|
948
1105
|
i0.ɵɵtext(8);
|
|
949
1106
|
i0.ɵɵelementEnd()();
|
|
950
|
-
i0.ɵɵelementStart(9, "div",
|
|
1107
|
+
i0.ɵɵelementStart(9, "div", 139)(10, "span", 145);
|
|
951
1108
|
i0.ɵɵelement(11, "i");
|
|
952
1109
|
i0.ɵɵtext(12);
|
|
953
1110
|
i0.ɵɵelementEnd();
|
|
954
1111
|
i0.ɵɵelementStart(13, "span");
|
|
955
|
-
i0.ɵɵelement(14, "i",
|
|
1112
|
+
i0.ɵɵelement(14, "i", 45);
|
|
956
1113
|
i0.ɵɵtext(15);
|
|
957
1114
|
i0.ɵɵelementEnd();
|
|
958
1115
|
i0.ɵɵelementStart(16, "span");
|
|
959
|
-
i0.ɵɵelement(17, "i",
|
|
1116
|
+
i0.ɵɵelement(17, "i", 46);
|
|
960
1117
|
i0.ɵɵtext(18);
|
|
961
1118
|
i0.ɵɵelementEnd()()();
|
|
962
|
-
i0.ɵɵelement(19, "i",
|
|
1119
|
+
i0.ɵɵelement(19, "i", 102);
|
|
963
1120
|
i0.ɵɵelementEnd();
|
|
964
1121
|
} if (rf & 2) {
|
|
965
|
-
const
|
|
1122
|
+
const childRun_r18 = ctx.$implicit;
|
|
966
1123
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
967
1124
|
i0.ɵɵadvance();
|
|
968
1125
|
i0.ɵɵstyleProp("background-color", ctx_r1.getStatusColor() + "20");
|
|
969
1126
|
i0.ɵɵadvance();
|
|
970
|
-
i0.ɵɵclassMap("fa-solid " + ctx_r1.getRunTypeIcon(
|
|
1127
|
+
i0.ɵɵclassMap("fa-solid " + ctx_r1.getRunTypeIcon(childRun_r18.RunType));
|
|
971
1128
|
i0.ɵɵadvance(3);
|
|
972
|
-
i0.ɵɵtextInterpolate1(" Child Run #",
|
|
1129
|
+
i0.ɵɵtextInterpolate1(" Child Run #", childRun_r18.ID.substring(0, 8), " ");
|
|
973
1130
|
i0.ɵɵadvance();
|
|
974
|
-
i0.ɵɵconditional(
|
|
1131
|
+
i0.ɵɵconditional(childRun_r18.ExecutionOrder !== null ? 6 : -1);
|
|
975
1132
|
i0.ɵɵadvance(2);
|
|
976
|
-
i0.ɵɵtextInterpolate(
|
|
1133
|
+
i0.ɵɵtextInterpolate(childRun_r18.RunType);
|
|
977
1134
|
i0.ɵɵadvance(2);
|
|
978
1135
|
i0.ɵɵstyleProp("color", ctx_r1.getStatusColor());
|
|
979
1136
|
i0.ɵɵadvance();
|
|
980
1137
|
i0.ɵɵclassMap("fa-solid " + ctx_r1.getStatusIcon());
|
|
981
1138
|
i0.ɵɵadvance();
|
|
982
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1139
|
+
i0.ɵɵtextInterpolate1(" ", childRun_r18.Success ? "Success" : childRun_r18.ErrorMessage ? "Failed" : "Running", " ");
|
|
983
1140
|
i0.ɵɵadvance(3);
|
|
984
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(
|
|
1141
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(childRun_r18.ExecutionTimeMS), "");
|
|
985
1142
|
i0.ɵɵadvance(3);
|
|
986
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(
|
|
1143
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r18.TokensUsed), "");
|
|
987
1144
|
} }
|
|
988
|
-
function
|
|
989
|
-
i0.ɵɵelementStart(0, "div",
|
|
990
|
-
i0.ɵɵelement(2, "i",
|
|
1145
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1146
|
+
i0.ɵɵelementStart(0, "div", 133)(1, "h4");
|
|
1147
|
+
i0.ɵɵelement(2, "i", 140);
|
|
991
1148
|
i0.ɵɵtext(3, " Child Runs");
|
|
992
1149
|
i0.ɵɵelementEnd();
|
|
993
|
-
i0.ɵɵelementStart(4, "div",
|
|
994
|
-
i0.ɵɵrepeaterCreate(5,
|
|
1150
|
+
i0.ɵɵelementStart(4, "div", 141);
|
|
1151
|
+
i0.ɵɵrepeaterCreate(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_For_6_Template, 20, 14, "div", 142, _forTrack1);
|
|
995
1152
|
i0.ɵɵelementEnd()();
|
|
996
1153
|
} if (rf & 2) {
|
|
997
1154
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
998
1155
|
i0.ɵɵadvance(5);
|
|
999
1156
|
i0.ɵɵrepeater(ctx_r1.childRuns);
|
|
1000
1157
|
} }
|
|
1001
|
-
function
|
|
1002
|
-
i0.ɵɵelementStart(0, "div",
|
|
1003
|
-
i0.ɵɵtemplate(1,
|
|
1158
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
1159
|
+
i0.ɵɵelementStart(0, "div", 55);
|
|
1160
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_1_Template, 24, 12, "div", 132)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_Template, 7, 0, "div", 133);
|
|
1004
1161
|
i0.ɵɵelementEnd();
|
|
1005
1162
|
} if (rf & 2) {
|
|
1006
1163
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1009,54 +1166,41 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
|
|
|
1009
1166
|
i0.ɵɵadvance();
|
|
1010
1167
|
i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 2 : -1);
|
|
1011
1168
|
} }
|
|
1012
|
-
function
|
|
1013
|
-
i0.ɵɵelementStart(0, "kendo-panelbar-item",
|
|
1014
|
-
i0.ɵɵtemplate(1,
|
|
1169
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
1170
|
+
i0.ɵɵelementStart(0, "kendo-panelbar-item", 29);
|
|
1171
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_1_Template, 4, 1, "ng-template", 27)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Template, 3, 2, "ng-template", 28);
|
|
1015
1172
|
i0.ɵɵelementEnd();
|
|
1016
1173
|
} if (rf & 2) {
|
|
1017
1174
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1018
1175
|
i0.ɵɵproperty("expanded", ctx_r1.hierarchyExpanded);
|
|
1019
1176
|
} }
|
|
1020
|
-
function
|
|
1021
|
-
i0.ɵɵelementStart(0, "span",
|
|
1022
|
-
i0.ɵɵelement(1, "i",
|
|
1177
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_43_Template(rf, ctx) { if (rf & 1) {
|
|
1178
|
+
i0.ɵɵelementStart(0, "span", 53);
|
|
1179
|
+
i0.ɵɵelement(1, "i", 146);
|
|
1023
1180
|
i0.ɵɵtext(2, " Additional Details ");
|
|
1024
1181
|
i0.ɵɵelementEnd();
|
|
1025
1182
|
} }
|
|
1026
|
-
function
|
|
1027
|
-
const
|
|
1028
|
-
i0.ɵɵelementStart(0, "div",
|
|
1183
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1184
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
1185
|
+
i0.ɵɵelementStart(0, "div", 148)(1, "label");
|
|
1029
1186
|
i0.ɵɵtext(2, "Agent");
|
|
1030
1187
|
i0.ɵɵelementEnd();
|
|
1031
|
-
i0.ɵɵelementStart(3, "div",
|
|
1032
|
-
i0.ɵɵlistener("click", function
|
|
1033
|
-
i0.ɵɵelement(4, "i",
|
|
1188
|
+
i0.ɵɵelementStart(3, "div", 153);
|
|
1189
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_2_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Agents", ctx_r1.record.AgentID)); });
|
|
1190
|
+
i0.ɵɵelement(4, "i", 154);
|
|
1034
1191
|
i0.ɵɵtext(5);
|
|
1035
|
-
i0.ɵɵelement(6, "i",
|
|
1192
|
+
i0.ɵɵelement(6, "i", 102);
|
|
1036
1193
|
i0.ɵɵelementEnd()();
|
|
1037
1194
|
} if (rf & 2) {
|
|
1038
1195
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1039
1196
|
i0.ɵɵadvance(5);
|
|
1040
1197
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Unknown", " ");
|
|
1041
1198
|
} }
|
|
1042
|
-
function
|
|
1043
|
-
i0.ɵɵelementStart(0, "div",
|
|
1044
|
-
i0.ɵɵtext(2, "Configuration");
|
|
1045
|
-
i0.ɵɵelementEnd();
|
|
1046
|
-
i0.ɵɵelementStart(3, "div", 144);
|
|
1047
|
-
i0.ɵɵelement(4, "i", 153);
|
|
1048
|
-
i0.ɵɵtext(5);
|
|
1049
|
-
i0.ɵɵelementEnd()();
|
|
1050
|
-
} if (rf & 2) {
|
|
1051
|
-
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1052
|
-
i0.ɵɵadvance(5);
|
|
1053
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Configuration || "Unknown", " ");
|
|
1054
|
-
} }
|
|
1055
|
-
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1056
|
-
i0.ɵɵelementStart(0, "div", 143)(1, "label");
|
|
1199
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1200
|
+
i0.ɵɵelementStart(0, "div", 148)(1, "label");
|
|
1057
1201
|
i0.ɵɵtext(2, "Run Type");
|
|
1058
1202
|
i0.ɵɵelementEnd();
|
|
1059
|
-
i0.ɵɵelementStart(3, "div",
|
|
1203
|
+
i0.ɵɵelementStart(3, "div", 149);
|
|
1060
1204
|
i0.ɵɵelement(4, "i");
|
|
1061
1205
|
i0.ɵɵtext(5);
|
|
1062
1206
|
i0.ɵɵelementEnd()();
|
|
@@ -1067,12 +1211,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
|
|
|
1067
1211
|
i0.ɵɵadvance();
|
|
1068
1212
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
|
|
1069
1213
|
} }
|
|
1070
|
-
function
|
|
1071
|
-
i0.ɵɵelementStart(0, "div",
|
|
1214
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1215
|
+
i0.ɵɵelementStart(0, "div", 148)(1, "label");
|
|
1072
1216
|
i0.ɵɵtext(2, "Response Format");
|
|
1073
1217
|
i0.ɵɵelementEnd();
|
|
1074
|
-
i0.ɵɵelementStart(3, "div",
|
|
1075
|
-
i0.ɵɵelement(4, "i",
|
|
1218
|
+
i0.ɵɵelementStart(3, "div", 149);
|
|
1219
|
+
i0.ɵɵelement(4, "i", 51);
|
|
1076
1220
|
i0.ɵɵtext(5);
|
|
1077
1221
|
i0.ɵɵelementEnd()();
|
|
1078
1222
|
} if (rf & 2) {
|
|
@@ -1080,12 +1224,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
|
|
|
1080
1224
|
i0.ɵɵadvance(5);
|
|
1081
1225
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.ResponseFormat, " ");
|
|
1082
1226
|
} }
|
|
1083
|
-
function
|
|
1084
|
-
i0.ɵɵelementStart(0, "div",
|
|
1227
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_47_Template(rf, ctx) { if (rf & 1) {
|
|
1228
|
+
i0.ɵɵelementStart(0, "div", 148)(1, "label");
|
|
1085
1229
|
i0.ɵɵtext(2, "Started At");
|
|
1086
1230
|
i0.ɵɵelementEnd();
|
|
1087
|
-
i0.ɵɵelementStart(3, "div",
|
|
1088
|
-
i0.ɵɵelement(4, "i",
|
|
1231
|
+
i0.ɵɵelementStart(3, "div", 149);
|
|
1232
|
+
i0.ɵɵelement(4, "i", 45);
|
|
1089
1233
|
i0.ɵɵtext(5);
|
|
1090
1234
|
i0.ɵɵpipe(6, "date");
|
|
1091
1235
|
i0.ɵɵelementEnd()();
|
|
@@ -1094,12 +1238,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
|
|
|
1094
1238
|
i0.ɵɵadvance(5);
|
|
1095
1239
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.RunAt, "medium"), " ");
|
|
1096
1240
|
} }
|
|
1097
|
-
function
|
|
1098
|
-
i0.ɵɵelementStart(0, "div",
|
|
1241
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_48_Template(rf, ctx) { if (rf & 1) {
|
|
1242
|
+
i0.ɵɵelementStart(0, "div", 148)(1, "label");
|
|
1099
1243
|
i0.ɵɵtext(2, "Completed At");
|
|
1100
1244
|
i0.ɵɵelementEnd();
|
|
1101
|
-
i0.ɵɵelementStart(3, "div",
|
|
1102
|
-
i0.ɵɵelement(4, "i",
|
|
1245
|
+
i0.ɵɵelementStart(3, "div", 149);
|
|
1246
|
+
i0.ɵɵelement(4, "i", 155);
|
|
1103
1247
|
i0.ɵɵtext(5);
|
|
1104
1248
|
i0.ɵɵpipe(6, "date");
|
|
1105
1249
|
i0.ɵɵelementEnd()();
|
|
@@ -1108,70 +1252,68 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
|
|
|
1108
1252
|
i0.ɵɵadvance(5);
|
|
1109
1253
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.CompletedAt, "medium"), " ");
|
|
1110
1254
|
} }
|
|
1111
|
-
function
|
|
1112
|
-
i0.ɵɵelementStart(0, "div",
|
|
1113
|
-
i0.ɵɵtemplate(2,
|
|
1114
|
-
i0.ɵɵelementStart(
|
|
1115
|
-
i0.ɵɵtext(
|
|
1255
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Template(rf, ctx) { if (rf & 1) {
|
|
1256
|
+
i0.ɵɵelementStart(0, "div", 55)(1, "div", 147);
|
|
1257
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_2_Template, 7, 1, "div", 148)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_3_Template, 6, 3, "div", 148)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_4_Template, 6, 1, "div", 148);
|
|
1258
|
+
i0.ɵɵelementStart(5, "div", 148)(6, "label");
|
|
1259
|
+
i0.ɵɵtext(7, "Temperature");
|
|
1116
1260
|
i0.ɵɵelementEnd();
|
|
1117
|
-
i0.ɵɵelementStart(
|
|
1118
|
-
i0.ɵɵelement(
|
|
1119
|
-
i0.ɵɵtext(
|
|
1261
|
+
i0.ɵɵelementStart(8, "div", 149);
|
|
1262
|
+
i0.ɵɵelement(9, "i", 48);
|
|
1263
|
+
i0.ɵɵtext(10);
|
|
1120
1264
|
i0.ɵɵelementEnd()();
|
|
1121
|
-
i0.ɵɵelementStart(
|
|
1122
|
-
i0.ɵɵtext(
|
|
1265
|
+
i0.ɵɵelementStart(11, "div", 148)(12, "label");
|
|
1266
|
+
i0.ɵɵtext(13, "Top P");
|
|
1123
1267
|
i0.ɵɵelementEnd();
|
|
1124
|
-
i0.ɵɵelementStart(
|
|
1125
|
-
i0.ɵɵelement(
|
|
1126
|
-
i0.ɵɵtext(
|
|
1268
|
+
i0.ɵɵelementStart(14, "div", 149);
|
|
1269
|
+
i0.ɵɵelement(15, "i", 49);
|
|
1270
|
+
i0.ɵɵtext(16);
|
|
1127
1271
|
i0.ɵɵelementEnd()();
|
|
1128
|
-
i0.ɵɵelementStart(
|
|
1129
|
-
i0.ɵɵtext(
|
|
1272
|
+
i0.ɵɵelementStart(17, "div", 148)(18, "label");
|
|
1273
|
+
i0.ɵɵtext(19, "Top K");
|
|
1130
1274
|
i0.ɵɵelementEnd();
|
|
1131
|
-
i0.ɵɵelementStart(
|
|
1132
|
-
i0.ɵɵelement(
|
|
1133
|
-
i0.ɵɵtext(
|
|
1275
|
+
i0.ɵɵelementStart(20, "div", 149);
|
|
1276
|
+
i0.ɵɵelement(21, "i", 50);
|
|
1277
|
+
i0.ɵɵtext(22);
|
|
1134
1278
|
i0.ɵɵelementEnd()();
|
|
1135
|
-
i0.ɵɵelementStart(
|
|
1136
|
-
i0.ɵɵtext(
|
|
1279
|
+
i0.ɵɵelementStart(23, "div", 148)(24, "label");
|
|
1280
|
+
i0.ɵɵtext(25, "Min P");
|
|
1137
1281
|
i0.ɵɵelementEnd();
|
|
1138
|
-
i0.ɵɵelementStart(
|
|
1139
|
-
i0.ɵɵelement(
|
|
1140
|
-
i0.ɵɵtext(
|
|
1282
|
+
i0.ɵɵelementStart(26, "div", 149);
|
|
1283
|
+
i0.ɵɵelement(27, "i", 150);
|
|
1284
|
+
i0.ɵɵtext(28);
|
|
1141
1285
|
i0.ɵɵelementEnd()();
|
|
1142
|
-
i0.ɵɵelementStart(
|
|
1143
|
-
i0.ɵɵtext(
|
|
1286
|
+
i0.ɵɵelementStart(29, "div", 148)(30, "label");
|
|
1287
|
+
i0.ɵɵtext(31, "Frequency Penalty");
|
|
1144
1288
|
i0.ɵɵelementEnd();
|
|
1145
|
-
i0.ɵɵelementStart(
|
|
1146
|
-
i0.ɵɵelement(
|
|
1147
|
-
i0.ɵɵtext(
|
|
1289
|
+
i0.ɵɵelementStart(32, "div", 149);
|
|
1290
|
+
i0.ɵɵelement(33, "i", 116);
|
|
1291
|
+
i0.ɵɵtext(34);
|
|
1148
1292
|
i0.ɵɵelementEnd()();
|
|
1149
|
-
i0.ɵɵelementStart(
|
|
1150
|
-
i0.ɵɵtext(
|
|
1293
|
+
i0.ɵɵelementStart(35, "div", 148)(36, "label");
|
|
1294
|
+
i0.ɵɵtext(37, "Presence Penalty");
|
|
1151
1295
|
i0.ɵɵelementEnd();
|
|
1152
|
-
i0.ɵɵelementStart(
|
|
1153
|
-
i0.ɵɵelement(
|
|
1154
|
-
i0.ɵɵtext(
|
|
1296
|
+
i0.ɵɵelementStart(38, "div", 149);
|
|
1297
|
+
i0.ɵɵelement(39, "i", 151);
|
|
1298
|
+
i0.ɵɵtext(40);
|
|
1155
1299
|
i0.ɵɵelementEnd()();
|
|
1156
|
-
i0.ɵɵelementStart(
|
|
1157
|
-
i0.ɵɵtext(
|
|
1300
|
+
i0.ɵɵelementStart(41, "div", 148)(42, "label");
|
|
1301
|
+
i0.ɵɵtext(43, "Seed");
|
|
1158
1302
|
i0.ɵɵelementEnd();
|
|
1159
|
-
i0.ɵɵelementStart(
|
|
1160
|
-
i0.ɵɵelement(
|
|
1161
|
-
i0.ɵɵtext(
|
|
1303
|
+
i0.ɵɵelementStart(44, "div", 149);
|
|
1304
|
+
i0.ɵɵelement(45, "i", 152);
|
|
1305
|
+
i0.ɵɵtext(46);
|
|
1162
1306
|
i0.ɵɵelementEnd()();
|
|
1163
|
-
i0.ɵɵtemplate(
|
|
1307
|
+
i0.ɵɵtemplate(47, AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_47_Template, 7, 4, "div", 148)(48, AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_48_Template, 7, 4, "div", 148);
|
|
1164
1308
|
i0.ɵɵelementEnd()();
|
|
1165
1309
|
} if (rf & 2) {
|
|
1166
1310
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1167
1311
|
i0.ɵɵadvance(2);
|
|
1168
1312
|
i0.ɵɵconditional(ctx_r1.record.AgentID ? 2 : -1);
|
|
1169
1313
|
i0.ɵɵadvance();
|
|
1170
|
-
i0.ɵɵconditional(ctx_r1.record.
|
|
1314
|
+
i0.ɵɵconditional(ctx_r1.record.RunType ? 3 : -1);
|
|
1171
1315
|
i0.ɵɵadvance();
|
|
1172
|
-
i0.ɵɵconditional(ctx_r1.record.
|
|
1173
|
-
i0.ɵɵadvance();
|
|
1174
|
-
i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 5 : -1);
|
|
1316
|
+
i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 4 : -1);
|
|
1175
1317
|
i0.ɵɵadvance(4);
|
|
1176
1318
|
i0.ɵɵclassProp("null-value", ctx_r1.record.Temperature === null || ctx_r1.record.Temperature === undefined);
|
|
1177
1319
|
i0.ɵɵadvance(2);
|
|
@@ -1201,27 +1343,27 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Template(
|
|
|
1201
1343
|
i0.ɵɵadvance(2);
|
|
1202
1344
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Seed !== null && ctx_r1.record.Seed !== undefined ? ctx_r1.record.Seed : "\u2014", " ");
|
|
1203
1345
|
i0.ɵɵadvance();
|
|
1204
|
-
i0.ɵɵconditional(ctx_r1.record.RunAt ?
|
|
1346
|
+
i0.ɵɵconditional(ctx_r1.record.RunAt ? 47 : -1);
|
|
1205
1347
|
i0.ɵɵadvance();
|
|
1206
|
-
i0.ɵɵconditional(ctx_r1.record.CompletedAt ?
|
|
1348
|
+
i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 48 : -1);
|
|
1207
1349
|
} }
|
|
1208
|
-
function
|
|
1209
|
-
i0.ɵɵelementStart(0, "span",
|
|
1210
|
-
i0.ɵɵelement(1, "i",
|
|
1350
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1351
|
+
i0.ɵɵelementStart(0, "span", 53);
|
|
1352
|
+
i0.ɵɵelement(1, "i", 34);
|
|
1211
1353
|
i0.ɵɵtext(2, " Model Specific Response Details ");
|
|
1212
|
-
i0.ɵɵelementStart(3, "span",
|
|
1354
|
+
i0.ɵɵelementStart(3, "span", 54);
|
|
1213
1355
|
i0.ɵɵtext(4, "JSON");
|
|
1214
1356
|
i0.ɵɵelementEnd()();
|
|
1215
1357
|
} }
|
|
1216
|
-
function
|
|
1217
|
-
const
|
|
1218
|
-
i0.ɵɵelementStart(0, "div",
|
|
1219
|
-
i0.ɵɵlistener("click", function
|
|
1220
|
-
i0.ɵɵelement(4, "i",
|
|
1358
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
1359
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
1360
|
+
i0.ɵɵelementStart(0, "div", 55)(1, "div", 63)(2, "div", 64)(3, "button", 65);
|
|
1361
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_ng_template_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedModelSpecificResponseDetails, "Model Specific Response Details")); });
|
|
1362
|
+
i0.ɵɵelement(4, "i", 66);
|
|
1221
1363
|
i0.ɵɵtext(5, " Copy ");
|
|
1222
1364
|
i0.ɵɵelementEnd()();
|
|
1223
|
-
i0.ɵɵelementStart(6, "mj-code-editor",
|
|
1224
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1365
|
+
i0.ɵɵelementStart(6, "mj-code-editor", 156);
|
|
1366
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_ng_template_2_Template_mj_code_editor_ngModelChange_6_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSpecificResponseDetails, $event) || (ctx_r1.formattedModelSpecificResponseDetails = $event); return i0.ɵɵresetView($event); });
|
|
1225
1367
|
i0.ɵɵelementEnd()()();
|
|
1226
1368
|
} if (rf & 2) {
|
|
1227
1369
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1229,28 +1371,31 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_66_ng_templa
|
|
|
1229
1371
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSpecificResponseDetails);
|
|
1230
1372
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
1231
1373
|
} }
|
|
1232
|
-
function
|
|
1233
|
-
i0.ɵɵ
|
|
1234
|
-
i0.ɵɵ
|
|
1374
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
1375
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
1376
|
+
i0.ɵɵelementStart(0, "kendo-panelbar-item", 26);
|
|
1377
|
+
i0.ɵɵlistener("stateChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_Template_kendo_panelbar_item_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onModelSpecificPanelToggle($event)); });
|
|
1378
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_ng_template_1_Template, 5, 0, "ng-template", 27)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_ng_template_2_Template, 7, 4, "ng-template", 28);
|
|
1235
1379
|
i0.ɵɵelementEnd();
|
|
1236
1380
|
} if (rf & 2) {
|
|
1237
|
-
i0.ɵɵ
|
|
1381
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1382
|
+
i0.ɵɵproperty("expanded", ctx_r1.modelSpecificExpanded);
|
|
1238
1383
|
} }
|
|
1239
|
-
function
|
|
1240
|
-
i0.ɵɵelementStart(0, "span",
|
|
1384
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_47_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1385
|
+
i0.ɵɵelementStart(0, "span", 104);
|
|
1241
1386
|
i0.ɵɵtext(1, "Cached");
|
|
1242
1387
|
i0.ɵɵelementEnd();
|
|
1243
1388
|
} }
|
|
1244
|
-
function
|
|
1245
|
-
i0.ɵɵelementStart(0, "span",
|
|
1389
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_47_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1390
|
+
i0.ɵɵelementStart(0, "span", 104);
|
|
1246
1391
|
i0.ɵɵtext(1, "Selected");
|
|
1247
1392
|
i0.ɵɵelementEnd();
|
|
1248
1393
|
} }
|
|
1249
|
-
function
|
|
1250
|
-
i0.ɵɵelementStart(0, "span",
|
|
1251
|
-
i0.ɵɵelement(1, "i",
|
|
1394
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_47_Template(rf, ctx) { if (rf & 1) {
|
|
1395
|
+
i0.ɵɵelementStart(0, "span", 53);
|
|
1396
|
+
i0.ɵɵelement(1, "i", 34);
|
|
1252
1397
|
i0.ɵɵtext(2, " Model Selection & Performance ");
|
|
1253
|
-
i0.ɵɵtemplate(3,
|
|
1398
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_47_Conditional_3_Template, 2, 0, "span", 104)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_47_Conditional_4_Template, 2, 0, "span", 104);
|
|
1254
1399
|
i0.ɵɵelementEnd();
|
|
1255
1400
|
} if (rf & 2) {
|
|
1256
1401
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1259,12 +1404,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_68_Template(
|
|
|
1259
1404
|
i0.ɵɵadvance();
|
|
1260
1405
|
i0.ɵɵconditional(ctx_r1.record.WasSelectedResult ? 4 : -1);
|
|
1261
1406
|
} }
|
|
1262
|
-
function
|
|
1263
|
-
i0.ɵɵelementStart(0, "div",
|
|
1407
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
1408
|
+
i0.ɵɵelementStart(0, "div", 159)(1, "label");
|
|
1264
1409
|
i0.ɵɵtext(2, "Cache Key");
|
|
1265
1410
|
i0.ɵɵelementEnd();
|
|
1266
|
-
i0.ɵɵelementStart(3, "div",
|
|
1267
|
-
i0.ɵɵelement(4, "i",
|
|
1411
|
+
i0.ɵɵelementStart(3, "div", 149);
|
|
1412
|
+
i0.ɵɵelement(4, "i", 162);
|
|
1268
1413
|
i0.ɵɵelementStart(5, "code");
|
|
1269
1414
|
i0.ɵɵtext(6);
|
|
1270
1415
|
i0.ɵɵelementEnd()()();
|
|
@@ -1273,28 +1418,28 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Condition
|
|
|
1273
1418
|
i0.ɵɵadvance(6);
|
|
1274
1419
|
i0.ɵɵtextInterpolate(ctx_r1.record.CacheKey);
|
|
1275
1420
|
} }
|
|
1276
|
-
function
|
|
1277
|
-
const
|
|
1278
|
-
i0.ɵɵelementStart(0, "div",
|
|
1421
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
1422
|
+
const _r22 = i0.ɵɵgetCurrentView();
|
|
1423
|
+
i0.ɵɵelementStart(0, "div", 148)(1, "label");
|
|
1279
1424
|
i0.ɵɵtext(2, "Judge Prompt");
|
|
1280
1425
|
i0.ɵɵelementEnd();
|
|
1281
|
-
i0.ɵɵelementStart(3, "div",
|
|
1282
|
-
i0.ɵɵlistener("click", function
|
|
1283
|
-
i0.ɵɵelement(4, "i",
|
|
1426
|
+
i0.ɵɵelementStart(3, "div", 163);
|
|
1427
|
+
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_27_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Prompts", ctx_r1.record.JudgeID)); });
|
|
1428
|
+
i0.ɵɵelement(4, "i", 164);
|
|
1284
1429
|
i0.ɵɵtext(5);
|
|
1285
|
-
i0.ɵɵelement(6, "i",
|
|
1430
|
+
i0.ɵɵelement(6, "i", 102);
|
|
1286
1431
|
i0.ɵɵelementEnd()();
|
|
1287
1432
|
} if (rf & 2) {
|
|
1288
1433
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1289
1434
|
i0.ɵɵadvance(5);
|
|
1290
1435
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Judge || "Unknown", " ");
|
|
1291
1436
|
} }
|
|
1292
|
-
function
|
|
1293
|
-
i0.ɵɵelementStart(0, "div",
|
|
1437
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
1438
|
+
i0.ɵɵelementStart(0, "div", 148)(1, "label");
|
|
1294
1439
|
i0.ɵɵtext(2, "Judge Score");
|
|
1295
1440
|
i0.ɵɵelementEnd();
|
|
1296
|
-
i0.ɵɵelementStart(3, "div",
|
|
1297
|
-
i0.ɵɵelement(4, "i",
|
|
1441
|
+
i0.ɵɵelementStart(3, "div", 149);
|
|
1442
|
+
i0.ɵɵelement(4, "i", 165);
|
|
1298
1443
|
i0.ɵɵtext(5);
|
|
1299
1444
|
i0.ɵɵelementEnd()();
|
|
1300
1445
|
} if (rf & 2) {
|
|
@@ -1302,12 +1447,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Condition
|
|
|
1302
1447
|
i0.ɵɵadvance(5);
|
|
1303
1448
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.JudgeScore, " ");
|
|
1304
1449
|
} }
|
|
1305
|
-
function
|
|
1306
|
-
i0.ɵɵelementStart(0, "div",
|
|
1450
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
1451
|
+
i0.ɵɵelementStart(0, "div", 148)(1, "label");
|
|
1307
1452
|
i0.ɵɵtext(2, "First Token Time");
|
|
1308
1453
|
i0.ɵɵelementEnd();
|
|
1309
|
-
i0.ɵɵelementStart(3, "div",
|
|
1310
|
-
i0.ɵɵelement(4, "i",
|
|
1454
|
+
i0.ɵɵelementStart(3, "div", 149);
|
|
1455
|
+
i0.ɵɵelement(4, "i", 166);
|
|
1311
1456
|
i0.ɵɵtext(5);
|
|
1312
1457
|
i0.ɵɵelementEnd()();
|
|
1313
1458
|
} if (rf & 2) {
|
|
@@ -1315,12 +1460,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Condition
|
|
|
1315
1460
|
i0.ɵɵadvance(5);
|
|
1316
1461
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.FirstTokenTime, " ms ");
|
|
1317
1462
|
} }
|
|
1318
|
-
function
|
|
1319
|
-
i0.ɵɵelementStart(0, "div",
|
|
1463
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_42_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1464
|
+
i0.ɵɵelementStart(0, "div", 159)(1, "label");
|
|
1320
1465
|
i0.ɵɵtext(2, "Cancellation Reason");
|
|
1321
1466
|
i0.ɵɵelementEnd();
|
|
1322
|
-
i0.ɵɵelementStart(3, "div",
|
|
1323
|
-
i0.ɵɵelement(4, "i",
|
|
1467
|
+
i0.ɵɵelementStart(3, "div", 149);
|
|
1468
|
+
i0.ɵɵelement(4, "i", 169);
|
|
1324
1469
|
i0.ɵɵtext(5);
|
|
1325
1470
|
i0.ɵɵelementEnd()();
|
|
1326
1471
|
} if (rf & 2) {
|
|
@@ -1328,27 +1473,27 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Condition
|
|
|
1328
1473
|
i0.ɵɵadvance(5);
|
|
1329
1474
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CancellationReason, " ");
|
|
1330
1475
|
} }
|
|
1331
|
-
function
|
|
1332
|
-
i0.ɵɵelementStart(0, "div",
|
|
1476
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
1477
|
+
i0.ɵɵelementStart(0, "div", 148)(1, "label");
|
|
1333
1478
|
i0.ɵɵtext(2, "Cancelled");
|
|
1334
1479
|
i0.ɵɵelementEnd();
|
|
1335
|
-
i0.ɵɵelementStart(3, "div",
|
|
1336
|
-
i0.ɵɵelement(4, "i",
|
|
1480
|
+
i0.ɵɵelementStart(3, "div", 167);
|
|
1481
|
+
i0.ɵɵelement(4, "i", 168);
|
|
1337
1482
|
i0.ɵɵtext(5, " Yes ");
|
|
1338
1483
|
i0.ɵɵelementEnd()();
|
|
1339
|
-
i0.ɵɵtemplate(6,
|
|
1484
|
+
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_42_Conditional_6_Template, 6, 1, "div", 159);
|
|
1340
1485
|
} if (rf & 2) {
|
|
1341
1486
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1342
1487
|
i0.ɵɵadvance(6);
|
|
1343
1488
|
i0.ɵɵconditional(ctx_r1.record.CancellationReason ? 6 : -1);
|
|
1344
1489
|
} }
|
|
1345
|
-
function
|
|
1346
|
-
const
|
|
1347
|
-
i0.ɵɵelementStart(0, "div",
|
|
1490
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
1491
|
+
const _r23 = i0.ɵɵgetCurrentView();
|
|
1492
|
+
i0.ɵɵelementStart(0, "div", 160)(1, "h4");
|
|
1348
1493
|
i0.ɵɵtext(2, "Model Selection Details");
|
|
1349
1494
|
i0.ɵɵelementEnd();
|
|
1350
|
-
i0.ɵɵelementStart(3, "div",
|
|
1351
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1495
|
+
i0.ɵɵelementStart(3, "div", 128)(4, "mj-code-editor", 170);
|
|
1496
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_43_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSelection, $event) || (ctx_r1.formattedModelSelection = $event); return i0.ɵɵresetView($event); });
|
|
1352
1497
|
i0.ɵɵelementEnd()()();
|
|
1353
1498
|
} if (rf & 2) {
|
|
1354
1499
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1356,13 +1501,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Condition
|
|
|
1356
1501
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSelection);
|
|
1357
1502
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
1358
1503
|
} }
|
|
1359
|
-
function
|
|
1360
|
-
const
|
|
1361
|
-
i0.ɵɵelementStart(0, "div",
|
|
1504
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_44_Template(rf, ctx) { if (rf & 1) {
|
|
1505
|
+
const _r24 = i0.ɵɵgetCurrentView();
|
|
1506
|
+
i0.ɵɵelementStart(0, "div", 161)(1, "h4");
|
|
1362
1507
|
i0.ɵɵtext(2, "Error Details");
|
|
1363
1508
|
i0.ɵɵelementEnd();
|
|
1364
|
-
i0.ɵɵelementStart(3, "div",
|
|
1365
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1509
|
+
i0.ɵɵelementStart(3, "div", 128)(4, "mj-code-editor", 171);
|
|
1510
|
+
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_44_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedErrorDetails, $event) || (ctx_r1.formattedErrorDetails = $event); return i0.ɵɵresetView($event); });
|
|
1366
1511
|
i0.ɵɵelementEnd()()();
|
|
1367
1512
|
} if (rf & 2) {
|
|
1368
1513
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1370,53 +1515,53 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Condition
|
|
|
1370
1515
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedErrorDetails);
|
|
1371
1516
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
1372
1517
|
} }
|
|
1373
|
-
function
|
|
1374
|
-
i0.ɵɵelementStart(0, "div",
|
|
1518
|
+
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Template(rf, ctx) { if (rf & 1) {
|
|
1519
|
+
i0.ɵɵelementStart(0, "div", 55)(1, "div", 147)(2, "div", 148)(3, "label");
|
|
1375
1520
|
i0.ɵɵtext(4, "Status");
|
|
1376
1521
|
i0.ɵɵelementEnd();
|
|
1377
|
-
i0.ɵɵelementStart(5, "div",
|
|
1378
|
-
i0.ɵɵelement(6, "i",
|
|
1522
|
+
i0.ɵɵelementStart(5, "div", 149);
|
|
1523
|
+
i0.ɵɵelement(6, "i", 146);
|
|
1379
1524
|
i0.ɵɵtext(7);
|
|
1380
1525
|
i0.ɵɵelementEnd()();
|
|
1381
|
-
i0.ɵɵelementStart(8, "div",
|
|
1526
|
+
i0.ɵɵelementStart(8, "div", 148)(9, "label");
|
|
1382
1527
|
i0.ɵɵtext(10, "Selection Strategy");
|
|
1383
1528
|
i0.ɵɵelementEnd();
|
|
1384
|
-
i0.ɵɵelementStart(11, "div",
|
|
1385
|
-
i0.ɵɵelement(12, "i",
|
|
1529
|
+
i0.ɵɵelementStart(11, "div", 149);
|
|
1530
|
+
i0.ɵɵelement(12, "i", 157);
|
|
1386
1531
|
i0.ɵɵtext(13);
|
|
1387
1532
|
i0.ɵɵelementEnd()();
|
|
1388
|
-
i0.ɵɵelementStart(14, "div",
|
|
1533
|
+
i0.ɵɵelementStart(14, "div", 148)(15, "label");
|
|
1389
1534
|
i0.ɵɵtext(16, "Model Power Rank");
|
|
1390
1535
|
i0.ɵɵelementEnd();
|
|
1391
|
-
i0.ɵɵelementStart(17, "div",
|
|
1392
|
-
i0.ɵɵelement(18, "i",
|
|
1536
|
+
i0.ɵɵelementStart(17, "div", 149);
|
|
1537
|
+
i0.ɵɵelement(18, "i", 158);
|
|
1393
1538
|
i0.ɵɵtext(19);
|
|
1394
1539
|
i0.ɵɵelementEnd()();
|
|
1395
|
-
i0.ɵɵelementStart(20, "div",
|
|
1540
|
+
i0.ɵɵelementStart(20, "div", 148)(21, "label");
|
|
1396
1541
|
i0.ɵɵtext(22, "Cache Hit");
|
|
1397
1542
|
i0.ɵɵelementEnd();
|
|
1398
|
-
i0.ɵɵelementStart(23, "div",
|
|
1543
|
+
i0.ɵɵelementStart(23, "div", 149);
|
|
1399
1544
|
i0.ɵɵelement(24, "i");
|
|
1400
1545
|
i0.ɵɵtext(25);
|
|
1401
1546
|
i0.ɵɵelementEnd()();
|
|
1402
|
-
i0.ɵɵtemplate(26,
|
|
1403
|
-
i0.ɵɵelementStart(29, "div",
|
|
1547
|
+
i0.ɵɵtemplate(26, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_26_Template, 7, 1, "div", 159)(27, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_27_Template, 7, 1, "div", 148)(28, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_28_Template, 6, 1, "div", 148);
|
|
1548
|
+
i0.ɵɵelementStart(29, "div", 148)(30, "label");
|
|
1404
1549
|
i0.ɵɵtext(31, "Was Selected Result");
|
|
1405
1550
|
i0.ɵɵelementEnd();
|
|
1406
|
-
i0.ɵɵelementStart(32, "div",
|
|
1551
|
+
i0.ɵɵelementStart(32, "div", 149);
|
|
1407
1552
|
i0.ɵɵelement(33, "i");
|
|
1408
1553
|
i0.ɵɵtext(34);
|
|
1409
1554
|
i0.ɵɵelementEnd()();
|
|
1410
|
-
i0.ɵɵelementStart(35, "div",
|
|
1555
|
+
i0.ɵɵelementStart(35, "div", 148)(36, "label");
|
|
1411
1556
|
i0.ɵɵtext(37, "Streaming Enabled");
|
|
1412
1557
|
i0.ɵɵelementEnd();
|
|
1413
|
-
i0.ɵɵelementStart(38, "div",
|
|
1558
|
+
i0.ɵɵelementStart(38, "div", 149);
|
|
1414
1559
|
i0.ɵɵelement(39, "i");
|
|
1415
1560
|
i0.ɵɵtext(40);
|
|
1416
1561
|
i0.ɵɵelementEnd()();
|
|
1417
|
-
i0.ɵɵtemplate(41,
|
|
1562
|
+
i0.ɵɵtemplate(41, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_41_Template, 6, 1, "div", 148)(42, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_42_Template, 7, 1);
|
|
1418
1563
|
i0.ɵɵelementEnd();
|
|
1419
|
-
i0.ɵɵtemplate(43,
|
|
1564
|
+
i0.ɵɵtemplate(43, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_43_Template, 5, 4, "div", 160)(44, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_44_Template, 5, 4, "div", 161);
|
|
1420
1565
|
i0.ɵɵelementEnd();
|
|
1421
1566
|
} if (rf & 2) {
|
|
1422
1567
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1481,49 +1626,28 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
|
|
|
1481
1626
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.refreshData()); });
|
|
1482
1627
|
i0.ɵɵelement(26, "i", 22);
|
|
1483
1628
|
i0.ɵɵelementEnd()()();
|
|
1484
|
-
i0.ɵɵ
|
|
1485
|
-
i0.ɵɵelement(29, "i", 25);
|
|
1486
|
-
i0.ɵɵelementStart(30, "div", 26)(31, "div", 27);
|
|
1487
|
-
i0.ɵɵtext(32, "Duration");
|
|
1629
|
+
i0.ɵɵtemplate(27, AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Template, 36, 9)(28, AIPromptRunFormComponentExtended_Conditional_1_Conditional_28_Template, 23, 4, "div", 23);
|
|
1488
1630
|
i0.ɵɵelementEnd();
|
|
1489
|
-
i0.ɵɵelementStart(
|
|
1490
|
-
i0.ɵɵ
|
|
1491
|
-
i0.ɵɵ
|
|
1492
|
-
i0.ɵɵelementStart(35, "div", 24);
|
|
1493
|
-
i0.ɵɵelement(36, "i", 29);
|
|
1494
|
-
i0.ɵɵelementStart(37, "div", 26)(38, "div", 27);
|
|
1495
|
-
i0.ɵɵtext(39, "Total Tokens");
|
|
1631
|
+
i0.ɵɵelementStart(29, "div", 24)(30, "kendo-panelbar", 25)(31, "kendo-panelbar-item", 26);
|
|
1632
|
+
i0.ɵɵlistener("stateChange", function AIPromptRunFormComponentExtended_Conditional_1_Template_kendo_panelbar_item_stateChange_31_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputPanelToggle($event)); });
|
|
1633
|
+
i0.ɵɵtemplate(32, AIPromptRunFormComponentExtended_Conditional_1_ng_template_32_Template, 4, 1, "ng-template", 27)(33, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Template, 3, 1, "ng-template", 28);
|
|
1496
1634
|
i0.ɵɵelementEnd();
|
|
1497
|
-
i0.ɵɵelementStart(
|
|
1498
|
-
i0.ɵɵ
|
|
1499
|
-
i0.ɵɵ
|
|
1500
|
-
i0.ɵɵelementStart(42, "div", 24);
|
|
1501
|
-
i0.ɵɵelement(43, "i", 30);
|
|
1502
|
-
i0.ɵɵelementStart(44, "div", 26)(45, "div", 27);
|
|
1503
|
-
i0.ɵɵtext(46, "Cost");
|
|
1635
|
+
i0.ɵɵelementStart(34, "kendo-panelbar-item", 26);
|
|
1636
|
+
i0.ɵɵlistener("stateChange", function AIPromptRunFormComponentExtended_Conditional_1_Template_kendo_panelbar_item_stateChange_34_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onResultPanelToggle($event)); });
|
|
1637
|
+
i0.ɵɵtemplate(35, AIPromptRunFormComponentExtended_Conditional_1_ng_template_35_Template, 5, 2, "ng-template", 27)(36, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Template, 4, 2, "ng-template", 28);
|
|
1504
1638
|
i0.ɵɵelementEnd();
|
|
1505
|
-
i0.ɵɵelementStart(
|
|
1506
|
-
i0.ɵɵ
|
|
1507
|
-
i0.ɵɵ
|
|
1508
|
-
i0.ɵɵtemplate(49, AIPromptRunFormComponentExtended_Conditional_1_Conditional_49_Template, 8, 4, "div", 24);
|
|
1509
|
-
i0.ɵɵelementEnd()();
|
|
1510
|
-
i0.ɵɵelementStart(50, "div", 31)(51, "kendo-panelbar", 32)(52, "kendo-panelbar-item", 33);
|
|
1511
|
-
i0.ɵɵlistener("stateChange", function AIPromptRunFormComponentExtended_Conditional_1_Template_kendo_panelbar_item_stateChange_52_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputPanelToggle()); });
|
|
1512
|
-
i0.ɵɵtemplate(53, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Template, 4, 1, "ng-template", 34)(54, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Template, 3, 1, "ng-template", 35);
|
|
1513
|
-
i0.ɵɵelementEnd();
|
|
1514
|
-
i0.ɵɵelementStart(55, "kendo-panelbar-item", 36);
|
|
1515
|
-
i0.ɵɵtemplate(56, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template, 5, 2, "ng-template", 34)(57, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Template, 4, 2, "ng-template", 35);
|
|
1516
|
-
i0.ɵɵelementEnd();
|
|
1517
|
-
i0.ɵɵelementStart(58, "kendo-panelbar-item", 36);
|
|
1518
|
-
i0.ɵɵtemplate(59, AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Template, 3, 0, "ng-template", 34)(60, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Template, 42, 15, "ng-template", 35);
|
|
1639
|
+
i0.ɵɵelementStart(37, "kendo-panelbar-item", 26);
|
|
1640
|
+
i0.ɵɵlistener("stateChange", function AIPromptRunFormComponentExtended_Conditional_1_Template_kendo_panelbar_item_stateChange_37_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onMetricsPanelToggle($event)); });
|
|
1641
|
+
i0.ɵɵtemplate(38, AIPromptRunFormComponentExtended_Conditional_1_ng_template_38_Template, 3, 0, "ng-template", 27)(39, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Template, 41, 14, "ng-template", 28);
|
|
1519
1642
|
i0.ɵɵelementEnd();
|
|
1520
|
-
i0.ɵɵtemplate(
|
|
1521
|
-
i0.ɵɵelementStart(
|
|
1522
|
-
i0.ɵɵtemplate(
|
|
1643
|
+
i0.ɵɵtemplate(40, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_Template, 3, 1, "kendo-panelbar-item", 29)(41, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_Template, 3, 1, "kendo-panelbar-item", 29);
|
|
1644
|
+
i0.ɵɵelementStart(42, "kendo-panelbar-item", 29);
|
|
1645
|
+
i0.ɵɵtemplate(43, AIPromptRunFormComponentExtended_Conditional_1_ng_template_43_Template, 3, 0, "ng-template", 27)(44, AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Template, 49, 26, "ng-template", 28);
|
|
1523
1646
|
i0.ɵɵelementEnd();
|
|
1524
|
-
i0.ɵɵtemplate(
|
|
1525
|
-
i0.ɵɵelementStart(
|
|
1526
|
-
i0.ɵɵ
|
|
1647
|
+
i0.ɵɵtemplate(45, AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_Template, 3, 1, "kendo-panelbar-item", 29);
|
|
1648
|
+
i0.ɵɵelementStart(46, "kendo-panelbar-item", 26);
|
|
1649
|
+
i0.ɵɵlistener("stateChange", function AIPromptRunFormComponentExtended_Conditional_1_Template_kendo_panelbar_item_stateChange_46_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onModelSelectionPanelToggle($event)); });
|
|
1650
|
+
i0.ɵɵtemplate(47, AIPromptRunFormComponentExtended_Conditional_1_ng_template_47_Template, 5, 2, "ng-template", 27)(48, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Template, 45, 21, "ng-template", 28);
|
|
1527
1651
|
i0.ɵɵelementEnd()()()();
|
|
1528
1652
|
} if (rf & 2) {
|
|
1529
1653
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -1552,15 +1676,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
|
|
|
1552
1676
|
i0.ɵɵconditional(ctx_r1.record.Vendor ? 19 : -1);
|
|
1553
1677
|
i0.ɵɵadvance();
|
|
1554
1678
|
i0.ɵɵconditional(ctx_r1.record.RerunFromPromptRunID ? 20 : -1);
|
|
1555
|
-
i0.ɵɵadvance(14);
|
|
1556
|
-
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.ExecutionTimeMS));
|
|
1557
|
-
i0.ɵɵadvance(7);
|
|
1558
|
-
i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensUsed));
|
|
1559
1679
|
i0.ɵɵadvance(7);
|
|
1560
|
-
i0.ɵɵ
|
|
1561
|
-
i0.ɵɵadvance();
|
|
1562
|
-
i0.ɵɵconditional(ctx_r1.record.RunAt ? 49 : -1);
|
|
1563
|
-
i0.ɵɵadvance(2);
|
|
1680
|
+
i0.ɵɵconditional(ctx_r1.record.ConfigurationID ? 27 : 28);
|
|
1681
|
+
i0.ɵɵadvance(3);
|
|
1564
1682
|
i0.ɵɵproperty("keepItemContent", true);
|
|
1565
1683
|
i0.ɵɵadvance();
|
|
1566
1684
|
i0.ɵɵproperty("expanded", ctx_r1.inputExpanded);
|
|
@@ -1569,13 +1687,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
|
|
|
1569
1687
|
i0.ɵɵadvance(3);
|
|
1570
1688
|
i0.ɵɵproperty("expanded", ctx_r1.metricsExpanded);
|
|
1571
1689
|
i0.ɵɵadvance(3);
|
|
1572
|
-
i0.ɵɵconditional(ctx_r1.record && (ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 0 || ctx_r1.record.ValidationBehavior) ?
|
|
1690
|
+
i0.ɵɵconditional(ctx_r1.record && (ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 0 || ctx_r1.record.ValidationBehavior) ? 40 : -1);
|
|
1573
1691
|
i0.ɵɵadvance();
|
|
1574
|
-
i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ?
|
|
1692
|
+
i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ? 41 : -1);
|
|
1575
1693
|
i0.ɵɵadvance();
|
|
1576
1694
|
i0.ɵɵproperty("expanded", false);
|
|
1577
1695
|
i0.ɵɵadvance(3);
|
|
1578
|
-
i0.ɵɵconditional(ctx_r1.record.ModelSpecificResponseDetails ?
|
|
1696
|
+
i0.ɵɵconditional(ctx_r1.record.ModelSpecificResponseDetails ? 45 : -1);
|
|
1579
1697
|
i0.ɵɵadvance();
|
|
1580
1698
|
i0.ɵɵproperty("expanded", false);
|
|
1581
1699
|
} }
|
|
@@ -1592,15 +1710,22 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1592
1710
|
this.childRuns = [];
|
|
1593
1711
|
// UI state
|
|
1594
1712
|
this.isLoadingRelatedData = false;
|
|
1595
|
-
this.isParsingMessages =
|
|
1596
|
-
this.inputExpanded = true;
|
|
1713
|
+
this.isParsingMessages = false; // Will be set to true in ngOnInit if there are messages
|
|
1714
|
+
this.inputExpanded = true; // Start open as users want to see this
|
|
1597
1715
|
this.messagesExpanded = true;
|
|
1598
1716
|
this.dataExpanded = false; // Changed to false - often blank
|
|
1599
1717
|
this.rawExpanded = false;
|
|
1600
|
-
this.resultExpanded =
|
|
1718
|
+
this.resultExpanded = false; // Start closed for lazy loading
|
|
1601
1719
|
this.metricsExpanded = false;
|
|
1602
1720
|
this.hierarchyExpanded = false;
|
|
1603
|
-
this.validationExpanded =
|
|
1721
|
+
this.validationExpanded = false; // Start closed for lazy loading
|
|
1722
|
+
this.modelSpecificExpanded = false; // Start closed for lazy loading
|
|
1723
|
+
// Track what has been loaded
|
|
1724
|
+
this.hasLoadedInput = false;
|
|
1725
|
+
this.hasLoadedResult = false;
|
|
1726
|
+
this.hasLoadedValidation = false;
|
|
1727
|
+
this.hasLoadedMetrics = false;
|
|
1728
|
+
this.hasLoadedModelSpecific = false;
|
|
1604
1729
|
// Formatted values
|
|
1605
1730
|
this.formattedMessages = '';
|
|
1606
1731
|
this.formattedResult = '';
|
|
@@ -1620,9 +1745,24 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1620
1745
|
async ngOnInit() {
|
|
1621
1746
|
await super.ngOnInit();
|
|
1622
1747
|
if (this.record?.ID) {
|
|
1748
|
+
// Set loading state immediately if input panel will be loaded and has messages
|
|
1749
|
+
if (this.inputExpanded && this.record.Messages && this.record.Messages.trim() !== '') {
|
|
1750
|
+
this.isParsingMessages = true;
|
|
1751
|
+
this.cdr.detectChanges(); // Force immediate update to show spinner
|
|
1752
|
+
}
|
|
1753
|
+
// Load related entities
|
|
1623
1754
|
await this.loadRelatedData();
|
|
1624
|
-
|
|
1625
|
-
|
|
1755
|
+
// Format ALL JSON fields immediately on load - it's inexpensive
|
|
1756
|
+
console.log('🚀 Formatting all JSON fields on init...');
|
|
1757
|
+
this.formatAllJsonFields();
|
|
1758
|
+
// Mark all data as loaded since we're doing it all upfront
|
|
1759
|
+
this.hasLoadedInput = true;
|
|
1760
|
+
this.hasLoadedResult = true;
|
|
1761
|
+
this.hasLoadedValidation = true;
|
|
1762
|
+
this.hasLoadedMetrics = true;
|
|
1763
|
+
this.hasLoadedModelSpecific = true;
|
|
1764
|
+
this.isParsingMessages = false;
|
|
1765
|
+
this.cdr.detectChanges();
|
|
1626
1766
|
}
|
|
1627
1767
|
}
|
|
1628
1768
|
ngAfterViewInit() {
|
|
@@ -1636,12 +1776,34 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1636
1776
|
// Currently no subscriptions or timers to clean up
|
|
1637
1777
|
// This is here for future use and to complete the lifecycle
|
|
1638
1778
|
}
|
|
1639
|
-
onInputPanelToggle() {
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1779
|
+
onInputPanelToggle(event) {
|
|
1780
|
+
const expanded = event;
|
|
1781
|
+
this.inputExpanded = expanded;
|
|
1782
|
+
// Data is already formatted on init, no need to do anything
|
|
1783
|
+
}
|
|
1784
|
+
onResultPanelToggle(event) {
|
|
1785
|
+
const expanded = event;
|
|
1786
|
+
this.resultExpanded = expanded;
|
|
1787
|
+
// Data is already formatted on init, no need to do anything
|
|
1788
|
+
}
|
|
1789
|
+
onValidationPanelToggle(event) {
|
|
1790
|
+
const expanded = event;
|
|
1791
|
+
this.validationExpanded = expanded;
|
|
1792
|
+
// Data is already formatted on init, no need to do anything
|
|
1793
|
+
}
|
|
1794
|
+
onMetricsPanelToggle(event) {
|
|
1795
|
+
const expanded = event;
|
|
1796
|
+
this.metricsExpanded = expanded;
|
|
1797
|
+
// Data is already formatted on init, no need to do anything
|
|
1798
|
+
}
|
|
1799
|
+
onModelSpecificPanelToggle(event) {
|
|
1800
|
+
const expanded = event;
|
|
1801
|
+
this.modelSpecificExpanded = expanded;
|
|
1802
|
+
// Data is already formatted on init, no need to do anything
|
|
1803
|
+
}
|
|
1804
|
+
onModelSelectionPanelToggle(event) {
|
|
1805
|
+
const expanded = event;
|
|
1806
|
+
// Data is already formatted on init, no need to do anything
|
|
1645
1807
|
}
|
|
1646
1808
|
async loadRelatedData() {
|
|
1647
1809
|
this.isLoadingRelatedData = true;
|
|
@@ -1692,18 +1854,41 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1692
1854
|
this.childRuns = result.Results || [];
|
|
1693
1855
|
}
|
|
1694
1856
|
}
|
|
1695
|
-
|
|
1696
|
-
this.
|
|
1697
|
-
|
|
1857
|
+
formatAllJsonFields() {
|
|
1858
|
+
if (!this.record) {
|
|
1859
|
+
console.warn('formatAllJsonFields called but record is not available');
|
|
1860
|
+
return;
|
|
1861
|
+
}
|
|
1862
|
+
console.log('📄 Formatting input data...');
|
|
1863
|
+
// Format input/messages data
|
|
1698
1864
|
const messageData = this.record.ParseMessagesData();
|
|
1699
1865
|
this.chatMessages = messageData.chatMessages;
|
|
1700
1866
|
this.inputData = messageData.inputData;
|
|
1701
1867
|
this.formattedMessages = messageData.formattedMessages;
|
|
1702
1868
|
this.formattedData = messageData.formattedData;
|
|
1703
|
-
this.
|
|
1704
|
-
|
|
1869
|
+
console.log('📄 Input data formatted. Chat messages:', this.chatMessages.length, 'Input data exists:', !!this.inputData);
|
|
1870
|
+
console.log('📊 Formatting result data...');
|
|
1871
|
+
// Format result data
|
|
1705
1872
|
this.formattedResult = this.record.GetFormattedResult();
|
|
1706
|
-
|
|
1873
|
+
console.log('📊 Result formatted:', !!this.formattedResult, 'Length:', this.formattedResult?.length);
|
|
1874
|
+
console.log('🔍 Formatting validation data...');
|
|
1875
|
+
// Format validation data
|
|
1876
|
+
this.loadValidationData();
|
|
1877
|
+
console.log('📈 Formatting metrics data...');
|
|
1878
|
+
// Format metrics data (ModelSelection, ErrorDetails)
|
|
1879
|
+
this.formatMetricsData();
|
|
1880
|
+
console.log('🔧 Formatting model specific data...');
|
|
1881
|
+
// Format model specific response details
|
|
1882
|
+
this.formatModelSpecificResponseDetails();
|
|
1883
|
+
// Format error details if available
|
|
1884
|
+
if (this.record.ErrorDetails && !this.formattedErrorDetails) {
|
|
1885
|
+
console.log('⚠️ Formatting error details...');
|
|
1886
|
+
this.formatErrorDetails();
|
|
1887
|
+
}
|
|
1888
|
+
console.log('✅ All JSON fields formatted');
|
|
1889
|
+
}
|
|
1890
|
+
formatMetricsData() {
|
|
1891
|
+
// Format v2.78 JSON fields related to metrics
|
|
1707
1892
|
const parseOptions = {
|
|
1708
1893
|
extractInlineJson: true,
|
|
1709
1894
|
maxDepth: 100,
|
|
@@ -1731,16 +1916,44 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1731
1916
|
this.formattedErrorDetails = this.record.ErrorDetails;
|
|
1732
1917
|
}
|
|
1733
1918
|
}
|
|
1734
|
-
//
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1919
|
+
// Note: ModelSpecificResponseDetails is now formatted in its own panel toggle method
|
|
1920
|
+
}
|
|
1921
|
+
formatErrorDetails() {
|
|
1922
|
+
if (!this.record.ErrorDetails) {
|
|
1923
|
+
this.formattedErrorDetails = '';
|
|
1924
|
+
return;
|
|
1925
|
+
}
|
|
1926
|
+
const parseOptions = {
|
|
1927
|
+
extractInlineJson: true,
|
|
1928
|
+
maxDepth: 100,
|
|
1929
|
+
debug: false
|
|
1930
|
+
};
|
|
1931
|
+
try {
|
|
1932
|
+
const errorDetails = JSON.parse(this.record.ErrorDetails);
|
|
1933
|
+
const parsed = ParseJSONRecursive(errorDetails, parseOptions);
|
|
1934
|
+
this.formattedErrorDetails = JSON.stringify(parsed, null, 2);
|
|
1935
|
+
}
|
|
1936
|
+
catch (error) {
|
|
1937
|
+
this.formattedErrorDetails = this.record.ErrorDetails;
|
|
1938
|
+
}
|
|
1939
|
+
}
|
|
1940
|
+
formatModelSpecificResponseDetails() {
|
|
1941
|
+
if (!this.record.ModelSpecificResponseDetails) {
|
|
1942
|
+
this.formattedModelSpecificResponseDetails = '';
|
|
1943
|
+
return;
|
|
1944
|
+
}
|
|
1945
|
+
const parseOptions = {
|
|
1946
|
+
extractInlineJson: true,
|
|
1947
|
+
maxDepth: 100,
|
|
1948
|
+
debug: false
|
|
1949
|
+
};
|
|
1950
|
+
try {
|
|
1951
|
+
const modelDetails = JSON.parse(this.record.ModelSpecificResponseDetails);
|
|
1952
|
+
const parsed = ParseJSONRecursive(modelDetails, parseOptions);
|
|
1953
|
+
this.formattedModelSpecificResponseDetails = JSON.stringify(parsed, null, 2);
|
|
1954
|
+
}
|
|
1955
|
+
catch (error) {
|
|
1956
|
+
this.formattedModelSpecificResponseDetails = this.record.ModelSpecificResponseDetails;
|
|
1744
1957
|
}
|
|
1745
1958
|
}
|
|
1746
1959
|
getStatusColor() {
|
|
@@ -1894,11 +2107,15 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1894
2107
|
});
|
|
1895
2108
|
}
|
|
1896
2109
|
async refreshData() {
|
|
2110
|
+
console.log('🔄 refreshData called');
|
|
1897
2111
|
if (this.record?.ID) {
|
|
2112
|
+
console.log('🔄 Reloading record and formatting all data...');
|
|
1898
2113
|
await this.record.Load(this.record.ID);
|
|
1899
2114
|
await this.loadRelatedData();
|
|
1900
|
-
this.
|
|
1901
|
-
|
|
2115
|
+
console.log('🔄 Record reloaded. Result field exists:', !!this.record.Result);
|
|
2116
|
+
// Format all JSON fields again
|
|
2117
|
+
this.formatAllJsonFields();
|
|
2118
|
+
this.cdr.detectChanges();
|
|
1902
2119
|
}
|
|
1903
2120
|
}
|
|
1904
2121
|
loadValidationData() {
|
|
@@ -1941,18 +2158,17 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1941
2158
|
this.validationSummary = null;
|
|
1942
2159
|
this.formattedValidationSummary = '';
|
|
1943
2160
|
}
|
|
1944
|
-
//
|
|
1945
|
-
this.validationExpanded = (this.record.ValidationAttemptCount || 0) > 1;
|
|
2161
|
+
// Don't auto-expand validation panel anymore - let user expand when needed
|
|
1946
2162
|
}
|
|
1947
2163
|
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), i0.ɵɵdirectiveInject(i3.TestHarnessWindowService), i0.ɵɵdirectiveInject(i0.ViewContainerRef)); }; }
|
|
1948
|
-
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"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions"], ["kendoButton", "", "fillMode", "outline", "size", "small", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["kendoButton", "", "fillMode", "outline", "size", "small", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "
|
|
2164
|
+
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"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions"], ["kendoButton", "", "fillMode", "outline", "size", "small", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["kendoButton", "", "fillMode", "outline", "size", "small", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "form-content"], [3, "keepItemContent"], [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-level-up-alt"], [1, "original-link", 3, "click"], [1, "metric-item"], [1, "fa-solid", "fa-cog"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], ["href", "javascript:void(0)", 1, "config-link", 3, "click"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-coins"], [1, "fa-solid", "fa-dollar-sign"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-code"], [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-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, "error-info"], [1, "finish-reason"], [1, "error-details"], [1, "error-hint"], [2, "height", "200px", "width", "100%", 3, "ngModel", "disabled", "language", "lineWrapping"], [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, "fa-solid", "fa-hourglass-start"], [1, "fa-solid", "fa-brain"], [1, "fa-solid", "fa-flag-checkered"], [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-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, "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-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-check-circle"], ["name", "formattedModelSpecificResponseDetails", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-strategy"], [1, "fa-solid", "fa-ranking-star"], [1, "detail-field", "full-width"], [1, "model-selection-json"], [1, "error-details-json"], [1, "fa-solid", "fa-key"], ["title", "View Judge Prompt", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-gavel"], [1, "fa-solid", "fa-star"], [1, "fa-solid", "fa-bolt"], [1, "detail-value", "error"], [1, "fa-solid", "fa-ban"], [1, "fa-solid", "fa-exclamation-circle"], ["name", "formattedModelSelection", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedErrorDetails", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"]], template: function AIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
1949
2165
|
i0.ɵɵelementStart(0, "div", 1);
|
|
1950
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Template,
|
|
2166
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Template, 49, 28, "form", 2);
|
|
1951
2167
|
i0.ɵɵelementEnd();
|
|
1952
2168
|
} if (rf & 2) {
|
|
1953
2169
|
i0.ɵɵadvance();
|
|
1954
2170
|
i0.ɵɵconditional(ctx.record ? 1 : -1);
|
|
1955
|
-
} }, dependencies: [i4.ɵNgNoValidate, i4.NgControlStatus, i4.NgControlStatusGroup, i4.NgModel, i4.NgForm, i5.PanelBarComponent, i5.PanelBarItemComponent, i5.PanelBarContentDirective, i5.PanelBarItemTitleDirective, i5.ExpansionPanelComponent, i5.ExpansionPanelTitleDirective, i6.ButtonComponent, i7.FormToolbarComponent, i8.CodeEditorComponent, i9.ChatMessageViewerComponent, i10.DatePipe], styles: ["\n\n.error-info[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 16px;\n background-color: #fef3f3;\n border: 1px solid #fecaca;\n border-radius: 8px;\n}\n\n.finish-reason[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: #dc2626;\n font-size: 14px;\n}\n\n.error-details[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.error-details[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: #991b1b;\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint[_ngcontent-%COMP%] {\n margin: 0;\n color: #7f1d1d;\n font-size: 14px;\n font-style: italic;\n}\n\n\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.original-run[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #fff3cd;\n font-size: 0.85em;\n}\n\n.original-link[_ngcontent-%COMP%] {\n color: #ff6358;\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link[_ngcontent-%COMP%]:hover {\n color: #ff4444;\n text-decoration: underline;\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}"], changeDetection: 0 }); }
|
|
2171
|
+
} }, dependencies: [i4.ɵNgNoValidate, i4.NgControlStatus, i4.NgControlStatusGroup, i4.NgModel, i4.NgForm, i5.PanelBarComponent, i5.PanelBarItemComponent, i5.PanelBarContentDirective, i5.PanelBarItemTitleDirective, i5.ExpansionPanelComponent, i5.ExpansionPanelTitleDirective, i6.ButtonComponent, i7.FormToolbarComponent, i8.CodeEditorComponent, i9.ChatMessageViewerComponent, i10.DatePipe], styles: ["\n\n.error-info[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 16px;\n background-color: #fef3f3;\n border: 1px solid #fecaca;\n border-radius: 8px;\n}\n\n.finish-reason[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: #dc2626;\n font-size: 14px;\n}\n\n.error-details[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.error-details[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: #991b1b;\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint[_ngcontent-%COMP%] {\n margin: 0;\n color: #7f1d1d;\n font-size: 14px;\n font-style: italic;\n}\n\n\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.original-run[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #fff3cd;\n font-size: 0.85em;\n}\n\n.original-link[_ngcontent-%COMP%] {\n color: #ff6358;\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link[_ngcontent-%COMP%]:hover {\n color: #ff4444;\n text-decoration: underline;\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.config-link[_ngcontent-%COMP%] {\n color: #007bff;\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link[_ngcontent-%COMP%]:hover {\n color: #0056b3;\n text-decoration: underline;\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 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}"], changeDetection: 0 }); }
|
|
1956
2172
|
};
|
|
1957
2173
|
AIPromptRunFormComponentExtended = __decorate([
|
|
1958
2174
|
RegisterClass(BaseFormComponent, 'MJ: AI Prompt Runs')
|
|
@@ -1960,7 +2176,7 @@ AIPromptRunFormComponentExtended = __decorate([
|
|
|
1960
2176
|
export { AIPromptRunFormComponentExtended };
|
|
1961
2177
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIPromptRunFormComponentExtended, [{
|
|
1962
2178
|
type: Component,
|
|
1963
|
-
args: [{ selector: 'mj-ai-prompt-run-form', changeDetection: ChangeDetectionStrategy.OnPush, 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 @if (record.RerunFromPromptRunID) {\n <span class=\"original-run\" title=\"View Original Run\">\n <i class=\"fa-solid fa-level-up-alt\"></i>\n <a (click)=\"navigateToOriginalRun()\" class=\"original-link\">Original Run</a>\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)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\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 [keepItemContent]=\"true\">\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 @if (record.Status === 'Failed' || record.Success === false) {\n <div class=\"error-info\">\n @if (record.Status) {\n <p class=\"finish-reason\">\n <strong>Status:</strong> {{ record.Status }}\n </p>\n }\n @if (formattedErrorDetails) {\n <div class=\"error-details\">\n <h4>Error Details</h4>\n <mj-code-editor\n [ngModel]=\"formattedErrorDetails\"\n [disabled]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (!formattedErrorDetails) {\n <p class=\"error-hint\">\n The prompt execution failed but no additional error information is available.\n </p>\n }\n </div>\n }\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 \n <!-- Timing Metrics -->\n @if (record.QueueTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-hourglass-start\"></i>\n <h4>Queue Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.QueueTime) }}</div>\n </div>\n }\n \n @if (record.PromptTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>Prompt Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.PromptTime) }}</div>\n </div>\n }\n \n @if (record.CompletionTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <h4>Completion Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.CompletionTime) }}</div>\n </div>\n }\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 <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <kendo-panelbar-item [expanded]=\"false\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Specific Response Details\n <span class=\"panel-badge\">JSON</span>\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"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(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedModelSpecificResponseDetails\"\n name=\"formattedModelSpecificResponseDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n \n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <kendo-panelbar-item [expanded]=\"false\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection & Performance\n @if (record.CacheHit) {\n <span class=\"panel-badge success\">Cached</span>\n }\n @if (record.WasSelectedResult) {\n <span class=\"panel-badge success\">Selected</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n <!-- Model Selection Details -->\n <div class=\"detail-field\">\n <label>Status</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ record.Status || 'Unknown' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Selection Strategy</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-strategy\"></i>\n {{ record.SelectionStrategy || '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Model Power Rank</label>\n <div class=\"detail-value\" [class.null-value]=\"record.ModelPowerRank === null\">\n <i class=\"fa-solid fa-ranking-star\"></i>\n {{ record.ModelPowerRank !== null ? record.ModelPowerRank : '\u2014' }}\n </div>\n </div>\n \n <!-- Cache Information -->\n <div class=\"detail-field\">\n <label>Cache Hit</label>\n <div class=\"detail-value\">\n <i [class]=\"record.CacheHit ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.CacheHit ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.CacheKey) {\n <div class=\"detail-field full-width\">\n <label>Cache Key</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-key\"></i>\n <code>{{ record.CacheKey }}</code>\n </div>\n </div>\n }\n \n <!-- Judge Information -->\n @if (record.JudgeID) {\n <div class=\"detail-field\">\n <label>Judge Prompt</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('AI Prompts', record.JudgeID)\" title=\"View Judge Prompt\">\n <i class=\"fa-solid fa-gavel\"></i>\n {{ record.Judge || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.JudgeScore !== null) {\n <div class=\"detail-field\">\n <label>Judge Score</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-star\"></i>\n {{ record.JudgeScore }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Was Selected Result</label>\n <div class=\"detail-value\">\n <i [class]=\"record.WasSelectedResult ? 'fa-solid fa-trophy' : 'fa-solid fa-times'\"></i>\n {{ record.WasSelectedResult ? 'Yes' : 'No' }}\n </div>\n </div>\n \n <!-- Performance Metrics -->\n <div class=\"detail-field\">\n <label>Streaming Enabled</label>\n <div class=\"detail-value\">\n <i [class]=\"record.StreamingEnabled ? 'fa-solid fa-stream' : 'fa-solid fa-ban'\"></i>\n {{ record.StreamingEnabled ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.FirstTokenTime !== null) {\n <div class=\"detail-field\">\n <label>First Token Time</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ record.FirstTokenTime }} ms\n </div>\n </div>\n }\n \n @if (record.Cancelled) {\n <div class=\"detail-field\">\n <label>Cancelled</label>\n <div class=\"detail-value error\">\n <i class=\"fa-solid fa-ban\"></i>\n Yes\n </div>\n </div>\n \n @if (record.CancellationReason) {\n <div class=\"detail-field full-width\">\n <label>Cancellation Reason</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ record.CancellationReason }}\n </div>\n </div>\n }\n }\n </div>\n \n <!-- Model Selection JSON -->\n @if (record.ModelSelection) {\n <div class=\"model-selection-json\">\n <h4>Model Selection Details</h4>\n <div class=\"json-viewer-container\">\n <mj-code-editor \n [(ngModel)]=\"formattedModelSelection\"\n name=\"formattedModelSelection\"\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 \n <!-- Error Details JSON -->\n @if (record.ErrorDetails) {\n <div class=\"error-details-json\">\n <h4>Error Details</h4>\n <div class=\"json-viewer-container\">\n <mj-code-editor \n [(ngModel)]=\"formattedErrorDetails\"\n name=\"formattedErrorDetails\"\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 </div>\n </ng-template>\n </kendo-panelbar-item>\n \n </kendo-panelbar>\n </div>\n </form>\n }\n</div>", styles: ["/* Error Info Styles */\n.error-info {\n margin-top: 16px;\n padding: 16px;\n background-color: #fef3f3;\n border: 1px solid #fecaca;\n border-radius: 8px;\n}\n\n.finish-reason {\n margin: 0 0 12px 0;\n color: #dc2626;\n font-size: 14px;\n}\n\n.error-details {\n margin-top: 12px;\n}\n\n.error-details h4 {\n margin: 0 0 8px 0;\n color: #991b1b;\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint {\n margin: 0;\n color: #7f1d1d;\n font-size: 14px;\n font-style: italic;\n}\n\n/* 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.original-run {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #fff3cd;\n font-size: 0.85em;\n}\n\n.original-link {\n color: #ff6358;\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: #ff4444;\n text-decoration: underline;\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}"] }]
|
|
2179
|
+
args: [{ selector: 'mj-ai-prompt-run-form', changeDetection: ChangeDetectionStrategy.OnPush, 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 @if (record.RerunFromPromptRunID) {\n <span class=\"original-run\" title=\"View Original Run\">\n <i class=\"fa-solid fa-level-up-alt\"></i>\n <a (click)=\"navigateToOriginalRun()\" class=\"original-link\">Original Run</a>\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)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\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 @if (record.ConfigurationID) {\n <!-- Configuration Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-cog\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Configuration</div>\n <div class=\"metric-value\">\n <a href=\"javascript:void(0)\" class=\"config-link\" (click)=\"navigateToEntity('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n @if (record.Temperature !== null && record.Temperature !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Temperature</div>\n <div class=\"metric-value\">{{ record.Temperature }}</div>\n </div>\n </div>\n }\n @if (record.TopP !== null && record.TopP !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-percentage\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top P</div>\n <div class=\"metric-value\">{{ record.TopP }}</div>\n </div>\n </div>\n }\n @if (record.TopK !== null && record.TopK !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-list-ol\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top K</div>\n <div class=\"metric-value\">{{ record.TopK }}</div>\n </div>\n </div>\n }\n @if (record.ResponseFormat) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-code\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Response Format</div>\n <div class=\"metric-value\">{{ record.ResponseFormat }}</div>\n </div>\n </div>\n }\n </div>\n \n <!-- Execution Metrics Bar (always show when configuration exists) -->\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 } @else {\n <!-- Execution Metrics Bar (original behavior when no configuration) -->\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 }\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\">\n <kendo-panelbar [keepItemContent]=\"true\">\n \n <!-- Input Panel with nested sub-panels -->\n <kendo-panelbar-item [expanded]=\"inputExpanded\" (stateChange)=\"onInputPanelToggle($event)\">\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\" (stateChange)=\"onResultPanelToggle($event)\">\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 @if (record.Status === 'Failed' || record.Success === false) {\n <div class=\"error-info\">\n @if (record.Status) {\n <p class=\"finish-reason\">\n <strong>Status:</strong> {{ record.Status }}\n </p>\n }\n @if (formattedErrorDetails) {\n <div class=\"error-details\">\n <h4>Error Details</h4>\n <mj-code-editor\n [ngModel]=\"formattedErrorDetails\"\n [disabled]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (!formattedErrorDetails) {\n <p class=\"error-hint\">\n The prompt execution failed but no additional error information is available.\n </p>\n }\n </div>\n }\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Token Usage & Metrics Panel -->\n <kendo-panelbar-item [expanded]=\"metricsExpanded\" (stateChange)=\"onMetricsPanelToggle($event)\">\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 \n <!-- Timing Metrics -->\n @if (record.QueueTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-hourglass-start\"></i>\n <h4>Queue Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.QueueTime) }}</div>\n </div>\n }\n \n @if (record.PromptTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>Prompt Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.PromptTime) }}</div>\n </div>\n }\n \n @if (record.CompletionTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <h4>Completion Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.CompletionTime) }}</div>\n </div>\n }\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.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\" (stateChange)=\"onValidationPanelToggle($event)\">\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 \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 <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <kendo-panelbar-item [expanded]=\"modelSpecificExpanded\" (stateChange)=\"onModelSpecificPanelToggle($event)\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Specific Response Details\n <span class=\"panel-badge\">JSON</span>\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"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(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedModelSpecificResponseDetails\"\n name=\"formattedModelSpecificResponseDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n \n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <kendo-panelbar-item [expanded]=\"false\" (stateChange)=\"onModelSelectionPanelToggle($event)\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection & Performance\n @if (record.CacheHit) {\n <span class=\"panel-badge success\">Cached</span>\n }\n @if (record.WasSelectedResult) {\n <span class=\"panel-badge success\">Selected</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n <!-- Model Selection Details -->\n <div class=\"detail-field\">\n <label>Status</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ record.Status || 'Unknown' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Selection Strategy</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-strategy\"></i>\n {{ record.SelectionStrategy || '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Model Power Rank</label>\n <div class=\"detail-value\" [class.null-value]=\"record.ModelPowerRank === null\">\n <i class=\"fa-solid fa-ranking-star\"></i>\n {{ record.ModelPowerRank !== null ? record.ModelPowerRank : '\u2014' }}\n </div>\n </div>\n \n <!-- Cache Information -->\n <div class=\"detail-field\">\n <label>Cache Hit</label>\n <div class=\"detail-value\">\n <i [class]=\"record.CacheHit ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.CacheHit ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.CacheKey) {\n <div class=\"detail-field full-width\">\n <label>Cache Key</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-key\"></i>\n <code>{{ record.CacheKey }}</code>\n </div>\n </div>\n }\n \n <!-- Judge Information -->\n @if (record.JudgeID) {\n <div class=\"detail-field\">\n <label>Judge Prompt</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('AI Prompts', record.JudgeID)\" title=\"View Judge Prompt\">\n <i class=\"fa-solid fa-gavel\"></i>\n {{ record.Judge || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.JudgeScore !== null) {\n <div class=\"detail-field\">\n <label>Judge Score</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-star\"></i>\n {{ record.JudgeScore }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Was Selected Result</label>\n <div class=\"detail-value\">\n <i [class]=\"record.WasSelectedResult ? 'fa-solid fa-trophy' : 'fa-solid fa-times'\"></i>\n {{ record.WasSelectedResult ? 'Yes' : 'No' }}\n </div>\n </div>\n \n <!-- Performance Metrics -->\n <div class=\"detail-field\">\n <label>Streaming Enabled</label>\n <div class=\"detail-value\">\n <i [class]=\"record.StreamingEnabled ? 'fa-solid fa-stream' : 'fa-solid fa-ban'\"></i>\n {{ record.StreamingEnabled ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.FirstTokenTime !== null) {\n <div class=\"detail-field\">\n <label>First Token Time</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ record.FirstTokenTime }} ms\n </div>\n </div>\n }\n \n @if (record.Cancelled) {\n <div class=\"detail-field\">\n <label>Cancelled</label>\n <div class=\"detail-value error\">\n <i class=\"fa-solid fa-ban\"></i>\n Yes\n </div>\n </div>\n \n @if (record.CancellationReason) {\n <div class=\"detail-field full-width\">\n <label>Cancellation Reason</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ record.CancellationReason }}\n </div>\n </div>\n }\n }\n </div>\n \n <!-- Model Selection JSON -->\n @if (record.ModelSelection) {\n <div class=\"model-selection-json\">\n <h4>Model Selection Details</h4>\n <div class=\"json-viewer-container\">\n <mj-code-editor \n [(ngModel)]=\"formattedModelSelection\"\n name=\"formattedModelSelection\"\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 \n <!-- Error Details JSON -->\n @if (record.ErrorDetails) {\n <div class=\"error-details-json\">\n <h4>Error Details</h4>\n <div class=\"json-viewer-container\">\n <mj-code-editor \n [(ngModel)]=\"formattedErrorDetails\"\n name=\"formattedErrorDetails\"\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 </div>\n </ng-template>\n </kendo-panelbar-item>\n \n </kendo-panelbar>\n </div>\n </form>\n }\n</div>", styles: ["/* Error Info Styles */\n.error-info {\n margin-top: 16px;\n padding: 16px;\n background-color: #fef3f3;\n border: 1px solid #fecaca;\n border-radius: 8px;\n}\n\n.finish-reason {\n margin: 0 0 12px 0;\n color: #dc2626;\n font-size: 14px;\n}\n\n.error-details {\n margin-top: 12px;\n}\n\n.error-details h4 {\n margin: 0 0 8px 0;\n color: #991b1b;\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint {\n margin: 0;\n color: #7f1d1d;\n font-size: 14px;\n font-style: italic;\n}\n\n/* 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.original-run {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #fff3cd;\n font-size: 0.85em;\n}\n\n.original-link {\n color: #ff6358;\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: #ff4444;\n text-decoration: underline;\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.config-link {\n color: #007bff;\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link:hover {\n color: #0056b3;\n text-decoration: underline;\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 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}"] }]
|
|
1964
2180
|
}], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i3.TestHarnessWindowService }, { type: i0.ViewContainerRef }], null); })();
|
|
1965
2181
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIPromptRunFormComponentExtended, { className: "AIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 20 }); })();
|
|
1966
2182
|
//# sourceMappingURL=ai-prompt-run-form.component.js.map
|