@memberjunction/ng-core-entity-forms 5.38.0 → 5.39.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.
Files changed (45) hide show
  1. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +10 -0
  2. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +645 -531
  4. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  5. package/dist/lib/custom/Queries/query-form.component.d.ts +13 -4
  6. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  7. package/dist/lib/custom/Queries/query-form.component.js +374 -326
  8. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  9. package/dist/lib/custom/Tests/test-form.component.js +2 -3
  10. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  11. package/dist/lib/custom/Tests/test-suite-form.component.js +1 -2
  12. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  13. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +24 -0
  14. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  15. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +381 -224
  16. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  17. package/dist/lib/custom/custom-forms.module.d.ts +39 -41
  18. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  19. package/dist/lib/custom/custom-forms.module.js +8 -9
  20. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  21. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
  22. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +71 -73
  23. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  24. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +3 -3
  25. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  26. package/dist/lib/generated/Entities/MJAIModelCost/mjaimodelcost.form.component.js +10 -6
  27. package/dist/lib/generated/Entities/MJAIModelCost/mjaimodelcost.form.component.js.map +1 -1
  28. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +3 -3
  29. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  30. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +47 -39
  31. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  32. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.d.ts.map +1 -1
  33. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +58 -24
  34. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
  35. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +10 -8
  36. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -1
  37. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js +27 -25
  38. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js.map +1 -1
  39. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js +8 -6
  40. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js.map +1 -1
  41. package/package.json +36 -36
  42. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts +0 -34
  43. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts.map +0 -1
  44. package/dist/lib/custom/Queries/query-category-dialog.component.js +0 -203
  45. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +0 -1
@@ -48,26 +48,26 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_20_Templat
48
48
  } }
49
49
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template(rf, ctx) { if (rf & 1) {
50
50
  const _r3 = i0.ɵɵgetCurrentView();
51
- i0.ɵɵelementStart(0, "div", 65)(1, "div", 14);
51
+ i0.ɵɵelementStart(0, "div", 66)(1, "div", 14);
52
52
  i0.ɵɵtext(2, "Prompt");
53
53
  i0.ɵɵelementEnd();
54
- i0.ɵɵelementStart(3, "div", 67);
54
+ i0.ɵɵelementStart(3, "div", 68);
55
55
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.ChildPromptID)); });
56
- i0.ɵɵelement(4, "i", 68);
56
+ i0.ɵɵelement(4, "i", 69);
57
57
  i0.ɵɵtext(5);
58
58
  i0.ɵɵelementEnd();
59
- i0.ɵɵelementStart(6, "div", 69);
60
- i0.ɵɵelement(7, "span", 70);
61
- i0.ɵɵelementStart(8, "span", 71);
59
+ i0.ɵɵelementStart(6, "div", 70);
60
+ i0.ɵɵelement(7, "span", 71);
61
+ i0.ɵɵelementStart(8, "span", 72);
62
62
  i0.ɵɵtext(9, "wrapped by");
63
63
  i0.ɵɵelementEnd();
64
- i0.ɵɵelement(10, "span", 70);
64
+ i0.ɵɵelement(10, "span", 71);
65
65
  i0.ɵɵelementEnd();
66
- i0.ɵɵelementStart(11, "div", 72);
66
+ i0.ɵɵelementStart(11, "div", 73);
67
67
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template_div_click_11_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.prompt.ID)); });
68
- i0.ɵɵelement(12, "i", 73);
68
+ i0.ɵɵelement(12, "i", 74);
69
69
  i0.ɵɵtext(13);
70
- i0.ɵɵelement(14, "i", 74);
70
+ i0.ɵɵelement(14, "i", 75);
71
71
  i0.ɵɵelementEnd()();
72
72
  } if (rf & 2) {
73
73
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -78,12 +78,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditi
78
78
  } }
79
79
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
80
80
  const _r4 = i0.ɵɵgetCurrentView();
81
- i0.ɵɵelementStart(0, "div", 66)(1, "div", 14);
81
+ i0.ɵɵelementStart(0, "div", 67)(1, "div", 14);
82
82
  i0.ɵɵtext(2, "Prompt");
83
83
  i0.ɵɵelementEnd();
84
- i0.ɵɵelementStart(3, "div", 75);
84
+ i0.ɵɵelementStart(3, "div", 76);
85
85
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.prompt.ID)); });
86
- i0.ɵɵelement(4, "i", 76);
86
+ i0.ɵɵelement(4, "i", 77);
87
87
  i0.ɵɵtext(5);
88
88
  i0.ɵɵelementEnd()();
89
89
  } if (rf & 2) {
@@ -92,13 +92,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditi
92
92
  i0.ɵɵtextInterpolate1(" ", ctx_r1.prompt.Name, " ");
93
93
  } }
94
94
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Template(rf, ctx) { if (rf & 1) {
95
- i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template, 15, 2, "div", 65)(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template, 6, 1, "div", 66);
95
+ i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template, 15, 2, "div", 66)(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template, 6, 1, "div", 67);
96
96
  } if (rf & 2) {
97
97
  const ctx_r1 = i0.ɵɵnextContext(2);
98
98
  i0.ɵɵconditional(ctx_r1.record.ChildPromptID ? 0 : 1);
99
99
  } }
100
100
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditional_7_Template(rf, ctx) { if (rf & 1) {
101
- i0.ɵɵelementStart(0, "span", 80);
101
+ i0.ɵɵelementStart(0, "span", 81);
102
102
  i0.ɵɵtext(1);
103
103
  i0.ɵɵelementEnd();
104
104
  } if (rf & 2) {
@@ -111,13 +111,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Templat
111
111
  i0.ɵɵelementStart(0, "div", 18)(1, "div", 14);
112
112
  i0.ɵɵtext(2, "Model");
113
113
  i0.ɵɵelementEnd();
114
- i0.ɵɵelementStart(3, "div", 77);
114
+ i0.ɵɵelementStart(3, "div", 78);
115
115
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Models", ctx_r1.model.ID)); });
116
- i0.ɵɵelementStart(4, "span", 78);
117
- i0.ɵɵelement(5, "i", 79);
116
+ i0.ɵɵelementStart(4, "span", 79);
117
+ i0.ɵɵelement(5, "i", 80);
118
118
  i0.ɵɵtext(6);
119
119
  i0.ɵɵelementEnd();
120
- i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditional_7_Template, 2, 1, "span", 80);
120
+ i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditional_7_Template, 2, 1, "span", 81);
121
121
  i0.ɵɵelementEnd()();
122
122
  } if (rf & 2) {
123
123
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -129,19 +129,19 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Templat
129
129
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
130
130
  const _r6 = i0.ɵɵgetCurrentView();
131
131
  i0.ɵɵelementStart(0, "span", 19);
132
- i0.ɵɵelement(1, "i", 81);
133
- i0.ɵɵelementStart(2, "a", 82);
132
+ i0.ɵɵelement(1, "i", 82);
133
+ i0.ɵɵelementStart(2, "a", 83);
134
134
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToOriginalRun()); });
135
135
  i0.ɵɵtext(3, "Original Run");
136
136
  i0.ɵɵelementEnd()();
137
137
  } }
138
138
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template(rf, ctx) { if (rf & 1) {
139
- i0.ɵɵelementStart(0, "div", 83);
140
- i0.ɵɵelement(1, "i", 50);
141
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
139
+ i0.ɵɵelementStart(0, "div", 84);
140
+ i0.ɵɵelement(1, "i", 51);
141
+ i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
142
142
  i0.ɵɵtext(4, "Temperature");
143
143
  i0.ɵɵelementEnd();
144
- i0.ɵɵelementStart(5, "div", 86);
144
+ i0.ɵɵelementStart(5, "div", 87);
145
145
  i0.ɵɵtext(6);
146
146
  i0.ɵɵelementEnd()()();
147
147
  } if (rf & 2) {
@@ -150,12 +150,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
150
150
  i0.ɵɵtextInterpolate(ctx_r1.record.Temperature);
151
151
  } }
152
152
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template(rf, ctx) { if (rf & 1) {
153
- i0.ɵɵelementStart(0, "div", 83);
154
- i0.ɵɵelement(1, "i", 51);
155
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
153
+ i0.ɵɵelementStart(0, "div", 84);
154
+ i0.ɵɵelement(1, "i", 52);
155
+ i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
156
156
  i0.ɵɵtext(4, "Top P");
157
157
  i0.ɵɵelementEnd();
158
- i0.ɵɵelementStart(5, "div", 86);
158
+ i0.ɵɵelementStart(5, "div", 87);
159
159
  i0.ɵɵtext(6);
160
160
  i0.ɵɵelementEnd()()();
161
161
  } if (rf & 2) {
@@ -164,12 +164,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
164
164
  i0.ɵɵtextInterpolate(ctx_r1.record.TopP);
165
165
  } }
166
166
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template(rf, ctx) { if (rf & 1) {
167
- i0.ɵɵelementStart(0, "div", 83);
168
- i0.ɵɵelement(1, "i", 52);
169
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
167
+ i0.ɵɵelementStart(0, "div", 84);
168
+ i0.ɵɵelement(1, "i", 53);
169
+ i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
170
170
  i0.ɵɵtext(4, "Top K");
171
171
  i0.ɵɵelementEnd();
172
- i0.ɵɵelementStart(5, "div", 86);
172
+ i0.ɵɵelementStart(5, "div", 87);
173
173
  i0.ɵɵtext(6);
174
174
  i0.ɵɵelementEnd()()();
175
175
  } if (rf & 2) {
@@ -178,12 +178,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
178
178
  i0.ɵɵtextInterpolate(ctx_r1.record.TopK);
179
179
  } }
180
180
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template(rf, ctx) { if (rf & 1) {
181
- i0.ɵɵelementStart(0, "div", 83);
182
- i0.ɵɵelement(1, "i", 89);
183
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
181
+ i0.ɵɵelementStart(0, "div", 84);
182
+ i0.ɵɵelement(1, "i", 91);
183
+ i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
184
184
  i0.ɵɵtext(4, "Effort Level");
185
185
  i0.ɵɵelementEnd();
186
- i0.ɵɵelementStart(5, "div", 86);
186
+ i0.ɵɵelementStart(5, "div", 87);
187
187
  i0.ɵɵtext(6);
188
188
  i0.ɵɵelementEnd()()();
189
189
  } if (rf & 2) {
@@ -192,12 +192,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
192
192
  i0.ɵɵtextInterpolate(ctx_r1.record.EffortLevel);
193
193
  } }
194
194
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template(rf, ctx) { if (rf & 1) {
195
- i0.ɵɵelementStart(0, "div", 83);
196
- i0.ɵɵelement(1, "i", 90);
197
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
195
+ i0.ɵɵelementStart(0, "div", 84);
196
+ i0.ɵɵelement(1, "i", 92);
197
+ i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
198
198
  i0.ɵɵtext(4, "Response Format");
199
199
  i0.ɵɵelementEnd();
200
- i0.ɵɵelementStart(5, "div", 86);
200
+ i0.ɵɵelementStart(5, "div", 87);
201
201
  i0.ɵɵtext(6);
202
202
  i0.ɵɵelementEnd()()();
203
203
  } if (rf & 2) {
@@ -205,13 +205,27 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
205
205
  i0.ɵɵadvance(6);
206
206
  i0.ɵɵtextInterpolate(ctx_r1.record.ResponseFormat);
207
207
  } }
208
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_36_Template(rf, ctx) { if (rf & 1) {
209
- i0.ɵɵelementStart(0, "div", 83);
210
- i0.ɵɵelement(1, "i", 91);
211
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
208
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_29_Template(rf, ctx) { if (rf & 1) {
209
+ i0.ɵɵelementStart(0, "div", 84);
210
+ i0.ɵɵelement(1, "i", 93);
211
+ i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
212
+ i0.ɵɵtext(4, "Cached");
213
+ i0.ɵɵelementEnd();
214
+ i0.ɵɵelementStart(5, "div", 87);
215
+ i0.ɵɵtext(6);
216
+ i0.ɵɵelementEnd()()();
217
+ } if (rf & 2) {
218
+ const ctx_r1 = i0.ɵɵnextContext(3);
219
+ i0.ɵɵadvance(6);
220
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCacheRead));
221
+ } }
222
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_37_Template(rf, ctx) { if (rf & 1) {
223
+ i0.ɵɵelementStart(0, "div", 84);
224
+ i0.ɵɵelement(1, "i", 94);
225
+ i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
212
226
  i0.ɵɵtext(4, "Started");
213
227
  i0.ɵɵelementEnd();
214
- i0.ɵɵelementStart(5, "div", 86);
228
+ i0.ɵɵelementStart(5, "div", 87);
215
229
  i0.ɵɵtext(6);
216
230
  i0.ɵɵpipe(7, "date");
217
231
  i0.ɵɵelementEnd()()();
@@ -222,46 +236,47 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
222
236
  } }
223
237
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template(rf, ctx) { if (rf & 1) {
224
238
  const _r7 = i0.ɵɵgetCurrentView();
225
- i0.ɵɵelementStart(0, "div", 25)(1, "div", 83);
226
- i0.ɵɵelement(2, "i", 73);
227
- i0.ɵɵelementStart(3, "div", 84)(4, "div", 85);
239
+ i0.ɵɵelementStart(0, "div", 25)(1, "div", 84);
240
+ i0.ɵɵelement(2, "i", 74);
241
+ i0.ɵɵelementStart(3, "div", 85)(4, "div", 86);
228
242
  i0.ɵɵtext(5, "Configuration");
229
243
  i0.ɵɵelementEnd();
230
- i0.ɵɵelementStart(6, "div", 86)(7, "a", 87);
244
+ i0.ɵɵelementStart(6, "div", 87)(7, "a", 88);
231
245
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_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)); });
232
246
  i0.ɵɵtext(8);
233
247
  i0.ɵɵelementEnd()()()();
234
- i0.ɵɵconditionalCreate(9, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template, 7, 1, "div", 83);
235
- i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template, 7, 1, "div", 83);
236
- i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template, 7, 1, "div", 83);
237
- i0.ɵɵconditionalCreate(12, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template, 7, 1, "div", 83);
238
- i0.ɵɵconditionalCreate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template, 7, 1, "div", 83);
239
- i0.ɵɵelementEnd();
240
- i0.ɵɵelementStart(14, "div", 25)(15, "div", 83);
241
- i0.ɵɵelement(16, "i", 88);
242
- i0.ɵɵelementStart(17, "div", 84)(18, "div", 85);
248
+ i0.ɵɵconditionalCreate(9, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template, 7, 1, "div", 84);
249
+ i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template, 7, 1, "div", 84);
250
+ i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template, 7, 1, "div", 84);
251
+ i0.ɵɵconditionalCreate(12, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template, 7, 1, "div", 84);
252
+ i0.ɵɵconditionalCreate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template, 7, 1, "div", 84);
253
+ i0.ɵɵelementEnd();
254
+ i0.ɵɵelementStart(14, "div", 25)(15, "div", 84);
255
+ i0.ɵɵelement(16, "i", 89);
256
+ i0.ɵɵelementStart(17, "div", 85)(18, "div", 86);
243
257
  i0.ɵɵtext(19, "Duration");
244
258
  i0.ɵɵelementEnd();
245
- i0.ɵɵelementStart(20, "div", 86);
259
+ i0.ɵɵelementStart(20, "div", 87);
246
260
  i0.ɵɵtext(21);
247
261
  i0.ɵɵelementEnd()()();
248
- i0.ɵɵelementStart(22, "div", 83);
262
+ i0.ɵɵelementStart(22, "div", 90);
249
263
  i0.ɵɵelement(23, "i", 41);
250
- i0.ɵɵelementStart(24, "div", 84)(25, "div", 85);
264
+ i0.ɵɵelementStart(24, "div", 85)(25, "div", 86);
251
265
  i0.ɵɵtext(26, "Total Tokens");
252
266
  i0.ɵɵelementEnd();
253
- i0.ɵɵelementStart(27, "div", 86);
267
+ i0.ɵɵelementStart(27, "div", 87);
254
268
  i0.ɵɵtext(28);
255
269
  i0.ɵɵelementEnd()()();
256
- i0.ɵɵelementStart(29, "div", 83);
257
- i0.ɵɵelement(30, "i", 42);
258
- i0.ɵɵelementStart(31, "div", 84)(32, "div", 85);
259
- i0.ɵɵtext(33, "Cost");
260
- i0.ɵɵelementEnd();
261
- i0.ɵɵelementStart(34, "div", 86);
262
- i0.ɵɵtext(35);
270
+ i0.ɵɵconditionalCreate(29, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_29_Template, 7, 1, "div", 84);
271
+ i0.ɵɵelementStart(30, "div", 84);
272
+ i0.ɵɵelement(31, "i", 43);
273
+ i0.ɵɵelementStart(32, "div", 85)(33, "div", 86);
274
+ i0.ɵɵtext(34, "Cost");
275
+ i0.ɵɵelementEnd();
276
+ i0.ɵɵelementStart(35, "div", 87);
277
+ i0.ɵɵtext(36);
263
278
  i0.ɵɵelementEnd()()();
264
- i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_36_Template, 8, 4, "div", 83);
279
+ i0.ɵɵconditionalCreate(37, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_37_Template, 8, 4, "div", 84);
265
280
  i0.ɵɵelementEnd();
266
281
  } if (rf & 2) {
267
282
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -280,19 +295,35 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Templat
280
295
  i0.ɵɵadvance(8);
281
296
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.ExecutionTimeMS));
282
297
  i0.ɵɵadvance(7);
283
- i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensUsed));
298
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.TotalTokensProcessed));
299
+ i0.ɵɵadvance();
300
+ i0.ɵɵconditional(ctx_r1.record.TokensCacheRead ? 29 : -1);
284
301
  i0.ɵɵadvance(7);
285
302
  i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
286
303
  i0.ɵɵadvance();
287
- i0.ɵɵconditional(ctx_r1.record.RunAt ? 36 : -1);
304
+ i0.ɵɵconditional(ctx_r1.record.RunAt ? 37 : -1);
288
305
  } }
289
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_22_Template(rf, ctx) { if (rf & 1) {
290
- i0.ɵɵelementStart(0, "div", 83);
291
- i0.ɵɵelement(1, "i", 91);
292
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
306
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_15_Template(rf, ctx) { if (rf & 1) {
307
+ i0.ɵɵelementStart(0, "div", 84);
308
+ i0.ɵɵelement(1, "i", 93);
309
+ i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
310
+ i0.ɵɵtext(4, "Cached");
311
+ i0.ɵɵelementEnd();
312
+ i0.ɵɵelementStart(5, "div", 87);
313
+ i0.ɵɵtext(6);
314
+ i0.ɵɵelementEnd()()();
315
+ } if (rf & 2) {
316
+ const ctx_r1 = i0.ɵɵnextContext(3);
317
+ i0.ɵɵadvance(6);
318
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCacheRead));
319
+ } }
320
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_23_Template(rf, ctx) { if (rf & 1) {
321
+ i0.ɵɵelementStart(0, "div", 84);
322
+ i0.ɵɵelement(1, "i", 94);
323
+ i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
293
324
  i0.ɵɵtext(4, "Started");
294
325
  i0.ɵɵelementEnd();
295
- i0.ɵɵelementStart(5, "div", 86);
326
+ i0.ɵɵelementStart(5, "div", 87);
296
327
  i0.ɵɵtext(6);
297
328
  i0.ɵɵpipe(7, "date");
298
329
  i0.ɵɵelementEnd()()();
@@ -302,53 +333,56 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditi
302
333
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
303
334
  } }
