@memberjunction/ng-core-entity-forms 2.75.0 → 2.77.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 (87) hide show
  1. package/README.md +124 -0
  2. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.d.ts +109 -0
  3. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.d.ts.map +1 -0
  4. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.js +2020 -0
  5. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.js.map +1 -0
  6. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts +32 -0
  7. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts.map +1 -0
  8. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +413 -0
  9. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js.map +1 -0
  10. package/dist/lib/custom/AIAgents/FlowAgentType/step-info-control.component.d.ts +9 -0
  11. package/dist/lib/custom/AIAgents/FlowAgentType/step-info-control.component.d.ts.map +1 -0
  12. package/dist/lib/custom/AIAgents/FlowAgentType/step-info-control.component.js +84 -0
  13. package/dist/lib/custom/AIAgents/FlowAgentType/step-info-control.component.js.map +1 -0
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +34 -6
  15. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  16. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +656 -520
  17. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  18. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +223 -221
  19. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  20. package/dist/lib/custom/Actions/action-execution-log-form.component.js +51 -49
  21. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  22. package/dist/lib/custom/Actions/action-test-harness.component.d.ts.map +1 -1
  23. package/dist/lib/custom/Actions/action-test-harness.component.js +5 -3
  24. package/dist/lib/custom/Actions/action-test-harness.component.js.map +1 -1
  25. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +160 -158
  26. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  27. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts.map +1 -1
  28. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +3 -6
  29. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -1
  30. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +49 -0
  31. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -0
  32. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +211 -0
  33. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -0
  34. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +33 -0
  35. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -0
  36. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +265 -0
  37. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -0
  38. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +4 -8
  39. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  40. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +47 -163
  41. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  42. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts +71 -0
  43. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts.map +1 -0
  44. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +931 -0
  45. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -0
  46. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +6 -4
  47. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  48. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +202 -297
  49. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  50. package/dist/lib/custom/custom-forms.module.d.ts +30 -25
  51. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  52. package/dist/lib/custom/custom-forms.module.js +31 -4
  53. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  54. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +34 -14
  55. package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js.map +1 -1
  56. package/dist/lib/generated/Entities/AIAgentStep/aiagentstep.form.component.d.ts +10 -0
  57. package/dist/lib/generated/Entities/AIAgentStep/aiagentstep.form.component.d.ts.map +1 -0
  58. package/dist/lib/generated/Entities/AIAgentStep/aiagentstep.form.component.js +80 -0
  59. package/dist/lib/generated/Entities/AIAgentStep/aiagentstep.form.component.js.map +1 -0
  60. package/dist/lib/generated/Entities/AIAgentStep/sections/details.component.d.ts +11 -0
  61. package/dist/lib/generated/Entities/AIAgentStep/sections/details.component.d.ts.map +1 -0
  62. package/dist/lib/generated/Entities/AIAgentStep/sections/details.component.js +277 -0
  63. package/dist/lib/generated/Entities/AIAgentStep/sections/details.component.js.map +1 -0
  64. package/dist/lib/generated/Entities/AIAgentStepPath/aiagentsteppath.form.component.d.ts +10 -0
  65. package/dist/lib/generated/Entities/AIAgentStepPath/aiagentsteppath.form.component.d.ts.map +1 -0
  66. package/dist/lib/generated/Entities/AIAgentStepPath/aiagentsteppath.form.component.js +59 -0
  67. package/dist/lib/generated/Entities/AIAgentStepPath/aiagentsteppath.form.component.js.map +1 -0
  68. package/dist/lib/generated/Entities/AIAgentStepPath/sections/details.component.d.ts +11 -0
  69. package/dist/lib/generated/Entities/AIAgentStepPath/sections/details.component.d.ts.map +1 -0
  70. package/dist/lib/generated/Entities/AIAgentStepPath/sections/details.component.js +147 -0
  71. package/dist/lib/generated/Entities/AIAgentStepPath/sections/details.component.js.map +1 -0
  72. package/dist/lib/generated/Entities/AIAgentType/sections/details.component.d.ts.map +1 -1
  73. package/dist/lib/generated/Entities/AIAgentType/sections/details.component.js +31 -4
  74. package/dist/lib/generated/Entities/AIAgentType/sections/details.component.js.map +1 -1
  75. package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js +16 -6
  76. package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js.map +1 -1
  77. package/dist/lib/generated/Entities/Action/action.form.component.js +19 -9
  78. package/dist/lib/generated/Entities/Action/action.form.component.js.map +1 -1
  79. package/dist/lib/generated/generated-forms.module.d.ts +294 -285
  80. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  81. package/dist/lib/generated/generated-forms.module.js +183 -110
  82. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  83. package/dist/public-api.d.ts +2 -0
  84. package/dist/public-api.d.ts.map +1 -1
  85. package/dist/public-api.js +3 -0
  86. package/dist/public-api.js.map +1 -1
  87. package/package.json +21 -17
@@ -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", 36);
37
+ i0.ɵɵelementStart(0, "span", 37);
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", 37);
51
+ i0.ɵɵelementStart(0, "span", 38);
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", 38);
53
+ i0.ɵɵelement(1, "i", 39);
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", 39);
63
+ i0.ɵɵelementStart(0, "span", 40);
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", 40);
65
+ i0.ɵɵelement(1, "i", 41);
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", 41);
75
+ i0.ɵɵelementStart(0, "span", 42);
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", 42);
77
+ i0.ɵɵelement(1, "i", 43);
78
78
  i0.ɵɵtext(2);
79
79
  i0.ɵɵelementEnd();
80
80
  } if (rf & 2) {
@@ -85,15 +85,15 @@ 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", 43);
89
- i0.ɵɵelementStart(2, "a", 44);
88
+ i0.ɵɵelement(1, "i", 44);
89
+ i0.ɵɵelementStart(2, "a", 45);
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
94
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_49_Template(rf, ctx) { if (rf & 1) {
95
95
  i0.ɵɵelementStart(0, "div", 24);
96
- i0.ɵɵelement(1, "i", 45);
96
+ i0.ɵɵelement(1, "i", 46);
97
97
  i0.ɵɵelementStart(2, "div", 26)(3, "div", 27);
98
98
  i0.ɵɵtext(4, "Started");
99
99
  i0.ɵɵelementEnd();
@@ -107,15 +107,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_49_Template(
107
107
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
108
108
  } }
109
109
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_3_Template(rf, ctx) { if (rf & 1) {
110
- i0.ɵɵelementStart(0, "span", 47);
110
+ i0.ɵɵelementStart(0, "span", 48);
111
111
  i0.ɵɵtext(1, "JSON");
112
112
  i0.ɵɵelementEnd();
113
113
  } }
114
114
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Template(rf, ctx) { if (rf & 1) {
115
- i0.ɵɵelementStart(0, "span", 46);
116
- i0.ɵɵelement(1, "i", 38);
115
+ i0.ɵɵelementStart(0, "span", 47);
116
+ i0.ɵɵelement(1, "i", 39);
117
117
  i0.ɵɵtext(2, " Input ");
118
- i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_3_Template, 2, 0, "span", 47);
118
+ i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_3_Template, 2, 0, "span", 48);
119
119
  i0.ɵɵelementEnd();
120
120
  } if (rf & 2) {
121
121
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -123,7 +123,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Template(
123
123
  i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
124
124
  } }
125
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", 63);
126
+ i0.ɵɵelementStart(0, "span", 64);
127
127
  i0.ɵɵtext(1);
128
128
  i0.ɵɵelementEnd();
129
129
  } if (rf & 2) {
@@ -132,10 +132,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Condition
132
132
  i0.ɵɵtextInterpolate1("(", ctx_r1.chatMessages.length, ")");
133
133
  } }
134
134
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
135
- i0.ɵɵelementStart(0, "span", 61);
136
- i0.ɵɵelement(1, "i", 62);
135
+ i0.ɵɵelementStart(0, "span", 62);
136
+ i0.ɵɵelement(1, "i", 63);
137
137
  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", 63);
