@memberjunction/ng-core-entity-forms 2.81.0 → 2.82.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +88 -71
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +299 -283
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +474 -456
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +114 -100
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/sections/details.component.js +13 -4
- package/dist/lib/generated/Entities/AIAgent/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRun/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRun/sections/details.component.js +13 -4
- package/dist/lib/generated/Entities/AIAgentRun/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPrompt/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIPrompt/sections/details.component.js +13 -4
- package/dist/lib/generated/Entities/AIPrompt/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js +13 -4
- package/dist/lib/generated/Entities/AIPromptRun/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationArtifact/conversationartifact.form.component.js +6 -6
- package/dist/lib/generated/Entities/ConversationArtifact/conversationartifact.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/User/user.form.component.js +6 -6
- package/dist/lib/generated/Entities/User/user.form.component.js.map +1 -1
- package/package.json +16 -16
|
@@ -137,6 +137,20 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Condition
|
|
|
137
137
|
i0.ɵɵelementStart(0, "div", 39);
|
|
138
138
|
i0.ɵɵelement(1, "i", 51);
|
|
139
139
|
i0.ɵɵelementStart(2, "div", 41)(3, "div", 42);
|
|
140
|
+
i0.ɵɵtext(4, "Effort Level");
|
|
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.EffortLevel);
|
|
149
|
+
} }
|
|
150
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_13_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);
|
|
140
154
|
i0.ɵɵtext(4, "Response Format");
|
|
141
155
|
i0.ɵɵelementEnd();
|
|
142
156
|
i0.ɵɵelementStart(5, "div", 43);
|
|
@@ -147,9 +161,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Condition
|
|
|
147
161
|
i0.ɵɵadvance(6);
|
|
148
162
|
i0.ɵɵtextInterpolate(ctx_r1.record.ResponseFormat);
|
|
149
163
|
} }
|
|
150
|
-
function
|
|
164
|
+
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
151
165
|
i0.ɵɵelementStart(0, "div", 39);
|
|
152
|
-
i0.ɵɵelement(1, "i",
|
|
166
|
+
i0.ɵɵelement(1, "i", 53);
|
|
153
167
|
i0.ɵɵelementStart(2, "div", 41)(3, "div", 42);
|
|
154
168
|
i0.ɵɵtext(4, "Started");
|
|
155
169
|
i0.ɵɵelementEnd();
|
|
@@ -173,33 +187,33 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Template(
|
|
|
173
187
|
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
188
|
i0.ɵɵtext(8);
|
|
175
189
|
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);
|
|
190
|
+
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)(13, AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_13_Template, 7, 1, "div", 39);
|
|
177
191
|
i0.ɵɵelementEnd();
|
|
178
|
-
i0.ɵɵelementStart(
|
|
179
|
-
i0.ɵɵelement(
|
|
180
|
-
i0.ɵɵelementStart(
|
|
181
|
-
i0.ɵɵtext(
|
|
192
|
+
i0.ɵɵelementStart(14, "div", 23)(15, "div", 39);
|
|
193
|
+
i0.ɵɵelement(16, "i", 45);
|
|
194
|
+
i0.ɵɵelementStart(17, "div", 41)(18, "div", 42);
|
|
195
|
+
i0.ɵɵtext(19, "Duration");
|
|
182
196
|
i0.ɵɵelementEnd();
|
|
183
|
-
i0.ɵɵelementStart(
|
|
184
|
-
i0.ɵɵtext(
|
|
197
|
+
i0.ɵɵelementStart(20, "div", 43);
|
|
198
|
+
i0.ɵɵtext(21);
|
|
185
199
|
i0.ɵɵelementEnd()()();
|
|
186
|
-
i0.ɵɵelementStart(
|
|
187
|
-
i0.ɵɵelement(
|
|
188
|
-
i0.ɵɵelementStart(
|
|
189
|
-
i0.ɵɵtext(
|
|
200
|
+
i0.ɵɵelementStart(22, "div", 39);
|
|
201
|
+
i0.ɵɵelement(23, "i", 46);
|
|
202
|
+
i0.ɵɵelementStart(24, "div", 41)(25, "div", 42);
|
|
203
|
+
i0.ɵɵtext(26, "Total Tokens");
|
|
190
204
|
i0.ɵɵelementEnd();
|
|
191
|
-
i0.ɵɵelementStart(
|
|
192
|
-
i0.ɵɵtext(
|
|
205
|
+
i0.ɵɵelementStart(27, "div", 43);
|
|
206
|
+
i0.ɵɵtext(28);
|
|
193
207
|
i0.ɵɵelementEnd()()();
|
|
194
|
-
i0.ɵɵelementStart(
|
|
195
|
-
i0.ɵɵelement(
|
|
196
|
-
i0.ɵɵelementStart(
|
|
197
|
-
i0.ɵɵtext(
|
|
208
|
+
i0.ɵɵelementStart(29, "div", 39);
|
|
209
|
+
i0.ɵɵelement(30, "i", 47);
|
|
210
|
+
i0.ɵɵelementStart(31, "div", 41)(32, "div", 42);
|
|
211
|
+
i0.ɵɵtext(33, "Cost");
|
|
198
212
|
i0.ɵɵelementEnd();
|
|
199
|
-
i0.ɵɵelementStart(
|
|
200
|
-
i0.ɵɵtext(
|
|
213
|
+
i0.ɵɵelementStart(34, "div", 43);
|
|
214
|
+
i0.ɵɵtext(35);
|
|
201
215
|
i0.ɵɵelementEnd()()();
|
|
202
|
-
i0.ɵɵtemplate(
|
|
216
|
+
i0.ɵɵtemplate(36, AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Conditional_36_Template, 8, 4, "div", 39);
|
|
203
217
|
i0.ɵɵelementEnd();
|
|
204
218
|
} if (rf & 2) {
|
|
205
219
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -212,7 +226,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Template(
|
|
|
212
226
|
i0.ɵɵadvance();
|
|
213
227
|
i0.ɵɵconditional(ctx_r1.record.TopK !== null && ctx_r1.record.TopK !== undefined ? 11 : -1);
|
|
214
228
|
i0.ɵɵadvance();
|
|
215
|
-
i0.ɵɵconditional(ctx_r1.record.
|
|
229
|
+
i0.ɵɵconditional(ctx_r1.record.EffortLevel !== null && ctx_r1.record.EffortLevel !== undefined ? 12 : -1);
|
|
230
|
+
i0.ɵɵadvance();
|
|
231
|
+
i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 13 : -1);
|
|
216
232
|
i0.ɵɵadvance(8);
|
|
217
233
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.ExecutionTimeMS));
|
|
218
234
|
i0.ɵɵadvance(7);
|
|
@@ -220,11 +236,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Template(
|
|
|
220
236
|
i0.ɵɵadvance(7);
|
|
221
237
|
i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
|
|
222
238
|
i0.ɵɵadvance();
|
|
223
|
-
i0.ɵɵconditional(ctx_r1.record.RunAt ?
|
|
239
|
+
i0.ɵɵconditional(ctx_r1.record.RunAt ? 36 : -1);
|
|
224
240
|
} }
|
|
225
241
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_28_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
226
242
|
i0.ɵɵelementStart(0, "div", 39);
|
|
227
|
-
i0.ɵɵelement(1, "i",
|
|
243
|
+
i0.ɵɵelement(1, "i", 53);
|
|
228
244
|
i0.ɵɵelementStart(2, "div", 41)(3, "div", 42);
|
|
229
245
|
i0.ɵɵtext(4, "Started");
|
|
230
246
|
i0.ɵɵelementEnd();
|
|
@@ -276,15 +292,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_28_Template(
|
|
|
276
292
|
i0.ɵɵconditional(ctx_r1.record.RunAt ? 22 : -1);
|
|
277
293
|
} }
|
|
278
294
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_32_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
279
|
-
i0.ɵɵelementStart(0, "span",
|
|
295
|
+
i0.ɵɵelementStart(0, "span", 55);
|
|
280
296
|
i0.ɵɵtext(1, "JSON");
|
|
281
297
|
i0.ɵɵelementEnd();
|
|
282
298
|
} }
|
|
283
299
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_32_Template(rf, ctx) { if (rf & 1) {
|
|
284
|
-
i0.ɵɵelementStart(0, "span",
|
|
300
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
285
301
|
i0.ɵɵelement(1, "i", 32);
|
|
286
302
|
i0.ɵɵtext(2, " Input ");
|
|
287
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_32_Conditional_3_Template, 2, 0, "span",
|
|
303
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_32_Conditional_3_Template, 2, 0, "span", 55);
|
|
288
304
|
i0.ɵɵelementEnd();
|
|
289
305
|
} if (rf & 2) {
|
|
290
306
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -292,7 +308,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_32_Template(
|
|
|
292
308
|
i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
|
|
293
309
|
} }
|
|
294
310
|
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",
|
|
311
|
+
i0.ɵɵelementStart(0, "span", 71);
|
|
296
312
|
i0.ɵɵtext(1);
|
|
297
313
|
i0.ɵɵelementEnd();
|
|
298
314
|
} if (rf & 2) {
|
|
@@ -301,10 +317,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Condition
|
|
|
301
317
|
i0.ɵɵtextInterpolate1("(", ctx_r1.chatMessages.length, ")");
|
|
302
318
|
} }
|
|
303
319
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
304
|
-
i0.ɵɵelementStart(0, "span",
|
|
305
|
-
i0.ɵɵelement(1, "i",
|
|
320
|
+
i0.ɵɵelementStart(0, "span", 69);
|
|
321
|
+
i0.ɵɵelement(1, "i", 70);
|
|
306
322
|
i0.ɵɵtext(2, " Messages ");
|
|
307
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_2_Conditional_3_Template, 2, 1, "span",
|
|
323
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_2_Conditional_3_Template, 2, 1, "span", 71);
|
|
308
324
|
i0.ɵɵelementEnd();
|
|
309
325
|
} if (rf & 2) {
|
|
310
326
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -312,35 +328,35 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Condition
|
|
|
312
328
|
i0.ɵɵconditional(ctx_r1.chatMessages.length > 0 ? 3 : -1);
|
|
313
329
|
} }
|
|
314
330
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
315
|
-
i0.ɵɵelementStart(0, "div",
|
|
316
|
-
i0.ɵɵelement(1, "i",
|
|
331
|
+
i0.ɵɵelementStart(0, "div", 62);
|
|
332
|
+
i0.ɵɵelement(1, "i", 72);
|
|
317
333
|
i0.ɵɵelementStart(2, "p");
|
|
318
334
|
i0.ɵɵtext(3, "Loading messages...");
|
|
319
335
|
i0.ɵɵelementEnd()();
|
|
320
336
|
} }
|
|
321
337
|
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",
|
|
338
|
+
i0.ɵɵelement(0, "mj-chat-message-viewer", 63);
|
|
323
339
|
} if (rf & 2) {
|
|
324
340
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
325
341
|
i0.ɵɵproperty("messages", ctx_r1.chatMessages);
|
|
326
342
|
} }
|
|
327
343
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
328
|
-
i0.ɵɵelementStart(0, "div",
|
|
329
|
-
i0.ɵɵelement(1, "i",
|
|
344
|
+
i0.ɵɵelementStart(0, "div", 58);
|
|
345
|
+
i0.ɵɵelement(1, "i", 73);
|
|
330
346
|
i0.ɵɵelementStart(2, "p");
|
|
331
347
|
i0.ɵɵtext(3, "No chat messages found");
|
|
332
348
|
i0.ɵɵelementEnd()();
|
|
333
349
|
} }
|
|
334
350
|
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",
|
|
351
|
+
i0.ɵɵelementStart(0, "span", 55);
|
|
336
352
|
i0.ɵɵtext(1, "Object");
|
|
337
353
|
i0.ɵɵelementEnd();
|
|
338
354
|
} }
|
|
339
355
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_8_Template(rf, ctx) { if (rf & 1) {
|
|
340
|
-
i0.ɵɵelementStart(0, "span",
|
|
341
|
-
i0.ɵɵelement(1, "i",
|
|
356
|
+
i0.ɵɵelementStart(0, "span", 69);
|
|
357
|
+
i0.ɵɵelement(1, "i", 74);
|
|
342
358
|
i0.ɵɵtext(2, " Data ");
|
|
343
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_8_Conditional_3_Template, 2, 0, "span",
|
|
359
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_8_Conditional_3_Template, 2, 0, "span", 55);
|
|
344
360
|
i0.ɵɵelementEnd();
|
|
345
361
|
} if (rf & 2) {
|
|
346
362
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -349,12 +365,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Condition
|
|
|
349
365
|
} }
|
|
350
366
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
351
367
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
352
|
-
i0.ɵɵelementStart(0, "div",
|
|
368
|
+
i0.ɵɵelementStart(0, "div", 64)(1, "div", 65)(2, "button", 66);
|
|
353
369
|
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",
|
|
370
|
+
i0.ɵɵelement(3, "i", 67);
|
|
355
371
|
i0.ɵɵtext(4, " Copy ");
|
|
356
372
|
i0.ɵɵelementEnd()();
|
|
357
|
-
i0.ɵɵelementStart(5, "mj-code-editor",
|
|
373
|
+
i0.ɵɵelementStart(5, "mj-code-editor", 75);
|
|
358
374
|
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); });
|
|
359
375
|
i0.ɵɵelementEnd()();
|
|
360
376
|
} if (rf & 2) {
|
|
@@ -364,38 +380,38 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Condition
|
|
|
364
380
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
365
381
|
} }
|
|
366
382
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
367
|
-
i0.ɵɵelementStart(0, "div",
|
|
368
|
-
i0.ɵɵelement(1, "i",
|
|
383
|
+
i0.ɵɵelementStart(0, "div", 58);
|
|
384
|
+
i0.ɵɵelement(1, "i", 74);
|
|
369
385
|
i0.ɵɵelementStart(2, "p");
|
|
370
386
|
i0.ɵɵtext(3, "No data object found");
|
|
371
387
|
i0.ɵɵelementEnd()();
|
|
372
388
|
} }
|
|
373
389
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_13_Template(rf, ctx) { if (rf & 1) {
|
|
374
|
-
i0.ɵɵelementStart(0, "span",
|
|
375
|
-
i0.ɵɵelement(1, "i",
|
|
390
|
+
i0.ɵɵelementStart(0, "span", 69);
|
|
391
|
+
i0.ɵɵelement(1, "i", 52);
|
|
376
392
|
i0.ɵɵtext(2, " Raw ");
|
|
377
393
|
i0.ɵɵelementEnd();
|
|
378
394
|
} }
|
|
379
395
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
380
396
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
381
|
-
i0.ɵɵelementStart(0, "div",
|
|
382
|
-
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_2_Template, 4, 1, "ng-template",
|
|
383
|
-
i0.ɵɵelementStart(3, "div",
|
|
384
|
-
i0.ɵɵtemplate(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_4_Template, 4, 0, "div",
|
|
385
|
-
i0.ɵɵelementEnd()();
|
|
386
|
-
i0.ɵɵelementStart(7, "kendo-expansionpanel",
|
|
387
|
-
i0.ɵɵtemplate(8, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_8_Template, 4, 1, "ng-template",
|
|
388
|
-
i0.ɵɵelementStart(9, "div",
|
|
389
|
-
i0.ɵɵtemplate(10, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_10_Template, 6, 4, "div",
|
|
390
|
-
i0.ɵɵelementEnd()();
|
|
391
|
-
i0.ɵɵelementStart(12, "kendo-expansionpanel",
|
|
392
|
-
i0.ɵɵtemplate(13, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_13_Template, 3, 0, "ng-template",
|
|
393
|
-
i0.ɵɵelementStart(14, "div",
|
|
397
|
+
i0.ɵɵelementStart(0, "div", 57)(1, "kendo-expansionpanel", 59);
|
|
398
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_2_Template, 4, 1, "ng-template", 60);
|
|
399
|
+
i0.ɵɵelementStart(3, "div", 61);
|
|
400
|
+
i0.ɵɵtemplate(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_4_Template, 4, 0, "div", 62)(5, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 63)(6, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_6_Template, 4, 0, "div", 58);
|
|
401
|
+
i0.ɵɵelementEnd()();
|
|
402
|
+
i0.ɵɵelementStart(7, "kendo-expansionpanel", 59);
|
|
403
|
+
i0.ɵɵtemplate(8, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_8_Template, 4, 1, "ng-template", 60);
|
|
404
|
+
i0.ɵɵelementStart(9, "div", 61);
|
|
405
|
+
i0.ɵɵtemplate(10, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_10_Template, 6, 4, "div", 64)(11, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Conditional_11_Template, 4, 0, "div", 58);
|
|
406
|
+
i0.ɵɵelementEnd()();
|
|
407
|
+
i0.ɵɵelementStart(12, "kendo-expansionpanel", 59);
|
|
408
|
+
i0.ɵɵtemplate(13, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_ng_template_13_Template, 3, 0, "ng-template", 60);
|
|
409
|
+
i0.ɵɵelementStart(14, "div", 61)(15, "div", 64)(16, "div", 65)(17, "button", 66);
|
|
394
410
|
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",
|
|
411
|
+
i0.ɵɵelement(18, "i", 67);
|
|
396
412
|
i0.ɵɵtext(19, " Copy ");
|
|
397
413
|
i0.ɵɵelementEnd()();
|
|
398
|
-
i0.ɵɵelementStart(20, "mj-code-editor",
|
|
414
|
+
i0.ɵɵelementStart(20, "mj-code-editor", 68);
|
|
399
415
|
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); });
|
|
400
416
|
i0.ɵɵelementEnd()()()()();
|
|
401
417
|
} if (rf & 2) {
|
|
@@ -415,15 +431,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Condition
|
|
|
415
431
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
416
432
|
} }
|
|
417
433
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
418
|
-
i0.ɵɵelementStart(0, "div",
|
|
419
|
-
i0.ɵɵelement(1, "i",
|
|
434
|
+
i0.ɵɵelementStart(0, "div", 58);
|
|
435
|
+
i0.ɵɵelement(1, "i", 73);
|
|
420
436
|
i0.ɵɵelementStart(2, "p");
|
|
421
437
|
i0.ɵɵtext(3, "No input messages recorded");
|
|
422
438
|
i0.ɵɵelementEnd()();
|
|
423
439
|
} }
|
|
424
440
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Template(rf, ctx) { if (rf & 1) {
|
|
425
|
-
i0.ɵɵelementStart(0, "div",
|
|
426
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Template, 21, 12, "div",
|
|
441
|
+
i0.ɵɵelementStart(0, "div", 56);
|
|
442
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_1_Template, 21, 12, "div", 57)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Conditional_2_Template, 4, 0, "div", 58);
|
|
427
443
|
i0.ɵɵelementEnd();
|
|
428
444
|
} if (rf & 2) {
|
|
429
445
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -431,20 +447,20 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_33_Template(
|
|
|
431
447
|
i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 1 : 2);
|
|
432
448
|
} }
|
|
433
449
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_35_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
434
|
-
i0.ɵɵelementStart(0, "span",
|
|
450
|
+
i0.ɵɵelementStart(0, "span", 55);
|
|
435
451
|
i0.ɵɵtext(1, "JSON");
|
|
436
452
|
i0.ɵɵelementEnd();
|
|
437
453
|
} }
|
|
438
454
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_35_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
439
|
-
i0.ɵɵelementStart(0, "span",
|
|
455
|
+
i0.ɵɵelementStart(0, "span", 77);
|
|
440
456
|
i0.ɵɵtext(1, "Error");
|
|
441
457
|
i0.ɵɵelementEnd();
|
|
442
458
|
} }
|
|
443
459
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_35_Template(rf, ctx) { if (rf & 1) {
|
|
444
|
-
i0.ɵɵelementStart(0, "span",
|
|
445
|
-
i0.ɵɵelement(1, "i",
|
|
460
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
461
|
+
i0.ɵɵelement(1, "i", 76);
|
|
446
462
|
i0.ɵɵtext(2, " Result ");
|
|
447
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_35_Conditional_3_Template, 2, 0, "span",
|
|
463
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_35_Conditional_3_Template, 2, 0, "span", 55)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_35_Conditional_4_Template, 2, 0, "span", 77);
|
|
448
464
|
i0.ɵɵelementEnd();
|
|
449
465
|
} if (rf & 2) {
|
|
450
466
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -454,9 +470,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_35_Template(
|
|
|
454
470
|
i0.ɵɵconditional(ctx_r1.record.ErrorMessage ? 4 : -1);
|
|
455
471
|
} }
|
|
456
472
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
457
|
-
i0.ɵɵelementStart(0, "div",
|
|
458
|
-
i0.ɵɵelement(1, "i",
|
|
459
|
-
i0.ɵɵelementStart(2, "div",
|
|
473
|
+
i0.ɵɵelementStart(0, "div", 78);
|
|
474
|
+
i0.ɵɵelement(1, "i", 79);
|
|
475
|
+
i0.ɵɵelementStart(2, "div", 80)(3, "h4");
|
|
460
476
|
i0.ɵɵtext(4, "Error Message");
|
|
461
477
|
i0.ɵɵelementEnd();
|
|
462
478
|
i0.ɵɵelementStart(5, "p");
|
|
@@ -469,12 +485,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Condition
|
|
|
469
485
|
} }
|
|
470
486
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
471
487
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
472
|
-
i0.ɵɵelementStart(0, "div",
|
|
488
|
+
i0.ɵɵelementStart(0, "div", 64)(1, "div", 65)(2, "button", 66);
|
|
473
489
|
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",
|
|
490
|
+
i0.ɵɵelement(3, "i", 67);
|
|
475
491
|
i0.ɵɵtext(4, " Copy ");
|
|
476
492
|
i0.ɵɵelementEnd()();
|
|
477
|
-
i0.ɵɵelementStart(5, "mj-code-editor",
|
|
493
|
+
i0.ɵɵelementStart(5, "mj-code-editor", 81);
|
|
478
494
|
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); });
|
|
479
495
|
i0.ɵɵelementEnd()();
|
|
480
496
|
} if (rf & 2) {
|
|
@@ -484,7 +500,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Condition
|
|
|
484
500
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
485
501
|
} }
|
|
486
502
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
487
|
-
i0.ɵɵelementStart(0, "p",
|
|
503
|
+
i0.ɵɵelementStart(0, "p", 84)(1, "strong");
|
|
488
504
|
i0.ɵɵtext(2, "Status:");
|
|
489
505
|
i0.ɵɵelementEnd();
|
|
490
506
|
i0.ɵɵtext(3);
|
|
@@ -495,10 +511,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Condition
|
|
|
495
511
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
|
|
496
512
|
} }
|
|
497
513
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
498
|
-
i0.ɵɵelementStart(0, "div",
|
|
514
|
+
i0.ɵɵelementStart(0, "div", 85)(1, "h4");
|
|
499
515
|
i0.ɵɵtext(2, "Error Details");
|
|
500
516
|
i0.ɵɵelementEnd();
|
|
501
|
-
i0.ɵɵelement(3, "mj-code-editor",
|
|
517
|
+
i0.ɵɵelement(3, "mj-code-editor", 87);
|
|
502
518
|
i0.ɵɵelementEnd();
|
|
503
519
|
} if (rf & 2) {
|
|
504
520
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
@@ -506,13 +522,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Condition
|
|
|
506
522
|
i0.ɵɵproperty("ngModel", ctx_r1.formattedErrorDetails)("disabled", true)("language", "json")("lineWrapping", true);
|
|
507
523
|
} }
|
|
508
524
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
509
|
-
i0.ɵɵelementStart(0, "p",
|
|
525
|
+
i0.ɵɵelementStart(0, "p", 86);
|
|
510
526
|
i0.ɵɵtext(1, " The prompt execution failed but no additional error information is available. ");
|
|
511
527
|
i0.ɵɵelementEnd();
|
|
512
528
|
} }
|
|
513
529
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
514
|
-
i0.ɵɵelementStart(0, "div",
|
|
515
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Conditional_1_Template, 4, 1, "p",
|
|
530
|
+
i0.ɵɵelementStart(0, "div", 83);
|
|
531
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Conditional_1_Template, 4, 1, "p", 84)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Conditional_2_Template, 4, 4, "div", 85)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Conditional_3_Template, 2, 0, "p", 86);
|
|
516
532
|
i0.ɵɵelementEnd();
|
|
517
533
|
} if (rf & 2) {
|
|
518
534
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -524,12 +540,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Condition
|
|
|
524
540
|
i0.ɵɵconditional(!ctx_r1.formattedErrorDetails ? 3 : -1);
|
|
525
541
|
} }
|
|
526
542
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
527
|
-
i0.ɵɵelementStart(0, "div",
|
|
528
|
-
i0.ɵɵelement(1, "i",
|
|
543
|
+
i0.ɵɵelementStart(0, "div", 58);
|
|
544
|
+
i0.ɵɵelement(1, "i", 82);
|
|
529
545
|
i0.ɵɵelementStart(2, "p");
|
|
530
546
|
i0.ɵɵtext(3, "No result data recorded");
|
|
531
547
|
i0.ɵɵelementEnd();
|
|
532
|
-
i0.ɵɵtemplate(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Template, 4, 3, "div",
|
|
548
|
+
i0.ɵɵtemplate(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Conditional_4_Template, 4, 3, "div", 83);
|
|
533
549
|
i0.ɵɵelementEnd();
|
|
534
550
|
} if (rf & 2) {
|
|
535
551
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -537,8 +553,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Condition
|
|
|
537
553
|
i0.ɵɵconditional(ctx_r1.record.Status === "Failed" || ctx_r1.record.Success === false ? 4 : -1);
|
|
538
554
|
} }
|
|
539
555
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Template(rf, ctx) { if (rf & 1) {
|
|
540
|
-
i0.ɵɵelementStart(0, "div",
|
|
541
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_1_Template, 7, 1, "div",
|
|
556
|
+
i0.ɵɵelementStart(0, "div", 56);
|
|
557
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_1_Template, 7, 1, "div", 78)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_2_Template, 6, 4, "div", 64)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Template, 5, 1, "div", 58);
|
|
542
558
|
i0.ɵɵelementEnd();
|
|
543
559
|
} if (rf & 2) {
|
|
544
560
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -548,13 +564,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_36_Template(
|
|
|
548
564
|
i0.ɵɵconditional(ctx_r1.record.Result && ctx_r1.record.Result.trim() !== "" ? 2 : !ctx_r1.record.ErrorMessage ? 3 : -1);
|
|
549
565
|
} }
|
|
550
566
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_38_Template(rf, ctx) { if (rf & 1) {
|
|
551
|
-
i0.ɵɵelementStart(0, "span",
|
|
552
|
-
i0.ɵɵelement(1, "i",
|
|
567
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
568
|
+
i0.ɵɵelement(1, "i", 88);
|
|
553
569
|
i0.ɵɵtext(2, " Token Usage & Metrics ");
|
|
554
570
|
i0.ɵɵelementEnd();
|
|
555
571
|
} }
|
|
556
572
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
557
|
-
i0.ɵɵelementStart(0, "div",
|
|
573
|
+
i0.ɵɵelementStart(0, "div", 94)(1, "span");
|
|
558
574
|
i0.ɵɵtext(2);
|
|
559
575
|
i0.ɵɵelementEnd()();
|
|
560
576
|
} if (rf & 2) {
|
|
@@ -563,7 +579,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Condition
|
|
|
563
579
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensPromptRollup), "");
|
|
564
580
|
} }
|
|
565
581
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
566
|
-
i0.ɵɵelementStart(0, "div",
|
|
582
|
+
i0.ɵɵelementStart(0, "div", 94)(1, "span");
|
|
567
583
|
i0.ɵɵtext(2);
|
|
568
584
|
i0.ɵɵelementEnd()();
|
|
569
585
|
} if (rf & 2) {
|
|
@@ -572,7 +588,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Condition
|
|
|
572
588
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensCompletionRollup), "");
|
|
573
589
|
} }
|
|
574
590
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
575
|
-
i0.ɵɵelementStart(0, "div",
|
|
591
|
+
i0.ɵɵelementStart(0, "div", 94)(1, "span");
|
|
576
592
|
i0.ɵɵtext(2);
|
|
577
593
|
i0.ɵɵelementEnd()();
|
|
578
594
|
} if (rf & 2) {
|
|
@@ -581,7 +597,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Condition
|
|
|
581
597
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup), "");
|
|
582
598
|
} }
|
|
583
599
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
584
|
-
i0.ɵɵelementStart(0, "div",
|
|
600
|
+
i0.ɵɵelementStart(0, "div", 94)(1, "span");
|
|
585
601
|
i0.ɵɵtext(2);
|
|
586
602
|
i0.ɵɵelementEnd()();
|
|
587
603
|
} if (rf & 2) {
|
|
@@ -590,7 +606,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Condition
|
|
|
590
606
|
i0.ɵɵtextInterpolate1("Total: ", ctx_r1.formatCost(ctx_r1.record.TotalCost), "");
|
|
591
607
|
} }
|
|
592
608
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
593
|
-
i0.ɵɵelementStart(0, "div",
|
|
609
|
+
i0.ɵɵelementStart(0, "div", 96);
|
|
594
610
|
i0.ɵɵtext(1);
|
|
595
611
|
i0.ɵɵelementEnd();
|
|
596
612
|
} if (rf & 2) {
|
|
@@ -599,12 +615,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Condition
|
|
|
599
615
|
i0.ɵɵtextInterpolate(ctx_r1.record.CostCurrency);
|
|
600
616
|
} }
|
|
601
617
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
602
|
-
i0.ɵɵelementStart(0, "div",
|
|
603
|
-
i0.ɵɵelement(2, "i",
|
|
618
|
+
i0.ɵɵelementStart(0, "div", 90)(1, "div", 91);
|
|
619
|
+
i0.ɵɵelement(2, "i", 99);
|
|
604
620
|
i0.ɵɵelementStart(3, "h4");
|
|
605
621
|
i0.ɵɵtext(4, "Queue Time");
|
|
606
622
|
i0.ɵɵelementEnd()();
|
|
607
|
-
i0.ɵɵelementStart(5, "div",
|
|
623
|
+
i0.ɵɵelementStart(5, "div", 93);
|
|
608
624
|
i0.ɵɵtext(6);
|
|
609
625
|
i0.ɵɵelementEnd()();
|
|
610
626
|
} if (rf & 2) {
|
|
@@ -613,12 +629,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Condition
|
|
|
613
629
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.QueueTime));
|
|
614
630
|
} }
|
|
615
631
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
616
|
-
i0.ɵɵelementStart(0, "div",
|
|
617
|
-
i0.ɵɵelement(2, "i",
|
|
632
|
+
i0.ɵɵelementStart(0, "div", 90)(1, "div", 91);
|
|
633
|
+
i0.ɵɵelement(2, "i", 100);
|
|
618
634
|
i0.ɵɵelementStart(3, "h4");
|
|
619
635
|
i0.ɵɵtext(4, "Prompt Time");
|
|
620
636
|
i0.ɵɵelementEnd()();
|
|
621
|
-
i0.ɵɵelementStart(5, "div",
|
|
637
|
+
i0.ɵɵelementStart(5, "div", 93);
|
|
622
638
|
i0.ɵɵtext(6);
|
|
623
639
|
i0.ɵɵelementEnd()();
|
|
624
640
|
} if (rf & 2) {
|
|
@@ -627,12 +643,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Condition
|
|
|
627
643
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.PromptTime));
|
|
628
644
|
} }
|
|
629
645
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
630
|
-
i0.ɵɵelementStart(0, "div",
|
|
631
|
-
i0.ɵɵelement(2, "i",
|
|
646
|
+
i0.ɵɵelementStart(0, "div", 90)(1, "div", 91);
|
|
647
|
+
i0.ɵɵelement(2, "i", 101);
|
|
632
648
|
i0.ɵɵelementStart(3, "h4");
|
|
633
649
|
i0.ɵɵtext(4, "Completion Time");
|
|
634
650
|
i0.ɵɵelementEnd()();
|
|
635
|
-
i0.ɵɵelementStart(5, "div",
|
|
651
|
+
i0.ɵɵelementStart(5, "div", 93);
|
|
636
652
|
i0.ɵɵtext(6);
|
|
637
653
|
i0.ɵɵelementEnd()();
|
|
638
654
|
} if (rf & 2) {
|
|
@@ -641,7 +657,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Condition
|
|
|
641
657
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.CompletionTime));
|
|
642
658
|
} }
|
|
643
659
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_39_Template(rf, ctx) { if (rf & 1) {
|
|
644
|
-
i0.ɵɵelementStart(0, "div",
|
|
660
|
+
i0.ɵɵelementStart(0, "div", 98)(1, "span", 42);
|
|
645
661
|
i0.ɵɵtext(2, "Execution Order:");
|
|
646
662
|
i0.ɵɵelementEnd();
|
|
647
663
|
i0.ɵɵelementStart(3, "span", 43);
|
|
@@ -654,13 +670,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Condition
|
|
|
654
670
|
} }
|
|
655
671
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_40_Template(rf, ctx) { if (rf & 1) {
|
|
656
672
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
657
|
-
i0.ɵɵelementStart(0, "div",
|
|
673
|
+
i0.ɵɵelementStart(0, "div", 98)(1, "span", 42);
|
|
658
674
|
i0.ɵɵtext(2, "Agent:");
|
|
659
675
|
i0.ɵɵelementEnd();
|
|
660
|
-
i0.ɵɵelementStart(3, "span",
|
|
676
|
+
i0.ɵɵelementStart(3, "span", 102);
|
|
661
677
|
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)); });
|
|
662
678
|
i0.ɵɵtext(4);
|
|
663
|
-
i0.ɵɵelement(5, "i",
|
|
679
|
+
i0.ɵɵelement(5, "i", 103);
|
|
664
680
|
i0.ɵɵelementEnd()();
|
|
665
681
|
} if (rf & 2) {
|
|
666
682
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -668,50 +684,50 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Condition
|
|
|
668
684
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
|
|
669
685
|
} }
|
|
670
686
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Template(rf, ctx) { if (rf & 1) {
|
|
671
|
-
i0.ɵɵelementStart(0, "div",
|
|
672
|
-
i0.ɵɵelement(4, "i",
|
|
687
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "div", 89)(2, "div", 90)(3, "div", 91);
|
|
688
|
+
i0.ɵɵelement(4, "i", 92);
|
|
673
689
|
i0.ɵɵelementStart(5, "h4");
|
|
674
690
|
i0.ɵɵtext(6, "Prompt Tokens");
|
|
675
691
|
i0.ɵɵelementEnd()();
|
|
676
|
-
i0.ɵɵelementStart(7, "div",
|
|
692
|
+
i0.ɵɵelementStart(7, "div", 93);
|
|
677
693
|
i0.ɵɵtext(8);
|
|
678
694
|
i0.ɵɵelementEnd();
|
|
679
|
-
i0.ɵɵtemplate(9, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_9_Template, 3, 1, "div",
|
|
695
|
+
i0.ɵɵtemplate(9, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_9_Template, 3, 1, "div", 94);
|
|
680
696
|
i0.ɵɵelementEnd();
|
|
681
|
-
i0.ɵɵelementStart(10, "div",
|
|
682
|
-
i0.ɵɵelement(12, "i",
|
|
697
|
+
i0.ɵɵelementStart(10, "div", 90)(11, "div", 91);
|
|
698
|
+
i0.ɵɵelement(12, "i", 95);
|
|
683
699
|
i0.ɵɵelementStart(13, "h4");
|
|
684
700
|
i0.ɵɵtext(14, "Completion Tokens");
|
|
685
701
|
i0.ɵɵelementEnd()();
|
|
686
|
-
i0.ɵɵelementStart(15, "div",
|
|
702
|
+
i0.ɵɵelementStart(15, "div", 93);
|
|
687
703
|
i0.ɵɵtext(16);
|
|
688
704
|
i0.ɵɵelementEnd();
|
|
689
|
-
i0.ɵɵtemplate(17, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_17_Template, 3, 1, "div",
|
|
705
|
+
i0.ɵɵtemplate(17, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_17_Template, 3, 1, "div", 94);
|
|
690
706
|
i0.ɵɵelementEnd();
|
|
691
|
-
i0.ɵɵelementStart(18, "div",
|
|
707
|
+
i0.ɵɵelementStart(18, "div", 90)(19, "div", 91);
|
|
692
708
|
i0.ɵɵelement(20, "i", 46);
|
|
693
709
|
i0.ɵɵelementStart(21, "h4");
|
|
694
710
|
i0.ɵɵtext(22, "Total Tokens");
|
|
695
711
|
i0.ɵɵelementEnd()();
|
|
696
|
-
i0.ɵɵelementStart(23, "div",
|
|
712
|
+
i0.ɵɵelementStart(23, "div", 93);
|
|
697
713
|
i0.ɵɵtext(24);
|
|
698
714
|
i0.ɵɵelementEnd();
|
|
699
|
-
i0.ɵɵtemplate(25, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_25_Template, 3, 1, "div",
|
|
715
|
+
i0.ɵɵtemplate(25, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_25_Template, 3, 1, "div", 94);
|
|
700
716
|
i0.ɵɵelementEnd();
|
|
701
|
-
i0.ɵɵelementStart(26, "div",
|
|
717
|
+
i0.ɵɵelementStart(26, "div", 90)(27, "div", 91);
|
|
702
718
|
i0.ɵɵelement(28, "i", 47);
|
|
703
719
|
i0.ɵɵelementStart(29, "h4");
|
|
704
720
|
i0.ɵɵtext(30, "Cost");
|
|
705
721
|
i0.ɵɵelementEnd()();
|
|
706
|
-
i0.ɵɵelementStart(31, "div",
|
|
722
|
+
i0.ɵɵelementStart(31, "div", 93);
|
|
707
723
|
i0.ɵɵtext(32);
|
|
708
724
|
i0.ɵɵelementEnd();
|
|
709
|
-
i0.ɵɵtemplate(33, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_33_Template, 3, 1, "div",
|
|
725
|
+
i0.ɵɵtemplate(33, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_33_Template, 3, 1, "div", 94)(34, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_34_Template, 2, 1, "div", 96);
|
|
710
726
|
i0.ɵɵelementEnd();
|
|
711
|
-
i0.ɵɵtemplate(35, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_35_Template, 7, 1, "div",
|
|
727
|
+
i0.ɵɵtemplate(35, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_35_Template, 7, 1, "div", 90)(36, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_36_Template, 7, 1, "div", 90)(37, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_37_Template, 7, 1, "div", 90);
|
|
712
728
|
i0.ɵɵelementEnd();
|
|
713
|
-
i0.ɵɵelementStart(38, "div",
|
|
714
|
-
i0.ɵɵtemplate(39, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_39_Template, 5, 1, "div",
|
|
729
|
+
i0.ɵɵelementStart(38, "div", 97);
|
|
730
|
+
i0.ɵɵtemplate(39, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_39_Template, 5, 1, "div", 98)(40, AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Conditional_40_Template, 6, 1, "div", 98);
|
|
715
731
|
i0.ɵɵelementEnd()();
|
|
716
732
|
} if (rf & 2) {
|
|
717
733
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -745,7 +761,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_39_Template(
|
|
|
745
761
|
i0.ɵɵconditional(ctx_r1.record.AgentID ? 40 : -1);
|
|
746
762
|
} }
|
|
747
763
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
748
|
-
i0.ɵɵelementStart(0, "span",
|
|
764
|
+
i0.ɵɵelementStart(0, "span", 71);
|
|
749
765
|
i0.ɵɵtext(1);
|
|
750
766
|
i0.ɵɵelementEnd();
|
|
751
767
|
} if (rf & 2) {
|
|
@@ -754,20 +770,20 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_templa
|
|
|
754
770
|
i0.ɵɵtextInterpolate1("(", ctx_r1.record.ValidationAttemptCount, " attempts)");
|
|
755
771
|
} }
|
|
756
772
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
757
|
-
i0.ɵɵelementStart(0, "span",
|
|
773
|
+
i0.ɵɵelementStart(0, "span", 105);
|
|
758
774
|
i0.ɵɵtext(1, "Passed");
|
|
759
775
|
i0.ɵɵelementEnd();
|
|
760
776
|
} }
|
|
761
777
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
762
|
-
i0.ɵɵelementStart(0, "span",
|
|
778
|
+
i0.ɵɵelementStart(0, "span", 77);
|
|
763
779
|
i0.ɵɵtext(1, "Failed");
|
|
764
780
|
i0.ɵɵelementEnd();
|
|
765
781
|
} }
|
|
766
782
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
767
|
-
i0.ɵɵelementStart(0, "span",
|
|
768
|
-
i0.ɵɵelement(1, "i",
|
|
783
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
784
|
+
i0.ɵɵelement(1, "i", 104);
|
|
769
785
|
i0.ɵɵtext(2, " Validation & Retries ");
|
|
770
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Conditional_3_Template, 2, 1, "span",
|
|
786
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Conditional_3_Template, 2, 1, "span", 71)(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Conditional_4_Template, 2, 0, "span", 105)(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_1_Conditional_5_Template, 2, 0, "span", 77);
|
|
771
787
|
i0.ɵɵelementEnd();
|
|
772
788
|
} if (rf & 2) {
|
|
773
789
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -777,7 +793,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_templa
|
|
|
777
793
|
i0.ɵɵconditional(ctx_r1.record.FinalValidationPassed ? 4 : ctx_r1.record.FinalValidationPassed === false ? 5 : -1);
|
|
778
794
|
} }
|
|
779
795
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_29_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
780
|
-
i0.ɵɵelementStart(0, "span",
|
|
796
|
+
i0.ɵɵelementStart(0, "span", 116);
|
|
781
797
|
i0.ɵɵtext(1);
|
|
782
798
|
i0.ɵɵelementEnd();
|
|
783
799
|
} if (rf & 2) {
|
|
@@ -786,14 +802,14 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_templa
|
|
|
786
802
|
i0.ɵɵtextInterpolate1("", ctx_r1.record.ValidationErrorCount, " validation errors");
|
|
787
803
|
} }
|
|
788
804
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
789
|
-
i0.ɵɵelementStart(0, "div",
|
|
790
|
-
i0.ɵɵelement(2, "i",
|
|
805
|
+
i0.ɵɵelementStart(0, "div", 111)(1, "h5");
|
|
806
|
+
i0.ɵɵelement(2, "i", 79);
|
|
791
807
|
i0.ɵɵtext(3, " Final Validation Error");
|
|
792
808
|
i0.ɵɵelementEnd();
|
|
793
809
|
i0.ɵɵelementStart(4, "p");
|
|
794
810
|
i0.ɵɵtext(5);
|
|
795
811
|
i0.ɵɵelementEnd();
|
|
796
|
-
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_29_Conditional_6_Template, 2, 1, "span",
|
|
812
|
+
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_29_Conditional_6_Template, 2, 1, "span", 116);
|
|
797
813
|
i0.ɵɵelementEnd();
|
|
798
814
|
} if (rf & 2) {
|
|
799
815
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -803,8 +819,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_templa
|
|
|
803
819
|
i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationErrorCount && ctx_r1.record.ValidationErrorCount > 0 ? 6 : -1);
|
|
804
820
|
} }
|
|
805
821
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
806
|
-
i0.ɵɵelementStart(0, "div",
|
|
807
|
-
i0.ɵɵelement(2, "i",
|
|
822
|
+
i0.ɵɵelementStart(0, "div", 112)(1, "h5");
|
|
823
|
+
i0.ɵɵelement(2, "i", 117);
|
|
808
824
|
i0.ɵɵtext(3, " Most Common Error");
|
|
809
825
|
i0.ɵɵelementEnd();
|
|
810
826
|
i0.ɵɵelementStart(4, "p");
|
|
@@ -816,23 +832,23 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_templa
|
|
|
816
832
|
i0.ɵɵtextInterpolate(ctx_r1.record.CommonValidationError);
|
|
817
833
|
} }
|
|
818
834
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
819
|
-
i0.ɵɵelementStart(0, "div",
|
|
835
|
+
i0.ɵɵelementStart(0, "div", 113)(1, "h4");
|
|
820
836
|
i0.ɵɵtext(2, "Retry Timeline");
|
|
821
837
|
i0.ɵɵelementEnd();
|
|
822
|
-
i0.ɵɵelementStart(3, "div",
|
|
838
|
+
i0.ɵɵelementStart(3, "div", 118)(4, "div", 119);
|
|
823
839
|
i0.ɵɵelement(5, "i", 45);
|
|
824
840
|
i0.ɵɵelementStart(6, "span");
|
|
825
841
|
i0.ɵɵtext(7);
|
|
826
842
|
i0.ɵɵpipe(8, "date");
|
|
827
843
|
i0.ɵɵelementEnd()();
|
|
828
|
-
i0.ɵɵelementStart(9, "div",
|
|
829
|
-
i0.ɵɵelement(10, "i",
|
|
844
|
+
i0.ɵɵelementStart(9, "div", 119);
|
|
845
|
+
i0.ɵɵelement(10, "i", 101);
|
|
830
846
|
i0.ɵɵelementStart(11, "span");
|
|
831
847
|
i0.ɵɵtext(12);
|
|
832
848
|
i0.ɵɵpipe(13, "date");
|
|
833
849
|
i0.ɵɵelementEnd()();
|
|
834
|
-
i0.ɵɵelementStart(14, "div",
|
|
835
|
-
i0.ɵɵelement(15, "i",
|
|
850
|
+
i0.ɵɵelementStart(14, "div", 119);
|
|
851
|
+
i0.ɵɵelement(15, "i", 120);
|
|
836
852
|
i0.ɵɵelementStart(16, "span");
|
|
837
853
|
i0.ɵɵtext(17);
|
|
838
854
|
i0.ɵɵelementEnd()()()();
|
|
@@ -846,7 +862,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_templa
|
|
|
846
862
|
i0.ɵɵtextInterpolate1("Total Retry Duration: ", ctx_r1.formatDuration(ctx_r1.record.TotalRetryDurationMS), "");
|
|
847
863
|
} }
|
|
848
864
|
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",
|
|
865
|
+
i0.ɵɵelementStart(0, "span", 116);
|
|
850
866
|
i0.ɵɵtext(1);
|
|
851
867
|
i0.ɵɵelementEnd();
|
|
852
868
|
} if (rf & 2) {
|
|
@@ -855,10 +871,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_templa
|
|
|
855
871
|
i0.ɵɵtextInterpolate1("(", attempt_r13.validationErrorCount, " errors)");
|
|
856
872
|
} }
|
|
857
873
|
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",
|
|
874
|
+
i0.ɵɵelementStart(0, "span", 128);
|
|
859
875
|
i0.ɵɵtext(1);
|
|
860
876
|
i0.ɵɵelementEnd();
|
|
861
|
-
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span",
|
|
877
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 116);
|
|
862
878
|
} if (rf & 2) {
|
|
863
879
|
const attempt_r13 = i0.ɵɵnextContext().$implicit;
|
|
864
880
|
i0.ɵɵadvance();
|
|
@@ -867,7 +883,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_templa
|
|
|
867
883
|
i0.ɵɵconditional(attempt_r13.validationErrorCount > 0 ? 2 : -1);
|
|
868
884
|
} }
|
|
869
885
|
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",
|
|
886
|
+
i0.ɵɵelementStart(0, "span", 127);
|
|
871
887
|
i0.ɵɵtext(1);
|
|
872
888
|
i0.ɵɵelementEnd();
|
|
873
889
|
} if (rf & 2) {
|
|
@@ -876,14 +892,14 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_templa
|
|
|
876
892
|
i0.ɵɵtextInterpolate1("Output: ", attempt_r13.outputLength, " chars");
|
|
877
893
|
} }
|
|
878
894
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
879
|
-
i0.ɵɵelementStart(0, "div",
|
|
895
|
+
i0.ɵɵelementStart(0, "div", 123)(1, "div", 124);
|
|
880
896
|
i0.ɵɵelement(2, "i");
|
|
881
897
|
i0.ɵɵtext(3);
|
|
882
898
|
i0.ɵɵelementEnd();
|
|
883
|
-
i0.ɵɵelementStart(4, "div",
|
|
899
|
+
i0.ɵɵelementStart(4, "div", 125)(5, "span", 126);
|
|
884
900
|
i0.ɵɵtext(6);
|
|
885
901
|
i0.ɵɵelementEnd();
|
|
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",
|
|
902
|
+
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", 127);
|
|
887
903
|
i0.ɵɵelementEnd()();
|
|
888
904
|
} if (rf & 2) {
|
|
889
905
|
const attempt_r13 = ctx.$implicit;
|
|
@@ -900,11 +916,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_templa
|
|
|
900
916
|
i0.ɵɵconditional(attempt_r13.outputLength ? 8 : -1);
|
|
901
917
|
} }
|
|
902
918
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
903
|
-
i0.ɵɵelementStart(0, "div",
|
|
919
|
+
i0.ɵɵelementStart(0, "div", 114)(1, "h4");
|
|
904
920
|
i0.ɵɵtext(2, "Validation Attempts");
|
|
905
921
|
i0.ɵɵelementEnd();
|
|
906
|
-
i0.ɵɵelementStart(3, "div",
|
|
907
|
-
i0.ɵɵrepeaterCreate(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_For_5_Template, 9, 10, "div",
|
|
922
|
+
i0.ɵɵelementStart(3, "div", 121);
|
|
923
|
+
i0.ɵɵrepeaterCreate(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_For_5_Template, 9, 10, "div", 122, _forTrack0);
|
|
908
924
|
i0.ɵɵelementEnd()();
|
|
909
925
|
} if (rf & 2) {
|
|
910
926
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -913,10 +929,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_templa
|
|
|
913
929
|
} }
|
|
914
930
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
915
931
|
const _r14 = i0.ɵɵgetCurrentView();
|
|
916
|
-
i0.ɵɵelementStart(0, "div",
|
|
932
|
+
i0.ɵɵelementStart(0, "div", 115)(1, "h4");
|
|
917
933
|
i0.ɵɵtext(2, "Validation Summary Details");
|
|
918
934
|
i0.ɵɵelementEnd();
|
|
919
|
-
i0.ɵɵelementStart(3, "div",
|
|
935
|
+
i0.ɵɵelementStart(3, "div", 129)(4, "mj-code-editor", 130);
|
|
920
936
|
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); });
|
|
921
937
|
i0.ɵɵelementEnd()()();
|
|
922
938
|
} if (rf & 2) {
|
|
@@ -927,10 +943,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_templa
|
|
|
927
943
|
} }
|
|
928
944
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
929
945
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
930
|
-
i0.ɵɵelementStart(0, "div",
|
|
946
|
+
i0.ɵɵelementStart(0, "div", 115)(1, "h4");
|
|
931
947
|
i0.ɵɵtext(2, "Validation Attempts (Raw JSON)");
|
|
932
948
|
i0.ɵɵelementEnd();
|
|
933
|
-
i0.ɵɵelementStart(3, "div",
|
|
949
|
+
i0.ɵɵelementStart(3, "div", 129)(4, "mj-code-editor", 131);
|
|
934
950
|
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); });
|
|
935
951
|
i0.ɵɵelementEnd()()();
|
|
936
952
|
} if (rf & 2) {
|
|
@@ -940,40 +956,40 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_templa
|
|
|
940
956
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
941
957
|
} }
|
|
942
958
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
943
|
-
i0.ɵɵelementStart(0, "div",
|
|
959
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "div", 106)(2, "div", 107)(3, "h4");
|
|
944
960
|
i0.ɵɵtext(4, "Validation Summary");
|
|
945
961
|
i0.ɵɵelementEnd();
|
|
946
|
-
i0.ɵɵelementStart(5, "div",
|
|
962
|
+
i0.ɵɵelementStart(5, "div", 108);
|
|
947
963
|
i0.ɵɵelement(6, "i");
|
|
948
964
|
i0.ɵɵtext(7);
|
|
949
965
|
i0.ɵɵelementEnd()();
|
|
950
|
-
i0.ɵɵelementStart(8, "div",
|
|
966
|
+
i0.ɵɵelementStart(8, "div", 109)(9, "div", 110)(10, "div", 42);
|
|
951
967
|
i0.ɵɵtext(11, "Total Attempts");
|
|
952
968
|
i0.ɵɵelementEnd();
|
|
953
969
|
i0.ɵɵelementStart(12, "div", 43);
|
|
954
970
|
i0.ɵɵtext(13);
|
|
955
971
|
i0.ɵɵelementEnd()();
|
|
956
|
-
i0.ɵɵelementStart(14, "div",
|
|
972
|
+
i0.ɵɵelementStart(14, "div", 110)(15, "div", 42);
|
|
957
973
|
i0.ɵɵtext(16, "Successful");
|
|
958
974
|
i0.ɵɵelementEnd();
|
|
959
975
|
i0.ɵɵelementStart(17, "div", 43);
|
|
960
976
|
i0.ɵɵtext(18);
|
|
961
977
|
i0.ɵɵelementEnd()();
|
|
962
|
-
i0.ɵɵelementStart(19, "div",
|
|
978
|
+
i0.ɵɵelementStart(19, "div", 110)(20, "div", 42);
|
|
963
979
|
i0.ɵɵtext(21, "Behavior");
|
|
964
980
|
i0.ɵɵelementEnd();
|
|
965
981
|
i0.ɵɵelementStart(22, "div", 43);
|
|
966
982
|
i0.ɵɵtext(23);
|
|
967
983
|
i0.ɵɵelementEnd()();
|
|
968
|
-
i0.ɵɵelementStart(24, "div",
|
|
984
|
+
i0.ɵɵelementStart(24, "div", 110)(25, "div", 42);
|
|
969
985
|
i0.ɵɵtext(26, "Retry Strategy");
|
|
970
986
|
i0.ɵɵelementEnd();
|
|
971
987
|
i0.ɵɵelementStart(27, "div", 43);
|
|
972
988
|
i0.ɵɵtext(28);
|
|
973
989
|
i0.ɵɵelementEnd()()();
|
|
974
|
-
i0.ɵɵtemplate(29, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_29_Template, 7, 2, "div",
|
|
990
|
+
i0.ɵɵtemplate(29, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_29_Template, 7, 2, "div", 111)(30, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_30_Template, 6, 1, "div", 112);
|
|
975
991
|
i0.ɵɵelementEnd();
|
|
976
|
-
i0.ɵɵtemplate(31, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_31_Template, 18, 9, "div",
|
|
992
|
+
i0.ɵɵtemplate(31, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_31_Template, 18, 9, "div", 113)(32, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_32_Template, 6, 0, "div", 114)(33, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_33_Template, 5, 4, "div", 115)(34, AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_ng_template_2_Conditional_34_Template, 5, 4, "div", 115);
|
|
977
993
|
i0.ɵɵelementEnd();
|
|
978
994
|
} if (rf & 2) {
|
|
979
995
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1015,7 +1031,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_40_Template(
|
|
|
1015
1031
|
i0.ɵɵproperty("expanded", ctx_r1.validationExpanded);
|
|
1016
1032
|
} }
|
|
1017
1033
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1018
|
-
i0.ɵɵelementStart(0, "span",
|
|
1034
|
+
i0.ɵɵelementStart(0, "span", 71);
|
|
1019
1035
|
i0.ɵɵtext(1);
|
|
1020
1036
|
i0.ɵɵelementEnd();
|
|
1021
1037
|
} if (rf & 2) {
|
|
@@ -1024,10 +1040,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_templa
|
|
|
1024
1040
|
i0.ɵɵtextInterpolate1("(", ctx_r1.childRuns.length, " children)");
|
|
1025
1041
|
} }
|
|
1026
1042
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1027
|
-
i0.ɵɵelementStart(0, "span",
|
|
1028
|
-
i0.ɵɵelement(1, "i",
|
|
1043
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
1044
|
+
i0.ɵɵelement(1, "i", 132);
|
|
1029
1045
|
i0.ɵɵtext(2, " Run Hierarchy ");
|
|
1030
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_1_Conditional_3_Template, 2, 1, "span",
|
|
1046
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_1_Conditional_3_Template, 2, 1, "span", 71);
|
|
1031
1047
|
i0.ɵɵelementEnd();
|
|
1032
1048
|
} if (rf & 2) {
|
|
1033
1049
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1036,21 +1052,21 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_templa
|
|
|
1036
1052
|
} }
|
|
1037
1053
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1038
1054
|
const _r16 = i0.ɵɵgetCurrentView();
|
|
1039
|
-
i0.ɵɵelementStart(0, "div",
|
|
1055
|
+
i0.ɵɵelementStart(0, "div", 133)(1, "h4");
|
|
1040
1056
|
i0.ɵɵelement(2, "i", 37);
|
|
1041
1057
|
i0.ɵɵtext(3, " Parent Run");
|
|
1042
1058
|
i0.ɵɵelementEnd();
|
|
1043
|
-
i0.ɵɵelementStart(4, "div",
|
|
1059
|
+
i0.ɵɵelementStart(4, "div", 135);
|
|
1044
1060
|
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",
|
|
1061
|
+
i0.ɵɵelementStart(5, "div", 136);
|
|
1046
1062
|
i0.ɵɵelement(6, "i");
|
|
1047
1063
|
i0.ɵɵelementEnd();
|
|
1048
|
-
i0.ɵɵelementStart(7, "div",
|
|
1064
|
+
i0.ɵɵelementStart(7, "div", 137)(8, "div", 138);
|
|
1049
1065
|
i0.ɵɵtext(9);
|
|
1050
|
-
i0.ɵɵelementStart(10, "span",
|
|
1066
|
+
i0.ɵɵelementStart(10, "span", 139);
|
|
1051
1067
|
i0.ɵɵtext(11);
|
|
1052
1068
|
i0.ɵɵelementEnd()();
|
|
1053
|
-
i0.ɵɵelementStart(12, "div",
|
|
1069
|
+
i0.ɵɵelementStart(12, "div", 140)(13, "span");
|
|
1054
1070
|
i0.ɵɵelement(14, "i", 45);
|
|
1055
1071
|
i0.ɵɵtext(15);
|
|
1056
1072
|
i0.ɵɵelementEnd();
|
|
@@ -1059,11 +1075,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_templa
|
|
|
1059
1075
|
i0.ɵɵtext(18);
|
|
1060
1076
|
i0.ɵɵelementEnd();
|
|
1061
1077
|
i0.ɵɵelementStart(19, "span");
|
|
1062
|
-
i0.ɵɵelement(20, "i",
|
|
1078
|
+
i0.ɵɵelement(20, "i", 53);
|
|
1063
1079
|
i0.ɵɵtext(21);
|
|
1064
1080
|
i0.ɵɵpipe(22, "date");
|
|
1065
1081
|
i0.ɵɵelementEnd()()();
|
|
1066
|
-
i0.ɵɵelement(23, "i",
|
|
1082
|
+
i0.ɵɵelement(23, "i", 103);
|
|
1067
1083
|
i0.ɵɵelementEnd()();
|
|
1068
1084
|
} if (rf & 2) {
|
|
1069
1085
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -1083,7 +1099,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_templa
|
|
|
1083
1099
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"), "");
|
|
1084
1100
|
} }
|
|
1085
1101
|
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",
|
|
1102
|
+
i0.ɵɵelementStart(0, "span", 145);
|
|
1087
1103
|
i0.ɵɵtext(1);
|
|
1088
1104
|
i0.ɵɵelementEnd();
|
|
1089
1105
|
} if (rf & 2) {
|
|
@@ -1093,18 +1109,18 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_templa
|
|
|
1093
1109
|
} }
|
|
1094
1110
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
1095
1111
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
1096
|
-
i0.ɵɵelementStart(0, "div",
|
|
1112
|
+
i0.ɵɵelementStart(0, "div", 144);
|
|
1097
1113
|
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",
|
|
1114
|
+
i0.ɵɵelementStart(1, "div", 136);
|
|
1099
1115
|
i0.ɵɵelement(2, "i");
|
|
1100
1116
|
i0.ɵɵelementEnd();
|
|
1101
|
-
i0.ɵɵelementStart(3, "div",
|
|
1117
|
+
i0.ɵɵelementStart(3, "div", 137)(4, "div", 138);
|
|
1102
1118
|
i0.ɵɵtext(5);
|
|
1103
|
-
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_For_6_Conditional_6_Template, 2, 1, "span",
|
|
1104
|
-
i0.ɵɵelementStart(7, "span",
|
|
1119
|
+
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_For_6_Conditional_6_Template, 2, 1, "span", 145);
|
|
1120
|
+
i0.ɵɵelementStart(7, "span", 139);
|
|
1105
1121
|
i0.ɵɵtext(8);
|
|
1106
1122
|
i0.ɵɵelementEnd()();
|
|
1107
|
-
i0.ɵɵelementStart(9, "div",
|
|
1123
|
+
i0.ɵɵelementStart(9, "div", 140)(10, "span", 146);
|
|
1108
1124
|
i0.ɵɵelement(11, "i");
|
|
1109
1125
|
i0.ɵɵtext(12);
|
|
1110
1126
|
i0.ɵɵelementEnd();
|
|
@@ -1116,7 +1132,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_templa
|
|
|
1116
1132
|
i0.ɵɵelement(17, "i", 46);
|
|
1117
1133
|
i0.ɵɵtext(18);
|
|
1118
1134
|
i0.ɵɵelementEnd()()();
|
|
1119
|
-
i0.ɵɵelement(19, "i",
|
|
1135
|
+
i0.ɵɵelement(19, "i", 103);
|
|
1120
1136
|
i0.ɵɵelementEnd();
|
|
1121
1137
|
} if (rf & 2) {
|
|
1122
1138
|
const childRun_r18 = ctx.$implicit;
|
|
@@ -1143,12 +1159,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_templa
|
|
|
1143
1159
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r18.TokensUsed), "");
|
|
1144
1160
|
} }
|
|
1145
1161
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1146
|
-
i0.ɵɵelementStart(0, "div",
|
|
1147
|
-
i0.ɵɵelement(2, "i",
|
|
1162
|
+
i0.ɵɵelementStart(0, "div", 134)(1, "h4");
|
|
1163
|
+
i0.ɵɵelement(2, "i", 141);
|
|
1148
1164
|
i0.ɵɵtext(3, " Child Runs");
|
|
1149
1165
|
i0.ɵɵelementEnd();
|
|
1150
|
-
i0.ɵɵelementStart(4, "div",
|
|
1151
|
-
i0.ɵɵrepeaterCreate(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_For_6_Template, 20, 14, "div",
|
|
1166
|
+
i0.ɵɵelementStart(4, "div", 142);
|
|
1167
|
+
i0.ɵɵrepeaterCreate(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_For_6_Template, 20, 14, "div", 143, _forTrack1);
|
|
1152
1168
|
i0.ɵɵelementEnd()();
|
|
1153
1169
|
} if (rf & 2) {
|
|
1154
1170
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -1156,8 +1172,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_templa
|
|
|
1156
1172
|
i0.ɵɵrepeater(ctx_r1.childRuns);
|
|
1157
1173
|
} }
|
|
1158
1174
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
1159
|
-
i0.ɵɵelementStart(0, "div",
|
|
1160
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_1_Template, 24, 12, "div",
|
|
1175
|
+
i0.ɵɵelementStart(0, "div", 56);
|
|
1176
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_1_Template, 24, 12, "div", 133)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_ng_template_2_Conditional_2_Template, 7, 0, "div", 134);
|
|
1161
1177
|
i0.ɵɵelementEnd();
|
|
1162
1178
|
} if (rf & 2) {
|
|
1163
1179
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1175,21 +1191,21 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_41_Template(
|
|
|
1175
1191
|
i0.ɵɵproperty("expanded", ctx_r1.hierarchyExpanded);
|
|
1176
1192
|
} }
|
|
1177
1193
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_43_Template(rf, ctx) { if (rf & 1) {
|
|
1178
|
-
i0.ɵɵelementStart(0, "span",
|
|
1179
|
-
i0.ɵɵelement(1, "i",
|
|
1194
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
1195
|
+
i0.ɵɵelement(1, "i", 147);
|
|
1180
1196
|
i0.ɵɵtext(2, " Additional Details ");
|
|
1181
1197
|
i0.ɵɵelementEnd();
|
|
1182
1198
|
} }
|
|
1183
1199
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1184
1200
|
const _r19 = i0.ɵɵgetCurrentView();
|
|
1185
|
-
i0.ɵɵelementStart(0, "div",
|
|
1201
|
+
i0.ɵɵelementStart(0, "div", 149)(1, "label");
|
|
1186
1202
|
i0.ɵɵtext(2, "Agent");
|
|
1187
1203
|
i0.ɵɵelementEnd();
|
|
1188
|
-
i0.ɵɵelementStart(3, "div",
|
|
1204
|
+
i0.ɵɵelementStart(3, "div", 154);
|
|
1189
1205
|
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",
|
|
1206
|
+
i0.ɵɵelement(4, "i", 155);
|
|
1191
1207
|
i0.ɵɵtext(5);
|
|
1192
|
-
i0.ɵɵelement(6, "i",
|
|
1208
|
+
i0.ɵɵelement(6, "i", 103);
|
|
1193
1209
|
i0.ɵɵelementEnd()();
|
|
1194
1210
|
} if (rf & 2) {
|
|
1195
1211
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1197,10 +1213,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Condition
|
|
|
1197
1213
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Unknown", " ");
|
|
1198
1214
|
} }
|
|
1199
1215
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1200
|
-
i0.ɵɵelementStart(0, "div",
|
|
1216
|
+
i0.ɵɵelementStart(0, "div", 149)(1, "label");
|
|
1201
1217
|
i0.ɵɵtext(2, "Run Type");
|
|
1202
1218
|
i0.ɵɵelementEnd();
|
|
1203
|
-
i0.ɵɵelementStart(3, "div",
|
|
1219
|
+
i0.ɵɵelementStart(3, "div", 150);
|
|
1204
1220
|
i0.ɵɵelement(4, "i");
|
|
1205
1221
|
i0.ɵɵtext(5);
|
|
1206
1222
|
i0.ɵɵelementEnd()();
|
|
@@ -1212,11 +1228,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Condition
|
|
|
1212
1228
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
|
|
1213
1229
|
} }
|
|
1214
1230
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1215
|
-
i0.ɵɵelementStart(0, "div",
|
|
1231
|
+
i0.ɵɵelementStart(0, "div", 149)(1, "label");
|
|
1216
1232
|
i0.ɵɵtext(2, "Response Format");
|
|
1217
1233
|
i0.ɵɵelementEnd();
|
|
1218
|
-
i0.ɵɵelementStart(3, "div",
|
|
1219
|
-
i0.ɵɵelement(4, "i",
|
|
1234
|
+
i0.ɵɵelementStart(3, "div", 150);
|
|
1235
|
+
i0.ɵɵelement(4, "i", 52);
|
|
1220
1236
|
i0.ɵɵtext(5);
|
|
1221
1237
|
i0.ɵɵelementEnd()();
|
|
1222
1238
|
} if (rf & 2) {
|
|
@@ -1225,10 +1241,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Condition
|
|
|
1225
1241
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.ResponseFormat, " ");
|
|
1226
1242
|
} }
|
|
1227
1243
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_47_Template(rf, ctx) { if (rf & 1) {
|
|
1228
|
-
i0.ɵɵelementStart(0, "div",
|
|
1244
|
+
i0.ɵɵelementStart(0, "div", 149)(1, "label");
|
|
1229
1245
|
i0.ɵɵtext(2, "Started At");
|
|
1230
1246
|
i0.ɵɵelementEnd();
|
|
1231
|
-
i0.ɵɵelementStart(3, "div",
|
|
1247
|
+
i0.ɵɵelementStart(3, "div", 150);
|
|
1232
1248
|
i0.ɵɵelement(4, "i", 45);
|
|
1233
1249
|
i0.ɵɵtext(5);
|
|
1234
1250
|
i0.ɵɵpipe(6, "date");
|
|
@@ -1239,11 +1255,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Condition
|
|
|
1239
1255
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.RunAt, "medium"), " ");
|
|
1240
1256
|
} }
|
|
1241
1257
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_48_Template(rf, ctx) { if (rf & 1) {
|
|
1242
|
-
i0.ɵɵelementStart(0, "div",
|
|
1258
|
+
i0.ɵɵelementStart(0, "div", 149)(1, "label");
|
|
1243
1259
|
i0.ɵɵtext(2, "Completed At");
|
|
1244
1260
|
i0.ɵɵelementEnd();
|
|
1245
|
-
i0.ɵɵelementStart(3, "div",
|
|
1246
|
-
i0.ɵɵelement(4, "i",
|
|
1261
|
+
i0.ɵɵelementStart(3, "div", 150);
|
|
1262
|
+
i0.ɵɵelement(4, "i", 156);
|
|
1247
1263
|
i0.ɵɵtext(5);
|
|
1248
1264
|
i0.ɵɵpipe(6, "date");
|
|
1249
1265
|
i0.ɵɵelementEnd()();
|
|
@@ -1253,58 +1269,58 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Condition
|
|
|
1253
1269
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.CompletedAt, "medium"), " ");
|
|
1254
1270
|
} }
|
|
1255
1271
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Template(rf, ctx) { if (rf & 1) {
|
|
1256
|
-
i0.ɵɵelementStart(0, "div",
|
|
1257
|
-
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_2_Template, 7, 1, "div",
|
|
1258
|
-
i0.ɵɵelementStart(5, "div",
|
|
1272
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "div", 148);
|
|
1273
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_2_Template, 7, 1, "div", 149)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_3_Template, 6, 3, "div", 149)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_4_Template, 6, 1, "div", 149);
|
|
1274
|
+
i0.ɵɵelementStart(5, "div", 149)(6, "label");
|
|
1259
1275
|
i0.ɵɵtext(7, "Temperature");
|
|
1260
1276
|
i0.ɵɵelementEnd();
|
|
1261
|
-
i0.ɵɵelementStart(8, "div",
|
|
1277
|
+
i0.ɵɵelementStart(8, "div", 150);
|
|
1262
1278
|
i0.ɵɵelement(9, "i", 48);
|
|
1263
1279
|
i0.ɵɵtext(10);
|
|
1264
1280
|
i0.ɵɵelementEnd()();
|
|
1265
|
-
i0.ɵɵelementStart(11, "div",
|
|
1281
|
+
i0.ɵɵelementStart(11, "div", 149)(12, "label");
|
|
1266
1282
|
i0.ɵɵtext(13, "Top P");
|
|
1267
1283
|
i0.ɵɵelementEnd();
|
|
1268
|
-
i0.ɵɵelementStart(14, "div",
|
|
1284
|
+
i0.ɵɵelementStart(14, "div", 150);
|
|
1269
1285
|
i0.ɵɵelement(15, "i", 49);
|
|
1270
1286
|
i0.ɵɵtext(16);
|
|
1271
1287
|
i0.ɵɵelementEnd()();
|
|
1272
|
-
i0.ɵɵelementStart(17, "div",
|
|
1288
|
+
i0.ɵɵelementStart(17, "div", 149)(18, "label");
|
|
1273
1289
|
i0.ɵɵtext(19, "Top K");
|
|
1274
1290
|
i0.ɵɵelementEnd();
|
|
1275
|
-
i0.ɵɵelementStart(20, "div",
|
|
1291
|
+
i0.ɵɵelementStart(20, "div", 150);
|
|
1276
1292
|
i0.ɵɵelement(21, "i", 50);
|
|
1277
1293
|
i0.ɵɵtext(22);
|
|
1278
1294
|
i0.ɵɵelementEnd()();
|
|
1279
|
-
i0.ɵɵelementStart(23, "div",
|
|
1295
|
+
i0.ɵɵelementStart(23, "div", 149)(24, "label");
|
|
1280
1296
|
i0.ɵɵtext(25, "Min P");
|
|
1281
1297
|
i0.ɵɵelementEnd();
|
|
1282
|
-
i0.ɵɵelementStart(26, "div",
|
|
1283
|
-
i0.ɵɵelement(27, "i",
|
|
1298
|
+
i0.ɵɵelementStart(26, "div", 150);
|
|
1299
|
+
i0.ɵɵelement(27, "i", 151);
|
|
1284
1300
|
i0.ɵɵtext(28);
|
|
1285
1301
|
i0.ɵɵelementEnd()();
|
|
1286
|
-
i0.ɵɵelementStart(29, "div",
|
|
1302
|
+
i0.ɵɵelementStart(29, "div", 149)(30, "label");
|
|
1287
1303
|
i0.ɵɵtext(31, "Frequency Penalty");
|
|
1288
1304
|
i0.ɵɵelementEnd();
|
|
1289
|
-
i0.ɵɵelementStart(32, "div",
|
|
1290
|
-
i0.ɵɵelement(33, "i",
|
|
1305
|
+
i0.ɵɵelementStart(32, "div", 150);
|
|
1306
|
+
i0.ɵɵelement(33, "i", 117);
|
|
1291
1307
|
i0.ɵɵtext(34);
|
|
1292
1308
|
i0.ɵɵelementEnd()();
|
|
1293
|
-
i0.ɵɵelementStart(35, "div",
|
|
1309
|
+
i0.ɵɵelementStart(35, "div", 149)(36, "label");
|
|
1294
1310
|
i0.ɵɵtext(37, "Presence Penalty");
|
|
1295
1311
|
i0.ɵɵelementEnd();
|
|
1296
|
-
i0.ɵɵelementStart(38, "div",
|
|
1297
|
-
i0.ɵɵelement(39, "i",
|
|
1312
|
+
i0.ɵɵelementStart(38, "div", 150);
|
|
1313
|
+
i0.ɵɵelement(39, "i", 152);
|
|
1298
1314
|
i0.ɵɵtext(40);
|
|
1299
1315
|
i0.ɵɵelementEnd()();
|
|
1300
|
-
i0.ɵɵelementStart(41, "div",
|
|
1316
|
+
i0.ɵɵelementStart(41, "div", 149)(42, "label");
|
|
1301
1317
|
i0.ɵɵtext(43, "Seed");
|
|
1302
1318
|
i0.ɵɵelementEnd();
|
|
1303
|
-
i0.ɵɵelementStart(44, "div",
|
|
1304
|
-
i0.ɵɵelement(45, "i",
|
|
1319
|
+
i0.ɵɵelementStart(44, "div", 150);
|
|
1320
|
+
i0.ɵɵelement(45, "i", 153);
|
|
1305
1321
|
i0.ɵɵtext(46);
|
|
1306
1322
|
i0.ɵɵelementEnd()();
|
|
1307
|
-
i0.ɵɵtemplate(47, AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_47_Template, 7, 4, "div",
|
|
1323
|
+
i0.ɵɵtemplate(47, AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_47_Template, 7, 4, "div", 149)(48, AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Conditional_48_Template, 7, 4, "div", 149);
|
|
1308
1324
|
i0.ɵɵelementEnd()();
|
|
1309
1325
|
} if (rf & 2) {
|
|
1310
1326
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1348,21 +1364,21 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_44_Template(
|
|
|
1348
1364
|
i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 48 : -1);
|
|
1349
1365
|
} }
|
|
1350
1366
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1351
|
-
i0.ɵɵelementStart(0, "span",
|
|
1367
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
1352
1368
|
i0.ɵɵelement(1, "i", 34);
|
|
1353
1369
|
i0.ɵɵtext(2, " Model Specific Response Details ");
|
|
1354
|
-
i0.ɵɵelementStart(3, "span",
|
|
1370
|
+
i0.ɵɵelementStart(3, "span", 55);
|
|
1355
1371
|
i0.ɵɵtext(4, "JSON");
|
|
1356
1372
|
i0.ɵɵelementEnd()();
|
|
1357
1373
|
} }
|
|
1358
1374
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
1359
1375
|
const _r21 = i0.ɵɵgetCurrentView();
|
|
1360
|
-
i0.ɵɵelementStart(0, "div",
|
|
1376
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "div", 64)(2, "div", 65)(3, "button", 66);
|
|
1361
1377
|
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",
|
|
1378
|
+
i0.ɵɵelement(4, "i", 67);
|
|
1363
1379
|
i0.ɵɵtext(5, " Copy ");
|
|
1364
1380
|
i0.ɵɵelementEnd()();
|
|
1365
|
-
i0.ɵɵelementStart(6, "mj-code-editor",
|
|
1381
|
+
i0.ɵɵelementStart(6, "mj-code-editor", 157);
|
|
1366
1382
|
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); });
|
|
1367
1383
|
i0.ɵɵelementEnd()()();
|
|
1368
1384
|
} if (rf & 2) {
|
|
@@ -1382,20 +1398,20 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_45_Template(
|
|
|
1382
1398
|
i0.ɵɵproperty("expanded", ctx_r1.modelSpecificExpanded);
|
|
1383
1399
|
} }
|
|
1384
1400
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_47_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1385
|
-
i0.ɵɵelementStart(0, "span",
|
|
1401
|
+
i0.ɵɵelementStart(0, "span", 105);
|
|
1386
1402
|
i0.ɵɵtext(1, "Cached");
|
|
1387
1403
|
i0.ɵɵelementEnd();
|
|
1388
1404
|
} }
|
|
1389
1405
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_47_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1390
|
-
i0.ɵɵelementStart(0, "span",
|
|
1406
|
+
i0.ɵɵelementStart(0, "span", 105);
|
|
1391
1407
|
i0.ɵɵtext(1, "Selected");
|
|
1392
1408
|
i0.ɵɵelementEnd();
|
|
1393
1409
|
} }
|
|
1394
1410
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_47_Template(rf, ctx) { if (rf & 1) {
|
|
1395
|
-
i0.ɵɵelementStart(0, "span",
|
|
1411
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
1396
1412
|
i0.ɵɵelement(1, "i", 34);
|
|
1397
1413
|
i0.ɵɵtext(2, " Model Selection & Performance ");
|
|
1398
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_47_Conditional_3_Template, 2, 0, "span",
|
|
1414
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_47_Conditional_3_Template, 2, 0, "span", 105)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_47_Conditional_4_Template, 2, 0, "span", 105);
|
|
1399
1415
|
i0.ɵɵelementEnd();
|
|
1400
1416
|
} if (rf & 2) {
|
|
1401
1417
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1405,11 +1421,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_47_Template(
|
|
|
1405
1421
|
i0.ɵɵconditional(ctx_r1.record.WasSelectedResult ? 4 : -1);
|
|
1406
1422
|
} }
|
|
1407
1423
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
1408
|
-
i0.ɵɵelementStart(0, "div",
|
|
1424
|
+
i0.ɵɵelementStart(0, "div", 160)(1, "label");
|
|
1409
1425
|
i0.ɵɵtext(2, "Cache Key");
|
|
1410
1426
|
i0.ɵɵelementEnd();
|
|
1411
|
-
i0.ɵɵelementStart(3, "div",
|
|
1412
|
-
i0.ɵɵelement(4, "i",
|
|
1427
|
+
i0.ɵɵelementStart(3, "div", 150);
|
|
1428
|
+
i0.ɵɵelement(4, "i", 163);
|
|
1413
1429
|
i0.ɵɵelementStart(5, "code");
|
|
1414
1430
|
i0.ɵɵtext(6);
|
|
1415
1431
|
i0.ɵɵelementEnd()()();
|
|
@@ -1420,14 +1436,14 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Condition
|
|
|
1420
1436
|
} }
|
|
1421
1437
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
1422
1438
|
const _r22 = i0.ɵɵgetCurrentView();
|
|
1423
|
-
i0.ɵɵelementStart(0, "div",
|
|
1439
|
+
i0.ɵɵelementStart(0, "div", 149)(1, "label");
|
|
1424
1440
|
i0.ɵɵtext(2, "Judge Prompt");
|
|
1425
1441
|
i0.ɵɵelementEnd();
|
|
1426
|
-
i0.ɵɵelementStart(3, "div",
|
|
1442
|
+
i0.ɵɵelementStart(3, "div", 164);
|
|
1427
1443
|
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",
|
|
1444
|
+
i0.ɵɵelement(4, "i", 165);
|
|
1429
1445
|
i0.ɵɵtext(5);
|
|
1430
|
-
i0.ɵɵelement(6, "i",
|
|
1446
|
+
i0.ɵɵelement(6, "i", 103);
|
|
1431
1447
|
i0.ɵɵelementEnd()();
|
|
1432
1448
|
} if (rf & 2) {
|
|
1433
1449
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1435,11 +1451,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Condition
|
|
|
1435
1451
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Judge || "Unknown", " ");
|
|
1436
1452
|
} }
|
|
1437
1453
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
1438
|
-
i0.ɵɵelementStart(0, "div",
|
|
1454
|
+
i0.ɵɵelementStart(0, "div", 149)(1, "label");
|
|
1439
1455
|
i0.ɵɵtext(2, "Judge Score");
|
|
1440
1456
|
i0.ɵɵelementEnd();
|
|
1441
|
-
i0.ɵɵelementStart(3, "div",
|
|
1442
|
-
i0.ɵɵelement(4, "i",
|
|
1457
|
+
i0.ɵɵelementStart(3, "div", 150);
|
|
1458
|
+
i0.ɵɵelement(4, "i", 166);
|
|
1443
1459
|
i0.ɵɵtext(5);
|
|
1444
1460
|
i0.ɵɵelementEnd()();
|
|
1445
1461
|
} if (rf & 2) {
|
|
@@ -1448,11 +1464,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Condition
|
|
|
1448
1464
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.JudgeScore, " ");
|
|
1449
1465
|
} }
|
|
1450
1466
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
1451
|
-
i0.ɵɵelementStart(0, "div",
|
|
1467
|
+
i0.ɵɵelementStart(0, "div", 149)(1, "label");
|
|
1452
1468
|
i0.ɵɵtext(2, "First Token Time");
|
|
1453
1469
|
i0.ɵɵelementEnd();
|
|
1454
|
-
i0.ɵɵelementStart(3, "div",
|
|
1455
|
-
i0.ɵɵelement(4, "i",
|
|
1470
|
+
i0.ɵɵelementStart(3, "div", 150);
|
|
1471
|
+
i0.ɵɵelement(4, "i", 167);
|
|
1456
1472
|
i0.ɵɵtext(5);
|
|
1457
1473
|
i0.ɵɵelementEnd()();
|
|
1458
1474
|
} if (rf & 2) {
|
|
@@ -1461,11 +1477,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Condition
|
|
|
1461
1477
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.FirstTokenTime, " ms ");
|
|
1462
1478
|
} }
|
|
1463
1479
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_42_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1464
|
-
i0.ɵɵelementStart(0, "div",
|
|
1480
|
+
i0.ɵɵelementStart(0, "div", 160)(1, "label");
|
|
1465
1481
|
i0.ɵɵtext(2, "Cancellation Reason");
|
|
1466
1482
|
i0.ɵɵelementEnd();
|
|
1467
|
-
i0.ɵɵelementStart(3, "div",
|
|
1468
|
-
i0.ɵɵelement(4, "i",
|
|
1483
|
+
i0.ɵɵelementStart(3, "div", 150);
|
|
1484
|
+
i0.ɵɵelement(4, "i", 170);
|
|
1469
1485
|
i0.ɵɵtext(5);
|
|
1470
1486
|
i0.ɵɵelementEnd()();
|
|
1471
1487
|
} if (rf & 2) {
|
|
@@ -1474,14 +1490,14 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Condition
|
|
|
1474
1490
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CancellationReason, " ");
|
|
1475
1491
|
} }
|
|
1476
1492
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
1477
|
-
i0.ɵɵelementStart(0, "div",
|
|
1493
|
+
i0.ɵɵelementStart(0, "div", 149)(1, "label");
|
|
1478
1494
|
i0.ɵɵtext(2, "Cancelled");
|
|
1479
1495
|
i0.ɵɵelementEnd();
|
|
1480
|
-
i0.ɵɵelementStart(3, "div",
|
|
1481
|
-
i0.ɵɵelement(4, "i",
|
|
1496
|
+
i0.ɵɵelementStart(3, "div", 168);
|
|
1497
|
+
i0.ɵɵelement(4, "i", 169);
|
|
1482
1498
|
i0.ɵɵtext(5, " Yes ");
|
|
1483
1499
|
i0.ɵɵelementEnd()();
|
|
1484
|
-
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_42_Conditional_6_Template, 6, 1, "div",
|
|
1500
|
+
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_42_Conditional_6_Template, 6, 1, "div", 160);
|
|
1485
1501
|
} if (rf & 2) {
|
|
1486
1502
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1487
1503
|
i0.ɵɵadvance(6);
|
|
@@ -1489,10 +1505,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Condition
|
|
|
1489
1505
|
} }
|
|
1490
1506
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
1491
1507
|
const _r23 = i0.ɵɵgetCurrentView();
|
|
1492
|
-
i0.ɵɵelementStart(0, "div",
|
|
1508
|
+
i0.ɵɵelementStart(0, "div", 161)(1, "h4");
|
|
1493
1509
|
i0.ɵɵtext(2, "Model Selection Details");
|
|
1494
1510
|
i0.ɵɵelementEnd();
|
|
1495
|
-
i0.ɵɵelementStart(3, "div",
|
|
1511
|
+
i0.ɵɵelementStart(3, "div", 129)(4, "mj-code-editor", 171);
|
|
1496
1512
|
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); });
|
|
1497
1513
|
i0.ɵɵelementEnd()()();
|
|
1498
1514
|
} if (rf & 2) {
|
|
@@ -1503,10 +1519,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Condition
|
|
|
1503
1519
|
} }
|
|
1504
1520
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_44_Template(rf, ctx) { if (rf & 1) {
|
|
1505
1521
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
1506
|
-
i0.ɵɵelementStart(0, "div",
|
|
1522
|
+
i0.ɵɵelementStart(0, "div", 162)(1, "h4");
|
|
1507
1523
|
i0.ɵɵtext(2, "Error Details");
|
|
1508
1524
|
i0.ɵɵelementEnd();
|
|
1509
|
-
i0.ɵɵelementStart(3, "div",
|
|
1525
|
+
i0.ɵɵelementStart(3, "div", 129)(4, "mj-code-editor", 172);
|
|
1510
1526
|
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); });
|
|
1511
1527
|
i0.ɵɵelementEnd()()();
|
|
1512
1528
|
} if (rf & 2) {
|
|
@@ -1516,52 +1532,52 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Condition
|
|
|
1516
1532
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
1517
1533
|
} }
|
|
1518
1534
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Template(rf, ctx) { if (rf & 1) {
|
|
1519
|
-
i0.ɵɵelementStart(0, "div",
|
|
1535
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "div", 148)(2, "div", 149)(3, "label");
|
|
1520
1536
|
i0.ɵɵtext(4, "Status");
|
|
1521
1537
|
i0.ɵɵelementEnd();
|
|
1522
|
-
i0.ɵɵelementStart(5, "div",
|
|
1523
|
-
i0.ɵɵelement(6, "i",
|
|
1538
|
+
i0.ɵɵelementStart(5, "div", 150);
|
|
1539
|
+
i0.ɵɵelement(6, "i", 147);
|
|
1524
1540
|
i0.ɵɵtext(7);
|
|
1525
1541
|
i0.ɵɵelementEnd()();
|
|
1526
|
-
i0.ɵɵelementStart(8, "div",
|
|
1542
|
+
i0.ɵɵelementStart(8, "div", 149)(9, "label");
|
|
1527
1543
|
i0.ɵɵtext(10, "Selection Strategy");
|
|
1528
1544
|
i0.ɵɵelementEnd();
|
|
1529
|
-
i0.ɵɵelementStart(11, "div",
|
|
1530
|
-
i0.ɵɵelement(12, "i",
|
|
1545
|
+
i0.ɵɵelementStart(11, "div", 150);
|
|
1546
|
+
i0.ɵɵelement(12, "i", 158);
|
|
1531
1547
|
i0.ɵɵtext(13);
|
|
1532
1548
|
i0.ɵɵelementEnd()();
|
|
1533
|
-
i0.ɵɵelementStart(14, "div",
|
|
1549
|
+
i0.ɵɵelementStart(14, "div", 149)(15, "label");
|
|
1534
1550
|
i0.ɵɵtext(16, "Model Power Rank");
|
|
1535
1551
|
i0.ɵɵelementEnd();
|
|
1536
|
-
i0.ɵɵelementStart(17, "div",
|
|
1537
|
-
i0.ɵɵelement(18, "i",
|
|
1552
|
+
i0.ɵɵelementStart(17, "div", 150);
|
|
1553
|
+
i0.ɵɵelement(18, "i", 159);
|
|
1538
1554
|
i0.ɵɵtext(19);
|
|
1539
1555
|
i0.ɵɵelementEnd()();
|
|
1540
|
-
i0.ɵɵelementStart(20, "div",
|
|
1556
|
+
i0.ɵɵelementStart(20, "div", 149)(21, "label");
|
|
1541
1557
|
i0.ɵɵtext(22, "Cache Hit");
|
|
1542
1558
|
i0.ɵɵelementEnd();
|
|
1543
|
-
i0.ɵɵelementStart(23, "div",
|
|
1559
|
+
i0.ɵɵelementStart(23, "div", 150);
|
|
1544
1560
|
i0.ɵɵelement(24, "i");
|
|
1545
1561
|
i0.ɵɵtext(25);
|
|
1546
1562
|
i0.ɵɵelementEnd()();
|
|
1547
|
-
i0.ɵɵtemplate(26, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_26_Template, 7, 1, "div",
|
|
1548
|
-
i0.ɵɵelementStart(29, "div",
|
|
1563
|
+
i0.ɵɵtemplate(26, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_26_Template, 7, 1, "div", 160)(27, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_27_Template, 7, 1, "div", 149)(28, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_28_Template, 6, 1, "div", 149);
|
|
1564
|
+
i0.ɵɵelementStart(29, "div", 149)(30, "label");
|
|
1549
1565
|
i0.ɵɵtext(31, "Was Selected Result");
|
|
1550
1566
|
i0.ɵɵelementEnd();
|
|
1551
|
-
i0.ɵɵelementStart(32, "div",
|
|
1567
|
+
i0.ɵɵelementStart(32, "div", 150);
|
|
1552
1568
|
i0.ɵɵelement(33, "i");
|
|
1553
1569
|
i0.ɵɵtext(34);
|
|
1554
1570
|
i0.ɵɵelementEnd()();
|
|
1555
|
-
i0.ɵɵelementStart(35, "div",
|
|
1571
|
+
i0.ɵɵelementStart(35, "div", 149)(36, "label");
|
|
1556
1572
|
i0.ɵɵtext(37, "Streaming Enabled");
|
|
1557
1573
|
i0.ɵɵelementEnd();
|
|
1558
|
-
i0.ɵɵelementStart(38, "div",
|
|
1574
|
+
i0.ɵɵelementStart(38, "div", 150);
|
|
1559
1575
|
i0.ɵɵelement(39, "i");
|
|
1560
1576
|
i0.ɵɵtext(40);
|
|
1561
1577
|
i0.ɵɵelementEnd()();
|
|
1562
|
-
i0.ɵɵtemplate(41, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_41_Template, 6, 1, "div",
|
|
1578
|
+
i0.ɵɵtemplate(41, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_41_Template, 6, 1, "div", 149)(42, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_42_Template, 7, 1);
|
|
1563
1579
|
i0.ɵɵelementEnd();
|
|
1564
|
-
i0.ɵɵtemplate(43, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_43_Template, 5, 4, "div",
|
|
1580
|
+
i0.ɵɵtemplate(43, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_43_Template, 5, 4, "div", 161)(44, AIPromptRunFormComponentExtended_Conditional_1_ng_template_48_Conditional_44_Template, 5, 4, "div", 162);
|
|
1565
1581
|
i0.ɵɵelementEnd();
|
|
1566
1582
|
} if (rf & 2) {
|
|
1567
1583
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1626,7 +1642,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
|
|
|
1626
1642
|
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()); });
|
|
1627
1643
|
i0.ɵɵelement(26, "i", 22);
|
|
1628
1644
|
i0.ɵɵelementEnd()()();
|
|
1629
|
-
i0.ɵɵtemplate(27, AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Template,
|
|
1645
|
+
i0.ɵɵtemplate(27, AIPromptRunFormComponentExtended_Conditional_1_Conditional_27_Template, 37, 10)(28, AIPromptRunFormComponentExtended_Conditional_1_Conditional_28_Template, 23, 4, "div", 23);
|
|
1630
1646
|
i0.ɵɵelementEnd();
|
|
1631
1647
|
i0.ɵɵelementStart(29, "div", 24)(30, "kendo-panelbar", 25)(31, "kendo-panelbar-item", 26);
|
|
1632
1648
|
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)); });
|
|
@@ -2161,7 +2177,7 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
2161
2177
|
// Don't auto-expand validation panel anymore - let user expand when needed
|
|
2162
2178
|
}
|
|
2163
2179
|
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)); }; }
|
|
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) {
|
|
2180
|
+
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-tachometer-alt"], [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) {
|
|
2165
2181
|
i0.ɵɵelementStart(0, "div", 1);
|
|
2166
2182
|
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Template, 49, 28, "form", 2);
|
|
2167
2183
|
i0.ɵɵelementEnd();
|
|
@@ -2176,7 +2192,7 @@ AIPromptRunFormComponentExtended = __decorate([
|
|
|
2176
2192
|
export { AIPromptRunFormComponentExtended };
|
|
2177
2193
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIPromptRunFormComponentExtended, [{
|
|
2178
2194
|
type: Component,
|
|
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}"] }]
|
|
2195
|
+
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.EffortLevel !== null && record.EffortLevel !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Effort Level</div>\n <div class=\"metric-value\">{{ record.EffortLevel }}</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}"] }]
|
|
2180
2196
|
}], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i3.TestHarnessWindowService }, { type: i0.ViewContainerRef }], null); })();
|
|
2181
2197
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIPromptRunFormComponentExtended, { className: "AIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 20 }); })();
|
|
2182
2198
|
//# sourceMappingURL=ai-prompt-run-form.component.js.map
|