304
335
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
305
- i0.ɵɵelementStart(0, "div", 25)(1, "div", 83);
306
- i0.ɵɵelement(2, "i", 88);
307
- i0.ɵɵelementStart(3, "div", 84)(4, "div", 85);
336
+ i0.ɵɵelementStart(0, "div", 25)(1, "div", 84);
337
+ i0.ɵɵelement(2, "i", 89);
338
+ i0.ɵɵelementStart(3, "div", 85)(4, "div", 86);
308
339
  i0.ɵɵtext(5, "Duration");
309
340
  i0.ɵɵelementEnd();
310
- i0.ɵɵelementStart(6, "div", 86);
341
+ i0.ɵɵelementStart(6, "div", 87);
311
342
  i0.ɵɵtext(7);
312
343
  i0.ɵɵelementEnd()()();
313
- i0.ɵɵelementStart(8, "div", 83);
344
+ i0.ɵɵelementStart(8, "div", 90);
314
345
  i0.ɵɵelement(9, "i", 41);
315
- i0.ɵɵelementStart(10, "div", 84)(11, "div", 85);
346
+ i0.ɵɵelementStart(10, "div", 85)(11, "div", 86);
316
347
  i0.ɵɵtext(12, "Total Tokens");
317
348
  i0.ɵɵelementEnd();
318
- i0.ɵɵelementStart(13, "div", 86);
349
+ i0.ɵɵelementStart(13, "div", 87);
319
350
  i0.ɵɵtext(14);
320
351
  i0.ɵɵelementEnd()()();
321
- i0.ɵɵelementStart(15, "div", 83);
322
- i0.ɵɵelement(16, "i", 42);
323
- i0.ɵɵelementStart(17, "div", 84)(18, "div", 85);
324
- i0.ɵɵtext(19, "Cost");
325
- i0.ɵɵelementEnd();
326
- i0.ɵɵelementStart(20, "div", 86);
327
- i0.ɵɵtext(21);
352
+ i0.ɵɵconditionalCreate(15, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_15_Template, 7, 1, "div", 84);
353
+ i0.ɵɵelementStart(16, "div", 84);
354
+ i0.ɵɵelement(17, "i", 43);
355
+ i0.ɵɵelementStart(18, "div", 85)(19, "div", 86);
356
+ i0.ɵɵtext(20, "Cost");
357
+ i0.ɵɵelementEnd();
358
+ i0.ɵɵelementStart(21, "div", 87);
359
+ i0.ɵɵtext(22);
328
360
  i0.ɵɵelementEnd()()();
329
- i0.ɵɵconditionalCreate(22, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_22_Template, 8, 4, "div", 83);
361
+ i0.ɵɵconditionalCreate(23, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_23_Template, 8, 4, "div", 84);
330
362
  i0.ɵɵelementEnd();
331
363
  } if (rf & 2) {
332
364
  const ctx_r1 = i0.ɵɵnextContext(2);
333
365
  i0.ɵɵadvance(7);
334
366
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.ExecutionTimeMS));
335
367
  i0.ɵɵadvance(7);
336
- i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensUsed));
368
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.TotalTokensProcessed));
369
+ i0.ɵɵadvance();
370
+ i0.ɵɵconditional(ctx_r1.record.TokensCacheRead ? 15 : -1);
337
371
  i0.ɵɵadvance(7);
338
372
  i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
339
373
  i0.ɵɵadvance();
340
- i0.ɵɵconditional(ctx_r1.record.RunAt ? 22 : -1);
374
+ i0.ɵɵconditional(ctx_r1.record.RunAt ? 23 : -1);
341
375
  } }
342
376
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template(rf, ctx) { if (rf & 1) {
343
- i0.ɵɵelementStart(0, "span", 94);
377
+ i0.ɵɵelementStart(0, "span", 97);
344
378
  i0.ɵɵtext(1, "JSON");
345
379
  i0.ɵɵelementEnd();
346
380
  } }
347
381
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Template(rf, ctx) { if (rf & 1) {
348
- i0.ɵɵelementStart(0, "span", 92);
349
- i0.ɵɵelement(1, "i", 93);
382
+ i0.ɵɵelementStart(0, "span", 95);
383
+ i0.ɵɵelement(1, "i", 96);
350
384
  i0.ɵɵtext(2, " Input ");
351
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template, 2, 0, "span", 94);
385
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template, 2, 0, "span", 97);
352
386
  i0.ɵɵelementEnd();
353
387
  } if (rf & 2) {
354
388
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -356,7 +390,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Templat
356
390
  i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
357
391
  } }
358
392
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
359
- i0.ɵɵelementStart(0, "span", 107);
393
+ i0.ɵɵelementStart(0, "span", 110);
360
394
  i0.ɵɵtext(1);
361
395
  i0.ɵɵelementEnd();
362
396
  } if (rf & 2) {
@@ -365,10 +399,10 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
365
399
  i0.ɵɵtextInterpolate1("(", ctx_r1.chatMessages.length, ")");
366
400
  } }
367
401
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Template(rf, ctx) { if (rf & 1) {
368
- i0.ɵɵelementStart(0, "span", 105);
369
- i0.ɵɵelement(1, "i", 106);
402
+ i0.ɵɵelementStart(0, "span", 108);
403
+ i0.ɵɵelement(1, "i", 109);
370
404
  i0.ɵɵtext(2, " Messages ");
371
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template, 2, 1, "span", 107);
405
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template, 2, 1, "span", 110);
372
406
  i0.ɵɵelementEnd();
373
407
  } if (rf & 2) {
374
408
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -376,35 +410,35 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
376
410
  i0.ɵɵconditional(ctx_r1.chatMessages.length > 0 ? 3 : -1);
377
411
  } }
378
412
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template(rf, ctx) { if (rf & 1) {
379
- i0.ɵɵelementStart(0, "div", 97);
380
- i0.ɵɵelement(1, "i", 108);
413
+ i0.ɵɵelementStart(0, "div", 100);
414
+ i0.ɵɵelement(1, "i", 111);
381
415
  i0.ɵɵelementStart(2, "p");
382
416
  i0.ɵɵtext(3, "Loading messages...");
383
417
  i0.ɵɵelementEnd()();
384
418
  } }
385
419
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template(rf, ctx) { if (rf & 1) {
386
- i0.ɵɵelement(0, "mj-chat-message-viewer", 98);
420
+ i0.ɵɵelement(0, "mj-chat-message-viewer", 101);
387
421
  } if (rf & 2) {
388
422
  const ctx_r1 = i0.ɵɵnextContext(3);
389
423
  i0.ɵɵproperty("messages", ctx_r1.chatMessages);
390
424
  } }
391
425
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_6_Template(rf, ctx) { if (rf & 1) {
392
426
  i0.ɵɵelementStart(0, "div", 31);
393
- i0.ɵɵelement(1, "i", 109);
427
+ i0.ɵɵelement(1, "i", 112);
394
428
  i0.ɵɵelementStart(2, "p");
395
429
  i0.ɵɵtext(3, "No chat messages found");
396
430
  i0.ɵɵelementEnd()();
397
431
  } }
398
432
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
399
- i0.ɵɵelementStart(0, "span", 94);
433
+ i0.ɵɵelementStart(0, "span", 97);
400
434
  i0.ɵɵtext(1, "Object");
401
435
  i0.ɵɵelementEnd();
402
436
  } }
403
437
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template(rf, ctx) { if (rf & 1) {
404
- i0.ɵɵelementStart(0, "span", 105);
405
- i0.ɵɵelement(1, "i", 110);
438
+ i0.ɵɵelementStart(0, "span", 108);
439
+ i0.ɵɵelement(1, "i", 113);
406
440
  i0.ɵɵtext(2, " Data ");
407
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template, 2, 0, "span", 94);
441
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template, 2, 0, "span", 97);
408
442
  i0.ɵɵelementEnd();
409
443
  } if (rf & 2) {
410
444
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -413,16 +447,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
413
447
  } }
414
448
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template(rf, ctx) { if (rf & 1) {
415
449
  const _r9 = i0.ɵɵgetCurrentView();
416
- i0.ɵɵelementStart(0, "div", 33)(1, "div", 99)(2, "button", 100);
450
+ i0.ɵɵelementStart(0, "div", 33)(1, "div", 102)(2, "button", 103);
417
451
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedData, "Data")); });
418
- i0.ɵɵelement(3, "i", 101);
452
+ i0.ɵɵelement(3, "i", 104);
419
453
  i0.ɵɵtext(4, " Copy ");
420
454
  i0.ɵɵelementEnd();
421
- i0.ɵɵelementStart(5, "button", 102);
455
+ i0.ɵɵelementStart(5, "button", 105);
422
456
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedData, "json", "Data")); });
423
- i0.ɵɵelement(6, "i", 103);
457
+ i0.ɵɵelement(6, "i", 106);
424
458
  i0.ɵɵelementEnd()();
425
- i0.ɵɵelementStart(7, "mj-code-editor", 111);
459
+ i0.ɵɵelementStart(7, "mj-code-editor", 114);
426
460
  i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedData, $event) || (ctx_r1.formattedData = $event); return i0.ɵɵresetView($event); });
427
461
  i0.ɵɵelementEnd()();
428
462
  } if (rf & 2) {
@@ -433,41 +467,41 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditi
433
467
  } }
434
468
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template(rf, ctx) { if (rf & 1) {
435
469
  i0.ɵɵelementStart(0, "div", 31);
436
- i0.ɵɵelement(1, "i", 110);
470
+ i0.ɵɵelement(1, "i", 113);
437
471
  i0.ɵɵelementStart(2, "p");
438
472
  i0.ɵɵtext(3, "No data object found");
439
473
  i0.ɵɵelementEnd()();
440
474
  } }
441
475
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_13_Template(rf, ctx) { if (rf & 1) {
442
- i0.ɵɵelementStart(0, "span", 105);
443
- i0.ɵɵelement(1, "i", 90);
476
+ i0.ɵɵelementStart(0, "span", 108);
477
+ i0.ɵɵelement(1, "i", 92);
444
478
  i0.ɵɵtext(2, " Raw ");
445
479
  i0.ɵɵelementEnd();
446
480
  } }
447
481
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template(rf, ctx) { if (rf & 1) {
448
482
  const _r8 = i0.ɵɵgetCurrentView();
449
- i0.ɵɵelementStart(0, "div", 30)(1, "mj-accordion-panel", 95);
483
+ i0.ɵɵelementStart(0, "div", 30)(1, "mj-accordion-panel", 98);
450
484
  i0.ɵɵtemplate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Template, 4, 1, "ng-template", 28);
451
- i0.ɵɵelementStart(3, "div", 96);
452
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template, 4, 0, "div", 97)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 98)(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_6_Template, 4, 0, "div", 31);
485
+ i0.ɵɵelementStart(3, "div", 99);
486
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template, 4, 0, "div", 100)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 101)(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_6_Template, 4, 0, "div", 31);
453
487
  i0.ɵɵelementEnd()();
454
- i0.ɵɵelementStart(7, "mj-accordion-panel", 95);
488
+ i0.ɵɵelementStart(7, "mj-accordion-panel", 98);
455
489
  i0.ɵɵtemplate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template, 4, 1, "ng-template", 28);
456
- i0.ɵɵelementStart(9, "div", 96);
490
+ i0.ɵɵelementStart(9, "div", 99);
457
491
  i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template, 8, 4, "div", 33)(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template, 4, 0, "div", 31);
458
492
  i0.ɵɵelementEnd()();
459
- i0.ɵɵelementStart(12, "mj-accordion-panel", 95);
493
+ i0.ɵɵelementStart(12, "mj-accordion-panel", 98);
460
494
  i0.ɵɵtemplate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_13_Template, 3, 0, "ng-template", 28);
461
- i0.ɵɵelementStart(14, "div", 96)(15, "div", 33)(16, "div", 99)(17, "button", 100);
495
+ i0.ɵɵelementStart(14, "div", 99)(15, "div", 33)(16, "div", 102)(17, "button", 103);
462
496
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
463
- i0.ɵɵelement(18, "i", 101);
497
+ i0.ɵɵelement(18, "i", 104);
464
498
  i0.ɵɵtext(19, " Copy ");
465
499
  i0.ɵɵelementEnd();
466
- i0.ɵɵelementStart(20, "button", 102);
500
+ i0.ɵɵelementStart(20, "button", 105);
467
501
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedMessages, "json", "Raw Messages")); });
468
- i0.ɵɵelement(21, "i", 103);
502
+ i0.ɵɵelement(21, "i", 106);
469
503
  i0.ɵɵelementEnd()();
470
- i0.ɵɵelementStart(22, "mj-code-editor", 104);
504
+ i0.ɵɵelementStart(22, "mj-code-editor", 107);
471
505
  i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_mj_code_editor_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedMessages, $event) || (ctx_r1.formattedMessages = $event); return i0.ɵɵresetView($event); });
472
506
  i0.ɵɵelementEnd()()()()();
473
507
  } if (rf & 2) {
@@ -488,27 +522,27 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Templat
488
522
  } }
489
523
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_37_Template(rf, ctx) { if (rf & 1) {
490
524
  i0.ɵɵelementStart(0, "div", 31);
491
- i0.ɵɵelement(1, "i", 109);
525
+ i0.ɵɵelement(1, "i", 112);
492
526
  i0.ɵɵelementStart(2, "p");
493
527
  i0.ɵɵtext(3, "No input messages recorded");
494
528
  i0.ɵɵelementEnd()();
495
529
  } }
496
530
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
497
- i0.ɵɵelementStart(0, "span", 94);
531
+ i0.ɵɵelementStart(0, "span", 97);
498
532
  i0.ɵɵtext(1, "JSON");
499
533
  i0.ɵɵelementEnd();
500
534
  } }
501
535
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template(rf, ctx) { if (rf & 1) {
502
- i0.ɵɵelementStart(0, "span", 113);
536
+ i0.ɵɵelementStart(0, "span", 116);
503
537
  i0.ɵɵtext(1, "Error");
504
538
  i0.ɵɵelementEnd();
505
539
  } }
506
540
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Template(rf, ctx) { if (rf & 1) {
507
- i0.ɵɵelementStart(0, "span", 92);
508
- i0.ɵɵelement(1, "i", 112);
541
+ i0.ɵɵelementStart(0, "span", 95);
542
+ i0.ɵɵelement(1, "i", 115);
509
543
  i0.ɵɵtext(2, " Result ");
510
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template, 2, 0, "span", 94);
511
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template, 2, 0, "span", 113);
544
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template, 2, 0, "span", 97);
545
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template, 2, 0, "span", 116);
512
546
  i0.ɵɵelementEnd();
513
547
  } if (rf & 2) {
514
548
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -519,8 +553,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Templat
519
553
  } }
520
554
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template(rf, ctx) { if (rf & 1) {
521
555
  i0.ɵɵelementStart(0, "div", 32);
522
- i0.ɵɵelement(1, "i", 114);
523
- i0.ɵɵelementStart(2, "div", 115)(3, "h4");
556
+ i0.ɵɵelement(1, "i", 117);
557
+ i0.ɵɵelementStart(2, "div", 118)(3, "h4");
524
558
  i0.ɵɵtext(4, "Error Message");
525
559
  i0.ɵɵelementEnd();
526
560
  i0.ɵɵelementStart(5, "p");
@@ -533,16 +567,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Templat
533
567
  } }
534
568
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template(rf, ctx) { if (rf & 1) {
535
569
  const _r10 = i0.ɵɵgetCurrentView();
536
- i0.ɵɵelementStart(0, "div", 33)(1, "div", 99)(2, "button", 100);
570
+ i0.ɵɵelementStart(0, "div", 33)(1, "div", 102)(2, "button", 103);
537
571
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedResult, "Result")); });
538
- i0.ɵɵelement(3, "i", 101);
572
+ i0.ɵɵelement(3, "i", 104);
539
573
  i0.ɵɵtext(4, " Copy ");
540
574
  i0.ɵɵelementEnd();
541
- i0.ɵɵelementStart(5, "button", 102);
575
+ i0.ɵɵelementStart(5, "button", 105);
542
576
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedResult, "json", "Result")); });
543
- i0.ɵɵelement(6, "i", 103);
577
+ i0.ɵɵelement(6, "i", 106);
544
578
  i0.ɵɵelementEnd()();
545
- i0.ɵɵelementStart(7, "mj-code-editor", 116);
579
+ i0.ɵɵelementStart(7, "mj-code-editor", 119);
546
580
  i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedResult, $event) || (ctx_r1.formattedResult = $event); return i0.ɵɵresetView($event); });
547
581
  i0.ɵɵelementEnd()();
548
582
  } if (rf & 2) {
@@ -552,7 +586,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Templat
552
586
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
553
587
  } }
554
588
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
555
- i0.ɵɵelementStart(0, "p", 119)(1, "strong");
589
+ i0.ɵɵelementStart(0, "p", 122)(1, "strong");
556
590
  i0.ɵɵtext(2, "Status:");
557
591
  i0.ɵɵelementEnd();
558
592
  i0.ɵɵtext(3);
@@ -564,14 +598,14 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
564
598
  } }
565
599
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
566
600
  const _r11 = i0.ɵɵgetCurrentView();
567
- i0.ɵɵelementStart(0, "div", 120)(1, "div", 99)(2, "h4", 122);
601
+ i0.ɵɵelementStart(0, "div", 123)(1, "div", 102)(2, "h4", 125);
568
602
  i0.ɵɵtext(3, "Error Details");
569
603
  i0.ɵɵelementEnd();
570
- i0.ɵɵelementStart(4, "button", 102);
604
+ i0.ɵɵelementStart(4, "button", 105);
571
605
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
572
- i0.ɵɵelement(5, "i", 103);
606
+ i0.ɵɵelement(5, "i", 106);
573
607
  i0.ɵɵelementEnd()();
574
- i0.ɵɵelement(6, "mj-code-editor", 123);
608
+ i0.ɵɵelement(6, "mj-code-editor", 126);
575
609
  i0.ɵɵelementEnd();
576
610
  } if (rf & 2) {
577
611
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -579,15 +613,15 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
579
613
  i0.ɵɵproperty("ngModel", ctx_r1.formattedErrorDetails)("disabled", true)("language", "json")("lineWrapping", true);
580
614
  } }
581
615
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
582
- i0.ɵɵelementStart(0, "p", 121);
616
+ i0.ɵɵelementStart(0, "p", 124);
583
617
  i0.ɵɵtext(1, " The prompt execution failed but no additional error information is available. ");
584
618
  i0.ɵɵelementEnd();
585
619
  } }
586
620
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template(rf, ctx) { if (rf & 1) {
587
- i0.ɵɵelementStart(0, "div", 118);
588
- i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template, 4, 1, "p", 119);
589
- i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template, 7, 4, "div", 120);
590
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_3_Template, 2, 0, "p", 121);
621
+ i0.ɵɵelementStart(0, "div", 121);
622
+ i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template, 4, 1, "p", 122);
623
+ i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template, 7, 4, "div", 123);
624
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_3_Template, 2, 0, "p", 124);
591
625
  i0.ɵɵelementEnd();
592
626
  } if (rf & 2) {
593
627
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -600,11 +634,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
600
634
  } }
601
635
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
602
636
  i0.ɵɵelementStart(0, "div", 31);