138
+ i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_2_Conditional_3_Template, 2, 1, "span", 64);
139
139
  i0.ɵɵelementEnd();
140
140
  } if (rf & 2) {
141
141
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -143,35 +143,35 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Condition
143
143
  i0.ɵɵconditional(ctx_r1.chatMessages.length > 0 ? 3 : -1);
144
144
  } }
145
145
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
146
- i0.ɵɵelementStart(0, "div", 54);
147
- i0.ɵɵelement(1, "i", 64);
146
+ i0.ɵɵelementStart(0, "div", 55);
147
+ i0.ɵɵelement(1, "i", 65);
148
148
  i0.ɵɵelementStart(2, "p");
149
149
  i0.ɵɵtext(3, "Loading messages...");
150
150
  i0.ɵɵelementEnd()();
151
151
  } }
152
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", 55);
153
+ i0.ɵɵelement(0, "mj-chat-message-viewer", 56);
154
154
  } if (rf & 2) {
155
155
  const ctx_r1 = i0.ɵɵnextContext(4);
156
156
  i0.ɵɵproperty("messages", ctx_r1.chatMessages);
157
157
  } }
158
158
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
159
- i0.ɵɵelementStart(0, "div", 50);
160
- i0.ɵɵelement(1, "i", 65);
159
+ i0.ɵɵelementStart(0, "div", 51);
160
+ i0.ɵɵelement(1, "i", 66);
161
161
  i0.ɵɵelementStart(2, "p");
162
162
  i0.ɵɵtext(3, "No chat messages found");
163
163
  i0.ɵɵelementEnd()();
164
164
  } }
165
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", 47);
166
+ i0.ɵɵelementStart(0, "span", 48);
167
167
  i0.ɵɵtext(1, "Object");
168
168
  i0.ɵɵelementEnd();
169
169
  } }
170
170
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_8_Template(rf, ctx) { if (rf & 1) {
171
- i0.ɵɵelementStart(0, "span", 61);
172
- i0.ɵɵelement(1, "i", 66);
171
+ i0.ɵɵelementStart(0, "span", 62);
172
+ i0.ɵɵelement(1, "i", 67);
173
173
  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", 47);
174
+ i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_8_Conditional_3_Template, 2, 0, "span", 48);
175
175
  i0.ɵɵelementEnd();
176
176
  } if (rf & 2) {
177
177
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -180,12 +180,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Condition
180
180
  } }
181
181
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
182
182
  const _r8 = i0.ɵɵgetCurrentView();
183
- i0.ɵɵelementStart(0, "div", 56)(1, "div", 57)(2, "button", 58);
183
+ i0.ɵɵelementStart(0, "div", 57)(1, "div", 58)(2, "button", 59);
184
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", 59);
185
+ i0.ɵɵelement(3, "i", 60);
186
186
  i0.ɵɵtext(4, " Copy ");
187
187
  i0.ɵɵelementEnd()();
188
- i0.ɵɵelementStart(5, "mj-code-editor", 67);
188
+ i0.ɵɵelementStart(5, "mj-code-editor", 68);
189
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); });
190
190
  i0.ɵɵelementEnd()();
191
191
  } if (rf & 2) {
@@ -195,38 +195,38 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Condition
195
195
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
196
196
  } }
197
197
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
198
- i0.ɵɵelementStart(0, "div", 50);
199
- i0.ɵɵelement(1, "i", 66);
198
+ i0.ɵɵelementStart(0, "div", 51);
199
+ i0.ɵɵelement(1, "i", 67);
200
200
  i0.ɵɵelementStart(2, "p");
201
201
  i0.ɵɵtext(3, "No data object found");
202
202
  i0.ɵɵelementEnd()();
203
203
  } }
204
204
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_13_Template(rf, ctx) { if (rf & 1) {
205
- i0.ɵɵelementStart(0, "span", 61);
206
- i0.ɵɵelement(1, "i", 68);
205
+ i0.ɵɵelementStart(0, "span", 62);
206
+ i0.ɵɵelement(1, "i", 69);
207
207
  i0.ɵɵtext(2, " Raw ");
208
208
  i0.ɵɵelementEnd();
209
209
  } }
210
210
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Template(rf, ctx) { if (rf & 1) {
211
211
  const _r7 = i0.ɵɵgetCurrentView();
212
- i0.ɵɵelementStart(0, "div", 49)(1, "kendo-expansionpanel", 51);
213
- i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_2_Template, 4, 1, "ng-template", 52);
214
- i0.ɵɵelementStart(3, "div", 53);
215
- i0.ɵɵtemplate(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_4_Template, 4, 0, "div", 54)(5, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 55)(6, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_6_Template, 4, 0, "div", 50);
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
216
  i0.ɵɵelementEnd()();
217
- i0.ɵɵelementStart(7, "kendo-expansionpanel", 51);
218
- i0.ɵɵtemplate(8, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_8_Template, 4, 1, "ng-template", 52);
219
- i0.ɵɵelementStart(9, "div", 53);
220
- i0.ɵɵtemplate(10, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_10_Template, 6, 4, "div", 56)(11, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_11_Template, 4, 0, "div", 50);
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
221
  i0.ɵɵelementEnd()();
222
- i0.ɵɵelementStart(12, "kendo-expansionpanel", 51);
223
- i0.ɵɵtemplate(13, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_13_Template, 3, 0, "ng-template", 52);
224
- i0.ɵɵelementStart(14, "div", 53)(15, "div", 56)(16, "div", 57)(17, "button", 58);
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
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", 59);
226
+ i0.ɵɵelement(18, "i", 60);
227
227
  i0.ɵɵtext(19, " Copy ");
228
228
  i0.ɵɵelementEnd()();
229
- i0.ɵɵelementStart(20, "mj-code-editor", 60);
229
+ i0.ɵɵelementStart(20, "mj-code-editor", 61);
230
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); });
231
231
  i0.ɵɵelementEnd()()()()();
232
232
  } if (rf & 2) {
@@ -246,15 +246,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Condition
246
246
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
247
247
  } }
248
248
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_2_Template(rf, ctx) { if (rf & 1) {
249
- i0.ɵɵelementStart(0, "div", 50);
250
- i0.ɵɵelement(1, "i", 65);
249
+ i0.ɵɵelementStart(0, "div", 51);
250
+ i0.ɵɵelement(1, "i", 66);
251
251
  i0.ɵɵelementStart(2, "p");
252
252
  i0.ɵɵtext(3, "No input messages recorded");
253
253
  i0.ɵɵelementEnd()();
254
254
  } }
255
255
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Template(rf, ctx) { if (rf & 1) {
256
- i0.ɵɵelementStart(0, "div", 48);
257
- i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Template, 21, 12, "div", 49)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_2_Template, 4, 0, "div", 50);
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);
258
258
  i0.ɵɵelementEnd();
259
259
  } if (rf & 2) {
260
260
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -262,20 +262,20 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Template(
262
262
  i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 1 : 2);
263
263
  } }
264
264
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_3_Template(rf, ctx) { if (rf & 1) {
265
- i0.ɵɵelementStart(0, "span", 47);
265
+ i0.ɵɵelementStart(0, "span", 48);
266
266
  i0.ɵɵtext(1, "JSON");
267
267
  i0.ɵɵelementEnd();
268
268
  } }
269
269
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_4_Template(rf, ctx) { if (rf & 1) {
270
- i0.ɵɵelementStart(0, "span", 70);
270
+ i0.ɵɵelementStart(0, "span", 71);
271
271
  i0.ɵɵtext(1, "Error");
272
272
  i0.ɵɵelementEnd();
273
273
  } }
274
274
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template(rf, ctx) { if (rf & 1) {
275
- i0.ɵɵelementStart(0, "span", 46);
276
- i0.ɵɵelement(1, "i", 69);
275
+ i0.ɵɵelementStart(0, "span", 47);
276
+ i0.ɵɵelement(1, "i", 70);
277
277
  i0.ɵɵtext(2, " Result ");
278
- i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_3_Template, 2, 0, "span", 47)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_4_Template, 2, 0, "span", 70);
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);
279
279
  i0.ɵɵelementEnd();
