@memberjunction/ng-core-entity-forms 5.38.0 → 5.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +10 -0
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +645 -531
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +13 -4
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +374 -326
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +2 -3
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +1 -2
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +24 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +381 -224
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +39 -41
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +8 -9
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +71 -73
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +3 -3
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModelCost/mjaimodelcost.form.component.js +10 -6
- package/dist/lib/generated/Entities/MJAIModelCost/mjaimodelcost.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +3 -3
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +47 -39
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +58 -24
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +10 -8
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js +27 -25
- package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js +8 -6
- package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js.map +1 -1
- package/package.json +36 -36
- package/dist/lib/custom/Queries/query-category-dialog.component.d.ts +0 -34
- package/dist/lib/custom/Queries/query-category-dialog.component.d.ts.map +0 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.js +0 -203
- package/dist/lib/custom/Queries/query-category-dialog.component.js.map +0 -1
|
@@ -48,26 +48,26 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_20_Templat
|
|
|
48
48
|
} }
|
|
49
49
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
50
50
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
51
|
-
i0.ɵɵelementStart(0, "div",
|
|
51
|
+
i0.ɵɵelementStart(0, "div", 66)(1, "div", 14);
|
|
52
52
|
i0.ɵɵtext(2, "Prompt");
|
|
53
53
|
i0.ɵɵelementEnd();
|
|
54
|
-
i0.ɵɵelementStart(3, "div",
|
|
54
|
+
i0.ɵɵelementStart(3, "div", 68);
|
|
55
55
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.ChildPromptID)); });
|
|
56
|
-
i0.ɵɵelement(4, "i",
|
|
56
|
+
i0.ɵɵelement(4, "i", 69);
|
|
57
57
|
i0.ɵɵtext(5);
|
|
58
58
|
i0.ɵɵelementEnd();
|
|
59
|
-
i0.ɵɵelementStart(6, "div",
|
|
60
|
-
i0.ɵɵelement(7, "span",
|
|
61
|
-
i0.ɵɵelementStart(8, "span",
|
|
59
|
+
i0.ɵɵelementStart(6, "div", 70);
|
|
60
|
+
i0.ɵɵelement(7, "span", 71);
|
|
61
|
+
i0.ɵɵelementStart(8, "span", 72);
|
|
62
62
|
i0.ɵɵtext(9, "wrapped by");
|
|
63
63
|
i0.ɵɵelementEnd();
|
|
64
|
-
i0.ɵɵelement(10, "span",
|
|
64
|
+
i0.ɵɵelement(10, "span", 71);
|
|
65
65
|
i0.ɵɵelementEnd();
|
|
66
|
-
i0.ɵɵelementStart(11, "div",
|
|
66
|
+
i0.ɵɵelementStart(11, "div", 73);
|
|
67
67
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template_div_click_11_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.prompt.ID)); });
|
|
68
|
-
i0.ɵɵelement(12, "i",
|
|
68
|
+
i0.ɵɵelement(12, "i", 74);
|
|
69
69
|
i0.ɵɵtext(13);
|
|
70
|
-
i0.ɵɵelement(14, "i",
|
|
70
|
+
i0.ɵɵelement(14, "i", 75);
|
|
71
71
|
i0.ɵɵelementEnd()();
|
|
72
72
|
} if (rf & 2) {
|
|
73
73
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -78,12 +78,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditi
|
|
|
78
78
|
} }
|
|
79
79
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
80
80
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
81
|
-
i0.ɵɵelementStart(0, "div",
|
|
81
|
+
i0.ɵɵelementStart(0, "div", 67)(1, "div", 14);
|
|
82
82
|
i0.ɵɵtext(2, "Prompt");
|
|
83
83
|
i0.ɵɵelementEnd();
|
|
84
|
-
i0.ɵɵelementStart(3, "div",
|
|
84
|
+
i0.ɵɵelementStart(3, "div", 76);
|
|
85
85
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.prompt.ID)); });
|
|
86
|
-
i0.ɵɵelement(4, "i",
|
|
86
|
+
i0.ɵɵelement(4, "i", 77);
|
|
87
87
|
i0.ɵɵtext(5);
|
|
88
88
|
i0.ɵɵelementEnd()();
|
|
89
89
|
} if (rf & 2) {
|
|
@@ -92,13 +92,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditi
|
|
|
92
92
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.prompt.Name, " ");
|
|
93
93
|
} }
|
|
94
94
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
95
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template, 15, 2, "div",
|
|
95
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template, 15, 2, "div", 66)(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template, 6, 1, "div", 67);
|
|
96
96
|
} if (rf & 2) {
|
|
97
97
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
98
98
|
i0.ɵɵconditional(ctx_r1.record.ChildPromptID ? 0 : 1);
|
|
99
99
|
} }
|
|
100
100
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
101
|
-
i0.ɵɵelementStart(0, "span",
|
|
101
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
102
102
|
i0.ɵɵtext(1);
|
|
103
103
|
i0.ɵɵelementEnd();
|
|
104
104
|
} if (rf & 2) {
|
|
@@ -111,13 +111,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Templat
|
|
|
111
111
|
i0.ɵɵelementStart(0, "div", 18)(1, "div", 14);
|
|
112
112
|
i0.ɵɵtext(2, "Model");
|
|
113
113
|
i0.ɵɵelementEnd();
|
|
114
|
-
i0.ɵɵelementStart(3, "div",
|
|
114
|
+
i0.ɵɵelementStart(3, "div", 78);
|
|
115
115
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Models", ctx_r1.model.ID)); });
|
|
116
|
-
i0.ɵɵelementStart(4, "span",
|
|
117
|
-
i0.ɵɵelement(5, "i",
|
|
116
|
+
i0.ɵɵelementStart(4, "span", 79);
|
|
117
|
+
i0.ɵɵelement(5, "i", 80);
|
|
118
118
|
i0.ɵɵtext(6);
|
|
119
119
|
i0.ɵɵelementEnd();
|
|
120
|
-
i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditional_7_Template, 2, 1, "span",
|
|
120
|
+
i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditional_7_Template, 2, 1, "span", 81);
|
|
121
121
|
i0.ɵɵelementEnd()();
|
|
122
122
|
} if (rf & 2) {
|
|
123
123
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -129,19 +129,19 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Templat
|
|
|
129
129
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
130
130
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
131
131
|
i0.ɵɵelementStart(0, "span", 19);
|
|
132
|
-
i0.ɵɵelement(1, "i",
|
|
133
|
-
i0.ɵɵelementStart(2, "a",
|
|
132
|
+
i0.ɵɵelement(1, "i", 82);
|
|
133
|
+
i0.ɵɵelementStart(2, "a", 83);
|
|
134
134
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToOriginalRun()); });
|
|
135
135
|
i0.ɵɵtext(3, "Original Run");
|
|
136
136
|
i0.ɵɵelementEnd()();
|
|
137
137
|
} }
|
|
138
138
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
139
|
-
i0.ɵɵelementStart(0, "div",
|
|
140
|
-
i0.ɵɵelement(1, "i",
|
|
141
|
-
i0.ɵɵelementStart(2, "div",
|
|
139
|
+
i0.ɵɵelementStart(0, "div", 84);
|
|
140
|
+
i0.ɵɵelement(1, "i", 51);
|
|
141
|
+
i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
|
|
142
142
|
i0.ɵɵtext(4, "Temperature");
|
|
143
143
|
i0.ɵɵelementEnd();
|
|
144
|
-
i0.ɵɵelementStart(5, "div",
|
|
144
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
145
145
|
i0.ɵɵtext(6);
|
|
146
146
|
i0.ɵɵelementEnd()()();
|
|
147
147
|
} if (rf & 2) {
|
|
@@ -150,12 +150,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
|
|
|
150
150
|
i0.ɵɵtextInterpolate(ctx_r1.record.Temperature);
|
|
151
151
|
} }
|
|
152
152
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
153
|
-
i0.ɵɵelementStart(0, "div",
|
|
154
|
-
i0.ɵɵelement(1, "i",
|
|
155
|
-
i0.ɵɵelementStart(2, "div",
|
|
153
|
+
i0.ɵɵelementStart(0, "div", 84);
|
|
154
|
+
i0.ɵɵelement(1, "i", 52);
|
|
155
|
+
i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
|
|
156
156
|
i0.ɵɵtext(4, "Top P");
|
|
157
157
|
i0.ɵɵelementEnd();
|
|
158
|
-
i0.ɵɵelementStart(5, "div",
|
|
158
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
159
159
|
i0.ɵɵtext(6);
|
|
160
160
|
i0.ɵɵelementEnd()()();
|
|
161
161
|
} if (rf & 2) {
|
|
@@ -164,12 +164,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
|
|
|
164
164
|
i0.ɵɵtextInterpolate(ctx_r1.record.TopP);
|
|
165
165
|
} }
|
|
166
166
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
167
|
-
i0.ɵɵelementStart(0, "div",
|
|
168
|
-
i0.ɵɵelement(1, "i",
|
|
169
|
-
i0.ɵɵelementStart(2, "div",
|
|
167
|
+
i0.ɵɵelementStart(0, "div", 84);
|
|
168
|
+
i0.ɵɵelement(1, "i", 53);
|
|
169
|
+
i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
|
|
170
170
|
i0.ɵɵtext(4, "Top K");
|
|
171
171
|
i0.ɵɵelementEnd();
|
|
172
|
-
i0.ɵɵelementStart(5, "div",
|
|
172
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
173
173
|
i0.ɵɵtext(6);
|
|
174
174
|
i0.ɵɵelementEnd()()();
|
|
175
175
|
} if (rf & 2) {
|
|
@@ -178,12 +178,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
|
|
|
178
178
|
i0.ɵɵtextInterpolate(ctx_r1.record.TopK);
|
|
179
179
|
} }
|
|
180
180
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
181
|
-
i0.ɵɵelementStart(0, "div",
|
|
182
|
-
i0.ɵɵelement(1, "i",
|
|
183
|
-
i0.ɵɵelementStart(2, "div",
|
|
181
|
+
i0.ɵɵelementStart(0, "div", 84);
|
|
182
|
+
i0.ɵɵelement(1, "i", 91);
|
|
183
|
+
i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
|
|
184
184
|
i0.ɵɵtext(4, "Effort Level");
|
|
185
185
|
i0.ɵɵelementEnd();
|
|
186
|
-
i0.ɵɵelementStart(5, "div",
|
|
186
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
187
187
|
i0.ɵɵtext(6);
|
|
188
188
|
i0.ɵɵelementEnd()()();
|
|
189
189
|
} if (rf & 2) {
|
|
@@ -192,12 +192,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
|
|
|
192
192
|
i0.ɵɵtextInterpolate(ctx_r1.record.EffortLevel);
|
|
193
193
|
} }
|
|
194
194
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
195
|
-
i0.ɵɵelementStart(0, "div",
|
|
196
|
-
i0.ɵɵelement(1, "i",
|
|
197
|
-
i0.ɵɵelementStart(2, "div",
|
|
195
|
+
i0.ɵɵelementStart(0, "div", 84);
|
|
196
|
+
i0.ɵɵelement(1, "i", 92);
|
|
197
|
+
i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
|
|
198
198
|
i0.ɵɵtext(4, "Response Format");
|
|
199
199
|
i0.ɵɵelementEnd();
|
|
200
|
-
i0.ɵɵelementStart(5, "div",
|
|
200
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
201
201
|
i0.ɵɵtext(6);
|
|
202
202
|
i0.ɵɵelementEnd()()();
|
|
203
203
|
} if (rf & 2) {
|
|
@@ -205,13 +205,27 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
|
|
|
205
205
|
i0.ɵɵadvance(6);
|
|
206
206
|
i0.ɵɵtextInterpolate(ctx_r1.record.ResponseFormat);
|
|
207
207
|
} }
|
|
208
|
-
function
|
|
209
|
-
i0.ɵɵelementStart(0, "div",
|
|
210
|
-
i0.ɵɵelement(1, "i",
|
|
211
|
-
i0.ɵɵelementStart(2, "div",
|
|
208
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
209
|
+
i0.ɵɵelementStart(0, "div", 84);
|
|
210
|
+
i0.ɵɵelement(1, "i", 93);
|
|
211
|
+
i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
|
|
212
|
+
i0.ɵɵtext(4, "Cached");
|
|
213
|
+
i0.ɵɵelementEnd();
|
|
214
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
215
|
+
i0.ɵɵtext(6);
|
|
216
|
+
i0.ɵɵelementEnd()()();
|
|
217
|
+
} if (rf & 2) {
|
|
218
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
219
|
+
i0.ɵɵadvance(6);
|
|
220
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCacheRead));
|
|
221
|
+
} }
|
|
222
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
223
|
+
i0.ɵɵelementStart(0, "div", 84);
|
|
224
|
+
i0.ɵɵelement(1, "i", 94);
|
|
225
|
+
i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
|
|
212
226
|
i0.ɵɵtext(4, "Started");
|
|
213
227
|
i0.ɵɵelementEnd();
|
|
214
|
-
i0.ɵɵelementStart(5, "div",
|
|
228
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
215
229
|
i0.ɵɵtext(6);
|
|
216
230
|
i0.ɵɵpipe(7, "date");
|
|
217
231
|
i0.ɵɵelementEnd()()();
|
|
@@ -222,46 +236,47 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
|
|
|
222
236
|
} }
|
|
223
237
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
224
238
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
225
|
-
i0.ɵɵelementStart(0, "div", 25)(1, "div",
|
|
226
|
-
i0.ɵɵelement(2, "i",
|
|
227
|
-
i0.ɵɵelementStart(3, "div",
|
|
239
|
+
i0.ɵɵelementStart(0, "div", 25)(1, "div", 84);
|
|
240
|
+
i0.ɵɵelement(2, "i", 74);
|
|
241
|
+
i0.ɵɵelementStart(3, "div", 85)(4, "div", 86);
|
|
228
242
|
i0.ɵɵtext(5, "Configuration");
|
|
229
243
|
i0.ɵɵelementEnd();
|
|
230
|
-
i0.ɵɵelementStart(6, "div",
|
|
244
|
+
i0.ɵɵelementStart(6, "div", 87)(7, "a", 88);
|
|
231
245
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template_a_click_7_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Configurations", ctx_r1.record.ConfigurationID)); });
|
|
232
246
|
i0.ɵɵtext(8);
|
|
233
247
|
i0.ɵɵelementEnd()()()();
|
|
234
|
-
i0.ɵɵconditionalCreate(9, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template, 7, 1, "div",
|
|
235
|
-
i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template, 7, 1, "div",
|
|
236
|
-
i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template, 7, 1, "div",
|
|
237
|
-
i0.ɵɵconditionalCreate(12, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template, 7, 1, "div",
|
|
238
|
-
i0.ɵɵconditionalCreate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template, 7, 1, "div",
|
|
239
|
-
i0.ɵɵelementEnd();
|
|
240
|
-
i0.ɵɵelementStart(14, "div", 25)(15, "div",
|
|
241
|
-
i0.ɵɵelement(16, "i",
|
|
242
|
-
i0.ɵɵelementStart(17, "div",
|
|
248
|
+
i0.ɵɵconditionalCreate(9, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template, 7, 1, "div", 84);
|
|
249
|
+
i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template, 7, 1, "div", 84);
|
|
250
|
+
i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template, 7, 1, "div", 84);
|
|
251
|
+
i0.ɵɵconditionalCreate(12, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template, 7, 1, "div", 84);
|
|
252
|
+
i0.ɵɵconditionalCreate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template, 7, 1, "div", 84);
|
|
253
|
+
i0.ɵɵelementEnd();
|
|
254
|
+
i0.ɵɵelementStart(14, "div", 25)(15, "div", 84);
|
|
255
|
+
i0.ɵɵelement(16, "i", 89);
|
|
256
|
+
i0.ɵɵelementStart(17, "div", 85)(18, "div", 86);
|
|
243
257
|
i0.ɵɵtext(19, "Duration");
|
|
244
258
|
i0.ɵɵelementEnd();
|
|
245
|
-
i0.ɵɵelementStart(20, "div",
|
|
259
|
+
i0.ɵɵelementStart(20, "div", 87);
|
|
246
260
|
i0.ɵɵtext(21);
|
|
247
261
|
i0.ɵɵelementEnd()()();
|
|
248
|
-
i0.ɵɵelementStart(22, "div",
|
|
262
|
+
i0.ɵɵelementStart(22, "div", 90);
|
|
249
263
|
i0.ɵɵelement(23, "i", 41);
|
|
250
|
-
i0.ɵɵelementStart(24, "div",
|
|
264
|
+
i0.ɵɵelementStart(24, "div", 85)(25, "div", 86);
|
|
251
265
|
i0.ɵɵtext(26, "Total Tokens");
|
|
252
266
|
i0.ɵɵelementEnd();
|
|
253
|
-
i0.ɵɵelementStart(27, "div",
|
|
267
|
+
i0.ɵɵelementStart(27, "div", 87);
|
|
254
268
|
i0.ɵɵtext(28);
|
|
255
269
|
i0.ɵɵelementEnd()()();
|
|
256
|
-
i0.ɵɵ
|
|
257
|
-
i0.ɵɵ
|
|
258
|
-
i0.ɵɵ
|
|
259
|
-
i0.ɵɵ
|
|
260
|
-
i0.ɵɵ
|
|
261
|
-
i0.ɵɵ
|
|
262
|
-
i0.ɵɵ
|
|
270
|
+
i0.ɵɵconditionalCreate(29, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_29_Template, 7, 1, "div", 84);
|
|
271
|
+
i0.ɵɵelementStart(30, "div", 84);
|
|
272
|
+
i0.ɵɵelement(31, "i", 43);
|
|
273
|
+
i0.ɵɵelementStart(32, "div", 85)(33, "div", 86);
|
|
274
|
+
i0.ɵɵtext(34, "Cost");
|
|
275
|
+
i0.ɵɵelementEnd();
|
|
276
|
+
i0.ɵɵelementStart(35, "div", 87);
|
|
277
|
+
i0.ɵɵtext(36);
|
|
263
278
|
i0.ɵɵelementEnd()()();
|
|
264
|
-
i0.ɵɵconditionalCreate(
|
|
279
|
+
i0.ɵɵconditionalCreate(37, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_37_Template, 8, 4, "div", 84);
|
|
265
280
|
i0.ɵɵelementEnd();
|
|
266
281
|
} if (rf & 2) {
|
|
267
282
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -280,19 +295,35 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Templat
|
|
|
280
295
|
i0.ɵɵadvance(8);
|
|
281
296
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.ExecutionTimeMS));
|
|
282
297
|
i0.ɵɵadvance(7);
|
|
283
|
-
i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.
|
|
298
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.TotalTokensProcessed));
|
|
299
|
+
i0.ɵɵadvance();
|
|
300
|
+
i0.ɵɵconditional(ctx_r1.record.TokensCacheRead ? 29 : -1);
|
|
284
301
|
i0.ɵɵadvance(7);
|
|
285
302
|
i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
|
|
286
303
|
i0.ɵɵadvance();
|
|
287
|
-
i0.ɵɵconditional(ctx_r1.record.RunAt ?
|
|
304
|
+
i0.ɵɵconditional(ctx_r1.record.RunAt ? 37 : -1);
|
|
288
305
|
} }
|
|
289
|
-
function
|
|
290
|
-
i0.ɵɵelementStart(0, "div",
|
|
291
|
-
i0.ɵɵelement(1, "i",
|
|
292
|
-
i0.ɵɵelementStart(2, "div",
|
|
306
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
307
|
+
i0.ɵɵelementStart(0, "div", 84);
|
|
308
|
+
i0.ɵɵelement(1, "i", 93);
|
|
309
|
+
i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
|
|
310
|
+
i0.ɵɵtext(4, "Cached");
|
|
311
|
+
i0.ɵɵelementEnd();
|
|
312
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
313
|
+
i0.ɵɵtext(6);
|
|
314
|
+
i0.ɵɵelementEnd()()();
|
|
315
|
+
} if (rf & 2) {
|
|
316
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
317
|
+
i0.ɵɵadvance(6);
|
|
318
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCacheRead));
|
|
319
|
+
} }
|
|
320
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
321
|
+
i0.ɵɵelementStart(0, "div", 84);
|
|
322
|
+
i0.ɵɵelement(1, "i", 94);
|
|
323
|
+
i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
|
|
293
324
|
i0.ɵɵtext(4, "Started");
|
|
294
325
|
i0.ɵɵelementEnd();
|
|
295
|
-
i0.ɵɵelementStart(5, "div",
|
|
326
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
296
327
|
i0.ɵɵtext(6);
|
|
297
328
|
i0.ɵɵpipe(7, "date");
|
|
298
329
|
i0.ɵɵelementEnd()()();
|
|
@@ -302,53 +333,56 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditi
|
|
|
302
333
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
|
|
303
334
|
} }
|
|
304
335
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
305
|
-
i0.ɵɵelementStart(0, "div", 25)(1, "div",
|
|
306
|
-
i0.ɵɵelement(2, "i",
|
|
307
|
-
i0.ɵɵelementStart(3, "div",
|
|
336
|
+
i0.ɵɵelementStart(0, "div", 25)(1, "div", 84);
|
|
337
|
+
i0.ɵɵelement(2, "i", 89);
|
|
338
|
+
i0.ɵɵelementStart(3, "div", 85)(4, "div", 86);
|
|
308
339
|
i0.ɵɵtext(5, "Duration");
|
|
309
340
|
i0.ɵɵelementEnd();
|
|
310
|
-
i0.ɵɵelementStart(6, "div",
|
|
341
|
+
i0.ɵɵelementStart(6, "div", 87);
|
|
311
342
|
i0.ɵɵtext(7);
|
|
312
343
|
i0.ɵɵelementEnd()()();
|
|
313
|
-
i0.ɵɵelementStart(8, "div",
|
|
344
|
+
i0.ɵɵelementStart(8, "div", 90);
|
|
314
345
|
i0.ɵɵelement(9, "i", 41);
|
|
315
|
-
i0.ɵɵelementStart(10, "div",
|
|
346
|
+
i0.ɵɵelementStart(10, "div", 85)(11, "div", 86);
|
|
316
347
|
i0.ɵɵtext(12, "Total Tokens");
|
|
317
348
|
i0.ɵɵelementEnd();
|
|
318
|
-
i0.ɵɵelementStart(13, "div",
|
|
349
|
+
i0.ɵɵelementStart(13, "div", 87);
|
|
319
350
|
i0.ɵɵtext(14);
|
|
320
351
|
i0.ɵɵelementEnd()()();
|
|
321
|
-
i0.ɵɵ
|
|
322
|
-
i0.ɵɵ
|
|
323
|
-
i0.ɵɵ
|
|
324
|
-
i0.ɵɵ
|
|
325
|
-
i0.ɵɵ
|
|
326
|
-
i0.ɵɵ
|
|
327
|
-
i0.ɵɵ
|
|
352
|
+
i0.ɵɵconditionalCreate(15, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_15_Template, 7, 1, "div", 84);
|
|
353
|
+
i0.ɵɵelementStart(16, "div", 84);
|
|
354
|
+
i0.ɵɵelement(17, "i", 43);
|
|
355
|
+
i0.ɵɵelementStart(18, "div", 85)(19, "div", 86);
|
|
356
|
+
i0.ɵɵtext(20, "Cost");
|
|
357
|
+
i0.ɵɵelementEnd();
|
|
358
|
+
i0.ɵɵelementStart(21, "div", 87);
|
|
359
|
+
i0.ɵɵtext(22);
|
|
328
360
|
i0.ɵɵelementEnd()()();
|
|
329
|
-
i0.ɵɵconditionalCreate(
|
|
361
|
+
i0.ɵɵconditionalCreate(23, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_23_Template, 8, 4, "div", 84);
|
|
330
362
|
i0.ɵɵelementEnd();
|
|
331
363
|
} if (rf & 2) {
|
|
332
364
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
333
365
|
i0.ɵɵadvance(7);
|
|
334
366
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.ExecutionTimeMS));
|
|
335
367
|
i0.ɵɵadvance(7);
|
|
336
|
-
i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.
|
|
368
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.TotalTokensProcessed));
|
|
369
|
+
i0.ɵɵadvance();
|
|
370
|
+
i0.ɵɵconditional(ctx_r1.record.TokensCacheRead ? 15 : -1);
|
|
337
371
|
i0.ɵɵadvance(7);
|
|
338
372
|
i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
|
|
339
373
|
i0.ɵɵadvance();
|
|
340
|
-
i0.ɵɵconditional(ctx_r1.record.RunAt ?
|
|
374
|
+
i0.ɵɵconditional(ctx_r1.record.RunAt ? 23 : -1);
|
|
341
375
|
} }
|
|
342
376
|
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
343
|
-
i0.ɵɵelementStart(0, "span",
|
|
377
|
+
i0.ɵɵelementStart(0, "span", 97);
|
|
344
378
|
i0.ɵɵtext(1, "JSON");
|
|
345
379
|
i0.ɵɵelementEnd();
|
|
346
380
|
} }
|
|
347
381
|
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Template(rf, ctx) { if (rf & 1) {
|
|
348
|
-
i0.ɵɵelementStart(0, "span",
|
|
349
|
-
i0.ɵɵelement(1, "i",
|
|
382
|
+
i0.ɵɵelementStart(0, "span", 95);
|
|
383
|
+
i0.ɵɵelement(1, "i", 96);
|
|
350
384
|
i0.ɵɵtext(2, " Input ");
|
|
351
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template, 2, 0, "span",
|
|
385
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template, 2, 0, "span", 97);
|
|
352
386
|
i0.ɵɵelementEnd();
|
|
353
387
|
} if (rf & 2) {
|
|
354
388
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -356,7 +390,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Templat
|
|
|
356
390
|
i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
|
|
357
391
|
} }
|
|
358
392
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
359
|
-
i0.ɵɵelementStart(0, "span",
|
|
393
|
+
i0.ɵɵelementStart(0, "span", 110);
|
|
360
394
|
i0.ɵɵtext(1);
|
|
361
395
|
i0.ɵɵelementEnd();
|
|
362
396
|
} if (rf & 2) {
|
|
@@ -365,10 +399,10 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
|
|
|
365
399
|
i0.ɵɵtextInterpolate1("(", ctx_r1.chatMessages.length, ")");
|
|
366
400
|
} }
|
|
367
401
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
368
|
-
i0.ɵɵelementStart(0, "span",
|
|
369
|
-
i0.ɵɵelement(1, "i",
|
|
402
|
+
i0.ɵɵelementStart(0, "span", 108);
|
|
403
|
+
i0.ɵɵelement(1, "i", 109);
|
|
370
404
|
i0.ɵɵtext(2, " Messages ");
|
|
371
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template, 2, 1, "span",
|
|
405
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template, 2, 1, "span", 110);
|
|
372
406
|
i0.ɵɵelementEnd();
|
|
373
407
|
} if (rf & 2) {
|
|
374
408
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -376,35 +410,35 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
|
|
|
376
410
|
i0.ɵɵconditional(ctx_r1.chatMessages.length > 0 ? 3 : -1);
|
|
377
411
|
} }
|
|
378
412
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
379
|
-
i0.ɵɵelementStart(0, "div",
|
|
380
|
-
i0.ɵɵelement(1, "i",
|
|
413
|
+
i0.ɵɵelementStart(0, "div", 100);
|
|
414
|
+
i0.ɵɵelement(1, "i", 111);
|
|
381
415
|
i0.ɵɵelementStart(2, "p");
|
|
382
416
|
i0.ɵɵtext(3, "Loading messages...");
|
|
383
417
|
i0.ɵɵelementEnd()();
|
|
384
418
|
} }
|
|
385
419
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
386
|
-
i0.ɵɵelement(0, "mj-chat-message-viewer",
|
|
420
|
+
i0.ɵɵelement(0, "mj-chat-message-viewer", 101);
|
|
387
421
|
} if (rf & 2) {
|
|
388
422
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
389
423
|
i0.ɵɵproperty("messages", ctx_r1.chatMessages);
|
|
390
424
|
} }
|
|
391
425
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
392
426
|
i0.ɵɵelementStart(0, "div", 31);
|
|
393
|
-
i0.ɵɵelement(1, "i",
|
|
427
|
+
i0.ɵɵelement(1, "i", 112);
|
|
394
428
|
i0.ɵɵelementStart(2, "p");
|
|
395
429
|
i0.ɵɵtext(3, "No chat messages found");
|
|
396
430
|
i0.ɵɵelementEnd()();
|
|
397
431
|
} }
|
|
398
432
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
399
|
-
i0.ɵɵelementStart(0, "span",
|
|
433
|
+
i0.ɵɵelementStart(0, "span", 97);
|
|
400
434
|
i0.ɵɵtext(1, "Object");
|
|
401
435
|
i0.ɵɵelementEnd();
|
|
402
436
|
} }
|
|
403
437
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template(rf, ctx) { if (rf & 1) {
|
|
404
|
-
i0.ɵɵelementStart(0, "span",
|
|
405
|
-
i0.ɵɵelement(1, "i",
|
|
438
|
+
i0.ɵɵelementStart(0, "span", 108);
|
|
439
|
+
i0.ɵɵelement(1, "i", 113);
|
|
406
440
|
i0.ɵɵtext(2, " Data ");
|
|
407
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template, 2, 0, "span",
|
|
441
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template, 2, 0, "span", 97);
|
|
408
442
|
i0.ɵɵelementEnd();
|
|
409
443
|
} if (rf & 2) {
|
|
410
444
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -413,16 +447,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
|
|
|
413
447
|
} }
|
|
414
448
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
415
449
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
416
|
-
i0.ɵɵelementStart(0, "div", 33)(1, "div",
|
|
450
|
+
i0.ɵɵelementStart(0, "div", 33)(1, "div", 102)(2, "button", 103);
|
|
417
451
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedData, "Data")); });
|
|
418
|
-
i0.ɵɵelement(3, "i",
|
|
452
|
+
i0.ɵɵelement(3, "i", 104);
|
|
419
453
|
i0.ɵɵtext(4, " Copy ");
|
|
420
454
|
i0.ɵɵelementEnd();
|
|
421
|
-
i0.ɵɵelementStart(5, "button",
|
|
455
|
+
i0.ɵɵelementStart(5, "button", 105);
|
|
422
456
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedData, "json", "Data")); });
|
|
423
|
-
i0.ɵɵelement(6, "i",
|
|
457
|
+
i0.ɵɵelement(6, "i", 106);
|
|
424
458
|
i0.ɵɵelementEnd()();
|
|
425
|
-
i0.ɵɵelementStart(7, "mj-code-editor",
|
|
459
|
+
i0.ɵɵelementStart(7, "mj-code-editor", 114);
|
|
426
460
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedData, $event) || (ctx_r1.formattedData = $event); return i0.ɵɵresetView($event); });
|
|
427
461
|
i0.ɵɵelementEnd()();
|
|
428
462
|
} if (rf & 2) {
|
|
@@ -433,41 +467,41 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditi
|
|
|
433
467
|
} }
|
|
434
468
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
435
469
|
i0.ɵɵelementStart(0, "div", 31);
|
|
436
|
-
i0.ɵɵelement(1, "i",
|
|
470
|
+
i0.ɵɵelement(1, "i", 113);
|
|
437
471
|
i0.ɵɵelementStart(2, "p");
|
|
438
472
|
i0.ɵɵtext(3, "No data object found");
|
|
439
473
|
i0.ɵɵelementEnd()();
|
|
440
474
|
} }
|
|
441
475
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_13_Template(rf, ctx) { if (rf & 1) {
|
|
442
|
-
i0.ɵɵelementStart(0, "span",
|
|
443
|
-
i0.ɵɵelement(1, "i",
|
|
476
|
+
i0.ɵɵelementStart(0, "span", 108);
|
|
477
|
+
i0.ɵɵelement(1, "i", 92);
|
|
444
478
|
i0.ɵɵtext(2, " Raw ");
|
|
445
479
|
i0.ɵɵelementEnd();
|
|
446
480
|
} }
|
|
447
481
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
448
482
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
449
|
-
i0.ɵɵelementStart(0, "div", 30)(1, "mj-accordion-panel",
|
|
483
|
+
i0.ɵɵelementStart(0, "div", 30)(1, "mj-accordion-panel", 98);
|
|
450
484
|
i0.ɵɵtemplate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Template, 4, 1, "ng-template", 28);
|
|
451
|
-
i0.ɵɵelementStart(3, "div",
|
|
452
|
-
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template, 4, 0, "div",
|
|
485
|
+
i0.ɵɵelementStart(3, "div", 99);
|
|
486
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template, 4, 0, "div", 100)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 101)(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_6_Template, 4, 0, "div", 31);
|
|
453
487
|
i0.ɵɵelementEnd()();
|
|
454
|
-
i0.ɵɵelementStart(7, "mj-accordion-panel",
|
|
488
|
+
i0.ɵɵelementStart(7, "mj-accordion-panel", 98);
|
|
455
489
|
i0.ɵɵtemplate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template, 4, 1, "ng-template", 28);
|
|
456
|
-
i0.ɵɵelementStart(9, "div",
|
|
490
|
+
i0.ɵɵelementStart(9, "div", 99);
|
|
457
491
|
i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template, 8, 4, "div", 33)(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template, 4, 0, "div", 31);
|
|
458
492
|
i0.ɵɵelementEnd()();
|
|
459
|
-
i0.ɵɵelementStart(12, "mj-accordion-panel",
|
|
493
|
+
i0.ɵɵelementStart(12, "mj-accordion-panel", 98);
|
|
460
494
|
i0.ɵɵtemplate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_13_Template, 3, 0, "ng-template", 28);
|
|
461
|
-
i0.ɵɵelementStart(14, "div",
|
|
495
|
+
i0.ɵɵelementStart(14, "div", 99)(15, "div", 33)(16, "div", 102)(17, "button", 103);
|
|
462
496
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
|
|
463
|
-
i0.ɵɵelement(18, "i",
|
|
497
|
+
i0.ɵɵelement(18, "i", 104);
|
|
464
498
|
i0.ɵɵtext(19, " Copy ");
|
|
465
499
|
i0.ɵɵelementEnd();
|
|
466
|
-
i0.ɵɵelementStart(20, "button",
|
|
500
|
+
i0.ɵɵelementStart(20, "button", 105);
|
|
467
501
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedMessages, "json", "Raw Messages")); });
|
|
468
|
-
i0.ɵɵelement(21, "i",
|
|
502
|
+
i0.ɵɵelement(21, "i", 106);
|
|
469
503
|
i0.ɵɵelementEnd()();
|
|
470
|
-
i0.ɵɵelementStart(22, "mj-code-editor",
|
|
504
|
+
i0.ɵɵelementStart(22, "mj-code-editor", 107);
|
|
471
505
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_mj_code_editor_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedMessages, $event) || (ctx_r1.formattedMessages = $event); return i0.ɵɵresetView($event); });
|
|
472
506
|
i0.ɵɵelementEnd()()()()();
|
|
473
507
|
} if (rf & 2) {
|
|
@@ -488,27 +522,27 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Templat
|
|
|
488
522
|
} }
|
|
489
523
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
490
524
|
i0.ɵɵelementStart(0, "div", 31);
|
|
491
|
-
i0.ɵɵelement(1, "i",
|
|
525
|
+
i0.ɵɵelement(1, "i", 112);
|
|
492
526
|
i0.ɵɵelementStart(2, "p");
|
|
493
527
|
i0.ɵɵtext(3, "No input messages recorded");
|
|
494
528
|
i0.ɵɵelementEnd()();
|
|
495
529
|
} }
|
|
496
530
|
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
497
|
-
i0.ɵɵelementStart(0, "span",
|
|
531
|
+
i0.ɵɵelementStart(0, "span", 97);
|
|
498
532
|
i0.ɵɵtext(1, "JSON");
|
|
499
533
|
i0.ɵɵelementEnd();
|
|
500
534
|
} }
|
|
501
535
|
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
502
|
-
i0.ɵɵelementStart(0, "span",
|
|
536
|
+
i0.ɵɵelementStart(0, "span", 116);
|
|
503
537
|
i0.ɵɵtext(1, "Error");
|
|
504
538
|
i0.ɵɵelementEnd();
|
|
505
539
|
} }
|
|
506
540
|
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Template(rf, ctx) { if (rf & 1) {
|
|
507
|
-
i0.ɵɵelementStart(0, "span",
|
|
508
|
-
i0.ɵɵelement(1, "i",
|
|
541
|
+
i0.ɵɵelementStart(0, "span", 95);
|
|
542
|
+
i0.ɵɵelement(1, "i", 115);
|
|
509
543
|
i0.ɵɵtext(2, " Result ");
|
|
510
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template, 2, 0, "span",
|
|
511
|
-
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template, 2, 0, "span",
|
|
544
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template, 2, 0, "span", 97);
|
|
545
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template, 2, 0, "span", 116);
|
|
512
546
|
i0.ɵɵelementEnd();
|
|
513
547
|
} if (rf & 2) {
|
|
514
548
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -519,8 +553,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Templat
|
|
|
519
553
|
} }
|
|
520
554
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
521
555
|
i0.ɵɵelementStart(0, "div", 32);
|
|
522
|
-
i0.ɵɵelement(1, "i",
|
|
523
|
-
i0.ɵɵelementStart(2, "div",
|
|
556
|
+
i0.ɵɵelement(1, "i", 117);
|
|
557
|
+
i0.ɵɵelementStart(2, "div", 118)(3, "h4");
|
|
524
558
|
i0.ɵɵtext(4, "Error Message");
|
|
525
559
|
i0.ɵɵelementEnd();
|
|
526
560
|
i0.ɵɵelementStart(5, "p");
|
|
@@ -533,16 +567,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Templat
|
|
|
533
567
|
} }
|
|
534
568
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
535
569
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
536
|
-
i0.ɵɵelementStart(0, "div", 33)(1, "div",
|
|
570
|
+
i0.ɵɵelementStart(0, "div", 33)(1, "div", 102)(2, "button", 103);
|
|
537
571
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedResult, "Result")); });
|
|
538
|
-
i0.ɵɵelement(3, "i",
|
|
572
|
+
i0.ɵɵelement(3, "i", 104);
|
|
539
573
|
i0.ɵɵtext(4, " Copy ");
|
|
540
574
|
i0.ɵɵelementEnd();
|
|
541
|
-
i0.ɵɵelementStart(5, "button",
|
|
575
|
+
i0.ɵɵelementStart(5, "button", 105);
|
|
542
576
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedResult, "json", "Result")); });
|
|
543
|
-
i0.ɵɵelement(6, "i",
|
|
577
|
+
i0.ɵɵelement(6, "i", 106);
|
|
544
578
|
i0.ɵɵelementEnd()();
|
|
545
|
-
i0.ɵɵelementStart(7, "mj-code-editor",
|
|
579
|
+
i0.ɵɵelementStart(7, "mj-code-editor", 119);
|
|
546
580
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedResult, $event) || (ctx_r1.formattedResult = $event); return i0.ɵɵresetView($event); });
|
|
547
581
|
i0.ɵɵelementEnd()();
|
|
548
582
|
} if (rf & 2) {
|
|
@@ -552,7 +586,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Templat
|
|
|
552
586
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
553
587
|
} }
|
|
554
588
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
555
|
-
i0.ɵɵelementStart(0, "p",
|
|
589
|
+
i0.ɵɵelementStart(0, "p", 122)(1, "strong");
|
|
556
590
|
i0.ɵɵtext(2, "Status:");
|
|
557
591
|
i0.ɵɵelementEnd();
|
|
558
592
|
i0.ɵɵtext(3);
|
|
@@ -564,14 +598,14 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
|
|
|
564
598
|
} }
|
|
565
599
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
566
600
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
567
|
-
i0.ɵɵelementStart(0, "div",
|
|
601
|
+
i0.ɵɵelementStart(0, "div", 123)(1, "div", 102)(2, "h4", 125);
|
|
568
602
|
i0.ɵɵtext(3, "Error Details");
|
|
569
603
|
i0.ɵɵelementEnd();
|
|
570
|
-
i0.ɵɵelementStart(4, "button",
|
|
604
|
+
i0.ɵɵelementStart(4, "button", 105);
|
|
571
605
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
|
|
572
|
-
i0.ɵɵelement(5, "i",
|
|
606
|
+
i0.ɵɵelement(5, "i", 106);
|
|
573
607
|
i0.ɵɵelementEnd()();
|
|
574
|
-
i0.ɵɵelement(6, "mj-code-editor",
|
|
608
|
+
i0.ɵɵelement(6, "mj-code-editor", 126);
|
|
575
609
|
i0.ɵɵelementEnd();
|
|
576
610
|
} if (rf & 2) {
|
|
577
611
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -579,15 +613,15 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
|
|
|
579
613
|
i0.ɵɵproperty("ngModel", ctx_r1.formattedErrorDetails)("disabled", true)("language", "json")("lineWrapping", true);
|
|
580
614
|
} }
|
|
581
615
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
582
|
-
i0.ɵɵelementStart(0, "p",
|
|
616
|
+
i0.ɵɵelementStart(0, "p", 124);
|
|
583
617
|
i0.ɵɵtext(1, " The prompt execution failed but no additional error information is available. ");
|
|
584
618
|
i0.ɵɵelementEnd();
|
|
585
619
|
} }
|
|
586
620
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
587
|
-
i0.ɵɵelementStart(0, "div",
|
|
588
|
-
i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template, 4, 1, "p",
|
|
589
|
-
i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template, 7, 4, "div",
|
|
590
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_3_Template, 2, 0, "p",
|
|
621
|
+
i0.ɵɵelementStart(0, "div", 121);
|
|
622
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template, 4, 1, "p", 122);
|
|
623
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template, 7, 4, "div", 123);
|
|
624
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_3_Template, 2, 0, "p", 124);
|
|
591
625
|
i0.ɵɵelementEnd();
|
|
592
626
|
} if (rf & 2) {
|
|
593
627
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -600,11 +634,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
|
|
|
600
634
|
} }
|
|
601
635
|
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
602
636
|
i0.ɵɵelementStart(0, "div", 31);
|
|
603
|
-
i0.ɵɵelement(1, "i",
|
|
637
|
+
i0.ɵɵelement(1, "i", 120);
|
|
604
638
|
i0.ɵɵelementStart(2, "p");
|
|
605
639
|
i0.ɵɵtext(3, "No result data recorded");
|
|
606
640
|
i0.ɵɵelementEnd();
|
|
607
|
-
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template, 4, 3, "div",
|
|
641
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template, 4, 3, "div", 121);
|
|
608
642
|
i0.ɵɵelementEnd();
|
|
609
643
|
} if (rf & 2) {
|
|
610
644
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -612,8 +646,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Templat
|
|
|
612
646
|
i0.ɵɵconditional(ctx_r1.record.CompletedAt && (ctx_r1.record.Status === "Failed" || ctx_r1.record.Success === false) ? 4 : -1);
|
|
613
647
|
} }
|
|
614
648
|
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_45_Template(rf, ctx) { if (rf & 1) {
|
|
615
|
-
i0.ɵɵelementStart(0, "span",
|
|
616
|
-
i0.ɵɵelement(1, "i",
|
|
649
|
+
i0.ɵɵelementStart(0, "span", 95);
|
|
650
|
+
i0.ɵɵelement(1, "i", 127);
|
|
617
651
|
i0.ɵɵtext(2, " Token Usage & Metrics ");
|
|
618
652
|
i0.ɵɵelementEnd();
|
|
619
653
|
} }
|
|
@@ -642,9 +676,58 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_71_Templat
|
|
|
642
676
|
} if (rf & 2) {
|
|
643
677
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
644
678
|
i0.ɵɵadvance(2);
|
|
645
|
-
i0.ɵɵtextInterpolate1("
|
|
679
|
+
i0.ɵɵtextInterpolate1("incl. ", ctx_r1.formatTokens(ctx_r1.CachedTokens), " cached");
|
|
680
|
+
} }
|
|
681
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_72_Template(rf, ctx) { if (rf & 1) {
|
|
682
|
+
i0.ɵɵelementStart(0, "div", 39)(1, "span");
|
|
683
|
+
i0.ɵɵtext(2);
|
|
684
|
+
i0.ɵɵelementEnd()();
|
|
685
|
+
} if (rf & 2) {
|
|
686
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
687
|
+
i0.ɵɵadvance(2);
|
|
688
|
+
i0.ɵɵtextInterpolate1("Net rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup));
|
|
689
|
+
} }
|
|
690
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
691
|
+
i0.ɵɵelementStart(0, "div", 39)(1, "span");
|
|
692
|
+
i0.ɵɵtext(2);
|
|
693
|
+
i0.ɵɵelementEnd()();
|
|
694
|
+
} if (rf & 2) {
|
|
695
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
696
|
+
i0.ɵɵadvance(2);
|
|
697
|
+
i0.ɵɵtextInterpolate1("Write: ", ctx_r1.formatTokens(ctx_r1.record.TokensCacheWrite));
|
|
646
698
|
} }
|
|
647
|
-
function
|
|
699
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
700
|
+
i0.ɵɵelementStart(0, "div", 39)(1, "span");
|
|
701
|
+
i0.ɵɵtext(2);
|
|
702
|
+
i0.ɵɵpipe(3, "number");
|
|
703
|
+
i0.ɵɵelementEnd()();
|
|
704
|
+
} if (rf & 2) {
|
|
705
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
706
|
+
i0.ɵɵadvance(2);
|
|
707
|
+
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(3, 1, ctx_r1.CacheHitRatePct, "1.0-0"), "% hit rate");
|
|
708
|
+
} }
|
|
709
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Template(rf, ctx) { if (rf & 1) {
|
|
710
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
|
|
711
|
+
i0.ɵɵelement(2, "i", 93);
|
|
712
|
+
i0.ɵɵelementStart(3, "h4");
|
|
713
|
+
i0.ɵɵtext(4, "Cache Read");
|
|
714
|
+
i0.ɵɵelementEnd()();
|
|
715
|
+
i0.ɵɵelementStart(5, "div", 38);
|
|
716
|
+
i0.ɵɵtext(6);
|
|
717
|
+
i0.ɵɵelementEnd();
|
|
718
|
+
i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditional_7_Template, 3, 1, "div", 39);
|
|
719
|
+
i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditional_8_Template, 4, 4, "div", 39);
|
|
720
|
+
i0.ɵɵelementEnd();
|
|
721
|
+
} if (rf & 2) {
|
|
722
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
723
|
+
i0.ɵɵadvance(6);
|
|
724
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCacheRead));
|
|
725
|
+
i0.ɵɵadvance();
|
|
726
|
+
i0.ɵɵconditional(ctx_r1.record.TokensCacheWrite ? 7 : -1);
|
|
727
|
+
i0.ɵɵadvance();
|
|
728
|
+
i0.ɵɵconditional(ctx_r1.record.TokensCacheRead || ctx_r1.record.TokensCacheWrite ? 8 : -1);
|
|
729
|
+
} }
|
|
730
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Template(rf, ctx) { if (rf & 1) {
|
|
648
731
|
i0.ɵɵelementStart(0, "div", 39)(1, "span");
|
|
649
732
|
i0.ɵɵtext(2);
|
|
650
733
|
i0.ɵɵelementEnd()();
|
|
@@ -653,8 +736,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Templat
|
|
|
653
736
|
i0.ɵɵadvance(2);
|
|
654
737
|
i0.ɵɵtextInterpolate1("Total: ", ctx_r1.formatCost(ctx_r1.record.TotalCost));
|
|
655
738
|
} }
|
|
656
|
-
function
|
|
657
|
-
i0.ɵɵelementStart(0, "div",
|
|
739
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template(rf, ctx) { if (rf & 1) {
|
|
740
|
+
i0.ɵɵelementStart(0, "div", 44);
|
|
658
741
|
i0.ɵɵtext(1);
|
|
659
742
|
i0.ɵɵelementEnd();
|
|
660
743
|
} if (rf & 2) {
|
|
@@ -662,9 +745,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_80_Templat
|
|
|
662
745
|
i0.ɵɵadvance();
|
|
663
746
|
i0.ɵɵtextInterpolate(ctx_r1.record.CostCurrency);
|
|
664
747
|
} }
|
|
665
|
-
function
|
|
748
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template(rf, ctx) { if (rf & 1) {
|
|
666
749
|
i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
|
|
667
|
-
i0.ɵɵelement(2, "i",
|
|
750
|
+
i0.ɵɵelement(2, "i", 128);
|
|
668
751
|
i0.ɵɵelementStart(3, "h4");
|
|
669
752
|
i0.ɵɵtext(4, "Queue Time");
|
|
670
753
|
i0.ɵɵelementEnd()();
|
|
@@ -676,9 +759,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Templat
|
|
|
676
759
|
i0.ɵɵadvance(6);
|
|
677
760
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.QueueTime));
|
|
678
761
|
} }
|
|
679
|
-
function
|
|
762
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Template(rf, ctx) { if (rf & 1) {
|
|
680
763
|
i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
|
|
681
|
-
i0.ɵɵelement(2, "i",
|
|
764
|
+
i0.ɵɵelement(2, "i", 129);
|
|
682
765
|
i0.ɵɵelementStart(3, "h4");
|
|
683
766
|
i0.ɵɵtext(4, "Prompt Time");
|
|
684
767
|
i0.ɵɵelementEnd()();
|
|
@@ -690,9 +773,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Templat
|
|
|
690
773
|
i0.ɵɵadvance(6);
|
|
691
774
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.PromptTime));
|
|
692
775
|
} }
|
|
693
|
-
function
|
|
776
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template(rf, ctx) { if (rf & 1) {
|
|
694
777
|
i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
|
|
695
|
-
i0.ɵɵelement(2, "i",
|
|
778
|
+
i0.ɵɵelement(2, "i", 130);
|
|
696
779
|
i0.ɵɵelementStart(3, "h4");
|
|
697
780
|
i0.ɵɵtext(4, "Completion Time");
|
|
698
781
|
i0.ɵɵelementEnd()();
|
|
@@ -704,11 +787,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Templat
|
|
|
704
787
|
i0.ɵɵadvance(6);
|
|
705
788
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.CompletionTime));
|
|
706
789
|
} }
|
|
707
|
-
function
|
|
708
|
-
i0.ɵɵelementStart(0, "div",
|
|
790
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template(rf, ctx) { if (rf & 1) {
|
|
791
|
+
i0.ɵɵelementStart(0, "div", 46)(1, "span", 86);
|
|
709
792
|
i0.ɵɵtext(2, "Execution Order:");
|
|
710
793
|
i0.ɵɵelementEnd();
|
|
711
|
-
i0.ɵɵelementStart(3, "span",
|
|
794
|
+
i0.ɵɵelementStart(3, "span", 87);
|
|
712
795
|
i0.ɵɵtext(4);
|
|
713
796
|
i0.ɵɵelementEnd()();
|
|
714
797
|
} if (rf & 2) {
|
|
@@ -716,23 +799,23 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Templat
|
|
|
716
799
|
i0.ɵɵadvance(4);
|
|
717
800
|
i0.ɵɵtextInterpolate(ctx_r1.record.ExecutionOrder);
|
|
718
801
|
} }
|
|
719
|
-
function
|
|
802
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template(rf, ctx) { if (rf & 1) {
|
|
720
803
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
721
|
-
i0.ɵɵelementStart(0, "div",
|
|
804
|
+
i0.ɵɵelementStart(0, "div", 46)(1, "span", 86);
|
|
722
805
|
i0.ɵɵtext(2, "Agent:");
|
|
723
806
|
i0.ɵɵelementEnd();
|
|
724
|
-
i0.ɵɵelementStart(3, "span",
|
|
725
|
-
i0.ɵɵlistener("click", function
|
|
807
|
+
i0.ɵɵelementStart(3, "span", 131);
|
|
808
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
|
|
726
809
|
i0.ɵɵtext(4);
|
|
727
|
-
i0.ɵɵelement(5, "i",
|
|
810
|
+
i0.ɵɵelement(5, "i", 132);
|
|
728
811
|
i0.ɵɵelementEnd()();
|
|
729
812
|
} if (rf & 2) {
|
|
730
813
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
731
814
|
i0.ɵɵadvance(4);
|
|
732
815
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
|
|
733
816
|
} }
|
|
734
|
-
function
|
|
735
|
-
i0.ɵɵelementStart(0, "span",
|
|
817
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
818
|
+
i0.ɵɵelementStart(0, "span", 110);
|
|
736
819
|
i0.ɵɵtext(1);
|
|
737
820
|
i0.ɵɵelementEnd();
|
|
738
821
|
} if (rf & 2) {
|
|
@@ -740,22 +823,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_temp
|
|
|
740
823
|
i0.ɵɵadvance();
|
|
741
824
|
i0.ɵɵtextInterpolate1("(", ctx_r1.record.ValidationAttemptCount, " attempts)");
|
|
742
825
|
} }
|
|
743
|
-
function
|
|
744
|
-
i0.ɵɵelementStart(0, "span",
|
|
826
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
827
|
+
i0.ɵɵelementStart(0, "span", 144);
|
|
745
828
|
i0.ɵɵtext(1, "Passed");
|
|
746
829
|
i0.ɵɵelementEnd();
|
|
747
830
|
} }
|
|
748
|
-
function
|
|
749
|
-
i0.ɵɵelementStart(0, "span",
|
|
831
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
832
|
+
i0.ɵɵelementStart(0, "span", 116);
|
|
750
833
|
i0.ɵɵtext(1, "Failed");
|
|
751
834
|
i0.ɵɵelementEnd();
|
|
752
835
|
} }
|
|
753
|
-
function
|
|
754
|
-
i0.ɵɵelementStart(0, "span",
|
|
755
|
-
i0.ɵɵelement(1, "i",
|
|
836
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
837
|
+
i0.ɵɵelementStart(0, "span", 95);
|
|
838
|
+
i0.ɵɵelement(1, "i", 143);
|
|
756
839
|
i0.ɵɵtext(2, " Validation & Retries ");
|
|
757
|
-
i0.ɵɵconditionalCreate(3,
|
|
758
|
-
i0.ɵɵconditionalCreate(4,
|
|
840
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_3_Template, 2, 1, "span", 110);
|
|
841
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_4_Template, 2, 0, "span", 144)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_5_Template, 2, 0, "span", 116);
|
|
759
842
|
i0.ɵɵelementEnd();
|
|
760
843
|
} if (rf & 2) {
|
|
761
844
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -764,8 +847,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_temp
|
|
|
764
847
|
i0.ɵɵadvance();
|
|
765
848
|
i0.ɵɵconditional(ctx_r1.record.FinalValidationPassed ? 4 : ctx_r1.record.FinalValidationPassed === false ? 5 : -1);
|
|
766
849
|
} }
|
|
767
|
-
function
|
|
768
|
-
i0.ɵɵelementStart(0, "span",
|
|
850
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_31_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
851
|
+
i0.ɵɵelementStart(0, "span", 145);
|
|
769
852
|
i0.ɵɵtext(1);
|
|
770
853
|
i0.ɵɵelementEnd();
|
|
771
854
|
} if (rf & 2) {
|
|
@@ -773,15 +856,15 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
|
|
|
773
856
|
i0.ɵɵadvance();
|
|
774
857
|
i0.ɵɵtextInterpolate1("", ctx_r1.record.ValidationErrorCount, " validation errors");
|
|
775
858
|
} }
|
|
776
|
-
function
|
|
777
|
-
i0.ɵɵelementStart(0, "div",
|
|
778
|
-
i0.ɵɵelement(2, "i",
|
|
859
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
860
|
+
i0.ɵɵelementStart(0, "div", 138)(1, "h5");
|
|
861
|
+
i0.ɵɵelement(2, "i", 117);
|
|
779
862
|
i0.ɵɵtext(3, " Final Validation Error");
|
|
780
863
|
i0.ɵɵelementEnd();
|
|
781
864
|
i0.ɵɵelementStart(4, "p");
|
|
782
865
|
i0.ɵɵtext(5);
|
|
783
866
|
i0.ɵɵelementEnd();
|
|
784
|
-
i0.ɵɵconditionalCreate(6,
|
|
867
|
+
i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_31_Conditional_6_Template, 2, 1, "span", 145);
|
|
785
868
|
i0.ɵɵelementEnd();
|
|
786
869
|
} if (rf & 2) {
|
|
787
870
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -790,9 +873,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
|
|
|
790
873
|
i0.ɵɵadvance();
|
|
791
874
|
i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationErrorCount && ctx_r1.record.ValidationErrorCount > 0 ? 6 : -1);
|
|
792
875
|
} }
|
|
793
|
-
function
|
|
794
|
-
i0.ɵɵelementStart(0, "div",
|
|
795
|
-
i0.ɵɵelement(2, "i",
|
|
876
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
877
|
+
i0.ɵɵelementStart(0, "div", 139)(1, "h5");
|
|
878
|
+
i0.ɵɵelement(2, "i", 55);
|
|
796
879
|
i0.ɵɵtext(3, " Most Common Error");
|
|
797
880
|
i0.ɵɵelementEnd();
|
|
798
881
|
i0.ɵɵelementStart(4, "p");
|
|
@@ -803,24 +886,24 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
|
|
|
803
886
|
i0.ɵɵadvance(5);
|
|
804
887
|
i0.ɵɵtextInterpolate(ctx_r1.record.CommonValidationError);
|
|
805
888
|
} }
|
|
806
|
-
function
|
|
807
|
-
i0.ɵɵelementStart(0, "div",
|
|
889
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
890
|
+
i0.ɵɵelementStart(0, "div", 140)(1, "h4");
|
|
808
891
|
i0.ɵɵtext(2, "Retry Timeline");
|
|
809
892
|
i0.ɵɵelementEnd();
|
|
810
|
-
i0.ɵɵelementStart(3, "div",
|
|
811
|
-
i0.ɵɵelement(5, "i",
|
|
893
|
+
i0.ɵɵelementStart(3, "div", 146)(4, "div", 147);
|
|
894
|
+
i0.ɵɵelement(5, "i", 89);
|
|
812
895
|
i0.ɵɵelementStart(6, "span");
|
|
813
896
|
i0.ɵɵtext(7);
|
|
814
897
|
i0.ɵɵpipe(8, "date");
|
|
815
898
|
i0.ɵɵelementEnd()();
|
|
816
|
-
i0.ɵɵelementStart(9, "div",
|
|
817
|
-
i0.ɵɵelement(10, "i",
|
|
899
|
+
i0.ɵɵelementStart(9, "div", 147);
|
|
900
|
+
i0.ɵɵelement(10, "i", 130);
|
|
818
901
|
i0.ɵɵelementStart(11, "span");
|
|
819
902
|
i0.ɵɵtext(12);
|
|
820
903
|
i0.ɵɵpipe(13, "date");
|
|
821
904
|
i0.ɵɵelementEnd()();
|
|
822
|
-
i0.ɵɵelementStart(14, "div",
|
|
823
|
-
i0.ɵɵelement(15, "i",
|
|
905
|
+
i0.ɵɵelementStart(14, "div", 147);
|
|
906
|
+
i0.ɵɵelement(15, "i", 148);
|
|
824
907
|
i0.ɵɵelementStart(16, "span");
|
|
825
908
|
i0.ɵɵtext(17);
|
|
826
909
|
i0.ɵɵelementEnd()()()();
|
|
@@ -833,8 +916,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
|
|
|
833
916
|
i0.ɵɵadvance(5);
|
|
834
917
|
i0.ɵɵtextInterpolate1("Total Retry Duration: ", ctx_r1.formatDuration(ctx_r1.record.TotalRetryDurationMS));
|
|
835
918
|
} }
|
|
836
|
-
function
|
|
837
|
-
i0.ɵɵelementStart(0, "span",
|
|
919
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
920
|
+
i0.ɵɵelementStart(0, "span", 145);
|
|
838
921
|
i0.ɵɵtext(1);
|
|
839
922
|
i0.ɵɵelementEnd();
|
|
840
923
|
} if (rf & 2) {
|
|
@@ -842,11 +925,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
|
|
|
842
925
|
i0.ɵɵadvance();
|
|
843
926
|
i0.ɵɵtextInterpolate1("(", attempt_r14.validationErrorCount, " errors)");
|
|
844
927
|
} }
|
|
845
|
-
function
|
|
846
|
-
i0.ɵɵelementStart(0, "span",
|
|
928
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
929
|
+
i0.ɵɵelementStart(0, "span", 156);
|
|
847
930
|
i0.ɵɵtext(1);
|
|
848
931
|
i0.ɵɵelementEnd();
|
|
849
|
-
i0.ɵɵconditionalCreate(2,
|
|
932
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 145);
|
|
850
933
|
} if (rf & 2) {
|
|
851
934
|
const attempt_r14 = i0.ɵɵnextContext().$implicit;
|
|
852
935
|
i0.ɵɵadvance();
|
|
@@ -854,8 +937,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
|
|
|
854
937
|
i0.ɵɵadvance();
|
|
855
938
|
i0.ɵɵconditional(attempt_r14.validationErrorCount > 0 ? 2 : -1);
|
|
856
939
|
} }
|
|
857
|
-
function
|
|
858
|
-
i0.ɵɵelementStart(0, "span",
|
|
940
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
941
|
+
i0.ɵɵelementStart(0, "span", 155);
|
|
859
942
|
i0.ɵɵtext(1);
|
|
860
943
|
i0.ɵɵelementEnd();
|
|
861
944
|
} if (rf & 2) {
|
|
@@ -863,16 +946,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
|
|
|
863
946
|
i0.ɵɵadvance();
|
|
864
947
|
i0.ɵɵtextInterpolate1("Output: ", attempt_r14.outputLength, " chars");
|
|
865
948
|
} }
|
|
866
|
-
function
|
|
867
|
-
i0.ɵɵelementStart(0, "div",
|
|
949
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
950
|
+
i0.ɵɵelementStart(0, "div", 151)(1, "div", 152);
|
|
868
951
|
i0.ɵɵelement(2, "i");
|
|
869
952
|
i0.ɵɵtext(3);
|
|
870
953
|
i0.ɵɵelementEnd();
|
|
871
|
-
i0.ɵɵelementStart(4, "div",
|
|
954
|
+
i0.ɵɵelementStart(4, "div", 153)(5, "span", 154);
|
|
872
955
|
i0.ɵɵtext(6);
|
|
873
956
|
i0.ɵɵelementEnd();
|
|
874
|
-
i0.ɵɵconditionalCreate(7,
|
|
875
|
-
i0.ɵɵconditionalCreate(8,
|
|
957
|
+
i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_7_Template, 3, 2);
|
|
958
|
+
i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_8_Template, 2, 1, "span", 155);
|
|
876
959
|
i0.ɵɵelementEnd()();
|
|
877
960
|
} if (rf & 2) {
|
|
878
961
|
const attempt_r14 = ctx.$implicit;
|
|
@@ -888,29 +971,29 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
|
|
|
888
971
|
i0.ɵɵadvance();
|
|
889
972
|
i0.ɵɵconditional(attempt_r14.outputLength ? 8 : -1);
|
|
890
973
|
} }
|
|
891
|
-
function
|
|
892
|
-
i0.ɵɵelementStart(0, "div",
|
|
974
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
975
|
+
i0.ɵɵelementStart(0, "div", 141)(1, "h4");
|
|
893
976
|
i0.ɵɵtext(2, "Validation Attempts");
|
|
894
977
|
i0.ɵɵelementEnd();
|
|
895
|
-
i0.ɵɵelementStart(3, "div",
|
|
896
|
-
i0.ɵɵrepeaterCreate(4,
|
|
978
|
+
i0.ɵɵelementStart(3, "div", 149);
|
|
979
|
+
i0.ɵɵrepeaterCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Template, 9, 10, "div", 150, _forTrack0);
|
|
897
980
|
i0.ɵɵelementEnd()();
|
|
898
981
|
} if (rf & 2) {
|
|
899
982
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
900
983
|
i0.ɵɵadvance(4);
|
|
901
984
|
i0.ɵɵrepeater(ctx_r1.validationAttempts);
|
|
902
985
|
} }
|
|
903
|
-
function
|
|
986
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
904
987
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
905
|
-
i0.ɵɵelementStart(0, "div",
|
|
988
|
+
i0.ɵɵelementStart(0, "div", 142)(1, "div", 102)(2, "h4", 125);
|
|
906
989
|
i0.ɵɵtext(3, "Validation Summary Details");
|
|
907
990
|
i0.ɵɵelementEnd();
|
|
908
|
-
i0.ɵɵelementStart(4, "button",
|
|
909
|
-
i0.ɵɵlistener("click", function
|
|
910
|
-
i0.ɵɵelement(5, "i",
|
|
991
|
+
i0.ɵɵelementStart(4, "button", 105);
|
|
992
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_35_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationSummary, "json", "Validation Summary")); });
|
|
993
|
+
i0.ɵɵelement(5, "i", 106);
|
|
911
994
|
i0.ɵɵelementEnd()();
|
|
912
|
-
i0.ɵɵelementStart(6, "div",
|
|
913
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
995
|
+
i0.ɵɵelementStart(6, "div", 157)(7, "mj-code-editor", 158);
|
|
996
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_35_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationSummary, $event) || (ctx_r1.formattedValidationSummary = $event); return i0.ɵɵresetView($event); });
|
|
914
997
|
i0.ɵɵelementEnd()()();
|
|
915
998
|
} if (rf & 2) {
|
|
916
999
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -918,17 +1001,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
|
|
|
918
1001
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationSummary);
|
|
919
1002
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
920
1003
|
} }
|
|
921
|
-
function
|
|
1004
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
922
1005
|
const _r16 = i0.ɵɵgetCurrentView();
|
|
923
|
-
i0.ɵɵelementStart(0, "div",
|
|
1006
|
+
i0.ɵɵelementStart(0, "div", 142)(1, "div", 102)(2, "h4", 125);
|
|
924
1007
|
i0.ɵɵtext(3, "Validation Attempts (Raw JSON)");
|
|
925
1008
|
i0.ɵɵelementEnd();
|
|
926
|
-
i0.ɵɵelementStart(4, "button",
|
|
927
|
-
i0.ɵɵlistener("click", function
|
|
928
|
-
i0.ɵɵelement(5, "i",
|
|
1009
|
+
i0.ɵɵelementStart(4, "button", 105);
|
|
1010
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_36_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationAttempts, "json", "Validation Attempts")); });
|
|
1011
|
+
i0.ɵɵelement(5, "i", 106);
|
|
929
1012
|
i0.ɵɵelementEnd()();
|
|
930
|
-
i0.ɵɵelementStart(6, "div",
|
|
931
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1013
|
+
i0.ɵɵelementStart(6, "div", 157)(7, "mj-code-editor", 159);
|
|
1014
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_36_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationAttempts, $event) || (ctx_r1.formattedValidationAttempts = $event); return i0.ɵɵresetView($event); });
|
|
932
1015
|
i0.ɵɵelementEnd()()();
|
|
933
1016
|
} if (rf & 2) {
|
|
934
1017
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -936,49 +1019,49 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
|
|
|
936
1019
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationAttempts);
|
|
937
1020
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
938
1021
|
} }
|
|
939
|
-
function
|
|
1022
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template(rf, ctx) { if (rf & 1) {
|
|
940
1023
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
941
1024
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
|
|
942
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
943
|
-
i0.ɵɵtemplate(1,
|
|
944
|
-
i0.ɵɵelementStart(2, "div", 29)(3, "div",
|
|
1025
|
+
i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onValidationPanelToggle($event)); });
|
|
1026
|
+
i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Template, 6, 2, "ng-template", 28);
|
|
1027
|
+
i0.ɵɵelementStart(2, "div", 29)(3, "div", 133)(4, "div", 134)(5, "h4");
|
|
945
1028
|
i0.ɵɵtext(6, "Validation Summary");
|
|
946
1029
|
i0.ɵɵelementEnd();
|
|
947
|
-
i0.ɵɵelementStart(7, "div",
|
|
1030
|
+
i0.ɵɵelementStart(7, "div", 135);
|
|
948
1031
|
i0.ɵɵelement(8, "i");
|
|
949
1032
|
i0.ɵɵtext(9);
|
|
950
1033
|
i0.ɵɵelementEnd()();
|
|
951
|
-
i0.ɵɵelementStart(10, "div",
|
|
1034
|
+
i0.ɵɵelementStart(10, "div", 136)(11, "div", 137)(12, "div", 86);
|
|
952
1035
|
i0.ɵɵtext(13, "Total Attempts");
|
|
953
1036
|
i0.ɵɵelementEnd();
|
|
954
|
-
i0.ɵɵelementStart(14, "div",
|
|
1037
|
+
i0.ɵɵelementStart(14, "div", 87);
|
|
955
1038
|
i0.ɵɵtext(15);
|
|
956
1039
|
i0.ɵɵelementEnd()();
|
|
957
|
-
i0.ɵɵelementStart(16, "div",
|
|
1040
|
+
i0.ɵɵelementStart(16, "div", 137)(17, "div", 86);
|
|
958
1041
|
i0.ɵɵtext(18, "Successful");
|
|
959
1042
|
i0.ɵɵelementEnd();
|
|
960
|
-
i0.ɵɵelementStart(19, "div",
|
|
1043
|
+
i0.ɵɵelementStart(19, "div", 87);
|
|
961
1044
|
i0.ɵɵtext(20);
|
|
962
1045
|
i0.ɵɵelementEnd()();
|
|
963
|
-
i0.ɵɵelementStart(21, "div",
|
|
1046
|
+
i0.ɵɵelementStart(21, "div", 137)(22, "div", 86);
|
|
964
1047
|
i0.ɵɵtext(23, "Behavior");
|
|
965
1048
|
i0.ɵɵelementEnd();
|
|
966
|
-
i0.ɵɵelementStart(24, "div",
|
|
1049
|
+
i0.ɵɵelementStart(24, "div", 87);
|
|
967
1050
|
i0.ɵɵtext(25);
|
|
968
1051
|
i0.ɵɵelementEnd()();
|
|
969
|
-
i0.ɵɵelementStart(26, "div",
|
|
1052
|
+
i0.ɵɵelementStart(26, "div", 137)(27, "div", 86);
|
|
970
1053
|
i0.ɵɵtext(28, "Retry Strategy");
|
|
971
1054
|
i0.ɵɵelementEnd();
|
|
972
|
-
i0.ɵɵelementStart(29, "div",
|
|
1055
|
+
i0.ɵɵelementStart(29, "div", 87);
|
|
973
1056
|
i0.ɵɵtext(30);
|
|
974
1057
|
i0.ɵɵelementEnd()()();
|
|
975
|
-
i0.ɵɵconditionalCreate(31,
|
|
976
|
-
i0.ɵɵconditionalCreate(32,
|
|
1058
|
+
i0.ɵɵconditionalCreate(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_31_Template, 7, 2, "div", 138);
|
|
1059
|
+
i0.ɵɵconditionalCreate(32, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_32_Template, 6, 1, "div", 139);
|
|
977
1060
|
i0.ɵɵelementEnd();
|
|
978
|
-
i0.ɵɵconditionalCreate(33,
|
|
979
|
-
i0.ɵɵconditionalCreate(34,
|
|
980
|
-
i0.ɵɵconditionalCreate(35,
|
|
981
|
-
i0.ɵɵconditionalCreate(36,
|
|
1061
|
+
i0.ɵɵconditionalCreate(33, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_33_Template, 18, 9, "div", 140);
|
|
1062
|
+
i0.ɵɵconditionalCreate(34, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_Template, 6, 0, "div", 141);
|
|
1063
|
+
i0.ɵɵconditionalCreate(35, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_35_Template, 8, 4, "div", 142);
|
|
1064
|
+
i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_36_Template, 8, 4, "div", 142);
|
|
982
1065
|
i0.ɵɵelementEnd()();
|
|
983
1066
|
} if (rf & 2) {
|
|
984
1067
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1010,8 +1093,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Templat
|
|
|
1010
1093
|
i0.ɵɵadvance();
|
|
1011
1094
|
i0.ɵɵconditional(ctx_r1.record.ValidationAttempts ? 36 : -1);
|
|
1012
1095
|
} }
|
|
1013
|
-
function
|
|
1014
|
-
i0.ɵɵelementStart(0, "span",
|
|
1096
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1097
|
+
i0.ɵɵelementStart(0, "span", 110);
|
|
1015
1098
|
i0.ɵɵtext(1);
|
|
1016
1099
|
i0.ɵɵelementEnd();
|
|
1017
1100
|
} if (rf & 2) {
|
|
@@ -1019,35 +1102,35 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_temp
|
|
|
1019
1102
|
i0.ɵɵadvance();
|
|
1020
1103
|
i0.ɵɵtextInterpolate1("(", ctx_r1.childRuns.length, " children)");
|
|
1021
1104
|
} }
|
|
1022
|
-
function
|
|
1023
|
-
i0.ɵɵelementStart(0, "span",
|
|
1024
|
-
i0.ɵɵelement(1, "i",
|
|
1105
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1106
|
+
i0.ɵɵelementStart(0, "span", 95);
|
|
1107
|
+
i0.ɵɵelement(1, "i", 162);
|
|
1025
1108
|
i0.ɵɵtext(2, " Run Hierarchy ");
|
|
1026
|
-
i0.ɵɵconditionalCreate(3,
|
|
1109
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_3_Template, 2, 1, "span", 110);
|
|
1027
1110
|
i0.ɵɵelementEnd();
|
|
1028
1111
|
} if (rf & 2) {
|
|
1029
1112
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1030
1113
|
i0.ɵɵadvance(3);
|
|
1031
1114
|
i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 3 : -1);
|
|
1032
1115
|
} }
|
|
1033
|
-
function
|
|
1116
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1034
1117
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
1035
|
-
i0.ɵɵelementStart(0, "div",
|
|
1036
|
-
i0.ɵɵelement(2, "i",
|
|
1118
|
+
i0.ɵɵelementStart(0, "div", 160)(1, "h4");
|
|
1119
|
+
i0.ɵɵelement(2, "i", 82);
|
|
1037
1120
|
i0.ɵɵtext(3, " Parent Run");
|
|
1038
1121
|
i0.ɵɵelementEnd();
|
|
1039
|
-
i0.ɵɵelementStart(4, "div",
|
|
1040
|
-
i0.ɵɵlistener("click", function
|
|
1041
|
-
i0.ɵɵelementStart(5, "div",
|
|
1122
|
+
i0.ɵɵelementStart(4, "div", 163);
|
|
1123
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_3_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
|
|
1124
|
+
i0.ɵɵelementStart(5, "div", 164);
|
|
1042
1125
|
i0.ɵɵelement(6, "i");
|
|
1043
1126
|
i0.ɵɵelementEnd();
|
|
1044
|
-
i0.ɵɵelementStart(7, "div",
|
|
1127
|
+
i0.ɵɵelementStart(7, "div", 165)(8, "div", 166);
|
|
1045
1128
|
i0.ɵɵtext(9);
|
|
1046
|
-
i0.ɵɵelementStart(10, "span",
|
|
1129
|
+
i0.ɵɵelementStart(10, "span", 167);
|
|
1047
1130
|
i0.ɵɵtext(11);
|
|
1048
1131
|
i0.ɵɵelementEnd()();
|
|
1049
|
-
i0.ɵɵelementStart(12, "div",
|
|
1050
|
-
i0.ɵɵelement(14, "i",
|
|
1132
|
+
i0.ɵɵelementStart(12, "div", 168)(13, "span");
|
|
1133
|
+
i0.ɵɵelement(14, "i", 89);
|
|
1051
1134
|
i0.ɵɵtext(15);
|
|
1052
1135
|
i0.ɵɵelementEnd();
|
|
1053
1136
|
i0.ɵɵelementStart(16, "span");
|
|
@@ -1055,11 +1138,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditi
|
|
|
1055
1138
|
i0.ɵɵtext(18);
|
|
1056
1139
|
i0.ɵɵelementEnd();
|
|
1057
1140
|
i0.ɵɵelementStart(19, "span");
|
|
1058
|
-
i0.ɵɵelement(20, "i",
|
|
1141
|
+
i0.ɵɵelement(20, "i", 94);
|
|
1059
1142
|
i0.ɵɵtext(21);
|
|
1060
1143
|
i0.ɵɵpipe(22, "date");
|
|
1061
1144
|
i0.ɵɵelementEnd()()();
|
|
1062
|
-
i0.ɵɵelement(23, "i",
|
|
1145
|
+
i0.ɵɵelement(23, "i", 132);
|
|
1063
1146
|
i0.ɵɵelementEnd()();
|
|
1064
1147
|
} if (rf & 2) {
|
|
1065
1148
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1078,8 +1161,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditi
|
|
|
1078
1161
|
i0.ɵɵadvance(3);
|
|
1079
1162
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"));
|
|
1080
1163
|
} }
|
|
1081
|
-
function
|
|
1082
|
-
i0.ɵɵelementStart(0, "span",
|
|
1164
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1165
|
+
i0.ɵɵelementStart(0, "span", 173);
|
|
1083
1166
|
i0.ɵɵtext(1);
|
|
1084
1167
|
i0.ɵɵelementEnd();
|
|
1085
1168
|
} if (rf & 2) {
|
|
@@ -1087,32 +1170,32 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditi
|
|
|
1087
1170
|
i0.ɵɵadvance();
|
|
1088
1171
|
i0.ɵɵtextInterpolate1("#", childRun_r19.ExecutionOrder);
|
|
1089
1172
|
} }
|
|
1090
|
-
function
|
|
1173
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
1091
1174
|
const _r18 = i0.ɵɵgetCurrentView();
|
|
1092
|
-
i0.ɵɵelementStart(0, "div",
|
|
1093
|
-
i0.ɵɵlistener("click", function
|
|
1094
|
-
i0.ɵɵelementStart(1, "div",
|
|
1175
|
+
i0.ɵɵelementStart(0, "div", 172);
|
|
1176
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Template_div_click_0_listener() { const childRun_r19 = i0.ɵɵrestoreView(_r18).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r19.ID)); });
|
|
1177
|
+
i0.ɵɵelementStart(1, "div", 164);
|
|
1095
1178
|
i0.ɵɵelement(2, "i");
|
|
1096
1179
|
i0.ɵɵelementEnd();
|
|
1097
|
-
i0.ɵɵelementStart(3, "div",
|
|
1180
|
+
i0.ɵɵelementStart(3, "div", 165)(4, "div", 166);
|
|
1098
1181
|
i0.ɵɵtext(5);
|
|
1099
|
-
i0.ɵɵconditionalCreate(6,
|
|
1100
|
-
i0.ɵɵelementStart(7, "span",
|
|
1182
|
+
i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Conditional_6_Template, 2, 1, "span", 173);
|
|
1183
|
+
i0.ɵɵelementStart(7, "span", 167);
|
|
1101
1184
|
i0.ɵɵtext(8);
|
|
1102
1185
|
i0.ɵɵelementEnd()();
|
|
1103
|
-
i0.ɵɵelementStart(9, "div",
|
|
1186
|
+
i0.ɵɵelementStart(9, "div", 168)(10, "span", 16);
|
|
1104
1187
|
i0.ɵɵelement(11, "i");
|
|
1105
1188
|
i0.ɵɵtext(12);
|
|
1106
1189
|
i0.ɵɵelementEnd();
|
|
1107
1190
|
i0.ɵɵelementStart(13, "span");
|
|
1108
|
-
i0.ɵɵelement(14, "i",
|
|
1191
|
+
i0.ɵɵelement(14, "i", 89);
|
|
1109
1192
|
i0.ɵɵtext(15);
|
|
1110
1193
|
i0.ɵɵelementEnd();
|
|
1111
1194
|
i0.ɵɵelementStart(16, "span");
|
|
1112
1195
|
i0.ɵɵelement(17, "i", 41);
|
|
1113
1196
|
i0.ɵɵtext(18);
|
|
1114
1197
|
i0.ɵɵelementEnd()()();
|
|
1115
|
-
i0.ɵɵelement(19, "i",
|
|
1198
|
+
i0.ɵɵelement(19, "i", 132);
|
|
1116
1199
|
i0.ɵɵelementEnd();
|
|
1117
1200
|
} if (rf & 2) {
|
|
1118
1201
|
const childRun_r19 = ctx.$implicit;
|
|
@@ -1138,25 +1221,25 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditi
|
|
|
1138
1221
|
i0.ɵɵadvance(3);
|
|
1139
1222
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r19.TokensUsed));
|
|
1140
1223
|
} }
|
|
1141
|
-
function
|
|
1142
|
-
i0.ɵɵelementStart(0, "div",
|
|
1143
|
-
i0.ɵɵelement(2, "i",
|
|
1224
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1225
|
+
i0.ɵɵelementStart(0, "div", 161)(1, "h4");
|
|
1226
|
+
i0.ɵɵelement(2, "i", 169);
|
|
1144
1227
|
i0.ɵɵtext(3, " Child Runs");
|
|
1145
1228
|
i0.ɵɵelementEnd();
|
|
1146
|
-
i0.ɵɵelementStart(4, "div",
|
|
1147
|
-
i0.ɵɵrepeaterCreate(5,
|
|
1229
|
+
i0.ɵɵelementStart(4, "div", 170);
|
|
1230
|
+
i0.ɵɵrepeaterCreate(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Template, 20, 14, "div", 171, _forTrack1);
|
|
1148
1231
|
i0.ɵɵelementEnd()();
|
|
1149
1232
|
} if (rf & 2) {
|
|
1150
1233
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1151
1234
|
i0.ɵɵadvance(5);
|
|
1152
1235
|
i0.ɵɵrepeater(ctx_r1.childRuns);
|
|
1153
1236
|
} }
|
|
1154
|
-
function
|
|
1155
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
1156
|
-
i0.ɵɵtemplate(1,
|
|
1237
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template(rf, ctx) { if (rf & 1) {
|
|
1238
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 47);
|
|
1239
|
+
i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Template, 4, 1, "ng-template", 28);
|
|
1157
1240
|
i0.ɵɵelementStart(2, "div", 29);
|
|
1158
|
-
i0.ɵɵconditionalCreate(3,
|
|
1159
|
-
i0.ɵɵconditionalCreate(4,
|
|
1241
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_3_Template, 24, 12, "div", 160);
|
|
1242
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_Template, 7, 0, "div", 161);
|
|
1160
1243
|
i0.ɵɵelementEnd()();
|
|
1161
1244
|
} if (rf & 2) {
|
|
1162
1245
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1166,33 +1249,33 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Templat
|
|
|
1166
1249
|
i0.ɵɵadvance();
|
|
1167
1250
|
i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 4 : -1);
|
|
1168
1251
|
} }
|
|
1169
|
-
function
|
|
1170
|
-
i0.ɵɵelementStart(0, "span",
|
|
1171
|
-
i0.ɵɵelement(1, "i",
|
|
1252
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_92_Template(rf, ctx) { if (rf & 1) {
|
|
1253
|
+
i0.ɵɵelementStart(0, "span", 95);
|
|
1254
|
+
i0.ɵɵelement(1, "i", 60);
|
|
1172
1255
|
i0.ɵɵtext(2, " Additional Details ");
|
|
1173
1256
|
i0.ɵɵelementEnd();
|
|
1174
1257
|
} }
|
|
1175
|
-
function
|
|
1258
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template(rf, ctx) { if (rf & 1) {
|
|
1176
1259
|
const _r20 = i0.ɵɵgetCurrentView();
|
|
1177
|
-
i0.ɵɵelementStart(0, "div",
|
|
1260
|
+
i0.ɵɵelementStart(0, "div", 49)(1, "label");
|
|
1178
1261
|
i0.ɵɵtext(2, "Agent");
|
|
1179
1262
|
i0.ɵɵelementEnd();
|
|
1180
|
-
i0.ɵɵelementStart(3, "div",
|
|
1181
|
-
i0.ɵɵlistener("click", function
|
|
1182
|
-
i0.ɵɵelement(4, "i",
|
|
1263
|
+
i0.ɵɵelementStart(3, "div", 174);
|
|
1264
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
|
|
1265
|
+
i0.ɵɵelement(4, "i", 175);
|
|
1183
1266
|
i0.ɵɵtext(5);
|
|
1184
|
-
i0.ɵɵelement(6, "i",
|
|
1267
|
+
i0.ɵɵelement(6, "i", 132);
|
|
1185
1268
|
i0.ɵɵelementEnd()();
|
|
1186
1269
|
} if (rf & 2) {
|
|
1187
1270
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1188
1271
|
i0.ɵɵadvance(5);
|
|
1189
1272
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Unknown", " ");
|
|
1190
1273
|
} }
|
|
1191
|
-
function
|
|
1192
|
-
i0.ɵɵelementStart(0, "div",
|
|
1274
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template(rf, ctx) { if (rf & 1) {
|
|
1275
|
+
i0.ɵɵelementStart(0, "div", 49)(1, "label");
|
|
1193
1276
|
i0.ɵɵtext(2, "Run Type");
|
|
1194
1277
|
i0.ɵɵelementEnd();
|
|
1195
|
-
i0.ɵɵelementStart(3, "div",
|
|
1278
|
+
i0.ɵɵelementStart(3, "div", 50);
|
|
1196
1279
|
i0.ɵɵelement(4, "i");
|
|
1197
1280
|
i0.ɵɵtext(5);
|
|
1198
1281
|
i0.ɵɵelementEnd()();
|
|
@@ -1203,12 +1286,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_94_Templat
|
|
|
1203
1286
|
i0.ɵɵadvance();
|
|
1204
1287
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
|
|
1205
1288
|
} }
|
|
1206
|
-
function
|
|
1207
|
-
i0.ɵɵelementStart(0, "div",
|
|
1289
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_97_Template(rf, ctx) { if (rf & 1) {
|
|
1290
|
+
i0.ɵɵelementStart(0, "div", 49)(1, "label");
|
|
1208
1291
|
i0.ɵɵtext(2, "Response Format");
|
|
1209
1292
|
i0.ɵɵelementEnd();
|
|
1210
|
-
i0.ɵɵelementStart(3, "div",
|
|
1211
|
-
i0.ɵɵelement(4, "i",
|
|
1293
|
+
i0.ɵɵelementStart(3, "div", 50);
|
|
1294
|
+
i0.ɵɵelement(4, "i", 92);
|
|
1212
1295
|
i0.ɵɵtext(5);
|
|
1213
1296
|
i0.ɵɵelementEnd()();
|
|
1214
1297
|
} if (rf & 2) {
|
|
@@ -1216,12 +1299,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Templat
|
|
|
1216
1299
|
i0.ɵɵadvance(5);
|
|
1217
1300
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.ResponseFormat, " ");
|
|
1218
1301
|
} }
|
|
1219
|
-
function
|
|
1220
|
-
i0.ɵɵelementStart(0, "div",
|
|
1302
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template(rf, ctx) { if (rf & 1) {
|
|
1303
|
+
i0.ɵɵelementStart(0, "div", 49)(1, "label");
|
|
1221
1304
|
i0.ɵɵtext(2, "Started At");
|
|
1222
1305
|
i0.ɵɵelementEnd();
|
|
1223
|
-
i0.ɵɵelementStart(3, "div",
|
|
1224
|
-
i0.ɵɵelement(4, "i",
|
|
1306
|
+
i0.ɵɵelementStart(3, "div", 50);
|
|
1307
|
+
i0.ɵɵelement(4, "i", 89);
|
|
1225
1308
|
i0.ɵɵtext(5);
|
|
1226
1309
|
i0.ɵɵpipe(6, "date");
|
|
1227
1310
|
i0.ɵɵelementEnd()();
|
|
@@ -1230,12 +1313,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_150_Templa
|
|
|
1230
1313
|
i0.ɵɵadvance(5);
|
|
1231
1314
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.RunAt, "medium"), " ");
|
|
1232
1315
|
} }
|
|
1233
|
-
function
|
|
1234
|
-
i0.ɵɵelementStart(0, "div",
|
|
1316
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_153_Template(rf, ctx) { if (rf & 1) {
|
|
1317
|
+
i0.ɵɵelementStart(0, "div", 49)(1, "label");
|
|
1235
1318
|
i0.ɵɵtext(2, "Completed At");
|
|
1236
1319
|
i0.ɵɵelementEnd();
|
|
1237
|
-
i0.ɵɵelementStart(3, "div",
|
|
1238
|
-
i0.ɵɵelement(4, "i",
|
|
1320
|
+
i0.ɵɵelementStart(3, "div", 50);
|
|
1321
|
+
i0.ɵɵelement(4, "i", 176);
|
|
1239
1322
|
i0.ɵɵtext(5);
|
|
1240
1323
|
i0.ɵɵpipe(6, "date");
|
|
1241
1324
|
i0.ɵɵelementEnd()();
|
|
@@ -1244,30 +1327,30 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_151_Templa
|
|
|
1244
1327
|
i0.ɵɵadvance(5);
|
|
1245
1328
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.CompletedAt, "medium"), " ");
|
|
1246
1329
|
} }
|
|
1247
|
-
function
|
|
1248
|
-
i0.ɵɵelementStart(0, "span",
|
|
1249
|
-
i0.ɵɵelement(1, "i",
|
|
1330
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1331
|
+
i0.ɵɵelementStart(0, "span", 95);
|
|
1332
|
+
i0.ɵɵelement(1, "i", 80);
|
|
1250
1333
|
i0.ɵɵtext(2, " Model Specific Response Details ");
|
|
1251
|
-
i0.ɵɵelementStart(3, "span",
|
|
1334
|
+
i0.ɵɵelementStart(3, "span", 97);
|
|
1252
1335
|
i0.ɵɵtext(4, "JSON");
|
|
1253
1336
|
i0.ɵɵelementEnd()();
|
|
1254
1337
|
} }
|
|
1255
|
-
function
|
|
1338
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template(rf, ctx) { if (rf & 1) {
|
|
1256
1339
|
const _r21 = i0.ɵɵgetCurrentView();
|
|
1257
1340
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
|
|
1258
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
1259
|
-
i0.ɵɵtemplate(1,
|
|
1260
|
-
i0.ɵɵelementStart(2, "div", 29)(3, "div", 33)(4, "div",
|
|
1261
|
-
i0.ɵɵlistener("click", function
|
|
1262
|
-
i0.ɵɵelement(6, "i",
|
|
1341
|
+
i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onModelSpecificPanelToggle($event)); });
|
|
1342
|
+
i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_ng_template_1_Template, 5, 0, "ng-template", 28);
|
|
1343
|
+
i0.ɵɵelementStart(2, "div", 29)(3, "div", 33)(4, "div", 102)(5, "button", 103);
|
|
1344
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedModelSpecificResponseDetails, "Model Specific Response Details")); });
|
|
1345
|
+
i0.ɵɵelement(6, "i", 104);
|
|
1263
1346
|
i0.ɵɵtext(7, " Copy ");
|
|
1264
1347
|
i0.ɵɵelementEnd();
|
|
1265
|
-
i0.ɵɵelementStart(8, "button",
|
|
1266
|
-
i0.ɵɵlistener("click", function
|
|
1267
|
-
i0.ɵɵelement(9, "i",
|
|
1348
|
+
i0.ɵɵelementStart(8, "button", 105);
|
|
1349
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSpecificResponseDetails, "json", "Model Specific Response Details")); });
|
|
1350
|
+
i0.ɵɵelement(9, "i", 106);
|
|
1268
1351
|
i0.ɵɵelementEnd()();
|
|
1269
|
-
i0.ɵɵelementStart(10, "mj-code-editor",
|
|
1270
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1352
|
+
i0.ɵɵelementStart(10, "mj-code-editor", 177);
|
|
1353
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template_mj_code_editor_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSpecificResponseDetails, $event) || (ctx_r1.formattedModelSpecificResponseDetails = $event); return i0.ɵɵresetView($event); });
|
|
1271
1354
|
i0.ɵɵelementEnd()()()();
|
|
1272
1355
|
} if (rf & 2) {
|
|
1273
1356
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1276,22 +1359,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Templa
|
|
|
1276
1359
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSpecificResponseDetails);
|
|
1277
1360
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
1278
1361
|
} }
|
|
1279
|
-
function
|
|
1280
|
-
i0.ɵɵelementStart(0, "span",
|
|
1362
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1363
|
+
i0.ɵɵelementStart(0, "span", 144);
|
|
1281
1364
|
i0.ɵɵtext(1, "Cached");
|
|
1282
1365
|
i0.ɵɵelementEnd();
|
|
1283
1366
|
} }
|
|
1284
|
-
function
|
|
1285
|
-
i0.ɵɵelementStart(0, "span",
|
|
1367
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1368
|
+
i0.ɵɵelementStart(0, "span", 144);
|
|
1286
1369
|
i0.ɵɵtext(1, "Selected");
|
|
1287
1370
|
i0.ɵɵelementEnd();
|
|
1288
1371
|
} }
|
|
1289
|
-
function
|
|
1290
|
-
i0.ɵɵelementStart(0, "span",
|
|
1291
|
-
i0.ɵɵelement(1, "i",
|
|
1372
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Template(rf, ctx) { if (rf & 1) {
|
|
1373
|
+
i0.ɵɵelementStart(0, "span", 95);
|
|
1374
|
+
i0.ɵɵelement(1, "i", 80);
|
|
1292
1375
|
i0.ɵɵtext(2, " Model Selection & Performance ");
|
|
1293
|
-
i0.ɵɵconditionalCreate(3,
|
|
1294
|
-
i0.ɵɵconditionalCreate(4,
|
|
1376
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Conditional_3_Template, 2, 0, "span", 144);
|
|
1377
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Conditional_4_Template, 2, 0, "span", 144);
|
|
1295
1378
|
i0.ɵɵelementEnd();
|
|
1296
1379
|
} if (rf & 2) {
|
|
1297
1380
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1300,12 +1383,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Templa
|
|
|
1300
1383
|
i0.ɵɵadvance();
|
|
1301
1384
|
i0.ɵɵconditional(ctx_r1.record.WasSelectedResult ? 4 : -1);
|
|
1302
1385
|
} }
|
|
1303
|
-
function
|
|
1304
|
-
i0.ɵɵelementStart(0, "div",
|
|
1386
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Template(rf, ctx) { if (rf & 1) {
|
|
1387
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "label");
|
|
1305
1388
|
i0.ɵɵtext(2, "Cache Key");
|
|
1306
1389
|
i0.ɵɵelementEnd();
|
|
1307
|
-
i0.ɵɵelementStart(3, "div",
|
|
1308
|
-
i0.ɵɵelement(4, "i",
|
|
1390
|
+
i0.ɵɵelementStart(3, "div", 50);
|
|
1391
|
+
i0.ɵɵelement(4, "i", 178);
|
|
1309
1392
|
i0.ɵɵelementStart(5, "code");
|
|
1310
1393
|
i0.ɵɵtext(6);
|
|
1311
1394
|
i0.ɵɵelementEnd()()();
|
|
@@ -1314,28 +1397,28 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_181_Templa
|
|
|
1314
1397
|
i0.ɵɵadvance(6);
|
|
1315
1398
|
i0.ɵɵtextInterpolate(ctx_r1.record.CacheKey);
|
|
1316
1399
|
} }
|
|
1317
|
-
function
|
|
1400
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template(rf, ctx) { if (rf & 1) {
|
|
1318
1401
|
const _r22 = i0.ɵɵgetCurrentView();
|
|
1319
|
-
i0.ɵɵelementStart(0, "div",
|
|
1402
|
+
i0.ɵɵelementStart(0, "div", 49)(1, "label");
|
|
1320
1403
|
i0.ɵɵtext(2, "Judge Prompt");
|
|
1321
1404
|
i0.ɵɵelementEnd();
|
|
1322
|
-
i0.ɵɵelementStart(3, "div",
|
|
1323
|
-
i0.ɵɵlistener("click", function
|
|
1324
|
-
i0.ɵɵelement(4, "i",
|
|
1405
|
+
i0.ɵɵelementStart(3, "div", 179);
|
|
1406
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.JudgeID)); });
|
|
1407
|
+
i0.ɵɵelement(4, "i", 180);
|
|
1325
1408
|
i0.ɵɵtext(5);
|
|
1326
|
-
i0.ɵɵelement(6, "i",
|
|
1409
|
+
i0.ɵɵelement(6, "i", 132);
|
|
1327
1410
|
i0.ɵɵelementEnd()();
|
|
1328
1411
|
} if (rf & 2) {
|
|
1329
1412
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1330
1413
|
i0.ɵɵadvance(5);
|
|
1331
1414
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Judge || "Unknown", " ");
|
|
1332
1415
|
} }
|
|
1333
|
-
function
|
|
1334
|
-
i0.ɵɵelementStart(0, "div",
|
|
1416
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Template(rf, ctx) { if (rf & 1) {
|
|
1417
|
+
i0.ɵɵelementStart(0, "div", 49)(1, "label");
|
|
1335
1418
|
i0.ɵɵtext(2, "Judge Score");
|
|
1336
1419
|
i0.ɵɵelementEnd();
|
|
1337
|
-
i0.ɵɵelementStart(3, "div",
|
|
1338
|
-
i0.ɵɵelement(4, "i",
|
|
1420
|
+
i0.ɵɵelementStart(3, "div", 50);
|
|
1421
|
+
i0.ɵɵelement(4, "i", 181);
|
|
1339
1422
|
i0.ɵɵtext(5);
|
|
1340
1423
|
i0.ɵɵelementEnd()();
|
|
1341
1424
|
} if (rf & 2) {
|
|
@@ -1343,12 +1426,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Templa
|
|
|
1343
1426
|
i0.ɵɵadvance(5);
|
|
1344
1427
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.JudgeScore, " ");
|
|
1345
1428
|
} }
|
|
1346
|
-
function
|
|
1347
|
-
i0.ɵɵelementStart(0, "div",
|
|
1429
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template(rf, ctx) { if (rf & 1) {
|
|
1430
|
+
i0.ɵɵelementStart(0, "div", 49)(1, "label");
|
|
1348
1431
|
i0.ɵɵtext(2, "First Token Time");
|
|
1349
1432
|
i0.ɵɵelementEnd();
|
|
1350
|
-
i0.ɵɵelementStart(3, "div",
|
|
1351
|
-
i0.ɵɵelement(4, "i",
|
|
1433
|
+
i0.ɵɵelementStart(3, "div", 50);
|
|
1434
|
+
i0.ɵɵelement(4, "i", 93);
|
|
1352
1435
|
i0.ɵɵtext(5);
|
|
1353
1436
|
i0.ɵɵelementEnd()();
|
|
1354
1437
|
} if (rf & 2) {
|
|
@@ -1356,12 +1439,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_196_Templa
|
|
|
1356
1439
|
i0.ɵɵadvance(5);
|
|
1357
1440
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.FirstTokenTime, " ms ");
|
|
1358
1441
|
} }
|
|
1359
|
-
function
|
|
1360
|
-
i0.ɵɵelementStart(0, "div",
|
|
1442
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1443
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "label");
|
|
1361
1444
|
i0.ɵɵtext(2, "Cancellation Reason");
|
|
1362
1445
|
i0.ɵɵelementEnd();
|
|
1363
|
-
i0.ɵɵelementStart(3, "div",
|
|
1364
|
-
i0.ɵɵelement(4, "i",
|
|
1446
|
+
i0.ɵɵelementStart(3, "div", 50);
|
|
1447
|
+
i0.ɵɵelement(4, "i", 184);
|
|
1365
1448
|
i0.ɵɵtext(5);
|
|
1366
1449
|
i0.ɵɵelementEnd()();
|
|
1367
1450
|
} if (rf & 2) {
|
|
@@ -1369,31 +1452,31 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Condit
|
|
|
1369
1452
|
i0.ɵɵadvance(5);
|
|
1370
1453
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CancellationReason, " ");
|
|
1371
1454
|
} }
|
|
1372
|
-
function
|
|
1373
|
-
i0.ɵɵelementStart(0, "div",
|
|
1455
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template(rf, ctx) { if (rf & 1) {
|
|
1456
|
+
i0.ɵɵelementStart(0, "div", 49)(1, "label");
|
|
1374
1457
|
i0.ɵɵtext(2, "Cancelled");
|
|
1375
1458
|
i0.ɵɵelementEnd();
|
|
1376
|
-
i0.ɵɵelementStart(3, "div",
|
|
1377
|
-
i0.ɵɵelement(4, "i",
|
|
1459
|
+
i0.ɵɵelementStart(3, "div", 182);
|
|
1460
|
+
i0.ɵɵelement(4, "i", 183);
|
|
1378
1461
|
i0.ɵɵtext(5, " Yes ");
|
|
1379
1462
|
i0.ɵɵelementEnd()();
|
|
1380
|
-
i0.ɵɵconditionalCreate(6,
|
|
1463
|
+
i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Conditional_6_Template, 6, 1, "div", 63);
|
|
1381
1464
|
} if (rf & 2) {
|
|
1382
1465
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1383
1466
|
i0.ɵɵadvance(6);
|
|
1384
1467
|
i0.ɵɵconditional(ctx_r1.record.CancellationReason ? 6 : -1);
|
|
1385
1468
|
} }
|
|
1386
|
-
function
|
|
1469
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template(rf, ctx) { if (rf & 1) {
|
|
1387
1470
|
const _r23 = i0.ɵɵgetCurrentView();
|
|
1388
|
-
i0.ɵɵelementStart(0, "div",
|
|
1471
|
+
i0.ɵɵelementStart(0, "div", 64)(1, "div", 102)(2, "h4", 125);
|
|
1389
1472
|
i0.ɵɵtext(3, "Model Selection Details");
|
|
1390
1473
|
i0.ɵɵelementEnd();
|
|
1391
|
-
i0.ɵɵelementStart(4, "button",
|
|
1392
|
-
i0.ɵɵlistener("click", function
|
|
1393
|
-
i0.ɵɵelement(5, "i",
|
|
1474
|
+
i0.ɵɵelementStart(4, "button", 105);
|
|
1475
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSelection, "json", "Model Selection")); });
|
|
1476
|
+
i0.ɵɵelement(5, "i", 106);
|
|
1394
1477
|
i0.ɵɵelementEnd()();
|
|
1395
|
-
i0.ɵɵelementStart(6, "div",
|
|
1396
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1478
|
+
i0.ɵɵelementStart(6, "div", 157)(7, "mj-code-editor", 185);
|
|
1479
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSelection, $event) || (ctx_r1.formattedModelSelection = $event); return i0.ɵɵresetView($event); });
|
|
1397
1480
|
i0.ɵɵelementEnd()()();
|
|
1398
1481
|
} if (rf & 2) {
|
|
1399
1482
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1401,17 +1484,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Templa
|
|
|
1401
1484
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSelection);
|
|
1402
1485
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
1403
1486
|
} }
|
|
1404
|
-
function
|
|
1487
|
+
function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template(rf, ctx) { if (rf & 1) {
|
|
1405
1488
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
1406
|
-
i0.ɵɵelementStart(0, "div",
|
|
1489
|
+
i0.ɵɵelementStart(0, "div", 65)(1, "div", 102)(2, "h4", 125);
|
|
1407
1490
|
i0.ɵɵtext(3, "Error Details");
|
|
1408
1491
|
i0.ɵɵelementEnd();
|
|
1409
|
-
i0.ɵɵelementStart(4, "button",
|
|
1410
|
-
i0.ɵɵlistener("click", function
|
|
1411
|
-
i0.ɵɵelement(5, "i",
|
|
1492
|
+
i0.ɵɵelementStart(4, "button", 105);
|
|
1493
|
+
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
|
|
1494
|
+
i0.ɵɵelement(5, "i", 106);
|
|
1412
1495
|
i0.ɵɵelementEnd()();
|
|
1413
|
-
i0.ɵɵelementStart(6, "div",
|
|
1414
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1496
|
+
i0.ɵɵelementStart(6, "div", 157)(7, "mj-code-editor", 186);
|
|
1497
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedErrorDetails, $event) || (ctx_r1.formattedErrorDetails = $event); return i0.ɵɵresetView($event); });
|
|
1415
1498
|
i0.ɵɵelementEnd()()();
|
|
1416
1499
|
} if (rf & 2) {
|
|
1417
1500
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1451,7 +1534,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
|
|
|
1451
1534
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.refreshData()); });
|
|
1452
1535
|
i0.ɵɵelement(29, "i", 24);
|
|
1453
1536
|
i0.ɵɵelementEnd()()();
|
|
1454
|
-
i0.ɵɵconditionalCreate(30, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template,
|
|
1537
|
+
i0.ɵɵconditionalCreate(30, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template, 38, 11)(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Template, 24, 5, "div", 25);
|
|
1455
1538
|
i0.ɵɵelementEnd();
|
|
1456
1539
|
i0.ɵɵelementStart(32, "div", 26)(33, "mj-accordion-panel", 27);
|
|
1457
1540
|
i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_33_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputPanelToggle($event)); });
|
|
@@ -1494,158 +1577,160 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
|
|
|
1494
1577
|
i0.ɵɵelementStart(67, "h4");
|
|
1495
1578
|
i0.ɵɵtext(68, "Total Tokens");
|
|
1496
1579
|
i0.ɵɵelementEnd()();
|
|
1497
|
-
i0.ɵɵelementStart(69, "div",
|
|
1580
|
+
i0.ɵɵelementStart(69, "div", 42);
|
|
1498
1581
|
i0.ɵɵtext(70);
|
|
1499
1582
|
i0.ɵɵelementEnd();
|
|
1500
1583
|
i0.ɵɵconditionalCreate(71, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_71_Template, 3, 1, "div", 39);
|
|
1584
|
+
i0.ɵɵconditionalCreate(72, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_72_Template, 3, 1, "div", 39);
|
|
1501
1585
|
i0.ɵɵelementEnd();
|
|
1502
|
-
i0.ɵɵ
|
|
1503
|
-
i0.ɵɵ
|
|
1504
|
-
i0.ɵɵ
|
|
1505
|
-
i0.ɵɵ
|
|
1586
|
+
i0.ɵɵconditionalCreate(73, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Template, 9, 3, "div", 35);
|
|
1587
|
+
i0.ɵɵelementStart(74, "div", 35)(75, "div", 36);
|
|
1588
|
+
i0.ɵɵelement(76, "i", 43);
|
|
1589
|
+
i0.ɵɵelementStart(77, "h4");
|
|
1590
|
+
i0.ɵɵtext(78, "Cost");
|
|
1506
1591
|
i0.ɵɵelementEnd()();
|
|
1507
|
-
i0.ɵɵelementStart(
|
|
1508
|
-
i0.ɵɵtext(
|
|
1592
|
+
i0.ɵɵelementStart(79, "div", 38);
|
|
1593
|
+
i0.ɵɵtext(80);
|
|
1509
1594
|
i0.ɵɵelementEnd();
|
|
1510
|
-
i0.ɵɵconditionalCreate(
|
|
1511
|
-
i0.ɵɵconditionalCreate(
|
|
1595
|
+
i0.ɵɵconditionalCreate(81, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Template, 3, 1, "div", 39);
|
|
1596
|
+
i0.ɵɵconditionalCreate(82, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template, 2, 1, "div", 44);
|
|
1512
1597
|
i0.ɵɵelementEnd();
|
|
1513
|
-
i0.ɵɵconditionalCreate(81, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Template, 7, 1, "div", 35);
|
|
1514
|
-
i0.ɵɵconditionalCreate(82, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template, 7, 1, "div", 35);
|
|
1515
1598
|
i0.ɵɵconditionalCreate(83, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template, 7, 1, "div", 35);
|
|
1599
|
+
i0.ɵɵconditionalCreate(84, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Template, 7, 1, "div", 35);
|
|
1600
|
+
i0.ɵɵconditionalCreate(85, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template, 7, 1, "div", 35);
|
|
1516
1601
|
i0.ɵɵelementEnd();
|
|
1517
|
-
i0.ɵɵelementStart(
|
|
1518
|
-
i0.ɵɵconditionalCreate(
|
|
1519
|
-
i0.ɵɵconditionalCreate(
|
|
1602
|
+
i0.ɵɵelementStart(86, "div", 45);
|
|
1603
|
+
i0.ɵɵconditionalCreate(87, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template, 5, 1, "div", 46);
|
|
1604
|
+
i0.ɵɵconditionalCreate(88, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template, 6, 1, "div", 46);
|
|
1520
1605
|
i0.ɵɵelementEnd()()();
|
|
1521
|
-
i0.ɵɵconditionalCreate(
|
|
1522
|
-
i0.ɵɵconditionalCreate(
|
|
1523
|
-
i0.ɵɵelementStart(
|
|
1524
|
-
i0.ɵɵtemplate(
|
|
1525
|
-
i0.ɵɵelementStart(
|
|
1526
|
-
i0.ɵɵconditionalCreate(
|
|
1527
|
-
i0.ɵɵconditionalCreate(
|
|
1528
|
-
i0.ɵɵconditionalCreate(
|
|
1529
|
-
i0.ɵɵelementStart(
|
|
1530
|
-
i0.ɵɵtext(
|
|
1606
|
+
i0.ɵɵconditionalCreate(89, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template, 37, 18, "mj-accordion-panel", 47);
|
|
1607
|
+
i0.ɵɵconditionalCreate(90, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template, 5, 3, "mj-accordion-panel", 47);
|
|
1608
|
+
i0.ɵɵelementStart(91, "mj-accordion-panel", 47);
|
|
1609
|
+
i0.ɵɵtemplate(92, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_92_Template, 3, 0, "ng-template", 28);
|
|
1610
|
+
i0.ɵɵelementStart(93, "div", 29)(94, "div", 48);
|
|
1611
|
+
i0.ɵɵconditionalCreate(95, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template, 7, 1, "div", 49);
|
|
1612
|
+
i0.ɵɵconditionalCreate(96, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template, 6, 3, "div", 49);
|
|
1613
|
+
i0.ɵɵconditionalCreate(97, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_97_Template, 6, 1, "div", 49);
|
|
1614
|
+
i0.ɵɵelementStart(98, "div", 49)(99, "label");
|
|
1615
|
+
i0.ɵɵtext(100, "Temperature");
|
|
1531
1616
|
i0.ɵɵelementEnd();
|
|
1532
|
-
i0.ɵɵelementStart(
|
|
1533
|
-
i0.ɵɵelement(
|
|
1534
|
-
i0.ɵɵtext(
|
|
1617
|
+
i0.ɵɵelementStart(101, "div", 50);
|
|
1618
|
+
i0.ɵɵelement(102, "i", 51);
|
|
1619
|
+
i0.ɵɵtext(103);
|
|
1535
1620
|
i0.ɵɵelementEnd()();
|
|
1536
|
-
i0.ɵɵelementStart(
|
|
1537
|
-
i0.ɵɵtext(
|
|
1621
|
+
i0.ɵɵelementStart(104, "div", 49)(105, "label");
|
|
1622
|
+
i0.ɵɵtext(106, "Top P");
|
|
1538
1623
|
i0.ɵɵelementEnd();
|
|
1539
|
-
i0.ɵɵelementStart(
|
|
1540
|
-
i0.ɵɵelement(
|
|
1541
|
-
i0.ɵɵtext(
|
|
1624
|
+
i0.ɵɵelementStart(107, "div", 50);
|
|
1625
|
+
i0.ɵɵelement(108, "i", 52);
|
|
1626
|
+
i0.ɵɵtext(109);
|
|
1542
1627
|
i0.ɵɵelementEnd()();
|
|
1543
|
-
i0.ɵɵelementStart(
|
|
1544
|
-
i0.ɵɵtext(
|
|
1628
|
+
i0.ɵɵelementStart(110, "div", 49)(111, "label");
|
|
1629
|
+
i0.ɵɵtext(112, "Top K");
|
|
1545
1630
|
i0.ɵɵelementEnd();
|
|
1546
|
-
i0.ɵɵelementStart(
|
|
1547
|
-
i0.ɵɵelement(
|
|
1548
|
-
i0.ɵɵtext(
|
|
1631
|
+
i0.ɵɵelementStart(113, "div", 50);
|
|
1632
|
+
i0.ɵɵelement(114, "i", 53);
|
|
1633
|
+
i0.ɵɵtext(115);
|
|
1549
1634
|
i0.ɵɵelementEnd()();
|
|
1550
|
-
i0.ɵɵelementStart(
|
|
1551
|
-
i0.ɵɵtext(
|
|
1635
|
+
i0.ɵɵelementStart(116, "div", 49)(117, "label");
|
|
1636
|
+
i0.ɵɵtext(118, "Min P");
|
|
1552
1637
|
i0.ɵɵelementEnd();
|
|
1553
|
-
i0.ɵɵelementStart(
|
|
1554
|
-
i0.ɵɵelement(
|
|
1555
|
-
i0.ɵɵtext(
|
|
1638
|
+
i0.ɵɵelementStart(119, "div", 50);
|
|
1639
|
+
i0.ɵɵelement(120, "i", 54);
|
|
1640
|
+
i0.ɵɵtext(121);
|
|
1556
1641
|
i0.ɵɵelementEnd()();
|
|
1557
|
-
i0.ɵɵelementStart(
|
|
1558
|
-
i0.ɵɵtext(
|
|
1642
|
+
i0.ɵɵelementStart(122, "div", 49)(123, "label");
|
|
1643
|
+
i0.ɵɵtext(124, "Frequency Penalty");
|
|
1559
1644
|
i0.ɵɵelementEnd();
|
|
1560
|
-
i0.ɵɵelementStart(
|
|
1561
|
-
i0.ɵɵelement(
|
|
1562
|
-
i0.ɵɵtext(
|
|
1645
|
+
i0.ɵɵelementStart(125, "div", 50);
|
|
1646
|
+
i0.ɵɵelement(126, "i", 55);
|
|
1647
|
+
i0.ɵɵtext(127);
|
|
1563
1648
|
i0.ɵɵelementEnd()();
|
|
1564
|
-
i0.ɵɵelementStart(
|
|
1565
|
-
i0.ɵɵtext(
|
|
1649
|
+
i0.ɵɵelementStart(128, "div", 49)(129, "label");
|
|
1650
|
+
i0.ɵɵtext(130, "Presence Penalty");
|
|
1566
1651
|
i0.ɵɵelementEnd();
|
|
1567
|
-
i0.ɵɵelementStart(
|
|
1568
|
-
i0.ɵɵelement(
|
|
1569
|
-
i0.ɵɵtext(
|
|
1652
|
+
i0.ɵɵelementStart(131, "div", 50);
|
|
1653
|
+
i0.ɵɵelement(132, "i", 56);
|
|
1654
|
+
i0.ɵɵtext(133);
|
|
1570
1655
|
i0.ɵɵelementEnd()();
|
|
1571
|
-
i0.ɵɵelementStart(
|
|
1572
|
-
i0.ɵɵtext(
|
|
1656
|
+
i0.ɵɵelementStart(134, "div", 49)(135, "label");
|
|
1657
|
+
i0.ɵɵtext(136, "Seed");
|
|
1573
1658
|
i0.ɵɵelementEnd();
|
|
1574
|
-
i0.ɵɵelementStart(
|
|
1575
|
-
i0.ɵɵelement(
|
|
1576
|
-
i0.ɵɵtext(
|
|
1659
|
+
i0.ɵɵelementStart(137, "div", 50);
|
|
1660
|
+
i0.ɵɵelement(138, "i", 57);
|
|
1661
|
+
i0.ɵɵtext(139);
|
|
1577
1662
|
i0.ɵɵelementEnd()();
|
|
1578
|
-
i0.ɵɵelementStart(
|
|
1579
|
-
i0.ɵɵtext(
|
|
1663
|
+
i0.ɵɵelementStart(140, "div", 49)(141, "label");
|
|
1664
|
+
i0.ɵɵtext(142, "Stop Sequences");
|
|
1580
1665
|
i0.ɵɵelementEnd();
|
|
1581
|
-
i0.ɵɵelementStart(
|
|
1582
|
-
i0.ɵɵelement(
|
|
1583
|
-
i0.ɵɵtext(
|
|
1666
|
+
i0.ɵɵelementStart(143, "div", 50);
|
|
1667
|
+
i0.ɵɵelement(144, "i", 58);
|
|
1668
|
+
i0.ɵɵtext(145);
|
|
1584
1669
|
i0.ɵɵelementEnd()();
|
|
1585
|
-
i0.ɵɵelementStart(
|
|
1586
|
-
i0.ɵɵtext(
|
|
1670
|
+
i0.ɵɵelementStart(146, "div", 49)(147, "label");
|
|
1671
|
+
i0.ɵɵtext(148, "Assistant Prefill");
|
|
1587
1672
|
i0.ɵɵelementEnd();
|
|
1588
|
-
i0.ɵɵelementStart(
|
|
1589
|
-
i0.ɵɵelement(
|
|
1590
|
-
i0.ɵɵtext(
|
|
1673
|
+
i0.ɵɵelementStart(149, "div", 50);
|
|
1674
|
+
i0.ɵɵelement(150, "i", 59);
|
|
1675
|
+
i0.ɵɵtext(151);
|
|
1591
1676
|
i0.ɵɵelementEnd()();
|
|
1592
|
-
i0.ɵɵconditionalCreate(
|
|
1593
|
-
i0.ɵɵconditionalCreate(
|
|
1677
|
+
i0.ɵɵconditionalCreate(152, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template, 7, 4, "div", 49);
|
|
1678
|
+
i0.ɵɵconditionalCreate(153, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_153_Template, 7, 4, "div", 49);
|
|
1594
1679
|
i0.ɵɵelementEnd()()();
|
|
1595
|
-
i0.ɵɵconditionalCreate(
|
|
1596
|
-
i0.ɵɵelementStart(
|
|
1597
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
1598
|
-
i0.ɵɵtemplate(
|
|
1599
|
-
i0.ɵɵelementStart(
|
|
1600
|
-
i0.ɵɵtext(
|
|
1680
|
+
i0.ɵɵconditionalCreate(154, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template, 11, 5, "mj-accordion-panel", 47);
|
|
1681
|
+
i0.ɵɵelementStart(155, "mj-accordion-panel", 27);
|
|
1682
|
+
i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_155_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onModelSelectionPanelToggle($event)); });
|
|
1683
|
+
i0.ɵɵtemplate(156, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Template, 5, 2, "ng-template", 28);
|
|
1684
|
+
i0.ɵɵelementStart(157, "div", 29)(158, "div", 48)(159, "div", 49)(160, "label");
|
|
1685
|
+
i0.ɵɵtext(161, "Status");
|
|
1601
1686
|
i0.ɵɵelementEnd();
|
|
1602
|
-
i0.ɵɵelementStart(
|
|
1603
|
-
i0.ɵɵelement(
|
|
1604
|
-
i0.ɵɵtext(
|
|
1687
|
+
i0.ɵɵelementStart(162, "div", 50);
|
|
1688
|
+
i0.ɵɵelement(163, "i", 60);
|
|
1689
|
+
i0.ɵɵtext(164);
|
|
1605
1690
|
i0.ɵɵelementEnd()();
|
|
1606
|
-
i0.ɵɵelementStart(
|
|
1607
|
-
i0.ɵɵtext(
|
|
1691
|
+
i0.ɵɵelementStart(165, "div", 49)(166, "label");
|
|
1692
|
+
i0.ɵɵtext(167, "Selection Strategy");
|
|
1608
1693
|
i0.ɵɵelementEnd();
|
|
1609
|
-
i0.ɵɵelementStart(
|
|
1610
|
-
i0.ɵɵelement(
|
|
1611
|
-
i0.ɵɵtext(
|
|
1694
|
+
i0.ɵɵelementStart(168, "div", 50);
|
|
1695
|
+
i0.ɵɵelement(169, "i", 61);
|
|
1696
|
+
i0.ɵɵtext(170);
|
|
1612
1697
|
i0.ɵɵelementEnd()();
|
|
1613
|
-
i0.ɵɵelementStart(
|
|
1614
|
-
i0.ɵɵtext(
|
|
1698
|
+
i0.ɵɵelementStart(171, "div", 49)(172, "label");
|
|
1699
|
+
i0.ɵɵtext(173, "Model Power Rank");
|
|
1615
1700
|
i0.ɵɵelementEnd();
|
|
1616
|
-
i0.ɵɵelementStart(
|
|
1617
|
-
i0.ɵɵelement(
|
|
1618
|
-
i0.ɵɵtext(
|
|
1701
|
+
i0.ɵɵelementStart(174, "div", 50);
|
|
1702
|
+
i0.ɵɵelement(175, "i", 62);
|
|
1703
|
+
i0.ɵɵtext(176);
|
|
1619
1704
|
i0.ɵɵelementEnd()();
|
|
1620
|
-
i0.ɵɵelementStart(
|
|
1621
|
-
i0.ɵɵtext(
|
|
1705
|
+
i0.ɵɵelementStart(177, "div", 49)(178, "label");
|
|
1706
|
+
i0.ɵɵtext(179, "Cache Hit");
|
|
1622
1707
|
i0.ɵɵelementEnd();
|
|
1623
|
-
i0.ɵɵelementStart(
|
|
1624
|
-
i0.ɵɵelement(
|
|
1625
|
-
i0.ɵɵtext(
|
|
1708
|
+
i0.ɵɵelementStart(180, "div", 50);
|
|
1709
|
+
i0.ɵɵelement(181, "i");
|
|
1710
|
+
i0.ɵɵtext(182);
|
|
1626
1711
|
i0.ɵɵelementEnd()();
|
|
1627
|
-
i0.ɵɵconditionalCreate(
|
|
1628
|
-
i0.ɵɵconditionalCreate(
|
|
1629
|
-
i0.ɵɵconditionalCreate(
|
|
1630
|
-
i0.ɵɵelementStart(
|
|
1631
|
-
i0.ɵɵtext(
|
|
1712
|
+
i0.ɵɵconditionalCreate(183, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Template, 7, 1, "div", 63);
|
|
1713
|
+
i0.ɵɵconditionalCreate(184, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template, 7, 1, "div", 49);
|
|
1714
|
+
i0.ɵɵconditionalCreate(185, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Template, 6, 1, "div", 49);
|
|
1715
|
+
i0.ɵɵelementStart(186, "div", 49)(187, "label");
|
|
1716
|
+
i0.ɵɵtext(188, "Was Selected Result");
|
|
1632
1717
|
i0.ɵɵelementEnd();
|
|
1633
|
-
i0.ɵɵelementStart(
|
|
1634
|
-
i0.ɵɵelement(
|
|
1635
|
-
i0.ɵɵtext(
|
|
1718
|
+
i0.ɵɵelementStart(189, "div", 50);
|
|
1719
|
+
i0.ɵɵelement(190, "i");
|
|
1720
|
+
i0.ɵɵtext(191);
|
|
1636
1721
|
i0.ɵɵelementEnd()();
|
|
1637
|
-
i0.ɵɵelementStart(
|
|
1638
|
-
i0.ɵɵtext(
|
|
1722
|
+
i0.ɵɵelementStart(192, "div", 49)(193, "label");
|
|
1723
|
+
i0.ɵɵtext(194, "Streaming Enabled");
|
|
1639
1724
|
i0.ɵɵelementEnd();
|
|
1640
|
-
i0.ɵɵelementStart(
|
|
1641
|
-
i0.ɵɵelement(
|
|
1642
|
-
i0.ɵɵtext(
|
|
1725
|
+
i0.ɵɵelementStart(195, "div", 50);
|
|
1726
|
+
i0.ɵɵelement(196, "i");
|
|
1727
|
+
i0.ɵɵtext(197);
|
|
1643
1728
|
i0.ɵɵelementEnd()();
|
|
1644
|
-
i0.ɵɵconditionalCreate(
|
|
1645
|
-
i0.ɵɵconditionalCreate(
|
|
1729
|
+
i0.ɵɵconditionalCreate(198, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template, 6, 1, "div", 49);
|
|
1730
|
+
i0.ɵɵconditionalCreate(199, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template, 7, 1);
|
|
1646
1731
|
i0.ɵɵelementEnd();
|
|
1647
|
-
i0.ɵɵconditionalCreate(
|
|
1648
|
-
i0.ɵɵconditionalCreate(
|
|
1732
|
+
i0.ɵɵconditionalCreate(200, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template, 8, 4, "div", 64);
|
|
1733
|
+
i0.ɵɵconditionalCreate(201, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template, 8, 4, "div", 65);
|
|
1649
1734
|
i0.ɵɵelementEnd()()()()();
|
|
1650
1735
|
} if (rf & 2) {
|
|
1651
1736
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -1695,37 +1780,41 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
|
|
|
1695
1780
|
i0.ɵɵadvance();
|
|
1696
1781
|
i0.ɵɵconditional(ctx_r1.record.TokensCompletionRollup && ctx_r1.record.TokensCompletionRollup !== ctx_r1.record.TokensCompletion ? 63 : -1);
|
|
1697
1782
|
i0.ɵɵadvance(7);
|
|
1698
|
-
i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.
|
|
1783
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.TotalTokensProcessed));
|
|
1784
|
+
i0.ɵɵadvance();
|
|
1785
|
+
i0.ɵɵconditional(ctx_r1.CachedTokens > 0 ? 71 : -1);
|
|
1786
|
+
i0.ɵɵadvance();
|
|
1787
|
+
i0.ɵɵconditional(ctx_r1.record.TokensUsedRollup && ctx_r1.record.TokensUsedRollup !== ctx_r1.record.TokensUsed ? 72 : -1);
|
|
1699
1788
|
i0.ɵɵadvance();
|
|
1700
|
-
i0.ɵɵconditional(ctx_r1.record.
|
|
1789
|
+
i0.ɵɵconditional(ctx_r1.record.TokensCacheRead != null || ctx_r1.record.TokensCacheWrite != null ? 73 : -1);
|
|
1701
1790
|
i0.ɵɵadvance(7);
|
|
1702
1791
|
i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.Cost));
|
|
1703
1792
|
i0.ɵɵadvance();
|
|
1704
|
-
i0.ɵɵconditional(ctx_r1.record.TotalCost && ctx_r1.record.TotalCost !== ctx_r1.record.Cost ?
|
|
1793
|
+
i0.ɵɵconditional(ctx_r1.record.TotalCost && ctx_r1.record.TotalCost !== ctx_r1.record.Cost ? 81 : -1);
|
|
1705
1794
|
i0.ɵɵadvance();
|
|
1706
|
-
i0.ɵɵconditional(ctx_r1.record.CostCurrency ?
|
|
1795
|
+
i0.ɵɵconditional(ctx_r1.record.CostCurrency ? 82 : -1);
|
|
1707
1796
|
i0.ɵɵadvance();
|
|
1708
|
-
i0.ɵɵconditional(ctx_r1.record.QueueTime != null ?
|
|
1797
|
+
i0.ɵɵconditional(ctx_r1.record.QueueTime != null ? 83 : -1);
|
|
1709
1798
|
i0.ɵɵadvance();
|
|
1710
|
-
i0.ɵɵconditional(ctx_r1.record.PromptTime != null ?
|
|
1799
|
+
i0.ɵɵconditional(ctx_r1.record.PromptTime != null ? 84 : -1);
|
|
1711
1800
|
i0.ɵɵadvance();
|
|
1712
|
-
i0.ɵɵconditional(ctx_r1.record.CompletionTime != null ?
|
|
1801
|
+
i0.ɵɵconditional(ctx_r1.record.CompletionTime != null ? 85 : -1);
|
|
1713
1802
|
i0.ɵɵadvance(2);
|
|
1714
|
-
i0.ɵɵconditional(ctx_r1.record.ExecutionOrder !== null ?
|
|
1803
|
+
i0.ɵɵconditional(ctx_r1.record.ExecutionOrder !== null ? 87 : -1);
|
|
1715
1804
|
i0.ɵɵadvance();
|
|
1716
|
-
i0.ɵɵconditional(ctx_r1.record.AgentID ?
|
|
1805
|
+
i0.ɵɵconditional(ctx_r1.record.AgentID ? 88 : -1);
|
|
1717
1806
|
i0.ɵɵadvance();
|
|
1718
|
-
i0.ɵɵconditional(ctx_r1.record && (ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 0 || ctx_r1.record.ValidationBehavior) ?
|
|
1807
|
+
i0.ɵɵconditional(ctx_r1.record && (ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 0 || ctx_r1.record.ValidationBehavior) ? 89 : -1);
|
|
1719
1808
|
i0.ɵɵadvance();
|
|
1720
|
-
i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ?
|
|
1809
|
+
i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ? 90 : -1);
|
|
1721
1810
|
i0.ɵɵadvance();
|
|
1722
1811
|
i0.ɵɵproperty("Expanded", false);
|
|
1723
1812
|
i0.ɵɵadvance(4);
|
|
1724
|
-
i0.ɵɵconditional(ctx_r1.record.AgentID ?
|
|
1813
|
+
i0.ɵɵconditional(ctx_r1.record.AgentID ? 95 : -1);
|
|
1725
1814
|
i0.ɵɵadvance();
|
|
1726
|
-
i0.ɵɵconditional(ctx_r1.record.RunType ?
|
|
1815
|
+
i0.ɵɵconditional(ctx_r1.record.RunType ? 96 : -1);
|
|
1727
1816
|
i0.ɵɵadvance();
|
|
1728
|
-
i0.ɵɵconditional(ctx_r1.record.ResponseFormat ?
|
|
1817
|
+
i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 97 : -1);
|
|
1729
1818
|
i0.ɵɵadvance(4);
|
|
1730
1819
|
i0.ɵɵclassProp("null-value", ctx_r1.record.Temperature === null || ctx_r1.record.Temperature === undefined);
|
|
1731
1820
|
i0.ɵɵadvance(2);
|
|
@@ -1763,11 +1852,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
|
|
|
1763
1852
|
i0.ɵɵadvance(2);
|
|
1764
1853
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.AssistantPrefill || "\u2014", " ");
|
|
1765
1854
|
i0.ɵɵadvance();
|
|
1766
|
-
i0.ɵɵconditional(ctx_r1.record.RunAt ?
|
|
1855
|
+
i0.ɵɵconditional(ctx_r1.record.RunAt ? 152 : -1);
|
|
1767
1856
|
i0.ɵɵadvance();
|
|
1768
|
-
i0.ɵɵconditional(ctx_r1.record.CompletedAt ?
|
|
1857
|
+
i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 153 : -1);
|
|
1769
1858
|
i0.ɵɵadvance();
|
|
1770
|
-
i0.ɵɵconditional(ctx_r1.record.ModelSpecificResponseDetails ?
|
|
1859
|
+
i0.ɵɵconditional(ctx_r1.record.ModelSpecificResponseDetails ? 154 : -1);
|
|
1771
1860
|
i0.ɵɵadvance();
|
|
1772
1861
|
i0.ɵɵproperty("Expanded", false);
|
|
1773
1862
|
i0.ɵɵadvance(9);
|
|
@@ -1783,11 +1872,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
|
|
|
1783
1872
|
i0.ɵɵadvance();
|
|
1784
1873
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CacheHit ? "Yes" : "No", " ");
|
|
1785
1874
|
i0.ɵɵadvance();
|
|
1786
|
-
i0.ɵɵconditional(ctx_r1.record.CacheKey ?
|
|
1875
|
+
i0.ɵɵconditional(ctx_r1.record.CacheKey ? 183 : -1);
|
|
1787
1876
|
i0.ɵɵadvance();
|
|
1788
|
-
i0.ɵɵconditional(ctx_r1.record.JudgeID ?
|
|
1877
|
+
i0.ɵɵconditional(ctx_r1.record.JudgeID ? 184 : -1);
|
|
1789
1878
|
i0.ɵɵadvance();
|
|
1790
|
-
i0.ɵɵconditional(ctx_r1.record.JudgeScore !== null ?
|
|
1879
|
+
i0.ɵɵconditional(ctx_r1.record.JudgeScore !== null ? 185 : -1);
|
|
1791
1880
|
i0.ɵɵadvance(5);
|
|
1792
1881
|
i0.ɵɵclassMap(ctx_r1.record.WasSelectedResult ? "fa-solid fa-trophy" : "fa-solid fa-times");
|
|
1793
1882
|
i0.ɵɵadvance();
|
|
@@ -1797,36 +1886,36 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
|
|
|
1797
1886
|
i0.ɵɵadvance();
|
|
1798
1887
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.StreamingEnabled ? "Yes" : "No", " ");
|
|
1799
1888
|
i0.ɵɵadvance();
|
|
1800
|
-
i0.ɵɵconditional(ctx_r1.record.FirstTokenTime !== null ?
|
|
1889
|
+
i0.ɵɵconditional(ctx_r1.record.FirstTokenTime !== null ? 198 : -1);
|
|
1801
1890
|
i0.ɵɵadvance();
|
|
1802
|
-
i0.ɵɵconditional(ctx_r1.record.Cancelled ?
|
|
1891
|
+
i0.ɵɵconditional(ctx_r1.record.Cancelled ? 199 : -1);
|
|
1803
1892
|
i0.ɵɵadvance();
|
|
1804
|
-
i0.ɵɵconditional(ctx_r1.record.ModelSelection ?
|
|
1893
|
+
i0.ɵɵconditional(ctx_r1.record.ModelSelection ? 200 : -1);
|
|
1805
1894
|
i0.ɵɵadvance();
|
|
1806
|
-
i0.ɵɵconditional(ctx_r1.record.ErrorDetails ?
|
|
1895
|
+
i0.ɵɵconditional(ctx_r1.record.ErrorDetails ? 201 : -1);
|
|
1807
1896
|
} }
|
|
1808
1897
|
function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1809
1898
|
const _r25 = i0.ɵɵgetCurrentView();
|
|
1810
|
-
i0.ɵɵelementStart(0, "div",
|
|
1899
|
+
i0.ɵɵelementStart(0, "div", 187);
|
|
1811
1900
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeFullScreen()); });
|
|
1812
|
-
i0.ɵɵelementStart(1, "div",
|
|
1901
|
+
i0.ɵɵelementStart(1, "div", 188);
|
|
1813
1902
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r25); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
1814
|
-
i0.ɵɵelementStart(2, "div",
|
|
1815
|
-
i0.ɵɵelement(4, "i",
|
|
1903
|
+
i0.ɵɵelementStart(2, "div", 189)(3, "span", 190);
|
|
1904
|
+
i0.ɵɵelement(4, "i", 106);
|
|
1816
1905
|
i0.ɵɵtext(5);
|
|
1817
1906
|
i0.ɵɵelementEnd();
|
|
1818
|
-
i0.ɵɵelementStart(6, "div",
|
|
1907
|
+
i0.ɵɵelementStart(6, "div", 191)(7, "button", 192);
|
|
1819
1908
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.FullScreenContent, ctx_r1.FullScreenTitle)); });
|
|
1820
|
-
i0.ɵɵelement(8, "i",
|
|
1909
|
+
i0.ɵɵelement(8, "i", 104);
|
|
1821
1910
|
i0.ɵɵtext(9, " Copy ");
|
|
1822
1911
|
i0.ɵɵelementEnd();
|
|
1823
|
-
i0.ɵɵelementStart(10, "button",
|
|
1912
|
+
i0.ɵɵelementStart(10, "button", 193);
|
|
1824
1913
|
i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeFullScreen()); });
|
|
1825
|
-
i0.ɵɵelement(11, "i",
|
|
1914
|
+
i0.ɵɵelement(11, "i", 194);
|
|
1826
1915
|
i0.ɵɵtext(12, " Close ");
|
|
1827
1916
|
i0.ɵɵelementEnd()()();
|
|
1828
|
-
i0.ɵɵelementStart(13, "div",
|
|
1829
|
-
i0.ɵɵelement(14, "mj-code-editor",
|
|
1917
|
+
i0.ɵɵelementStart(13, "div", 195);
|
|
1918
|
+
i0.ɵɵelement(14, "mj-code-editor", 196);
|
|
1830
1919
|
i0.ɵɵelementEnd()()();
|
|
1831
1920
|
} if (rf & 2) {
|
|
1832
1921
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -2174,6 +2263,31 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
|
|
|
2174
2263
|
return '-';
|
|
2175
2264
|
return tokens.toLocaleString();
|
|
2176
2265
|
}
|
|
2266
|
+
/**
|
|
2267
|
+
* Total tokens the provider actually processed = uncached (TokensUsed = prompt+completion) PLUS
|
|
2268
|
+
* the cache buckets. TokensUsed alone excludes cache by design, so a heavily-cached run looks
|
|
2269
|
+
* tiny; this is the real throughput figure for the headline. Equals TokensUsed when no caching.
|
|
2270
|
+
*/
|
|
2271
|
+
get TotalTokensProcessed() {
|
|
2272
|
+
const r = this.record;
|
|
2273
|
+
if (!r)
|
|
2274
|
+
return 0;
|
|
2275
|
+
return (r.TokensUsed ?? 0) + (r.TokensCacheRead ?? 0) + (r.TokensCacheWrite ?? 0);
|
|
2276
|
+
}
|
|
2277
|
+
/** Sum of cache read + write tokens for this run (the cached portion of TotalTokensProcessed). */
|
|
2278
|
+
get CachedTokens() {
|
|
2279
|
+
const r = this.record;
|
|
2280
|
+
if (!r)
|
|
2281
|
+
return 0;
|
|
2282
|
+
return (r.TokensCacheRead ?? 0) + (r.TokensCacheWrite ?? 0);
|
|
2283
|
+
}
|
|
2284
|
+
/** Percentage of this run's input tokens served from the provider's prompt cache. */
|
|
2285
|
+
get CacheHitRatePct() {
|
|
2286
|
+
const read = this.record?.TokensCacheRead ?? 0;
|
|
2287
|
+
const write = this.record?.TokensCacheWrite ?? 0;
|
|
2288
|
+
const totalInput = (this.record?.TokensPrompt ?? 0) + read + write;
|
|
2289
|
+
return totalInput > 0 ? (read / totalInput) * 100 : 0;
|
|
2290
|
+
}
|
|
2177
2291
|
getRunTypeIcon(runType) {
|
|
2178
2292
|
switch (runType) {
|
|
2179
2293
|
case 'Single':
|
|
@@ -2316,14 +2430,14 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
|
|
|
2316
2430
|
// Don't auto-expand validation panel anymore - let user expand when needed
|
|
2317
2431
|
}
|
|
2318
2432
|
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJAIPromptRunFormComponentExtended_BaseFactory; return function MJAIPromptRunFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJAIPromptRunFormComponentExtended_BaseFactory || (ɵMJAIPromptRunFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJAIPromptRunFormComponentExtended)))(__ngFactoryType__ || MJAIPromptRunFormComponentExtended); }; })(); }
|
|
2319
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [["form", "ngForm"], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "fullscreen-overlay"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "prompt-run-header"], [1, "header-content"], [1, "run-overview"], [1, "run-icon-wrapper"], [1, "run-info"], [1, "run-title"], [1, "run-id"], [1, "run-meta"], [1, "meta-card", "status-card"], [1, "c3-card-label"], [1, "meta-card-body"], [1, "status-indicator"], [1, "meta-card", "execution-card"], [1, "model-card-c3"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "form-content", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "panel-content"], [1, "nested-panels"], [1, "empty-state"], [1, "error-message"], [1, "json-editor-container"], [1, "metrics-grid"], [1, "metric-card"], [1, "metric-header"], [1, "fa-solid", "fa-message"], [1, "metric-value", "large"], [1, "metric-rollup"], [1, "fa-solid", "fa-reply"], [1, "fa-solid", "fa-coins"], [1, "fa-solid", "fa-dollar-sign"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [2, "margin-bottom", "8px", 3, "Expanded"], [1, "detail-fields-grid"], [1, "detail-field"], [1, "detail-value"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-repeat"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], [1, "fa-solid", "fa-stop-circle"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-strategy"], [1, "fa-solid", "fa-ranking-star"], [1, "detail-field", "full-width"], [1, "model-selection-json"], [1, "error-details-json"], [1, "prompt-card-c3"], [1, "meta-card", "prompt-single-card"], ["title", "View Agent Prompt", 1, "c3-child-section", 3, "click"], [1, "fa-solid", "fa-comment", "prompt-icon"], [1, "c3-divider"], [1, "c3-line"], [1, "c3-divider-label"], ["title", "View System Prompt", 1, "c3-parent-section", 3, "click"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-arrow-up-right-from-square", "c3-link-icon"], ["title", "View Prompt", 1, "meta-card-body", "clickable", 3, "click"], [1, "fa-solid", "fa-comment-dots", 2, "color", "var(--mj-brand-primary)"], ["title", "View Model", 1, "c3-card-body", 3, "click"], [1, "c3-model-name"], [1, "fa-solid", "fa-microchip"], [1, "c3-vendor-name"], [1, "fa-solid", "fa-level-up-alt"], [1, "original-link", 3, "click"], [1, "metric-item"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], ["href", "javascript:void(0)", 1, "config-link", 3, "click"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-tachometer-alt"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "fa-solid", "fa-comment-dots"], [1, "panel-badge"], [1, "sub-expansion-panel", 2, "margin-bottom", "8px", 3, "Expanded"], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], [1, "json-toolbar"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View full screen", 3, "click"], [1, "fa-solid", "fa-expand"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "sub-panel-title"], [1, "fa-solid", "fa-comments"], [1, "panel-count"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-comment-slash"], [1, "fa-solid", "fa-database"], ["name", "formattedData", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], ["name", "formattedResult", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-inbox"], [1, "error-info"], [1, "finish-reason"], [1, "error-details"], [1, "error-hint"], [2, "margin", "0"], [2, "height", "200px", "width", "100%", 3, "ngModel", "disabled", "language", "lineWrapping"], [1, "fa-solid", "fa-chart-line"], [1, "fa-solid", "fa-hourglass-start"], [1, "fa-solid", "fa-brain"], [1, "fa-solid", "fa-flag-checkered"], [1, "metric-value", "link", 3, "click"], [1, "fa-solid", "fa-external-link"], [1, "validation-summary"], [1, "summary-header"], [1, "validation-status"], [1, "validation-metrics"], [1, "metric-card", "small"], [1, "validation-error"], [1, "common-error"], [1, "retry-timeline"], [1, "validation-attempts"], [1, "validation-json"], [1, "fa-solid", "fa-shield-check"], [1, "panel-badge", "success"], [1, "error-count"], [1, "timeline-info"], [1, "timeline-stat"], [1, "fa-solid", "fa-stopwatch"], [1, "attempts-list"], [1, "attempt-item", 3, "success", "failed"], [1, "attempt-item"], [1, "attempt-number"], [1, "attempt-details"], [1, "attempt-time"], [1, "output-length"], [1, "attempt-error"], [1, "json-viewer-container"], ["name", "formattedValidationSummary", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedValidationAttempts", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "parent-run-section"], [1, "child-runs-section"], [1, "fa-solid", "fa-sitemap"], [1, "run-item", "parent", 3, "click"], [1, "run-item-icon"], [1, "run-item-content"], [1, "run-item-title"], [1, "run-item-type"], [1, "run-item-meta"], [1, "fa-solid", "fa-level-down-alt"], [1, "runs-list"], [1, "run-item", "child"], [1, "run-item", "child", 3, "click"], [1, "execution-order"], ["title", "View Agent", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-check-circle"], ["name", "formattedModelSpecificResponseDetails", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-key"], ["title", "View Judge Prompt", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-gavel"], [1, "fa-solid", "fa-star"], [1, "
|
|
2320
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Template,
|
|
2433
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [["form", "ngForm"], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "fullscreen-overlay"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "prompt-run-header"], [1, "header-content"], [1, "run-overview"], [1, "run-icon-wrapper"], [1, "run-info"], [1, "run-title"], [1, "run-id"], [1, "run-meta"], [1, "meta-card", "status-card"], [1, "c3-card-label"], [1, "meta-card-body"], [1, "status-indicator"], [1, "meta-card", "execution-card"], [1, "model-card-c3"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "form-content", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "panel-content"], [1, "nested-panels"], [1, "empty-state"], [1, "error-message"], [1, "json-editor-container"], [1, "metrics-grid"], [1, "metric-card"], [1, "metric-header"], [1, "fa-solid", "fa-message"], [1, "metric-value", "large"], [1, "metric-rollup"], [1, "fa-solid", "fa-reply"], [1, "fa-solid", "fa-coins"], ["title", "Prompt + completion + cached tokens \u2014 the full amount the model processed", 1, "metric-value", "large"], [1, "fa-solid", "fa-dollar-sign"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [2, "margin-bottom", "8px", 3, "Expanded"], [1, "detail-fields-grid"], [1, "detail-field"], [1, "detail-value"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-repeat"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], [1, "fa-solid", "fa-stop-circle"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-strategy"], [1, "fa-solid", "fa-ranking-star"], [1, "detail-field", "full-width"], [1, "model-selection-json"], [1, "error-details-json"], [1, "prompt-card-c3"], [1, "meta-card", "prompt-single-card"], ["title", "View Agent Prompt", 1, "c3-child-section", 3, "click"], [1, "fa-solid", "fa-comment", "prompt-icon"], [1, "c3-divider"], [1, "c3-line"], [1, "c3-divider-label"], ["title", "View System Prompt", 1, "c3-parent-section", 3, "click"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-arrow-up-right-from-square", "c3-link-icon"], ["title", "View Prompt", 1, "meta-card-body", "clickable", 3, "click"], [1, "fa-solid", "fa-comment-dots", 2, "color", "var(--mj-brand-primary)"], ["title", "View Model", 1, "c3-card-body", 3, "click"], [1, "c3-model-name"], [1, "fa-solid", "fa-microchip"], [1, "c3-vendor-name"], [1, "fa-solid", "fa-level-up-alt"], [1, "original-link", 3, "click"], [1, "metric-item"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], ["href", "javascript:void(0)", 1, "config-link", 3, "click"], [1, "fa-solid", "fa-clock"], ["title", "Total tokens the model processed, including cached input", 1, "metric-item"], [1, "fa-solid", "fa-tachometer-alt"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-bolt"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "fa-solid", "fa-comment-dots"], [1, "panel-badge"], [1, "sub-expansion-panel", 2, "margin-bottom", "8px", 3, "Expanded"], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], [1, "json-toolbar"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View full screen", 3, "click"], [1, "fa-solid", "fa-expand"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "sub-panel-title"], [1, "fa-solid", "fa-comments"], [1, "panel-count"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-comment-slash"], [1, "fa-solid", "fa-database"], ["name", "formattedData", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], ["name", "formattedResult", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-inbox"], [1, "error-info"], [1, "finish-reason"], [1, "error-details"], [1, "error-hint"], [2, "margin", "0"], [2, "height", "200px", "width", "100%", 3, "ngModel", "disabled", "language", "lineWrapping"], [1, "fa-solid", "fa-chart-line"], [1, "fa-solid", "fa-hourglass-start"], [1, "fa-solid", "fa-brain"], [1, "fa-solid", "fa-flag-checkered"], [1, "metric-value", "link", 3, "click"], [1, "fa-solid", "fa-external-link"], [1, "validation-summary"], [1, "summary-header"], [1, "validation-status"], [1, "validation-metrics"], [1, "metric-card", "small"], [1, "validation-error"], [1, "common-error"], [1, "retry-timeline"], [1, "validation-attempts"], [1, "validation-json"], [1, "fa-solid", "fa-shield-check"], [1, "panel-badge", "success"], [1, "error-count"], [1, "timeline-info"], [1, "timeline-stat"], [1, "fa-solid", "fa-stopwatch"], [1, "attempts-list"], [1, "attempt-item", 3, "success", "failed"], [1, "attempt-item"], [1, "attempt-number"], [1, "attempt-details"], [1, "attempt-time"], [1, "output-length"], [1, "attempt-error"], [1, "json-viewer-container"], ["name", "formattedValidationSummary", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedValidationAttempts", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "parent-run-section"], [1, "child-runs-section"], [1, "fa-solid", "fa-sitemap"], [1, "run-item", "parent", 3, "click"], [1, "run-item-icon"], [1, "run-item-content"], [1, "run-item-title"], [1, "run-item-type"], [1, "run-item-meta"], [1, "fa-solid", "fa-level-down-alt"], [1, "runs-list"], [1, "run-item", "child"], [1, "run-item", "child", 3, "click"], [1, "execution-order"], ["title", "View Agent", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-check-circle"], ["name", "formattedModelSpecificResponseDetails", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-key"], ["title", "View Judge Prompt", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-gavel"], [1, "fa-solid", "fa-star"], [1, "detail-value", "error"], [1, "fa-solid", "fa-ban"], [1, "fa-solid", "fa-exclamation-circle"], ["name", "formattedModelSelection", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedErrorDetails", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fullscreen-overlay", 3, "click"], [1, "fullscreen-container", 3, "click"], [1, "fullscreen-header"], [1, "fullscreen-title"], [1, "fullscreen-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy content", 3, "click"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fullscreen-body"], [2, "height", "100%", "width", "100%", 3, "value", "readonly", "language"]], template: function MJAIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
2434
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Template, 202, 103, "mj-record-form-container", 1);
|
|
2321
2435
|
i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_1_Template, 15, 4, "div", 2);
|
|
2322
2436
|
} if (rf & 2) {
|
|
2323
2437
|
i0.ɵɵconditional(ctx.record ? 0 : -1);
|
|
2324
2438
|
i0.ɵɵadvance();
|
|
2325
2439
|
i0.ɵɵconditional(ctx.FullScreenContent ? 1 : -1);
|
|
2326
|
-
} }, dependencies: [i1.ɵNgNoValidate, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ChatMessageViewerComponent, i6.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n\n\n.error-info[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.error-details[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint[_ngcontent-%COMP%] {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n\n\n.prompt-run-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.run-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n\n\n.meta-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n.status-indicator[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n\n\n.prompt-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section[_ngcontent-%COMP%] i.prompt-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line[_ngcontent-%COMP%] {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label[_ngcontent-%COMP%] {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.c3-link-icon[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover .c3-link-icon[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n\n\n.model-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label[_ngcontent-%COMP%] {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name[_ngcontent-%COMP%] {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n\n\n.sub-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n\n\n.nested-panels[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-panel-content[_ngcontent-%COMP%] mj-chat-message-viewer[_ngcontent-%COMP%] {\n display: block;\n min-height: 200px;\n max-height: 750px; \n\n height: auto;\n overflow: hidden;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n\n\n.json-editor-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.metrics-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n\n\n.additional-metrics[_ngcontent-%COMP%] {\n padding-top: 16px;\n}\n\n.metric-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n\n\n.parent-run-section[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.parent-run-section[_ngcontent-%COMP%]:last-child, \n.child-runs-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n\n\n.detail-fields-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%]:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n opacity: 0.5;\n}\n\n\n\nmj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n}\n\n\n\n.validation-summary[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.summary-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n\n\n.retry-timeline[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.retry-timeline[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n\n\n.validation-attempts[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.validation-attempts[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.attempt-details[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.attempt-error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n\n\n.validation-json[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.validation-json[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n\n.panel-badge.success[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: white;\n}\n\n\n\n.fullscreen-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}"], changeDetection: 0 }); }
|
|
2440
|
+
} }, dependencies: [i1.ɵNgNoValidate, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ChatMessageViewerComponent, i6.DecimalPipe, i6.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n\n\n.error-info[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.error-details[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint[_ngcontent-%COMP%] {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n\n\n.prompt-run-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.run-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n\n\n.meta-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n.status-indicator[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n\n\n.prompt-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section[_ngcontent-%COMP%] i.prompt-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line[_ngcontent-%COMP%] {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label[_ngcontent-%COMP%] {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.c3-link-icon[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover .c3-link-icon[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n\n\n.model-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label[_ngcontent-%COMP%] {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name[_ngcontent-%COMP%] {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n\n\n.sub-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n\n\n.nested-panels[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-panel-content[_ngcontent-%COMP%] mj-chat-message-viewer[_ngcontent-%COMP%] {\n display: block;\n min-height: 200px;\n max-height: 750px; \n\n height: auto;\n overflow: hidden;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n\n\n.json-editor-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.metrics-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n\n\n.additional-metrics[_ngcontent-%COMP%] {\n padding-top: 16px;\n}\n\n.metric-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n\n\n.parent-run-section[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.parent-run-section[_ngcontent-%COMP%]:last-child, \n.child-runs-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n\n\n.detail-fields-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%]:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n opacity: 0.5;\n}\n\n\n\nmj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n}\n\n\n\n.validation-summary[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.summary-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n\n\n.retry-timeline[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.retry-timeline[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n\n\n.validation-attempts[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.validation-attempts[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.attempt-details[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.attempt-error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n\n\n.validation-json[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.validation-json[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n\n.panel-badge.success[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: white;\n}\n\n\n\n.fullscreen-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}"], changeDetection: 0 }); }
|
|
2327
2441
|
};
|
|
2328
2442
|
MJAIPromptRunFormComponentExtended = __decorate([
|
|
2329
2443
|
RegisterClass(BaseFormComponent, 'MJ: AI Prompt Runs')
|
|
@@ -2331,7 +2445,7 @@ MJAIPromptRunFormComponentExtended = __decorate([
|
|
|
2331
2445
|
export { MJAIPromptRunFormComponentExtended };
|
|
2332
2446
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptRunFormComponentExtended, [{
|
|
2333
2447
|
type: Component,
|
|
2334
|
-
args: [{ standalone: false, selector: 'mj-ai-prompt-run-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <!-- Status Card -->\n <div class=\"meta-card status-card\">\n <div class=\"c3-card-label\">Status</div>\n <div class=\"meta-card-body\">\n <span class=\"status-indicator\" [style.background-color]=\"getStatusColor()\"></span>\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n {{ getStatusText() }}\n </div>\n </div>\n\n <!-- Execution Card -->\n @if (record.RunType) {\n <div class=\"meta-card execution-card\">\n <div class=\"c3-card-label\">Execution</div>\n <div class=\"meta-card-body\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\" [style.color]=\"getRunTypeColor(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n\n <!-- Prompt Card -->\n @if (prompt) {\n @if (record.ChildPromptID) {\n <!-- C3 Stacked Connector: child prompt prominent, parent nested -->\n <div class=\"prompt-card-c3\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"c3-child-section\" (click)=\"navigateToEntity('MJ: AI Prompts', record.ChildPromptID)\" title=\"View Agent Prompt\">\n <i class=\"fa-solid fa-comment prompt-icon\"></i>\n {{ record.ChildPrompt }}\n </div>\n <div class=\"c3-divider\">\n <span class=\"c3-line\"></span>\n <span class=\"c3-divider-label\">wrapped by</span>\n <span class=\"c3-line\"></span>\n </div>\n <div class=\"c3-parent-section\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View System Prompt\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ prompt.Name }}\n <i class=\"fa-solid fa-arrow-up-right-from-square c3-link-icon\"></i>\n </div>\n </div>\n } @else {\n <!-- Single prompt (no child) \u2014 same card style -->\n <div class=\"meta-card prompt-single-card\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"meta-card-body clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ prompt.Name }}\n </div>\n </div>\n }\n }\n\n <!-- Model Card -->\n @if (model) {\n <div class=\"model-card-c3\">\n <div class=\"c3-card-label\">Model</div>\n <div class=\"c3-card-body\" (click)=\"navigateToEntity('MJ: AI Models', model.ID)\" title=\"View Model\">\n <span class=\"c3-model-name\"><i class=\"fa-solid fa-microchip\"></i> {{ model.Name }}</span>\n @if (record.Vendor) {\n <span class=\"c3-vendor-name\">{{ record.Vendor }}</span>\n }\n </div>\n </div>\n }\n @if (record.RerunFromPromptRunID) {\n <span class=\"original-run\" title=\"View Original Run\">\n <i class=\"fa-solid fa-level-up-alt\"></i>\n <a (click)=\"navigateToOriginalRun()\" class=\"original-link\">Original Run</a>\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n @if (record.ConfigurationID) {\n <!-- Configuration Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-cog\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Configuration</div>\n <div class=\"metric-value\">\n <a href=\"javascript:void(0)\" class=\"config-link\" (click)=\"navigateToEntity('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n @if (record.Temperature !== null && record.Temperature !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Temperature</div>\n <div class=\"metric-value\">{{ record.Temperature }}</div>\n </div>\n </div>\n }\n @if (record.TopP !== null && record.TopP !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-percentage\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top P</div>\n <div class=\"metric-value\">{{ record.TopP }}</div>\n </div>\n </div>\n }\n @if (record.TopK !== null && record.TopK !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-list-ol\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top K</div>\n <div class=\"metric-value\">{{ record.TopK }}</div>\n </div>\n </div>\n }\n @if (record.EffortLevel !== null && record.EffortLevel !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Effort Level</div>\n <div class=\"metric-value\">{{ record.EffortLevel }}</div>\n </div>\n </div>\n }\n @if (record.ResponseFormat) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-code\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Response Format</div>\n <div class=\"metric-value\">{{ record.ResponseFormat }}</div>\n </div>\n </div>\n }\n </div>\n \n <!-- Execution Metrics Bar (always show when configuration exists) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensUsed) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n } @else {\n <!-- Execution Metrics Bar (original behavior when no configuration) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensUsed) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n\n <!-- Input Panel with nested sub-panels -->\n <mj-accordion-panel [Expanded]=\"inputExpanded\" (ExpandedChange)=\"onInputPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <!-- Nested expansion panels for sub-sections -->\n <div class=\"nested-panels\">\n <!-- Messages Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"messagesExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Messages\n @if (chatMessages.length > 0) {\n <span class=\"panel-count\">({{ chatMessages.length }})</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (isParsingMessages || isLoadingRelatedData) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading messages...</p>\n </div>\n } @else if (chatMessages.length > 0) {\n <mj-chat-message-viewer \n [messages]=\"chatMessages\">\n </mj-chat-message-viewer>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No chat messages found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Data Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"dataExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-database\"></i>\n Data\n @if (inputData) {\n <span class=\"panel-badge\">Object</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (inputData && formattedData) {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedData, 'json', 'Data')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedData\"\n name=\"formattedData\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No data object found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Raw Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"rawExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Raw\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedMessages, 'json', 'Raw Messages')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessages\"\n name=\"formattedMessages\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n \n <!-- Result Panel -->\n <mj-accordion-panel [Expanded]=\"resultExpanded\" (ExpandedChange)=\"onResultPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedResult, 'json', 'Result')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedResult\"\n name=\"formattedResult\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (!record.ErrorMessage) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No result data recorded</p>\n @if (record.CompletedAt && (record.Status === 'Failed' || record.Success === false)) {\n <div class=\"error-info\">\n @if (record.Status) {\n <p class=\"finish-reason\">\n <strong>Status:</strong> {{ record.Status }}\n </p>\n }\n @if (formattedErrorDetails) {\n <div class=\"error-details\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor\n [ngModel]=\"formattedErrorDetails\"\n [disabled]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (!formattedErrorDetails) {\n <p class=\"error-hint\">\n The prompt execution failed but no additional error information is available.\n </p>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Token Usage & Metrics Panel -->\n <mj-accordion-panel [Expanded]=\"metricsExpanded\" (ExpandedChange)=\"onMetricsPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage & Metrics\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensPrompt) }}</div>\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensUsed) }}</div>\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n \n <!-- Timing Metrics -->\n @if (record.QueueTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-hourglass-start\"></i>\n <h4>Queue Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.QueueTime) }}</div>\n </div>\n }\n \n @if (record.PromptTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>Prompt Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.PromptTime) }}</div>\n </div>\n }\n \n @if (record.CompletionTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <h4>Completion Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.CompletionTime) }}</div>\n </div>\n }\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <mj-accordion-panel [Expanded]=\"validationExpanded\" (ExpandedChange)=\"onValidationPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation & Retries\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <span class=\"panel-count\">({{ record.ValidationAttemptCount }} attempts)</span>\n }\n @if (record.FinalValidationPassed) {\n <span class=\"panel-badge success\">Passed</span>\n } @else if (record.FinalValidationPassed === false) {\n <span class=\"panel-badge error\">Failed</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <!-- Validation Summary -->\n <div class=\"validation-summary\">\n <div class=\"summary-header\">\n <h4>Validation Summary</h4>\n <div class=\"validation-status\" [class.success]=\"record.FinalValidationPassed === true\" [class.failed]=\"record.FinalValidationPassed === false\">\n <i [class]=\"record.FinalValidationPassed === true ? 'fa-solid fa-check-circle' : (record.FinalValidationPassed === false ? 'fa-solid fa-times-circle' : 'fa-solid fa-hourglass-half')\"></i>\n {{ record.FinalValidationPassed === true ? 'Validation Passed' : (record.FinalValidationPassed === false ? 'Validation Failed' : 'Validation Pending') }}\n </div>\n </div>\n \n <div class=\"validation-metrics\">\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Total Attempts</div>\n <div class=\"metric-value\">{{ record.ValidationAttemptCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Successful</div>\n <div class=\"metric-value\">{{ record.SuccessfulValidationCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Behavior</div>\n <div class=\"metric-value\">{{ record.ValidationBehavior || 'Not set' }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Retry Strategy</div>\n <div class=\"metric-value\">{{ record.RetryStrategy || 'Not set' }}</div>\n </div>\n </div>\n \n @if (record.FinalValidationError) {\n <div class=\"validation-error\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Final Validation Error</h5>\n <p>{{ record.FinalValidationError }}</p>\n @if (record && record.ValidationErrorCount && record.ValidationErrorCount > 0) {\n <span class=\"error-count\">{{ record.ValidationErrorCount }} validation errors</span>\n }\n </div>\n }\n \n @if (record.CommonValidationError && record.CommonValidationError !== record.FinalValidationError) {\n <div class=\"common-error\">\n <h5><i class=\"fa-solid fa-repeat\"></i> Most Common Error</h5>\n <p>{{ record.CommonValidationError }}</p>\n </div>\n }\n </div>\n \n <!-- Retry Timeline -->\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <div class=\"retry-timeline\">\n <h4>Retry Timeline</h4>\n <div class=\"timeline-info\">\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>First Attempt: {{ record.FirstAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <span>Last Attempt: {{ record.LastAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span>Total Retry Duration: {{ formatDuration(record.TotalRetryDurationMS) }}</span>\n </div>\n </div>\n </div>\n }\n \n <!-- Validation Attempts Details -->\n @if (validationAttempts && validationAttempts.length > 0) {\n <div class=\"validation-attempts\">\n <h4>Validation Attempts</h4>\n <div class=\"attempts-list\">\n @for (attempt of validationAttempts; track attempt.attemptNumber) {\n <div class=\"attempt-item\" [class.success]=\"attempt.success\" [class.failed]=\"!attempt.success\">\n <div class=\"attempt-number\">\n <i [class]=\"attempt.success ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n Attempt #{{ attempt.attemptNumber }}\n </div>\n <div class=\"attempt-details\">\n <span class=\"attempt-time\">{{ attempt.timestamp }}</span>\n @if (!attempt.success) {\n <span class=\"attempt-error\">{{ attempt.errorMessage || 'Unknown error' }}</span>\n @if (attempt.validationErrorCount > 0) {\n <span class=\"error-count\">({{ attempt.validationErrorCount }} errors)</span>\n }\n }\n @if (attempt.outputLength) {\n <span class=\"output-length\">Output: {{ attempt.outputLength }} chars</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Validation Summary JSON -->\n @if (validationSummary) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Summary Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationSummary, 'json', 'Validation Summary')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationSummary\"\n name=\"formattedValidationSummary\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Validation Attempts JSON -->\n @if (record.ValidationAttempts) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Attempts (Raw JSON)</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationAttempts, 'json', 'Validation Attempts')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationAttempts\"\n name=\"formattedValidationAttempts\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <mj-accordion-panel [Expanded]=\"hierarchyExpanded\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Run Hierarchy\n @if (childRuns.length > 0) {\n <span class=\"panel-count\">({{ childRuns.length }} children)</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (parentRun) {\n <div class=\"parent-run-section\">\n <h4><i class=\"fa-solid fa-level-up-alt\"></i> Parent Run</h4>\n <div class=\"run-item parent\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', parentRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(parentRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Parent Run #{{ parentRun.ID.substring(0, 8) }}\n <span class=\"run-item-type\">{{ parentRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(parentRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(parentRun.TokensUsed) }}</span>\n <span><i class=\"fa-solid fa-calendar\"></i> {{ parentRun.RunAt | date:'short' }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (childRuns.length > 0) {\n <div class=\"child-runs-section\">\n <h4><i class=\"fa-solid fa-level-down-alt\"></i> Child Runs</h4>\n <div class=\"runs-list\">\n @for (childRun of childRuns; track childRun.ID) {\n <div class=\"run-item child\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', childRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(childRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Child Run #{{ childRun.ID.substring(0, 8) }}\n @if (childRun.ExecutionOrder !== null) {\n <span class=\"execution-order\">#{{ childRun.ExecutionOrder }}</span>\n }\n <span class=\"run-item-type\">{{ childRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span class=\"status-indicator\" [style.color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ childRun.Success ? 'Success' : childRun.ErrorMessage ? 'Failed' : 'Running' }}\n </span>\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(childRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(childRun.TokensUsed) }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Additional Details Panel -->\n <mj-accordion-panel [Expanded]=\"false\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\" title=\"View Agent\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ record.Agent || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n \n @if (record.RunType) {\n <div class=\"detail-field\">\n <label>Run Type</label>\n <div class=\"detail-value\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n \n @if (record.ResponseFormat) {\n <div class=\"detail-field\">\n <label>Response Format</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-code\"></i>\n {{ record.ResponseFormat }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Temperature</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Temperature === null || record.Temperature === undefined\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n {{ record.Temperature !== null && record.Temperature !== undefined ? record.Temperature : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopP === null || record.TopP === undefined\">\n <i class=\"fa-solid fa-percentage\"></i>\n {{ record.TopP !== null && record.TopP !== undefined ? record.TopP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top K</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopK === null || record.TopK === undefined\">\n <i class=\"fa-solid fa-list-ol\"></i>\n {{ record.TopK !== null && record.TopK !== undefined ? record.TopK : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Min P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.MinP === null || record.MinP === undefined\">\n <i class=\"fa-solid fa-filter\"></i>\n {{ record.MinP !== null && record.MinP !== undefined ? record.MinP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Frequency Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.FrequencyPenalty === null || record.FrequencyPenalty === undefined\">\n <i class=\"fa-solid fa-repeat\"></i>\n {{ record.FrequencyPenalty !== null && record.FrequencyPenalty !== undefined ? record.FrequencyPenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Presence Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.PresencePenalty === null || record.PresencePenalty === undefined\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n {{ record.PresencePenalty !== null && record.PresencePenalty !== undefined ? record.PresencePenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Seed</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Seed === null || record.Seed === undefined\">\n <i class=\"fa-solid fa-seedling\"></i>\n {{ record.Seed !== null && record.Seed !== undefined ? record.Seed : '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Stop Sequences</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.StopSequences\">\n <i class=\"fa-solid fa-stop-circle\"></i>\n {{ record.StopSequences || '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Assistant Prefill</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.AssistantPrefill\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ record.AssistantPrefill || '\u2014' }}\n </div>\n </div>\n\n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <mj-accordion-panel [Expanded]=\"modelSpecificExpanded\" (ExpandedChange)=\"onModelSpecificPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Specific Response Details\n <span class=\"panel-badge\">JSON</span>\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSpecificResponseDetails, 'json', 'Model Specific Response Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedModelSpecificResponseDetails\"\n name=\"formattedModelSpecificResponseDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <mj-accordion-panel [Expanded]=\"false\" (ExpandedChange)=\"onModelSelectionPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection & Performance\n @if (record.CacheHit) {\n <span class=\"panel-badge success\">Cached</span>\n }\n @if (record.WasSelectedResult) {\n <span class=\"panel-badge success\">Selected</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n <!-- Model Selection Details -->\n <div class=\"detail-field\">\n <label>Status</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ record.Status || 'Unknown' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Selection Strategy</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-strategy\"></i>\n {{ record.SelectionStrategy || '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Model Power Rank</label>\n <div class=\"detail-value\" [class.null-value]=\"record.ModelPowerRank === null\">\n <i class=\"fa-solid fa-ranking-star\"></i>\n {{ record.ModelPowerRank !== null ? record.ModelPowerRank : '\u2014' }}\n </div>\n </div>\n \n <!-- Cache Information -->\n <div class=\"detail-field\">\n <label>Cache Hit</label>\n <div class=\"detail-value\">\n <i [class]=\"record.CacheHit ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.CacheHit ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.CacheKey) {\n <div class=\"detail-field full-width\">\n <label>Cache Key</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-key\"></i>\n <code>{{ record.CacheKey }}</code>\n </div>\n </div>\n }\n \n <!-- Judge Information -->\n @if (record.JudgeID) {\n <div class=\"detail-field\">\n <label>Judge Prompt</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', record.JudgeID)\" title=\"View Judge Prompt\">\n <i class=\"fa-solid fa-gavel\"></i>\n {{ record.Judge || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.JudgeScore !== null) {\n <div class=\"detail-field\">\n <label>Judge Score</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-star\"></i>\n {{ record.JudgeScore }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Was Selected Result</label>\n <div class=\"detail-value\">\n <i [class]=\"record.WasSelectedResult ? 'fa-solid fa-trophy' : 'fa-solid fa-times'\"></i>\n {{ record.WasSelectedResult ? 'Yes' : 'No' }}\n </div>\n </div>\n \n <!-- Performance Metrics -->\n <div class=\"detail-field\">\n <label>Streaming Enabled</label>\n <div class=\"detail-value\">\n <i [class]=\"record.StreamingEnabled ? 'fa-solid fa-stream' : 'fa-solid fa-ban'\"></i>\n {{ record.StreamingEnabled ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.FirstTokenTime !== null) {\n <div class=\"detail-field\">\n <label>First Token Time</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ record.FirstTokenTime }} ms\n </div>\n </div>\n }\n \n @if (record.Cancelled) {\n <div class=\"detail-field\">\n <label>Cancelled</label>\n <div class=\"detail-value error\">\n <i class=\"fa-solid fa-ban\"></i>\n Yes\n </div>\n </div>\n \n @if (record.CancellationReason) {\n <div class=\"detail-field full-width\">\n <label>Cancellation Reason</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ record.CancellationReason }}\n </div>\n </div>\n }\n }\n </div>\n \n <!-- Model Selection JSON -->\n @if (record.ModelSelection) {\n <div class=\"model-selection-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Model Selection Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSelection, 'json', 'Model Selection')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedModelSelection\"\n name=\"formattedModelSelection\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Error Details JSON -->\n @if (record.ErrorDetails) {\n <div class=\"error-details-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedErrorDetails\"\n name=\"formattedErrorDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Full-screen overlay -->\n @if (FullScreenContent) {\n <div class=\"fullscreen-overlay\" (click)=\"closeFullScreen()\">\n <div class=\"fullscreen-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"fullscreen-header\">\n <span class=\"fullscreen-title\">\n <i class=\"fa-solid fa-expand\"></i>\n {{ FullScreenTitle }}\n </span>\n <div class=\"fullscreen-actions\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(FullScreenContent, FullScreenTitle)\"\n title=\"Copy content\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"closeFullScreen()\"\n title=\"Close\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n </div>\n </div>\n <div class=\"fullscreen-body\">\n <mj-code-editor\n [value]=\"FullScreenContent\"\n [readonly]=\"true\"\n [language]=\"FullScreenLanguage\"\n style=\"height: 100%; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n }", styles: ["/* Host and Container Layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n/* Error Info Styles */\n.error-info {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details {\n margin-top: 12px;\n}\n\n.error-details h4 {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n/* Header Section */\n.prompt-run-header {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper i {\n font-size: 24px;\n}\n\n.run-info {\n flex: 1;\n min-width: 0;\n}\n\n.run-title {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n/* Shared meta-card style (Status, Execution, single Prompt) */\n.meta-card {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Status indicator dot */\n.status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n/* C3 Stacked Connector \u2014 Prompt Card */\n.prompt-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section i.prompt-icon {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section i {\n font-size: 0.75rem;\n}\n\n.c3-link-icon {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section:hover .c3-link-icon {\n opacity: 0.8;\n}\n\n/* C3 Model Card */\n.model-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name i {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions {\n display: flex;\n gap: 8px;\n}\n\n/* Metrics Bar */\n.metrics-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item > i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n/* Panels */\n.form-content {\n padding: 16px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n/* Nested Sub-Panel Styles */\n.sub-panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content {\n padding: 0;\n}\n\n/* Nested accordion panel styles */\n.nested-panels mj-accordion-panel {\n margin-bottom: 8px;\n}\n\n/* Ensure chat message viewer takes appropriate height */\n.sub-panel-content mj-chat-message-viewer {\n display: block;\n min-height: 200px;\n max-height: 750px; /* Increased by 50% from 500px */\n height: auto;\n overflow: hidden;\n}\n\n/* Different colors for sub-expansion panels */\n.sub-expansion-panel {\n margin-bottom: 8px;\n}\n\n/* Sub-expansion panel styles */\n.sub-expansion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* JSON Editor Container */\n.json-editor-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message i {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Loading State */\n.loading-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Metrics Grid */\n.metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n/* Additional Metrics */\n.additional-metrics {\n padding-top: 16px;\n}\n\n.metric-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row .metric-value.link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row .metric-value.link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n/* Hierarchy Section */\n.parent-run-section,\n.child-runs-section {\n margin-bottom: 24px;\n}\n\n.parent-run-section:last-child,\n.child-runs-section:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section h4,\n.child-runs-section h4 {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta span {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator {\n font-weight: 500;\n}\n\n.run-item > i:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n/* Detail Fields Grid */\n.detail-fields-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field label {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable {\n cursor: pointer;\n}\n\n.detail-value.clickable:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable i:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable:hover i:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value i:first-child {\n opacity: 0.5;\n}\n\n/* Accordion Panel Overrides */\nmj-accordion-panel {\n display: block;\n}\n\n/* Validation Panel Styles */\n.validation-summary {\n margin-bottom: 24px;\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header h4 {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small .metric-label {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small .metric-value {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error,\n.common-error {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error h5,\n.common-error h5 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error p,\n.common-error p {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n/* Retry Timeline */\n.retry-timeline {\n margin-bottom: 24px;\n}\n\n.retry-timeline h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat i {\n font-size: 1.1em;\n}\n\n/* Validation Attempts */\n.validation-attempts {\n margin-bottom: 24px;\n}\n\n.validation-attempts h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success .attempt-number {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed .attempt-number {\n color: var(--mj-status-error);\n}\n\n.attempt-details {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time {\n color: var(--mj-text-muted);\n}\n\n.attempt-error {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* Validation JSON */\n.validation-json {\n margin-top: 24px;\n}\n\n.validation-json h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Panel badge styles */\n.panel-badge.success {\n background: var(--mj-status-success);\n color: white;\n}\n\n/* Full-screen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title i {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body mj-code-editor {\n display: block;\n height: 100%;\n}\n"] }]
|
|
2448
|
+
args: [{ standalone: false, selector: 'mj-ai-prompt-run-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <!-- Status Card -->\n <div class=\"meta-card status-card\">\n <div class=\"c3-card-label\">Status</div>\n <div class=\"meta-card-body\">\n <span class=\"status-indicator\" [style.background-color]=\"getStatusColor()\"></span>\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n {{ getStatusText() }}\n </div>\n </div>\n\n <!-- Execution Card -->\n @if (record.RunType) {\n <div class=\"meta-card execution-card\">\n <div class=\"c3-card-label\">Execution</div>\n <div class=\"meta-card-body\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\" [style.color]=\"getRunTypeColor(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n\n <!-- Prompt Card -->\n @if (prompt) {\n @if (record.ChildPromptID) {\n <!-- C3 Stacked Connector: child prompt prominent, parent nested -->\n <div class=\"prompt-card-c3\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"c3-child-section\" (click)=\"navigateToEntity('MJ: AI Prompts', record.ChildPromptID)\" title=\"View Agent Prompt\">\n <i class=\"fa-solid fa-comment prompt-icon\"></i>\n {{ record.ChildPrompt }}\n </div>\n <div class=\"c3-divider\">\n <span class=\"c3-line\"></span>\n <span class=\"c3-divider-label\">wrapped by</span>\n <span class=\"c3-line\"></span>\n </div>\n <div class=\"c3-parent-section\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View System Prompt\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ prompt.Name }}\n <i class=\"fa-solid fa-arrow-up-right-from-square c3-link-icon\"></i>\n </div>\n </div>\n } @else {\n <!-- Single prompt (no child) \u2014 same card style -->\n <div class=\"meta-card prompt-single-card\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"meta-card-body clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ prompt.Name }}\n </div>\n </div>\n }\n }\n\n <!-- Model Card -->\n @if (model) {\n <div class=\"model-card-c3\">\n <div class=\"c3-card-label\">Model</div>\n <div class=\"c3-card-body\" (click)=\"navigateToEntity('MJ: AI Models', model.ID)\" title=\"View Model\">\n <span class=\"c3-model-name\"><i class=\"fa-solid fa-microchip\"></i> {{ model.Name }}</span>\n @if (record.Vendor) {\n <span class=\"c3-vendor-name\">{{ record.Vendor }}</span>\n }\n </div>\n </div>\n }\n @if (record.RerunFromPromptRunID) {\n <span class=\"original-run\" title=\"View Original Run\">\n <i class=\"fa-solid fa-level-up-alt\"></i>\n <a (click)=\"navigateToOriginalRun()\" class=\"original-link\">Original Run</a>\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n @if (record.ConfigurationID) {\n <!-- Configuration Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-cog\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Configuration</div>\n <div class=\"metric-value\">\n <a href=\"javascript:void(0)\" class=\"config-link\" (click)=\"navigateToEntity('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n @if (record.Temperature !== null && record.Temperature !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Temperature</div>\n <div class=\"metric-value\">{{ record.Temperature }}</div>\n </div>\n </div>\n }\n @if (record.TopP !== null && record.TopP !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-percentage\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top P</div>\n <div class=\"metric-value\">{{ record.TopP }}</div>\n </div>\n </div>\n }\n @if (record.TopK !== null && record.TopK !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-list-ol\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top K</div>\n <div class=\"metric-value\">{{ record.TopK }}</div>\n </div>\n </div>\n }\n @if (record.EffortLevel !== null && record.EffortLevel !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Effort Level</div>\n <div class=\"metric-value\">{{ record.EffortLevel }}</div>\n </div>\n </div>\n }\n @if (record.ResponseFormat) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-code\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Response Format</div>\n <div class=\"metric-value\">{{ record.ResponseFormat }}</div>\n </div>\n </div>\n }\n </div>\n \n <!-- Execution Metrics Bar (always show when configuration exists) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\" title=\"Total tokens the model processed, including cached input\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(TotalTokensProcessed) }}</div>\n </div>\n </div>\n @if (record.TokensCacheRead) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cached</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensCacheRead) }}</div>\n </div>\n </div>\n }\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n } @else {\n <!-- Execution Metrics Bar (original behavior when no configuration) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\" title=\"Total tokens the model processed, including cached input\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(TotalTokensProcessed) }}</div>\n </div>\n </div>\n @if (record.TokensCacheRead) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cached</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensCacheRead) }}</div>\n </div>\n </div>\n }\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n\n <!-- Input Panel with nested sub-panels -->\n <mj-accordion-panel [Expanded]=\"inputExpanded\" (ExpandedChange)=\"onInputPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <!-- Nested expansion panels for sub-sections -->\n <div class=\"nested-panels\">\n <!-- Messages Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"messagesExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Messages\n @if (chatMessages.length > 0) {\n <span class=\"panel-count\">({{ chatMessages.length }})</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (isParsingMessages || isLoadingRelatedData) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading messages...</p>\n </div>\n } @else if (chatMessages.length > 0) {\n <mj-chat-message-viewer \n [messages]=\"chatMessages\">\n </mj-chat-message-viewer>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No chat messages found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Data Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"dataExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-database\"></i>\n Data\n @if (inputData) {\n <span class=\"panel-badge\">Object</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (inputData && formattedData) {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedData, 'json', 'Data')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedData\"\n name=\"formattedData\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No data object found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Raw Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"rawExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Raw\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedMessages, 'json', 'Raw Messages')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessages\"\n name=\"formattedMessages\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n \n <!-- Result Panel -->\n <mj-accordion-panel [Expanded]=\"resultExpanded\" (ExpandedChange)=\"onResultPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedResult, 'json', 'Result')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedResult\"\n name=\"formattedResult\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (!record.ErrorMessage) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No result data recorded</p>\n @if (record.CompletedAt && (record.Status === 'Failed' || record.Success === false)) {\n <div class=\"error-info\">\n @if (record.Status) {\n <p class=\"finish-reason\">\n <strong>Status:</strong> {{ record.Status }}\n </p>\n }\n @if (formattedErrorDetails) {\n <div class=\"error-details\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor\n [ngModel]=\"formattedErrorDetails\"\n [disabled]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (!formattedErrorDetails) {\n <p class=\"error-hint\">\n The prompt execution failed but no additional error information is available.\n </p>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Token Usage & Metrics Panel -->\n <mj-accordion-panel [Expanded]=\"metricsExpanded\" (ExpandedChange)=\"onMetricsPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage & Metrics\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensPrompt) }}</div>\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\" title=\"Prompt + completion + cached tokens \u2014 the full amount the model processed\">{{ formatTokens(TotalTokensProcessed) }}</div>\n @if (CachedTokens > 0) {\n <div class=\"metric-rollup\">\n <span>incl. {{ formatTokens(CachedTokens) }} cached</span>\n </div>\n }\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Net rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n\n <!-- Prompt-cache tokens (provider cache reads = hits, writes = cache creation).\n Only rendered when the provider reported cache usage. -->\n @if (record.TokensCacheRead != null || record.TokensCacheWrite != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-bolt\"></i>\n <h4>Cache Read</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCacheRead) }}</div>\n @if (record.TokensCacheWrite) {\n <div class=\"metric-rollup\">\n <span>Write: {{ formatTokens(record.TokensCacheWrite) }}</span>\n </div>\n }\n @if (record.TokensCacheRead || record.TokensCacheWrite) {\n <div class=\"metric-rollup\">\n <span>{{ CacheHitRatePct | number:'1.0-0' }}% hit rate</span>\n </div>\n }\n </div>\n }\n\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n \n <!-- Timing Metrics -->\n @if (record.QueueTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-hourglass-start\"></i>\n <h4>Queue Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.QueueTime) }}</div>\n </div>\n }\n \n @if (record.PromptTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>Prompt Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.PromptTime) }}</div>\n </div>\n }\n \n @if (record.CompletionTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <h4>Completion Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.CompletionTime) }}</div>\n </div>\n }\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <mj-accordion-panel [Expanded]=\"validationExpanded\" (ExpandedChange)=\"onValidationPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation & Retries\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <span class=\"panel-count\">({{ record.ValidationAttemptCount }} attempts)</span>\n }\n @if (record.FinalValidationPassed) {\n <span class=\"panel-badge success\">Passed</span>\n } @else if (record.FinalValidationPassed === false) {\n <span class=\"panel-badge error\">Failed</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <!-- Validation Summary -->\n <div class=\"validation-summary\">\n <div class=\"summary-header\">\n <h4>Validation Summary</h4>\n <div class=\"validation-status\" [class.success]=\"record.FinalValidationPassed === true\" [class.failed]=\"record.FinalValidationPassed === false\">\n <i [class]=\"record.FinalValidationPassed === true ? 'fa-solid fa-check-circle' : (record.FinalValidationPassed === false ? 'fa-solid fa-times-circle' : 'fa-solid fa-hourglass-half')\"></i>\n {{ record.FinalValidationPassed === true ? 'Validation Passed' : (record.FinalValidationPassed === false ? 'Validation Failed' : 'Validation Pending') }}\n </div>\n </div>\n \n <div class=\"validation-metrics\">\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Total Attempts</div>\n <div class=\"metric-value\">{{ record.ValidationAttemptCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Successful</div>\n <div class=\"metric-value\">{{ record.SuccessfulValidationCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Behavior</div>\n <div class=\"metric-value\">{{ record.ValidationBehavior || 'Not set' }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Retry Strategy</div>\n <div class=\"metric-value\">{{ record.RetryStrategy || 'Not set' }}</div>\n </div>\n </div>\n \n @if (record.FinalValidationError) {\n <div class=\"validation-error\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Final Validation Error</h5>\n <p>{{ record.FinalValidationError }}</p>\n @if (record && record.ValidationErrorCount && record.ValidationErrorCount > 0) {\n <span class=\"error-count\">{{ record.ValidationErrorCount }} validation errors</span>\n }\n </div>\n }\n \n @if (record.CommonValidationError && record.CommonValidationError !== record.FinalValidationError) {\n <div class=\"common-error\">\n <h5><i class=\"fa-solid fa-repeat\"></i> Most Common Error</h5>\n <p>{{ record.CommonValidationError }}</p>\n </div>\n }\n </div>\n \n <!-- Retry Timeline -->\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <div class=\"retry-timeline\">\n <h4>Retry Timeline</h4>\n <div class=\"timeline-info\">\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>First Attempt: {{ record.FirstAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <span>Last Attempt: {{ record.LastAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span>Total Retry Duration: {{ formatDuration(record.TotalRetryDurationMS) }}</span>\n </div>\n </div>\n </div>\n }\n \n <!-- Validation Attempts Details -->\n @if (validationAttempts && validationAttempts.length > 0) {\n <div class=\"validation-attempts\">\n <h4>Validation Attempts</h4>\n <div class=\"attempts-list\">\n @for (attempt of validationAttempts; track attempt.attemptNumber) {\n <div class=\"attempt-item\" [class.success]=\"attempt.success\" [class.failed]=\"!attempt.success\">\n <div class=\"attempt-number\">\n <i [class]=\"attempt.success ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n Attempt #{{ attempt.attemptNumber }}\n </div>\n <div class=\"attempt-details\">\n <span class=\"attempt-time\">{{ attempt.timestamp }}</span>\n @if (!attempt.success) {\n <span class=\"attempt-error\">{{ attempt.errorMessage || 'Unknown error' }}</span>\n @if (attempt.validationErrorCount > 0) {\n <span class=\"error-count\">({{ attempt.validationErrorCount }} errors)</span>\n }\n }\n @if (attempt.outputLength) {\n <span class=\"output-length\">Output: {{ attempt.outputLength }} chars</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Validation Summary JSON -->\n @if (validationSummary) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Summary Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationSummary, 'json', 'Validation Summary')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationSummary\"\n name=\"formattedValidationSummary\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Validation Attempts JSON -->\n @if (record.ValidationAttempts) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Attempts (Raw JSON)</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationAttempts, 'json', 'Validation Attempts')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationAttempts\"\n name=\"formattedValidationAttempts\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <mj-accordion-panel [Expanded]=\"hierarchyExpanded\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Run Hierarchy\n @if (childRuns.length > 0) {\n <span class=\"panel-count\">({{ childRuns.length }} children)</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (parentRun) {\n <div class=\"parent-run-section\">\n <h4><i class=\"fa-solid fa-level-up-alt\"></i> Parent Run</h4>\n <div class=\"run-item parent\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', parentRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(parentRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Parent Run #{{ parentRun.ID.substring(0, 8) }}\n <span class=\"run-item-type\">{{ parentRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(parentRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(parentRun.TokensUsed) }}</span>\n <span><i class=\"fa-solid fa-calendar\"></i> {{ parentRun.RunAt | date:'short' }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (childRuns.length > 0) {\n <div class=\"child-runs-section\">\n <h4><i class=\"fa-solid fa-level-down-alt\"></i> Child Runs</h4>\n <div class=\"runs-list\">\n @for (childRun of childRuns; track childRun.ID) {\n <div class=\"run-item child\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', childRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(childRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Child Run #{{ childRun.ID.substring(0, 8) }}\n @if (childRun.ExecutionOrder !== null) {\n <span class=\"execution-order\">#{{ childRun.ExecutionOrder }}</span>\n }\n <span class=\"run-item-type\">{{ childRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span class=\"status-indicator\" [style.color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ childRun.Success ? 'Success' : childRun.ErrorMessage ? 'Failed' : 'Running' }}\n </span>\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(childRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(childRun.TokensUsed) }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Additional Details Panel -->\n <mj-accordion-panel [Expanded]=\"false\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\" title=\"View Agent\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ record.Agent || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n \n @if (record.RunType) {\n <div class=\"detail-field\">\n <label>Run Type</label>\n <div class=\"detail-value\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n \n @if (record.ResponseFormat) {\n <div class=\"detail-field\">\n <label>Response Format</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-code\"></i>\n {{ record.ResponseFormat }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Temperature</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Temperature === null || record.Temperature === undefined\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n {{ record.Temperature !== null && record.Temperature !== undefined ? record.Temperature : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopP === null || record.TopP === undefined\">\n <i class=\"fa-solid fa-percentage\"></i>\n {{ record.TopP !== null && record.TopP !== undefined ? record.TopP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top K</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopK === null || record.TopK === undefined\">\n <i class=\"fa-solid fa-list-ol\"></i>\n {{ record.TopK !== null && record.TopK !== undefined ? record.TopK : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Min P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.MinP === null || record.MinP === undefined\">\n <i class=\"fa-solid fa-filter\"></i>\n {{ record.MinP !== null && record.MinP !== undefined ? record.MinP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Frequency Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.FrequencyPenalty === null || record.FrequencyPenalty === undefined\">\n <i class=\"fa-solid fa-repeat\"></i>\n {{ record.FrequencyPenalty !== null && record.FrequencyPenalty !== undefined ? record.FrequencyPenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Presence Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.PresencePenalty === null || record.PresencePenalty === undefined\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n {{ record.PresencePenalty !== null && record.PresencePenalty !== undefined ? record.PresencePenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Seed</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Seed === null || record.Seed === undefined\">\n <i class=\"fa-solid fa-seedling\"></i>\n {{ record.Seed !== null && record.Seed !== undefined ? record.Seed : '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Stop Sequences</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.StopSequences\">\n <i class=\"fa-solid fa-stop-circle\"></i>\n {{ record.StopSequences || '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Assistant Prefill</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.AssistantPrefill\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ record.AssistantPrefill || '\u2014' }}\n </div>\n </div>\n\n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <mj-accordion-panel [Expanded]=\"modelSpecificExpanded\" (ExpandedChange)=\"onModelSpecificPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Specific Response Details\n <span class=\"panel-badge\">JSON</span>\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSpecificResponseDetails, 'json', 'Model Specific Response Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedModelSpecificResponseDetails\"\n name=\"formattedModelSpecificResponseDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <mj-accordion-panel [Expanded]=\"false\" (ExpandedChange)=\"onModelSelectionPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection & Performance\n @if (record.CacheHit) {\n <span class=\"panel-badge success\">Cached</span>\n }\n @if (record.WasSelectedResult) {\n <span class=\"panel-badge success\">Selected</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n <!-- Model Selection Details -->\n <div class=\"detail-field\">\n <label>Status</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ record.Status || 'Unknown' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Selection Strategy</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-strategy\"></i>\n {{ record.SelectionStrategy || '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Model Power Rank</label>\n <div class=\"detail-value\" [class.null-value]=\"record.ModelPowerRank === null\">\n <i class=\"fa-solid fa-ranking-star\"></i>\n {{ record.ModelPowerRank !== null ? record.ModelPowerRank : '\u2014' }}\n </div>\n </div>\n \n <!-- Cache Information -->\n <div class=\"detail-field\">\n <label>Cache Hit</label>\n <div class=\"detail-value\">\n <i [class]=\"record.CacheHit ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.CacheHit ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.CacheKey) {\n <div class=\"detail-field full-width\">\n <label>Cache Key</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-key\"></i>\n <code>{{ record.CacheKey }}</code>\n </div>\n </div>\n }\n \n <!-- Judge Information -->\n @if (record.JudgeID) {\n <div class=\"detail-field\">\n <label>Judge Prompt</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', record.JudgeID)\" title=\"View Judge Prompt\">\n <i class=\"fa-solid fa-gavel\"></i>\n {{ record.Judge || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.JudgeScore !== null) {\n <div class=\"detail-field\">\n <label>Judge Score</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-star\"></i>\n {{ record.JudgeScore }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Was Selected Result</label>\n <div class=\"detail-value\">\n <i [class]=\"record.WasSelectedResult ? 'fa-solid fa-trophy' : 'fa-solid fa-times'\"></i>\n {{ record.WasSelectedResult ? 'Yes' : 'No' }}\n </div>\n </div>\n \n <!-- Performance Metrics -->\n <div class=\"detail-field\">\n <label>Streaming Enabled</label>\n <div class=\"detail-value\">\n <i [class]=\"record.StreamingEnabled ? 'fa-solid fa-stream' : 'fa-solid fa-ban'\"></i>\n {{ record.StreamingEnabled ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.FirstTokenTime !== null) {\n <div class=\"detail-field\">\n <label>First Token Time</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ record.FirstTokenTime }} ms\n </div>\n </div>\n }\n \n @if (record.Cancelled) {\n <div class=\"detail-field\">\n <label>Cancelled</label>\n <div class=\"detail-value error\">\n <i class=\"fa-solid fa-ban\"></i>\n Yes\n </div>\n </div>\n \n @if (record.CancellationReason) {\n <div class=\"detail-field full-width\">\n <label>Cancellation Reason</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ record.CancellationReason }}\n </div>\n </div>\n }\n }\n </div>\n \n <!-- Model Selection JSON -->\n @if (record.ModelSelection) {\n <div class=\"model-selection-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Model Selection Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSelection, 'json', 'Model Selection')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedModelSelection\"\n name=\"formattedModelSelection\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Error Details JSON -->\n @if (record.ErrorDetails) {\n <div class=\"error-details-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedErrorDetails\"\n name=\"formattedErrorDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Full-screen overlay -->\n @if (FullScreenContent) {\n <div class=\"fullscreen-overlay\" (click)=\"closeFullScreen()\">\n <div class=\"fullscreen-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"fullscreen-header\">\n <span class=\"fullscreen-title\">\n <i class=\"fa-solid fa-expand\"></i>\n {{ FullScreenTitle }}\n </span>\n <div class=\"fullscreen-actions\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(FullScreenContent, FullScreenTitle)\"\n title=\"Copy content\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"closeFullScreen()\"\n title=\"Close\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n </div>\n </div>\n <div class=\"fullscreen-body\">\n <mj-code-editor\n [value]=\"FullScreenContent\"\n [readonly]=\"true\"\n [language]=\"FullScreenLanguage\"\n style=\"height: 100%; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n }", styles: ["/* Host and Container Layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n/* Error Info Styles */\n.error-info {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details {\n margin-top: 12px;\n}\n\n.error-details h4 {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n/* Header Section */\n.prompt-run-header {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper i {\n font-size: 24px;\n}\n\n.run-info {\n flex: 1;\n min-width: 0;\n}\n\n.run-title {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n/* Shared meta-card style (Status, Execution, single Prompt) */\n.meta-card {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Status indicator dot */\n.status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n/* C3 Stacked Connector \u2014 Prompt Card */\n.prompt-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section i.prompt-icon {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section i {\n font-size: 0.75rem;\n}\n\n.c3-link-icon {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section:hover .c3-link-icon {\n opacity: 0.8;\n}\n\n/* C3 Model Card */\n.model-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name i {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions {\n display: flex;\n gap: 8px;\n}\n\n/* Metrics Bar */\n.metrics-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item > i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n/* Panels */\n.form-content {\n padding: 16px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n/* Nested Sub-Panel Styles */\n.sub-panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content {\n padding: 0;\n}\n\n/* Nested accordion panel styles */\n.nested-panels mj-accordion-panel {\n margin-bottom: 8px;\n}\n\n/* Ensure chat message viewer takes appropriate height */\n.sub-panel-content mj-chat-message-viewer {\n display: block;\n min-height: 200px;\n max-height: 750px; /* Increased by 50% from 500px */\n height: auto;\n overflow: hidden;\n}\n\n/* Different colors for sub-expansion panels */\n.sub-expansion-panel {\n margin-bottom: 8px;\n}\n\n/* Sub-expansion panel styles */\n.sub-expansion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* JSON Editor Container */\n.json-editor-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message i {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Loading State */\n.loading-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Metrics Grid */\n.metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n/* Additional Metrics */\n.additional-metrics {\n padding-top: 16px;\n}\n\n.metric-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row .metric-value.link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row .metric-value.link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n/* Hierarchy Section */\n.parent-run-section,\n.child-runs-section {\n margin-bottom: 24px;\n}\n\n.parent-run-section:last-child,\n.child-runs-section:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section h4,\n.child-runs-section h4 {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta span {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator {\n font-weight: 500;\n}\n\n.run-item > i:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n/* Detail Fields Grid */\n.detail-fields-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field label {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable {\n cursor: pointer;\n}\n\n.detail-value.clickable:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable i:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable:hover i:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value i:first-child {\n opacity: 0.5;\n}\n\n/* Accordion Panel Overrides */\nmj-accordion-panel {\n display: block;\n}\n\n/* Validation Panel Styles */\n.validation-summary {\n margin-bottom: 24px;\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header h4 {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small .metric-label {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small .metric-value {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error,\n.common-error {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error h5,\n.common-error h5 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error p,\n.common-error p {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n/* Retry Timeline */\n.retry-timeline {\n margin-bottom: 24px;\n}\n\n.retry-timeline h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat i {\n font-size: 1.1em;\n}\n\n/* Validation Attempts */\n.validation-attempts {\n margin-bottom: 24px;\n}\n\n.validation-attempts h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success .attempt-number {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed .attempt-number {\n color: var(--mj-status-error);\n}\n\n.attempt-details {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time {\n color: var(--mj-text-muted);\n}\n\n.attempt-error {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* Validation JSON */\n.validation-json {\n margin-top: 24px;\n}\n\n.validation-json h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Panel badge styles */\n.panel-badge.success {\n background: var(--mj-status-success);\n color: white;\n}\n\n/* Full-screen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title i {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body mj-code-editor {\n display: block;\n height: 100%;\n}\n"] }]
|
|
2335
2449
|
}], null, null); })();
|
|
2336
2450
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIPromptRunFormComponentExtended, { className: "MJAIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 21 }); })();
|
|
2337
2451
|
//# sourceMappingURL=ai-prompt-run-form.component.js.map
|