603
- i0.ɵɵelement(1, "i", 117);
637
+ i0.ɵɵelement(1, "i", 120);
604
638
  i0.ɵɵelementStart(2, "p");
605
639
  i0.ɵɵtext(3, "No result data recorded");
606
640
  i0.ɵɵelementEnd();
607
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template, 4, 3, "div", 118);
641
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template, 4, 3, "div", 121);
608
642
  i0.ɵɵelementEnd();
609
643
  } if (rf & 2) {
610
644
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -612,8 +646,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Templat
612
646
  i0.ɵɵconditional(ctx_r1.record.CompletedAt && (ctx_r1.record.Status === "Failed" || ctx_r1.record.Success === false) ? 4 : -1);
613
647
  } }
614
648
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_45_Template(rf, ctx) { if (rf & 1) {
615
- i0.ɵɵelementStart(0, "span", 92);
616
- i0.ɵɵelement(1, "i", 124);
649
+ i0.ɵɵelementStart(0, "span", 95);
650
+ i0.ɵɵelement(1, "i", 127);
617
651
  i0.ɵɵtext(2, " Token Usage & Metrics ");
618
652
  i0.ɵɵelementEnd();
619
653
  } }
@@ -642,9 +676,58 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_71_Templat
642
676
  } if (rf & 2) {
643
677
  const ctx_r1 = i0.ɵɵnextContext(2);
644
678
  i0.ɵɵadvance(2);
645
- i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup));
679
+ i0.ɵɵtextInterpolate1("incl. ", ctx_r1.formatTokens(ctx_r1.CachedTokens), " cached");
680
+ } }
681
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_72_Template(rf, ctx) { if (rf & 1) {
682
+ i0.ɵɵelementStart(0, "div", 39)(1, "span");
683
+ i0.ɵɵtext(2);
684
+ i0.ɵɵelementEnd()();
685
+ } if (rf & 2) {
686
+ const ctx_r1 = i0.ɵɵnextContext(2);
687
+ i0.ɵɵadvance(2);
688
+ i0.ɵɵtextInterpolate1("Net rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup));
689
+ } }
690
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditional_7_Template(rf, ctx) { if (rf & 1) {
691
+ i0.ɵɵelementStart(0, "div", 39)(1, "span");
692
+ i0.ɵɵtext(2);
693
+ i0.ɵɵelementEnd()();
694
+ } if (rf & 2) {
695
+ const ctx_r1 = i0.ɵɵnextContext(3);
696
+ i0.ɵɵadvance(2);
697
+ i0.ɵɵtextInterpolate1("Write: ", ctx_r1.formatTokens(ctx_r1.record.TokensCacheWrite));
646
698
  } }
647
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Template(rf, ctx) { if (rf & 1) {
699
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditional_8_Template(rf, ctx) { if (rf & 1) {
700
+ i0.ɵɵelementStart(0, "div", 39)(1, "span");
701
+ i0.ɵɵtext(2);
702
+ i0.ɵɵpipe(3, "number");
703
+ i0.ɵɵelementEnd()();
704
+ } if (rf & 2) {
705
+ const ctx_r1 = i0.ɵɵnextContext(3);
706
+ i0.ɵɵadvance(2);
707
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(3, 1, ctx_r1.CacheHitRatePct, "1.0-0"), "% hit rate");
708
+ } }
709
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Template(rf, ctx) { if (rf & 1) {
710
+ i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
711
+ i0.ɵɵelement(2, "i", 93);
712
+ i0.ɵɵelementStart(3, "h4");
713
+ i0.ɵɵtext(4, "Cache Read");
714
+ i0.ɵɵelementEnd()();
715
+ i0.ɵɵelementStart(5, "div", 38);
716
+ i0.ɵɵtext(6);
717
+ i0.ɵɵelementEnd();
718
+ i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditional_7_Template, 3, 1, "div", 39);
719
+ i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditional_8_Template, 4, 4, "div", 39);
720
+ i0.ɵɵelementEnd();
721
+ } if (rf & 2) {
722
+ const ctx_r1 = i0.ɵɵnextContext(2);
723
+ i0.ɵɵadvance(6);
724
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCacheRead));
725
+ i0.ɵɵadvance();
726
+ i0.ɵɵconditional(ctx_r1.record.TokensCacheWrite ? 7 : -1);
727
+ i0.ɵɵadvance();
728
+ i0.ɵɵconditional(ctx_r1.record.TokensCacheRead || ctx_r1.record.TokensCacheWrite ? 8 : -1);
729
+ } }
730
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Template(rf, ctx) { if (rf & 1) {
648
731
  i0.ɵɵelementStart(0, "div", 39)(1, "span");
649
732
  i0.ɵɵtext(2);
650
733
  i0.ɵɵelementEnd()();
@@ -653,8 +736,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Templat
653
736
  i0.ɵɵadvance(2);
654
737
  i0.ɵɵtextInterpolate1("Total: ", ctx_r1.formatCost(ctx_r1.record.TotalCost));
655
738
  } }
656
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_80_Template(rf, ctx) { if (rf & 1) {
657
- i0.ɵɵelementStart(0, "div", 43);
739
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template(rf, ctx) { if (rf & 1) {
740
+ i0.ɵɵelementStart(0, "div", 44);
658
741
  i0.ɵɵtext(1);
659
742
  i0.ɵɵelementEnd();
660
743
  } if (rf & 2) {
@@ -662,9 +745,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_80_Templat
662
745
  i0.ɵɵadvance();
663
746
  i0.ɵɵtextInterpolate(ctx_r1.record.CostCurrency);
664
747
  } }
665
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Template(rf, ctx) { if (rf & 1) {
748
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template(rf, ctx) { if (rf & 1) {
666
749
  i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
667
- i0.ɵɵelement(2, "i", 125);
750
+ i0.ɵɵelement(2, "i", 128);
668
751
  i0.ɵɵelementStart(3, "h4");
669
752
  i0.ɵɵtext(4, "Queue Time");
670
753
  i0.ɵɵelementEnd()();
@@ -676,9 +759,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Templat
676
759
  i0.ɵɵadvance(6);
677
760
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.QueueTime));
678
761
  } }
679
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template(rf, ctx) { if (rf & 1) {
762
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Template(rf, ctx) { if (rf & 1) {
680
763
  i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
681
- i0.ɵɵelement(2, "i", 126);
764
+ i0.ɵɵelement(2, "i", 129);
682
765
  i0.ɵɵelementStart(3, "h4");
683
766
  i0.ɵɵtext(4, "Prompt Time");
684
767
  i0.ɵɵelementEnd()();
@@ -690,9 +773,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Templat
690
773
  i0.ɵɵadvance(6);
691
774
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.PromptTime));
692
775
  } }
693
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template(rf, ctx) { if (rf & 1) {
776
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template(rf, ctx) { if (rf & 1) {
694
777
  i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
695
- i0.ɵɵelement(2, "i", 127);
778
+ i0.ɵɵelement(2, "i", 130);
696
779
  i0.ɵɵelementStart(3, "h4");
697
780
  i0.ɵɵtext(4, "Completion Time");
698
781
  i0.ɵɵelementEnd()();
@@ -704,11 +787,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Templat
704
787
  i0.ɵɵadvance(6);
705
788
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.CompletionTime));
706
789
  } }
707
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template(rf, ctx) { if (rf & 1) {
708
- i0.ɵɵelementStart(0, "div", 45)(1, "span", 85);
790
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template(rf, ctx) { if (rf & 1) {
791
+ i0.ɵɵelementStart(0, "div", 46)(1, "span", 86);
709
792
  i0.ɵɵtext(2, "Execution Order:");
710
793
  i0.ɵɵelementEnd();
711
- i0.ɵɵelementStart(3, "span", 86);
794
+ i0.ɵɵelementStart(3, "span", 87);
712
795
  i0.ɵɵtext(4);
713
796
  i0.ɵɵelementEnd()();
714
797
  } if (rf & 2) {
@@ -716,23 +799,23 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Templat
716
799
  i0.ɵɵadvance(4);
717
800
  i0.ɵɵtextInterpolate(ctx_r1.record.ExecutionOrder);
718
801
  } }
719
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template(rf, ctx) { if (rf & 1) {
802
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template(rf, ctx) { if (rf & 1) {
720
803
  const _r12 = i0.ɵɵgetCurrentView();
721
- i0.ɵɵelementStart(0, "div", 45)(1, "span", 85);
804
+ i0.ɵɵelementStart(0, "div", 46)(1, "span", 86);
722
805
  i0.ɵɵtext(2, "Agent:");
723
806
  i0.ɵɵelementEnd();
724
- i0.ɵɵelementStart(3, "span", 128);
725
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
807
+ i0.ɵɵelementStart(3, "span", 131);
808
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
726
809
  i0.ɵɵtext(4);
727
- i0.ɵɵelement(5, "i", 129);
810
+ i0.ɵɵelement(5, "i", 132);
728
811
  i0.ɵɵelementEnd()();
729
812
  } if (rf & 2) {
730
813
  const ctx_r1 = i0.ɵɵnextContext(2);
731
814
  i0.ɵɵadvance(4);
732
815
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
733
816
  } }
734
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
735
- i0.ɵɵelementStart(0, "span", 107);
817
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
818
+ i0.ɵɵelementStart(0, "span", 110);
736
819
  i0.ɵɵtext(1);
737
820
  i0.ɵɵelementEnd();
738
821
  } if (rf & 2) {
@@ -740,22 +823,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_temp
740
823
  i0.ɵɵadvance();
741
824
  i0.ɵɵtextInterpolate1("(", ctx_r1.record.ValidationAttemptCount, " attempts)");
742
825
  } }
743
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
744
- i0.ɵɵelementStart(0, "span", 141);
826
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
827
+ i0.ɵɵelementStart(0, "span", 144);
745
828
  i0.ɵɵtext(1, "Passed");
746
829
  i0.ɵɵelementEnd();
747
830
  } }
748
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
749
- i0.ɵɵelementStart(0, "span", 113);
831
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
832
+ i0.ɵɵelementStart(0, "span", 116);
750
833
  i0.ɵɵtext(1, "Failed");
751
834
  i0.ɵɵelementEnd();
752
835
  } }
753
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Template(rf, ctx) { if (rf & 1) {
754
- i0.ɵɵelementStart(0, "span", 92);
755
- i0.ɵɵelement(1, "i", 140);
836
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Template(rf, ctx) { if (rf & 1) {
837
+ i0.ɵɵelementStart(0, "span", 95);
838
+ i0.ɵɵelement(1, "i", 143);
756
839
  i0.ɵɵtext(2, " Validation & Retries ");
757
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_3_Template, 2, 1, "span", 107);
758
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_4_Template, 2, 0, "span", 141)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_5_Template, 2, 0, "span", 113);
840
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_3_Template, 2, 1, "span", 110);
841
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_4_Template, 2, 0, "span", 144)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_5_Template, 2, 0, "span", 116);
759
842
  i0.ɵɵelementEnd();
760
843
  } if (rf & 2) {
761
844
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -764,8 +847,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_temp
764
847
  i0.ɵɵadvance();
765
848
  i0.ɵɵconditional(ctx_r1.record.FinalValidationPassed ? 4 : ctx_r1.record.FinalValidationPassed === false ? 5 : -1);
766
849
  } }
767
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_31_Conditional_6_Template(rf, ctx) { if (rf & 1) {
768
- i0.ɵɵelementStart(0, "span", 142);
850
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_31_Conditional_6_Template(rf, ctx) { if (rf & 1) {
851
+ i0.ɵɵelementStart(0, "span", 145);
769
852
  i0.ɵɵtext(1);
770
853
  i0.ɵɵelementEnd();
771
854
  } if (rf & 2) {
@@ -773,15 +856,15 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
773
856
  i0.ɵɵadvance();
774
857
  i0.ɵɵtextInterpolate1("", ctx_r1.record.ValidationErrorCount, " validation errors");
775
858
  } }
776
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_31_Template(rf, ctx) { if (rf & 1) {
777
- i0.ɵɵelementStart(0, "div", 135)(1, "h5");
778
- i0.ɵɵelement(2, "i", 114);
859
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_31_Template(rf, ctx) { if (rf & 1) {
860
+ i0.ɵɵelementStart(0, "div", 138)(1, "h5");
861
+ i0.ɵɵelement(2, "i", 117);
779
862
  i0.ɵɵtext(3, " Final Validation Error");
780
863
  i0.ɵɵelementEnd();
781
864
  i0.ɵɵelementStart(4, "p");
782
865
  i0.ɵɵtext(5);
783
866
  i0.ɵɵelementEnd();
784
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_31_Conditional_6_Template, 2, 1, "span", 142);
867
+ i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_31_Conditional_6_Template, 2, 1, "span", 145);
785
868
  i0.ɵɵelementEnd();
786
869
  } if (rf & 2) {
787
870
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -790,9 +873,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
790
873
  i0.ɵɵadvance();
791
874
  i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationErrorCount && ctx_r1.record.ValidationErrorCount > 0 ? 6 : -1);
792
875
  } }
793
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_32_Template(rf, ctx) { if (rf & 1) {
794
- i0.ɵɵelementStart(0, "div", 136)(1, "h5");
795
- i0.ɵɵelement(2, "i", 54);
876
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_32_Template(rf, ctx) { if (rf & 1) {
877
+ i0.ɵɵelementStart(0, "div", 139)(1, "h5");
878
+ i0.ɵɵelement(2, "i", 55);
796
879
  i0.ɵɵtext(3, " Most Common Error");
797
880
  i0.ɵɵelementEnd();
798
881
  i0.ɵɵelementStart(4, "p");
@@ -803,24 +886,24 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
803
886
  i0.ɵɵadvance(5);
804
887
  i0.ɵɵtextInterpolate(ctx_r1.record.CommonValidationError);
805
888
  } }
806
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_33_Template(rf, ctx) { if (rf & 1) {
807
- i0.ɵɵelementStart(0, "div", 137)(1, "h4");
889
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_33_Template(rf, ctx) { if (rf & 1) {
890
+ i0.ɵɵelementStart(0, "div", 140)(1, "h4");
808
891
  i0.ɵɵtext(2, "Retry Timeline");
809
892
  i0.ɵɵelementEnd();
810
- i0.ɵɵelementStart(3, "div", 143)(4, "div", 144);
811
- i0.ɵɵelement(5, "i", 88);
893
+ i0.ɵɵelementStart(3, "div", 146)(4, "div", 147);
894
+ i0.ɵɵelement(5, "i", 89);
812
895
  i0.ɵɵelementStart(6, "span");
813
896
  i0.ɵɵtext(7);
814
897
  i0.ɵɵpipe(8, "date");
815
898
  i0.ɵɵelementEnd()();
816
- i0.ɵɵelementStart(9, "div", 144);
817
- i0.ɵɵelement(10, "i", 127);
899
+ i0.ɵɵelementStart(9, "div", 147);
900
+ i0.ɵɵelement(10, "i", 130);
818
901
  i0.ɵɵelementStart(11, "span");
819
902
  i0.ɵɵtext(12);
820
903
  i0.ɵɵpipe(13, "date");
821
904
  i0.ɵɵelementEnd()();
822
- i0.ɵɵelementStart(14, "div", 144);
823
- i0.ɵɵelement(15, "i", 145);
905
+ i0.ɵɵelementStart(14, "div", 147);
906
+ i0.ɵɵelement(15, "i", 148);
824
907
  i0.ɵɵelementStart(16, "span");
825
908
  i0.ɵɵtext(17);
826
909
  i0.ɵɵelementEnd()()()();
@@ -833,8 +916,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
833
916
  i0.ɵɵadvance(5);
834
917
  i0.ɵɵtextInterpolate1("Total Retry Duration: ", ctx_r1.formatDuration(ctx_r1.record.TotalRetryDurationMS));
835
918
  } }
836
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
837
- i0.ɵɵelementStart(0, "span", 142);
919
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
920
+ i0.ɵɵelementStart(0, "span", 145);
838
921
  i0.ɵɵtext(1);
839
922
  i0.ɵɵelementEnd();
840
923
  } if (rf & 2) {
@@ -842,11 +925,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
842
925
  i0.ɵɵadvance();
843
926
  i0.ɵɵtextInterpolate1("(", attempt_r14.validationErrorCount, " errors)");
844
927
  } }
845
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
846
- i0.ɵɵelementStart(0, "span", 153);
928
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
929
+ i0.ɵɵelementStart(0, "span", 156);
847
930
  i0.ɵɵtext(1);
848
931
  i0.ɵɵelementEnd();
849
- i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 142);
932
+ i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 145);
850
933
  } if (rf & 2) {
851
934
  const attempt_r14 = i0.ɵɵnextContext().$implicit;
852
935
  i0.ɵɵadvance();
@@ -854,8 +937,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
854
937
  i0.ɵɵadvance();
855
938
  i0.ɵɵconditional(attempt_r14.validationErrorCount > 0 ? 2 : -1);
856
939
  } }
857
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
858
- i0.ɵɵelementStart(0, "span", 152);
940
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
941
+ i0.ɵɵelementStart(0, "span", 155);
859
942
  i0.ɵɵtext(1);
860
943
  i0.ɵɵelementEnd();
861
944
  } if (rf & 2) {
@@ -863,16 +946,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
863
946
  i0.ɵɵadvance();
864
947
  i0.ɵɵtextInterpolate1("Output: ", attempt_r14.outputLength, " chars");
865
948
  } }
866
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Template(rf, ctx) { if (rf & 1) {
867
- i0.ɵɵelementStart(0, "div", 148)(1, "div", 149);
949
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Template(rf, ctx) { if (rf & 1) {
950
+ i0.ɵɵelementStart(0, "div", 151)(1, "div", 152);
868
951
  i0.ɵɵelement(2, "i");
869
952
  i0.ɵɵtext(3);
870
953
  i0.ɵɵelementEnd();
871
- i0.ɵɵelementStart(4, "div", 150)(5, "span", 151);
954
+ i0.ɵɵelementStart(4, "div", 153)(5, "span", 154);
872
955
  i0.ɵɵtext(6);
873
956
  i0.ɵɵelementEnd();
874
- i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_7_Template, 3, 2);
875
- i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_8_Template, 2, 1, "span", 152);
957
+ i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_7_Template, 3, 2);
958
+ i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_8_Template, 2, 1, "span", 155);
876
959
  i0.ɵɵelementEnd()();
877
960
  } if (rf & 2) {
878
961
  const attempt_r14 = ctx.$implicit;
@@ -888,29 +971,29 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
888
971
  i0.ɵɵadvance();
889
972
  i0.ɵɵconditional(attempt_r14.outputLength ? 8 : -1);
890
973
  } }
891
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_Template(rf, ctx) { if (rf & 1) {
892
- i0.ɵɵelementStart(0, "div", 138)(1, "h4");
974
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_Template(rf, ctx) { if (rf & 1) {
975
+ i0.ɵɵelementStart(0, "div", 141)(1, "h4");
893
976
  i0.ɵɵtext(2, "Validation Attempts");
894
977
  i0.ɵɵelementEnd();
895
- i0.ɵɵelementStart(3, "div", 146);
896
- i0.ɵɵrepeaterCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Template, 9, 10, "div", 147, _forTrack0);
978
+ i0.ɵɵelementStart(3, "div", 149);
979
+ i0.ɵɵrepeaterCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Template, 9, 10, "div", 150, _forTrack0);
897
980
  i0.ɵɵelementEnd()();
898
981
  } if (rf & 2) {
899
982
  const ctx_r1 = i0.ɵɵnextContext(3);
900
983
  i0.ɵɵadvance(4);
901
984
  i0.ɵɵrepeater(ctx_r1.validationAttempts);
902
985
  } }