280
280
  } if (rf & 2) {
281
281
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -285,9 +285,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template(
285
285
  i0.ɵɵconditional(ctx_r1.record.ErrorMessage ? 4 : -1);
286
286
  } }
287
287
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_1_Template(rf, ctx) { if (rf & 1) {
288
- i0.ɵɵelementStart(0, "div", 71);
289
- i0.ɵɵelement(1, "i", 72);
290
- i0.ɵɵelementStart(2, "div", 73)(3, "h4");
288
+ i0.ɵɵelementStart(0, "div", 72);
289
+ i0.ɵɵelement(1, "i", 73);
290
+ i0.ɵɵelementStart(2, "div", 74)(3, "h4");
291
291
  i0.ɵɵtext(4, "Error Message");
292
292
  i0.ɵɵelementEnd();
293
293
  i0.ɵɵelementStart(5, "p");
@@ -300,12 +300,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Condition
300
300
  } }
301
301
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_2_Template(rf, ctx) { if (rf & 1) {
302
302
  const _r9 = i0.ɵɵgetCurrentView();
303
- i0.ɵɵelementStart(0, "div", 56)(1, "div", 57)(2, "button", 58);
303
+ i0.ɵɵelementStart(0, "div", 57)(1, "div", 58)(2, "button", 59);
304
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", 59);
305
+ i0.ɵɵelement(3, "i", 60);
306
306
  i0.ɵɵtext(4, " Copy ");
307
307
  i0.ɵɵelementEnd()();
308
- i0.ɵɵelementStart(5, "mj-code-editor", 74);
308
+ i0.ɵɵelementStart(5, "mj-code-editor", 75);
309
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); });
310
310
  i0.ɵɵelementEnd()();
311
311
  } if (rf & 2) {
@@ -315,15 +315,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Condition
315
315
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
316
316
  } }
317
317
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Template(rf, ctx) { if (rf & 1) {
318
- i0.ɵɵelementStart(0, "div", 50);
319
- i0.ɵɵelement(1, "i", 75);
318
+ i0.ɵɵelementStart(0, "div", 51);
319
+ i0.ɵɵelement(1, "i", 76);
320
320
  i0.ɵɵelementStart(2, "p");
321
321
  i0.ɵɵtext(3, "No result data recorded");
322
322
  i0.ɵɵelementEnd()();
323
323
  } }
324
324
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Template(rf, ctx) { if (rf & 1) {
325
- i0.ɵɵelementStart(0, "div", 48);
326
- i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_1_Template, 7, 1, "div", 71)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_2_Template, 6, 4, "div", 56)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Template, 4, 0, "div", 50);
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);
327
327
  i0.ɵɵelementEnd();
328
328
  } if (rf & 2) {
329
329
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -333,13 +333,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Template(
333
333
  i0.ɵɵconditional(ctx_r1.record.Result && ctx_r1.record.Result.trim() !== "" ? 2 : !ctx_r1.record.ErrorMessage ? 3 : -1);
334
334
  } }
335
335
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Template(rf, ctx) { if (rf & 1) {
336
- i0.ɵɵelementStart(0, "span", 46);
337
- i0.ɵɵelement(1, "i", 76);
336
+ i0.ɵɵelementStart(0, "span", 47);
337
+ i0.ɵɵelement(1, "i", 77);
338
338
  i0.ɵɵtext(2, " Token Usage & Metrics ");
339
339
  i0.ɵɵelementEnd();
340
340
  } }
341
341
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_9_Template(rf, ctx) { if (rf & 1) {
342
- i0.ɵɵelementStart(0, "div", 82)(1, "span");
342
+ i0.ɵɵelementStart(0, "div", 83)(1, "span");
343
343
  i0.ɵɵtext(2);
344
344
  i0.ɵɵelementEnd()();
345
345
  } if (rf & 2) {
@@ -348,7 +348,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
348
348
  i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensPromptRollup), "");
349
349
  } }
350
350
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_17_Template(rf, ctx) { if (rf & 1) {
351
- i0.ɵɵelementStart(0, "div", 82)(1, "span");
351
+ i0.ɵɵelementStart(0, "div", 83)(1, "span");
352
352
  i0.ɵɵtext(2);
353
353
  i0.ɵɵelementEnd()();
354
354
  } if (rf & 2) {
@@ -357,7 +357,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
357
357
  i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensCompletionRollup), "");
358
358
  } }
359
359
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_25_Template(rf, ctx) { if (rf & 1) {
360
- i0.ɵɵelementStart(0, "div", 82)(1, "span");
360
+ i0.ɵɵelementStart(0, "div", 83)(1, "span");
361
361
  i0.ɵɵtext(2);
362
362
  i0.ɵɵelementEnd()();
363
363
  } if (rf & 2) {
@@ -366,7 +366,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
366
366
  i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup), "");
367
367
  } }
368
368
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_33_Template(rf, ctx) { if (rf & 1) {
369
- i0.ɵɵelementStart(0, "div", 82)(1, "span");
369
+ i0.ɵɵelementStart(0, "div", 83)(1, "span");
370
370
  i0.ɵɵtext(2);
371
371
  i0.ɵɵelementEnd()();
372
372
  } if (rf & 2) {
@@ -375,7 +375,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
375
375
  i0.ɵɵtextInterpolate1("Total: ", ctx_r1.formatCost(ctx_r1.record.TotalCost), "");
376
376
  } }
377
377
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_34_Template(rf, ctx) { if (rf & 1) {
378
- i0.ɵɵelementStart(0, "div", 84);
378
+ i0.ɵɵelementStart(0, "div", 85);
379
379
  i0.ɵɵtext(1);
380
380
  i0.ɵɵelementEnd();
381
381
  } if (rf & 2) {
@@ -384,7 +384,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
384
384
  i0.ɵɵtextInterpolate(ctx_r1.record.CostCurrency);
385
385
  } }
386
386
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_36_Template(rf, ctx) { if (rf & 1) {
387
- i0.ɵɵelementStart(0, "div", 86)(1, "span", 27);
387
+ i0.ɵɵelementStart(0, "div", 87)(1, "span", 27);
388
388
  i0.ɵɵtext(2, "Execution Order:");
389
389
  i0.ɵɵelementEnd();
390
390
  i0.ɵɵelementStart(3, "span", 28);
@@ -396,7 +396,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
396
396
  i0.ɵɵtextInterpolate(ctx_r1.record.ExecutionOrder);
397
397
  } }
398
398
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_37_Template(rf, ctx) { if (rf & 1) {
399
- i0.ɵɵelementStart(0, "div", 86)(1, "span", 27);
399
+ i0.ɵɵelementStart(0, "div", 87)(1, "span", 27);
400
400
  i0.ɵɵtext(2, "Configuration:");
401
401
  i0.ɵɵelementEnd();
402
402
  i0.ɵɵelementStart(3, "span", 28);
@@ -409,13 +409,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
409
409
  } }
410
410
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_38_Template(rf, ctx) { if (rf & 1) {
411
411
  const _r10 = i0.ɵɵgetCurrentView();
412
- i0.ɵɵelementStart(0, "div", 86)(1, "span", 27);
412
+ i0.ɵɵelementStart(0, "div", 87)(1, "span", 27);
413
413
  i0.ɵɵtext(2, "Agent:");
414
414
  i0.ɵɵelementEnd();
415
- i0.ɵɵelementStart(3, "span", 87);
415
+ i0.ɵɵelementStart(3, "span", 88);
416
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)); });
417
417
  i0.ɵɵtext(4);
418
- i0.ɵɵelement(5, "i", 88);
418
+ i0.ɵɵelement(5, "i", 89);
419
419
  i0.ɵɵelementEnd()();
