@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.
@@ -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);
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", 38);
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", 39);
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", 40);
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", 41);
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", 42);
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", 43);
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", 44);
89
- i0.ɵɵelementStart(2, "a", 45);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_49_Template(rf, ctx) { if (rf & 1) {
95
- i0.ɵɵelementStart(0, "div", 24);
96
- i0.ɵɵelement(1, "i", 46);
97
- i0.ɵɵelementStart(2, "div", 26)(3, "div", 27);
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", 28);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_3_Template(rf, ctx) { if (rf & 1) {
110
- i0.ɵɵelementStart(0, "span", 48);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Template(rf, ctx) { if (rf & 1) {
115
- i0.ɵɵelementStart(0, "span", 47);
116
- i0.ɵɵelement(1, "i", 39);
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, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_3_Template, 2, 0, "span", 48);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
126
- i0.ɵɵelementStart(0, "span", 64);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
135
- i0.ɵɵelementStart(0, "span", 62);
136
- i0.ɵɵelement(1, "i", 63);
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, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_2_Conditional_3_Template, 2, 1, "span", 64);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
146
- i0.ɵɵelementStart(0, "div", 55);
147
- i0.ɵɵelement(1, "i", 65);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
153
- i0.ɵɵelement(0, "mj-chat-message-viewer", 56);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
159
- i0.ɵɵelementStart(0, "div", 51);
160
- i0.ɵɵelement(1, "i", 66);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
166
- i0.ɵɵelementStart(0, "span", 48);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_8_Template(rf, ctx) { if (rf & 1) {
171
- i0.ɵɵelementStart(0, "span", 62);
172
- i0.ɵɵelement(1, "i", 67);
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, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_8_Conditional_3_Template, 2, 0, "span", 48);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
182
- const _r8 = i0.ɵɵgetCurrentView();
183
- i0.ɵɵelementStart(0, "div", 57)(1, "div", 58)(2, "button", 59);
184
- i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_10_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedData, "Data")); });
185
- i0.ɵɵelement(3, "i", 60);
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", 68);
189
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_10_Template_mj_code_editor_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedData, $event) || (ctx_r1.formattedData = $event); return i0.ɵɵresetView($event); });
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
198
- i0.ɵɵelementStart(0, "div", 51);
199
- i0.ɵɵelement(1, "i", 67);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_13_Template(rf, ctx) { if (rf & 1) {
205
- i0.ɵɵelementStart(0, "span", 62);
206
- i0.ɵɵelement(1, "i", 69);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Template(rf, ctx) { if (rf & 1) {
211
- const _r7 = i0.ɵɵgetCurrentView();
212
- i0.ɵɵelementStart(0, "div", 50)(1, "kendo-expansionpanel", 52);
213
- i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_2_Template, 4, 1, "ng-template", 53);
214
- i0.ɵɵelementStart(3, "div", 54);
215
- i0.ɵɵtemplate(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_4_Template, 4, 0, "div", 55)(5, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 56)(6, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_6_Template, 4, 0, "div", 51);
216
- i0.ɵɵelementEnd()();
217
- i0.ɵɵelementStart(7, "kendo-expansionpanel", 52);
218
- i0.ɵɵtemplate(8, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_8_Template, 4, 1, "ng-template", 53);
219
- i0.ɵɵelementStart(9, "div", 54);
220
- i0.ɵɵtemplate(10, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_10_Template, 6, 4, "div", 57)(11, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_11_Template, 4, 0, "div", 51);
221
- i0.ɵɵelementEnd()();
222
- i0.ɵɵelementStart(12, "kendo-expansionpanel", 52);
223
- i0.ɵɵtemplate(13, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_13_Template, 3, 0, "ng-template", 53);
224
- i0.ɵɵelementStart(14, "div", 54)(15, "div", 57)(16, "div", 58)(17, "button", 59);
225
- i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
226
- i0.ɵɵelement(18, "i", 60);
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", 61);
230
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Template_mj_code_editor_ngModelChange_20_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedMessages, $event) || (ctx_r1.formattedMessages = $event); return i0.ɵɵresetView($event); });
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_2_Template(rf, ctx) { if (rf & 1) {
249
- i0.ɵɵelementStart(0, "div", 51);
250
- i0.ɵɵelement(1, "i", 66);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Template(rf, ctx) { if (rf & 1) {
256
- i0.ɵɵelementStart(0, "div", 49);
257
- i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Template, 21, 12, "div", 50)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_2_Template, 4, 0, "div", 51);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_3_Template(rf, ctx) { if (rf & 1) {
265
- i0.ɵɵelementStart(0, "span", 48);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_4_Template(rf, ctx) { if (rf & 1) {
270
- i0.ɵɵelementStart(0, "span", 71);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template(rf, ctx) { if (rf & 1) {
275
- i0.ɵɵelementStart(0, "span", 47);
276
- i0.ɵɵelement(1, "i", 70);
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, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_3_Template, 2, 0, "span", 48)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_4_Template, 2, 0, "span", 71);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_1_Template(rf, ctx) { if (rf & 1) {
288
- i0.ɵɵelementStart(0, "div", 72);
289
- i0.ɵɵelement(1, "i", 73);
290
- i0.ɵɵelementStart(2, "div", 74)(3, "h4");
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_2_Template(rf, ctx) { if (rf & 1) {
302
- const _r9 = i0.ɵɵgetCurrentView();
303
- i0.ɵɵelementStart(0, "div", 57)(1, "div", 58)(2, "button", 59);
304
- i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_2_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedResult, "Result")); });
305
- i0.ɵɵelement(3, "i", 60);
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", 75);
309
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_2_Template_mj_code_editor_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedResult, $event) || (ctx_r1.formattedResult = $event); return i0.ɵɵresetView($event); });
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
318
- i0.ɵɵelementStart(0, "p", 78)(1, "strong");
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
329
- i0.ɵɵelementStart(0, "div", 79)(1, "h4");
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", 81);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
340
- i0.ɵɵelementStart(0, "p", 80);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
345
- i0.ɵɵelementStart(0, "div", 77);
346
- i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Conditional_4_Conditional_1_Template, 4, 1, "p", 78)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Conditional_4_Conditional_2_Template, 4, 4, "div", 79)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Conditional_4_Conditional_3_Template, 2, 0, "p", 80);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Template(rf, ctx) { if (rf & 1) {
358
- i0.ɵɵelementStart(0, "div", 51);
359
- i0.ɵɵelement(1, "i", 76);
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, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Conditional_4_Template, 4, 3, "div", 77);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Template(rf, ctx) { if (rf & 1) {
371
- i0.ɵɵelementStart(0, "div", 49);
372
- i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_1_Template, 7, 1, "div", 72)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_2_Template, 6, 4, "div", 57)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Template, 5, 1, "div", 51);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Template(rf, ctx) { if (rf & 1) {
382
- i0.ɵɵelementStart(0, "span", 47);
383
- i0.ɵɵelement(1, "i", 82);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_9_Template(rf, ctx) { if (rf & 1) {
388
- i0.ɵɵelementStart(0, "div", 88)(1, "span");
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_17_Template(rf, ctx) { if (rf & 1) {
397
- i0.ɵɵelementStart(0, "div", 88)(1, "span");
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_25_Template(rf, ctx) { if (rf & 1) {
406
- i0.ɵɵelementStart(0, "div", 88)(1, "span");
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_33_Template(rf, ctx) { if (rf & 1) {
415
- i0.ɵɵelementStart(0, "div", 88)(1, "span");
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_34_Template(rf, ctx) { if (rf & 1) {
424
- i0.ɵɵelementStart(0, "div", 90);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_35_Template(rf, ctx) { if (rf & 1) {
433
- i0.ɵɵelementStart(0, "div", 84)(1, "div", 85);
434
- i0.ɵɵelement(2, "i", 93);
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", 87);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_36_Template(rf, ctx) { if (rf & 1) {
447
- i0.ɵɵelementStart(0, "div", 84)(1, "div", 85);
448
- i0.ɵɵelement(2, "i", 94);
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", 87);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_37_Template(rf, ctx) { if (rf & 1) {
461
- i0.ɵɵelementStart(0, "div", 84)(1, "div", 85);
462
- i0.ɵɵelement(2, "i", 95);
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", 87);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_39_Template(rf, ctx) { if (rf & 1) {
475
- i0.ɵɵelementStart(0, "div", 92)(1, "span", 27);
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", 28);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_40_Template(rf, ctx) { if (rf & 1) {
487
- i0.ɵɵelementStart(0, "div", 92)(1, "span", 27);
488
- i0.ɵɵtext(2, "Configuration:");
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", 96);
504
- i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_41_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Agents", ctx_r1.record.AgentID)); });
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", 97);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Template(rf, ctx) { if (rf & 1) {
514
- i0.ɵɵelementStart(0, "div", 49)(1, "div", 83)(2, "div", 84)(3, "div", 85);
515
- i0.ɵɵelement(4, "i", 86);
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", 87);
676
+ i0.ɵɵelementStart(7, "div", 92);
520
677
  i0.ɵɵtext(8);
521
678
  i0.ɵɵelementEnd();
522
- i0.ɵɵtemplate(9, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_9_Template, 3, 1, "div", 88);
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", 84)(11, "div", 85);
525
- i0.ɵɵelement(12, "i", 89);
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", 87);
686
+ i0.ɵɵelementStart(15, "div", 92);
530
687
  i0.ɵɵtext(16);
531
688
  i0.ɵɵelementEnd();
532
- i0.ɵɵtemplate(17, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_17_Template, 3, 1, "div", 88);
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", 84)(19, "div", 85);
535
- i0.ɵɵelement(20, "i", 29);
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", 87);
696
+ i0.ɵɵelementStart(23, "div", 92);
540
697
  i0.ɵɵtext(24);
541
698
  i0.ɵɵelementEnd();
542
- i0.ɵɵtemplate(25, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_25_Template, 3, 1, "div", 88);
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", 84)(27, "div", 85);
545
- i0.ɵɵelement(28, "i", 30);
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", 87);
706
+ i0.ɵɵelementStart(31, "div", 92);
550
707
  i0.ɵɵtext(32);
551
708
  i0.ɵɵelementEnd();
552
- i0.ɵɵtemplate(33, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_33_Template, 3, 1, "div", 88)(34, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_34_Template, 2, 1, "div", 90);
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, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_35_Template, 7, 1, "div", 84)(36, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_36_Template, 7, 1, "div", 84)(37, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_37_Template, 7, 1, "div", 84);
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", 91);
557
- i0.ɵɵtemplate(39, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_39_Template, 5, 1, "div", 92)(40, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_40_Template, 5, 1, "div", 92)(41, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_41_Template, 6, 1, "div", 92);
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.ConfigurationID ? 40 : -1);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
593
- i0.ɵɵelementStart(0, "span", 64);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
602
- i0.ɵɵelementStart(0, "span", 99);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
607
- i0.ɵɵelementStart(0, "span", 71);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Template(rf, ctx) { if (rf & 1) {
612
- i0.ɵɵelementStart(0, "span", 47);
613
- i0.ɵɵelement(1, "i", 98);
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, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_3_Template, 2, 1, "span", 64)(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_4_Template, 2, 0, "span", 99)(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_5_Template, 2, 0, "span", 71);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Conditional_6_Template(rf, ctx) { if (rf & 1) {
625
- i0.ɵɵelementStart(0, "span", 110);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
634
- i0.ɵɵelementStart(0, "div", 105)(1, "h5");
635
- i0.ɵɵelement(2, "i", 73);
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, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Conditional_6_Template, 2, 1, "span", 110);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_30_Template(rf, ctx) { if (rf & 1) {
651
- i0.ɵɵelementStart(0, "div", 106)(1, "h5");
652
- i0.ɵɵelement(2, "i", 111);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
664
- i0.ɵɵelementStart(0, "div", 107)(1, "h4");
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", 112)(4, "div", 113);
668
- i0.ɵɵelement(5, "i", 25);
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", 113);
674
- i0.ɵɵelement(10, "i", 95);
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", 113);
680
- i0.ɵɵelement(15, "i", 114);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
694
- i0.ɵɵelementStart(0, "span", 110);
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 attempt_r11 = i0.ɵɵnextContext(2).$implicit;
853
+ const attempt_r13 = i0.ɵɵnextContext(2).$implicit;
699
854
  i0.ɵɵadvance();
700
- i0.ɵɵtextInterpolate1("(", attempt_r11.validationErrorCount, " errors)");
855
+ i0.ɵɵtextInterpolate1("(", attempt_r13.validationErrorCount, " errors)");
701
856
  } }
702
- function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
703
- i0.ɵɵelementStart(0, "span", 122);
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, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 110);
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 attempt_r11 = i0.ɵɵnextContext().$implicit;
863
+ const attempt_r13 = i0.ɵɵnextContext().$implicit;
709
864
  i0.ɵɵadvance();
710
- i0.ɵɵtextInterpolate(attempt_r11.errorMessage || "Unknown error");
865
+ i0.ɵɵtextInterpolate(attempt_r13.errorMessage || "Unknown error");
711
866
  i0.ɵɵadvance();
712
- i0.ɵɵconditional(attempt_r11.validationErrorCount > 0 ? 2 : -1);
867
+ i0.ɵɵconditional(attempt_r13.validationErrorCount > 0 ? 2 : -1);
713
868
  } }
714
- function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
715
- i0.ɵɵelementStart(0, "span", 121);
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 attempt_r11 = i0.ɵɵnextContext().$implicit;
874
+ const attempt_r13 = i0.ɵɵnextContext().$implicit;
720
875
  i0.ɵɵadvance();
721
- i0.ɵɵtextInterpolate1("Output: ", attempt_r11.outputLength, " chars");
876
+ i0.ɵɵtextInterpolate1("Output: ", attempt_r13.outputLength, " chars");
722
877
  } }
723
- function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Template(rf, ctx) { if (rf & 1) {
724
- i0.ɵɵelementStart(0, "div", 117)(1, "div", 118);
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", 119)(5, "span", 120);
883
+ i0.ɵɵelementStart(4, "div", 124)(5, "span", 125);
729
884
  i0.ɵɵtext(6);
730
885
  i0.ɵɵelementEnd();
731
- i0.ɵɵtemplate(7, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_7_Template, 3, 2)(8, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_8_Template, 2, 1, "span", 121);
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 attempt_r11 = ctx.$implicit;
735
- i0.ɵɵclassProp("success", attempt_r11.success)("failed", !attempt_r11.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(attempt_r11.success ? "fa-solid fa-check" : "fa-solid fa-times");
892
+ i0.ɵɵclassMap(attempt_r13.success ? "fa-solid fa-check" : "fa-solid fa-times");
738
893
  i0.ɵɵadvance();
739
- i0.ɵɵtextInterpolate1(" Attempt #", attempt_r11.attemptNumber, " ");
894
+ i0.ɵɵtextInterpolate1(" Attempt #", attempt_r13.attemptNumber, " ");
740
895
  i0.ɵɵadvance(3);
741
- i0.ɵɵtextInterpolate(attempt_r11.timestamp);
896
+ i0.ɵɵtextInterpolate(attempt_r13.timestamp);
742
897
  i0.ɵɵadvance();
743
- i0.ɵɵconditional(!attempt_r11.success ? 7 : -1);
898
+ i0.ɵɵconditional(!attempt_r13.success ? 7 : -1);
744
899
  i0.ɵɵadvance();
745
- i0.ɵɵconditional(attempt_r11.outputLength ? 8 : -1);
900
+ i0.ɵɵconditional(attempt_r13.outputLength ? 8 : -1);
746
901
  } }
747
- function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
748
- i0.ɵɵelementStart(0, "div", 108)(1, "h4");
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", 115);
752
- i0.ɵɵrepeaterCreate(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Template, 9, 10, "div", 116, _forTrack0);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_33_Template(rf, ctx) { if (rf & 1) {
760
- const _r12 = i0.ɵɵgetCurrentView();
761
- i0.ɵɵelementStart(0, "div", 109)(1, "h4");
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", 123)(4, "mj-code-editor", 124);
765
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_33_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationSummary, $event) || (ctx_r1.formattedValidationSummary = $event); return i0.ɵɵresetView($event); });
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_34_Template(rf, ctx) { if (rf & 1) {
774
- const _r13 = i0.ɵɵgetCurrentView();
775
- i0.ɵɵelementStart(0, "div", 109)(1, "h4");
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", 123)(4, "mj-code-editor", 125);
779
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_34_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationAttempts, $event) || (ctx_r1.formattedValidationAttempts = $event); return i0.ɵɵresetView($event); });
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Template(rf, ctx) { if (rf & 1) {
788
- i0.ɵɵelementStart(0, "div", 49)(1, "div", 100)(2, "div", 101)(3, "h4");
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", 102);
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", 103)(9, "div", 104)(10, "div", 27);
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", 28);
953
+ i0.ɵɵelementStart(12, "div", 43);
799
954
  i0.ɵɵtext(13);
800
955
  i0.ɵɵelementEnd()();
801
- i0.ɵɵelementStart(14, "div", 104)(15, "div", 27);
956
+ i0.ɵɵelementStart(14, "div", 109)(15, "div", 42);
802
957
  i0.ɵɵtext(16, "Successful");
803
958
  i0.ɵɵelementEnd();
804
- i0.ɵɵelementStart(17, "div", 28);
959
+ i0.ɵɵelementStart(17, "div", 43);
805
960
  i0.ɵɵtext(18);
806
961
  i0.ɵɵelementEnd()();
807
- i0.ɵɵelementStart(19, "div", 104)(20, "div", 27);
962
+ i0.ɵɵelementStart(19, "div", 109)(20, "div", 42);
808
963
  i0.ɵɵtext(21, "Behavior");
809
964
  i0.ɵɵelementEnd();
810
- i0.ɵɵelementStart(22, "div", 28);
965
+ i0.ɵɵelementStart(22, "div", 43);
811
966
  i0.ɵɵtext(23);
812
967
  i0.ɵɵelementEnd()();
813
- i0.ɵɵelementStart(24, "div", 104)(25, "div", 27);
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", 28);
971
+ i0.ɵɵelementStart(27, "div", 43);
817
972
  i0.ɵɵtext(28);
818
973
  i0.ɵɵelementEnd()()();
819
- i0.ɵɵtemplate(29, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Template, 7, 2, "div", 105)(30, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_30_Template, 6, 1, "div", 106);
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, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_31_Template, 18, 9, "div", 107)(32, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_Template, 6, 0, "div", 108)(33, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_33_Template, 5, 4, "div", 109)(34, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_34_Template, 5, 4, "div", 109);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_Template(rf, ctx) { if (rf & 1) {
853
- i0.ɵɵelementStart(0, "kendo-panelbar-item", 36);
854
- i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Template, 6, 2, "ng-template", 34)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Template, 35, 17, "ng-template", 35);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
861
- i0.ɵɵelementStart(0, "span", 64);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Template(rf, ctx) { if (rf & 1) {
870
- i0.ɵɵelementStart(0, "span", 47);
871
- i0.ɵɵelement(1, "i", 126);
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, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Conditional_3_Template, 2, 1, "span", 64);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
881
- const _r14 = i0.ɵɵgetCurrentView();
882
- i0.ɵɵelementStart(0, "div", 127)(1, "h4");
883
- i0.ɵɵelement(2, "i", 44);
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", 129);
887
- i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_1_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
888
- i0.ɵɵelementStart(5, "div", 130);
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", 131)(8, "div", 132);
1048
+ i0.ɵɵelementStart(7, "div", 136)(8, "div", 137);
892
1049
  i0.ɵɵtext(9);
893
- i0.ɵɵelementStart(10, "span", 133);
1050
+ i0.ɵɵelementStart(10, "span", 138);
894
1051
  i0.ɵɵtext(11);
895
1052
  i0.ɵɵelementEnd()();
896
- i0.ɵɵelementStart(12, "div", 134)(13, "span");
897
- i0.ɵɵelement(14, "i", 25);
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", 29);
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", 46);
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", 97);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
929
- i0.ɵɵelementStart(0, "span", 139);
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 childRun_r16 = i0.ɵɵnextContext().$implicit;
1090
+ const childRun_r18 = i0.ɵɵnextContext().$implicit;
934
1091
  i0.ɵɵadvance();
935
- i0.ɵɵtextInterpolate1("#", childRun_r16.ExecutionOrder, "");
1092
+ i0.ɵɵtextInterpolate1("#", childRun_r18.ExecutionOrder, "");
936
1093
  } }
937
- function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
938
- const _r15 = i0.ɵɵgetCurrentView();
939
- i0.ɵɵelementStart(0, "div", 138);
940
- i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Template_div_click_0_listener() { const childRun_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r16.ID)); });
941
- i0.ɵɵelementStart(1, "div", 130);
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", 131)(4, "div", 132);
1101
+ i0.ɵɵelementStart(3, "div", 136)(4, "div", 137);
945
1102
  i0.ɵɵtext(5);
946
- i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Conditional_6_Template, 2, 1, "span", 139);
947
- i0.ɵɵelementStart(7, "span", 133);
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", 134)(10, "span", 140);
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", 25);
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", 29);
1116
+ i0.ɵɵelement(17, "i", 46);
960
1117
  i0.ɵɵtext(18);
961
1118
  i0.ɵɵelementEnd()()();
962
- i0.ɵɵelement(19, "i", 97);
1119
+ i0.ɵɵelement(19, "i", 102);
963
1120
  i0.ɵɵelementEnd();
964
1121
  } if (rf & 2) {
965
- const childRun_r16 = ctx.$implicit;
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(childRun_r16.RunType));
1127
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getRunTypeIcon(childRun_r18.RunType));
971
1128
  i0.ɵɵadvance(3);
972
- i0.ɵɵtextInterpolate1(" Child Run #", childRun_r16.ID.substring(0, 8), " ");
1129
+ i0.ɵɵtextInterpolate1(" Child Run #", childRun_r18.ID.substring(0, 8), " ");
973
1130
  i0.ɵɵadvance();
974
- i0.ɵɵconditional(childRun_r16.ExecutionOrder !== null ? 6 : -1);
1131
+ i0.ɵɵconditional(childRun_r18.ExecutionOrder !== null ? 6 : -1);
975
1132
  i0.ɵɵadvance(2);
976
- i0.ɵɵtextInterpolate(childRun_r16.RunType);
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(" ", childRun_r16.Success ? "Success" : childRun_r16.ErrorMessage ? "Failed" : "Running", " ");
1139
+ i0.ɵɵtextInterpolate1(" ", childRun_r18.Success ? "Success" : childRun_r18.ErrorMessage ? "Failed" : "Running", " ");
983
1140
  i0.ɵɵadvance(3);
984
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(childRun_r16.ExecutionTimeMS), "");
1141
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatDuration(childRun_r18.ExecutionTimeMS), "");
985
1142
  i0.ɵɵadvance(3);