903
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_35_Template(rf, ctx) { if (rf & 1) {
986
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_35_Template(rf, ctx) { if (rf & 1) {
904
987
  const _r15 = i0.ɵɵgetCurrentView();
905
- i0.ɵɵelementStart(0, "div", 139)(1, "div", 99)(2, "h4", 122);
988
+ i0.ɵɵelementStart(0, "div", 142)(1, "div", 102)(2, "h4", 125);
906
989
  i0.ɵɵtext(3, "Validation Summary Details");
907
990
  i0.ɵɵelementEnd();
908
- i0.ɵɵelementStart(4, "button", 102);
909
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_35_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationSummary, "json", "Validation Summary")); });
910
- i0.ɵɵelement(5, "i", 103);
991
+ i0.ɵɵelementStart(4, "button", 105);
992
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_35_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationSummary, "json", "Validation Summary")); });
993
+ i0.ɵɵelement(5, "i", 106);
911
994
  i0.ɵɵelementEnd()();
912
- i0.ɵɵelementStart(6, "div", 154)(7, "mj-code-editor", 155);
913
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_35_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationSummary, $event) || (ctx_r1.formattedValidationSummary = $event); return i0.ɵɵresetView($event); });
995
+ i0.ɵɵelementStart(6, "div", 157)(7, "mj-code-editor", 158);
996
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_35_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationSummary, $event) || (ctx_r1.formattedValidationSummary = $event); return i0.ɵɵresetView($event); });
914
997
  i0.ɵɵelementEnd()()();
915
998
  } if (rf & 2) {
916
999
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -918,17 +1001,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
918
1001
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationSummary);
919
1002
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
920
1003
  } }
921
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_36_Template(rf, ctx) { if (rf & 1) {
1004
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_36_Template(rf, ctx) { if (rf & 1) {
922
1005
  const _r16 = i0.ɵɵgetCurrentView();
923
- i0.ɵɵelementStart(0, "div", 139)(1, "div", 99)(2, "h4", 122);
1006
+ i0.ɵɵelementStart(0, "div", 142)(1, "div", 102)(2, "h4", 125);
924
1007
  i0.ɵɵtext(3, "Validation Attempts (Raw JSON)");
925
1008
  i0.ɵɵelementEnd();
926
- i0.ɵɵelementStart(4, "button", 102);
927
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_36_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationAttempts, "json", "Validation Attempts")); });
928
- i0.ɵɵelement(5, "i", 103);
1009
+ i0.ɵɵelementStart(4, "button", 105);
1010
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_36_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationAttempts, "json", "Validation Attempts")); });
1011
+ i0.ɵɵelement(5, "i", 106);
929
1012
  i0.ɵɵelementEnd()();
930
- i0.ɵɵelementStart(6, "div", 154)(7, "mj-code-editor", 156);
931
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_36_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationAttempts, $event) || (ctx_r1.formattedValidationAttempts = $event); return i0.ɵɵresetView($event); });
1013
+ i0.ɵɵelementStart(6, "div", 157)(7, "mj-code-editor", 159);
1014
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_36_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationAttempts, $event) || (ctx_r1.formattedValidationAttempts = $event); return i0.ɵɵresetView($event); });
932
1015
  i0.ɵɵelementEnd()()();
933
1016
  } if (rf & 2) {
934
1017
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -936,49 +1019,49 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
936
1019
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationAttempts);
937
1020
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
938
1021
  } }
939
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template(rf, ctx) { if (rf & 1) {
1022
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template(rf, ctx) { if (rf & 1) {
940
1023
  const _r13 = i0.ɵɵgetCurrentView();
941
1024
  i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
942
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onValidationPanelToggle($event)); });
943
- i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Template, 6, 2, "ng-template", 28);
944
- i0.ɵɵelementStart(2, "div", 29)(3, "div", 130)(4, "div", 131)(5, "h4");
1025
+ i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onValidationPanelToggle($event)); });
1026
+ i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Template, 6, 2, "ng-template", 28);
1027
+ i0.ɵɵelementStart(2, "div", 29)(3, "div", 133)(4, "div", 134)(5, "h4");
945
1028
  i0.ɵɵtext(6, "Validation Summary");
946
1029
  i0.ɵɵelementEnd();
947
- i0.ɵɵelementStart(7, "div", 132);
1030
+ i0.ɵɵelementStart(7, "div", 135);
948
1031
  i0.ɵɵelement(8, "i");
949
1032
  i0.ɵɵtext(9);
950
1033
  i0.ɵɵelementEnd()();
951
- i0.ɵɵelementStart(10, "div", 133)(11, "div", 134)(12, "div", 85);
1034
+ i0.ɵɵelementStart(10, "div", 136)(11, "div", 137)(12, "div", 86);
952
1035
  i0.ɵɵtext(13, "Total Attempts");
953
1036
  i0.ɵɵelementEnd();
954
- i0.ɵɵelementStart(14, "div", 86);
1037
+ i0.ɵɵelementStart(14, "div", 87);
955
1038
  i0.ɵɵtext(15);
956
1039
  i0.ɵɵelementEnd()();
957
- i0.ɵɵelementStart(16, "div", 134)(17, "div", 85);
1040
+ i0.ɵɵelementStart(16, "div", 137)(17, "div", 86);
958
1041
  i0.ɵɵtext(18, "Successful");
959
1042
  i0.ɵɵelementEnd();
960
- i0.ɵɵelementStart(19, "div", 86);
1043
+ i0.ɵɵelementStart(19, "div", 87);
961
1044
  i0.ɵɵtext(20);
962
1045
  i0.ɵɵelementEnd()();
963
- i0.ɵɵelementStart(21, "div", 134)(22, "div", 85);
1046
+ i0.ɵɵelementStart(21, "div", 137)(22, "div", 86);
964
1047
  i0.ɵɵtext(23, "Behavior");
965
1048
  i0.ɵɵelementEnd();
966
- i0.ɵɵelementStart(24, "div", 86);
1049
+ i0.ɵɵelementStart(24, "div", 87);
967
1050
  i0.ɵɵtext(25);
968
1051
  i0.ɵɵelementEnd()();
969
- i0.ɵɵelementStart(26, "div", 134)(27, "div", 85);
1052
+ i0.ɵɵelementStart(26, "div", 137)(27, "div", 86);
970
1053
  i0.ɵɵtext(28, "Retry Strategy");
971
1054
  i0.ɵɵelementEnd();
972
- i0.ɵɵelementStart(29, "div", 86);
1055
+ i0.ɵɵelementStart(29, "div", 87);
973
1056
  i0.ɵɵtext(30);
974
1057
  i0.ɵɵelementEnd()()();
975
- i0.ɵɵconditionalCreate(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_31_Template, 7, 2, "div", 135);
976
- i0.ɵɵconditionalCreate(32, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_32_Template, 6, 1, "div", 136);
1058
+ i0.ɵɵconditionalCreate(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_31_Template, 7, 2, "div", 138);
1059
+ i0.ɵɵconditionalCreate(32, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_32_Template, 6, 1, "div", 139);
977
1060
  i0.ɵɵelementEnd();
978
- i0.ɵɵconditionalCreate(33, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_33_Template, 18, 9, "div", 137);
979
- i0.ɵɵconditionalCreate(34, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_Template, 6, 0, "div", 138);
980
- i0.ɵɵconditionalCreate(35, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_35_Template, 8, 4, "div", 139);
981
- i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_36_Template, 8, 4, "div", 139);
1061
+ i0.ɵɵconditionalCreate(33, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_33_Template, 18, 9, "div", 140);
1062
+ i0.ɵɵconditionalCreate(34, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_Template, 6, 0, "div", 141);
1063
+ i0.ɵɵconditionalCreate(35, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_35_Template, 8, 4, "div", 142);
1064
+ i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_36_Template, 8, 4, "div", 142);
982
1065
  i0.ɵɵelementEnd()();
983
1066
  } if (rf & 2) {
984
1067
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1010,8 +1093,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Templat
1010
1093
  i0.ɵɵadvance();
1011
1094
  i0.ɵɵconditional(ctx_r1.record.ValidationAttempts ? 36 : -1);
1012
1095
  } }
1013
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1014
- i0.ɵɵelementStart(0, "span", 107);
1096
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1097
+ i0.ɵɵelementStart(0, "span", 110);
1015
1098
  i0.ɵɵtext(1);
1016
1099
  i0.ɵɵelementEnd();
1017
1100
  } if (rf & 2) {
@@ -1019,35 +1102,35 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_temp
1019
1102
  i0.ɵɵadvance();
1020
1103
  i0.ɵɵtextInterpolate1("(", ctx_r1.childRuns.length, " children)");
1021
1104
  } }
1022
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1023
- i0.ɵɵelementStart(0, "span", 92);
1024
- i0.ɵɵelement(1, "i", 159);
1105
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1106
+ i0.ɵɵelementStart(0, "span", 95);
1107
+ i0.ɵɵelement(1, "i", 162);
1025
1108
  i0.ɵɵtext(2, " Run Hierarchy ");
1026
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_template_1_Conditional_3_Template, 2, 1, "span", 107);
1109
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_3_Template, 2, 1, "span", 110);
1027
1110
  i0.ɵɵelementEnd();
1028
1111
  } if (rf & 2) {
1029
1112
  const ctx_r1 = i0.ɵɵnextContext(3);
1030
1113
  i0.ɵɵadvance(3);
1031
1114
  i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 3 : -1);
1032
1115
  } }
1033
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1116
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1034
1117
  const _r17 = i0.ɵɵgetCurrentView();
1035
- i0.ɵɵelementStart(0, "div", 157)(1, "h4");
1036
- i0.ɵɵelement(2, "i", 81);
1118
+ i0.ɵɵelementStart(0, "div", 160)(1, "h4");
1119
+ i0.ɵɵelement(2, "i", 82);
1037
1120
  i0.ɵɵtext(3, " Parent Run");
1038
1121
  i0.ɵɵelementEnd();
1039
- i0.ɵɵelementStart(4, "div", 160);
1040
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_3_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
1041
- i0.ɵɵelementStart(5, "div", 161);
1122
+ i0.ɵɵelementStart(4, "div", 163);
1123
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_3_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
1124
+ i0.ɵɵelementStart(5, "div", 164);
1042
1125
  i0.ɵɵelement(6, "i");
1043
1126
  i0.ɵɵelementEnd();
1044
- i0.ɵɵelementStart(7, "div", 162)(8, "div", 163);
1127
+ i0.ɵɵelementStart(7, "div", 165)(8, "div", 166);
1045
1128
  i0.ɵɵtext(9);
1046
- i0.ɵɵelementStart(10, "span", 164);
1129
+ i0.ɵɵelementStart(10, "span", 167);
1047
1130
  i0.ɵɵtext(11);
1048
1131
  i0.ɵɵelementEnd()();
1049
- i0.ɵɵelementStart(12, "div", 165)(13, "span");
1050
- i0.ɵɵelement(14, "i", 88);
1132
+ i0.ɵɵelementStart(12, "div", 168)(13, "span");
1133
+ i0.ɵɵelement(14, "i", 89);
1051
1134
  i0.ɵɵtext(15);
1052
1135
  i0.ɵɵelementEnd();
1053
1136
  i0.ɵɵelementStart(16, "span");
@@ -1055,11 +1138,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditi
1055
1138
  i0.ɵɵtext(18);
1056
1139
  i0.ɵɵelementEnd();
1057
1140
  i0.ɵɵelementStart(19, "span");
1058
- i0.ɵɵelement(20, "i", 91);
1141
+ i0.ɵɵelement(20, "i", 94);
1059
1142
  i0.ɵɵtext(21);
1060
1143
  i0.ɵɵpipe(22, "date");
1061
1144
  i0.ɵɵelementEnd()()();
1062
- i0.ɵɵelement(23, "i", 129);
1145
+ i0.ɵɵelement(23, "i", 132);
1063
1146
  i0.ɵɵelementEnd()();
1064
1147
  } if (rf & 2) {
1065
1148
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1078,8 +1161,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditi
1078
1161
  i0.ɵɵadvance(3);
1079
1162
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"));
1080
1163
  } }
1081
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1082
- i0.ɵɵelementStart(0, "span", 170);
1164
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1165
+ i0.ɵɵelementStart(0, "span", 173);
1083
1166
  i0.ɵɵtext(1);
1084
1167
  i0.ɵɵelementEnd();
1085
1168
  } if (rf & 2) {
@@ -1087,32 +1170,32 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditi
1087
1170
  i0.ɵɵadvance();
1088
1171
  i0.ɵɵtextInterpolate1("#", childRun_r19.ExecutionOrder);
1089
1172
  } }
1090
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_For_6_Template(rf, ctx) { if (rf & 1) {
1173
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Template(rf, ctx) { if (rf & 1) {
1091
1174
  const _r18 = i0.ɵɵgetCurrentView();
1092
- i0.ɵɵelementStart(0, "div", 169);
1093
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_For_6_Template_div_click_0_listener() { const childRun_r19 = i0.ɵɵrestoreView(_r18).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r19.ID)); });
1094
- i0.ɵɵelementStart(1, "div", 161);
1175
+ i0.ɵɵelementStart(0, "div", 172);
1176
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Template_div_click_0_listener() { const childRun_r19 = i0.ɵɵrestoreView(_r18).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r19.ID)); });
1177
+ i0.ɵɵelementStart(1, "div", 164);
1095
1178
  i0.ɵɵelement(2, "i");
1096
1179
  i0.ɵɵelementEnd();
1097
- i0.ɵɵelementStart(3, "div", 162)(4, "div", 163);
1180
+ i0.ɵɵelementStart(3, "div", 165)(4, "div", 166);
1098
1181
  i0.ɵɵtext(5);
1099
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_For_6_Conditional_6_Template, 2, 1, "span", 170);
1100
- i0.ɵɵelementStart(7, "span", 164);
1182
+ i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Conditional_6_Template, 2, 1, "span", 173);
1183
+ i0.ɵɵelementStart(7, "span", 167);
1101
1184
  i0.ɵɵtext(8);
1102
1185
  i0.ɵɵelementEnd()();
1103
- i0.ɵɵelementStart(9, "div", 165)(10, "span", 16);
1186
+ i0.ɵɵelementStart(9, "div", 168)(10, "span", 16);
1104
1187
  i0.ɵɵelement(11, "i");
1105
1188
  i0.ɵɵtext(12);
1106
1189
  i0.ɵɵelementEnd();
1107
1190
  i0.ɵɵelementStart(13, "span");
1108
- i0.ɵɵelement(14, "i", 88);
1191
+ i0.ɵɵelement(14, "i", 89);
1109
1192
  i0.ɵɵtext(15);
1110
1193
  i0.ɵɵelementEnd();
1111
1194
  i0.ɵɵelementStart(16, "span");
1112
1195
  i0.ɵɵelement(17, "i", 41);
1113
1196
  i0.ɵɵtext(18);
1114
1197
  i0.ɵɵelementEnd()()();
1115
- i0.ɵɵelement(19, "i", 129);
1198
+ i0.ɵɵelement(19, "i", 132);
1116
1199
  i0.ɵɵelementEnd();
1117
1200
  } if (rf & 2) {
1118
1201
  const childRun_r19 = ctx.$implicit;
@@ -1138,25 +1221,25 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditi
1138
1221
  i0.ɵɵadvance(3);
1139
1222
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r19.TokensUsed));
1140
1223
  } }
1141
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1142
- i0.ɵɵelementStart(0, "div", 158)(1, "h4");
1143
- i0.ɵɵelement(2, "i", 166);
1224
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1225
+ i0.ɵɵelementStart(0, "div", 161)(1, "h4");
1226
+ i0.ɵɵelement(2, "i", 169);
1144
1227
  i0.ɵɵtext(3, " Child Runs");
1145
1228
  i0.ɵɵelementEnd();
1146
- i0.ɵɵelementStart(4, "div", 167);
1147
- i0.ɵɵrepeaterCreate(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_For_6_Template, 20, 14, "div", 168, _forTrack1);
1229
+ i0.ɵɵelementStart(4, "div", 170);
1230
+ i0.ɵɵrepeaterCreate(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Template, 20, 14, "div", 171, _forTrack1);
1148
1231
  i0.ɵɵelementEnd()();
1149
1232
  } if (rf & 2) {
1150
1233
  const ctx_r1 = i0.ɵɵnextContext(3);
1151
1234
  i0.ɵɵadvance(5);
1152
1235
  i0.ɵɵrepeater(ctx_r1.childRuns);
1153
1236
  } }
1154
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template(rf, ctx) { if (rf & 1) {
1155
- i0.ɵɵelementStart(0, "mj-accordion-panel", 46);
1156
- i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_template_1_Template, 4, 1, "ng-template", 28);
1237
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template(rf, ctx) { if (rf & 1) {
1238
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 47);
1239
+ i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Template, 4, 1, "ng-template", 28);
1157
1240
  i0.ɵɵelementStart(2, "div", 29);
1158
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_3_Template, 24, 12, "div", 157);
1159
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_Template, 7, 0, "div", 158);
1241
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_3_Template, 24, 12, "div", 160);
1242
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_Template, 7, 0, "div", 161);
1160
1243
  i0.ɵɵelementEnd()();
1161
1244
  } if (rf & 2) {
1162
1245
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1166,33 +1249,33 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Templat
1166
1249
  i0.ɵɵadvance();
1167
1250
  i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 4 : -1);
1168
1251
  } }