420
420
  } if (rf & 2) {
421
421
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -423,48 +423,48 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
423
423
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
424
424
  } }
425
425
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Template(rf, ctx) { if (rf & 1) {
426
- i0.ɵɵelementStart(0, "div", 48)(1, "div", 77)(2, "div", 78)(3, "div", 79);
427
- i0.ɵɵelement(4, "i", 80);
426
+ i0.ɵɵelementStart(0, "div", 49)(1, "div", 78)(2, "div", 79)(3, "div", 80);
427
+ i0.ɵɵelement(4, "i", 81);
428
428
  i0.ɵɵelementStart(5, "h4");
429
429
  i0.ɵɵtext(6, "Prompt Tokens");
430
430
  i0.ɵɵelementEnd()();
431
- i0.ɵɵelementStart(7, "div", 81);
431
+ i0.ɵɵelementStart(7, "div", 82);
432
432
  i0.ɵɵtext(8);
433
433
  i0.ɵɵelementEnd();
434
- i0.ɵɵtemplate(9, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_9_Template, 3, 1, "div", 82);
434
+ i0.ɵɵtemplate(9, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_9_Template, 3, 1, "div", 83);
435
435
  i0.ɵɵelementEnd();
436
- i0.ɵɵelementStart(10, "div", 78)(11, "div", 79);
437
- i0.ɵɵelement(12, "i", 83);
436
+ i0.ɵɵelementStart(10, "div", 79)(11, "div", 80);
437
+ i0.ɵɵelement(12, "i", 84);
438
438
  i0.ɵɵelementStart(13, "h4");
439
439
  i0.ɵɵtext(14, "Completion Tokens");
440
440
  i0.ɵɵelementEnd()();
441
- i0.ɵɵelementStart(15, "div", 81);
441
+ i0.ɵɵelementStart(15, "div", 82);
442
442
  i0.ɵɵtext(16);
443
443
  i0.ɵɵelementEnd();
444
- i0.ɵɵtemplate(17, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_17_Template, 3, 1, "div", 82);
444
+ i0.ɵɵtemplate(17, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_17_Template, 3, 1, "div", 83);
445
445
  i0.ɵɵelementEnd();
446
- i0.ɵɵelementStart(18, "div", 78)(19, "div", 79);
446
+ i0.ɵɵelementStart(18, "div", 79)(19, "div", 80);
447
447
  i0.ɵɵelement(20, "i", 29);
448
448
  i0.ɵɵelementStart(21, "h4");
449
449
  i0.ɵɵtext(22, "Total Tokens");
450
450
  i0.ɵɵelementEnd()();
451
- i0.ɵɵelementStart(23, "div", 81);
451
+ i0.ɵɵelementStart(23, "div", 82);
452
452
  i0.ɵɵtext(24);
453
453
  i0.ɵɵelementEnd();
454
- i0.ɵɵtemplate(25, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_25_Template, 3, 1, "div", 82);
454
+ i0.ɵɵtemplate(25, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_25_Template, 3, 1, "div", 83);
455
455
  i0.ɵɵelementEnd();
456
- i0.ɵɵelementStart(26, "div", 78)(27, "div", 79);
456
+ i0.ɵɵelementStart(26, "div", 79)(27, "div", 80);
457
457
  i0.ɵɵelement(28, "i", 30);
458
458
  i0.ɵɵelementStart(29, "h4");
459
459
  i0.ɵɵtext(30, "Cost");
460
460
  i0.ɵɵelementEnd()();
461
- i0.ɵɵelementStart(31, "div", 81);
461
+ i0.ɵɵelementStart(31, "div", 82);
462
462
  i0.ɵɵtext(32);
463
463
  i0.ɵɵelementEnd();
464
- i0.ɵɵtemplate(33, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_33_Template, 3, 1, "div", 82)(34, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_34_Template, 2, 1, "div", 84);
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
465
  i0.ɵɵelementEnd()();
466
- i0.ɵɵelementStart(35, "div", 85);
467
- i0.ɵɵtemplate(36, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_36_Template, 5, 1, "div", 86)(37, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_37_Template, 5, 1, "div", 86)(38, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_38_Template, 6, 1, "div", 86);
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);
468
468
  i0.ɵɵelementEnd()();
469
469
  } if (rf & 2) {
470
470
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -494,7 +494,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Template(
494
494
  i0.ɵɵconditional(ctx_r1.record.AgentID ? 38 : -1);
495
495
  } }
496
496
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
497
- i0.ɵɵelementStart(0, "span", 63);
497
+ i0.ɵɵelementStart(0, "span", 64);
498
498
  i0.ɵɵtext(1);
499
499
  i0.ɵɵelementEnd();
500
500
  } if (rf & 2) {
@@ -503,20 +503,20 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
503
503
  i0.ɵɵtextInterpolate1("(", ctx_r1.record.ValidationAttemptCount, " attempts)");
504
504
  } }
505
505
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
506
- i0.ɵɵelementStart(0, "span", 90);
506
+ i0.ɵɵelementStart(0, "span", 91);
507
507
  i0.ɵɵtext(1, "Passed");
508
508
  i0.ɵɵelementEnd();
509
509
  } }
510
510
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
511
- i0.ɵɵelementStart(0, "span", 70);
511
+ i0.ɵɵelementStart(0, "span", 71);
512
512
  i0.ɵɵtext(1, "Failed");
513
513
  i0.ɵɵelementEnd();
514
514
  } }
515
515
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Template(rf, ctx) { if (rf & 1) {
516
- i0.ɵɵelementStart(0, "span", 46);
517
- i0.ɵɵelement(1, "i", 89);
516
+ i0.ɵɵelementStart(0, "span", 47);
517
+ i0.ɵɵelement(1, "i", 90);
518
518
  i0.ɵɵtext(2, " Validation & Retries ");
519
- i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_3_Template, 2, 1, "span", 63)(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_4_Template, 2, 0, "span", 90)(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_5_Template, 2, 0, "span", 70);
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);
520
520
  i0.ɵɵelementEnd();
521
521
  } if (rf & 2) {
522
522
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -526,7 +526,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
526
526
  i0.ɵɵconditional(ctx_r1.record.FinalValidationPassed ? 4 : ctx_r1.record.FinalValidationPassed === false ? 5 : -1);
527
527
  } }
528
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", 101);
529
+ i0.ɵɵelementStart(0, "span", 102);
530
530
  i0.ɵɵtext(1);
531
531
  i0.ɵɵelementEnd();
532
532
  } if (rf & 2) {
@@ -535,14 +535,14 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
535
535
  i0.ɵɵtextInterpolate1("", ctx_r1.record.ValidationErrorCount, " validation errors");
536
536
  } }
537
537
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
538
- i0.ɵɵelementStart(0, "div", 96)(1, "h5");
539
- i0.ɵɵelement(2, "i", 72);
538
+ i0.ɵɵelementStart(0, "div", 97)(1, "h5");
539
+ i0.ɵɵelement(2, "i", 73);
540
540
  i0.ɵɵtext(3, " Final Validation Error");
541
541
  i0.ɵɵelementEnd();
542
542
  i0.ɵɵelementStart(4, "p");
543
543
  i0.ɵɵtext(5);
544
544
  i0.ɵɵelementEnd();
545
- i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Conditional_6_Template, 2, 1, "span", 101);
545
+ i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Conditional_6_Template, 2, 1, "span", 102);
546
546
  i0.ɵɵelementEnd();
547
547
  } if (rf & 2) {
548
548
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -552,8 +552,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
552
552
  i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationErrorCount && ctx_r1.record.ValidationErrorCount > 0 ? 6 : -1);
553
553
  } }