986
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r16.TokensUsed), "");
1143
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r18.TokensUsed), "");
987
1144
  } }
988
- function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
989
- i0.ɵɵelementStart(0, "div", 128)(1, "h4");
990
- i0.ɵɵelement(2, "i", 135);
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", 136);
994
- i0.ɵɵrepeaterCreate(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Template, 20, 14, "div", 137, _forTrack1);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Template(rf, ctx) { if (rf & 1) {
1002
- i0.ɵɵelementStart(0, "div", 49);
1003
- i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_1_Template, 24, 12, "div", 127)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_Template, 7, 0, "div", 128);
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_Template(rf, ctx) { if (rf & 1) {
1013
- i0.ɵɵelementStart(0, "kendo-panelbar-item", 36);
1014
- i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Template, 4, 1, "ng-template", 34)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Template, 3, 2, "ng-template", 35);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_64_Template(rf, ctx) { if (rf & 1) {
1021
- i0.ɵɵelementStart(0, "span", 47);
1022
- i0.ɵɵelement(1, "i", 141);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1027
- const _r17 = i0.ɵɵgetCurrentView();
1028
- i0.ɵɵelementStart(0, "div", 143)(1, "label");
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", 151);
1032
- i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_2_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Agents", ctx_r1.record.AgentID)); });
1033
- i0.ɵɵelement(4, "i", 152);
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", 97);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1043
- i0.ɵɵelementStart(0, "div", 143)(1, "label");
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", 144);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1071
- i0.ɵɵelementStart(0, "div", 143)(1, "label");
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", 144);
1075
- i0.ɵɵelement(4, "i", 69);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_48_Template(rf, ctx) { if (rf & 1) {
1084
- i0.ɵɵelementStart(0, "div", 143)(1, "label");
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", 144);
1088
- i0.ɵɵelement(4, "i", 25);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_49_Template(rf, ctx) { if (rf & 1) {
1098
- i0.ɵɵelementStart(0, "div", 143)(1, "label");
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", 144);
1102
- i0.ɵɵelement(4, "i", 154);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Template(rf, ctx) { if (rf & 1) {
1112
- i0.ɵɵelementStart(0, "div", 49)(1, "div", 142);
1113
- i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_2_Template, 7, 1, "div", 143)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_3_Template, 6, 1, "div", 143)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_4_Template, 6, 3, "div", 143)(5, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_5_Template, 6, 1, "div", 143);
1114
- i0.ɵɵelementStart(6, "div", 143)(7, "label");
1115
- i0.ɵɵtext(8, "Temperature");
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(9, "div", 144);
1118
- i0.ɵɵelement(10, "i", 145);
1119
- i0.ɵɵtext(11);
1261
+ i0.ɵɵelementStart(8, "div", 149);
1262
+ i0.ɵɵelement(9, "i", 48);
1263
+ i0.ɵɵtext(10);
1120
1264
  i0.ɵɵelementEnd()();
1121
- i0.ɵɵelementStart(12, "div", 143)(13, "label");
1122
- i0.ɵɵtext(14, "Top P");
1265
+ i0.ɵɵelementStart(11, "div", 148)(12, "label");
1266
+ i0.ɵɵtext(13, "Top P");
1123
1267
  i0.ɵɵelementEnd();
1124
- i0.ɵɵelementStart(15, "div", 144);
1125
- i0.ɵɵelement(16, "i", 146);
1126
- i0.ɵɵtext(17);
1268
+ i0.ɵɵelementStart(14, "div", 149);
1269
+ i0.ɵɵelement(15, "i", 49);
1270
+ i0.ɵɵtext(16);
1127
1271
  i0.ɵɵelementEnd()();
1128
- i0.ɵɵelementStart(18, "div", 143)(19, "label");
1129
- i0.ɵɵtext(20, "Top K");
1272
+ i0.ɵɵelementStart(17, "div", 148)(18, "label");
1273
+ i0.ɵɵtext(19, "Top K");
1130
1274
  i0.ɵɵelementEnd();
1131
- i0.ɵɵelementStart(21, "div", 144);
1132
- i0.ɵɵelement(22, "i", 147);
1133
- i0.ɵɵtext(23);
1275
+ i0.ɵɵelementStart(20, "div", 149);
1276
+ i0.ɵɵelement(21, "i", 50);
1277
+ i0.ɵɵtext(22);
1134
1278
  i0.ɵɵelementEnd()();
1135
- i0.ɵɵelementStart(24, "div", 143)(25, "label");
1136
- i0.ɵɵtext(26, "Min P");
1279
+ i0.ɵɵelementStart(23, "div", 148)(24, "label");
1280
+ i0.ɵɵtext(25, "Min P");
1137
1281
  i0.ɵɵelementEnd();
1138
- i0.ɵɵelementStart(27, "div", 144);
1139
- i0.ɵɵelement(28, "i", 148);
1140
- i0.ɵɵtext(29);
1282
+ i0.ɵɵelementStart(26, "div", 149);
1283
+ i0.ɵɵelement(27, "i", 150);
1284
+ i0.ɵɵtext(28);
1141
1285
  i0.ɵɵelementEnd()();
1142
- i0.ɵɵelementStart(30, "div", 143)(31, "label");
1143
- i0.ɵɵtext(32, "Frequency Penalty");
1286
+ i0.ɵɵelementStart(29, "div", 148)(30, "label");
1287
+ i0.ɵɵtext(31, "Frequency Penalty");
1144
1288
  i0.ɵɵelementEnd();
1145
- i0.ɵɵelementStart(33, "div", 144);
1146
- i0.ɵɵelement(34, "i", 111);
1147
- i0.ɵɵtext(35);
1289
+ i0.ɵɵelementStart(32, "div", 149);
1290
+ i0.ɵɵelement(33, "i", 116);
1291
+ i0.ɵɵtext(34);
1148
1292
  i0.ɵɵelementEnd()();
1149
- i0.ɵɵelementStart(36, "div", 143)(37, "label");
1150
- i0.ɵɵtext(38, "Presence Penalty");
1293
+ i0.ɵɵelementStart(35, "div", 148)(36, "label");
1294
+ i0.ɵɵtext(37, "Presence Penalty");
1151
1295
  i0.ɵɵelementEnd();
1152
- i0.ɵɵelementStart(39, "div", 144);
1153
- i0.ɵɵelement(40, "i", 149);
1154
- i0.ɵɵtext(41);
1296
+ i0.ɵɵelementStart(38, "div", 149);
1297
+ i0.ɵɵelement(39, "i", 151);
1298
+ i0.ɵɵtext(40);
1155
1299
  i0.ɵɵelementEnd()();
1156
- i0.ɵɵelementStart(42, "div", 143)(43, "label");
1157
- i0.ɵɵtext(44, "Seed");
1300
+ i0.ɵɵelementStart(41, "div", 148)(42, "label");
1301
+ i0.ɵɵtext(43, "Seed");
1158
1302
  i0.ɵɵelementEnd();
1159
- i0.ɵɵelementStart(45, "div", 144);
1160
- i0.ɵɵelement(46, "i", 150);
1161
- i0.ɵɵtext(47);
1303
+ i0.ɵɵelementStart(44, "div", 149);
1304
+ i0.ɵɵelement(45, "i", 152);
1305
+ i0.ɵɵtext(46);
1162
1306
  i0.ɵɵelementEnd()();
1163
- i0.ɵɵtemplate(48, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_48_Template, 7, 4, "div", 143)(49, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_49_Template, 7, 4, "div", 143);
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.ConfigurationID ? 3 : -1);
1314
+ i0.ɵɵconditional(ctx_r1.record.RunType ? 3 : -1);
1171
1315
  i0.ɵɵadvance();
1172
- i0.ɵɵconditional(ctx_r1.record.RunType ? 4 : -1);
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 ? 48 : -1);
1346
+ i0.ɵɵconditional(ctx_r1.record.RunAt ? 47 : -1);
1205
1347
  i0.ɵɵadvance();
1206
- i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 49 : -1);
1348
+ i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 48 : -1);
1207
1349
  } }