1169
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_90_Template(rf, ctx) { if (rf & 1) {
1170
- i0.ɵɵelementStart(0, "span", 92);
1171
- i0.ɵɵelement(1, "i", 59);
1252
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_92_Template(rf, ctx) { if (rf & 1) {
1253
+ i0.ɵɵelementStart(0, "span", 95);
1254
+ i0.ɵɵelement(1, "i", 60);
1172
1255
  i0.ɵɵtext(2, " Additional Details ");
1173
1256
  i0.ɵɵelementEnd();
1174
1257
  } }
1175
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_93_Template(rf, ctx) { if (rf & 1) {
1258
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template(rf, ctx) { if (rf & 1) {
1176
1259
  const _r20 = i0.ɵɵgetCurrentView();
1177
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1260
+ i0.ɵɵelementStart(0, "div", 49)(1, "label");
1178
1261
  i0.ɵɵtext(2, "Agent");
1179
1262
  i0.ɵɵelementEnd();
1180
- i0.ɵɵelementStart(3, "div", 171);
1181
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_93_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
1182
- i0.ɵɵelement(4, "i", 172);
1263
+ i0.ɵɵelementStart(3, "div", 174);
1264
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
1265
+ i0.ɵɵelement(4, "i", 175);
1183
1266
  i0.ɵɵtext(5);
1184
- i0.ɵɵelement(6, "i", 129);
1267
+ i0.ɵɵelement(6, "i", 132);
1185
1268
  i0.ɵɵelementEnd()();
1186
1269
  } if (rf & 2) {
1187
1270
  const ctx_r1 = i0.ɵɵnextContext(2);
1188
1271
  i0.ɵɵadvance(5);
1189
1272
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Unknown", " ");
1190
1273
  } }
1191
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_94_Template(rf, ctx) { if (rf & 1) {
1192
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1274
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template(rf, ctx) { if (rf & 1) {
1275
+ i0.ɵɵelementStart(0, "div", 49)(1, "label");
1193
1276
  i0.ɵɵtext(2, "Run Type");
1194
1277
  i0.ɵɵelementEnd();
1195
- i0.ɵɵelementStart(3, "div", 49);
1278
+ i0.ɵɵelementStart(3, "div", 50);
1196
1279
  i0.ɵɵelement(4, "i");
1197
1280
  i0.ɵɵtext(5);
1198
1281
  i0.ɵɵelementEnd()();
@@ -1203,12 +1286,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_94_Templat
1203
1286
  i0.ɵɵadvance();
1204
1287
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
1205
1288
  } }
1206
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template(rf, ctx) { if (rf & 1) {
1207
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1289
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_97_Template(rf, ctx) { if (rf & 1) {
1290
+ i0.ɵɵelementStart(0, "div", 49)(1, "label");
1208
1291
  i0.ɵɵtext(2, "Response Format");
1209
1292
  i0.ɵɵelementEnd();
1210
- i0.ɵɵelementStart(3, "div", 49);
1211
- i0.ɵɵelement(4, "i", 90);
1293
+ i0.ɵɵelementStart(3, "div", 50);
1294
+ i0.ɵɵelement(4, "i", 92);
1212
1295
  i0.ɵɵtext(5);
1213
1296
  i0.ɵɵelementEnd()();
1214
1297
  } if (rf & 2) {
@@ -1216,12 +1299,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Templat
1216
1299
  i0.ɵɵadvance(5);
1217
1300
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.ResponseFormat, " ");
1218
1301
  } }
1219
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_150_Template(rf, ctx) { if (rf & 1) {
1220
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1302
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template(rf, ctx) { if (rf & 1) {
1303
+ i0.ɵɵelementStart(0, "div", 49)(1, "label");
1221
1304
  i0.ɵɵtext(2, "Started At");
1222
1305
  i0.ɵɵelementEnd();
1223
- i0.ɵɵelementStart(3, "div", 49);
1224
- i0.ɵɵelement(4, "i", 88);
1306
+ i0.ɵɵelementStart(3, "div", 50);
1307
+ i0.ɵɵelement(4, "i", 89);
1225
1308
  i0.ɵɵtext(5);
1226
1309
  i0.ɵɵpipe(6, "date");
1227
1310
  i0.ɵɵelementEnd()();
@@ -1230,12 +1313,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_150_Templa
1230
1313
  i0.ɵɵadvance(5);
1231
1314
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.RunAt, "medium"), " ");
1232
1315
  } }
1233
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_151_Template(rf, ctx) { if (rf & 1) {
1234
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1316
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_153_Template(rf, ctx) { if (rf & 1) {
1317
+ i0.ɵɵelementStart(0, "div", 49)(1, "label");
1235
1318
  i0.ɵɵtext(2, "Completed At");
1236
1319
  i0.ɵɵelementEnd();
1237
- i0.ɵɵelementStart(3, "div", 49);
1238
- i0.ɵɵelement(4, "i", 173);
1320
+ i0.ɵɵelementStart(3, "div", 50);
1321
+ i0.ɵɵelement(4, "i", 176);
1239
1322
  i0.ɵɵtext(5);
1240
1323
  i0.ɵɵpipe(6, "date");
1241
1324
  i0.ɵɵelementEnd()();
@@ -1244,30 +1327,30 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_151_Templa
1244
1327
  i0.ɵɵadvance(5);
1245
1328
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.CompletedAt, "medium"), " ");
1246
1329
  } }
1247
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1248
- i0.ɵɵelementStart(0, "span", 92);
1249
- i0.ɵɵelement(1, "i", 79);
1330
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1331
+ i0.ɵɵelementStart(0, "span", 95);
1332
+ i0.ɵɵelement(1, "i", 80);
1250
1333
  i0.ɵɵtext(2, " Model Specific Response Details ");
1251
- i0.ɵɵelementStart(3, "span", 94);
1334
+ i0.ɵɵelementStart(3, "span", 97);
1252
1335
  i0.ɵɵtext(4, "JSON");
1253
1336
  i0.ɵɵelementEnd()();
1254
1337
  } }
1255
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template(rf, ctx) { if (rf & 1) {
1338
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template(rf, ctx) { if (rf & 1) {
1256
1339
  const _r21 = i0.ɵɵgetCurrentView();
1257
1340
  i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
1258
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onModelSpecificPanelToggle($event)); });
1259
- i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_ng_template_1_Template, 5, 0, "ng-template", 28);
1260
- i0.ɵɵelementStart(2, "div", 29)(3, "div", 33)(4, "div", 99)(5, "button", 100);
1261
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedModelSpecificResponseDetails, "Model Specific Response Details")); });
1262
- i0.ɵɵelement(6, "i", 101);
1341
+ i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onModelSpecificPanelToggle($event)); });
1342
+ i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_ng_template_1_Template, 5, 0, "ng-template", 28);
1343
+ i0.ɵɵelementStart(2, "div", 29)(3, "div", 33)(4, "div", 102)(5, "button", 103);
1344
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedModelSpecificResponseDetails, "Model Specific Response Details")); });
1345
+ i0.ɵɵelement(6, "i", 104);
1263
1346
  i0.ɵɵtext(7, " Copy ");
1264
1347
  i0.ɵɵelementEnd();
1265
- i0.ɵɵelementStart(8, "button", 102);
1266
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSpecificResponseDetails, "json", "Model Specific Response Details")); });
1267
- i0.ɵɵelement(9, "i", 103);
1348
+ i0.ɵɵelementStart(8, "button", 105);
1349
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSpecificResponseDetails, "json", "Model Specific Response Details")); });
1350
+ i0.ɵɵelement(9, "i", 106);
1268
1351
  i0.ɵɵelementEnd()();
1269
- i0.ɵɵelementStart(10, "mj-code-editor", 174);
1270
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template_mj_code_editor_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSpecificResponseDetails, $event) || (ctx_r1.formattedModelSpecificResponseDetails = $event); return i0.ɵɵresetView($event); });
1352
+ i0.ɵɵelementStart(10, "mj-code-editor", 177);
1353
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template_mj_code_editor_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSpecificResponseDetails, $event) || (ctx_r1.formattedModelSpecificResponseDetails = $event); return i0.ɵɵresetView($event); });
1271
1354
  i0.ɵɵelementEnd()()()();
1272
1355
  } if (rf & 2) {
1273
1356
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1276,22 +1359,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Templa
1276
1359
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSpecificResponseDetails);
1277
1360
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
1278
1361
  } }
1279
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1280
- i0.ɵɵelementStart(0, "span", 141);
1362
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1363
+ i0.ɵɵelementStart(0, "span", 144);
1281
1364
  i0.ɵɵtext(1, "Cached");
1282
1365
  i0.ɵɵelementEnd();
1283
1366
  } }
1284
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1285
- i0.ɵɵelementStart(0, "span", 141);
1367
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1368
+ i0.ɵɵelementStart(0, "span", 144);
1286
1369
  i0.ɵɵtext(1, "Selected");
1287
1370
  i0.ɵɵelementEnd();
1288
1371
  } }
1289
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Template(rf, ctx) { if (rf & 1) {
1290
- i0.ɵɵelementStart(0, "span", 92);
1291
- i0.ɵɵelement(1, "i", 79);
1372
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Template(rf, ctx) { if (rf & 1) {
1373
+ i0.ɵɵelementStart(0, "span", 95);
1374
+ i0.ɵɵelement(1, "i", 80);
1292
1375
  i0.ɵɵtext(2, " Model Selection & Performance ");
1293
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Conditional_3_Template, 2, 0, "span", 141);
1294
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Conditional_4_Template, 2, 0, "span", 141);
1376
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Conditional_3_Template, 2, 0, "span", 144);
1377
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Conditional_4_Template, 2, 0, "span", 144);
1295
1378
  i0.ɵɵelementEnd();
1296
1379
  } if (rf & 2) {
1297
1380
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1300,12 +1383,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Templa
1300
1383
  i0.ɵɵadvance();
1301
1384
  i0.ɵɵconditional(ctx_r1.record.WasSelectedResult ? 4 : -1);
1302
1385
  } }
1303
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_181_Template(rf, ctx) { if (rf & 1) {
1304
- i0.ɵɵelementStart(0, "div", 62)(1, "label");
1386
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Template(rf, ctx) { if (rf & 1) {
1387
+ i0.ɵɵelementStart(0, "div", 63)(1, "label");
1305
1388
  i0.ɵɵtext(2, "Cache Key");
1306
1389
  i0.ɵɵelementEnd();
1307
- i0.ɵɵelementStart(3, "div", 49);
1308
- i0.ɵɵelement(4, "i", 175);
1390
+ i0.ɵɵelementStart(3, "div", 50);
1391
+ i0.ɵɵelement(4, "i", 178);
1309
1392
  i0.ɵɵelementStart(5, "code");
1310
1393
  i0.ɵɵtext(6);
1311
1394
  i0.ɵɵelementEnd()()();
@@ -1314,28 +1397,28 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_181_Templa
1314
1397
  i0.ɵɵadvance(6);
1315
1398
  i0.ɵɵtextInterpolate(ctx_r1.record.CacheKey);
1316
1399
  } }
1317
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_182_Template(rf, ctx) { if (rf & 1) {
1400
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template(rf, ctx) { if (rf & 1) {
1318
1401
  const _r22 = i0.ɵɵgetCurrentView();
1319
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1402
+ i0.ɵɵelementStart(0, "div", 49)(1, "label");
1320
1403
  i0.ɵɵtext(2, "Judge Prompt");
1321
1404
  i0.ɵɵelementEnd();
1322
- i0.ɵɵelementStart(3, "div", 176);
1323
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_182_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.JudgeID)); });
1324
- i0.ɵɵelement(4, "i", 177);
1405
+ i0.ɵɵelementStart(3, "div", 179);
1406
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.JudgeID)); });
1407
+ i0.ɵɵelement(4, "i", 180);
1325
1408
  i0.ɵɵtext(5);
1326
- i0.ɵɵelement(6, "i", 129);
1409
+ i0.ɵɵelement(6, "i", 132);
1327
1410
  i0.ɵɵelementEnd()();
1328
1411
  } if (rf & 2) {
1329
1412
  const ctx_r1 = i0.ɵɵnextContext(2);
1330
1413
  i0.ɵɵadvance(5);
1331
1414
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Judge || "Unknown", " ");
1332
1415
  } }
1333
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Template(rf, ctx) { if (rf & 1) {
1334
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1416
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Template(rf, ctx) { if (rf & 1) {
1417
+ i0.ɵɵelementStart(0, "div", 49)(1, "label");
1335
1418
  i0.ɵɵtext(2, "Judge Score");
1336
1419
  i0.ɵɵelementEnd();
1337
- i0.ɵɵelementStart(3, "div", 49);
1338
- i0.ɵɵelement(4, "i", 178);
1420
+ i0.ɵɵelementStart(3, "div", 50);
1421
+ i0.ɵɵelement(4, "i", 181);
1339
1422
  i0.ɵɵtext(5);
1340
1423
  i0.ɵɵelementEnd()();
1341
1424
  } if (rf & 2) {
@@ -1343,12 +1426,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Templa
1343
1426
  i0.ɵɵadvance(5);
1344
1427
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.JudgeScore, " ");
1345
1428
  } }
1346
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_196_Template(rf, ctx) { if (rf & 1) {
1347
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1429
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template(rf, ctx) { if (rf & 1) {
1430
+ i0.ɵɵelementStart(0, "div", 49)(1, "label");
1348
1431
  i0.ɵɵtext(2, "First Token Time");
1349
1432
  i0.ɵɵelementEnd();
1350
- i0.ɵɵelementStart(3, "div", 49);
1351
- i0.ɵɵelement(4, "i", 179);
1433
+ i0.ɵɵelementStart(3, "div", 50);
1434
+ i0.ɵɵelement(4, "i", 93);
1352
1435
  i0.ɵɵtext(5);
1353
1436
  i0.ɵɵelementEnd()();
1354
1437
  } if (rf & 2) {
@@ -1356,12 +1439,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_196_Templa
1356
1439
  i0.ɵɵadvance(5);
1357
1440
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.FirstTokenTime, " ms ");
1358
1441
  } }
1359
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1360
- i0.ɵɵelementStart(0, "div", 62)(1, "label");
1442
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1443
+ i0.ɵɵelementStart(0, "div", 63)(1, "label");
1361
1444
  i0.ɵɵtext(2, "Cancellation Reason");
1362
1445
  i0.ɵɵelementEnd();
1363
- i0.ɵɵelementStart(3, "div", 49);
1364
- i0.ɵɵelement(4, "i", 182);
1446
+ i0.ɵɵelementStart(3, "div", 50);
1447
+ i0.ɵɵelement(4, "i", 184);
1365
1448
  i0.ɵɵtext(5);
1366
1449
  i0.ɵɵelementEnd()();
1367
1450
  } if (rf & 2) {
@@ -1369,31 +1452,31 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Condit
1369
1452
  i0.ɵɵadvance(5);
1370
1453
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CancellationReason, " ");
1371
1454
  } }
1372
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Template(rf, ctx) { if (rf & 1) {
1373
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1455
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template(rf, ctx) { if (rf & 1) {
1456
+ i0.ɵɵelementStart(0, "div", 49)(1, "label");
1374
1457
  i0.ɵɵtext(2, "Cancelled");
1375
1458
  i0.ɵɵelementEnd();
1376
- i0.ɵɵelementStart(3, "div", 180);
1377
- i0.ɵɵelement(4, "i", 181);
1459
+ i0.ɵɵelementStart(3, "div", 182);
1460
+ i0.ɵɵelement(4, "i", 183);
1378
1461
  i0.ɵɵtext(5, " Yes ");
1379
1462
  i0.ɵɵelementEnd()();
1380
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Conditional_6_Template, 6, 1, "div", 62);
1463
+ i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Conditional_6_Template, 6, 1, "div", 63);
1381
1464
  } if (rf & 2) {
1382
1465
  const ctx_r1 = i0.ɵɵnextContext(2);
1383
1466
  i0.ɵɵadvance(6);
1384
1467
  i0.ɵɵconditional(ctx_r1.record.CancellationReason ? 6 : -1);
1385
1468
  } }
1386
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template(rf, ctx) { if (rf & 1) {
1469
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template(rf, ctx) { if (rf & 1) {
1387
1470
  const _r23 = i0.ɵɵgetCurrentView();
1388
- i0.ɵɵelementStart(0, "div", 63)(1, "div", 99)(2, "h4", 122);
1471
+ i0.ɵɵelementStart(0, "div", 64)(1, "div", 102)(2, "h4", 125);
1389
1472
  i0.ɵɵtext(3, "Model Selection Details");
1390
1473
  i0.ɵɵelementEnd();
1391
- i0.ɵɵelementStart(4, "button", 102);
1392
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSelection, "json", "Model Selection")); });
1393
- i0.ɵɵelement(5, "i", 103);
1474
+ i0.ɵɵelementStart(4, "button", 105);
1475
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSelection, "json", "Model Selection")); });
1476
+ i0.ɵɵelement(5, "i", 106);
1394
1477
  i0.ɵɵelementEnd()();
1395
- i0.ɵɵelementStart(6, "div", 154)(7, "mj-code-editor", 183);
1396
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSelection, $event) || (ctx_r1.formattedModelSelection = $event); return i0.ɵɵresetView($event); });
1478
+ i0.ɵɵelementStart(6, "div", 157)(7, "mj-code-editor", 185);
1479
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSelection, $event) || (ctx_r1.formattedModelSelection = $event); return i0.ɵɵresetView($event); });
1397
1480
  i0.ɵɵelementEnd()()();
1398
1481
  } if (rf & 2) {
1399
1482
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1401,17 +1484,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Templa
1401
1484
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSelection);
1402
1485
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
1403
1486
  } }
1404
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template(rf, ctx) { if (rf & 1) {
1487
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template(rf, ctx) { if (rf & 1) {
1405
1488
  const _r24 = i0.ɵɵgetCurrentView();
1406
- i0.ɵɵelementStart(0, "div", 64)(1, "div", 99)(2, "h4", 122);
1489
+ i0.ɵɵelementStart(0, "div", 65)(1, "div", 102)(2, "h4", 125);
1407
1490
  i0.ɵɵtext(3, "Error Details");
1408
1491
  i0.ɵɵelementEnd();
1409
- i0.ɵɵelementStart(4, "button", 102);
1410
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
1411
- i0.ɵɵelement(5, "i", 103);
1492
+ i0.ɵɵelementStart(4, "button", 105);
1493
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
1494
+ i0.ɵɵelement(5, "i", 106);
1412
1495
  i0.ɵɵelementEnd()();
1413
- i0.ɵɵelementStart(6, "div", 154)(7, "mj-code-editor", 184);
1414
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedErrorDetails, $event) || (ctx_r1.formattedErrorDetails = $event); return i0.ɵɵresetView($event); });
1496
+ i0.ɵɵelementStart(6, "div", 157)(7, "mj-code-editor", 186);
1497
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedErrorDetails, $event) || (ctx_r1.formattedErrorDetails = $event); return i0.ɵɵresetView($event); });
1415
1498
  i0.ɵɵelementEnd()()();
1416
1499
  } if (rf & 2) {
1417
1500
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1451,7 +1534,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1451
1534
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.refreshData()); });
1452
1535
  i0.ɵɵelement(29, "i", 24);
1453
1536
  i0.ɵɵelementEnd()()();
1454
- i0.ɵɵconditionalCreate(30, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template, 37, 10)(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Template, 23, 4, "div", 25);
1537
+ i0.ɵɵconditionalCreate(30, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template, 38, 11)(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Template, 24, 5, "div", 25);
1455
1538
  i0.ɵɵelementEnd();
1456
1539
  i0.ɵɵelementStart(32, "div", 26)(33, "mj-accordion-panel", 27);
1457
1540
  i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_33_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputPanelToggle($event)); });
@@ -1494,158 +1577,160 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1494
1577
  i0.ɵɵelementStart(67, "h4");
1495
1578
  i0.ɵɵtext(68, "Total Tokens");
1496
1579
  i0.ɵɵelementEnd()();
1497
- i0.ɵɵelementStart(69, "div", 38);
1580
+ i0.ɵɵelementStart(69, "div", 42);
1498
1581
  i0.ɵɵtext(70);
1499
1582
  i0.ɵɵelementEnd();
1500
1583
  i0.ɵɵconditionalCreate(71, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_71_Template, 3, 1, "div", 39);
1584
+ i0.ɵɵconditionalCreate(72, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_72_Template, 3, 1, "div", 39);
1501
1585
  i0.ɵɵelementEnd();
1502
- i0.ɵɵelementStart(72, "div", 35)(73, "div", 36);
1503
- i0.ɵɵelement(74, "i", 42);
1504
- i0.ɵɵelementStart(75, "h4");
1505
- i0.ɵɵtext(76, "Cost");
1586
+ i0.ɵɵconditionalCreate(73, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Template, 9, 3, "div", 35);
1587
+ i0.ɵɵelementStart(74, "div", 35)(75, "div", 36);
1588
+ i0.ɵɵelement(76, "i", 43);
1589
+ i0.ɵɵelementStart(77, "h4");
1590
+ i0.ɵɵtext(78, "Cost");
1506
1591
  i0.ɵɵelementEnd()();