554
554
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_30_Template(rf, ctx) { if (rf & 1) {
555
- i0.ɵɵelementStart(0, "div", 97)(1, "h5");
556
- i0.ɵɵelement(2, "i", 102);
555
+ i0.ɵɵelementStart(0, "div", 98)(1, "h5");
556
+ i0.ɵɵelement(2, "i", 103);
557
557
  i0.ɵɵtext(3, " Most Common Error");
558
558
  i0.ɵɵelementEnd();
559
559
  i0.ɵɵelementStart(4, "p");
@@ -565,23 +565,23 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
565
565
  i0.ɵɵtextInterpolate(ctx_r1.record.CommonValidationError);
566
566
  } }
567
567
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
568
- i0.ɵɵelementStart(0, "div", 98)(1, "h4");
568
+ i0.ɵɵelementStart(0, "div", 99)(1, "h4");
569
569
  i0.ɵɵtext(2, "Retry Timeline");
570
570
  i0.ɵɵelementEnd();
571
- i0.ɵɵelementStart(3, "div", 103)(4, "div", 104);
571
+ i0.ɵɵelementStart(3, "div", 104)(4, "div", 105);
572
572
  i0.ɵɵelement(5, "i", 25);
573
573
  i0.ɵɵelementStart(6, "span");
574
574
  i0.ɵɵtext(7);
575
575
  i0.ɵɵpipe(8, "date");
576
576
  i0.ɵɵelementEnd()();
577
- i0.ɵɵelementStart(9, "div", 104);
578
- i0.ɵɵelement(10, "i", 105);
577
+ i0.ɵɵelementStart(9, "div", 105);
578
+ i0.ɵɵelement(10, "i", 106);
579
579
  i0.ɵɵelementStart(11, "span");
580
580
  i0.ɵɵtext(12);
581
581
  i0.ɵɵpipe(13, "date");
582
582
  i0.ɵɵelementEnd()();
583
- i0.ɵɵelementStart(14, "div", 104);
584
- i0.ɵɵelement(15, "i", 106);
583
+ i0.ɵɵelementStart(14, "div", 105);
584
+ i0.ɵɵelement(15, "i", 107);
585
585
  i0.ɵɵelementStart(16, "span");
586
586
  i0.ɵɵtext(17);
587
587
  i0.ɵɵelementEnd()()()();
@@ -595,7 +595,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
595
595
  i0.ɵɵtextInterpolate1("Total Retry Duration: ", ctx_r1.formatDuration(ctx_r1.record.TotalRetryDurationMS), "");
596
596
  } }
597
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", 101);
598
+ i0.ɵɵelementStart(0, "span", 102);
599
599
  i0.ɵɵtext(1);
600
600
  i0.ɵɵelementEnd();
601
601
  } if (rf & 2) {
@@ -604,10 +604,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
604
604
  i0.ɵɵtextInterpolate1("(", attempt_r11.validationErrorCount, " errors)");
605
605
  } }
606
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", 114);
607
+ i0.ɵɵelementStart(0, "span", 115);
608
608
  i0.ɵɵtext(1);
609
609
  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", 101);
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);
611
611
  } if (rf & 2) {
612
612
  const attempt_r11 = i0.ɵɵnextContext().$implicit;
613
613
  i0.ɵɵadvance();
@@ -616,7 +616,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
616
616
  i0.ɵɵconditional(attempt_r11.validationErrorCount > 0 ? 2 : -1);
617
617
  } }
618
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", 113);
619
+ i0.ɵɵelementStart(0, "span", 114);
620
620
  i0.ɵɵtext(1);
621
621
  i0.ɵɵelementEnd();
622
622
  } if (rf & 2) {
@@ -625,14 +625,14 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
625
625
  i0.ɵɵtextInterpolate1("Output: ", attempt_r11.outputLength, " chars");
626
626
  } }
627
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", 109)(1, "div", 110);
628
+ i0.ɵɵelementStart(0, "div", 110)(1, "div", 111);
629
629
  i0.ɵɵelement(2, "i");
630
630
  i0.ɵɵtext(3);
631
631
  i0.ɵɵelementEnd();
632
- i0.ɵɵelementStart(4, "div", 111)(5, "span", 112);
632
+ i0.ɵɵelementStart(4, "div", 112)(5, "span", 113);
633
633
  i0.ɵɵtext(6);
634
634
  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", 113);
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);
636
636
  i0.ɵɵelementEnd()();
637
637
  } if (rf & 2) {
638
638
  const attempt_r11 = ctx.$implicit;
@@ -649,11 +649,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
649
649
  i0.ɵɵconditional(attempt_r11.outputLength ? 8 : -1);
650
650
  } }
651
651
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
652
- i0.ɵɵelementStart(0, "div", 99)(1, "h4");
652
+ i0.ɵɵelementStart(0, "div", 100)(1, "h4");
653
653
  i0.ɵɵtext(2, "Validation Attempts");
654
654
  i0.ɵɵelementEnd();
655
- i0.ɵɵelementStart(3, "div", 107);
656
- i0.ɵɵrepeaterCreate(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Template, 9, 10, "div", 108, _forTrack0);
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);
657
657
  i0.ɵɵelementEnd()();
658
658
  } if (rf & 2) {
659
659
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -662,10 +662,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
662
662
  } }
663
663
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_33_Template(rf, ctx) { if (rf & 1) {
664
664
  const _r12 = i0.ɵɵgetCurrentView();
665
- i0.ɵɵelementStart(0, "div", 100)(1, "h4");
665
+ i0.ɵɵelementStart(0, "div", 101)(1, "h4");
666
666
  i0.ɵɵtext(2, "Validation Summary Details");
667
667
  i0.ɵɵelementEnd();
668
- i0.ɵɵelementStart(3, "div", 115)(4, "mj-code-editor", 116);
668
+ i0.ɵɵelementStart(3, "div", 116)(4, "mj-code-editor", 117);
669
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); });
670
670
  i0.ɵɵelementEnd()()();
671
671
  } if (rf & 2) {
@@ -676,10 +676,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
676
676
  } }
677
677
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_34_Template(rf, ctx) { if (rf & 1) {
678
678
  const _r13 = i0.ɵɵgetCurrentView();
679
- i0.ɵɵelementStart(0, "div", 100)(1, "h4");
679
+ i0.ɵɵelementStart(0, "div", 101)(1, "h4");
680
680
  i0.ɵɵtext(2, "Validation Attempts (Raw JSON)");
681
681
  i0.ɵɵelementEnd();
682
- i0.ɵɵelementStart(3, "div", 115)(4, "mj-code-editor", 117);
682
+ i0.ɵɵelementStart(3, "div", 116)(4, "mj-code-editor", 118);
683
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); });
684
684
  i0.ɵɵelementEnd()()();
685
685
  } if (rf & 2) {
@@ -689,40 +689,40 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
689
689
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
690
690
  } }