1208
- function AIPromptRunFormComponentExtended_Conditional_1_Conditional_66_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1209
- i0.ɵɵelementStart(0, "span", 47);
1210
- i0.ɵɵelement(1, "i", 41);
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", 48);
1354
+ i0.ɵɵelementStart(3, "span", 54);
1213
1355
  i0.ɵɵtext(4, "JSON");
1214
1356
  i0.ɵɵelementEnd()();
1215
1357
  } }
1216
- function AIPromptRunFormComponentExtended_Conditional_1_Conditional_66_ng_template_2_Template(rf, ctx) { if (rf & 1) {
1217
- const _r18 = i0.ɵɵgetCurrentView();
1218
- i0.ɵɵelementStart(0, "div", 49)(1, "div", 57)(2, "div", 58)(3, "button", 59);
1219
- i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_66_ng_template_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedModelSpecificResponseDetails, "Model Specific Response Details")); });
1220
- i0.ɵɵelement(4, "i", 60);
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", 155);
1224
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_66_ng_template_2_Template_mj_code_editor_ngModelChange_6_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSpecificResponseDetails, $event) || (ctx_r1.formattedModelSpecificResponseDetails = $event); return i0.ɵɵresetView($event); });
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 AIPromptRunFormComponentExtended_Conditional_1_Conditional_66_Template(rf, ctx) { if (rf & 1) {
1233
- i0.ɵɵelementStart(0, "kendo-panelbar-item", 36);
1234
- i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_66_ng_template_1_Template, 5, 0, "ng-template", 34)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_66_ng_template_2_Template, 7, 4, "ng-template", 35);
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.ɵɵproperty("expanded", false);
1381
+ const ctx_r1 = i0.ɵɵnextContext(2);
1382
+ i0.ɵɵproperty("expanded", ctx_r1.modelSpecificExpanded);
1238
1383
  } }