1507
- i0.ɵɵelementStart(77, "div", 38);
1508
- i0.ɵɵtext(78);
1592
+ i0.ɵɵelementStart(79, "div", 38);
1593
+ i0.ɵɵtext(80);
1509
1594
  i0.ɵɵelementEnd();
1510
- i0.ɵɵconditionalCreate(79, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Template, 3, 1, "div", 39);
1511
- i0.ɵɵconditionalCreate(80, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_80_Template, 2, 1, "div", 43);
1595
+ i0.ɵɵconditionalCreate(81, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Template, 3, 1, "div", 39);
1596
+ i0.ɵɵconditionalCreate(82, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template, 2, 1, "div", 44);
1512
1597
  i0.ɵɵelementEnd();
1513
- i0.ɵɵconditionalCreate(81, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Template, 7, 1, "div", 35);
1514
- i0.ɵɵconditionalCreate(82, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template, 7, 1, "div", 35);
1515
1598
  i0.ɵɵconditionalCreate(83, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template, 7, 1, "div", 35);
1599
+ i0.ɵɵconditionalCreate(84, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Template, 7, 1, "div", 35);
1600
+ i0.ɵɵconditionalCreate(85, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template, 7, 1, "div", 35);
1516
1601
  i0.ɵɵelementEnd();
1517
- i0.ɵɵelementStart(84, "div", 44);
1518
- i0.ɵɵconditionalCreate(85, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template, 5, 1, "div", 45);
1519
- i0.ɵɵconditionalCreate(86, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template, 6, 1, "div", 45);
1602
+ i0.ɵɵelementStart(86, "div", 45);
1603
+ i0.ɵɵconditionalCreate(87, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template, 5, 1, "div", 46);
1604
+ i0.ɵɵconditionalCreate(88, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template, 6, 1, "div", 46);
1520
1605
  i0.ɵɵelementEnd()()();
1521
- i0.ɵɵconditionalCreate(87, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template, 37, 18, "mj-accordion-panel", 46);
1522
- i0.ɵɵconditionalCreate(88, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template, 5, 3, "mj-accordion-panel", 46);
1523
- i0.ɵɵelementStart(89, "mj-accordion-panel", 46);
1524
- i0.ɵɵtemplate(90, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_90_Template, 3, 0, "ng-template", 28);
1525
- i0.ɵɵelementStart(91, "div", 29)(92, "div", 47);
1526
- i0.ɵɵconditionalCreate(93, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_93_Template, 7, 1, "div", 48);
1527
- i0.ɵɵconditionalCreate(94, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_94_Template, 6, 3, "div", 48);
1528
- i0.ɵɵconditionalCreate(95, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template, 6, 1, "div", 48);
1529
- i0.ɵɵelementStart(96, "div", 48)(97, "label");
1530
- i0.ɵɵtext(98, "Temperature");
1606
+ i0.ɵɵconditionalCreate(89, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template, 37, 18, "mj-accordion-panel", 47);
1607
+ i0.ɵɵconditionalCreate(90, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template, 5, 3, "mj-accordion-panel", 47);
1608
+ i0.ɵɵelementStart(91, "mj-accordion-panel", 47);
1609
+ i0.ɵɵtemplate(92, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_92_Template, 3, 0, "ng-template", 28);
1610
+ i0.ɵɵelementStart(93, "div", 29)(94, "div", 48);
1611
+ i0.ɵɵconditionalCreate(95, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template, 7, 1, "div", 49);
1612
+ i0.ɵɵconditionalCreate(96, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template, 6, 3, "div", 49);
1613
+ i0.ɵɵconditionalCreate(97, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_97_Template, 6, 1, "div", 49);
1614
+ i0.ɵɵelementStart(98, "div", 49)(99, "label");
1615
+ i0.ɵɵtext(100, "Temperature");
1531
1616
  i0.ɵɵelementEnd();
1532
- i0.ɵɵelementStart(99, "div", 49);
1533
- i0.ɵɵelement(100, "i", 50);
1534
- i0.ɵɵtext(101);
1617
+ i0.ɵɵelementStart(101, "div", 50);
1618
+ i0.ɵɵelement(102, "i", 51);
1619
+ i0.ɵɵtext(103);
1535
1620
  i0.ɵɵelementEnd()();
1536
- i0.ɵɵelementStart(102, "div", 48)(103, "label");
1537
- i0.ɵɵtext(104, "Top P");
1621
+ i0.ɵɵelementStart(104, "div", 49)(105, "label");
1622
+ i0.ɵɵtext(106, "Top P");
1538
1623
  i0.ɵɵelementEnd();
1539
- i0.ɵɵelementStart(105, "div", 49);
1540
- i0.ɵɵelement(106, "i", 51);
1541
- i0.ɵɵtext(107);
1624
+ i0.ɵɵelementStart(107, "div", 50);
1625
+ i0.ɵɵelement(108, "i", 52);
1626
+ i0.ɵɵtext(109);
1542
1627
  i0.ɵɵelementEnd()();
1543
- i0.ɵɵelementStart(108, "div", 48)(109, "label");
1544
- i0.ɵɵtext(110, "Top K");
1628
+ i0.ɵɵelementStart(110, "div", 49)(111, "label");
1629
+ i0.ɵɵtext(112, "Top K");
1545
1630
  i0.ɵɵelementEnd();
1546
- i0.ɵɵelementStart(111, "div", 49);
1547
- i0.ɵɵelement(112, "i", 52);
1548
- i0.ɵɵtext(113);
1631
+ i0.ɵɵelementStart(113, "div", 50);
1632
+ i0.ɵɵelement(114, "i", 53);
1633
+ i0.ɵɵtext(115);
1549
1634
  i0.ɵɵelementEnd()();
1550
- i0.ɵɵelementStart(114, "div", 48)(115, "label");
1551
- i0.ɵɵtext(116, "Min P");
1635
+ i0.ɵɵelementStart(116, "div", 49)(117, "label");
1636
+ i0.ɵɵtext(118, "Min P");
1552
1637
  i0.ɵɵelementEnd();
1553
- i0.ɵɵelementStart(117, "div", 49);
1554
- i0.ɵɵelement(118, "i", 53);
1555
- i0.ɵɵtext(119);
1638
+ i0.ɵɵelementStart(119, "div", 50);
1639
+ i0.ɵɵelement(120, "i", 54);
1640
+ i0.ɵɵtext(121);
1556
1641
  i0.ɵɵelementEnd()();
1557
- i0.ɵɵelementStart(120, "div", 48)(121, "label");
1558
- i0.ɵɵtext(122, "Frequency Penalty");
1642
+ i0.ɵɵelementStart(122, "div", 49)(123, "label");
1643
+ i0.ɵɵtext(124, "Frequency Penalty");
1559
1644
  i0.ɵɵelementEnd();
1560
- i0.ɵɵelementStart(123, "div", 49);
1561
- i0.ɵɵelement(124, "i", 54);
1562
- i0.ɵɵtext(125);
1645
+ i0.ɵɵelementStart(125, "div", 50);
1646
+ i0.ɵɵelement(126, "i", 55);
1647
+ i0.ɵɵtext(127);
1563
1648
  i0.ɵɵelementEnd()();
1564
- i0.ɵɵelementStart(126, "div", 48)(127, "label");
1565
- i0.ɵɵtext(128, "Presence Penalty");
1649
+ i0.ɵɵelementStart(128, "div", 49)(129, "label");
1650
+ i0.ɵɵtext(130, "Presence Penalty");
1566
1651
  i0.ɵɵelementEnd();
1567
- i0.ɵɵelementStart(129, "div", 49);
1568
- i0.ɵɵelement(130, "i", 55);
1569
- i0.ɵɵtext(131);
1652
+ i0.ɵɵelementStart(131, "div", 50);
1653
+ i0.ɵɵelement(132, "i", 56);
1654
+ i0.ɵɵtext(133);
1570
1655
  i0.ɵɵelementEnd()();
1571
- i0.ɵɵelementStart(132, "div", 48)(133, "label");
1572
- i0.ɵɵtext(134, "Seed");
1656
+ i0.ɵɵelementStart(134, "div", 49)(135, "label");
1657
+ i0.ɵɵtext(136, "Seed");
1573
1658
  i0.ɵɵelementEnd();
1574
- i0.ɵɵelementStart(135, "div", 49);
1575
- i0.ɵɵelement(136, "i", 56);
1576
- i0.ɵɵtext(137);
1659
+ i0.ɵɵelementStart(137, "div", 50);
1660
+ i0.ɵɵelement(138, "i", 57);
1661
+ i0.ɵɵtext(139);
1577
1662
  i0.ɵɵelementEnd()();
1578
- i0.ɵɵelementStart(138, "div", 48)(139, "label");
1579
- i0.ɵɵtext(140, "Stop Sequences");
1663
+ i0.ɵɵelementStart(140, "div", 49)(141, "label");
1664
+ i0.ɵɵtext(142, "Stop Sequences");
1580
1665
  i0.ɵɵelementEnd();
1581
- i0.ɵɵelementStart(141, "div", 49);
1582
- i0.ɵɵelement(142, "i", 57);
1583
- i0.ɵɵtext(143);
1666
+ i0.ɵɵelementStart(143, "div", 50);
1667
+ i0.ɵɵelement(144, "i", 58);
1668
+ i0.ɵɵtext(145);
1584
1669
  i0.ɵɵelementEnd()();
1585
- i0.ɵɵelementStart(144, "div", 48)(145, "label");
1586
- i0.ɵɵtext(146, "Assistant Prefill");
1670
+ i0.ɵɵelementStart(146, "div", 49)(147, "label");
1671
+ i0.ɵɵtext(148, "Assistant Prefill");
1587
1672
  i0.ɵɵelementEnd();
1588
- i0.ɵɵelementStart(147, "div", 49);
1589
- i0.ɵɵelement(148, "i", 58);
1590
- i0.ɵɵtext(149);
1673
+ i0.ɵɵelementStart(149, "div", 50);
1674
+ i0.ɵɵelement(150, "i", 59);
1675
+ i0.ɵɵtext(151);
1591
1676
  i0.ɵɵelementEnd()();
1592
- i0.ɵɵconditionalCreate(150, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_150_Template, 7, 4, "div", 48);
1593
- i0.ɵɵconditionalCreate(151, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_151_Template, 7, 4, "div", 48);
1677
+ i0.ɵɵconditionalCreate(152, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template, 7, 4, "div", 49);
1678
+ i0.ɵɵconditionalCreate(153, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_153_Template, 7, 4, "div", 49);
1594
1679
  i0.ɵɵelementEnd()()();
1595
- i0.ɵɵconditionalCreate(152, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template, 11, 5, "mj-accordion-panel", 46);
1596
- i0.ɵɵelementStart(153, "mj-accordion-panel", 27);
1597
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_153_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onModelSelectionPanelToggle($event)); });
1598
- i0.ɵɵtemplate(154, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Template, 5, 2, "ng-template", 28);
1599
- i0.ɵɵelementStart(155, "div", 29)(156, "div", 47)(157, "div", 48)(158, "label");
1600
- i0.ɵɵtext(159, "Status");
1680
+ i0.ɵɵconditionalCreate(154, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template, 11, 5, "mj-accordion-panel", 47);
1681
+ i0.ɵɵelementStart(155, "mj-accordion-panel", 27);
1682
+ i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_155_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onModelSelectionPanelToggle($event)); });
1683
+ i0.ɵɵtemplate(156, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Template, 5, 2, "ng-template", 28);
1684
+ i0.ɵɵelementStart(157, "div", 29)(158, "div", 48)(159, "div", 49)(160, "label");
1685
+ i0.ɵɵtext(161, "Status");
1601
1686
  i0.ɵɵelementEnd();
1602
- i0.ɵɵelementStart(160, "div", 49);
1603
- i0.ɵɵelement(161, "i", 59);
1604
- i0.ɵɵtext(162);
1687
+ i0.ɵɵelementStart(162, "div", 50);
1688
+ i0.ɵɵelement(163, "i", 60);
1689
+ i0.ɵɵtext(164);
1605
1690
  i0.ɵɵelementEnd()();
1606
- i0.ɵɵelementStart(163, "div", 48)(164, "label");
1607
- i0.ɵɵtext(165, "Selection Strategy");
1691
+ i0.ɵɵelementStart(165, "div", 49)(166, "label");
1692
+ i0.ɵɵtext(167, "Selection Strategy");
1608
1693
  i0.ɵɵelementEnd();
1609
- i0.ɵɵelementStart(166, "div", 49);
1610
- i0.ɵɵelement(167, "i", 60);
1611
- i0.ɵɵtext(168);
1694
+ i0.ɵɵelementStart(168, "div", 50);
1695
+ i0.ɵɵelement(169, "i", 61);
1696
+ i0.ɵɵtext(170);
1612
1697
  i0.ɵɵelementEnd()();
1613
- i0.ɵɵelementStart(169, "div", 48)(170, "label");
1614
- i0.ɵɵtext(171, "Model Power Rank");
1698
+ i0.ɵɵelementStart(171, "div", 49)(172, "label");
1699
+ i0.ɵɵtext(173, "Model Power Rank");
1615
1700
  i0.ɵɵelementEnd();
1616
- i0.ɵɵelementStart(172, "div", 49);
1617
- i0.ɵɵelement(173, "i", 61);
1618
- i0.ɵɵtext(174);
1701
+ i0.ɵɵelementStart(174, "div", 50);
1702
+ i0.ɵɵelement(175, "i", 62);
1703
+ i0.ɵɵtext(176);
1619
1704
  i0.ɵɵelementEnd()();
1620
- i0.ɵɵelementStart(175, "div", 48)(176, "label");
1621
- i0.ɵɵtext(177, "Cache Hit");
1705
+ i0.ɵɵelementStart(177, "div", 49)(178, "label");
1706
+ i0.ɵɵtext(179, "Cache Hit");
1622
1707
  i0.ɵɵelementEnd();
1623
- i0.ɵɵelementStart(178, "div", 49);
1624
- i0.ɵɵelement(179, "i");
1625
- i0.ɵɵtext(180);
1708
+ i0.ɵɵelementStart(180, "div", 50);
1709
+ i0.ɵɵelement(181, "i");
1710
+ i0.ɵɵtext(182);
1626
1711
  i0.ɵɵelementEnd()();
1627
- i0.ɵɵconditionalCreate(181, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_181_Template, 7, 1, "div", 62);
1628
- i0.ɵɵconditionalCreate(182, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_182_Template, 7, 1, "div", 48);
1629
- i0.ɵɵconditionalCreate(183, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Template, 6, 1, "div", 48);
1630
- i0.ɵɵelementStart(184, "div", 48)(185, "label");
1631
- i0.ɵɵtext(186, "Was Selected Result");
1712
+ i0.ɵɵconditionalCreate(183, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Template, 7, 1, "div", 63);
1713
+ i0.ɵɵconditionalCreate(184, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template, 7, 1, "div", 49);
1714
+ i0.ɵɵconditionalCreate(185, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Template, 6, 1, "div", 49);
1715
+ i0.ɵɵelementStart(186, "div", 49)(187, "label");
1716
+ i0.ɵɵtext(188, "Was Selected Result");
1632
1717
  i0.ɵɵelementEnd();
1633
- i0.ɵɵelementStart(187, "div", 49);
1634
- i0.ɵɵelement(188, "i");
1635
- i0.ɵɵtext(189);
1718
+ i0.ɵɵelementStart(189, "div", 50);
1719
+ i0.ɵɵelement(190, "i");
1720
+ i0.ɵɵtext(191);
1636
1721
  i0.ɵɵelementEnd()();
1637
- i0.ɵɵelementStart(190, "div", 48)(191, "label");
1638
- i0.ɵɵtext(192, "Streaming Enabled");
1722
+ i0.ɵɵelementStart(192, "div", 49)(193, "label");
1723
+ i0.ɵɵtext(194, "Streaming Enabled");
1639
1724
  i0.ɵɵelementEnd();
1640
- i0.ɵɵelementStart(193, "div", 49);
1641
- i0.ɵɵelement(194, "i");
1642
- i0.ɵɵtext(195);
1725
+ i0.ɵɵelementStart(195, "div", 50);
1726
+ i0.ɵɵelement(196, "i");
1727
+ i0.ɵɵtext(197);
1643
1728
  i0.ɵɵelementEnd()();
1644
- i0.ɵɵconditionalCreate(196, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_196_Template, 6, 1, "div", 48);
1645
- i0.ɵɵconditionalCreate(197, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Template, 7, 1);
1729
+ i0.ɵɵconditionalCreate(198, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template, 6, 1, "div", 49);
1730
+ i0.ɵɵconditionalCreate(199, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template, 7, 1);
1646
1731
  i0.ɵɵelementEnd();
1647
- i0.ɵɵconditionalCreate(198, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template, 8, 4, "div", 63);
1648
- i0.ɵɵconditionalCreate(199, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template, 8, 4, "div", 64);
1732
+ i0.ɵɵconditionalCreate(200, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template, 8, 4, "div", 64);
1733
+ i0.ɵɵconditionalCreate(201, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template, 8, 4, "div", 65);
1649
1734
  i0.ɵɵelementEnd()()()()();
1650
1735
  } if (rf & 2) {
1651
1736
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1695,37 +1780,41 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1695
1780
  i0.ɵɵadvance();
1696
1781
  i0.ɵɵconditional(ctx_r1.record.TokensCompletionRollup && ctx_r1.record.TokensCompletionRollup !== ctx_r1.record.TokensCompletion ? 63 : -1);
1697
1782
  i0.ɵɵadvance(7);
1698
- i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensUsed));
1783
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.TotalTokensProcessed));
1784
+ i0.ɵɵadvance();
1785
+ i0.ɵɵconditional(ctx_r1.CachedTokens > 0 ? 71 : -1);
1786
+ i0.ɵɵadvance();
1787
+ i0.ɵɵconditional(ctx_r1.record.TokensUsedRollup && ctx_r1.record.TokensUsedRollup !== ctx_r1.record.TokensUsed ? 72 : -1);
1699
1788
  i0.ɵɵadvance();
1700
- i0.ɵɵconditional(ctx_r1.record.TokensUsedRollup && ctx_r1.record.TokensUsedRollup !== ctx_r1.record.TokensUsed ? 71 : -1);
1789
+ i0.ɵɵconditional(ctx_r1.record.TokensCacheRead != null || ctx_r1.record.TokensCacheWrite != null ? 73 : -1);
1701
1790
  i0.ɵɵadvance(7);
1702
1791
  i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.Cost));
1703
1792
  i0.ɵɵadvance();
1704
- i0.ɵɵconditional(ctx_r1.record.TotalCost && ctx_r1.record.TotalCost !== ctx_r1.record.Cost ? 79 : -1);
1793
+ i0.ɵɵconditional(ctx_r1.record.TotalCost && ctx_r1.record.TotalCost !== ctx_r1.record.Cost ? 81 : -1);
1705
1794
  i0.ɵɵadvance();
1706
- i0.ɵɵconditional(ctx_r1.record.CostCurrency ? 80 : -1);
1795
+ i0.ɵɵconditional(ctx_r1.record.CostCurrency ? 82 : -1);
1707
1796
  i0.ɵɵadvance();
1708
- i0.ɵɵconditional(ctx_r1.record.QueueTime != null ? 81 : -1);
1797
+ i0.ɵɵconditional(ctx_r1.record.QueueTime != null ? 83 : -1);
1709
1798
  i0.ɵɵadvance();