691
691
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Template(rf, ctx) { if (rf & 1) {
692
- i0.ɵɵelementStart(0, "div", 48)(1, "div", 91)(2, "div", 92)(3, "h4");
692
+ i0.ɵɵelementStart(0, "div", 49)(1, "div", 92)(2, "div", 93)(3, "h4");
693
693
  i0.ɵɵtext(4, "Validation Summary");
694
694
  i0.ɵɵelementEnd();
695
- i0.ɵɵelementStart(5, "div", 93);
695
+ i0.ɵɵelementStart(5, "div", 94);
696
696
  i0.ɵɵelement(6, "i");
697
697
  i0.ɵɵtext(7);
698
698
  i0.ɵɵelementEnd()();
699
- i0.ɵɵelementStart(8, "div", 94)(9, "div", 95)(10, "div", 27);
699
+ i0.ɵɵelementStart(8, "div", 95)(9, "div", 96)(10, "div", 27);
700
700
  i0.ɵɵtext(11, "Total Attempts");
701
701
  i0.ɵɵelementEnd();
702
702
  i0.ɵɵelementStart(12, "div", 28);
703
703
  i0.ɵɵtext(13);
704
704
  i0.ɵɵelementEnd()();
705
- i0.ɵɵelementStart(14, "div", 95)(15, "div", 27);
705
+ i0.ɵɵelementStart(14, "div", 96)(15, "div", 27);
706
706
  i0.ɵɵtext(16, "Successful");
707
707
  i0.ɵɵelementEnd();
708
708
  i0.ɵɵelementStart(17, "div", 28);
709
709
  i0.ɵɵtext(18);
710
710
  i0.ɵɵelementEnd()();
711
- i0.ɵɵelementStart(19, "div", 95)(20, "div", 27);
711
+ i0.ɵɵelementStart(19, "div", 96)(20, "div", 27);
712
712
  i0.ɵɵtext(21, "Behavior");
713
713
  i0.ɵɵelementEnd();
714
714
  i0.ɵɵelementStart(22, "div", 28);
715
715
  i0.ɵɵtext(23);
716
716
  i0.ɵɵelementEnd()();
717
- i0.ɵɵelementStart(24, "div", 95)(25, "div", 27);
717
+ i0.ɵɵelementStart(24, "div", 96)(25, "div", 27);
718
718
  i0.ɵɵtext(26, "Retry Strategy");
719
719
  i0.ɵɵelementEnd();
720
720
  i0.ɵɵelementStart(27, "div", 28);
721
721
  i0.ɵɵtext(28);
722
722
  i0.ɵɵelementEnd()()();
723
- i0.ɵɵtemplate(29, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Template, 7, 2, "div", 96)(30, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_30_Template, 6, 1, "div", 97);
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);
724
724
  i0.ɵɵelementEnd();
725
- i0.ɵɵtemplate(31, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_31_Template, 18, 9, "div", 98)(32, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_Template, 6, 0, "div", 99)(33, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_33_Template, 5, 4, "div", 100)(34, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_34_Template, 5, 4, "div", 100);
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);
726
726
  i0.ɵɵelementEnd();
727
727
  } if (rf & 2) {
728
728
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -754,15 +754,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
754
754
  i0.ɵɵconditional(ctx_r1.record.ValidationAttempts ? 34 : -1);
755
755
  } }
756
756
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_Template(rf, ctx) { if (rf & 1) {
757
- i0.ɵɵelementStart(0, "kendo-panelbar-item", 35);
758
- i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Template, 6, 2, "ng-template", 33)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Template, 35, 17, "ng-template", 34);
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);
759
759
  i0.ɵɵelementEnd();
760
760
  } if (rf & 2) {
761
761
  const ctx_r1 = i0.ɵɵnextContext(2);
762
762
  i0.ɵɵproperty("expanded", ctx_r1.validationExpanded);
763
763
  } }
764
764
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
765
- i0.ɵɵelementStart(0, "span", 63);
765
+ i0.ɵɵelementStart(0, "span", 64);
766
766
  i0.ɵɵtext(1);
767
767
  i0.ɵɵelementEnd();
768
768
  } if (rf & 2) {
@@ -771,10 +771,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
771
771
  i0.ɵɵtextInterpolate1("(", ctx_r1.childRuns.length, " children)");
772
772
  } }
773
773
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Template(rf, ctx) { if (rf & 1) {
774
- i0.ɵɵelementStart(0, "span", 46);
775
- i0.ɵɵelement(1, "i", 118);
774
+ i0.ɵɵelementStart(0, "span", 47);
775
+ i0.ɵɵelement(1, "i", 119);
776
776
  i0.ɵɵtext(2, " Run Hierarchy ");
777
- i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Conditional_3_Template, 2, 1, "span", 63);
777
+ i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Conditional_3_Template, 2, 1, "span", 64);
778
778
  i0.ɵɵelementEnd();
779
779
  } if (rf & 2) {
780
780
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -783,21 +783,21 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
783
783
  } }
784
784
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
785
785
  const _r14 = i0.ɵɵgetCurrentView();
786
- i0.ɵɵelementStart(0, "div", 119)(1, "h4");
787
- i0.ɵɵelement(2, "i", 43);
786
+ i0.ɵɵelementStart(0, "div", 120)(1, "h4");
787
+ i0.ɵɵelement(2, "i", 44);
788
788
  i0.ɵɵtext(3, " Parent Run");
789
789
  i0.ɵɵelementEnd();
790
- i0.ɵɵelementStart(4, "div", 121);
790
+ i0.ɵɵelementStart(4, "div", 122);
791
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", 122);
792
+ i0.ɵɵelementStart(5, "div", 123);
793
793
  i0.ɵɵelement(6, "i");
794
794
  i0.ɵɵelementEnd();
795
- i0.ɵɵelementStart(7, "div", 123)(8, "div", 124);
795
+ i0.ɵɵelementStart(7, "div", 124)(8, "div", 125);
796
796
  i0.ɵɵtext(9);
797
- i0.ɵɵelementStart(10, "span", 125);
797
+ i0.ɵɵelementStart(10, "span", 126);
798
798
  i0.ɵɵtext(11);
799
799
  i0.ɵɵelementEnd()();
800
- i0.ɵɵelementStart(12, "div", 126)(13, "span");
800
+ i0.ɵɵelementStart(12, "div", 127)(13, "span");
801
801
  i0.ɵɵelement(14, "i", 25);
802
802
  i0.ɵɵtext(15);
803
803
  i0.ɵɵelementEnd();
@@ -806,11 +806,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
806
806
  i0.ɵɵtext(18);
807
807
  i0.ɵɵelementEnd();
808
808
  i0.ɵɵelementStart(19, "span");
809
- i0.ɵɵelement(20, "i", 45);
809
+ i0.ɵɵelement(20, "i", 46);
810
810
  i0.ɵɵtext(21);
811
811
  i0.ɵɵpipe(22, "date");
812
812
  i0.ɵɵelementEnd()()();
813
- i0.ɵɵelement(23, "i", 88);
813
+ i0.ɵɵelement(23, "i", 89);
814
814
  i0.ɵɵelementEnd()();
815
815
  } if (rf & 2) {
816
816
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -830,7 +830,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
830
830
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"), "");
831
831
  } }
832
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", 131);
833
+ i0.ɵɵelementStart(0, "span", 132);
834
834
  i0.ɵɵtext(1);
835
835
  i0.ɵɵelementEnd();
836
836
  } if (rf & 2) {
@@ -840,18 +840,18 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
840
840
  } }
841
841
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
842
842
  const _r15 = i0.ɵɵgetCurrentView();
843
- i0.ɵɵelementStart(0, "div", 130);
843
+ i0.ɵɵelementStart(0, "div", 131);
844
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", 122);
845
+ i0.ɵɵelementStart(1, "div", 123);
846
846
  i0.ɵɵelement(2, "i");
847
847
  i0.ɵɵelementEnd();
848
- i0.ɵɵelementStart(3, "div", 123)(4, "div", 124);
848
+ i0.ɵɵelementStart(3, "div", 124)(4, "div", 125);
849
849
  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", 131);
851
- i0.ɵɵelementStart(7, "span", 125);
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);
852
852
  i0.ɵɵtext(8);
853
853
  i0.ɵɵelementEnd()();
854
- i0.ɵɵelementStart(9, "div", 126)(10, "span", 132);
854
+ i0.ɵɵelementStart(9, "div", 127)(10, "span", 133);
855
855
  i0.ɵɵelement(11, "i");
856
856
  i0.ɵɵtext(12);
857
857
  i0.ɵɵelementEnd();
@@ -863,7 +863,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
863
863
  i0.ɵɵelement(17, "i", 29);
864
864
  i0.ɵɵtext(18);
865
865
  i0.ɵɵelementEnd()()();
866
- i0.ɵɵelement(19, "i", 88);
866
+ i0.ɵɵelement(19, "i", 89);
867
867
  i0.ɵɵelementEnd();
868
868
  } if (rf & 2) {
869
869
  const childRun_r16 = ctx.$implicit;
@@ -890,12 +890,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
890
890
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r16.TokensUsed), "");
891
891
  } }
892
892
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
893
- i0.ɵɵelementStart(0, "div", 120)(1, "h4");
894
- i0.ɵɵelement(2, "i", 127);
893
+ i0.ɵɵelementStart(0, "div", 121)(1, "h4");
894
+ i0.ɵɵelement(2, "i", 128);
895
895
  i0.ɵɵtext(3, " Child Runs");
