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