1239
- function AIPromptRunFormComponentExtended_Conditional_1_ng_template_68_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1240
- i0.ɵɵelementStart(0, "span", 99);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_68_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1245
- i0.ɵɵelementStart(0, "span", 99);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_68_Template(rf, ctx) { if (rf & 1) {
1250
- i0.ɵɵelementStart(0, "span", 47);
1251
- i0.ɵɵelement(1, "i", 41);
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, AIPromptRunFormComponentExtended_Conditional_1_ng_template_68_Conditional_3_Template, 2, 0, "span", 99)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_68_Conditional_4_Template, 2, 0, "span", 99);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_26_Template(rf, ctx) { if (rf & 1) {
1263
- i0.ɵɵelementStart(0, "div", 158)(1, "label");
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", 144);
1267
- i0.ɵɵelement(4, "i", 161);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_27_Template(rf, ctx) { if (rf & 1) {
1277
- const _r19 = i0.ɵɵgetCurrentView();
1278
- i0.ɵɵelementStart(0, "div", 143)(1, "label");
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", 162);
1282
- i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_27_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Prompts", ctx_r1.record.JudgeID)); });
1283
- i0.ɵɵelement(4, "i", 163);
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", 97);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_28_Template(rf, ctx) { if (rf & 1) {
1293
- i0.ɵɵelementStart(0, "div", 143)(1, "label");
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", 144);
1297
- i0.ɵɵelement(4, "i", 164);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_41_Template(rf, ctx) { if (rf & 1) {
1306
- i0.ɵɵelementStart(0, "div", 143)(1, "label");
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", 144);
1310
- i0.ɵɵelement(4, "i", 165);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_42_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1319
- i0.ɵɵelementStart(0, "div", 158)(1, "label");
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", 144);
1323
- i0.ɵɵelement(4, "i", 168);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_42_Template(rf, ctx) { if (rf & 1) {
1332
- i0.ɵɵelementStart(0, "div", 143)(1, "label");
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", 166);
1336
- i0.ɵɵelement(4, "i", 167);
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, AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_42_Conditional_6_Template, 6, 1, "div", 158);
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_43_Template(rf, ctx) { if (rf & 1) {
1346
- const _r20 = i0.ɵɵgetCurrentView();
1347
- i0.ɵɵelementStart(0, "div", 159)(1, "h4");
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", 123)(4, "mj-code-editor", 169);
1351
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_43_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSelection, $event) || (ctx_r1.formattedModelSelection = $event); return i0.ɵɵresetView($event); });
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_44_Template(rf, ctx) { if (rf & 1) {
1360
- const _r21 = i0.ɵɵgetCurrentView();
1361
- i0.ɵɵelementStart(0, "div", 160)(1, "h4");
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", 123)(4, "mj-code-editor", 170);
1365
- i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_44_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedErrorDetails, $event) || (ctx_r1.formattedErrorDetails = $event); return i0.ɵɵresetView($event); });
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 AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Template(rf, ctx) { if (rf & 1) {
1374
- i0.ɵɵelementStart(0, "div", 49)(1, "div", 142)(2, "div", 143)(3, "label");
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", 144);
1378
- i0.ɵɵelement(6, "i", 141);
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", 143)(9, "label");
1526
+ i0.ɵɵelementStart(8, "div", 148)(9, "label");
1382
1527
  i0.ɵɵtext(10, "Selection Strategy");
1383
1528
  i0.ɵɵelementEnd();
1384
- i0.ɵɵelementStart(11, "div", 144);
1385
- i0.ɵɵelement(12, "i", 156);
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", 143)(15, "label");
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", 144);
1392
- i0.ɵɵelement(18, "i", 157);
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", 143)(21, "label");
1540
+ i0.ɵɵelementStart(20, "div", 148)(21, "label");
1396
1541
  i0.ɵɵtext(22, "Cache Hit");
1397
1542
  i0.ɵɵelementEnd();
1398
- i0.ɵɵelementStart(23, "div", 144);
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, AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_26_Template, 7, 1, "div", 158)(27, AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_27_Template, 7, 1, "div", 143)(28, AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_28_Template, 6, 1, "div", 143);
1403
- i0.ɵɵelementStart(29, "div", 143)(30, "label");
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", 144);
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", 143)(36, "label");
1555
+ i0.ɵɵelementStart(35, "div", 148)(36, "label");
1411
1556
  i0.ɵɵtext(37, "Streaming Enabled");
1412
1557
  i0.ɵɵelementEnd();
1413
- i0.ɵɵelementStart(38, "div", 144);
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, AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_41_Template, 6, 1, "div", 143)(42, AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_42_Template, 7, 1);
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, AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_43_Template, 5, 4, "div", 159)(44, AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Conditional_44_Template, 5, 4, "div", 160);
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.ɵɵelementStart(27, "div", 23)(28, "div", 24);
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(33, "div", 28);
1490
- i0.ɵɵtext(34);
1491
- i0.ɵɵelementEnd()()();
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(40, "div", 28);
1498
- i0.ɵɵtext(41);
1499
- i0.ɵɵelementEnd()()();
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(47, "div", 28);
1506
- i0.ɵɵtext(48);
1507
- i0.ɵɵelementEnd()()();
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(61, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_Template, 3, 1, "kendo-panelbar-item", 36)(62, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_Template, 3, 1, "kendo-panelbar-item", 36);
1521
- i0.ɵɵelementStart(63, "kendo-panelbar-item", 36);
1522
- i0.ɵɵtemplate(64, AIPromptRunFormComponentExtended_Conditional_1_ng_template_64_Template, 3, 0, "ng-template", 34)(65, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Template, 50, 27, "ng-template", 35);
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(66, AIPromptRunFormComponentExtended_Conditional_1_Conditional_66_Template, 3, 1, "kendo-panelbar-item", 36);
1525
- i0.ɵɵelementStart(67, "kendo-panelbar-item", 36);
1526
- i0.ɵɵtemplate(68, AIPromptRunFormComponentExtended_Conditional_1_ng_template_68_Template, 5, 2, "ng-template", 34)(69, AIPromptRunFormComponentExtended_Conditional_1_ng_template_69_Template, 45, 21, "ng-template", 35);
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.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
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) ? 61 : -1);
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 ? 62 : -1);
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 ? 66 : -1);
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 = true; // Add loading state for message parsing
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 = true;
1718
+ this.resultExpanded = false; // Start closed for lazy loading
1601
1719
  this.metricsExpanded = false;