896
896
  i0.ɵɵelementEnd();
897
- i0.ɵɵelementStart(4, "div", 128);
898
- i0.ɵɵrepeaterCreate(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Template, 20, 14, "div", 129, _forTrack1);
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);
899
899
  i0.ɵɵelementEnd()();
900
900
  } if (rf & 2) {
901
901
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -903,8 +903,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
903
903
  i0.ɵɵrepeater(ctx_r1.childRuns);
904
904
  } }
905
905
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Template(rf, ctx) { if (rf & 1) {
906
- i0.ɵɵelementStart(0, "div", 48);
907
- i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_1_Template, 24, 12, "div", 119)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_Template, 7, 0, "div", 120);
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);
908
908
  i0.ɵɵelementEnd();
909
909
  } if (rf & 2) {
910
910
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -914,29 +914,29 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
914
914
  i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 2 : -1);
915
915
  } }
916
916
  function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_Template(rf, ctx) { if (rf & 1) {
917
- i0.ɵɵelementStart(0, "kendo-panelbar-item", 35);
918
- i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Template, 4, 1, "ng-template", 33)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Template, 3, 2, "ng-template", 34);
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);
919
919
  i0.ɵɵelementEnd();
920
920
  } if (rf & 2) {
921
921
  const ctx_r1 = i0.ɵɵnextContext(2);
922
922
  i0.ɵɵproperty("expanded", ctx_r1.hierarchyExpanded);
923
923
  } }
924
924
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_64_Template(rf, ctx) { if (rf & 1) {
925
- i0.ɵɵelementStart(0, "span", 46);
926
- i0.ɵɵelement(1, "i", 133);
925
+ i0.ɵɵelementStart(0, "span", 47);
926
+ i0.ɵɵelement(1, "i", 134);
927
927
  i0.ɵɵtext(2, " Additional Details ");
928
928
  i0.ɵɵelementEnd();
929
929
  } }
930
930
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_2_Template(rf, ctx) { if (rf & 1) {
931
931
  const _r17 = i0.ɵɵgetCurrentView();
932
- i0.ɵɵelementStart(0, "div", 135)(1, "label");
932
+ i0.ɵɵelementStart(0, "div", 136)(1, "label");
933
933
  i0.ɵɵtext(2, "Agent");
934
934
  i0.ɵɵelementEnd();
935
- i0.ɵɵelementStart(3, "div", 143);
935
+ i0.ɵɵelementStart(3, "div", 144);
936
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", 144);
937
+ i0.ɵɵelement(4, "i", 145);
938
938
  i0.ɵɵtext(5);
939
- i0.ɵɵelement(6, "i", 88);
939
+ i0.ɵɵelement(6, "i", 89);
940
940
  i0.ɵɵelementEnd()();
941
941
  } if (rf & 2) {
942
942
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -944,11 +944,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
944
944
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Unknown", " ");
945
945
  } }
946
946
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_3_Template(rf, ctx) { if (rf & 1) {
947
- i0.ɵɵelementStart(0, "div", 135)(1, "label");
947
+ i0.ɵɵelementStart(0, "div", 136)(1, "label");
948
948
  i0.ɵɵtext(2, "Configuration");
949
949
  i0.ɵɵelementEnd();
950
- i0.ɵɵelementStart(3, "div", 136);
951
- i0.ɵɵelement(4, "i", 145);
950
+ i0.ɵɵelementStart(3, "div", 137);
951
+ i0.ɵɵelement(4, "i", 146);
952
952
  i0.ɵɵtext(5);
953
953
  i0.ɵɵelementEnd()();
954
954
  } if (rf & 2) {
@@ -957,10 +957,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
957
957
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Configuration || "Unknown", " ");
958
958
  } }
959
959
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_4_Template(rf, ctx) { if (rf & 1) {
960
- i0.ɵɵelementStart(0, "div", 135)(1, "label");
960
+ i0.ɵɵelementStart(0, "div", 136)(1, "label");
961
961
  i0.ɵɵtext(2, "Run Type");
962
962
  i0.ɵɵelementEnd();
963
- i0.ɵɵelementStart(3, "div", 136);
963
+ i0.ɵɵelementStart(3, "div", 137);
964
964
  i0.ɵɵelement(4, "i");
965
965
  i0.ɵɵtext(5);
966
966
  i0.ɵɵelementEnd()();
@@ -972,11 +972,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
972
972
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
973
973
  } }
974
974
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_5_Template(rf, ctx) { if (rf & 1) {
975
- i0.ɵɵelementStart(0, "div", 135)(1, "label");
975
+ i0.ɵɵelementStart(0, "div", 136)(1, "label");
976
976
  i0.ɵɵtext(2, "Response Format");
977
977
  i0.ɵɵelementEnd();
978
- i0.ɵɵelementStart(3, "div", 136);
979
- i0.ɵɵelement(4, "i", 68);
978
+ i0.ɵɵelementStart(3, "div", 137);
979
+ i0.ɵɵelement(4, "i", 69);
980
980
  i0.ɵɵtext(5);
981
981
  i0.ɵɵelementEnd()();
982
982
  } if (rf & 2) {
@@ -985,10 +985,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
985
985
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.ResponseFormat, " ");
986
986
  } }
987
987
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_48_Template(rf, ctx) { if (rf & 1) {
988
- i0.ɵɵelementStart(0, "div", 135)(1, "label");
988
+ i0.ɵɵelementStart(0, "div", 136)(1, "label");
989
989
  i0.ɵɵtext(2, "Started At");
990
990
  i0.ɵɵelementEnd();
991
- i0.ɵɵelementStart(3, "div", 136);
991
+ i0.ɵɵelementStart(3, "div", 137);
992
992
  i0.ɵɵelement(4, "i", 25);
993
993
  i0.ɵɵtext(5);
994
994
  i0.ɵɵpipe(6, "date");
@@ -999,11 +999,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
999
999
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.RunAt, "medium"), " ");
1000
1000
  } }
1001
1001
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_49_Template(rf, ctx) { if (rf & 1) {
1002
- i0.ɵɵelementStart(0, "div", 135)(1, "label");
1002
+ i0.ɵɵelementStart(0, "div", 136)(1, "label");
1003
1003
  i0.ɵɵtext(2, "Completed At");
1004
1004
  i0.ɵɵelementEnd();
1005
- i0.ɵɵelementStart(3, "div", 136);
1006
- i0.ɵɵelement(4, "i", 146);
1005
+ i0.ɵɵelementStart(3, "div", 137);
1006
+ i0.ɵɵelement(4, "i", 147);
1007
1007
  i0.ɵɵtext(5);
1008
1008
  i0.ɵɵpipe(6, "date");
1009
1009
  i0.ɵɵelementEnd()();
@@ -1013,58 +1013,58 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
1013
1013
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.CompletedAt, "medium"), " ");
1014
1014
  } }
1015
1015
  function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Template(rf, ctx) { if (rf & 1) {
1016
- i0.ɵɵelementStart(0, "div", 48)(1, "div", 134);
1017
- i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_2_Template, 7, 1, "div", 135)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_3_Template, 6, 1, "div", 135)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_4_Template, 6, 3, "div", 135)(5, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_5_Template, 6, 1, "div", 135);
1018
- i0.ɵɵelementStart(6, "div", 135)(7, "label");
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
1019
  i0.ɵɵtext(8, "Temperature");
1020
1020
  i0.ɵɵelementEnd();
1021
- i0.ɵɵelementStart(9, "div", 136);
1022
- i0.ɵɵelement(10, "i", 137);
1021
+ i0.ɵɵelementStart(9, "div", 137);
1022
+ i0.ɵɵelement(10, "i", 138);
1023
1023
  i0.ɵɵtext(11);
1024
1024
  i0.ɵɵelementEnd()();
