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