1710
- i0.ɵɵconditional(ctx_r1.record.PromptTime != null ? 82 : -1);
1799
+ i0.ɵɵconditional(ctx_r1.record.PromptTime != null ? 84 : -1);
1711
1800
  i0.ɵɵadvance();
1712
- i0.ɵɵconditional(ctx_r1.record.CompletionTime != null ? 83 : -1);
1801
+ i0.ɵɵconditional(ctx_r1.record.CompletionTime != null ? 85 : -1);
1713
1802
  i0.ɵɵadvance(2);
1714
- i0.ɵɵconditional(ctx_r1.record.ExecutionOrder !== null ? 85 : -1);
1803
+ i0.ɵɵconditional(ctx_r1.record.ExecutionOrder !== null ? 87 : -1);
1715
1804
  i0.ɵɵadvance();
1716
- i0.ɵɵconditional(ctx_r1.record.AgentID ? 86 : -1);
1805
+ i0.ɵɵconditional(ctx_r1.record.AgentID ? 88 : -1);
1717
1806
  i0.ɵɵadvance();
1718
- i0.ɵɵconditional(ctx_r1.record && (ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 0 || ctx_r1.record.ValidationBehavior) ? 87 : -1);
1807
+ i0.ɵɵconditional(ctx_r1.record && (ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 0 || ctx_r1.record.ValidationBehavior) ? 89 : -1);
1719
1808
  i0.ɵɵadvance();
1720
- i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ? 88 : -1);
1809
+ i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ? 90 : -1);
1721
1810
  i0.ɵɵadvance();
1722
1811
  i0.ɵɵproperty("Expanded", false);
1723
1812
  i0.ɵɵadvance(4);
1724
- i0.ɵɵconditional(ctx_r1.record.AgentID ? 93 : -1);
1813
+ i0.ɵɵconditional(ctx_r1.record.AgentID ? 95 : -1);
1725
1814
  i0.ɵɵadvance();
1726
- i0.ɵɵconditional(ctx_r1.record.RunType ? 94 : -1);
1815
+ i0.ɵɵconditional(ctx_r1.record.RunType ? 96 : -1);
1727
1816
  i0.ɵɵadvance();
1728
- i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 95 : -1);
1817
+ i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 97 : -1);
1729
1818
  i0.ɵɵadvance(4);
1730
1819
  i0.ɵɵclassProp("null-value", ctx_r1.record.Temperature === null || ctx_r1.record.Temperature === undefined);
1731
1820
  i0.ɵɵadvance(2);
@@ -1763,11 +1852,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1763
1852
  i0.ɵɵadvance(2);
1764
1853
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.AssistantPrefill || "\u2014", " ");
1765
1854
  i0.ɵɵadvance();
1766
- i0.ɵɵconditional(ctx_r1.record.RunAt ? 150 : -1);
1855
+ i0.ɵɵconditional(ctx_r1.record.RunAt ? 152 : -1);
1767
1856
  i0.ɵɵadvance();
1768
- i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 151 : -1);
1857
+ i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 153 : -1);
1769
1858
  i0.ɵɵadvance();
1770
- i0.ɵɵconditional(ctx_r1.record.ModelSpecificResponseDetails ? 152 : -1);
1859
+ i0.ɵɵconditional(ctx_r1.record.ModelSpecificResponseDetails ? 154 : -1);
1771
1860
  i0.ɵɵadvance();
1772
1861
  i0.ɵɵproperty("Expanded", false);
1773
1862
  i0.ɵɵadvance(9);
@@ -1783,11 +1872,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1783
1872
  i0.ɵɵadvance();
1784
1873
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CacheHit ? "Yes" : "No", " ");
1785
1874
  i0.ɵɵadvance();
1786
- i0.ɵɵconditional(ctx_r1.record.CacheKey ? 181 : -1);
1875
+ i0.ɵɵconditional(ctx_r1.record.CacheKey ? 183 : -1);
1787
1876
  i0.ɵɵadvance();
1788
- i0.ɵɵconditional(ctx_r1.record.JudgeID ? 182 : -1);
1877
+ i0.ɵɵconditional(ctx_r1.record.JudgeID ? 184 : -1);
1789
1878
  i0.ɵɵadvance();
1790
- i0.ɵɵconditional(ctx_r1.record.JudgeScore !== null ? 183 : -1);
1879
+ i0.ɵɵconditional(ctx_r1.record.JudgeScore !== null ? 185 : -1);
1791
1880
  i0.ɵɵadvance(5);
1792
1881
  i0.ɵɵclassMap(ctx_r1.record.WasSelectedResult ? "fa-solid fa-trophy" : "fa-solid fa-times");
1793
1882
  i0.ɵɵadvance();
@@ -1797,36 +1886,36 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1797
1886
  i0.ɵɵadvance();
1798
1887
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.StreamingEnabled ? "Yes" : "No", " ");
1799
1888
  i0.ɵɵadvance();
1800
- i0.ɵɵconditional(ctx_r1.record.FirstTokenTime !== null ? 196 : -1);
1889
+ i0.ɵɵconditional(ctx_r1.record.FirstTokenTime !== null ? 198 : -1);
1801
1890
  i0.ɵɵadvance();
1802
- i0.ɵɵconditional(ctx_r1.record.Cancelled ? 197 : -1);
1891
+ i0.ɵɵconditional(ctx_r1.record.Cancelled ? 199 : -1);
1803
1892
  i0.ɵɵadvance();
1804
- i0.ɵɵconditional(ctx_r1.record.ModelSelection ? 198 : -1);
1893
+ i0.ɵɵconditional(ctx_r1.record.ModelSelection ? 200 : -1);
1805
1894
  i0.ɵɵadvance();
1806
- i0.ɵɵconditional(ctx_r1.record.ErrorDetails ? 199 : -1);
1895
+ i0.ɵɵconditional(ctx_r1.record.ErrorDetails ? 201 : -1);
1807
1896
  } }
1808
1897
  function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1809
1898
  const _r25 = i0.ɵɵgetCurrentView();
1810
- i0.ɵɵelementStart(0, "div", 185);
1899
+ i0.ɵɵelementStart(0, "div", 187);
1811
1900
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeFullScreen()); });
1812
- i0.ɵɵelementStart(1, "div", 186);
1901
+ i0.ɵɵelementStart(1, "div", 188);
1813
1902
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r25); return i0.ɵɵresetView($event.stopPropagation()); });
1814
- i0.ɵɵelementStart(2, "div", 187)(3, "span", 188);
1815
- i0.ɵɵelement(4, "i", 103);
1903
+ i0.ɵɵelementStart(2, "div", 189)(3, "span", 190);
1904
+ i0.ɵɵelement(4, "i", 106);
1816
1905
  i0.ɵɵtext(5);
1817
1906
  i0.ɵɵelementEnd();
1818
- i0.ɵɵelementStart(6, "div", 189)(7, "button", 190);
1907
+ i0.ɵɵelementStart(6, "div", 191)(7, "button", 192);
1819
1908
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.FullScreenContent, ctx_r1.FullScreenTitle)); });
1820
- i0.ɵɵelement(8, "i", 101);
1909
+ i0.ɵɵelement(8, "i", 104);
1821
1910
  i0.ɵɵtext(9, " Copy ");
1822
1911
  i0.ɵɵelementEnd();
1823
- i0.ɵɵelementStart(10, "button", 191);
1912
+ i0.ɵɵelementStart(10, "button", 193);
1824
1913
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeFullScreen()); });
1825
- i0.ɵɵelement(11, "i", 192);
1914
+ i0.ɵɵelement(11, "i", 194);
1826
1915
  i0.ɵɵtext(12, " Close ");
1827
1916
  i0.ɵɵelementEnd()()();
1828
- i0.ɵɵelementStart(13, "div", 193);
1829
- i0.ɵɵelement(14, "mj-code-editor", 194);
1917
+ i0.ɵɵelementStart(13, "div", 195);
1918
+ i0.ɵɵelement(14, "mj-code-editor", 196);
1830
1919
  i0.ɵɵelementEnd()()();
1831
1920
  } if (rf & 2) {
1832
1921
  const ctx_r1 = i0.ɵɵnextContext();
@@ -2174,6 +2263,31 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
2174
2263
  return '-';
2175
2264
  return tokens.toLocaleString();
2176
2265
  }
2266
+ /**
2267
+ * Total tokens the provider actually processed = uncached (TokensUsed = prompt+completion) PLUS
2268
+ * the cache buckets. TokensUsed alone excludes cache by design, so a heavily-cached run looks
2269
+ * tiny; this is the real throughput figure for the headline. Equals TokensUsed when no caching.
2270
+ */
2271
+ get TotalTokensProcessed() {
2272
+ const r = this.record;
2273
+ if (!r)
2274
+ return 0;
2275
+ return (r.TokensUsed ?? 0) + (r.TokensCacheRead ?? 0) + (r.TokensCacheWrite ?? 0);
2276
+ }
2277
+ /** Sum of cache read + write tokens for this run (the cached portion of TotalTokensProcessed). */
2278
+ get CachedTokens() {
2279
+ const r = this.record;
2280
+ if (!r)
2281
+ return 0;
2282
+ return (r.TokensCacheRead ?? 0) + (r.TokensCacheWrite ?? 0);
2283
+ }
2284
+ /** Percentage of this run's input tokens served from the provider's prompt cache. */
2285
+ get CacheHitRatePct() {
2286
+ const read = this.record?.TokensCacheRead ?? 0;
2287
+ const write = this.record?.TokensCacheWrite ?? 0;
2288
+ const totalInput = (this.record?.TokensPrompt ?? 0) + read + write;
2289
+ return totalInput > 0 ? (read / totalInput) * 100 : 0;
2290
+ }
2177
2291
  getRunTypeIcon(runType) {
2178
2292
  switch (runType) {
2179
2293
  case 'Single':
@@ -2316,14 +2430,14 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
2316
2430
  // Don't auto-expand validation panel anymore - let user expand when needed
2317
2431
  }
2318
2432
  static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJAIPromptRunFormComponentExtended_BaseFactory; return function MJAIPromptRunFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJAIPromptRunFormComponentExtended_BaseFactory || (ɵMJAIPromptRunFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJAIPromptRunFormComponentExtended)))(__ngFactoryType__ || MJAIPromptRunFormComponentExtended); }; })(); }
