@memberjunction/ng-core-entity-forms 2.75.0 → 2.77.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +124 -0
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.d.ts +109 -0
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.js +2020 -0
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.js.map +1 -0
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts +32 -0
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +413 -0
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js.map +1 -0
- package/dist/lib/custom/AIAgents/FlowAgentType/step-info-control.component.d.ts +9 -0
- package/dist/lib/custom/AIAgents/FlowAgentType/step-info-control.component.d.ts.map +1 -0
- package/dist/lib/custom/AIAgents/FlowAgentType/step-info-control.component.js +84 -0
- package/dist/lib/custom/AIAgents/FlowAgentType/step-info-control.component.js.map +1 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +34 -6
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +656 -520
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +223 -221
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +51 -49
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-test-harness.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-test-harness.component.js +5 -3
- package/dist/lib/custom/Actions/action-test-harness.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +160 -158
- 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-cost.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +3 -6
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +49 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +211 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +33 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +265 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +4 -8
- 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 +47 -163
- 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 +71 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +931 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +6 -4
- 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 +202 -297
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +30 -25
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +31 -4
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +34 -14
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentStep/aiagentstep.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/AIAgentStep/aiagentstep.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/AIAgentStep/aiagentstep.form.component.js +80 -0
- package/dist/lib/generated/Entities/AIAgentStep/aiagentstep.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/AIAgentStep/sections/details.component.d.ts +11 -0
- package/dist/lib/generated/Entities/AIAgentStep/sections/details.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/AIAgentStep/sections/details.component.js +277 -0
- package/dist/lib/generated/Entities/AIAgentStep/sections/details.component.js.map +1 -0
- package/dist/lib/generated/Entities/AIAgentStepPath/aiagentsteppath.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/AIAgentStepPath/aiagentsteppath.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/AIAgentStepPath/aiagentsteppath.form.component.js +59 -0
- package/dist/lib/generated/Entities/AIAgentStepPath/aiagentsteppath.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/AIAgentStepPath/sections/details.component.d.ts +11 -0
- package/dist/lib/generated/Entities/AIAgentStepPath/sections/details.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/AIAgentStepPath/sections/details.component.js +147 -0
- package/dist/lib/generated/Entities/AIAgentStepPath/sections/details.component.js.map +1 -0
- package/dist/lib/generated/Entities/AIAgentType/sections/details.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentType/sections/details.component.js +31 -4
- package/dist/lib/generated/Entities/AIAgentType/sections/details.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js +16 -6
- package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Action/action.form.component.js +19 -9
- package/dist/lib/generated/Entities/Action/action.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +294 -285
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +183 -110
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/public-api.d.ts +2 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +21 -17
|
@@ -34,7 +34,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_11_Template(
|
|
|
34
34
|
i0.ɵɵtextInterpolate1("#", ctx_r1.record.ID.substring(0, 8), "");
|
|
35
35
|
} }
|
|
36
36
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
-
i0.ɵɵelementStart(0, "span",
|
|
37
|
+
i0.ɵɵelementStart(0, "span", 37);
|
|
38
38
|
i0.ɵɵelement(1, "i");
|
|
39
39
|
i0.ɵɵtext(2);
|
|
40
40
|
i0.ɵɵelementEnd();
|
|
@@ -48,9 +48,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_16_Template(
|
|
|
48
48
|
} }
|
|
49
49
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
50
50
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
51
|
-
i0.ɵɵelementStart(0, "span",
|
|
51
|
+
i0.ɵɵelementStart(0, "span", 38);
|
|
52
52
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Prompts", ctx_r1.prompt.ID)); });
|
|
53
|
-
i0.ɵɵelement(1, "i",
|
|
53
|
+
i0.ɵɵelement(1, "i", 39);
|
|
54
54
|
i0.ɵɵtext(2);
|
|
55
55
|
i0.ɵɵelementEnd();
|
|
56
56
|
} if (rf & 2) {
|
|
@@ -60,9 +60,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_17_Template(
|
|
|
60
60
|
} }
|
|
61
61
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
62
62
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
63
|
-
i0.ɵɵelementStart(0, "span",
|
|
63
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
64
64
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Models", ctx_r1.model.ID)); });
|
|
65
|
-
i0.ɵɵelement(1, "i",
|
|
65
|
+
i0.ɵɵelement(1, "i", 41);
|
|
66
66
|
i0.ɵɵtext(2);
|
|
67
67
|
i0.ɵɵelementEnd();
|
|
68
68
|
} if (rf & 2) {
|
|
@@ -72,9 +72,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_18_Template(
|
|
|
72
72
|
} }
|
|
73
73
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
74
74
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
75
|
-
i0.ɵɵelementStart(0, "span",
|
|
75
|
+
i0.ɵɵelementStart(0, "span", 42);
|
|
76
76
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_19_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Vendors", ctx_r1.record.VendorID)); });
|
|
77
|
-
i0.ɵɵelement(1, "i",
|
|
77
|
+
i0.ɵɵelement(1, "i", 43);
|
|
78
78
|
i0.ɵɵtext(2);
|
|
79
79
|
i0.ɵɵelementEnd();
|
|
80
80
|
} if (rf & 2) {
|
|
@@ -85,15 +85,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_19_Template(
|
|
|
85
85
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
86
86
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
87
87
|
i0.ɵɵelementStart(0, "span", 17);
|
|
88
|
-
i0.ɵɵelement(1, "i",
|
|
89
|
-
i0.ɵɵelementStart(2, "a",
|
|
88
|
+
i0.ɵɵelement(1, "i", 44);
|
|
89
|
+
i0.ɵɵelementStart(2, "a", 45);
|
|
90
90
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_20_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToOriginalRun()); });
|
|
91
91
|
i0.ɵɵtext(3, "Original Run");
|
|
92
92
|
i0.ɵɵelementEnd()();
|
|
93
93
|
} }
|
|
94
94
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_49_Template(rf, ctx) { if (rf & 1) {
|
|
95
95
|
i0.ɵɵelementStart(0, "div", 24);
|
|
96
|
-
i0.ɵɵelement(1, "i",
|
|
96
|
+
i0.ɵɵelement(1, "i", 46);
|
|
97
97
|
i0.ɵɵelementStart(2, "div", 26)(3, "div", 27);
|
|
98
98
|
i0.ɵɵtext(4, "Started");
|
|
99
99
|
i0.ɵɵelementEnd();
|
|
@@ -107,15 +107,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_49_Template(
|
|
|
107
107
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
|
|
108
108
|
} }
|
|
109
109
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
110
|
-
i0.ɵɵelementStart(0, "span",
|
|
110
|
+
i0.ɵɵelementStart(0, "span", 48);
|
|
111
111
|
i0.ɵɵtext(1, "JSON");
|
|
112
112
|
i0.ɵɵelementEnd();
|
|
113
113
|
} }
|
|
114
114
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Template(rf, ctx) { if (rf & 1) {
|
|
115
|
-
i0.ɵɵelementStart(0, "span",
|
|
116
|
-
i0.ɵɵelement(1, "i",
|
|
115
|
+
i0.ɵɵelementStart(0, "span", 47);
|
|
116
|
+
i0.ɵɵelement(1, "i", 39);
|
|
117
117
|
i0.ɵɵtext(2, " Input ");
|
|
118
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_3_Template, 2, 0, "span",
|
|
118
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Conditional_3_Template, 2, 0, "span", 48);
|
|
119
119
|
i0.ɵɵelementEnd();
|
|
120
120
|
} if (rf & 2) {
|
|
121
121
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -123,7 +123,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Template(
|
|
|
123
123
|
i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
|
|
124
124
|
} }
|
|
125
125
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
126
|
-
i0.ɵɵelementStart(0, "span",
|
|
126
|
+
i0.ɵɵelementStart(0, "span", 64);
|
|
127
127
|
i0.ɵɵtext(1);
|
|
128
128
|
i0.ɵɵelementEnd();
|
|
129
129
|
} if (rf & 2) {
|
|
@@ -132,10 +132,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Condition
|
|
|
132
132
|
i0.ɵɵtextInterpolate1("(", ctx_r1.chatMessages.length, ")");
|
|
133
133
|
} }
|
|
134
134
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
135
|
-
i0.ɵɵelementStart(0, "span",
|
|
136
|
-
i0.ɵɵelement(1, "i",
|
|
135
|
+
i0.ɵɵelementStart(0, "span", 62);
|
|
136
|
+
i0.ɵɵelement(1, "i", 63);
|
|
137
137
|
i0.ɵɵtext(2, " Messages ");
|
|
138
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_2_Conditional_3_Template, 2, 1, "span",
|
|
138
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_2_Conditional_3_Template, 2, 1, "span", 64);
|
|
139
139
|
i0.ɵɵelementEnd();
|
|
140
140
|
} if (rf & 2) {
|
|
141
141
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -143,35 +143,35 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Condition
|
|
|
143
143
|
i0.ɵɵconditional(ctx_r1.chatMessages.length > 0 ? 3 : -1);
|
|
144
144
|
} }
|
|
145
145
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
146
|
-
i0.ɵɵelementStart(0, "div",
|
|
147
|
-
i0.ɵɵelement(1, "i",
|
|
146
|
+
i0.ɵɵelementStart(0, "div", 55);
|
|
147
|
+
i0.ɵɵelement(1, "i", 65);
|
|
148
148
|
i0.ɵɵelementStart(2, "p");
|
|
149
149
|
i0.ɵɵtext(3, "Loading messages...");
|
|
150
150
|
i0.ɵɵelementEnd()();
|
|
151
151
|
} }
|
|
152
152
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
153
|
-
i0.ɵɵelement(0, "mj-chat-message-viewer",
|
|
153
|
+
i0.ɵɵelement(0, "mj-chat-message-viewer", 56);
|
|
154
154
|
} if (rf & 2) {
|
|
155
155
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
156
156
|
i0.ɵɵproperty("messages", ctx_r1.chatMessages);
|
|
157
157
|
} }
|
|
158
158
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
159
|
-
i0.ɵɵelementStart(0, "div",
|
|
160
|
-
i0.ɵɵelement(1, "i",
|
|
159
|
+
i0.ɵɵelementStart(0, "div", 51);
|
|
160
|
+
i0.ɵɵelement(1, "i", 66);
|
|
161
161
|
i0.ɵɵelementStart(2, "p");
|
|
162
162
|
i0.ɵɵtext(3, "No chat messages found");
|
|
163
163
|
i0.ɵɵelementEnd()();
|
|
164
164
|
} }
|
|
165
165
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
166
|
-
i0.ɵɵelementStart(0, "span",
|
|
166
|
+
i0.ɵɵelementStart(0, "span", 48);
|
|
167
167
|
i0.ɵɵtext(1, "Object");
|
|
168
168
|
i0.ɵɵelementEnd();
|
|
169
169
|
} }
|
|
170
170
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_8_Template(rf, ctx) { if (rf & 1) {
|
|
171
|
-
i0.ɵɵelementStart(0, "span",
|
|
172
|
-
i0.ɵɵelement(1, "i",
|
|
171
|
+
i0.ɵɵelementStart(0, "span", 62);
|
|
172
|
+
i0.ɵɵelement(1, "i", 67);
|
|
173
173
|
i0.ɵɵtext(2, " Data ");
|
|
174
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_8_Conditional_3_Template, 2, 0, "span",
|
|
174
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_8_Conditional_3_Template, 2, 0, "span", 48);
|
|
175
175
|
i0.ɵɵelementEnd();
|
|
176
176
|
} if (rf & 2) {
|
|
177
177
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -180,12 +180,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Condition
|
|
|
180
180
|
} }
|
|
181
181
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
182
182
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
183
|
-
i0.ɵɵelementStart(0, "div",
|
|
183
|
+
i0.ɵɵelementStart(0, "div", 57)(1, "div", 58)(2, "button", 59);
|
|
184
184
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_10_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedData, "Data")); });
|
|
185
|
-
i0.ɵɵelement(3, "i",
|
|
185
|
+
i0.ɵɵelement(3, "i", 60);
|
|
186
186
|
i0.ɵɵtext(4, " Copy ");
|
|
187
187
|
i0.ɵɵelementEnd()();
|
|
188
|
-
i0.ɵɵelementStart(5, "mj-code-editor",
|
|
188
|
+
i0.ɵɵelementStart(5, "mj-code-editor", 68);
|
|
189
189
|
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_10_Template_mj_code_editor_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedData, $event) || (ctx_r1.formattedData = $event); return i0.ɵɵresetView($event); });
|
|
190
190
|
i0.ɵɵelementEnd()();
|
|
191
191
|
} if (rf & 2) {
|
|
@@ -195,38 +195,38 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Condition
|
|
|
195
195
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
196
196
|
} }
|
|
197
197
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
198
|
-
i0.ɵɵelementStart(0, "div",
|
|
199
|
-
i0.ɵɵelement(1, "i",
|
|
198
|
+
i0.ɵɵelementStart(0, "div", 51);
|
|
199
|
+
i0.ɵɵelement(1, "i", 67);
|
|
200
200
|
i0.ɵɵelementStart(2, "p");
|
|
201
201
|
i0.ɵɵtext(3, "No data object found");
|
|
202
202
|
i0.ɵɵelementEnd()();
|
|
203
203
|
} }
|
|
204
204
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_13_Template(rf, ctx) { if (rf & 1) {
|
|
205
|
-
i0.ɵɵelementStart(0, "span",
|
|
206
|
-
i0.ɵɵelement(1, "i",
|
|
205
|
+
i0.ɵɵelementStart(0, "span", 62);
|
|
206
|
+
i0.ɵɵelement(1, "i", 69);
|
|
207
207
|
i0.ɵɵtext(2, " Raw ");
|
|
208
208
|
i0.ɵɵelementEnd();
|
|
209
209
|
} }
|
|
210
210
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
211
211
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
212
|
-
i0.ɵɵelementStart(0, "div",
|
|
213
|
-
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_2_Template, 4, 1, "ng-template",
|
|
214
|
-
i0.ɵɵelementStart(3, "div",
|
|
215
|
-
i0.ɵɵtemplate(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_4_Template, 4, 0, "div",
|
|
212
|
+
i0.ɵɵelementStart(0, "div", 50)(1, "kendo-expansionpanel", 52);
|
|
213
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_2_Template, 4, 1, "ng-template", 53);
|
|
214
|
+
i0.ɵɵelementStart(3, "div", 54);
|
|
215
|
+
i0.ɵɵtemplate(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_4_Template, 4, 0, "div", 55)(5, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 56)(6, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_6_Template, 4, 0, "div", 51);
|
|
216
216
|
i0.ɵɵelementEnd()();
|
|
217
|
-
i0.ɵɵelementStart(7, "kendo-expansionpanel",
|
|
218
|
-
i0.ɵɵtemplate(8, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_8_Template, 4, 1, "ng-template",
|
|
219
|
-
i0.ɵɵelementStart(9, "div",
|
|
220
|
-
i0.ɵɵtemplate(10, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_10_Template, 6, 4, "div",
|
|
217
|
+
i0.ɵɵelementStart(7, "kendo-expansionpanel", 52);
|
|
218
|
+
i0.ɵɵtemplate(8, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_8_Template, 4, 1, "ng-template", 53);
|
|
219
|
+
i0.ɵɵelementStart(9, "div", 54);
|
|
220
|
+
i0.ɵɵtemplate(10, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_10_Template, 6, 4, "div", 57)(11, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Conditional_11_Template, 4, 0, "div", 51);
|
|
221
221
|
i0.ɵɵelementEnd()();
|
|
222
|
-
i0.ɵɵelementStart(12, "kendo-expansionpanel",
|
|
223
|
-
i0.ɵɵtemplate(13, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_13_Template, 3, 0, "ng-template",
|
|
224
|
-
i0.ɵɵelementStart(14, "div",
|
|
222
|
+
i0.ɵɵelementStart(12, "kendo-expansionpanel", 52);
|
|
223
|
+
i0.ɵɵtemplate(13, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_ng_template_13_Template, 3, 0, "ng-template", 53);
|
|
224
|
+
i0.ɵɵelementStart(14, "div", 54)(15, "div", 57)(16, "div", 58)(17, "button", 59);
|
|
225
225
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
|
|
226
|
-
i0.ɵɵelement(18, "i",
|
|
226
|
+
i0.ɵɵelement(18, "i", 60);
|
|
227
227
|
i0.ɵɵtext(19, " Copy ");
|
|
228
228
|
i0.ɵɵelementEnd()();
|
|
229
|
-
i0.ɵɵelementStart(20, "mj-code-editor",
|
|
229
|
+
i0.ɵɵelementStart(20, "mj-code-editor", 61);
|
|
230
230
|
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Template_mj_code_editor_ngModelChange_20_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedMessages, $event) || (ctx_r1.formattedMessages = $event); return i0.ɵɵresetView($event); });
|
|
231
231
|
i0.ɵɵelementEnd()()()()();
|
|
232
232
|
} if (rf & 2) {
|
|
@@ -246,15 +246,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Condition
|
|
|
246
246
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
247
247
|
} }
|
|
248
248
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
249
|
-
i0.ɵɵelementStart(0, "div",
|
|
250
|
-
i0.ɵɵelement(1, "i",
|
|
249
|
+
i0.ɵɵelementStart(0, "div", 51);
|
|
250
|
+
i0.ɵɵelement(1, "i", 66);
|
|
251
251
|
i0.ɵɵelementStart(2, "p");
|
|
252
252
|
i0.ɵɵtext(3, "No input messages recorded");
|
|
253
253
|
i0.ɵɵelementEnd()();
|
|
254
254
|
} }
|
|
255
255
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Template(rf, ctx) { if (rf & 1) {
|
|
256
|
-
i0.ɵɵelementStart(0, "div",
|
|
257
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Template, 21, 12, "div",
|
|
256
|
+
i0.ɵɵelementStart(0, "div", 49);
|
|
257
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_1_Template, 21, 12, "div", 50)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Conditional_2_Template, 4, 0, "div", 51);
|
|
258
258
|
i0.ɵɵelementEnd();
|
|
259
259
|
} if (rf & 2) {
|
|
260
260
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -262,20 +262,20 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Template(
|
|
|
262
262
|
i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 1 : 2);
|
|
263
263
|
} }
|
|
264
264
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
265
|
-
i0.ɵɵelementStart(0, "span",
|
|
265
|
+
i0.ɵɵelementStart(0, "span", 48);
|
|
266
266
|
i0.ɵɵtext(1, "JSON");
|
|
267
267
|
i0.ɵɵelementEnd();
|
|
268
268
|
} }
|
|
269
269
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
270
|
-
i0.ɵɵelementStart(0, "span",
|
|
270
|
+
i0.ɵɵelementStart(0, "span", 71);
|
|
271
271
|
i0.ɵɵtext(1, "Error");
|
|
272
272
|
i0.ɵɵelementEnd();
|
|
273
273
|
} }
|
|
274
274
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template(rf, ctx) { if (rf & 1) {
|
|
275
|
-
i0.ɵɵelementStart(0, "span",
|
|
276
|
-
i0.ɵɵelement(1, "i",
|
|
275
|
+
i0.ɵɵelementStart(0, "span", 47);
|
|
276
|
+
i0.ɵɵelement(1, "i", 70);
|
|
277
277
|
i0.ɵɵtext(2, " Result ");
|
|
278
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_3_Template, 2, 0, "span",
|
|
278
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_3_Template, 2, 0, "span", 48)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Conditional_4_Template, 2, 0, "span", 71);
|
|
279
279
|
i0.ɵɵelementEnd();
|
|
280
280
|
} if (rf & 2) {
|
|
281
281
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -285,9 +285,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template(
|
|
|
285
285
|
i0.ɵɵconditional(ctx_r1.record.ErrorMessage ? 4 : -1);
|
|
286
286
|
} }
|
|
287
287
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
288
|
-
i0.ɵɵelementStart(0, "div",
|
|
289
|
-
i0.ɵɵelement(1, "i",
|
|
290
|
-
i0.ɵɵelementStart(2, "div",
|
|
288
|
+
i0.ɵɵelementStart(0, "div", 72);
|
|
289
|
+
i0.ɵɵelement(1, "i", 73);
|
|
290
|
+
i0.ɵɵelementStart(2, "div", 74)(3, "h4");
|
|
291
291
|
i0.ɵɵtext(4, "Error Message");
|
|
292
292
|
i0.ɵɵelementEnd();
|
|
293
293
|
i0.ɵɵelementStart(5, "p");
|
|
@@ -300,12 +300,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Condition
|
|
|
300
300
|
} }
|
|
301
301
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
302
302
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
303
|
-
i0.ɵɵelementStart(0, "div",
|
|
303
|
+
i0.ɵɵelementStart(0, "div", 57)(1, "div", 58)(2, "button", 59);
|
|
304
304
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_2_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedResult, "Result")); });
|
|
305
|
-
i0.ɵɵelement(3, "i",
|
|
305
|
+
i0.ɵɵelement(3, "i", 60);
|
|
306
306
|
i0.ɵɵtext(4, " Copy ");
|
|
307
307
|
i0.ɵɵelementEnd()();
|
|
308
|
-
i0.ɵɵelementStart(5, "mj-code-editor",
|
|
308
|
+
i0.ɵɵelementStart(5, "mj-code-editor", 75);
|
|
309
309
|
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_2_Template_mj_code_editor_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedResult, $event) || (ctx_r1.formattedResult = $event); return i0.ɵɵresetView($event); });
|
|
310
310
|
i0.ɵɵelementEnd()();
|
|
311
311
|
} if (rf & 2) {
|
|
@@ -315,15 +315,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Condition
|
|
|
315
315
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
316
316
|
} }
|
|
317
317
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
318
|
-
i0.ɵɵelementStart(0, "div",
|
|
319
|
-
i0.ɵɵelement(1, "i",
|
|
318
|
+
i0.ɵɵelementStart(0, "div", 51);
|
|
319
|
+
i0.ɵɵelement(1, "i", 76);
|
|
320
320
|
i0.ɵɵelementStart(2, "p");
|
|
321
321
|
i0.ɵɵtext(3, "No result data recorded");
|
|
322
322
|
i0.ɵɵelementEnd()();
|
|
323
323
|
} }
|
|
324
324
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Template(rf, ctx) { if (rf & 1) {
|
|
325
|
-
i0.ɵɵelementStart(0, "div",
|
|
326
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_1_Template, 7, 1, "div",
|
|
325
|
+
i0.ɵɵelementStart(0, "div", 49);
|
|
326
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_1_Template, 7, 1, "div", 72)(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_2_Template, 6, 4, "div", 57)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Conditional_3_Template, 4, 0, "div", 51);
|
|
327
327
|
i0.ɵɵelementEnd();
|
|
328
328
|
} if (rf & 2) {
|
|
329
329
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -333,13 +333,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Template(
|
|
|
333
333
|
i0.ɵɵconditional(ctx_r1.record.Result && ctx_r1.record.Result.trim() !== "" ? 2 : !ctx_r1.record.ErrorMessage ? 3 : -1);
|
|
334
334
|
} }
|
|
335
335
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Template(rf, ctx) { if (rf & 1) {
|
|
336
|
-
i0.ɵɵelementStart(0, "span",
|
|
337
|
-
i0.ɵɵelement(1, "i",
|
|
336
|
+
i0.ɵɵelementStart(0, "span", 47);
|
|
337
|
+
i0.ɵɵelement(1, "i", 77);
|
|
338
338
|
i0.ɵɵtext(2, " Token Usage & Metrics ");
|
|
339
339
|
i0.ɵɵelementEnd();
|
|
340
340
|
} }
|
|
341
341
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
342
|
-
i0.ɵɵelementStart(0, "div",
|
|
342
|
+
i0.ɵɵelementStart(0, "div", 83)(1, "span");
|
|
343
343
|
i0.ɵɵtext(2);
|
|
344
344
|
i0.ɵɵelementEnd()();
|
|
345
345
|
} if (rf & 2) {
|
|
@@ -348,7 +348,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
348
348
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensPromptRollup), "");
|
|
349
349
|
} }
|
|
350
350
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
351
|
-
i0.ɵɵelementStart(0, "div",
|
|
351
|
+
i0.ɵɵelementStart(0, "div", 83)(1, "span");
|
|
352
352
|
i0.ɵɵtext(2);
|
|
353
353
|
i0.ɵɵelementEnd()();
|
|
354
354
|
} if (rf & 2) {
|
|
@@ -357,7 +357,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
357
357
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensCompletionRollup), "");
|
|
358
358
|
} }
|
|
359
359
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
360
|
-
i0.ɵɵelementStart(0, "div",
|
|
360
|
+
i0.ɵɵelementStart(0, "div", 83)(1, "span");
|
|
361
361
|
i0.ɵɵtext(2);
|
|
362
362
|
i0.ɵɵelementEnd()();
|
|
363
363
|
} if (rf & 2) {
|
|
@@ -366,7 +366,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
366
366
|
i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup), "");
|
|
367
367
|
} }
|
|
368
368
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
369
|
-
i0.ɵɵelementStart(0, "div",
|
|
369
|
+
i0.ɵɵelementStart(0, "div", 83)(1, "span");
|
|
370
370
|
i0.ɵɵtext(2);
|
|
371
371
|
i0.ɵɵelementEnd()();
|
|
372
372
|
} if (rf & 2) {
|
|
@@ -375,7 +375,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
375
375
|
i0.ɵɵtextInterpolate1("Total: ", ctx_r1.formatCost(ctx_r1.record.TotalCost), "");
|
|
376
376
|
} }
|
|
377
377
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
378
|
-
i0.ɵɵelementStart(0, "div",
|
|
378
|
+
i0.ɵɵelementStart(0, "div", 85);
|
|
379
379
|
i0.ɵɵtext(1);
|
|
380
380
|
i0.ɵɵelementEnd();
|
|
381
381
|
} if (rf & 2) {
|
|
@@ -384,7 +384,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
384
384
|
i0.ɵɵtextInterpolate(ctx_r1.record.CostCurrency);
|
|
385
385
|
} }
|
|
386
386
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
387
|
-
i0.ɵɵelementStart(0, "div",
|
|
387
|
+
i0.ɵɵelementStart(0, "div", 87)(1, "span", 27);
|
|
388
388
|
i0.ɵɵtext(2, "Execution Order:");
|
|
389
389
|
i0.ɵɵelementEnd();
|
|
390
390
|
i0.ɵɵelementStart(3, "span", 28);
|
|
@@ -396,7 +396,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
396
396
|
i0.ɵɵtextInterpolate(ctx_r1.record.ExecutionOrder);
|
|
397
397
|
} }
|
|
398
398
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
399
|
-
i0.ɵɵelementStart(0, "div",
|
|
399
|
+
i0.ɵɵelementStart(0, "div", 87)(1, "span", 27);
|
|
400
400
|
i0.ɵɵtext(2, "Configuration:");
|
|
401
401
|
i0.ɵɵelementEnd();
|
|
402
402
|
i0.ɵɵelementStart(3, "span", 28);
|
|
@@ -409,13 +409,13 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
409
409
|
} }
|
|
410
410
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
411
411
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
412
|
-
i0.ɵɵelementStart(0, "div",
|
|
412
|
+
i0.ɵɵelementStart(0, "div", 87)(1, "span", 27);
|
|
413
413
|
i0.ɵɵtext(2, "Agent:");
|
|
414
414
|
i0.ɵɵelementEnd();
|
|
415
|
-
i0.ɵɵelementStart(3, "span",
|
|
415
|
+
i0.ɵɵelementStart(3, "span", 88);
|
|
416
416
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_38_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Agents", ctx_r1.record.AgentID)); });
|
|
417
417
|
i0.ɵɵtext(4);
|
|
418
|
-
i0.ɵɵelement(5, "i",
|
|
418
|
+
i0.ɵɵelement(5, "i", 89);
|
|
419
419
|
i0.ɵɵelementEnd()();
|
|
420
420
|
} if (rf & 2) {
|
|
421
421
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -423,48 +423,48 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Condition
|
|
|
423
423
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
|
|
424
424
|
} }
|
|
425
425
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Template(rf, ctx) { if (rf & 1) {
|
|
426
|
-
i0.ɵɵelementStart(0, "div",
|
|
427
|
-
i0.ɵɵelement(4, "i",
|
|
426
|
+
i0.ɵɵelementStart(0, "div", 49)(1, "div", 78)(2, "div", 79)(3, "div", 80);
|
|
427
|
+
i0.ɵɵelement(4, "i", 81);
|
|
428
428
|
i0.ɵɵelementStart(5, "h4");
|
|
429
429
|
i0.ɵɵtext(6, "Prompt Tokens");
|
|
430
430
|
i0.ɵɵelementEnd()();
|
|
431
|
-
i0.ɵɵelementStart(7, "div",
|
|
431
|
+
i0.ɵɵelementStart(7, "div", 82);
|
|
432
432
|
i0.ɵɵtext(8);
|
|
433
433
|
i0.ɵɵelementEnd();
|
|
434
|
-
i0.ɵɵtemplate(9, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_9_Template, 3, 1, "div",
|
|
434
|
+
i0.ɵɵtemplate(9, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_9_Template, 3, 1, "div", 83);
|
|
435
435
|
i0.ɵɵelementEnd();
|
|
436
|
-
i0.ɵɵelementStart(10, "div",
|
|
437
|
-
i0.ɵɵelement(12, "i",
|
|
436
|
+
i0.ɵɵelementStart(10, "div", 79)(11, "div", 80);
|
|
437
|
+
i0.ɵɵelement(12, "i", 84);
|
|
438
438
|
i0.ɵɵelementStart(13, "h4");
|
|
439
439
|
i0.ɵɵtext(14, "Completion Tokens");
|
|
440
440
|
i0.ɵɵelementEnd()();
|
|
441
|
-
i0.ɵɵelementStart(15, "div",
|
|
441
|
+
i0.ɵɵelementStart(15, "div", 82);
|
|
442
442
|
i0.ɵɵtext(16);
|
|
443
443
|
i0.ɵɵelementEnd();
|
|
444
|
-
i0.ɵɵtemplate(17, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_17_Template, 3, 1, "div",
|
|
444
|
+
i0.ɵɵtemplate(17, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_17_Template, 3, 1, "div", 83);
|
|
445
445
|
i0.ɵɵelementEnd();
|
|
446
|
-
i0.ɵɵelementStart(18, "div",
|
|
446
|
+
i0.ɵɵelementStart(18, "div", 79)(19, "div", 80);
|
|
447
447
|
i0.ɵɵelement(20, "i", 29);
|
|
448
448
|
i0.ɵɵelementStart(21, "h4");
|
|
449
449
|
i0.ɵɵtext(22, "Total Tokens");
|
|
450
450
|
i0.ɵɵelementEnd()();
|
|
451
|
-
i0.ɵɵelementStart(23, "div",
|
|
451
|
+
i0.ɵɵelementStart(23, "div", 82);
|
|
452
452
|
i0.ɵɵtext(24);
|
|
453
453
|
i0.ɵɵelementEnd();
|
|
454
|
-
i0.ɵɵtemplate(25, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_25_Template, 3, 1, "div",
|
|
454
|
+
i0.ɵɵtemplate(25, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_25_Template, 3, 1, "div", 83);
|
|
455
455
|
i0.ɵɵelementEnd();
|
|
456
|
-
i0.ɵɵelementStart(26, "div",
|
|
456
|
+
i0.ɵɵelementStart(26, "div", 79)(27, "div", 80);
|
|
457
457
|
i0.ɵɵelement(28, "i", 30);
|
|
458
458
|
i0.ɵɵelementStart(29, "h4");
|
|
459
459
|
i0.ɵɵtext(30, "Cost");
|
|
460
460
|
i0.ɵɵelementEnd()();
|
|
461
|
-
i0.ɵɵelementStart(31, "div",
|
|
461
|
+
i0.ɵɵelementStart(31, "div", 82);
|
|
462
462
|
i0.ɵɵtext(32);
|
|
463
463
|
i0.ɵɵelementEnd();
|
|
464
|
-
i0.ɵɵtemplate(33, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_33_Template, 3, 1, "div",
|
|
464
|
+
i0.ɵɵtemplate(33, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_33_Template, 3, 1, "div", 83)(34, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_34_Template, 2, 1, "div", 85);
|
|
465
465
|
i0.ɵɵelementEnd()();
|
|
466
|
-
i0.ɵɵelementStart(35, "div",
|
|
467
|
-
i0.ɵɵtemplate(36, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_36_Template, 5, 1, "div",
|
|
466
|
+
i0.ɵɵelementStart(35, "div", 86);
|
|
467
|
+
i0.ɵɵtemplate(36, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_36_Template, 5, 1, "div", 87)(37, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_37_Template, 5, 1, "div", 87)(38, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Conditional_38_Template, 6, 1, "div", 87);
|
|
468
468
|
i0.ɵɵelementEnd()();
|
|
469
469
|
} if (rf & 2) {
|
|
470
470
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -494,7 +494,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Template(
|
|
|
494
494
|
i0.ɵɵconditional(ctx_r1.record.AgentID ? 38 : -1);
|
|
495
495
|
} }
|
|
496
496
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
497
|
-
i0.ɵɵelementStart(0, "span",
|
|
497
|
+
i0.ɵɵelementStart(0, "span", 64);
|
|
498
498
|
i0.ɵɵtext(1);
|
|
499
499
|
i0.ɵɵelementEnd();
|
|
500
500
|
} if (rf & 2) {
|
|
@@ -503,20 +503,20 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
503
503
|
i0.ɵɵtextInterpolate1("(", ctx_r1.record.ValidationAttemptCount, " attempts)");
|
|
504
504
|
} }
|
|
505
505
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
506
|
-
i0.ɵɵelementStart(0, "span",
|
|
506
|
+
i0.ɵɵelementStart(0, "span", 91);
|
|
507
507
|
i0.ɵɵtext(1, "Passed");
|
|
508
508
|
i0.ɵɵelementEnd();
|
|
509
509
|
} }
|
|
510
510
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
511
|
-
i0.ɵɵelementStart(0, "span",
|
|
511
|
+
i0.ɵɵelementStart(0, "span", 71);
|
|
512
512
|
i0.ɵɵtext(1, "Failed");
|
|
513
513
|
i0.ɵɵelementEnd();
|
|
514
514
|
} }
|
|
515
515
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
516
|
-
i0.ɵɵelementStart(0, "span",
|
|
517
|
-
i0.ɵɵelement(1, "i",
|
|
516
|
+
i0.ɵɵelementStart(0, "span", 47);
|
|
517
|
+
i0.ɵɵelement(1, "i", 90);
|
|
518
518
|
i0.ɵɵtext(2, " Validation & Retries ");
|
|
519
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_3_Template, 2, 1, "span",
|
|
519
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_3_Template, 2, 1, "span", 64)(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_4_Template, 2, 0, "span", 91)(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Conditional_5_Template, 2, 0, "span", 71);
|
|
520
520
|
i0.ɵɵelementEnd();
|
|
521
521
|
} if (rf & 2) {
|
|
522
522
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -526,7 +526,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
526
526
|
i0.ɵɵconditional(ctx_r1.record.FinalValidationPassed ? 4 : ctx_r1.record.FinalValidationPassed === false ? 5 : -1);
|
|
527
527
|
} }
|
|
528
528
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
529
|
-
i0.ɵɵelementStart(0, "span",
|
|
529
|
+
i0.ɵɵelementStart(0, "span", 102);
|
|
530
530
|
i0.ɵɵtext(1);
|
|
531
531
|
i0.ɵɵelementEnd();
|
|
532
532
|
} if (rf & 2) {
|
|
@@ -535,14 +535,14 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
535
535
|
i0.ɵɵtextInterpolate1("", ctx_r1.record.ValidationErrorCount, " validation errors");
|
|
536
536
|
} }
|
|
537
537
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
538
|
-
i0.ɵɵelementStart(0, "div",
|
|
539
|
-
i0.ɵɵelement(2, "i",
|
|
538
|
+
i0.ɵɵelementStart(0, "div", 97)(1, "h5");
|
|
539
|
+
i0.ɵɵelement(2, "i", 73);
|
|
540
540
|
i0.ɵɵtext(3, " Final Validation Error");
|
|
541
541
|
i0.ɵɵelementEnd();
|
|
542
542
|
i0.ɵɵelementStart(4, "p");
|
|
543
543
|
i0.ɵɵtext(5);
|
|
544
544
|
i0.ɵɵelementEnd();
|
|
545
|
-
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Conditional_6_Template, 2, 1, "span",
|
|
545
|
+
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Conditional_6_Template, 2, 1, "span", 102);
|
|
546
546
|
i0.ɵɵelementEnd();
|
|
547
547
|
} if (rf & 2) {
|
|
548
548
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -552,8 +552,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
552
552
|
i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationErrorCount && ctx_r1.record.ValidationErrorCount > 0 ? 6 : -1);
|
|
553
553
|
} }
|
|
554
554
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
555
|
-
i0.ɵɵelementStart(0, "div",
|
|
556
|
-
i0.ɵɵelement(2, "i",
|
|
555
|
+
i0.ɵɵelementStart(0, "div", 98)(1, "h5");
|
|
556
|
+
i0.ɵɵelement(2, "i", 103);
|
|
557
557
|
i0.ɵɵtext(3, " Most Common Error");
|
|
558
558
|
i0.ɵɵelementEnd();
|
|
559
559
|
i0.ɵɵelementStart(4, "p");
|
|
@@ -565,23 +565,23 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
565
565
|
i0.ɵɵtextInterpolate(ctx_r1.record.CommonValidationError);
|
|
566
566
|
} }
|
|
567
567
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
568
|
-
i0.ɵɵelementStart(0, "div",
|
|
568
|
+
i0.ɵɵelementStart(0, "div", 99)(1, "h4");
|
|
569
569
|
i0.ɵɵtext(2, "Retry Timeline");
|
|
570
570
|
i0.ɵɵelementEnd();
|
|
571
|
-
i0.ɵɵelementStart(3, "div",
|
|
571
|
+
i0.ɵɵelementStart(3, "div", 104)(4, "div", 105);
|
|
572
572
|
i0.ɵɵelement(5, "i", 25);
|
|
573
573
|
i0.ɵɵelementStart(6, "span");
|
|
574
574
|
i0.ɵɵtext(7);
|
|
575
575
|
i0.ɵɵpipe(8, "date");
|
|
576
576
|
i0.ɵɵelementEnd()();
|
|
577
|
-
i0.ɵɵelementStart(9, "div",
|
|
578
|
-
i0.ɵɵelement(10, "i",
|
|
577
|
+
i0.ɵɵelementStart(9, "div", 105);
|
|
578
|
+
i0.ɵɵelement(10, "i", 106);
|
|
579
579
|
i0.ɵɵelementStart(11, "span");
|
|
580
580
|
i0.ɵɵtext(12);
|
|
581
581
|
i0.ɵɵpipe(13, "date");
|
|
582
582
|
i0.ɵɵelementEnd()();
|
|
583
|
-
i0.ɵɵelementStart(14, "div",
|
|
584
|
-
i0.ɵɵelement(15, "i",
|
|
583
|
+
i0.ɵɵelementStart(14, "div", 105);
|
|
584
|
+
i0.ɵɵelement(15, "i", 107);
|
|
585
585
|
i0.ɵɵelementStart(16, "span");
|
|
586
586
|
i0.ɵɵtext(17);
|
|
587
587
|
i0.ɵɵelementEnd()()()();
|
|
@@ -595,7 +595,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
595
595
|
i0.ɵɵtextInterpolate1("Total Retry Duration: ", ctx_r1.formatDuration(ctx_r1.record.TotalRetryDurationMS), "");
|
|
596
596
|
} }
|
|
597
597
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
598
|
-
i0.ɵɵelementStart(0, "span",
|
|
598
|
+
i0.ɵɵelementStart(0, "span", 102);
|
|
599
599
|
i0.ɵɵtext(1);
|
|
600
600
|
i0.ɵɵelementEnd();
|
|
601
601
|
} if (rf & 2) {
|
|
@@ -604,10 +604,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
604
604
|
i0.ɵɵtextInterpolate1("(", attempt_r11.validationErrorCount, " errors)");
|
|
605
605
|
} }
|
|
606
606
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
607
|
-
i0.ɵɵelementStart(0, "span",
|
|
607
|
+
i0.ɵɵelementStart(0, "span", 115);
|
|
608
608
|
i0.ɵɵtext(1);
|
|
609
609
|
i0.ɵɵelementEnd();
|
|
610
|
-
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span",
|
|
610
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 102);
|
|
611
611
|
} if (rf & 2) {
|
|
612
612
|
const attempt_r11 = i0.ɵɵnextContext().$implicit;
|
|
613
613
|
i0.ɵɵadvance();
|
|
@@ -616,7 +616,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
616
616
|
i0.ɵɵconditional(attempt_r11.validationErrorCount > 0 ? 2 : -1);
|
|
617
617
|
} }
|
|
618
618
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
619
|
-
i0.ɵɵelementStart(0, "span",
|
|
619
|
+
i0.ɵɵelementStart(0, "span", 114);
|
|
620
620
|
i0.ɵɵtext(1);
|
|
621
621
|
i0.ɵɵelementEnd();
|
|
622
622
|
} if (rf & 2) {
|
|
@@ -625,14 +625,14 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
625
625
|
i0.ɵɵtextInterpolate1("Output: ", attempt_r11.outputLength, " chars");
|
|
626
626
|
} }
|
|
627
627
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
628
|
-
i0.ɵɵelementStart(0, "div",
|
|
628
|
+
i0.ɵɵelementStart(0, "div", 110)(1, "div", 111);
|
|
629
629
|
i0.ɵɵelement(2, "i");
|
|
630
630
|
i0.ɵɵtext(3);
|
|
631
631
|
i0.ɵɵelementEnd();
|
|
632
|
-
i0.ɵɵelementStart(4, "div",
|
|
632
|
+
i0.ɵɵelementStart(4, "div", 112)(5, "span", 113);
|
|
633
633
|
i0.ɵɵtext(6);
|
|
634
634
|
i0.ɵɵelementEnd();
|
|
635
|
-
i0.ɵɵtemplate(7, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_7_Template, 3, 2)(8, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_8_Template, 2, 1, "span",
|
|
635
|
+
i0.ɵɵtemplate(7, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_7_Template, 3, 2)(8, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Conditional_8_Template, 2, 1, "span", 114);
|
|
636
636
|
i0.ɵɵelementEnd()();
|
|
637
637
|
} if (rf & 2) {
|
|
638
638
|
const attempt_r11 = ctx.$implicit;
|
|
@@ -649,11 +649,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
649
649
|
i0.ɵɵconditional(attempt_r11.outputLength ? 8 : -1);
|
|
650
650
|
} }
|
|
651
651
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
652
|
-
i0.ɵɵelementStart(0, "div",
|
|
652
|
+
i0.ɵɵelementStart(0, "div", 100)(1, "h4");
|
|
653
653
|
i0.ɵɵtext(2, "Validation Attempts");
|
|
654
654
|
i0.ɵɵelementEnd();
|
|
655
|
-
i0.ɵɵelementStart(3, "div",
|
|
656
|
-
i0.ɵɵrepeaterCreate(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Template, 9, 10, "div",
|
|
655
|
+
i0.ɵɵelementStart(3, "div", 108);
|
|
656
|
+
i0.ɵɵrepeaterCreate(4, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_For_5_Template, 9, 10, "div", 109, _forTrack0);
|
|
657
657
|
i0.ɵɵelementEnd()();
|
|
658
658
|
} if (rf & 2) {
|
|
659
659
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -662,10 +662,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
662
662
|
} }
|
|
663
663
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
664
664
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
665
|
-
i0.ɵɵelementStart(0, "div",
|
|
665
|
+
i0.ɵɵelementStart(0, "div", 101)(1, "h4");
|
|
666
666
|
i0.ɵɵtext(2, "Validation Summary Details");
|
|
667
667
|
i0.ɵɵelementEnd();
|
|
668
|
-
i0.ɵɵelementStart(3, "div",
|
|
668
|
+
i0.ɵɵelementStart(3, "div", 116)(4, "mj-code-editor", 117);
|
|
669
669
|
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_33_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationSummary, $event) || (ctx_r1.formattedValidationSummary = $event); return i0.ɵɵresetView($event); });
|
|
670
670
|
i0.ɵɵelementEnd()()();
|
|
671
671
|
} if (rf & 2) {
|
|
@@ -676,10 +676,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
676
676
|
} }
|
|
677
677
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
678
678
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
679
|
-
i0.ɵɵelementStart(0, "div",
|
|
679
|
+
i0.ɵɵelementStart(0, "div", 101)(1, "h4");
|
|
680
680
|
i0.ɵɵtext(2, "Validation Attempts (Raw JSON)");
|
|
681
681
|
i0.ɵɵelementEnd();
|
|
682
|
-
i0.ɵɵelementStart(3, "div",
|
|
682
|
+
i0.ɵɵelementStart(3, "div", 116)(4, "mj-code-editor", 118);
|
|
683
683
|
i0.ɵɵtwoWayListener("ngModelChange", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_34_Template_mj_code_editor_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationAttempts, $event) || (ctx_r1.formattedValidationAttempts = $event); return i0.ɵɵresetView($event); });
|
|
684
684
|
i0.ɵɵelementEnd()()();
|
|
685
685
|
} if (rf & 2) {
|
|
@@ -689,40 +689,40 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
689
689
|
i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
|
|
690
690
|
} }
|
|
691
691
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
692
|
-
i0.ɵɵelementStart(0, "div",
|
|
692
|
+
i0.ɵɵelementStart(0, "div", 49)(1, "div", 92)(2, "div", 93)(3, "h4");
|
|
693
693
|
i0.ɵɵtext(4, "Validation Summary");
|
|
694
694
|
i0.ɵɵelementEnd();
|
|
695
|
-
i0.ɵɵelementStart(5, "div",
|
|
695
|
+
i0.ɵɵelementStart(5, "div", 94);
|
|
696
696
|
i0.ɵɵelement(6, "i");
|
|
697
697
|
i0.ɵɵtext(7);
|
|
698
698
|
i0.ɵɵelementEnd()();
|
|
699
|
-
i0.ɵɵelementStart(8, "div",
|
|
699
|
+
i0.ɵɵelementStart(8, "div", 95)(9, "div", 96)(10, "div", 27);
|
|
700
700
|
i0.ɵɵtext(11, "Total Attempts");
|
|
701
701
|
i0.ɵɵelementEnd();
|
|
702
702
|
i0.ɵɵelementStart(12, "div", 28);
|
|
703
703
|
i0.ɵɵtext(13);
|
|
704
704
|
i0.ɵɵelementEnd()();
|
|
705
|
-
i0.ɵɵelementStart(14, "div",
|
|
705
|
+
i0.ɵɵelementStart(14, "div", 96)(15, "div", 27);
|
|
706
706
|
i0.ɵɵtext(16, "Successful");
|
|
707
707
|
i0.ɵɵelementEnd();
|
|
708
708
|
i0.ɵɵelementStart(17, "div", 28);
|
|
709
709
|
i0.ɵɵtext(18);
|
|
710
710
|
i0.ɵɵelementEnd()();
|
|
711
|
-
i0.ɵɵelementStart(19, "div",
|
|
711
|
+
i0.ɵɵelementStart(19, "div", 96)(20, "div", 27);
|
|
712
712
|
i0.ɵɵtext(21, "Behavior");
|
|
713
713
|
i0.ɵɵelementEnd();
|
|
714
714
|
i0.ɵɵelementStart(22, "div", 28);
|
|
715
715
|
i0.ɵɵtext(23);
|
|
716
716
|
i0.ɵɵelementEnd()();
|
|
717
|
-
i0.ɵɵelementStart(24, "div",
|
|
717
|
+
i0.ɵɵelementStart(24, "div", 96)(25, "div", 27);
|
|
718
718
|
i0.ɵɵtext(26, "Retry Strategy");
|
|
719
719
|
i0.ɵɵelementEnd();
|
|
720
720
|
i0.ɵɵelementStart(27, "div", 28);
|
|
721
721
|
i0.ɵɵtext(28);
|
|
722
722
|
i0.ɵɵelementEnd()()();
|
|
723
|
-
i0.ɵɵtemplate(29, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Template, 7, 2, "div",
|
|
723
|
+
i0.ɵɵtemplate(29, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_29_Template, 7, 2, "div", 97)(30, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_30_Template, 6, 1, "div", 98);
|
|
724
724
|
i0.ɵɵelementEnd();
|
|
725
|
-
i0.ɵɵtemplate(31, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_31_Template, 18, 9, "div",
|
|
725
|
+
i0.ɵɵtemplate(31, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_31_Template, 18, 9, "div", 99)(32, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_32_Template, 6, 0, "div", 100)(33, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_33_Template, 5, 4, "div", 101)(34, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Conditional_34_Template, 5, 4, "div", 101);
|
|
726
726
|
i0.ɵɵelementEnd();
|
|
727
727
|
} if (rf & 2) {
|
|
728
728
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -754,15 +754,15 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_templa
|
|
|
754
754
|
i0.ɵɵconditional(ctx_r1.record.ValidationAttempts ? 34 : -1);
|
|
755
755
|
} }
|
|
756
756
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_Template(rf, ctx) { if (rf & 1) {
|
|
757
|
-
i0.ɵɵelementStart(0, "kendo-panelbar-item",
|
|
758
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Template, 6, 2, "ng-template",
|
|
757
|
+
i0.ɵɵelementStart(0, "kendo-panelbar-item", 36);
|
|
758
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_1_Template, 6, 2, "ng-template", 34)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_ng_template_2_Template, 35, 17, "ng-template", 35);
|
|
759
759
|
i0.ɵɵelementEnd();
|
|
760
760
|
} if (rf & 2) {
|
|
761
761
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
762
762
|
i0.ɵɵproperty("expanded", ctx_r1.validationExpanded);
|
|
763
763
|
} }
|
|
764
764
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
765
|
-
i0.ɵɵelementStart(0, "span",
|
|
765
|
+
i0.ɵɵelementStart(0, "span", 64);
|
|
766
766
|
i0.ɵɵtext(1);
|
|
767
767
|
i0.ɵɵelementEnd();
|
|
768
768
|
} if (rf & 2) {
|
|
@@ -771,10 +771,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
|
|
|
771
771
|
i0.ɵɵtextInterpolate1("(", ctx_r1.childRuns.length, " children)");
|
|
772
772
|
} }
|
|
773
773
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
774
|
-
i0.ɵɵelementStart(0, "span",
|
|
775
|
-
i0.ɵɵelement(1, "i",
|
|
774
|
+
i0.ɵɵelementStart(0, "span", 47);
|
|
775
|
+
i0.ɵɵelement(1, "i", 119);
|
|
776
776
|
i0.ɵɵtext(2, " Run Hierarchy ");
|
|
777
|
-
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Conditional_3_Template, 2, 1, "span",
|
|
777
|
+
i0.ɵɵtemplate(3, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Conditional_3_Template, 2, 1, "span", 64);
|
|
778
778
|
i0.ɵɵelementEnd();
|
|
779
779
|
} if (rf & 2) {
|
|
780
780
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -783,21 +783,21 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
|
|
|
783
783
|
} }
|
|
784
784
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
785
785
|
const _r14 = i0.ɵɵgetCurrentView();
|
|
786
|
-
i0.ɵɵelementStart(0, "div",
|
|
787
|
-
i0.ɵɵelement(2, "i",
|
|
786
|
+
i0.ɵɵelementStart(0, "div", 120)(1, "h4");
|
|
787
|
+
i0.ɵɵelement(2, "i", 44);
|
|
788
788
|
i0.ɵɵtext(3, " Parent Run");
|
|
789
789
|
i0.ɵɵelementEnd();
|
|
790
|
-
i0.ɵɵelementStart(4, "div",
|
|
790
|
+
i0.ɵɵelementStart(4, "div", 122);
|
|
791
791
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_1_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
|
|
792
|
-
i0.ɵɵelementStart(5, "div",
|
|
792
|
+
i0.ɵɵelementStart(5, "div", 123);
|
|
793
793
|
i0.ɵɵelement(6, "i");
|
|
794
794
|
i0.ɵɵelementEnd();
|
|
795
|
-
i0.ɵɵelementStart(7, "div",
|
|
795
|
+
i0.ɵɵelementStart(7, "div", 124)(8, "div", 125);
|
|
796
796
|
i0.ɵɵtext(9);
|
|
797
|
-
i0.ɵɵelementStart(10, "span",
|
|
797
|
+
i0.ɵɵelementStart(10, "span", 126);
|
|
798
798
|
i0.ɵɵtext(11);
|
|
799
799
|
i0.ɵɵelementEnd()();
|
|
800
|
-
i0.ɵɵelementStart(12, "div",
|
|
800
|
+
i0.ɵɵelementStart(12, "div", 127)(13, "span");
|
|
801
801
|
i0.ɵɵelement(14, "i", 25);
|
|
802
802
|
i0.ɵɵtext(15);
|
|
803
803
|
i0.ɵɵelementEnd();
|
|
@@ -806,11 +806,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
|
|
|
806
806
|
i0.ɵɵtext(18);
|
|
807
807
|
i0.ɵɵelementEnd();
|
|
808
808
|
i0.ɵɵelementStart(19, "span");
|
|
809
|
-
i0.ɵɵelement(20, "i",
|
|
809
|
+
i0.ɵɵelement(20, "i", 46);
|
|
810
810
|
i0.ɵɵtext(21);
|
|
811
811
|
i0.ɵɵpipe(22, "date");
|
|
812
812
|
i0.ɵɵelementEnd()()();
|
|
813
|
-
i0.ɵɵelement(23, "i",
|
|
813
|
+
i0.ɵɵelement(23, "i", 89);
|
|
814
814
|
i0.ɵɵelementEnd()();
|
|
815
815
|
} if (rf & 2) {
|
|
816
816
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -830,7 +830,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
|
|
|
830
830
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"), "");
|
|
831
831
|
} }
|
|
832
832
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
833
|
-
i0.ɵɵelementStart(0, "span",
|
|
833
|
+
i0.ɵɵelementStart(0, "span", 132);
|
|
834
834
|
i0.ɵɵtext(1);
|
|
835
835
|
i0.ɵɵelementEnd();
|
|
836
836
|
} if (rf & 2) {
|
|
@@ -840,18 +840,18 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
|
|
|
840
840
|
} }
|
|
841
841
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
842
842
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
843
|
-
i0.ɵɵelementStart(0, "div",
|
|
843
|
+
i0.ɵɵelementStart(0, "div", 131);
|
|
844
844
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Template_div_click_0_listener() { const childRun_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r16.ID)); });
|
|
845
|
-
i0.ɵɵelementStart(1, "div",
|
|
845
|
+
i0.ɵɵelementStart(1, "div", 123);
|
|
846
846
|
i0.ɵɵelement(2, "i");
|
|
847
847
|
i0.ɵɵelementEnd();
|
|
848
|
-
i0.ɵɵelementStart(3, "div",
|
|
848
|
+
i0.ɵɵelementStart(3, "div", 124)(4, "div", 125);
|
|
849
849
|
i0.ɵɵtext(5);
|
|
850
|
-
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Conditional_6_Template, 2, 1, "span",
|
|
851
|
-
i0.ɵɵelementStart(7, "span",
|
|
850
|
+
i0.ɵɵtemplate(6, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Conditional_6_Template, 2, 1, "span", 132);
|
|
851
|
+
i0.ɵɵelementStart(7, "span", 126);
|
|
852
852
|
i0.ɵɵtext(8);
|
|
853
853
|
i0.ɵɵelementEnd()();
|
|
854
|
-
i0.ɵɵelementStart(9, "div",
|
|
854
|
+
i0.ɵɵelementStart(9, "div", 127)(10, "span", 133);
|
|
855
855
|
i0.ɵɵelement(11, "i");
|
|
856
856
|
i0.ɵɵtext(12);
|
|
857
857
|
i0.ɵɵelementEnd();
|
|
@@ -863,7 +863,7 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
|
|
|
863
863
|
i0.ɵɵelement(17, "i", 29);
|
|
864
864
|
i0.ɵɵtext(18);
|
|
865
865
|
i0.ɵɵelementEnd()()();
|
|
866
|
-
i0.ɵɵelement(19, "i",
|
|
866
|
+
i0.ɵɵelement(19, "i", 89);
|
|
867
867
|
i0.ɵɵelementEnd();
|
|
868
868
|
} if (rf & 2) {
|
|
869
869
|
const childRun_r16 = ctx.$implicit;
|
|
@@ -890,12 +890,12 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
|
|
|
890
890
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r16.TokensUsed), "");
|
|
891
891
|
} }
|
|
892
892
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
893
|
-
i0.ɵɵelementStart(0, "div",
|
|
894
|
-
i0.ɵɵelement(2, "i",
|
|
893
|
+
i0.ɵɵelementStart(0, "div", 121)(1, "h4");
|
|
894
|
+
i0.ɵɵelement(2, "i", 128);
|
|
895
895
|
i0.ɵɵtext(3, " Child Runs");
|
|
896
896
|
i0.ɵɵelementEnd();
|
|
897
|
-
i0.ɵɵelementStart(4, "div",
|
|
898
|
-
i0.ɵɵrepeaterCreate(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Template, 20, 14, "div",
|
|
897
|
+
i0.ɵɵelementStart(4, "div", 129);
|
|
898
|
+
i0.ɵɵrepeaterCreate(5, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_For_6_Template, 20, 14, "div", 130, _forTrack1);
|
|
899
899
|
i0.ɵɵelementEnd()();
|
|
900
900
|
} if (rf & 2) {
|
|
901
901
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -903,8 +903,8 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
|
|
|
903
903
|
i0.ɵɵrepeater(ctx_r1.childRuns);
|
|
904
904
|
} }
|
|
905
905
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
906
|
-
i0.ɵɵelementStart(0, "div",
|
|
907
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_1_Template, 24, 12, "div",
|
|
906
|
+
i0.ɵɵelementStart(0, "div", 49);
|
|
907
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_1_Template, 24, 12, "div", 120)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Conditional_2_Template, 7, 0, "div", 121);
|
|
908
908
|
i0.ɵɵelementEnd();
|
|
909
909
|
} if (rf & 2) {
|
|
910
910
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -914,29 +914,29 @@ function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_templa
|
|
|
914
914
|
i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 2 : -1);
|
|
915
915
|
} }
|
|
916
916
|
function AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_Template(rf, ctx) { if (rf & 1) {
|
|
917
|
-
i0.ɵɵelementStart(0, "kendo-panelbar-item",
|
|
918
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Template, 4, 1, "ng-template",
|
|
917
|
+
i0.ɵɵelementStart(0, "kendo-panelbar-item", 36);
|
|
918
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_1_Template, 4, 1, "ng-template", 34)(2, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_ng_template_2_Template, 3, 2, "ng-template", 35);
|
|
919
919
|
i0.ɵɵelementEnd();
|
|
920
920
|
} if (rf & 2) {
|
|
921
921
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
922
922
|
i0.ɵɵproperty("expanded", ctx_r1.hierarchyExpanded);
|
|
923
923
|
} }
|
|
924
924
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_64_Template(rf, ctx) { if (rf & 1) {
|
|
925
|
-
i0.ɵɵelementStart(0, "span",
|
|
926
|
-
i0.ɵɵelement(1, "i",
|
|
925
|
+
i0.ɵɵelementStart(0, "span", 47);
|
|
926
|
+
i0.ɵɵelement(1, "i", 134);
|
|
927
927
|
i0.ɵɵtext(2, " Additional Details ");
|
|
928
928
|
i0.ɵɵelementEnd();
|
|
929
929
|
} }
|
|
930
930
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
931
931
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
932
|
-
i0.ɵɵelementStart(0, "div",
|
|
932
|
+
i0.ɵɵelementStart(0, "div", 136)(1, "label");
|
|
933
933
|
i0.ɵɵtext(2, "Agent");
|
|
934
934
|
i0.ɵɵelementEnd();
|
|
935
|
-
i0.ɵɵelementStart(3, "div",
|
|
935
|
+
i0.ɵɵelementStart(3, "div", 144);
|
|
936
936
|
i0.ɵɵlistener("click", function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_2_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("AI Agents", ctx_r1.record.AgentID)); });
|
|
937
|
-
i0.ɵɵelement(4, "i",
|
|
937
|
+
i0.ɵɵelement(4, "i", 145);
|
|
938
938
|
i0.ɵɵtext(5);
|
|
939
|
-
i0.ɵɵelement(6, "i",
|
|
939
|
+
i0.ɵɵelement(6, "i", 89);
|
|
940
940
|
i0.ɵɵelementEnd()();
|
|
941
941
|
} if (rf & 2) {
|
|
942
942
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -944,11 +944,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
|
|
|
944
944
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Unknown", " ");
|
|
945
945
|
} }
|
|
946
946
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
947
|
-
i0.ɵɵelementStart(0, "div",
|
|
947
|
+
i0.ɵɵelementStart(0, "div", 136)(1, "label");
|
|
948
948
|
i0.ɵɵtext(2, "Configuration");
|
|
949
949
|
i0.ɵɵelementEnd();
|
|
950
|
-
i0.ɵɵelementStart(3, "div",
|
|
951
|
-
i0.ɵɵelement(4, "i",
|
|
950
|
+
i0.ɵɵelementStart(3, "div", 137);
|
|
951
|
+
i0.ɵɵelement(4, "i", 146);
|
|
952
952
|
i0.ɵɵtext(5);
|
|
953
953
|
i0.ɵɵelementEnd()();
|
|
954
954
|
} if (rf & 2) {
|
|
@@ -957,10 +957,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
|
|
|
957
957
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Configuration || "Unknown", " ");
|
|
958
958
|
} }
|
|
959
959
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
960
|
-
i0.ɵɵelementStart(0, "div",
|
|
960
|
+
i0.ɵɵelementStart(0, "div", 136)(1, "label");
|
|
961
961
|
i0.ɵɵtext(2, "Run Type");
|
|
962
962
|
i0.ɵɵelementEnd();
|
|
963
|
-
i0.ɵɵelementStart(3, "div",
|
|
963
|
+
i0.ɵɵelementStart(3, "div", 137);
|
|
964
964
|
i0.ɵɵelement(4, "i");
|
|
965
965
|
i0.ɵɵtext(5);
|
|
966
966
|
i0.ɵɵelementEnd()();
|
|
@@ -972,11 +972,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
|
|
|
972
972
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
|
|
973
973
|
} }
|
|
974
974
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
975
|
-
i0.ɵɵelementStart(0, "div",
|
|
975
|
+
i0.ɵɵelementStart(0, "div", 136)(1, "label");
|
|
976
976
|
i0.ɵɵtext(2, "Response Format");
|
|
977
977
|
i0.ɵɵelementEnd();
|
|
978
|
-
i0.ɵɵelementStart(3, "div",
|
|
979
|
-
i0.ɵɵelement(4, "i",
|
|
978
|
+
i0.ɵɵelementStart(3, "div", 137);
|
|
979
|
+
i0.ɵɵelement(4, "i", 69);
|
|
980
980
|
i0.ɵɵtext(5);
|
|
981
981
|
i0.ɵɵelementEnd()();
|
|
982
982
|
} if (rf & 2) {
|
|
@@ -985,10 +985,10 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
|
|
|
985
985
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.ResponseFormat, " ");
|
|
986
986
|
} }
|
|
987
987
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_48_Template(rf, ctx) { if (rf & 1) {
|
|
988
|
-
i0.ɵɵelementStart(0, "div",
|
|
988
|
+
i0.ɵɵelementStart(0, "div", 136)(1, "label");
|
|
989
989
|
i0.ɵɵtext(2, "Started At");
|
|
990
990
|
i0.ɵɵelementEnd();
|
|
991
|
-
i0.ɵɵelementStart(3, "div",
|
|
991
|
+
i0.ɵɵelementStart(3, "div", 137);
|
|
992
992
|
i0.ɵɵelement(4, "i", 25);
|
|
993
993
|
i0.ɵɵtext(5);
|
|
994
994
|
i0.ɵɵpipe(6, "date");
|
|
@@ -999,11 +999,11 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
|
|
|
999
999
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.RunAt, "medium"), " ");
|
|
1000
1000
|
} }
|
|
1001
1001
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_49_Template(rf, ctx) { if (rf & 1) {
|
|
1002
|
-
i0.ɵɵelementStart(0, "div",
|
|
1002
|
+
i0.ɵɵelementStart(0, "div", 136)(1, "label");
|
|
1003
1003
|
i0.ɵɵtext(2, "Completed At");
|
|
1004
1004
|
i0.ɵɵelementEnd();
|
|
1005
|
-
i0.ɵɵelementStart(3, "div",
|
|
1006
|
-
i0.ɵɵelement(4, "i",
|
|
1005
|
+
i0.ɵɵelementStart(3, "div", 137);
|
|
1006
|
+
i0.ɵɵelement(4, "i", 147);
|
|
1007
1007
|
i0.ɵɵtext(5);
|
|
1008
1008
|
i0.ɵɵpipe(6, "date");
|
|
1009
1009
|
i0.ɵɵelementEnd()();
|
|
@@ -1013,58 +1013,58 @@ function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Condition
|
|
|
1013
1013
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.CompletedAt, "medium"), " ");
|
|
1014
1014
|
} }
|
|
1015
1015
|
function AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Template(rf, ctx) { if (rf & 1) {
|
|
1016
|
-
i0.ɵɵelementStart(0, "div",
|
|
1017
|
-
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_2_Template, 7, 1, "div",
|
|
1018
|
-
i0.ɵɵelementStart(6, "div",
|
|
1016
|
+
i0.ɵɵelementStart(0, "div", 49)(1, "div", 135);
|
|
1017
|
+
i0.ɵɵtemplate(2, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_2_Template, 7, 1, "div", 136)(3, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_3_Template, 6, 1, "div", 136)(4, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_4_Template, 6, 3, "div", 136)(5, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_5_Template, 6, 1, "div", 136);
|
|
1018
|
+
i0.ɵɵelementStart(6, "div", 136)(7, "label");
|
|
1019
1019
|
i0.ɵɵtext(8, "Temperature");
|
|
1020
1020
|
i0.ɵɵelementEnd();
|
|
1021
|
-
i0.ɵɵelementStart(9, "div",
|
|
1022
|
-
i0.ɵɵelement(10, "i",
|
|
1021
|
+
i0.ɵɵelementStart(9, "div", 137);
|
|
1022
|
+
i0.ɵɵelement(10, "i", 138);
|
|
1023
1023
|
i0.ɵɵtext(11);
|
|
1024
1024
|
i0.ɵɵelementEnd()();
|
|
1025
|
-
i0.ɵɵelementStart(12, "div",
|
|
1025
|
+
i0.ɵɵelementStart(12, "div", 136)(13, "label");
|
|
1026
1026
|
i0.ɵɵtext(14, "Top P");
|
|
1027
1027
|
i0.ɵɵelementEnd();
|
|
1028
|
-
i0.ɵɵelementStart(15, "div",
|
|
1029
|
-
i0.ɵɵelement(16, "i",
|
|
1028
|
+
i0.ɵɵelementStart(15, "div", 137);
|
|
1029
|
+
i0.ɵɵelement(16, "i", 139);
|
|
1030
1030
|
i0.ɵɵtext(17);
|
|
1031
1031
|
i0.ɵɵelementEnd()();
|
|
1032
|
-
i0.ɵɵelementStart(18, "div",
|
|
1032
|
+
i0.ɵɵelementStart(18, "div", 136)(19, "label");
|
|
1033
1033
|
i0.ɵɵtext(20, "Top K");
|
|
1034
1034
|
i0.ɵɵelementEnd();
|
|
1035
|
-
i0.ɵɵelementStart(21, "div",
|
|
1036
|
-
i0.ɵɵelement(22, "i",
|
|
1035
|
+
i0.ɵɵelementStart(21, "div", 137);
|
|
1036
|
+
i0.ɵɵelement(22, "i", 140);
|
|
1037
1037
|
i0.ɵɵtext(23);
|
|
1038
1038
|
i0.ɵɵelementEnd()();
|
|
1039
|
-
i0.ɵɵelementStart(24, "div",
|
|
1039
|
+
i0.ɵɵelementStart(24, "div", 136)(25, "label");
|
|
1040
1040
|
i0.ɵɵtext(26, "Min P");
|
|
1041
1041
|
i0.ɵɵelementEnd();
|
|
1042
|
-
i0.ɵɵelementStart(27, "div",
|
|
1043
|
-
i0.ɵɵelement(28, "i",
|
|
1042
|
+
i0.ɵɵelementStart(27, "div", 137);
|
|
1043
|
+
i0.ɵɵelement(28, "i", 141);
|
|
1044
1044
|
i0.ɵɵtext(29);
|
|
1045
1045
|
i0.ɵɵelementEnd()();
|
|
1046
|
-
i0.ɵɵelementStart(30, "div",
|
|
1046
|
+
i0.ɵɵelementStart(30, "div", 136)(31, "label");
|
|
1047
1047
|
i0.ɵɵtext(32, "Frequency Penalty");
|
|
1048
1048
|
i0.ɵɵelementEnd();
|
|
1049
|
-
i0.ɵɵelementStart(33, "div",
|
|
1050
|
-
i0.ɵɵelement(34, "i",
|
|
1049
|
+
i0.ɵɵelementStart(33, "div", 137);
|
|
1050
|
+
i0.ɵɵelement(34, "i", 103);
|
|
1051
1051
|
i0.ɵɵtext(35);
|
|
1052
1052
|
i0.ɵɵelementEnd()();
|
|
1053
|
-
i0.ɵɵelementStart(36, "div",
|
|
1053
|
+
i0.ɵɵelementStart(36, "div", 136)(37, "label");
|
|
1054
1054
|
i0.ɵɵtext(38, "Presence Penalty");
|
|
1055
1055
|
i0.ɵɵelementEnd();
|
|
1056
|
-
i0.ɵɵelementStart(39, "div",
|
|
1057
|
-
i0.ɵɵelement(40, "i",
|
|
1056
|
+
i0.ɵɵelementStart(39, "div", 137);
|
|
1057
|
+
i0.ɵɵelement(40, "i", 142);
|
|
1058
1058
|
i0.ɵɵtext(41);
|
|
1059
1059
|
i0.ɵɵelementEnd()();
|
|
1060
|
-
i0.ɵɵelementStart(42, "div",
|
|
1060
|
+
i0.ɵɵelementStart(42, "div", 136)(43, "label");
|
|
1061
1061
|
i0.ɵɵtext(44, "Seed");
|
|
1062
1062
|
i0.ɵɵelementEnd();
|
|
1063
|
-
i0.ɵɵelementStart(45, "div",
|
|
1064
|
-
i0.ɵɵelement(46, "i",
|
|
1063
|
+
i0.ɵɵelementStart(45, "div", 137);
|
|
1064
|
+
i0.ɵɵelement(46, "i", 143);
|
|
1065
1065
|
i0.ɵɵtext(47);
|
|
1066
1066
|
i0.ɵɵelementEnd()();
|
|
1067
|
-
i0.ɵɵtemplate(48, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_48_Template, 7, 4, "div",
|
|
1067
|
+
i0.ɵɵtemplate(48, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_48_Template, 7, 4, "div", 136)(49, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Conditional_49_Template, 7, 4, "div", 136);
|
|
1068
1068
|
i0.ɵɵelementEnd()();
|
|
1069
1069
|
} if (rf & 2) {
|
|
1070
1070
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1161,19 +1161,19 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
|
|
|
1161
1161
|
i0.ɵɵelementEnd()()();
|
|
1162
1162
|
i0.ɵɵtemplate(49, AIPromptRunFormComponentExtended_Conditional_1_Conditional_49_Template, 8, 4, "div", 24);
|
|
1163
1163
|
i0.ɵɵelementEnd()();
|
|
1164
|
-
i0.ɵɵelementStart(50, "div", 31)(51, "kendo-panelbar")(52, "kendo-panelbar-item",
|
|
1164
|
+
i0.ɵɵelementStart(50, "div", 31)(51, "kendo-panelbar", 32)(52, "kendo-panelbar-item", 33);
|
|
1165
1165
|
i0.ɵɵlistener("stateChange", function AIPromptRunFormComponentExtended_Conditional_1_Template_kendo_panelbar_item_stateChange_52_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputPanelToggle()); });
|
|
1166
|
-
i0.ɵɵtemplate(53, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Template, 4, 1, "ng-template",
|
|
1166
|
+
i0.ɵɵtemplate(53, AIPromptRunFormComponentExtended_Conditional_1_ng_template_53_Template, 4, 1, "ng-template", 34)(54, AIPromptRunFormComponentExtended_Conditional_1_ng_template_54_Template, 3, 1, "ng-template", 35);
|
|
1167
1167
|
i0.ɵɵelementEnd();
|
|
1168
|
-
i0.ɵɵelementStart(55, "kendo-panelbar-item",
|
|
1169
|
-
i0.ɵɵtemplate(56, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template, 5, 2, "ng-template",
|
|
1168
|
+
i0.ɵɵelementStart(55, "kendo-panelbar-item", 36);
|
|
1169
|
+
i0.ɵɵtemplate(56, AIPromptRunFormComponentExtended_Conditional_1_ng_template_56_Template, 5, 2, "ng-template", 34)(57, AIPromptRunFormComponentExtended_Conditional_1_ng_template_57_Template, 4, 2, "ng-template", 35);
|
|
1170
1170
|
i0.ɵɵelementEnd();
|
|
1171
|
-
i0.ɵɵelementStart(58, "kendo-panelbar-item",
|
|
1172
|
-
i0.ɵɵtemplate(59, AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Template, 3, 0, "ng-template",
|
|
1171
|
+
i0.ɵɵelementStart(58, "kendo-panelbar-item", 36);
|
|
1172
|
+
i0.ɵɵtemplate(59, AIPromptRunFormComponentExtended_Conditional_1_ng_template_59_Template, 3, 0, "ng-template", 34)(60, AIPromptRunFormComponentExtended_Conditional_1_ng_template_60_Template, 39, 12, "ng-template", 35);
|
|
1173
1173
|
i0.ɵɵelementEnd();
|
|
1174
|
-
i0.ɵɵtemplate(61, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_Template, 3, 1, "kendo-panelbar-item",
|
|
1175
|
-
i0.ɵɵelementStart(63, "kendo-panelbar-item",
|
|
1176
|
-
i0.ɵɵtemplate(64, AIPromptRunFormComponentExtended_Conditional_1_ng_template_64_Template, 3, 0, "ng-template",
|
|
1174
|
+
i0.ɵɵtemplate(61, AIPromptRunFormComponentExtended_Conditional_1_Conditional_61_Template, 3, 1, "kendo-panelbar-item", 36)(62, AIPromptRunFormComponentExtended_Conditional_1_Conditional_62_Template, 3, 1, "kendo-panelbar-item", 36);
|
|
1175
|
+
i0.ɵɵelementStart(63, "kendo-panelbar-item", 36);
|
|
1176
|
+
i0.ɵɵtemplate(64, AIPromptRunFormComponentExtended_Conditional_1_ng_template_64_Template, 3, 0, "ng-template", 34)(65, AIPromptRunFormComponentExtended_Conditional_1_ng_template_65_Template, 50, 27, "ng-template", 35);
|
|
1177
1177
|
i0.ɵɵelementEnd()()()();
|
|
1178
1178
|
} if (rf & 2) {
|
|
1179
1179
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -1210,7 +1210,9 @@ function AIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (
|
|
|
1210
1210
|
i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
|
|
1211
1211
|
i0.ɵɵadvance();
|
|
1212
1212
|
i0.ɵɵconditional(ctx_r1.record.RunAt ? 49 : -1);
|
|
1213
|
-
i0.ɵɵadvance(
|
|
1213
|
+
i0.ɵɵadvance(2);
|
|
1214
|
+
i0.ɵɵproperty("keepItemContent", true);
|
|
1215
|
+
i0.ɵɵadvance();
|
|
1214
1216
|
i0.ɵɵproperty("expanded", ctx_r1.inputExpanded);
|
|
1215
1217
|
i0.ɵɵadvance(3);
|
|
1216
1218
|
i0.ɵɵproperty("expanded", ctx_r1.resultExpanded);
|
|
@@ -1542,9 +1544,9 @@ let AIPromptRunFormComponentExtended = class AIPromptRunFormComponentExtended ex
|
|
|
1542
1544
|
this.validationExpanded = (this.record.ValidationAttemptCount || 0) > 1;
|
|
1543
1545
|
}
|
|
1544
1546
|
static { this.ɵfac = function AIPromptRunFormComponentExtended_Factory(t) { return new (t || AIPromptRunFormComponentExtended)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.TestHarnessWindowService), i0.ɵɵdirectiveInject(i0.ViewContainerRef)); }; }
|
|
1545
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [["form", "ngForm"], [1, "record-form-container"], [1, "record-form"], [3, "form"], [1, "prompt-run-header"], [1, "header-content"], [1, "run-overview"], [1, "run-icon-wrapper"], [1, "run-info"], [1, "run-title"], [1, "run-id"], [1, "run-meta"], [1, "status-badge"], [1, "run-type-badge", 3, "color"], ["title", "View Prompt", 1, "prompt-name"], ["title", "View Model", 1, "model-name"], ["title", "View Vendor", 1, "vendor-name"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions"], ["kendoButton", "", "fillMode", "outline", "size", "small", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["kendoButton", "", "fillMode", "outline", "size", "small", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "metric-item"], [1, "fa-solid", "fa-clock"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], [1, "fa-solid", "fa-coins"], [1, "fa-solid", "fa-dollar-sign"], [1, "form-content"], [3, "stateChange", "expanded"], ["kendoPanelBarItemTitle", ""], ["kendoPanelBarContent", ""], [3, "expanded"], [1, "run-type-badge"], ["title", "View Prompt", 1, "prompt-name", 3, "click"], [1, "fa-solid", "fa-comment-dots"], ["title", "View Model", 1, "model-name", 3, "click"], [1, "fa-solid", "fa-microchip"], ["title", "View Vendor", 1, "vendor-name", 3, "click"], [1, "fa-solid", "fa-building"], [1, "fa-solid", "fa-level-up-alt"], [1, "original-link", 3, "click"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "panel-badge"], [1, "panel-content"], [1, "nested-panels"], [1, "empty-state"], [1, "sub-expansion-panel", 3, "expanded", "animation"], ["kendoExpansionPanelTitleDirective", ""], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], [1, "json-editor-container"], [1, "json-toolbar"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "sub-panel-title"], [1, "fa-solid", "fa-comments"], [1, "panel-count"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-comment-slash"], [1, "fa-solid", "fa-database"], ["name", "formattedData", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "error-message"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], ["name", "formattedResult", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-inbox"], [1, "fa-solid", "fa-chart-line"], [1, "metrics-grid"], [1, "metric-card"], [1, "metric-header"], [1, "fa-solid", "fa-message"], [1, "metric-value", "large"], [1, "metric-rollup"], [1, "fa-solid", "fa-reply"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [1, "metric-value", "link", 3, "click"], [1, "fa-solid", "fa-external-link"], [1, "fa-solid", "fa-shield-check"], [1, "panel-badge", "success"], [1, "validation-summary"], [1, "summary-header"], [1, "validation-status"], [1, "validation-metrics"], [1, "metric-card", "small"], [1, "validation-error"], [1, "common-error"], [1, "retry-timeline"], [1, "validation-attempts"], [1, "validation-json"], [1, "error-count"], [1, "fa-solid", "fa-repeat"], [1, "timeline-info"], [1, "timeline-stat"], [1, "fa-solid", "fa-flag-checkered"], [1, "fa-solid", "fa-stopwatch"], [1, "attempts-list"], [1, "attempt-item", 3, "success", "failed"], [1, "attempt-item"], [1, "attempt-number"], [1, "attempt-details"], [1, "attempt-time"], [1, "output-length"], [1, "attempt-error"], [1, "json-viewer-container"], ["name", "formattedValidationSummary", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedValidationAttempts", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-sitemap"], [1, "parent-run-section"], [1, "child-runs-section"], [1, "run-item", "parent", 3, "click"], [1, "run-item-icon"], [1, "run-item-content"], [1, "run-item-title"], [1, "run-item-type"], [1, "run-item-meta"], [1, "fa-solid", "fa-level-down-alt"], [1, "runs-list"], [1, "run-item", "child"], [1, "run-item", "child", 3, "click"], [1, "execution-order"], [1, "status-indicator"], [1, "fa-solid", "fa-info-circle"], [1, "detail-fields-grid"], [1, "detail-field"], [1, "detail-value"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], ["title", "View Agent", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-check-circle"]], template: function AIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
1547
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [["form", "ngForm"], [1, "record-form-container"], [1, "record-form"], [3, "form"], [1, "prompt-run-header"], [1, "header-content"], [1, "run-overview"], [1, "run-icon-wrapper"], [1, "run-info"], [1, "run-title"], [1, "run-id"], [1, "run-meta"], [1, "status-badge"], [1, "run-type-badge", 3, "color"], ["title", "View Prompt", 1, "prompt-name"], ["title", "View Model", 1, "model-name"], ["title", "View Vendor", 1, "vendor-name"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions"], ["kendoButton", "", "fillMode", "outline", "size", "small", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["kendoButton", "", "fillMode", "outline", "size", "small", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "metric-item"], [1, "fa-solid", "fa-clock"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], [1, "fa-solid", "fa-coins"], [1, "fa-solid", "fa-dollar-sign"], [1, "form-content"], [3, "keepItemContent"], [3, "stateChange", "expanded"], ["kendoPanelBarItemTitle", ""], ["kendoPanelBarContent", ""], [3, "expanded"], [1, "run-type-badge"], ["title", "View Prompt", 1, "prompt-name", 3, "click"], [1, "fa-solid", "fa-comment-dots"], ["title", "View Model", 1, "model-name", 3, "click"], [1, "fa-solid", "fa-microchip"], ["title", "View Vendor", 1, "vendor-name", 3, "click"], [1, "fa-solid", "fa-building"], [1, "fa-solid", "fa-level-up-alt"], [1, "original-link", 3, "click"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "panel-badge"], [1, "panel-content"], [1, "nested-panels"], [1, "empty-state"], [1, "sub-expansion-panel", 3, "expanded", "animation"], ["kendoExpansionPanelTitleDirective", ""], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], [1, "json-editor-container"], [1, "json-toolbar"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "sub-panel-title"], [1, "fa-solid", "fa-comments"], [1, "panel-count"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-comment-slash"], [1, "fa-solid", "fa-database"], ["name", "formattedData", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "error-message"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], ["name", "formattedResult", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-inbox"], [1, "fa-solid", "fa-chart-line"], [1, "metrics-grid"], [1, "metric-card"], [1, "metric-header"], [1, "fa-solid", "fa-message"], [1, "metric-value", "large"], [1, "metric-rollup"], [1, "fa-solid", "fa-reply"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [1, "metric-value", "link", 3, "click"], [1, "fa-solid", "fa-external-link"], [1, "fa-solid", "fa-shield-check"], [1, "panel-badge", "success"], [1, "validation-summary"], [1, "summary-header"], [1, "validation-status"], [1, "validation-metrics"], [1, "metric-card", "small"], [1, "validation-error"], [1, "common-error"], [1, "retry-timeline"], [1, "validation-attempts"], [1, "validation-json"], [1, "error-count"], [1, "fa-solid", "fa-repeat"], [1, "timeline-info"], [1, "timeline-stat"], [1, "fa-solid", "fa-flag-checkered"], [1, "fa-solid", "fa-stopwatch"], [1, "attempts-list"], [1, "attempt-item", 3, "success", "failed"], [1, "attempt-item"], [1, "attempt-number"], [1, "attempt-details"], [1, "attempt-time"], [1, "output-length"], [1, "attempt-error"], [1, "json-viewer-container"], ["name", "formattedValidationSummary", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedValidationAttempts", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-sitemap"], [1, "parent-run-section"], [1, "child-runs-section"], [1, "run-item", "parent", 3, "click"], [1, "run-item-icon"], [1, "run-item-content"], [1, "run-item-title"], [1, "run-item-type"], [1, "run-item-meta"], [1, "fa-solid", "fa-level-down-alt"], [1, "runs-list"], [1, "run-item", "child"], [1, "run-item", "child", 3, "click"], [1, "execution-order"], [1, "status-indicator"], [1, "fa-solid", "fa-info-circle"], [1, "detail-fields-grid"], [1, "detail-field"], [1, "detail-value"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], ["title", "View Agent", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-check-circle"]], template: function AIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
1546
1548
|
i0.ɵɵelementStart(0, "div", 1);
|
|
1547
|
-
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Template, 66,
|
|
1549
|
+
i0.ɵɵtemplate(1, AIPromptRunFormComponentExtended_Conditional_1_Template, 66, 29, "form", 2);
|
|
1548
1550
|
i0.ɵɵelementEnd();
|
|
1549
1551
|
} if (rf & 2) {
|
|
1550
1552
|
i0.ɵɵadvance();
|
|
@@ -1557,7 +1559,7 @@ AIPromptRunFormComponentExtended = __decorate([
|
|
|
1557
1559
|
export { AIPromptRunFormComponentExtended };
|
|
1558
1560
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIPromptRunFormComponentExtended, [{
|
|
1559
1561
|
type: Component,
|
|
1560
|
-
args: [{ selector: 'mj-ai-prompt-run-form', template: "<div class=\"record-form-container\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\">\n <mj-form-toolbar [form]=\"this\"></mj-form-toolbar>\n\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <span class=\"status-badge\" [style.background-color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ getStatusText() }}\n </span>\n @if (record.RunType) {\n <span class=\"run-type-badge\" [style.color]=\"getRunTypeColor(record.RunType)\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </span>\n }\n @if (prompt) {\n <span class=\"prompt-name\" (click)=\"navigateToEntity('AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n {{ prompt.Name }}\n </span>\n }\n @if (model) {\n <span class=\"model-name\" (click)=\"navigateToEntity('AI Models', model.ID)\" title=\"View Model\">\n <i class=\"fa-solid fa-microchip\"></i>\n {{ model.Name }}\n </span>\n }\n @if (record.Vendor) {\n <span class=\"vendor-name\" (click)=\"navigateToEntity('MJ: AI Vendors', record.VendorID)\" title=\"View Vendor\">\n <i class=\"fa-solid fa-building\"></i>\n {{ record.Vendor }}\n </span>\n }\n @if (record.RerunFromPromptRunID) {\n <span class=\"original-run\" title=\"View Original Run\">\n <i class=\"fa-solid fa-level-up-alt\"></i>\n <a (click)=\"navigateToOriginalRun()\" class=\"original-link\">Original Run</a>\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions\">\n <button kendoButton fillMode=\"outline\" size=\"small\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button kendoButton fillMode=\"outline\" size=\"small\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensUsed) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\">\n <kendo-panelbar>\n \n <!-- Input Panel with nested sub-panels -->\n <kendo-panelbar-item [expanded]=\"inputExpanded\" (stateChange)=\"onInputPanelToggle()\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <!-- Nested expansion panels for sub-sections -->\n <div class=\"nested-panels\">\n <!-- Messages Sub-Panel -->\n <kendo-expansionpanel \n [expanded]=\"messagesExpanded\" \n class=\"sub-expansion-panel\"\n [animation]=\"false\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Messages\n @if (chatMessages.length > 0) {\n <span class=\"panel-count\">({{ chatMessages.length }})</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (isParsingMessages || isLoadingRelatedData) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading messages...</p>\n </div>\n } @else if (chatMessages.length > 0) {\n <mj-chat-message-viewer \n [messages]=\"chatMessages\">\n </mj-chat-message-viewer>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No chat messages found</p>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n \n <!-- Data Sub-Panel -->\n <kendo-expansionpanel \n [expanded]=\"dataExpanded\" \n class=\"sub-expansion-panel\"\n [animation]=\"false\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-database\"></i>\n Data\n @if (inputData) {\n <span class=\"panel-badge\">Object</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (inputData && formattedData) {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button kendoButton\n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedData\"\n name=\"formattedData\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No data object found</p>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n \n <!-- Raw Sub-Panel -->\n <kendo-expansionpanel \n [expanded]=\"rawExpanded\" \n class=\"sub-expansion-panel\"\n [animation]=\"false\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Raw\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button kendoButton\n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessages\"\n name=\"formattedMessages\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </kendo-expansionpanel>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Result Panel -->\n <kendo-panelbar-item [expanded]=\"resultExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button kendoButton\n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedResult\"\n name=\"formattedResult\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (!record.ErrorMessage) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No result data recorded</p>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Token Usage & Metrics Panel -->\n <kendo-panelbar-item [expanded]=\"metricsExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage & Metrics\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensPrompt) }}</div>\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensUsed) }}</div>\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.ConfigurationID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Configuration:</span>\n <span class=\"metric-value\">{{ record.Configuration }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <kendo-panelbar-item [expanded]=\"validationExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation & Retries\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <span class=\"panel-count\">({{ record.ValidationAttemptCount }} attempts)</span>\n }\n @if (record.FinalValidationPassed) {\n <span class=\"panel-badge success\">Passed</span>\n } @else if (record.FinalValidationPassed === false) {\n <span class=\"panel-badge error\">Failed</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <!-- Validation Summary -->\n <div class=\"validation-summary\">\n <div class=\"summary-header\">\n <h4>Validation Summary</h4>\n <div class=\"validation-status\" [class.success]=\"record.FinalValidationPassed\" [class.failed]=\"!record.FinalValidationPassed\">\n <i [class]=\"record.FinalValidationPassed ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.FinalValidationPassed ? 'Validation Passed' : 'Validation Failed' }}\n </div>\n </div>\n \n <div class=\"validation-metrics\">\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Total Attempts</div>\n <div class=\"metric-value\">{{ record.ValidationAttemptCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Successful</div>\n <div class=\"metric-value\">{{ record.SuccessfulValidationCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Behavior</div>\n <div class=\"metric-value\">{{ record.ValidationBehavior || 'Not set' }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Retry Strategy</div>\n <div class=\"metric-value\">{{ record.RetryStrategy || 'Not set' }}</div>\n </div>\n </div>\n \n @if (record.FinalValidationError) {\n <div class=\"validation-error\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Final Validation Error</h5>\n <p>{{ record.FinalValidationError }}</p>\n @if (record && record.ValidationErrorCount && record.ValidationErrorCount > 0) {\n <span class=\"error-count\">{{ record.ValidationErrorCount }} validation errors</span>\n }\n </div>\n }\n \n @if (record.CommonValidationError && record.CommonValidationError !== record.FinalValidationError) {\n <div class=\"common-error\">\n <h5><i class=\"fa-solid fa-repeat\"></i> Most Common Error</h5>\n <p>{{ record.CommonValidationError }}</p>\n </div>\n }\n </div>\n \n <!-- Retry Timeline -->\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <div class=\"retry-timeline\">\n <h4>Retry Timeline</h4>\n <div class=\"timeline-info\">\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>First Attempt: {{ record.FirstAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <span>Last Attempt: {{ record.LastAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span>Total Retry Duration: {{ formatDuration(record.TotalRetryDurationMS) }}</span>\n </div>\n </div>\n </div>\n }\n \n <!-- Validation Attempts Details -->\n @if (validationAttempts && validationAttempts.length > 0) {\n <div class=\"validation-attempts\">\n <h4>Validation Attempts</h4>\n <div class=\"attempts-list\">\n @for (attempt of validationAttempts; track attempt.attemptNumber) {\n <div class=\"attempt-item\" [class.success]=\"attempt.success\" [class.failed]=\"!attempt.success\">\n <div class=\"attempt-number\">\n <i [class]=\"attempt.success ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n Attempt #{{ attempt.attemptNumber }}\n </div>\n <div class=\"attempt-details\">\n <span class=\"attempt-time\">{{ attempt.timestamp }}</span>\n @if (!attempt.success) {\n <span class=\"attempt-error\">{{ attempt.errorMessage || 'Unknown error' }}</span>\n @if (attempt.validationErrorCount > 0) {\n <span class=\"error-count\">({{ attempt.validationErrorCount }} errors)</span>\n }\n }\n @if (attempt.outputLength) {\n <span class=\"output-length\">Output: {{ attempt.outputLength }} chars</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Validation Summary JSON -->\n @if (validationSummary) {\n <div class=\"validation-json\">\n <h4>Validation Summary Details</h4>\n <div class=\"json-viewer-container\">\n <mj-code-editor \n [(ngModel)]=\"formattedValidationSummary\"\n name=\"formattedValidationSummary\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Validation Attempts JSON -->\n @if (record.ValidationAttempts) {\n <div class=\"validation-json\">\n <h4>Validation Attempts (Raw JSON)</h4>\n <div class=\"json-viewer-container\">\n <mj-code-editor \n [(ngModel)]=\"formattedValidationAttempts\"\n name=\"formattedValidationAttempts\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n \n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <kendo-panelbar-item [expanded]=\"hierarchyExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Run Hierarchy\n @if (childRuns.length > 0) {\n <span class=\"panel-count\">({{ childRuns.length }} children)</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (parentRun) {\n <div class=\"parent-run-section\">\n <h4><i class=\"fa-solid fa-level-up-alt\"></i> Parent Run</h4>\n <div class=\"run-item parent\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', parentRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(parentRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Parent Run #{{ parentRun.ID.substring(0, 8) }}\n <span class=\"run-item-type\">{{ parentRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(parentRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(parentRun.TokensUsed) }}</span>\n <span><i class=\"fa-solid fa-calendar\"></i> {{ parentRun.RunAt | date:'short' }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (childRuns.length > 0) {\n <div class=\"child-runs-section\">\n <h4><i class=\"fa-solid fa-level-down-alt\"></i> Child Runs</h4>\n <div class=\"runs-list\">\n @for (childRun of childRuns; track childRun.ID) {\n <div class=\"run-item child\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', childRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(childRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Child Run #{{ childRun.ID.substring(0, 8) }}\n @if (childRun.ExecutionOrder !== null) {\n <span class=\"execution-order\">#{{ childRun.ExecutionOrder }}</span>\n }\n <span class=\"run-item-type\">{{ childRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span class=\"status-indicator\" [style.color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ childRun.Success ? 'Success' : childRun.ErrorMessage ? 'Failed' : 'Running' }}\n </span>\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(childRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(childRun.TokensUsed) }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n \n <!-- Additional Details Panel -->\n <kendo-panelbar-item [expanded]=\"false\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('AI Agents', record.AgentID)\" title=\"View Agent\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ record.Agent || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.ConfigurationID) {\n <div class=\"detail-field\">\n <label>Configuration</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ record.Configuration || 'Unknown' }}\n </div>\n </div>\n }\n \n @if (record.RunType) {\n <div class=\"detail-field\">\n <label>Run Type</label>\n <div class=\"detail-value\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n \n @if (record.ResponseFormat) {\n <div class=\"detail-field\">\n <label>Response Format</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-code\"></i>\n {{ record.ResponseFormat }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Temperature</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Temperature === null || record.Temperature === undefined\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n {{ record.Temperature !== null && record.Temperature !== undefined ? record.Temperature : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopP === null || record.TopP === undefined\">\n <i class=\"fa-solid fa-percentage\"></i>\n {{ record.TopP !== null && record.TopP !== undefined ? record.TopP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top K</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopK === null || record.TopK === undefined\">\n <i class=\"fa-solid fa-list-ol\"></i>\n {{ record.TopK !== null && record.TopK !== undefined ? record.TopK : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Min P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.MinP === null || record.MinP === undefined\">\n <i class=\"fa-solid fa-filter\"></i>\n {{ record.MinP !== null && record.MinP !== undefined ? record.MinP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Frequency Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.FrequencyPenalty === null || record.FrequencyPenalty === undefined\">\n <i class=\"fa-solid fa-repeat\"></i>\n {{ record.FrequencyPenalty !== null && record.FrequencyPenalty !== undefined ? record.FrequencyPenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Presence Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.PresencePenalty === null || record.PresencePenalty === undefined\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n {{ record.PresencePenalty !== null && record.PresencePenalty !== undefined ? record.PresencePenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Seed</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Seed === null || record.Seed === undefined\">\n <i class=\"fa-solid fa-seedling\"></i>\n {{ record.Seed !== null && record.Seed !== undefined ? record.Seed : '\u2014' }}\n </div>\n </div>\n \n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n </kendo-panelbar>\n </div>\n </form>\n }\n</div>", styles: ["/* Header Section */\n.prompt-run-header {\n background: #f8f9fa;\n border-bottom: 2px solid #e9ecef;\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper i {\n font-size: 24px;\n}\n\n.run-info {\n flex: 1;\n min-width: 0;\n}\n\n.run-title {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: #6c757d;\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n color: white;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.status-badge i {\n font-size: 0.9em;\n}\n\n.run-type-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #f1f3f5;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.prompt-name, .model-name, .vendor-name {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.85em;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.prompt-name:hover, .model-name:hover, .vendor-name:hover {\n background: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.original-run {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #fff3cd;\n font-size: 0.85em;\n}\n\n.original-link {\n color: #ff6358;\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: #ff4444;\n text-decoration: underline;\n}\n\n.run-actions {\n display: flex;\n gap: 8px;\n}\n\n/* Metrics Bar */\n.metrics-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n flex-wrap: wrap;\n}\n\n.metric-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item > i {\n font-size: 1.2em;\n color: #6c757d;\n width: 24px;\n text-align: center;\n}\n\n.metric-content {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label {\n font-size: 0.75em;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value {\n font-size: 1.1em;\n font-weight: 600;\n color: #2c3e50;\n}\n\n/* Panels */\n.form-content {\n padding: 16px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n/* Nested Sub-Panel Styles */\n.sub-panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content {\n padding: 0;\n}\n\n/* Nested kendo-panelbar styles */\n.k-panelbar .k-panelbar {\n border: none;\n background: transparent;\n}\n\n.k-panelbar .k-panelbar > .k-item {\n border: 1px solid #e5e7eb;\n margin-bottom: 8px;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.k-panelbar .k-panelbar > .k-item > .k-link {\n background-color: #f9fafb;\n padding: 12px 16px;\n}\n\n.k-panelbar .k-panelbar > .k-item.k-expanded > .k-link {\n background-color: #f3f4f6;\n}\n\n.k-panelbar .k-panelbar .k-content {\n padding: 0;\n background: white;\n}\n\n/* Ensure chat message viewer takes appropriate height */\n.sub-panel-content mj-chat-message-viewer {\n display: block;\n min-height: 200px;\n max-height: 750px; /* Increased by 50% from 500px */\n height: auto;\n overflow: hidden;\n}\n\n/* Different colors for sub-expansion panels */\n.sub-expansion-panel {\n margin-bottom: 8px;\n}\n\n.sub-expansion-panel::ng-deep .k-expander {\n background-color: #f7fafc;\n border-color: #e2e8f0;\n}\n\n.sub-expansion-panel::ng-deep .k-expander:hover {\n background-color: #edf2f7;\n}\n\n.sub-expansion-panel::ng-deep .k-header {\n background-color: #f7fafc;\n border-color: #e2e8f0;\n}\n\n.sub-expansion-panel::ng-deep .k-content {\n background-color: #ffffff;\n border-color: #e2e8f0;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: #dc3545;\n color: white;\n}\n\n.panel-count {\n color: #6c757d;\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* JSON Editor Container */\n.json-editor-container {\n border: 1px solid #e9ecef;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: #f8f9fa;\n padding: 8px 12px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: #dc354510;\n border: 1px solid #dc3545;\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message i {\n font-size: 1.5em;\n color: #dc3545;\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: #dc3545;\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: #495057;\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: #6c757d;\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Loading State */\n.loading-state {\n text-align: center;\n padding: 60px 40px;\n color: #6c757d;\n}\n\n.loading-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: #007bff;\n}\n\n.loading-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Metrics Grid */\n.metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header i {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: #6c757d;\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: #2c3e50;\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: #6c757d;\n text-transform: uppercase;\n}\n\n/* Additional Metrics */\n.additional-metrics {\n border-top: 1px solid #e9ecef;\n padding-top: 16px;\n}\n\n.metric-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid #f1f3f5;\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: #6c757d;\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: #2c3e50;\n}\n\n.metric-row .metric-value.link {\n color: #007bff;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row .metric-value.link:hover {\n color: #0056b3;\n}\n\n/* Hierarchy Section */\n.parent-run-section,\n.child-runs-section {\n margin-bottom: 24px;\n}\n\n.parent-run-section:last-child,\n.child-runs-section:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section h4,\n.child-runs-section h4 {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item:hover {\n background: #e9ecef;\n border-color: #dee2e6;\n}\n\n.run-item.parent {\n background: #e3f2fd;\n border-color: #90caf9;\n}\n\n.run-item.parent:hover {\n background: #bbdefb;\n}\n\n.run-item-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title {\n font-weight: 500;\n color: #2c3e50;\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: #6c757d;\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 400;\n}\n\n.run-item-meta {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.run-item-meta span {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator {\n font-weight: 500;\n}\n\n.run-item > i:last-child {\n color: #6c757d;\n font-size: 0.85em;\n}\n\n/* Detail Fields Grid */\n.detail-fields-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field label {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: #2c3e50;\n padding: 10px 14px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: #6c757d;\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable {\n cursor: pointer;\n}\n\n.detail-value.clickable:hover {\n background: #e9ecef;\n border-color: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable i:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable:hover i:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value {\n color: #adb5bd;\n font-style: italic;\n}\n\n.detail-value.null-value i:first-child {\n opacity: 0.5;\n}\n\n/* Kendo Overrides */\nkendo-panelbar {\n border: none !important;\n}\n\nkendo-panelbar-item {\n margin-bottom: 8px;\n border: 1px solid #e9ecef !important;\n border-radius: 8px !important;\n overflow: hidden;\n}\n\nkendo-panelbar-item .k-panelbar-header {\n background: #f8f9fa !important;\n border: none !important;\n padding: 12px 16px !important;\n}\n\nkendo-panelbar-item .k-panelbar-header:hover {\n background: #e9ecef !important;\n}\n\nkendo-panelbar-item .k-panelbar-content {\n border: none !important;\n padding: 0 !important;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* Validation Panel Styles */\n.validation-summary {\n margin-bottom: 24px;\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header h4 {\n margin: 0;\n font-size: 1.1em;\n color: #2c3e50;\n}\n\n.validation-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success {\n background: #28a74520;\n color: #28a745;\n}\n\n.validation-status.failed {\n background: #dc354520;\n color: #dc3545;\n}\n\n.validation-metrics {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small .metric-label {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small .metric-value {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error,\n.common-error {\n background: #dc354510;\n border: 1px solid #dc354530;\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error h5,\n.common-error h5 {\n margin: 0 0 8px 0;\n color: #dc3545;\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error p,\n.common-error p {\n margin: 0;\n color: #495057;\n font-size: 0.9em;\n}\n\n.error-count {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: #dc3545;\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n/* Retry Timeline */\n.retry-timeline {\n margin-bottom: 24px;\n}\n\n.retry-timeline h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: #495057;\n}\n\n.timeline-info {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #6c757d;\n font-size: 0.9em;\n}\n\n.timeline-stat i {\n font-size: 1.1em;\n}\n\n/* Validation Attempts */\n.validation-attempts {\n margin-bottom: 24px;\n}\n\n.validation-attempts h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: #495057;\n}\n\n.attempts-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success {\n background: #28a74510;\n border-color: #28a74530;\n}\n\n.attempt-item.failed {\n background: #dc354510;\n border-color: #dc354530;\n}\n\n.attempt-number {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.attempt-item.success .attempt-number {\n color: #28a745;\n}\n\n.attempt-item.failed .attempt-number {\n color: #dc3545;\n}\n\n.attempt-details {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time {\n color: #6c757d;\n}\n\n.attempt-error {\n color: #dc3545;\n flex: 1 0 100%;\n}\n\n.output-length {\n color: #6c757d;\n font-style: italic;\n}\n\n/* Validation JSON */\n.validation-json {\n margin-top: 24px;\n}\n\n.validation-json h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: #495057;\n}\n\n.json-viewer-container {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Panel badge styles */\n.panel-badge.success {\n background: #28a745;\n color: white;\n}"] }]
|
|
1562
|
+
args: [{ selector: 'mj-ai-prompt-run-form', template: "<div class=\"record-form-container\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\">\n <mj-form-toolbar [form]=\"this\"></mj-form-toolbar>\n\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <span class=\"status-badge\" [style.background-color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ getStatusText() }}\n </span>\n @if (record.RunType) {\n <span class=\"run-type-badge\" [style.color]=\"getRunTypeColor(record.RunType)\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </span>\n }\n @if (prompt) {\n <span class=\"prompt-name\" (click)=\"navigateToEntity('AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n {{ prompt.Name }}\n </span>\n }\n @if (model) {\n <span class=\"model-name\" (click)=\"navigateToEntity('AI Models', model.ID)\" title=\"View Model\">\n <i class=\"fa-solid fa-microchip\"></i>\n {{ model.Name }}\n </span>\n }\n @if (record.Vendor) {\n <span class=\"vendor-name\" (click)=\"navigateToEntity('MJ: AI Vendors', record.VendorID)\" title=\"View Vendor\">\n <i class=\"fa-solid fa-building\"></i>\n {{ record.Vendor }}\n </span>\n }\n @if (record.RerunFromPromptRunID) {\n <span class=\"original-run\" title=\"View Original Run\">\n <i class=\"fa-solid fa-level-up-alt\"></i>\n <a (click)=\"navigateToOriginalRun()\" class=\"original-link\">Original Run</a>\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions\">\n <button kendoButton fillMode=\"outline\" size=\"small\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button kendoButton fillMode=\"outline\" size=\"small\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensUsed) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\">\n <kendo-panelbar [keepItemContent]=\"true\">\n \n <!-- Input Panel with nested sub-panels -->\n <kendo-panelbar-item [expanded]=\"inputExpanded\" (stateChange)=\"onInputPanelToggle()\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <!-- Nested expansion panels for sub-sections -->\n <div class=\"nested-panels\">\n <!-- Messages Sub-Panel -->\n <kendo-expansionpanel \n [expanded]=\"messagesExpanded\" \n class=\"sub-expansion-panel\"\n [animation]=\"false\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Messages\n @if (chatMessages.length > 0) {\n <span class=\"panel-count\">({{ chatMessages.length }})</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (isParsingMessages || isLoadingRelatedData) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading messages...</p>\n </div>\n } @else if (chatMessages.length > 0) {\n <mj-chat-message-viewer \n [messages]=\"chatMessages\">\n </mj-chat-message-viewer>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No chat messages found</p>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n \n <!-- Data Sub-Panel -->\n <kendo-expansionpanel \n [expanded]=\"dataExpanded\" \n class=\"sub-expansion-panel\"\n [animation]=\"false\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-database\"></i>\n Data\n @if (inputData) {\n <span class=\"panel-badge\">Object</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (inputData && formattedData) {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button kendoButton\n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedData\"\n name=\"formattedData\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No data object found</p>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n \n <!-- Raw Sub-Panel -->\n <kendo-expansionpanel \n [expanded]=\"rawExpanded\" \n class=\"sub-expansion-panel\"\n [animation]=\"false\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Raw\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button kendoButton\n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessages\"\n name=\"formattedMessages\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </kendo-expansionpanel>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Result Panel -->\n <kendo-panelbar-item [expanded]=\"resultExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button kendoButton\n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedResult\"\n name=\"formattedResult\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (!record.ErrorMessage) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No result data recorded</p>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Token Usage & Metrics Panel -->\n <kendo-panelbar-item [expanded]=\"metricsExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage & Metrics\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensPrompt) }}</div>\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensUsed) }}</div>\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.ConfigurationID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Configuration:</span>\n <span class=\"metric-value\">{{ record.Configuration }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <kendo-panelbar-item [expanded]=\"validationExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation & Retries\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <span class=\"panel-count\">({{ record.ValidationAttemptCount }} attempts)</span>\n }\n @if (record.FinalValidationPassed) {\n <span class=\"panel-badge success\">Passed</span>\n } @else if (record.FinalValidationPassed === false) {\n <span class=\"panel-badge error\">Failed</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <!-- Validation Summary -->\n <div class=\"validation-summary\">\n <div class=\"summary-header\">\n <h4>Validation Summary</h4>\n <div class=\"validation-status\" [class.success]=\"record.FinalValidationPassed\" [class.failed]=\"!record.FinalValidationPassed\">\n <i [class]=\"record.FinalValidationPassed ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.FinalValidationPassed ? 'Validation Passed' : 'Validation Failed' }}\n </div>\n </div>\n \n <div class=\"validation-metrics\">\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Total Attempts</div>\n <div class=\"metric-value\">{{ record.ValidationAttemptCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Successful</div>\n <div class=\"metric-value\">{{ record.SuccessfulValidationCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Behavior</div>\n <div class=\"metric-value\">{{ record.ValidationBehavior || 'Not set' }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Retry Strategy</div>\n <div class=\"metric-value\">{{ record.RetryStrategy || 'Not set' }}</div>\n </div>\n </div>\n \n @if (record.FinalValidationError) {\n <div class=\"validation-error\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Final Validation Error</h5>\n <p>{{ record.FinalValidationError }}</p>\n @if (record && record.ValidationErrorCount && record.ValidationErrorCount > 0) {\n <span class=\"error-count\">{{ record.ValidationErrorCount }} validation errors</span>\n }\n </div>\n }\n \n @if (record.CommonValidationError && record.CommonValidationError !== record.FinalValidationError) {\n <div class=\"common-error\">\n <h5><i class=\"fa-solid fa-repeat\"></i> Most Common Error</h5>\n <p>{{ record.CommonValidationError }}</p>\n </div>\n }\n </div>\n \n <!-- Retry Timeline -->\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <div class=\"retry-timeline\">\n <h4>Retry Timeline</h4>\n <div class=\"timeline-info\">\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>First Attempt: {{ record.FirstAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <span>Last Attempt: {{ record.LastAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span>Total Retry Duration: {{ formatDuration(record.TotalRetryDurationMS) }}</span>\n </div>\n </div>\n </div>\n }\n \n <!-- Validation Attempts Details -->\n @if (validationAttempts && validationAttempts.length > 0) {\n <div class=\"validation-attempts\">\n <h4>Validation Attempts</h4>\n <div class=\"attempts-list\">\n @for (attempt of validationAttempts; track attempt.attemptNumber) {\n <div class=\"attempt-item\" [class.success]=\"attempt.success\" [class.failed]=\"!attempt.success\">\n <div class=\"attempt-number\">\n <i [class]=\"attempt.success ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n Attempt #{{ attempt.attemptNumber }}\n </div>\n <div class=\"attempt-details\">\n <span class=\"attempt-time\">{{ attempt.timestamp }}</span>\n @if (!attempt.success) {\n <span class=\"attempt-error\">{{ attempt.errorMessage || 'Unknown error' }}</span>\n @if (attempt.validationErrorCount > 0) {\n <span class=\"error-count\">({{ attempt.validationErrorCount }} errors)</span>\n }\n }\n @if (attempt.outputLength) {\n <span class=\"output-length\">Output: {{ attempt.outputLength }} chars</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Validation Summary JSON -->\n @if (validationSummary) {\n <div class=\"validation-json\">\n <h4>Validation Summary Details</h4>\n <div class=\"json-viewer-container\">\n <mj-code-editor \n [(ngModel)]=\"formattedValidationSummary\"\n name=\"formattedValidationSummary\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Validation Attempts JSON -->\n @if (record.ValidationAttempts) {\n <div class=\"validation-json\">\n <h4>Validation Attempts (Raw JSON)</h4>\n <div class=\"json-viewer-container\">\n <mj-code-editor \n [(ngModel)]=\"formattedValidationAttempts\"\n name=\"formattedValidationAttempts\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n \n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <kendo-panelbar-item [expanded]=\"hierarchyExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Run Hierarchy\n @if (childRuns.length > 0) {\n <span class=\"panel-count\">({{ childRuns.length }} children)</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (parentRun) {\n <div class=\"parent-run-section\">\n <h4><i class=\"fa-solid fa-level-up-alt\"></i> Parent Run</h4>\n <div class=\"run-item parent\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', parentRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(parentRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Parent Run #{{ parentRun.ID.substring(0, 8) }}\n <span class=\"run-item-type\">{{ parentRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(parentRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(parentRun.TokensUsed) }}</span>\n <span><i class=\"fa-solid fa-calendar\"></i> {{ parentRun.RunAt | date:'short' }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (childRuns.length > 0) {\n <div class=\"child-runs-section\">\n <h4><i class=\"fa-solid fa-level-down-alt\"></i> Child Runs</h4>\n <div class=\"runs-list\">\n @for (childRun of childRuns; track childRun.ID) {\n <div class=\"run-item child\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', childRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(childRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Child Run #{{ childRun.ID.substring(0, 8) }}\n @if (childRun.ExecutionOrder !== null) {\n <span class=\"execution-order\">#{{ childRun.ExecutionOrder }}</span>\n }\n <span class=\"run-item-type\">{{ childRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span class=\"status-indicator\" [style.color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ childRun.Success ? 'Success' : childRun.ErrorMessage ? 'Failed' : 'Running' }}\n </span>\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(childRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(childRun.TokensUsed) }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n \n <!-- Additional Details Panel -->\n <kendo-panelbar-item [expanded]=\"false\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('AI Agents', record.AgentID)\" title=\"View Agent\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ record.Agent || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.ConfigurationID) {\n <div class=\"detail-field\">\n <label>Configuration</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ record.Configuration || 'Unknown' }}\n </div>\n </div>\n }\n \n @if (record.RunType) {\n <div class=\"detail-field\">\n <label>Run Type</label>\n <div class=\"detail-value\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n \n @if (record.ResponseFormat) {\n <div class=\"detail-field\">\n <label>Response Format</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-code\"></i>\n {{ record.ResponseFormat }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Temperature</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Temperature === null || record.Temperature === undefined\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n {{ record.Temperature !== null && record.Temperature !== undefined ? record.Temperature : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopP === null || record.TopP === undefined\">\n <i class=\"fa-solid fa-percentage\"></i>\n {{ record.TopP !== null && record.TopP !== undefined ? record.TopP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top K</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopK === null || record.TopK === undefined\">\n <i class=\"fa-solid fa-list-ol\"></i>\n {{ record.TopK !== null && record.TopK !== undefined ? record.TopK : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Min P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.MinP === null || record.MinP === undefined\">\n <i class=\"fa-solid fa-filter\"></i>\n {{ record.MinP !== null && record.MinP !== undefined ? record.MinP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Frequency Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.FrequencyPenalty === null || record.FrequencyPenalty === undefined\">\n <i class=\"fa-solid fa-repeat\"></i>\n {{ record.FrequencyPenalty !== null && record.FrequencyPenalty !== undefined ? record.FrequencyPenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Presence Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.PresencePenalty === null || record.PresencePenalty === undefined\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n {{ record.PresencePenalty !== null && record.PresencePenalty !== undefined ? record.PresencePenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Seed</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Seed === null || record.Seed === undefined\">\n <i class=\"fa-solid fa-seedling\"></i>\n {{ record.Seed !== null && record.Seed !== undefined ? record.Seed : '\u2014' }}\n </div>\n </div>\n \n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n </kendo-panelbar>\n </div>\n </form>\n }\n</div>", styles: ["/* Header Section */\n.prompt-run-header {\n background: #f8f9fa;\n border-bottom: 2px solid #e9ecef;\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper i {\n font-size: 24px;\n}\n\n.run-info {\n flex: 1;\n min-width: 0;\n}\n\n.run-title {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: #6c757d;\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n color: white;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.status-badge i {\n font-size: 0.9em;\n}\n\n.run-type-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #f1f3f5;\n font-size: 0.85em;\n font-weight: 500;\n}\n\n.prompt-name, .model-name, .vendor-name {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.85em;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.prompt-name:hover, .model-name:hover, .vendor-name:hover {\n background: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.original-run {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: #fff3cd;\n font-size: 0.85em;\n}\n\n.original-link {\n color: #ff6358;\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: #ff4444;\n text-decoration: underline;\n}\n\n.run-actions {\n display: flex;\n gap: 8px;\n}\n\n/* Metrics Bar */\n.metrics-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n flex-wrap: wrap;\n}\n\n.metric-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item > i {\n font-size: 1.2em;\n color: #6c757d;\n width: 24px;\n text-align: center;\n}\n\n.metric-content {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label {\n font-size: 0.75em;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value {\n font-size: 1.1em;\n font-weight: 600;\n color: #2c3e50;\n}\n\n/* Panels */\n.form-content {\n padding: 16px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n/* Nested Sub-Panel Styles */\n.sub-panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content {\n padding: 0;\n}\n\n/* Nested kendo-panelbar styles */\n.k-panelbar .k-panelbar {\n border: none;\n background: transparent;\n}\n\n.k-panelbar .k-panelbar > .k-item {\n border: 1px solid #e5e7eb;\n margin-bottom: 8px;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.k-panelbar .k-panelbar > .k-item > .k-link {\n background-color: #f9fafb;\n padding: 12px 16px;\n}\n\n.k-panelbar .k-panelbar > .k-item.k-expanded > .k-link {\n background-color: #f3f4f6;\n}\n\n.k-panelbar .k-panelbar .k-content {\n padding: 0;\n background: white;\n}\n\n/* Ensure chat message viewer takes appropriate height */\n.sub-panel-content mj-chat-message-viewer {\n display: block;\n min-height: 200px;\n max-height: 750px; /* Increased by 50% from 500px */\n height: auto;\n overflow: hidden;\n}\n\n/* Different colors for sub-expansion panels */\n.sub-expansion-panel {\n margin-bottom: 8px;\n}\n\n.sub-expansion-panel::ng-deep .k-expander {\n background-color: #f7fafc;\n border-color: #e2e8f0;\n}\n\n.sub-expansion-panel::ng-deep .k-expander:hover {\n background-color: #edf2f7;\n}\n\n.sub-expansion-panel::ng-deep .k-header {\n background-color: #f7fafc;\n border-color: #e2e8f0;\n}\n\n.sub-expansion-panel::ng-deep .k-content {\n background-color: #ffffff;\n border-color: #e2e8f0;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: #e9ecef;\n color: #495057;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: #dc3545;\n color: white;\n}\n\n.panel-count {\n color: #6c757d;\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* JSON Editor Container */\n.json-editor-container {\n border: 1px solid #e9ecef;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: #f8f9fa;\n padding: 8px 12px;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: #dc354510;\n border: 1px solid #dc3545;\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message i {\n font-size: 1.5em;\n color: #dc3545;\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: #dc3545;\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: #495057;\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: #6c757d;\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Loading State */\n.loading-state {\n text-align: center;\n padding: 60px 40px;\n color: #6c757d;\n}\n\n.loading-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: #007bff;\n}\n\n.loading-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Metrics Grid */\n.metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header i {\n font-size: 1.2em;\n color: #6c757d;\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: #6c757d;\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: #2c3e50;\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: #6c757d;\n text-transform: uppercase;\n}\n\n/* Additional Metrics */\n.additional-metrics {\n border-top: 1px solid #e9ecef;\n padding-top: 16px;\n}\n\n.metric-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid #f1f3f5;\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: #6c757d;\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: #2c3e50;\n}\n\n.metric-row .metric-value.link {\n color: #007bff;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row .metric-value.link:hover {\n color: #0056b3;\n}\n\n/* Hierarchy Section */\n.parent-run-section,\n.child-runs-section {\n margin-bottom: 24px;\n}\n\n.parent-run-section:last-child,\n.child-runs-section:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section h4,\n.child-runs-section h4 {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item {\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item:hover {\n background: #e9ecef;\n border-color: #dee2e6;\n}\n\n.run-item.parent {\n background: #e3f2fd;\n border-color: #90caf9;\n}\n\n.run-item.parent:hover {\n background: #bbdefb;\n}\n\n.run-item-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title {\n font-weight: 500;\n color: #2c3e50;\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: #6c757d;\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 400;\n}\n\n.run-item-meta {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: #6c757d;\n}\n\n.run-item-meta span {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator {\n font-weight: 500;\n}\n\n.run-item > i:last-child {\n color: #6c757d;\n font-size: 0.85em;\n}\n\n/* Detail Fields Grid */\n.detail-fields-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field label {\n font-size: 0.85em;\n color: #6c757d;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: #2c3e50;\n padding: 10px 14px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: #6c757d;\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable {\n cursor: pointer;\n}\n\n.detail-value.clickable:hover {\n background: #e9ecef;\n border-color: #dee2e6;\n color: #007bff;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable i:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable:hover i:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value {\n color: #adb5bd;\n font-style: italic;\n}\n\n.detail-value.null-value i:first-child {\n opacity: 0.5;\n}\n\n/* Kendo Overrides */\nkendo-panelbar {\n border: none !important;\n}\n\nkendo-panelbar-item {\n margin-bottom: 8px;\n border: 1px solid #e9ecef !important;\n border-radius: 8px !important;\n overflow: hidden;\n}\n\nkendo-panelbar-item .k-panelbar-header {\n background: #f8f9fa !important;\n border: none !important;\n padding: 12px 16px !important;\n}\n\nkendo-panelbar-item .k-panelbar-header:hover {\n background: #e9ecef !important;\n}\n\nkendo-panelbar-item .k-panelbar-content {\n border: none !important;\n padding: 0 !important;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* Validation Panel Styles */\n.validation-summary {\n margin-bottom: 24px;\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header h4 {\n margin: 0;\n font-size: 1.1em;\n color: #2c3e50;\n}\n\n.validation-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success {\n background: #28a74520;\n color: #28a745;\n}\n\n.validation-status.failed {\n background: #dc354520;\n color: #dc3545;\n}\n\n.validation-metrics {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small .metric-label {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small .metric-value {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error,\n.common-error {\n background: #dc354510;\n border: 1px solid #dc354530;\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error h5,\n.common-error h5 {\n margin: 0 0 8px 0;\n color: #dc3545;\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error p,\n.common-error p {\n margin: 0;\n color: #495057;\n font-size: 0.9em;\n}\n\n.error-count {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: #dc3545;\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n/* Retry Timeline */\n.retry-timeline {\n margin-bottom: 24px;\n}\n\n.retry-timeline h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: #495057;\n}\n\n.timeline-info {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #6c757d;\n font-size: 0.9em;\n}\n\n.timeline-stat i {\n font-size: 1.1em;\n}\n\n/* Validation Attempts */\n.validation-attempts {\n margin-bottom: 24px;\n}\n\n.validation-attempts h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: #495057;\n}\n\n.attempts-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success {\n background: #28a74510;\n border-color: #28a74530;\n}\n\n.attempt-item.failed {\n background: #dc354510;\n border-color: #dc354530;\n}\n\n.attempt-number {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: #2c3e50;\n}\n\n.attempt-item.success .attempt-number {\n color: #28a745;\n}\n\n.attempt-item.failed .attempt-number {\n color: #dc3545;\n}\n\n.attempt-details {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time {\n color: #6c757d;\n}\n\n.attempt-error {\n color: #dc3545;\n flex: 1 0 100%;\n}\n\n.output-length {\n color: #6c757d;\n font-style: italic;\n}\n\n/* Validation JSON */\n.validation-json {\n margin-top: 24px;\n}\n\n.validation-json h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: #495057;\n}\n\n.json-viewer-container {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Panel badge styles */\n.panel-badge.success {\n background: #28a745;\n color: white;\n}"] }]
|
|
1561
1563
|
}], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i3.TestHarnessWindowService }, { type: i0.ViewContainerRef }], null); })();
|
|
1562
1564
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIPromptRunFormComponentExtended, { className: "AIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 19 }); })();
|
|
1563
1565
|
//# sourceMappingURL=ai-prompt-run-form.component.js.map
|