1602
1720
  this.hierarchyExpanded = false;
1603
- this.validationExpanded = true; // Expand validation panel by default if there are retries
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
- this.formatJsonFields();
1625
- this.loadValidationData();
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
- // Force change detection when parent panel is toggled
1641
- // This helps ensure nested expansion panels render correctly
1642
- setTimeout(() => {
1643
- this.cdr.detectChanges();
1644
- }, 100);
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
- formatJsonFields() {
1696
- this.isParsingMessages = true; // Start parsing
1697
- // Use the extended entity methods to parse messages
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.isParsingMessages = false; // Done parsing
1704
- // Format result using extended entity method
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
- // Format v2.78 JSON fields
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
- // Format ModelSpecificResponseDetails
1735
- if (this.record.ModelSpecificResponseDetails) {
1736
- try {
1737
- const modelDetails = JSON.parse(this.record.ModelSpecificResponseDetails);
1738
- const parsed = ParseJSONRecursive(modelDetails, parseOptions);
1739
- this.formattedModelSpecificResponseDetails = JSON.stringify(parsed, null, 2);
1740
- }
1741
- catch (error) {
1742
- this.formattedModelSpecificResponseDetails = this.record.ModelSpecificResponseDetails;
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.formatJsonFields();
1901
- this.loadValidationData();
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
- // Set validation panel expansion based on whether there were retries
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, "metric-item"], [1, "fa-solid", "fa-clock"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], [1, "fa-solid", "fa-coins"], [1, "fa-solid", "fa-dollar-sign"], [1, "form-content"], [3, "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, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "panel-badge"], [1, "panel-content"], [1, "nested-panels"], [1, "empty-state"], [1, "sub-expansion-panel", 3, "expanded", "animation"], ["kendoExpansionPanelTitleDirective", ""], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], [1, "json-editor-container"], [1, "json-toolbar"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "sub-panel-title"], [1, "fa-solid", "fa-comments"], [1, "panel-count"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-comment-slash"], [1, "fa-solid", "fa-database"], ["name", "formattedData", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "error-message"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], ["name", "formattedResult", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-inbox"], [1, "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-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], ["title", "View Agent", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-check-circle"], ["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) {
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, 70, 31, "form", 2);
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