2319
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [["form", "ngForm"], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "fullscreen-overlay"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [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, "meta-card", "status-card"], [1, "c3-card-label"], [1, "meta-card-body"], [1, "status-indicator"], [1, "meta-card", "execution-card"], [1, "model-card-c3"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "form-content", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "panel-content"], [1, "nested-panels"], [1, "empty-state"], [1, "error-message"], [1, "json-editor-container"], [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, "fa-solid", "fa-coins"], [1, "fa-solid", "fa-dollar-sign"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [2, "margin-bottom", "8px", 3, "Expanded"], [1, "detail-fields-grid"], [1, "detail-field"], [1, "detail-value"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-repeat"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], [1, "fa-solid", "fa-stop-circle"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "fa-solid", "fa-info-circle"], [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, "prompt-card-c3"], [1, "meta-card", "prompt-single-card"], ["title", "View Agent Prompt", 1, "c3-child-section", 3, "click"], [1, "fa-solid", "fa-comment", "prompt-icon"], [1, "c3-divider"], [1, "c3-line"], [1, "c3-divider-label"], ["title", "View System Prompt", 1, "c3-parent-section", 3, "click"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-arrow-up-right-from-square", "c3-link-icon"], ["title", "View Prompt", 1, "meta-card-body", "clickable", 3, "click"], [1, "fa-solid", "fa-comment-dots", 2, "color", "var(--mj-brand-primary)"], ["title", "View Model", 1, "c3-card-body", 3, "click"], [1, "c3-model-name"], [1, "fa-solid", "fa-microchip"], [1, "c3-vendor-name"], [1, "fa-solid", "fa-level-up-alt"], [1, "original-link", 3, "click"], [1, "metric-item"], [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-tachometer-alt"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "fa-solid", "fa-comment-dots"], [1, "panel-badge"], [1, "sub-expansion-panel", 2, "margin-bottom", "8px", 3, "Expanded"], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], [1, "json-toolbar"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View full screen", 3, "click"], [1, "fa-solid", "fa-expand"], ["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, "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, "margin", "0"], [2, "height", "200px", "width", "100%", 3, "ngModel", "disabled", "language", "lineWrapping"], [1, "fa-solid", "fa-chart-line"], [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, "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, "fa-solid", "fa-shield-check"], [1, "panel-badge", "success"], [1, "error-count"], [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, "parent-run-section"], [1, "child-runs-section"], [1, "fa-solid", "fa-sitemap"], [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"], ["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-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"], [1, "fullscreen-overlay", 3, "click"], [1, "fullscreen-container", 3, "click"], [1, "fullscreen-header"], [1, "fullscreen-title"], [1, "fullscreen-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy content", 3, "click"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fullscreen-body"], [2, "height", "100%", "width", "100%", 3, "value", "readonly", "language"]], template: function MJAIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
2320
- i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Template, 200, 101, "mj-record-form-container", 1);
2433
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [["form", "ngForm"], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "fullscreen-overlay"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [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, "meta-card", "status-card"], [1, "c3-card-label"], [1, "meta-card-body"], [1, "status-indicator"], [1, "meta-card", "execution-card"], [1, "model-card-c3"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "form-content", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "panel-content"], [1, "nested-panels"], [1, "empty-state"], [1, "error-message"], [1, "json-editor-container"], [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, "fa-solid", "fa-coins"], ["title", "Prompt + completion + cached tokens \u2014 the full amount the model processed", 1, "metric-value", "large"], [1, "fa-solid", "fa-dollar-sign"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [2, "margin-bottom", "8px", 3, "Expanded"], [1, "detail-fields-grid"], [1, "detail-field"], [1, "detail-value"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-repeat"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], [1, "fa-solid", "fa-stop-circle"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "fa-solid", "fa-info-circle"], [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, "prompt-card-c3"], [1, "meta-card", "prompt-single-card"], ["title", "View Agent Prompt", 1, "c3-child-section", 3, "click"], [1, "fa-solid", "fa-comment", "prompt-icon"], [1, "c3-divider"], [1, "c3-line"], [1, "c3-divider-label"], ["title", "View System Prompt", 1, "c3-parent-section", 3, "click"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-arrow-up-right-from-square", "c3-link-icon"], ["title", "View Prompt", 1, "meta-card-body", "clickable", 3, "click"], [1, "fa-solid", "fa-comment-dots", 2, "color", "var(--mj-brand-primary)"], ["title", "View Model", 1, "c3-card-body", 3, "click"], [1, "c3-model-name"], [1, "fa-solid", "fa-microchip"], [1, "c3-vendor-name"], [1, "fa-solid", "fa-level-up-alt"], [1, "original-link", 3, "click"], [1, "metric-item"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], ["href", "javascript:void(0)", 1, "config-link", 3, "click"], [1, "fa-solid", "fa-clock"], ["title", "Total tokens the model processed, including cached input", 1, "metric-item"], [1, "fa-solid", "fa-tachometer-alt"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-bolt"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "fa-solid", "fa-comment-dots"], [1, "panel-badge"], [1, "sub-expansion-panel", 2, "margin-bottom", "8px", 3, "Expanded"], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], [1, "json-toolbar"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View full screen", 3, "click"], [1, "fa-solid", "fa-expand"], ["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, "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, "margin", "0"], [2, "height", "200px", "width", "100%", 3, "ngModel", "disabled", "language", "lineWrapping"], [1, "fa-solid", "fa-chart-line"], [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, "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, "fa-solid", "fa-shield-check"], [1, "panel-badge", "success"], [1, "error-count"], [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, "parent-run-section"], [1, "child-runs-section"], [1, "fa-solid", "fa-sitemap"], [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"], ["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-key"], ["title", "View Judge Prompt", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-gavel"], [1, "fa-solid", "fa-star"], [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"], [1, "fullscreen-overlay", 3, "click"], [1, "fullscreen-container", 3, "click"], [1, "fullscreen-header"], [1, "fullscreen-title"], [1, "fullscreen-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy content", 3, "click"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fullscreen-body"], [2, "height", "100%", "width", "100%", 3, "value", "readonly", "language"]], template: function MJAIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
2434
+ i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Template, 202, 103, "mj-record-form-container", 1);
2321
2435
  i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_1_Template, 15, 4, "div", 2);
2322
2436
  } if (rf & 2) {
2323
2437
  i0.ɵɵconditional(ctx.record ? 0 : -1);
2324
2438
  i0.ɵɵadvance();
2325
2439
  i0.ɵɵconditional(ctx.FullScreenContent ? 1 : -1);
2326
- } }, dependencies: [i1.ɵNgNoValidate, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ChatMessageViewerComponent, i6.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n\n\n.error-info[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.error-details[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint[_ngcontent-%COMP%] {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n\n\n.prompt-run-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.run-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n\n\n.meta-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n.status-indicator[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n\n\n.prompt-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section[_ngcontent-%COMP%] i.prompt-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line[_ngcontent-%COMP%] {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label[_ngcontent-%COMP%] {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.c3-link-icon[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover .c3-link-icon[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n\n\n.model-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label[_ngcontent-%COMP%] {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name[_ngcontent-%COMP%] {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n\n\n.sub-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n\n\n.nested-panels[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-panel-content[_ngcontent-%COMP%] mj-chat-message-viewer[_ngcontent-%COMP%] {\n display: block;\n min-height: 200px;\n max-height: 750px; \n\n height: auto;\n overflow: hidden;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n\n\n.json-editor-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.metrics-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n\n\n.additional-metrics[_ngcontent-%COMP%] {\n padding-top: 16px;\n}\n\n.metric-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n\n\n.parent-run-section[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.parent-run-section[_ngcontent-%COMP%]:last-child, \n.child-runs-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n\n\n.detail-fields-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%]:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n opacity: 0.5;\n}\n\n\n\nmj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n}\n\n\n\n.validation-summary[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.summary-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n\n\n.retry-timeline[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.retry-timeline[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n\n\n.validation-attempts[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.validation-attempts[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.attempt-details[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.attempt-error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n\n\n.validation-json[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.validation-json[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n\n.panel-badge.success[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: white;\n}\n\n\n\n.fullscreen-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}"], changeDetection: 0 }); }
2440
+ } }, dependencies: [i1.ɵNgNoValidate, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ChatMessageViewerComponent, i6.DecimalPipe, i6.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n\n\n.error-info[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.error-details[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint[_ngcontent-%COMP%] {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n\n\n.prompt-run-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.run-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n\n\n.meta-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n.status-indicator[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n\n\n.prompt-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section[_ngcontent-%COMP%] i.prompt-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line[_ngcontent-%COMP%] {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label[_ngcontent-%COMP%] {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.c3-link-icon[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover .c3-link-icon[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n\n\n.model-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label[_ngcontent-%COMP%] {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name[_ngcontent-%COMP%] {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n\n\n.sub-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n\n\n.nested-panels[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-panel-content[_ngcontent-%COMP%] mj-chat-message-viewer[_ngcontent-%COMP%] {\n display: block;\n min-height: 200px;\n max-height: 750px; \n\n height: auto;\n overflow: hidden;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n\n\n.json-editor-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.metrics-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n\n\n.additional-metrics[_ngcontent-%COMP%] {\n padding-top: 16px;\n}\n\n.metric-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n\n\n.parent-run-section[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.parent-run-section[_ngcontent-%COMP%]:last-child, \n.child-runs-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n\n\n.detail-fields-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%]:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n opacity: 0.5;\n}\n\n\n\nmj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n}\n\n\n\n.validation-summary[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.summary-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n\n\n.retry-timeline[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.retry-timeline[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n\n\n.validation-attempts[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.validation-attempts[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.attempt-details[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.attempt-error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n\n\n.validation-json[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.validation-json[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n\n.panel-badge.success[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: white;\n}\n\n\n\n.fullscreen-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}"], changeDetection: 0 }); }
2327
2441
  };
2328
2442
  MJAIPromptRunFormComponentExtended = __decorate([
2329
2443
  RegisterClass(BaseFormComponent, 'MJ: AI Prompt Runs')
@@ -2331,7 +2445,7 @@ MJAIPromptRunFormComponentExtended = __decorate([
2331
2445
  export { MJAIPromptRunFormComponentExtended };
2332
2446
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptRunFormComponentExtended, [{
2333
2447
  type: Component,
2334
- args: [{ standalone: false, selector: 'mj-ai-prompt-run-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\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 <!-- Status Card -->\n <div class=\"meta-card status-card\">\n <div class=\"c3-card-label\">Status</div>\n <div class=\"meta-card-body\">\n <span class=\"status-indicator\" [style.background-color]=\"getStatusColor()\"></span>\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n {{ getStatusText() }}\n </div>\n </div>\n\n <!-- Execution Card -->\n @if (record.RunType) {\n <div class=\"meta-card execution-card\">\n <div class=\"c3-card-label\">Execution</div>\n <div class=\"meta-card-body\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\" [style.color]=\"getRunTypeColor(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n\n <!-- Prompt Card -->\n @if (prompt) {\n @if (record.ChildPromptID) {\n <!-- C3 Stacked Connector: child prompt prominent, parent nested -->\n <div class=\"prompt-card-c3\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"c3-child-section\" (click)=\"navigateToEntity('MJ: AI Prompts', record.ChildPromptID)\" title=\"View Agent Prompt\">\n <i class=\"fa-solid fa-comment prompt-icon\"></i>\n {{ record.ChildPrompt }}\n </div>\n <div class=\"c3-divider\">\n <span class=\"c3-line\"></span>\n <span class=\"c3-divider-label\">wrapped by</span>\n <span class=\"c3-line\"></span>\n </div>\n <div class=\"c3-parent-section\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View System Prompt\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ prompt.Name }}\n <i class=\"fa-solid fa-arrow-up-right-from-square c3-link-icon\"></i>\n </div>\n </div>\n } @else {\n <!-- Single prompt (no child) \u2014 same card style -->\n <div class=\"meta-card prompt-single-card\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"meta-card-body clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ prompt.Name }}\n </div>\n </div>\n }\n }\n\n <!-- Model Card -->\n @if (model) {\n <div class=\"model-card-c3\">\n <div class=\"c3-card-label\">Model</div>\n <div class=\"c3-card-body\" (click)=\"navigateToEntity('MJ: AI Models', model.ID)\" title=\"View Model\">\n <span class=\"c3-model-name\"><i class=\"fa-solid fa-microchip\"></i> {{ model.Name }}</span>\n @if (record.Vendor) {\n <span class=\"c3-vendor-name\">{{ record.Vendor }}</span>\n }\n </div>\n </div>\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 mjButton variant=\"outline\" size=\"sm\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button mjButton variant=\"outline\" size=\"sm\" (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\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n\n <!-- Input Panel with nested sub-panels -->\n <mj-accordion-panel [Expanded]=\"inputExpanded\" (ExpandedChange)=\"onInputPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 <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 <mj-accordion-panel\n [Expanded]=\"messagesExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 </mj-accordion-panel>\n\n <!-- Data Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"dataExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedData, 'json', 'Data')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\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 </mj-accordion-panel>\n\n <!-- Raw Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"rawExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedMessages, 'json', 'Raw Messages')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\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 </mj-accordion-panel>\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 </mj-accordion-panel>\n \n <!-- Result Panel -->\n <mj-accordion-panel [Expanded]=\"resultExpanded\" (ExpandedChange)=\"onResultPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 <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 mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedResult, 'json', 'Result')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\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.CompletedAt && (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 <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\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 </mj-accordion-panel>\n\n <!-- Token Usage & Metrics Panel -->\n <mj-accordion-panel [Expanded]=\"metricsExpanded\" (ExpandedChange)=\"onMetricsPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage &amp; Metrics\n </span>\n </ng-template>\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('MJ: 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 </mj-accordion-panel>\n\n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <mj-accordion-panel [Expanded]=\"validationExpanded\" (ExpandedChange)=\"onValidationPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation &amp; 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 <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 === true\" [class.failed]=\"record.FinalValidationPassed === false\">\n <i [class]=\"record.FinalValidationPassed === true ? 'fa-solid fa-check-circle' : (record.FinalValidationPassed === false ? 'fa-solid fa-times-circle' : 'fa-solid fa-hourglass-half')\"></i>\n {{ record.FinalValidationPassed === true ? 'Validation Passed' : (record.FinalValidationPassed === false ? 'Validation Failed' : 'Validation Pending') }}\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 <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Summary Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationSummary, 'json', 'Validation Summary')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\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 <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Attempts (Raw JSON)</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationAttempts, 'json', 'Validation Attempts')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\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 </mj-accordion-panel>\n }\n\n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <mj-accordion-panel [Expanded]=\"hierarchyExpanded\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 <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 </mj-accordion-panel>\n }\n\n <!-- Additional Details Panel -->\n <mj-accordion-panel [Expanded]=\"false\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\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('MJ: 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 <div class=\"detail-field\">\n <label>Stop Sequences</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.StopSequences\">\n <i class=\"fa-solid fa-stop-circle\"></i>\n {{ record.StopSequences || '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Assistant Prefill</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.AssistantPrefill\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ record.AssistantPrefill || '\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 </mj-accordion-panel>\n\n <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <mj-accordion-panel [Expanded]=\"modelSpecificExpanded\" (ExpandedChange)=\"onModelSpecificPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 <div class=\"panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSpecificResponseDetails, 'json', 'Model Specific Response Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\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 </mj-accordion-panel>\n }\n\n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <mj-accordion-panel [Expanded]=\"false\" (ExpandedChange)=\"onModelSelectionPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection &amp; 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 <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('MJ: 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 <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Model Selection Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSelection, 'json', 'Model Selection')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\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 <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\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 </mj-accordion-panel>\n\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Full-screen overlay -->\n @if (FullScreenContent) {\n <div class=\"fullscreen-overlay\" (click)=\"closeFullScreen()\">\n <div class=\"fullscreen-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"fullscreen-header\">\n <span class=\"fullscreen-title\">\n <i class=\"fa-solid fa-expand\"></i>\n {{ FullScreenTitle }}\n </span>\n <div class=\"fullscreen-actions\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(FullScreenContent, FullScreenTitle)\"\n title=\"Copy content\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"closeFullScreen()\"\n title=\"Close\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n </div>\n </div>\n <div class=\"fullscreen-body\">\n <mj-code-editor\n [value]=\"FullScreenContent\"\n [readonly]=\"true\"\n [language]=\"FullScreenLanguage\"\n style=\"height: 100%; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n }", styles: ["/* Host and Container Layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n/* Error Info Styles */\n.error-info {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\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: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n/* Header Section */\n.prompt-run-header {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\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: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n/* Shared meta-card style (Status, Execution, single Prompt) */\n.meta-card {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Status indicator dot */\n.status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n/* C3 Stacked Connector \u2014 Prompt Card */\n.prompt-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section i.prompt-icon {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section i {\n font-size: 0.75rem;\n}\n\n.c3-link-icon {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section:hover .c3-link-icon {\n opacity: 0.8;\n}\n\n/* C3 Model Card */\n.model-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name i {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\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: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\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 var(--mj-border-default);\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: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-primary);\n}\n\n.config-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\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 accordion panel styles */\n.nested-panels mj-accordion-panel {\n margin-bottom: 8px;\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 styles */\n.sub-expansion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count {\n color: var(--mj-text-muted);\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 var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\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: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\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: var(--mj-text-muted);\n}\n\n.loading-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\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: var(--mj-text-muted);\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\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 var(--mj-bg-surface-sunken);\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row .metric-value.link {\n color: var(--mj-brand-primary);\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: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\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: var(--mj-text-secondary);\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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\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: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\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: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: var(--mj-text-muted);\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: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\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: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value i:first-child {\n opacity: 0.5;\n}\n\n/* Accordion Panel Overrides */\nmj-accordion-panel {\n display: block;\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: var(--mj-text-primary);\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: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\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: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\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: var(--mj-status-error);\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: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\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: var(--mj-text-secondary);\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: var(--mj-text-muted);\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: var(--mj-text-secondary);\n}\n\n.attempts-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item {\n border: 1px solid var(--mj-border-default);\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: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success .attempt-number {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed .attempt-number {\n color: var(--mj-status-error);\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: var(--mj-text-muted);\n}\n\n.attempt-error {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length {\n color: var(--mj-text-muted);\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: var(--mj-text-secondary);\n}\n\n.json-viewer-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Panel badge styles */\n.panel-badge.success {\n background: var(--mj-status-success);\n color: white;\n}\n\n/* Full-screen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title i {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body mj-code-editor {\n display: block;\n height: 100%;\n}\n"] }]
2448
+ args: [{ standalone: false, selector: 'mj-ai-prompt-run-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\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 <!-- Status Card -->\n <div class=\"meta-card status-card\">\n <div class=\"c3-card-label\">Status</div>\n <div class=\"meta-card-body\">\n <span class=\"status-indicator\" [style.background-color]=\"getStatusColor()\"></span>\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n {{ getStatusText() }}\n </div>\n </div>\n\n <!-- Execution Card -->\n @if (record.RunType) {\n <div class=\"meta-card execution-card\">\n <div class=\"c3-card-label\">Execution</div>\n <div class=\"meta-card-body\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\" [style.color]=\"getRunTypeColor(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n\n <!-- Prompt Card -->\n @if (prompt) {\n @if (record.ChildPromptID) {\n <!-- C3 Stacked Connector: child prompt prominent, parent nested -->\n <div class=\"prompt-card-c3\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"c3-child-section\" (click)=\"navigateToEntity('MJ: AI Prompts', record.ChildPromptID)\" title=\"View Agent Prompt\">\n <i class=\"fa-solid fa-comment prompt-icon\"></i>\n {{ record.ChildPrompt }}\n </div>\n <div class=\"c3-divider\">\n <span class=\"c3-line\"></span>\n <span class=\"c3-divider-label\">wrapped by</span>\n <span class=\"c3-line\"></span>\n </div>\n <div class=\"c3-parent-section\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View System Prompt\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ prompt.Name }}\n <i class=\"fa-solid fa-arrow-up-right-from-square c3-link-icon\"></i>\n </div>\n </div>\n } @else {\n <!-- Single prompt (no child) \u2014 same card style -->\n <div class=\"meta-card prompt-single-card\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"meta-card-body clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ prompt.Name }}\n </div>\n </div>\n }\n }\n\n <!-- Model Card -->\n @if (model) {\n <div class=\"model-card-c3\">\n <div class=\"c3-card-label\">Model</div>\n <div class=\"c3-card-body\" (click)=\"navigateToEntity('MJ: AI Models', model.ID)\" title=\"View Model\">\n <span class=\"c3-model-name\"><i class=\"fa-solid fa-microchip\"></i> {{ model.Name }}</span>\n @if (record.Vendor) {\n <span class=\"c3-vendor-name\">{{ record.Vendor }}</span>\n }\n </div>\n </div>\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 mjButton variant=\"outline\" size=\"sm\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button mjButton variant=\"outline\" size=\"sm\" (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\" title=\"Total tokens the model processed, including cached input\">\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(TotalTokensProcessed) }}</div>\n </div>\n </div>\n @if (record.TokensCacheRead) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cached</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensCacheRead) }}</div>\n </div>\n </div>\n }\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\" title=\"Total tokens the model processed, including cached input\">\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(TotalTokensProcessed) }}</div>\n </div>\n </div>\n @if (record.TokensCacheRead) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cached</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensCacheRead) }}</div>\n </div>\n </div>\n }\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\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n\n <!-- Input Panel with nested sub-panels -->\n <mj-accordion-panel [Expanded]=\"inputExpanded\" (ExpandedChange)=\"onInputPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 <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 <mj-accordion-panel\n [Expanded]=\"messagesExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 </mj-accordion-panel>\n\n <!-- Data Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"dataExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedData, 'json', 'Data')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\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 </mj-accordion-panel>\n\n <!-- Raw Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"rawExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedMessages, 'json', 'Raw Messages')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\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 </mj-accordion-panel>\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 </mj-accordion-panel>\n \n <!-- Result Panel -->\n <mj-accordion-panel [Expanded]=\"resultExpanded\" (ExpandedChange)=\"onResultPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 <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 mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedResult, 'json', 'Result')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\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.CompletedAt && (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 <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\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 </mj-accordion-panel>\n\n <!-- Token Usage & Metrics Panel -->\n <mj-accordion-panel [Expanded]=\"metricsExpanded\" (ExpandedChange)=\"onMetricsPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage &amp; Metrics\n </span>\n </ng-template>\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\" title=\"Prompt + completion + cached tokens \u2014 the full amount the model processed\">{{ formatTokens(TotalTokensProcessed) }}</div>\n @if (CachedTokens > 0) {\n <div class=\"metric-rollup\">\n <span>incl. {{ formatTokens(CachedTokens) }} cached</span>\n </div>\n }\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Net rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n\n <!-- Prompt-cache tokens (provider cache reads = hits, writes = cache creation).\n Only rendered when the provider reported cache usage. -->\n @if (record.TokensCacheRead != null || record.TokensCacheWrite != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-bolt\"></i>\n <h4>Cache Read</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCacheRead) }}</div>\n @if (record.TokensCacheWrite) {\n <div class=\"metric-rollup\">\n <span>Write: {{ formatTokens(record.TokensCacheWrite) }}</span>\n </div>\n }\n @if (record.TokensCacheRead || record.TokensCacheWrite) {\n <div class=\"metric-rollup\">\n <span>{{ CacheHitRatePct | number:'1.0-0' }}% hit rate</span>\n </div>\n }\n </div>\n }\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('MJ: 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 </mj-accordion-panel>\n\n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <mj-accordion-panel [Expanded]=\"validationExpanded\" (ExpandedChange)=\"onValidationPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation &amp; 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 <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 === true\" [class.failed]=\"record.FinalValidationPassed === false\">\n <i [class]=\"record.FinalValidationPassed === true ? 'fa-solid fa-check-circle' : (record.FinalValidationPassed === false ? 'fa-solid fa-times-circle' : 'fa-solid fa-hourglass-half')\"></i>\n {{ record.FinalValidationPassed === true ? 'Validation Passed' : (record.FinalValidationPassed === false ? 'Validation Failed' : 'Validation Pending') }}\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 <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Summary Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationSummary, 'json', 'Validation Summary')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\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 <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Attempts (Raw JSON)</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationAttempts, 'json', 'Validation Attempts')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\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 </mj-accordion-panel>\n }\n\n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <mj-accordion-panel [Expanded]=\"hierarchyExpanded\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 <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 </mj-accordion-panel>\n }\n\n <!-- Additional Details Panel -->\n <mj-accordion-panel [Expanded]=\"false\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\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('MJ: 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 <div class=\"detail-field\">\n <label>Stop Sequences</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.StopSequences\">\n <i class=\"fa-solid fa-stop-circle\"></i>\n {{ record.StopSequences || '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Assistant Prefill</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.AssistantPrefill\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ record.AssistantPrefill || '\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 </mj-accordion-panel>\n\n <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <mj-accordion-panel [Expanded]=\"modelSpecificExpanded\" (ExpandedChange)=\"onModelSpecificPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\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 <div class=\"panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSpecificResponseDetails, 'json', 'Model Specific Response Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\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 </mj-accordion-panel>\n }\n\n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <mj-accordion-panel [Expanded]=\"false\" (ExpandedChange)=\"onModelSelectionPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection &amp; 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 <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('MJ: 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 <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Model Selection Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSelection, 'json', 'Model Selection')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\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 <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\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 </mj-accordion-panel>\n\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Full-screen overlay -->\n @if (FullScreenContent) {\n <div class=\"fullscreen-overlay\" (click)=\"closeFullScreen()\">\n <div class=\"fullscreen-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"fullscreen-header\">\n <span class=\"fullscreen-title\">\n <i class=\"fa-solid fa-expand\"></i>\n {{ FullScreenTitle }}\n </span>\n <div class=\"fullscreen-actions\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(FullScreenContent, FullScreenTitle)\"\n title=\"Copy content\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"closeFullScreen()\"\n title=\"Close\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n </div>\n </div>\n <div class=\"fullscreen-body\">\n <mj-code-editor\n [value]=\"FullScreenContent\"\n [readonly]=\"true\"\n [language]=\"FullScreenLanguage\"\n style=\"height: 100%; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n }", styles: ["/* Host and Container Layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n/* Error Info Styles */\n.error-info {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\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: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n/* Header Section */\n.prompt-run-header {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\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: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n/* Shared meta-card style (Status, Execution, single Prompt) */\n.meta-card {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Status indicator dot */\n.status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n/* C3 Stacked Connector \u2014 Prompt Card */\n.prompt-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section i.prompt-icon {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section i {\n font-size: 0.75rem;\n}\n\n.c3-link-icon {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section:hover .c3-link-icon {\n opacity: 0.8;\n}\n\n/* C3 Model Card */\n.model-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name i {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\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: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\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 var(--mj-border-default);\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: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-primary);\n}\n\n.config-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\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 accordion panel styles */\n.nested-panels mj-accordion-panel {\n margin-bottom: 8px;\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 styles */\n.sub-expansion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count {\n color: var(--mj-text-muted);\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 var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\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: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\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: var(--mj-text-muted);\n}\n\n.loading-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\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: var(--mj-text-muted);\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\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 var(--mj-bg-surface-sunken);\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row .metric-value.link {\n color: var(--mj-brand-primary);\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: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\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: var(--mj-text-secondary);\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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\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: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\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: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-muted);\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: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: var(--mj-text-muted);\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: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\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: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value i:first-child {\n opacity: 0.5;\n}\n\n/* Accordion Panel Overrides */\nmj-accordion-panel {\n display: block;\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: var(--mj-text-primary);\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: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\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: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\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: var(--mj-status-error);\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: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\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: var(--mj-text-secondary);\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: var(--mj-text-muted);\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: var(--mj-text-secondary);\n}\n\n.attempts-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item {\n border: 1px solid var(--mj-border-default);\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: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success .attempt-number {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed .attempt-number {\n color: var(--mj-status-error);\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: var(--mj-text-muted);\n}\n\n.attempt-error {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length {\n color: var(--mj-text-muted);\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: var(--mj-text-secondary);\n}\n\n.json-viewer-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Panel badge styles */\n.panel-badge.success {\n background: var(--mj-status-success);\n color: white;\n}\n\n/* Full-screen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title i {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body mj-code-editor {\n display: block;\n height: 100%;\n}\n"] }]
2335
2449
  }], null, null); })();
2336
2450
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIPromptRunFormComponentExtended, { className: "MJAIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 21 }); })();
2337
2451
  //# sourceMappingURL=ai-prompt-run-form.component.js.map