1025
- i0.ɵɵelementStart(12, "div", 135)(13, "label");
1025
+ i0.ɵɵelementStart(12, "div", 136)(13, "label");
1026
1026
  i0.ɵɵtext(14, "Top P");
1027
1027
  i0.ɵɵelementEnd();
1028
- i0.ɵɵelementStart(15, "div", 136);
1029
- i0.ɵɵelement(16, "i", 138);
1028
+ i0.ɵɵelementStart(15, "div", 137);
1029
+ i0.ɵɵelement(16, "i", 139);
1030
1030
  i0.ɵɵtext(17);
1031
1031
  i0.ɵɵelementEnd()();
1032
- i0.ɵɵelementStart(18, "div", 135)(19, "label");
1032
+ i0.ɵɵelementStart(18, "div", 136)(19, "label");
1033
1033
  i0.ɵɵtext(20, "Top K");
1034
1034
  i0.ɵɵelementEnd();
1035
- i0.ɵɵelementStart(21, "div", 136);
1036
- i0.ɵɵelement(22, "i", 139);
1035
+ i0.ɵɵelementStart(21, "div", 137);
1036
+ i0.ɵɵelement(22, "i", 140);
1037
1037
  i0.ɵɵtext(23);
1038
1038
  i0.ɵɵelementEnd()();
1039
- i0.ɵɵelementStart(24, "div", 135)(25, "label");
1039
+ i0.ɵɵelementStart(24, "div", 136)(25, "label");
1040
1040
  i0.ɵɵtext(26, "Min P");
1041
1041
  i0.ɵɵelementEnd();
1042
- i0.ɵɵelementStart(27, "div", 136);
1043
- i0.ɵɵelement(28, "i", 140);
1042
+ i0.ɵɵelementStart(27, "div", 137);
1043
+ i0.ɵɵelement(28, "i", 141);
1044
1044
  i0.ɵɵtext(29);
1045
1045
  i0.ɵɵelementEnd()();
1046
- i0.ɵɵelementStart(30, "div", 135)(31, "label");
1046
+ i0.ɵɵelementStart(30, "div", 136)(31, "label");
1047
1047
  i0.ɵɵtext(32, "Frequency Penalty");
1048
1048
  i0.ɵɵelementEnd();
1049
- i0.ɵɵelementStart(33, "div", 136);
1050
- i0.ɵɵelement(34, "i", 102);
1049
+ i0.ɵɵelementStart(33, "div", 137);
1050
+ i0.ɵɵelement(34, "i", 103);
1051
1051
  i0.ɵɵtext(35);
1052
1052
  i0.ɵɵelementEnd()();
1053
- i0.ɵɵelementStart(36, "div", 135)(37, "label");
1053
+ i0.ɵɵelementStart(36, "div", 136)(37, "label");
1054
1054
  i0.ɵɵtext(38, "Presence Penalty");
1055
1055
  i0.ɵɵelementEnd();
1056
- i0.ɵɵelementStart(39, "div", 136);
1057
- i0.ɵɵelement(40, "i", 141);
1056
+ i0.ɵɵelementStart(39, "div", 137);
1057
+ i0.ɵɵelement(40, "i", 142);
1058
1058
  i0.ɵɵtext(41);
1059
1059
  i0.ɵɵelementEnd()();
1060
- i0.ɵɵelementStart(42, "div", 135)(43, "label");
1060
+ i0.ɵɵelementStart(42, "div", 136)(43, "label");
1061
1061
  i0.ɵɵtext(44, "Seed");
1062
1062
  i0.ɵɵelementEnd();
1063
- i0.ɵɵelementStart(45, "div", 136);
1064
- i0.ɵɵelement(46, "i", 142);
1063
+ i0.ɵɵelementStart(45, "div", 137);
1064
+ i0.ɵɵelement(46, "i", 143);
1065
1065
  i0.ɵɵtext(47);
1066
1066
  i0.ɵɵelementEnd()();
1067
- i0.ɵɵtemplate(48, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_48_Template, 7, 4, "div", 135)(49, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_49_Template, 7, 4, "div", 135);
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);
1068
1068
  i0.ɵɵelementEnd()();
1069
1069
  } if (rf & 2) {
1070
1070
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1161,19 +1161,19 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
1161
1161
  i0.ɵɵelementEnd()()();
1162
1162
  i0.ɵɵtemplate(49, AIPromptRunFormComponentExtended_Conditional_1_Conditional_49_Template, 8, 4, "div", 24);
1163
1163
  i0.ɵɵelementEnd()();
1164
- i0.ɵɵelementStart(50, "div", 31)(51, "kendo-panelbar")(52, "kendo-panelbar-item", 32);
1164
+ i0.ɵɵelementStart(50, "div", 31)(51, "kendo-panelbar", 32)(52, "kendo-panelbar-item", 33);
1165
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", 33)(54, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Template, 3, 1, "ng-template", 34);
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);
1167
1167
  i0.ɵɵelementEnd();
1168
- i0.ɵɵelementStart(55, "kendo-panelbar-item", 35);
1169
- i0.ɵɵtemplate(56, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template, 5, 2, "ng-template", 33)(57, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Template, 4, 2, "ng-template", 34);
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);
1170
1170
  i0.ɵɵelementEnd();
1171
- i0.ɵɵelementStart(58, "kendo-panelbar-item", 35);
1172
- i0.ɵɵtemplate(59, AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Template, 3, 0, "ng-template", 33)(60, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Template, 39, 12, "ng-template", 34);
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);
1173
1173
  i0.ɵɵelementEnd();
1174
- i0.ɵɵtemplate(61, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_Template, 3, 1, "kendo-panelbar-item", 35)(62, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_Template, 3, 1, "kendo-panelbar-item", 35);
1175
- i0.ɵɵelementStart(63, "kendo-panelbar-item", 35);
1176
- i0.ɵɵtemplate(64, AIPromptRunFormComponentExtended_Conditional_1_ng_template_64_Template, 3, 0, "ng-template", 33)(65, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Template, 50, 27, "ng-template", 34);
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);
1177
1177
  i0.ɵɵelementEnd()()()();
1178
1178
  } if (rf & 2) {
1179
1179
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1210,7 +1210,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
1210
1210
  i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
1211
1211
  i0.ɵɵadvance();
1212
1212
  i0.ɵɵconditional(ctx_r1.record.RunAt ? 49 : -1);
1213
- i0.ɵɵadvance(3);
1213
+ i0.ɵɵadvance(2);
1214
+ i0.ɵɵproperty("keepItemContent", true);
1215
+ i0.ɵɵadvance();
1214
1216
  i0.ɵɵproperty("expanded", ctx_r1.inputExpanded);
1215
1217
  i0.ɵɵadvance(3);
1216
1218
  i0.ɵɵproperty("expanded", ctx_r1.resultExpanded);
@@ -1542,9 +1544,9 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
1542
1544
  this.validationExpanded = (this.record.ValidationAttemptCount || 0) > 1;
1543
1545
  }
1544
1546
  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)); }; }
1545
- 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, "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) {
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) {
1546
1548
  i0.ɵɵelementStart(0, "div", 1);
1547
- i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Template, 66, 28, "form", 2);
1549
+ i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Template, 66, 29, "form", 2);
1548
1550
  i0.ɵɵelementEnd();
1549
1551
  } if (rf & 2) {
1550
1552
  i0.ɵɵadvance();
@@ -1557,7 +1559,7 @@ AIPromptRunFormComponentExtended = __decorate([
1557
1559
  export { AIPromptRunFormComponentExtended };
1558
1560
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIPromptRunFormComponentExtended, [{
1559
1561
  type: Component,
1560
- 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>\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}"] }]
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}"] }]
1561
1563
  }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i3.TestHarnessWindowService }, { type: i0.ViewContainerRef }], null); })();
1562
1564
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIPromptRunFormComponentExtended, { className: "AIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 19 }); })();
1563
1565
  //# sourceMappingURL=ai-prompt-run-form.component.js.map