@memberjunction/ng-core-entity-forms 5.39.0 → 5.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  2. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +14 -7
  3. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  4. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +7 -0
  5. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  6. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +583 -559
  7. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  8. package/dist/lib/custom/Actions/action-execution-log-form.component.js +2 -2
  9. package/dist/lib/custom/Actions/action-form.component.js +2 -2
  10. package/dist/lib/custom/Entities/entity-form.component.js +4 -4
  11. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  12. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +117 -97
  13. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  14. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +2 -2
  15. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
  16. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
  17. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +59 -51
  18. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  19. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  20. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +28 -10
  21. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  22. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.d.ts.map +1 -1
  23. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js +29 -21
  24. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js.map +1 -1
  25. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.d.ts.map +1 -1
  26. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js +47 -11
  27. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js.map +1 -1
  28. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.d.ts.map +1 -1
  29. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js +24 -6
  30. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js.map +1 -1
  31. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.d.ts.map +1 -1
  32. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js +27 -9
  33. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js.map +1 -1
  34. package/dist/lib/generated/Entities/MJClusterAnalysis/mjclusteranalysis.form.component.d.ts +10 -0
  35. package/dist/lib/generated/Entities/MJClusterAnalysis/mjclusteranalysis.form.component.d.ts.map +1 -0
  36. package/dist/lib/generated/Entities/MJClusterAnalysis/mjclusteranalysis.form.component.js +93 -0
  37. package/dist/lib/generated/Entities/MJClusterAnalysis/mjclusteranalysis.form.component.js.map +1 -0
  38. package/dist/lib/generated/Entities/MJClusterAnalysisCluster/mjclusteranalysiscluster.form.component.d.ts +10 -0
  39. package/dist/lib/generated/Entities/MJClusterAnalysisCluster/mjclusteranalysiscluster.form.component.d.ts.map +1 -0
  40. package/dist/lib/generated/Entities/MJClusterAnalysisCluster/mjclusteranalysiscluster.form.component.js +66 -0
  41. package/dist/lib/generated/Entities/MJClusterAnalysisCluster/mjclusteranalysiscluster.form.component.js.map +1 -0
  42. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.d.ts.map +1 -1
  43. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js +27 -9
  44. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js.map +1 -1
  45. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.d.ts.map +1 -1
  46. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js +13 -3
  47. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js.map +1 -1
  48. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
  49. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +29 -11
  50. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  51. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  52. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +100 -64
  53. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  54. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.d.ts +10 -0
  55. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.d.ts.map +1 -0
  56. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.js +173 -0
  57. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.js.map +1 -0
  58. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedDomain/mjmagiclinkinvitealloweddomain.form.component.d.ts +10 -0
  59. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedDomain/mjmagiclinkinvitealloweddomain.form.component.d.ts.map +1 -0
  60. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedDomain/mjmagiclinkinvitealloweddomain.form.component.js +58 -0
  61. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedDomain/mjmagiclinkinvitealloweddomain.form.component.js.map +1 -0
  62. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedPath/mjmagiclinkinviteallowedpath.form.component.d.ts +10 -0
  63. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedPath/mjmagiclinkinviteallowedpath.form.component.d.ts.map +1 -0
  64. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedPath/mjmagiclinkinviteallowedpath.form.component.js +58 -0
  65. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedPath/mjmagiclinkinviteallowedpath.form.component.js.map +1 -0
  66. package/dist/lib/generated/Entities/MJMagicLinkInviteApplication/mjmagiclinkinviteapplication.form.component.d.ts +10 -0
  67. package/dist/lib/generated/Entities/MJMagicLinkInviteApplication/mjmagiclinkinviteapplication.form.component.d.ts.map +1 -0
  68. package/dist/lib/generated/Entities/MJMagicLinkInviteApplication/mjmagiclinkinviteapplication.form.component.js +58 -0
  69. package/dist/lib/generated/Entities/MJMagicLinkInviteApplication/mjmagiclinkinviteapplication.form.component.js.map +1 -0
  70. package/dist/lib/generated/Entities/MJMagicLinkInviteRole/mjmagiclinkinviterole.form.component.d.ts +10 -0
  71. package/dist/lib/generated/Entities/MJMagicLinkInviteRole/mjmagiclinkinviterole.form.component.d.ts.map +1 -0
  72. package/dist/lib/generated/Entities/MJMagicLinkInviteRole/mjmagiclinkinviterole.form.component.js +58 -0
  73. package/dist/lib/generated/Entities/MJMagicLinkInviteRole/mjmagiclinkinviterole.form.component.js.map +1 -0
  74. package/dist/lib/generated/Entities/MJMagicLinkRedemption/mjmagiclinkredemption.form.component.d.ts +10 -0
  75. package/dist/lib/generated/Entities/MJMagicLinkRedemption/mjmagiclinkredemption.form.component.d.ts.map +1 -0
  76. package/dist/lib/generated/Entities/MJMagicLinkRedemption/mjmagiclinkredemption.form.component.js +68 -0
  77. package/dist/lib/generated/Entities/MJMagicLinkRedemption/mjmagiclinkredemption.form.component.js.map +1 -0
  78. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.d.ts.map +1 -1
  79. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js +26 -8
  80. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js.map +1 -1
  81. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
  82. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +52 -16
  83. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  84. package/dist/lib/generated/Entities/MJSignatureAccount/mjsignatureaccount.form.component.d.ts +10 -0
  85. package/dist/lib/generated/Entities/MJSignatureAccount/mjsignatureaccount.form.component.d.ts.map +1 -0
  86. package/dist/lib/generated/Entities/MJSignatureAccount/mjsignatureaccount.form.component.js +115 -0
  87. package/dist/lib/generated/Entities/MJSignatureAccount/mjsignatureaccount.form.component.js.map +1 -0
  88. package/dist/lib/generated/Entities/MJSignatureProvider/mjsignatureprovider.form.component.d.ts +10 -0
  89. package/dist/lib/generated/Entities/MJSignatureProvider/mjsignatureprovider.form.component.d.ts.map +1 -0
  90. package/dist/lib/generated/Entities/MJSignatureProvider/mjsignatureprovider.form.component.js +101 -0
  91. package/dist/lib/generated/Entities/MJSignatureProvider/mjsignatureprovider.form.component.js.map +1 -0
  92. package/dist/lib/generated/Entities/MJSignatureRequest/mjsignaturerequest.form.component.d.ts +10 -0
  93. package/dist/lib/generated/Entities/MJSignatureRequest/mjsignaturerequest.form.component.d.ts.map +1 -0
  94. package/dist/lib/generated/Entities/MJSignatureRequest/mjsignaturerequest.form.component.js +153 -0
  95. package/dist/lib/generated/Entities/MJSignatureRequest/mjsignaturerequest.form.component.js.map +1 -0
  96. package/dist/lib/generated/Entities/MJSignatureRequestDocument/mjsignaturerequestdocument.form.component.d.ts +10 -0
  97. package/dist/lib/generated/Entities/MJSignatureRequestDocument/mjsignaturerequestdocument.form.component.d.ts.map +1 -0
  98. package/dist/lib/generated/Entities/MJSignatureRequestDocument/mjsignaturerequestdocument.form.component.js +78 -0
  99. package/dist/lib/generated/Entities/MJSignatureRequestDocument/mjsignaturerequestdocument.form.component.js.map +1 -0
  100. package/dist/lib/generated/Entities/MJSignatureRequestLog/mjsignaturerequestlog.form.component.d.ts +10 -0
  101. package/dist/lib/generated/Entities/MJSignatureRequestLog/mjsignaturerequestlog.form.component.d.ts.map +1 -0
  102. package/dist/lib/generated/Entities/MJSignatureRequestLog/mjsignaturerequestlog.form.component.js +84 -0
  103. package/dist/lib/generated/Entities/MJSignatureRequestLog/mjsignaturerequestlog.form.component.js.map +1 -0
  104. package/dist/lib/generated/Entities/MJSignatureRequestRecipient/mjsignaturerequestrecipient.form.component.d.ts +10 -0
  105. package/dist/lib/generated/Entities/MJSignatureRequestRecipient/mjsignaturerequestrecipient.form.component.d.ts.map +1 -0
  106. package/dist/lib/generated/Entities/MJSignatureRequestRecipient/mjsignaturerequestrecipient.form.component.js +88 -0
  107. package/dist/lib/generated/Entities/MJSignatureRequestRecipient/mjsignaturerequestrecipient.form.component.js.map +1 -0
  108. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  109. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +156 -102
  110. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  111. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.d.ts.map +1 -1
  112. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js +34 -26
  113. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJViewType/mjviewtype.form.component.d.ts +10 -0
  115. package/dist/lib/generated/Entities/MJViewType/mjviewtype.form.component.d.ts.map +1 -0
  116. package/dist/lib/generated/Entities/MJViewType/mjviewtype.form.component.js +91 -0
  117. package/dist/lib/generated/Entities/MJViewType/mjviewtype.form.component.js.map +1 -0
  118. package/dist/lib/generated/generated-forms.module.d.ts +265 -250
  119. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  120. package/dist/lib/generated/generated-forms.module.js +224 -179
  121. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  122. package/package.json +36 -36
@@ -48,26 +48,26 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_20_Templat
48
48
  } }
49
49
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template(rf, ctx) { if (rf & 1) {
50
50
  const _r3 = i0.ɵɵgetCurrentView();
51
- i0.ɵɵelementStart(0, "div", 66)(1, "div", 14);
51
+ i0.ɵɵelementStart(0, "div", 67)(1, "div", 14);
52
52
  i0.ɵɵtext(2, "Prompt");
53
53
  i0.ɵɵelementEnd();
54
- i0.ɵɵelementStart(3, "div", 68);
54
+ i0.ɵɵelementStart(3, "div", 69);
55
55
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.ChildPromptID)); });
56
- i0.ɵɵelement(4, "i", 69);
56
+ i0.ɵɵelement(4, "i", 70);
57
57
  i0.ɵɵtext(5);
58
58
  i0.ɵɵelementEnd();
59
- i0.ɵɵelementStart(6, "div", 70);
60
- i0.ɵɵelement(7, "span", 71);
61
- i0.ɵɵelementStart(8, "span", 72);
59
+ i0.ɵɵelementStart(6, "div", 71);
60
+ i0.ɵɵelement(7, "span", 72);
61
+ i0.ɵɵelementStart(8, "span", 73);
62
62
  i0.ɵɵtext(9, "wrapped by");
63
63
  i0.ɵɵelementEnd();
64
- i0.ɵɵelement(10, "span", 71);
64
+ i0.ɵɵelement(10, "span", 72);
65
65
  i0.ɵɵelementEnd();
66
- i0.ɵɵelementStart(11, "div", 73);
66
+ i0.ɵɵelementStart(11, "div", 74);
67
67
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template_div_click_11_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.prompt.ID)); });
68
- i0.ɵɵelement(12, "i", 74);
68
+ i0.ɵɵelement(12, "i", 75);
69
69
  i0.ɵɵtext(13);
70
- i0.ɵɵelement(14, "i", 75);
70
+ i0.ɵɵelement(14, "i", 76);
71
71
  i0.ɵɵelementEnd()();
72
72
  } if (rf & 2) {
73
73
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -78,12 +78,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditi
78
78
  } }
79
79
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
80
80
  const _r4 = i0.ɵɵgetCurrentView();
81
- i0.ɵɵelementStart(0, "div", 67)(1, "div", 14);
81
+ i0.ɵɵelementStart(0, "div", 68)(1, "div", 14);
82
82
  i0.ɵɵtext(2, "Prompt");
83
83
  i0.ɵɵelementEnd();
84
- i0.ɵɵelementStart(3, "div", 76);
84
+ i0.ɵɵelementStart(3, "div", 77);
85
85
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.prompt.ID)); });
86
- i0.ɵɵelement(4, "i", 77);
86
+ i0.ɵɵelement(4, "i", 78);
87
87
  i0.ɵɵtext(5);
88
88
  i0.ɵɵelementEnd()();
89
89
  } if (rf & 2) {
@@ -92,13 +92,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditi
92
92
  i0.ɵɵtextInterpolate1(" ", ctx_r1.prompt.Name, " ");
93
93
  } }
94
94
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Template(rf, ctx) { if (rf & 1) {
95
- i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template, 15, 2, "div", 66)(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template, 6, 1, "div", 67);
95
+ i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template, 15, 2, "div", 67)(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template, 6, 1, "div", 68);
96
96
  } if (rf & 2) {
97
97
  const ctx_r1 = i0.ɵɵnextContext(2);
98
98
  i0.ɵɵconditional(ctx_r1.record.ChildPromptID ? 0 : 1);
99
99
  } }
100
100
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditional_7_Template(rf, ctx) { if (rf & 1) {
101
- i0.ɵɵelementStart(0, "span", 81);
101
+ i0.ɵɵelementStart(0, "span", 82);
102
102
  i0.ɵɵtext(1);
103
103
  i0.ɵɵelementEnd();
104
104
  } if (rf & 2) {
@@ -111,13 +111,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Templat
111
111
  i0.ɵɵelementStart(0, "div", 18)(1, "div", 14);
112
112
  i0.ɵɵtext(2, "Model");
113
113
  i0.ɵɵelementEnd();
114
- i0.ɵɵelementStart(3, "div", 78);
114
+ i0.ɵɵelementStart(3, "div", 79);
115
115
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Models", ctx_r1.model.ID)); });
116
- i0.ɵɵelementStart(4, "span", 79);
117
- i0.ɵɵelement(5, "i", 80);
116
+ i0.ɵɵelementStart(4, "span", 80);
117
+ i0.ɵɵelement(5, "i", 81);
118
118
  i0.ɵɵtext(6);
119
119
  i0.ɵɵelementEnd();
120
- i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditional_7_Template, 2, 1, "span", 81);
120
+ i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Conditional_7_Template, 2, 1, "span", 82);
121
121
  i0.ɵɵelementEnd()();
122
122
  } if (rf & 2) {
123
123
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -129,19 +129,19 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_22_Templat
129
129
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
130
130
  const _r6 = i0.ɵɵgetCurrentView();
131
131
  i0.ɵɵelementStart(0, "span", 19);
132
- i0.ɵɵelement(1, "i", 82);
133
- i0.ɵɵelementStart(2, "a", 83);
132
+ i0.ɵɵelement(1, "i", 83);
133
+ i0.ɵɵelementStart(2, "a", 84);
134
134
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_23_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToOriginalRun()); });
135
135
  i0.ɵɵtext(3, "Original Run");
136
136
  i0.ɵɵelementEnd()();
137
137
  } }
138
138
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template(rf, ctx) { if (rf & 1) {
139
- i0.ɵɵelementStart(0, "div", 84);
140
- i0.ɵɵelement(1, "i", 51);
141
- i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
139
+ i0.ɵɵelementStart(0, "div", 85);
140
+ i0.ɵɵelement(1, "i", 52);
141
+ i0.ɵɵelementStart(2, "div", 86)(3, "div", 87);
142
142
  i0.ɵɵtext(4, "Temperature");
143
143
  i0.ɵɵelementEnd();
144
- i0.ɵɵelementStart(5, "div", 87);
144
+ i0.ɵɵelementStart(5, "div", 88);
145
145
  i0.ɵɵtext(6);
146
146
  i0.ɵɵelementEnd()()();
147
147
  } if (rf & 2) {
@@ -150,12 +150,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
150
150
  i0.ɵɵtextInterpolate(ctx_r1.record.Temperature);
151
151
  } }
152
152
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template(rf, ctx) { if (rf & 1) {
153
- i0.ɵɵelementStart(0, "div", 84);
154
- i0.ɵɵelement(1, "i", 52);
155
- i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
153
+ i0.ɵɵelementStart(0, "div", 85);
154
+ i0.ɵɵelement(1, "i", 53);
155
+ i0.ɵɵelementStart(2, "div", 86)(3, "div", 87);
156
156
  i0.ɵɵtext(4, "Top P");
157
157
  i0.ɵɵelementEnd();
158
- i0.ɵɵelementStart(5, "div", 87);
158
+ i0.ɵɵelementStart(5, "div", 88);
159
159
  i0.ɵɵtext(6);
160
160
  i0.ɵɵelementEnd()()();
161
161
  } if (rf & 2) {
@@ -164,12 +164,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
164
164
  i0.ɵɵtextInterpolate(ctx_r1.record.TopP);
165
165
  } }
166
166
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template(rf, ctx) { if (rf & 1) {
167
- i0.ɵɵelementStart(0, "div", 84);
168
- i0.ɵɵelement(1, "i", 53);
169
- i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
167
+ i0.ɵɵelementStart(0, "div", 85);
168
+ i0.ɵɵelement(1, "i", 54);
169
+ i0.ɵɵelementStart(2, "div", 86)(3, "div", 87);
170
170
  i0.ɵɵtext(4, "Top K");
171
171
  i0.ɵɵelementEnd();
172
- i0.ɵɵelementStart(5, "div", 87);
172
+ i0.ɵɵelementStart(5, "div", 88);
173
173
  i0.ɵɵtext(6);
174
174
  i0.ɵɵelementEnd()()();
175
175
  } if (rf & 2) {
@@ -178,12 +178,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
178
178
  i0.ɵɵtextInterpolate(ctx_r1.record.TopK);
179
179
  } }
180
180
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template(rf, ctx) { if (rf & 1) {
181
- i0.ɵɵelementStart(0, "div", 84);
182
- i0.ɵɵelement(1, "i", 91);
183
- i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
181
+ i0.ɵɵelementStart(0, "div", 85);
182
+ i0.ɵɵelement(1, "i", 92);
183
+ i0.ɵɵelementStart(2, "div", 86)(3, "div", 87);
184
184
  i0.ɵɵtext(4, "Effort Level");
185
185
  i0.ɵɵelementEnd();
186
- i0.ɵɵelementStart(5, "div", 87);
186
+ i0.ɵɵelementStart(5, "div", 88);
187
187
  i0.ɵɵtext(6);
188
188
  i0.ɵɵelementEnd()()();
189
189
  } if (rf & 2) {
@@ -192,12 +192,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
192
192
  i0.ɵɵtextInterpolate(ctx_r1.record.EffortLevel);
193
193
  } }
194
194
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template(rf, ctx) { if (rf & 1) {
195
- i0.ɵɵelementStart(0, "div", 84);
196
- i0.ɵɵelement(1, "i", 92);
197
- i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
195
+ i0.ɵɵelementStart(0, "div", 85);
196
+ i0.ɵɵelement(1, "i", 93);
197
+ i0.ɵɵelementStart(2, "div", 86)(3, "div", 87);
198
198
  i0.ɵɵtext(4, "Response Format");
199
199
  i0.ɵɵelementEnd();
200
- i0.ɵɵelementStart(5, "div", 87);
200
+ i0.ɵɵelementStart(5, "div", 88);
201
201
  i0.ɵɵtext(6);
202
202
  i0.ɵɵelementEnd()()();
203
203
  } if (rf & 2) {
@@ -206,12 +206,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
206
206
  i0.ɵɵtextInterpolate(ctx_r1.record.ResponseFormat);
207
207
  } }
208
208
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_29_Template(rf, ctx) { if (rf & 1) {
209
- i0.ɵɵelementStart(0, "div", 84);
210
- i0.ɵɵelement(1, "i", 93);
211
- i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
209
+ i0.ɵɵelementStart(0, "div", 85);
210
+ i0.ɵɵelement(1, "i", 94);
211
+ i0.ɵɵelementStart(2, "div", 86)(3, "div", 87);
212
212
  i0.ɵɵtext(4, "Cached");
213
213
  i0.ɵɵelementEnd();
214
- i0.ɵɵelementStart(5, "div", 87);
214
+ i0.ɵɵelementStart(5, "div", 88);
215
215
  i0.ɵɵtext(6);
216
216
  i0.ɵɵelementEnd()()();
217
217
  } if (rf & 2) {
@@ -220,12 +220,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
220
220
  i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCacheRead));
221
221
  } }
222
222
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_37_Template(rf, ctx) { if (rf & 1) {
223
- i0.ɵɵelementStart(0, "div", 84);
224
- i0.ɵɵelement(1, "i", 94);
225
- i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
223
+ i0.ɵɵelementStart(0, "div", 85);
224
+ i0.ɵɵelement(1, "i", 95);
225
+ i0.ɵɵelementStart(2, "div", 86)(3, "div", 87);
226
226
  i0.ɵɵtext(4, "Started");
227
227
  i0.ɵɵelementEnd();
228
- i0.ɵɵelementStart(5, "div", 87);
228
+ i0.ɵɵelementStart(5, "div", 88);
229
229
  i0.ɵɵtext(6);
230
230
  i0.ɵɵpipe(7, "date");
231
231
  i0.ɵɵelementEnd()()();
@@ -236,47 +236,47 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
236
236
  } }
237
237
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template(rf, ctx) { if (rf & 1) {
238
238
  const _r7 = i0.ɵɵgetCurrentView();
239
- i0.ɵɵelementStart(0, "div", 25)(1, "div", 84);
240
- i0.ɵɵelement(2, "i", 74);
241
- i0.ɵɵelementStart(3, "div", 85)(4, "div", 86);
239
+ i0.ɵɵelementStart(0, "div", 25)(1, "div", 85);
240
+ i0.ɵɵelement(2, "i", 75);
241
+ i0.ɵɵelementStart(3, "div", 86)(4, "div", 87);
242
242
  i0.ɵɵtext(5, "Configuration");
243
243
  i0.ɵɵelementEnd();
244
- i0.ɵɵelementStart(6, "div", 87)(7, "a", 88);
244
+ i0.ɵɵelementStart(6, "div", 88)(7, "a", 89);
245
245
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template_a_click_7_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Configurations", ctx_r1.record.ConfigurationID)); });
246
246
  i0.ɵɵtext(8);
247
247
  i0.ɵɵelementEnd()()()();
248
- i0.ɵɵconditionalCreate(9, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template, 7, 1, "div", 84);
249
- i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template, 7, 1, "div", 84);
250
- i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template, 7, 1, "div", 84);
251
- i0.ɵɵconditionalCreate(12, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template, 7, 1, "div", 84);
252
- i0.ɵɵconditionalCreate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template, 7, 1, "div", 84);
253
- i0.ɵɵelementEnd();
254
- i0.ɵɵelementStart(14, "div", 25)(15, "div", 84);
255
- i0.ɵɵelement(16, "i", 89);
256
- i0.ɵɵelementStart(17, "div", 85)(18, "div", 86);
248
+ i0.ɵɵconditionalCreate(9, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template, 7, 1, "div", 85);
249
+ i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template, 7, 1, "div", 85);
250
+ i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template, 7, 1, "div", 85);
251
+ i0.ɵɵconditionalCreate(12, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template, 7, 1, "div", 85);
252
+ i0.ɵɵconditionalCreate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template, 7, 1, "div", 85);
253
+ i0.ɵɵelementEnd();
254
+ i0.ɵɵelementStart(14, "div", 25)(15, "div", 85);
255
+ i0.ɵɵelement(16, "i", 90);
256
+ i0.ɵɵelementStart(17, "div", 86)(18, "div", 87);
257
257
  i0.ɵɵtext(19, "Duration");
258
258
  i0.ɵɵelementEnd();
259
- i0.ɵɵelementStart(20, "div", 87);
259
+ i0.ɵɵelementStart(20, "div", 88);
260
260
  i0.ɵɵtext(21);
261
261
  i0.ɵɵelementEnd()()();
262
- i0.ɵɵelementStart(22, "div", 90);
263
- i0.ɵɵelement(23, "i", 41);
264
- i0.ɵɵelementStart(24, "div", 85)(25, "div", 86);
262
+ i0.ɵɵelementStart(22, "div", 91);
263
+ i0.ɵɵelement(23, "i", 42);
264
+ i0.ɵɵelementStart(24, "div", 86)(25, "div", 87);
265
265
  i0.ɵɵtext(26, "Total Tokens");
266
266
  i0.ɵɵelementEnd();
267
- i0.ɵɵelementStart(27, "div", 87);
267
+ i0.ɵɵelementStart(27, "div", 88);
268
268
  i0.ɵɵtext(28);
269
269
  i0.ɵɵelementEnd()()();
270
- i0.ɵɵconditionalCreate(29, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_29_Template, 7, 1, "div", 84);
271
- i0.ɵɵelementStart(30, "div", 84);
272
- i0.ɵɵelement(31, "i", 43);
273
- i0.ɵɵelementStart(32, "div", 85)(33, "div", 86);
270
+ i0.ɵɵconditionalCreate(29, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_29_Template, 7, 1, "div", 85);
271
+ i0.ɵɵelementStart(30, "div", 85);
272
+ i0.ɵɵelement(31, "i", 44);
273
+ i0.ɵɵelementStart(32, "div", 86)(33, "div", 87);
274
274
  i0.ɵɵtext(34, "Cost");
275
275
  i0.ɵɵelementEnd();
276
- i0.ɵɵelementStart(35, "div", 87);
276
+ i0.ɵɵelementStart(35, "div", 88);
277
277
  i0.ɵɵtext(36);
278
278
  i0.ɵɵelementEnd()()();
279
- i0.ɵɵconditionalCreate(37, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_37_Template, 8, 4, "div", 84);
279
+ i0.ɵɵconditionalCreate(37, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_37_Template, 8, 4, "div", 85);
280
280
  i0.ɵɵelementEnd();
281
281
  } if (rf & 2) {
282
282
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -304,12 +304,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Templat
304
304
  i0.ɵɵconditional(ctx_r1.record.RunAt ? 37 : -1);
305
305
  } }
306
306
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_15_Template(rf, ctx) { if (rf & 1) {
307
- i0.ɵɵelementStart(0, "div", 84);
308
- i0.ɵɵelement(1, "i", 93);
309
- i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
307
+ i0.ɵɵelementStart(0, "div", 85);
308
+ i0.ɵɵelement(1, "i", 94);
309
+ i0.ɵɵelementStart(2, "div", 86)(3, "div", 87);
310
310
  i0.ɵɵtext(4, "Cached");
311
311
  i0.ɵɵelementEnd();
312
- i0.ɵɵelementStart(5, "div", 87);
312
+ i0.ɵɵelementStart(5, "div", 88);
313
313
  i0.ɵɵtext(6);
314
314
  i0.ɵɵelementEnd()()();
315
315
  } if (rf & 2) {
@@ -318,12 +318,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditi
318
318
  i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCacheRead));
319
319
  } }
320
320
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_23_Template(rf, ctx) { if (rf & 1) {
321
- i0.ɵɵelementStart(0, "div", 84);
322
- i0.ɵɵelement(1, "i", 94);
323
- i0.ɵɵelementStart(2, "div", 85)(3, "div", 86);
321
+ i0.ɵɵelementStart(0, "div", 85);
322
+ i0.ɵɵelement(1, "i", 95);
323
+ i0.ɵɵelementStart(2, "div", 86)(3, "div", 87);
324
324
  i0.ɵɵtext(4, "Started");
325
325
  i0.ɵɵelementEnd();
326
- i0.ɵɵelementStart(5, "div", 87);
326
+ i0.ɵɵelementStart(5, "div", 88);
327
327
  i0.ɵɵtext(6);
328
328
  i0.ɵɵpipe(7, "date");
329
329
  i0.ɵɵelementEnd()()();
@@ -333,32 +333,32 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditi
333
333
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
334
334
  } }
335
335
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
336
- i0.ɵɵelementStart(0, "div", 25)(1, "div", 84);
337
- i0.ɵɵelement(2, "i", 89);
338
- i0.ɵɵelementStart(3, "div", 85)(4, "div", 86);
336
+ i0.ɵɵelementStart(0, "div", 25)(1, "div", 85);
337
+ i0.ɵɵelement(2, "i", 90);
338
+ i0.ɵɵelementStart(3, "div", 86)(4, "div", 87);
339
339
  i0.ɵɵtext(5, "Duration");
340
340
  i0.ɵɵelementEnd();
341
- i0.ɵɵelementStart(6, "div", 87);
341
+ i0.ɵɵelementStart(6, "div", 88);
342
342
  i0.ɵɵtext(7);
343
343
  i0.ɵɵelementEnd()()();
344
- i0.ɵɵelementStart(8, "div", 90);
345
- i0.ɵɵelement(9, "i", 41);
346
- i0.ɵɵelementStart(10, "div", 85)(11, "div", 86);
344
+ i0.ɵɵelementStart(8, "div", 91);
345
+ i0.ɵɵelement(9, "i", 42);
346
+ i0.ɵɵelementStart(10, "div", 86)(11, "div", 87);
347
347
  i0.ɵɵtext(12, "Total Tokens");
348
348
  i0.ɵɵelementEnd();
349
- i0.ɵɵelementStart(13, "div", 87);
349
+ i0.ɵɵelementStart(13, "div", 88);
350
350
  i0.ɵɵtext(14);
351
351
  i0.ɵɵelementEnd()()();
352
- i0.ɵɵconditionalCreate(15, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_15_Template, 7, 1, "div", 84);
353
- i0.ɵɵelementStart(16, "div", 84);
354
- i0.ɵɵelement(17, "i", 43);
355
- i0.ɵɵelementStart(18, "div", 85)(19, "div", 86);
352
+ i0.ɵɵconditionalCreate(15, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_15_Template, 7, 1, "div", 85);
353
+ i0.ɵɵelementStart(16, "div", 85);
354
+ i0.ɵɵelement(17, "i", 44);
355
+ i0.ɵɵelementStart(18, "div", 86)(19, "div", 87);
356
356
  i0.ɵɵtext(20, "Cost");
357
357
  i0.ɵɵelementEnd();
358
- i0.ɵɵelementStart(21, "div", 87);
358
+ i0.ɵɵelementStart(21, "div", 88);
359
359
  i0.ɵɵtext(22);
360
360
  i0.ɵɵelementEnd()()();
361
- i0.ɵɵconditionalCreate(23, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_23_Template, 8, 4, "div", 84);
361
+ i0.ɵɵconditionalCreate(23, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_23_Template, 8, 4, "div", 85);
362
362
  i0.ɵɵelementEnd();
363
363
  } if (rf & 2) {
364
364
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -374,15 +374,15 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Templat
374
374
  i0.ɵɵconditional(ctx_r1.record.RunAt ? 23 : -1);
375
375
  } }
376
376
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template(rf, ctx) { if (rf & 1) {
377
- i0.ɵɵelementStart(0, "span", 97);
377
+ i0.ɵɵelementStart(0, "span", 98);
378
378
  i0.ɵɵtext(1, "JSON");
379
379
  i0.ɵɵelementEnd();
380
380
  } }
381
381
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Template(rf, ctx) { if (rf & 1) {
382
- i0.ɵɵelementStart(0, "span", 95);
383
- i0.ɵɵelement(1, "i", 96);
382
+ i0.ɵɵelementStart(0, "span", 96);
383
+ i0.ɵɵelement(1, "i", 97);
384
384
  i0.ɵɵtext(2, " Input ");
385
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template, 2, 0, "span", 97);
385
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template, 2, 0, "span", 98);
386
386
  i0.ɵɵelementEnd();
387
387
  } if (rf & 2) {
388
388
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -390,7 +390,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Templat
390
390
  i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
391
391
  } }
392
392
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
393
- i0.ɵɵelementStart(0, "span", 110);
393
+ i0.ɵɵelementStart(0, "span", 111);
394
394
  i0.ɵɵtext(1);
395
395
  i0.ɵɵelementEnd();
396
396
  } if (rf & 2) {
@@ -399,10 +399,10 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
399
399
  i0.ɵɵtextInterpolate1("(", ctx_r1.chatMessages.length, ")");
400
400
  } }
401
401
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Template(rf, ctx) { if (rf & 1) {
402
- i0.ɵɵelementStart(0, "span", 108);
403
- i0.ɵɵelement(1, "i", 109);
402
+ i0.ɵɵelementStart(0, "span", 109);
403
+ i0.ɵɵelement(1, "i", 110);
404
404
  i0.ɵɵtext(2, " Messages ");
405
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template, 2, 1, "span", 110);
405
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template, 2, 1, "span", 111);
406
406
  i0.ɵɵelementEnd();
407
407
  } if (rf & 2) {
408
408
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -410,35 +410,35 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
410
410
  i0.ɵɵconditional(ctx_r1.chatMessages.length > 0 ? 3 : -1);
411
411
  } }
412
412
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template(rf, ctx) { if (rf & 1) {
413
- i0.ɵɵelementStart(0, "div", 100);
414
- i0.ɵɵelement(1, "i", 111);
413
+ i0.ɵɵelementStart(0, "div", 101);
414
+ i0.ɵɵelement(1, "i", 112);
415
415
  i0.ɵɵelementStart(2, "p");
416
416
  i0.ɵɵtext(3, "Loading messages...");
417
417
  i0.ɵɵelementEnd()();
418
418
  } }
419
419
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template(rf, ctx) { if (rf & 1) {
420
- i0.ɵɵelement(0, "mj-chat-message-viewer", 101);
420
+ i0.ɵɵelement(0, "mj-chat-message-viewer", 102);
421
421
  } if (rf & 2) {
422
422
  const ctx_r1 = i0.ɵɵnextContext(3);
423
423
  i0.ɵɵproperty("messages", ctx_r1.chatMessages);
424
424
  } }
425
425
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_6_Template(rf, ctx) { if (rf & 1) {
426
426
  i0.ɵɵelementStart(0, "div", 31);
427
- i0.ɵɵelement(1, "i", 112);
427
+ i0.ɵɵelement(1, "i", 113);
428
428
  i0.ɵɵelementStart(2, "p");
429
429
  i0.ɵɵtext(3, "No chat messages found");
430
430
  i0.ɵɵelementEnd()();
431
431
  } }
432
432
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
433
- i0.ɵɵelementStart(0, "span", 97);
433
+ i0.ɵɵelementStart(0, "span", 98);
434
434
  i0.ɵɵtext(1, "Object");
435
435
  i0.ɵɵelementEnd();
436
436
  } }
437
437
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template(rf, ctx) { if (rf & 1) {
438
- i0.ɵɵelementStart(0, "span", 108);
439
- i0.ɵɵelement(1, "i", 113);
438
+ i0.ɵɵelementStart(0, "span", 109);
439
+ i0.ɵɵelement(1, "i", 114);
440
440
  i0.ɵɵtext(2, " Data ");
441
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template, 2, 0, "span", 97);
441
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template, 2, 0, "span", 98);
442
442
  i0.ɵɵelementEnd();
443
443
  } if (rf & 2) {
444
444
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -447,16 +447,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
447
447
  } }
448
448
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template(rf, ctx) { if (rf & 1) {
449
449
  const _r9 = i0.ɵɵgetCurrentView();
450
- i0.ɵɵelementStart(0, "div", 33)(1, "div", 102)(2, "button", 103);
450
+ i0.ɵɵelementStart(0, "div", 33)(1, "div", 103)(2, "button", 104);
451
451
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedData, "Data")); });
452
- i0.ɵɵelement(3, "i", 104);
452
+ i0.ɵɵelement(3, "i", 105);
453
453
  i0.ɵɵtext(4, " Copy ");
454
454
  i0.ɵɵelementEnd();
455
- i0.ɵɵelementStart(5, "button", 105);
455
+ i0.ɵɵelementStart(5, "button", 106);
456
456
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedData, "json", "Data")); });
457
- i0.ɵɵelement(6, "i", 106);
457
+ i0.ɵɵelement(6, "i", 107);
458
458
  i0.ɵɵelementEnd()();
459
- i0.ɵɵelementStart(7, "mj-code-editor", 114);
459
+ i0.ɵɵelementStart(7, "mj-code-editor", 115);
460
460
  i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedData, $event) || (ctx_r1.formattedData = $event); return i0.ɵɵresetView($event); });
461
461
  i0.ɵɵelementEnd()();
462
462
  } if (rf & 2) {
@@ -467,41 +467,41 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditi
467
467
  } }
468
468
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template(rf, ctx) { if (rf & 1) {
469
469
  i0.ɵɵelementStart(0, "div", 31);
470
- i0.ɵɵelement(1, "i", 113);
470
+ i0.ɵɵelement(1, "i", 114);
471
471
  i0.ɵɵelementStart(2, "p");
472
472
  i0.ɵɵtext(3, "No data object found");
473
473
  i0.ɵɵelementEnd()();
474
474
  } }
475
475
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_13_Template(rf, ctx) { if (rf & 1) {
476
- i0.ɵɵelementStart(0, "span", 108);
477
- i0.ɵɵelement(1, "i", 92);
476
+ i0.ɵɵelementStart(0, "span", 109);
477
+ i0.ɵɵelement(1, "i", 93);
478
478
  i0.ɵɵtext(2, " Raw ");
479
479
  i0.ɵɵelementEnd();
480
480
  } }
481
481
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template(rf, ctx) { if (rf & 1) {
482
482
  const _r8 = i0.ɵɵgetCurrentView();
483
- i0.ɵɵelementStart(0, "div", 30)(1, "mj-accordion-panel", 98);
483
+ i0.ɵɵelementStart(0, "div", 30)(1, "mj-accordion-panel", 99);
484
484
  i0.ɵɵtemplate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Template, 4, 1, "ng-template", 28);
485
- i0.ɵɵelementStart(3, "div", 99);
486
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template, 4, 0, "div", 100)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 101)(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_6_Template, 4, 0, "div", 31);
485
+ i0.ɵɵelementStart(3, "div", 100);
486
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template, 4, 0, "div", 101)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 102)(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_6_Template, 4, 0, "div", 31);
487
487
  i0.ɵɵelementEnd()();
488
- i0.ɵɵelementStart(7, "mj-accordion-panel", 98);
488
+ i0.ɵɵelementStart(7, "mj-accordion-panel", 99);
489
489
  i0.ɵɵtemplate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template, 4, 1, "ng-template", 28);
490
- i0.ɵɵelementStart(9, "div", 99);
490
+ i0.ɵɵelementStart(9, "div", 100);
491
491
  i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template, 8, 4, "div", 33)(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template, 4, 0, "div", 31);
492
492
  i0.ɵɵelementEnd()();
493
- i0.ɵɵelementStart(12, "mj-accordion-panel", 98);
493
+ i0.ɵɵelementStart(12, "mj-accordion-panel", 99);
494
494
  i0.ɵɵtemplate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_13_Template, 3, 0, "ng-template", 28);
495
- i0.ɵɵelementStart(14, "div", 99)(15, "div", 33)(16, "div", 102)(17, "button", 103);
495
+ i0.ɵɵelementStart(14, "div", 100)(15, "div", 33)(16, "div", 103)(17, "button", 104);
496
496
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
497
- i0.ɵɵelement(18, "i", 104);
497
+ i0.ɵɵelement(18, "i", 105);
498
498
  i0.ɵɵtext(19, " Copy ");
499
499
  i0.ɵɵelementEnd();
500
- i0.ɵɵelementStart(20, "button", 105);
500
+ i0.ɵɵelementStart(20, "button", 106);
501
501
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedMessages, "json", "Raw Messages")); });
502
- i0.ɵɵelement(21, "i", 106);
502
+ i0.ɵɵelement(21, "i", 107);
503
503
  i0.ɵɵelementEnd()();
504
- i0.ɵɵelementStart(22, "mj-code-editor", 107);
504
+ i0.ɵɵelementStart(22, "mj-code-editor", 108);
505
505
  i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_mj_code_editor_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedMessages, $event) || (ctx_r1.formattedMessages = $event); return i0.ɵɵresetView($event); });
506
506
  i0.ɵɵelementEnd()()()()();
507
507
  } if (rf & 2) {
@@ -522,27 +522,27 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Templat
522
522
  } }
523
523
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_37_Template(rf, ctx) { if (rf & 1) {
524
524
  i0.ɵɵelementStart(0, "div", 31);
525
- i0.ɵɵelement(1, "i", 112);
525
+ i0.ɵɵelement(1, "i", 113);
526
526
  i0.ɵɵelementStart(2, "p");
527
527
  i0.ɵɵtext(3, "No input messages recorded");
528
528
  i0.ɵɵelementEnd()();
529
529
  } }
530
530
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
531
- i0.ɵɵelementStart(0, "span", 97);
531
+ i0.ɵɵelementStart(0, "span", 98);
532
532
  i0.ɵɵtext(1, "JSON");
533
533
  i0.ɵɵelementEnd();
534
534
  } }
535
535
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template(rf, ctx) { if (rf & 1) {
536
- i0.ɵɵelementStart(0, "span", 116);
536
+ i0.ɵɵelementStart(0, "span", 117);
537
537
  i0.ɵɵtext(1, "Error");
538
538
  i0.ɵɵelementEnd();
539
539
  } }
540
540
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Template(rf, ctx) { if (rf & 1) {
541
- i0.ɵɵelementStart(0, "span", 95);
542
- i0.ɵɵelement(1, "i", 115);
541
+ i0.ɵɵelementStart(0, "span", 96);
542
+ i0.ɵɵelement(1, "i", 116);
543
543
  i0.ɵɵtext(2, " Result ");
544
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template, 2, 0, "span", 97);
545
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template, 2, 0, "span", 116);
544
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template, 2, 0, "span", 98);
545
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template, 2, 0, "span", 117);
546
546
  i0.ɵɵelementEnd();
547
547
  } if (rf & 2) {
548
548
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -553,8 +553,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Templat
553
553
  } }
554
554
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template(rf, ctx) { if (rf & 1) {
555
555
  i0.ɵɵelementStart(0, "div", 32);
556
- i0.ɵɵelement(1, "i", 117);
557
- i0.ɵɵelementStart(2, "div", 118)(3, "h4");
556
+ i0.ɵɵelement(1, "i", 118);
557
+ i0.ɵɵelementStart(2, "div", 119)(3, "h4");
558
558
  i0.ɵɵtext(4, "Error Message");
559
559
  i0.ɵɵelementEnd();
560
560
  i0.ɵɵelementStart(5, "p");
@@ -567,16 +567,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Templat
567
567
  } }
568
568
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template(rf, ctx) { if (rf & 1) {
569
569
  const _r10 = i0.ɵɵgetCurrentView();
570
- i0.ɵɵelementStart(0, "div", 33)(1, "div", 102)(2, "button", 103);
570
+ i0.ɵɵelementStart(0, "div", 33)(1, "div", 103)(2, "button", 104);
571
571
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedResult, "Result")); });
572
- i0.ɵɵelement(3, "i", 104);
572
+ i0.ɵɵelement(3, "i", 105);
573
573
  i0.ɵɵtext(4, " Copy ");
574
574
  i0.ɵɵelementEnd();
575
- i0.ɵɵelementStart(5, "button", 105);
575
+ i0.ɵɵelementStart(5, "button", 106);
576
576
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedResult, "json", "Result")); });
577
- i0.ɵɵelement(6, "i", 106);
577
+ i0.ɵɵelement(6, "i", 107);
578
578
  i0.ɵɵelementEnd()();
579
- i0.ɵɵelementStart(7, "mj-code-editor", 119);
579
+ i0.ɵɵelementStart(7, "mj-code-editor", 120);
580
580
  i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedResult, $event) || (ctx_r1.formattedResult = $event); return i0.ɵɵresetView($event); });
581
581
  i0.ɵɵelementEnd()();
582
582
  } if (rf & 2) {
@@ -586,7 +586,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Templat
586
586
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
587
587
  } }
588
588
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
589
- i0.ɵɵelementStart(0, "p", 122)(1, "strong");
589
+ i0.ɵɵelementStart(0, "p", 123)(1, "strong");
590
590
  i0.ɵɵtext(2, "Status:");
591
591
  i0.ɵɵelementEnd();
592
592
  i0.ɵɵtext(3);
@@ -598,14 +598,14 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
598
598
  } }
599
599
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
600
600
  const _r11 = i0.ɵɵgetCurrentView();
601
- i0.ɵɵelementStart(0, "div", 123)(1, "div", 102)(2, "h4", 125);
601
+ i0.ɵɵelementStart(0, "div", 124)(1, "div", 103)(2, "h4", 126);
602
602
  i0.ɵɵtext(3, "Error Details");
603
603
  i0.ɵɵelementEnd();
604
- i0.ɵɵelementStart(4, "button", 105);
604
+ i0.ɵɵelementStart(4, "button", 106);
605
605
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
606
- i0.ɵɵelement(5, "i", 106);
606
+ i0.ɵɵelement(5, "i", 107);
607
607
  i0.ɵɵelementEnd()();
608
- i0.ɵɵelement(6, "mj-code-editor", 126);
608
+ i0.ɵɵelement(6, "mj-code-editor", 127);
609
609
  i0.ɵɵelementEnd();
610
610
  } if (rf & 2) {
611
611
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -613,15 +613,15 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
613
613
  i0.ɵɵproperty("ngModel", ctx_r1.formattedErrorDetails)("disabled", true)("language", "json")("lineWrapping", true);
614
614
  } }
615
615
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
616
- i0.ɵɵelementStart(0, "p", 124);
616
+ i0.ɵɵelementStart(0, "p", 125);
617
617
  i0.ɵɵtext(1, " The prompt execution failed but no additional error information is available. ");
618
618
  i0.ɵɵelementEnd();
619
619
  } }
620
620
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template(rf, ctx) { if (rf & 1) {
621
- i0.ɵɵelementStart(0, "div", 121);
622
- i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template, 4, 1, "p", 122);
623
- i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template, 7, 4, "div", 123);
624
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_3_Template, 2, 0, "p", 124);
621
+ i0.ɵɵelementStart(0, "div", 122);
622
+ i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template, 4, 1, "p", 123);
623
+ i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template, 7, 4, "div", 124);
624
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_3_Template, 2, 0, "p", 125);
625
625
  i0.ɵɵelementEnd();
626
626
  } if (rf & 2) {
627
627
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -634,11 +634,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
634
634
  } }
635
635
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
636
636
  i0.ɵɵelementStart(0, "div", 31);
637
- i0.ɵɵelement(1, "i", 120);
637
+ i0.ɵɵelement(1, "i", 121);
638
638
  i0.ɵɵelementStart(2, "p");
639
639
  i0.ɵɵtext(3, "No result data recorded");
640
640
  i0.ɵɵelementEnd();
641
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template, 4, 3, "div", 121);
641
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template, 4, 3, "div", 122);
642
642
  i0.ɵɵelementEnd();
643
643
  } if (rf & 2) {
644
644
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -646,8 +646,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Templat
646
646
  i0.ɵɵconditional(ctx_r1.record.CompletedAt && (ctx_r1.record.Status === "Failed" || ctx_r1.record.Success === false) ? 4 : -1);
647
647
  } }
648
648
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_45_Template(rf, ctx) { if (rf & 1) {
649
- i0.ɵɵelementStart(0, "span", 95);
650
- i0.ɵɵelement(1, "i", 127);
649
+ i0.ɵɵelementStart(0, "span", 96);
650
+ i0.ɵɵelement(1, "i", 128);
651
651
  i0.ɵɵtext(2, " Token Usage & Metrics ");
652
652
  i0.ɵɵelementEnd();
653
653
  } }
@@ -655,12 +655,21 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_55_Templat
655
655
  i0.ɵɵelementStart(0, "div", 39)(1, "span");
656
656
  i0.ɵɵtext(2);
657
657
  i0.ɵɵelementEnd()();
658
+ } if (rf & 2) {
659
+ const ctx_r1 = i0.ɵɵnextContext(2);
660
+ i0.ɵɵadvance(2);
661
+ i0.ɵɵtextInterpolate1("incl. ", ctx_r1.formatTokens(ctx_r1.CachedTokens), " cached");
662
+ } }
663
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_56_Template(rf, ctx) { if (rf & 1) {
664
+ i0.ɵɵelementStart(0, "div", 39)(1, "span");
665
+ i0.ɵɵtext(2);
666
+ i0.ɵɵelementEnd()();
658
667
  } if (rf & 2) {
659
668
  const ctx_r1 = i0.ɵɵnextContext(2);
660
669
  i0.ɵɵadvance(2);
661
670
  i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensPromptRollup));
662
671
  } }
663
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_63_Template(rf, ctx) { if (rf & 1) {
672
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_64_Template(rf, ctx) { if (rf & 1) {
664
673
  i0.ɵɵelementStart(0, "div", 39)(1, "span");
665
674
  i0.ɵɵtext(2);
666
675
  i0.ɵɵelementEnd()();
@@ -669,7 +678,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_63_Templat
669
678
  i0.ɵɵadvance(2);
670
679
  i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensCompletionRollup));
671
680
  } }
672
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_71_Template(rf, ctx) { if (rf & 1) {
681
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_72_Template(rf, ctx) { if (rf & 1) {
673
682
  i0.ɵɵelementStart(0, "div", 39)(1, "span");
674
683
  i0.ɵɵtext(2);
675
684
  i0.ɵɵelementEnd()();
@@ -678,7 +687,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_71_Templat
678
687
  i0.ɵɵadvance(2);
679
688
  i0.ɵɵtextInterpolate1("incl. ", ctx_r1.formatTokens(ctx_r1.CachedTokens), " cached");
680
689
  } }
681
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_72_Template(rf, ctx) { if (rf & 1) {
690
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Template(rf, ctx) { if (rf & 1) {
682
691
  i0.ɵɵelementStart(0, "div", 39)(1, "span");
683
692
  i0.ɵɵtext(2);
684
693
  i0.ɵɵelementEnd()();
@@ -687,7 +696,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_72_Templat
687
696
  i0.ɵɵadvance(2);
688
697
  i0.ɵɵtextInterpolate1("Net rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup));
689
698
  } }
690
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditional_7_Template(rf, ctx) { if (rf & 1) {
699
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Conditional_7_Template(rf, ctx) { if (rf & 1) {
691
700
  i0.ɵɵelementStart(0, "div", 39)(1, "span");
692
701
  i0.ɵɵtext(2);
693
702
  i0.ɵɵelementEnd()();
@@ -696,7 +705,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditi
696
705
  i0.ɵɵadvance(2);
697
706
  i0.ɵɵtextInterpolate1("Write: ", ctx_r1.formatTokens(ctx_r1.record.TokensCacheWrite));
698
707
  } }
699
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditional_8_Template(rf, ctx) { if (rf & 1) {
708
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Conditional_8_Template(rf, ctx) { if (rf & 1) {
700
709
  i0.ɵɵelementStart(0, "div", 39)(1, "span");
701
710
  i0.ɵɵtext(2);
702
711
  i0.ɵɵpipe(3, "number");
@@ -706,17 +715,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditi
706
715
  i0.ɵɵadvance(2);
707
716
  i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(3, 1, ctx_r1.CacheHitRatePct, "1.0-0"), "% hit rate");
708
717
  } }
709
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Template(rf, ctx) { if (rf & 1) {
718
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Template(rf, ctx) { if (rf & 1) {
710
719
  i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
711
- i0.ɵɵelement(2, "i", 93);
720
+ i0.ɵɵelement(2, "i", 94);
712
721
  i0.ɵɵelementStart(3, "h4");
713
722
  i0.ɵɵtext(4, "Cache Read");
714
723
  i0.ɵɵelementEnd()();
715
- i0.ɵɵelementStart(5, "div", 38);
724
+ i0.ɵɵelementStart(5, "div", 41);
716
725
  i0.ɵɵtext(6);
717
726
  i0.ɵɵelementEnd();
718
- i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditional_7_Template, 3, 1, "div", 39);
719
- i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Conditional_8_Template, 4, 4, "div", 39);
727
+ i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Conditional_7_Template, 3, 1, "div", 39);
728
+ i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Conditional_8_Template, 4, 4, "div", 39);
720
729
  i0.ɵɵelementEnd();
721
730
  } if (rf & 2) {
722
731
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -727,7 +736,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Templat
727
736
  i0.ɵɵadvance();
728
737
  i0.ɵɵconditional(ctx_r1.record.TokensCacheRead || ctx_r1.record.TokensCacheWrite ? 8 : -1);
729
738
  } }
730
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Template(rf, ctx) { if (rf & 1) {
739
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template(rf, ctx) { if (rf & 1) {
731
740
  i0.ɵɵelementStart(0, "div", 39)(1, "span");
732
741
  i0.ɵɵtext(2);
733
742
  i0.ɵɵelementEnd()();
@@ -736,8 +745,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Templat
736
745
  i0.ɵɵadvance(2);
737
746
  i0.ɵɵtextInterpolate1("Total: ", ctx_r1.formatCost(ctx_r1.record.TotalCost));
738
747
  } }
739
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template(rf, ctx) { if (rf & 1) {
740
- i0.ɵɵelementStart(0, "div", 44);
748
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template(rf, ctx) { if (rf & 1) {
749
+ i0.ɵɵelementStart(0, "div", 45);
741
750
  i0.ɵɵtext(1);
742
751
  i0.ɵɵelementEnd();
743
752
  } if (rf & 2) {
@@ -745,13 +754,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Templat
745
754
  i0.ɵɵadvance();
746
755
  i0.ɵɵtextInterpolate(ctx_r1.record.CostCurrency);
747
756
  } }
748
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template(rf, ctx) { if (rf & 1) {
757
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Template(rf, ctx) { if (rf & 1) {
749
758
  i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
750
- i0.ɵɵelement(2, "i", 128);
759
+ i0.ɵɵelement(2, "i", 129);
751
760
  i0.ɵɵelementStart(3, "h4");
752
761
  i0.ɵɵtext(4, "Queue Time");
753
762
  i0.ɵɵelementEnd()();
754
- i0.ɵɵelementStart(5, "div", 38);
763
+ i0.ɵɵelementStart(5, "div", 41);
755
764
  i0.ɵɵtext(6);
756
765
  i0.ɵɵelementEnd()();
757
766
  } if (rf & 2) {
@@ -759,13 +768,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Templat
759
768
  i0.ɵɵadvance(6);
760
769
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.QueueTime));
761
770
  } }
762
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Template(rf, ctx) { if (rf & 1) {
771
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template(rf, ctx) { if (rf & 1) {
763
772
  i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
764
- i0.ɵɵelement(2, "i", 129);
773
+ i0.ɵɵelement(2, "i", 130);
765
774
  i0.ɵɵelementStart(3, "h4");
766
775
  i0.ɵɵtext(4, "Prompt Time");
767
776
  i0.ɵɵelementEnd()();
768
- i0.ɵɵelementStart(5, "div", 38);
777
+ i0.ɵɵelementStart(5, "div", 41);
769
778
  i0.ɵɵtext(6);
770
779
  i0.ɵɵelementEnd()();
771
780
  } if (rf & 2) {
@@ -773,13 +782,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Templat
773
782
  i0.ɵɵadvance(6);
774
783
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.PromptTime));
775
784
  } }
776
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template(rf, ctx) { if (rf & 1) {
785
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template(rf, ctx) { if (rf & 1) {
777
786
  i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
778
- i0.ɵɵelement(2, "i", 130);
787
+ i0.ɵɵelement(2, "i", 131);
779
788
  i0.ɵɵelementStart(3, "h4");
780
789
  i0.ɵɵtext(4, "Completion Time");
781
790
  i0.ɵɵelementEnd()();
782
- i0.ɵɵelementStart(5, "div", 38);
791
+ i0.ɵɵelementStart(5, "div", 41);
783
792
  i0.ɵɵtext(6);
784
793
  i0.ɵɵelementEnd()();
785
794
  } if (rf & 2) {
@@ -787,11 +796,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Templat
787
796
  i0.ɵɵadvance(6);
788
797
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.CompletionTime));
789
798
  } }
790
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template(rf, ctx) { if (rf & 1) {
791
- i0.ɵɵelementStart(0, "div", 46)(1, "span", 86);
799
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template(rf, ctx) { if (rf & 1) {
800
+ i0.ɵɵelementStart(0, "div", 47)(1, "span", 87);
792
801
  i0.ɵɵtext(2, "Execution Order:");
793
802
  i0.ɵɵelementEnd();
794
- i0.ɵɵelementStart(3, "span", 87);
803
+ i0.ɵɵelementStart(3, "span", 88);
795
804
  i0.ɵɵtext(4);
796
805
  i0.ɵɵelementEnd()();
797
806
  } if (rf & 2) {
@@ -799,23 +808,23 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Templat
799
808
  i0.ɵɵadvance(4);
800
809
  i0.ɵɵtextInterpolate(ctx_r1.record.ExecutionOrder);
801
810
  } }
802
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template(rf, ctx) { if (rf & 1) {
811
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template(rf, ctx) { if (rf & 1) {
803
812
  const _r12 = i0.ɵɵgetCurrentView();
804
- i0.ɵɵelementStart(0, "div", 46)(1, "span", 86);
813
+ i0.ɵɵelementStart(0, "div", 47)(1, "span", 87);
805
814
  i0.ɵɵtext(2, "Agent:");
806
815
  i0.ɵɵelementEnd();
807
- i0.ɵɵelementStart(3, "span", 131);
808
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
816
+ i0.ɵɵelementStart(3, "span", 132);
817
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
809
818
  i0.ɵɵtext(4);
810
- i0.ɵɵelement(5, "i", 132);
819
+ i0.ɵɵelement(5, "i", 133);
811
820
  i0.ɵɵelementEnd()();
812
821
  } if (rf & 2) {
813
822
  const ctx_r1 = i0.ɵɵnextContext(2);
814
823
  i0.ɵɵadvance(4);
815
824
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
816
825
  } }
817
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
818
- i0.ɵɵelementStart(0, "span", 110);
826
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
827
+ i0.ɵɵelementStart(0, "span", 111);
819
828
  i0.ɵɵtext(1);
820
829
  i0.ɵɵelementEnd();
821
830
  } if (rf & 2) {
@@ -823,22 +832,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_temp
823
832
  i0.ɵɵadvance();
824
833
  i0.ɵɵtextInterpolate1("(", ctx_r1.record.ValidationAttemptCount, " attempts)");
825
834
  } }
826
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
827
- i0.ɵɵelementStart(0, "span", 144);
835
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
836
+ i0.ɵɵelementStart(0, "span", 145);
828
837
  i0.ɵɵtext(1, "Passed");
829
838
  i0.ɵɵelementEnd();
830
839
  } }
831
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
832
- i0.ɵɵelementStart(0, "span", 116);
840
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
841
+ i0.ɵɵelementStart(0, "span", 117);
833
842
  i0.ɵɵtext(1, "Failed");
834
843
  i0.ɵɵelementEnd();
835
844
  } }
836
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Template(rf, ctx) { if (rf & 1) {
837
- i0.ɵɵelementStart(0, "span", 95);
838
- i0.ɵɵelement(1, "i", 143);
845
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Template(rf, ctx) { if (rf & 1) {
846
+ i0.ɵɵelementStart(0, "span", 96);
847
+ i0.ɵɵelement(1, "i", 144);
839
848
  i0.ɵɵtext(2, " Validation & Retries ");
840
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_3_Template, 2, 1, "span", 110);
841
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_4_Template, 2, 0, "span", 144)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Conditional_5_Template, 2, 0, "span", 116);
849
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_3_Template, 2, 1, "span", 111);
850
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_4_Template, 2, 0, "span", 145)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_5_Template, 2, 0, "span", 117);
842
851
  i0.ɵɵelementEnd();
843
852
  } if (rf & 2) {
844
853
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -847,8 +856,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_temp
847
856
  i0.ɵɵadvance();
848
857
  i0.ɵɵconditional(ctx_r1.record.FinalValidationPassed ? 4 : ctx_r1.record.FinalValidationPassed === false ? 5 : -1);
849
858
  } }
850
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_31_Conditional_6_Template(rf, ctx) { if (rf & 1) {
851
- i0.ɵɵelementStart(0, "span", 145);
859
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Conditional_6_Template(rf, ctx) { if (rf & 1) {
860
+ i0.ɵɵelementStart(0, "span", 146);
852
861
  i0.ɵɵtext(1);
853
862
  i0.ɵɵelementEnd();
854
863
  } if (rf & 2) {
@@ -856,15 +865,15 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditi
856
865
  i0.ɵɵadvance();
857
866
  i0.ɵɵtextInterpolate1("", ctx_r1.record.ValidationErrorCount, " validation errors");
858
867
  } }
859
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_31_Template(rf, ctx) { if (rf & 1) {
860
- i0.ɵɵelementStart(0, "div", 138)(1, "h5");
861
- i0.ɵɵelement(2, "i", 117);
868
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Template(rf, ctx) { if (rf & 1) {
869
+ i0.ɵɵelementStart(0, "div", 139)(1, "h5");
870
+ i0.ɵɵelement(2, "i", 118);
862
871
  i0.ɵɵtext(3, " Final Validation Error");
863
872
  i0.ɵɵelementEnd();
864
873
  i0.ɵɵelementStart(4, "p");
865
874
  i0.ɵɵtext(5);
866
875
  i0.ɵɵelementEnd();
867
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_31_Conditional_6_Template, 2, 1, "span", 145);
876
+ i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Conditional_6_Template, 2, 1, "span", 146);
868
877
  i0.ɵɵelementEnd();
869
878
  } if (rf & 2) {
870
879
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -873,9 +882,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditi
873
882
  i0.ɵɵadvance();
874
883
  i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationErrorCount && ctx_r1.record.ValidationErrorCount > 0 ? 6 : -1);
875
884
  } }
876
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_32_Template(rf, ctx) { if (rf & 1) {
877
- i0.ɵɵelementStart(0, "div", 139)(1, "h5");
878
- i0.ɵɵelement(2, "i", 55);
885
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_32_Template(rf, ctx) { if (rf & 1) {
886
+ i0.ɵɵelementStart(0, "div", 140)(1, "h5");
887
+ i0.ɵɵelement(2, "i", 56);
879
888
  i0.ɵɵtext(3, " Most Common Error");
880
889
  i0.ɵɵelementEnd();
881
890
  i0.ɵɵelementStart(4, "p");
@@ -886,24 +895,24 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditi
886
895
  i0.ɵɵadvance(5);
887
896
  i0.ɵɵtextInterpolate(ctx_r1.record.CommonValidationError);
888
897
  } }
889
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_33_Template(rf, ctx) { if (rf & 1) {
890
- i0.ɵɵelementStart(0, "div", 140)(1, "h4");
898
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_33_Template(rf, ctx) { if (rf & 1) {
899
+ i0.ɵɵelementStart(0, "div", 141)(1, "h4");
891
900
  i0.ɵɵtext(2, "Retry Timeline");
892
901
  i0.ɵɵelementEnd();
893
- i0.ɵɵelementStart(3, "div", 146)(4, "div", 147);
894
- i0.ɵɵelement(5, "i", 89);
902
+ i0.ɵɵelementStart(3, "div", 147)(4, "div", 148);
903
+ i0.ɵɵelement(5, "i", 90);
895
904
  i0.ɵɵelementStart(6, "span");
896
905
  i0.ɵɵtext(7);
897
906
  i0.ɵɵpipe(8, "date");
898
907
  i0.ɵɵelementEnd()();
899
- i0.ɵɵelementStart(9, "div", 147);
900
- i0.ɵɵelement(10, "i", 130);
908
+ i0.ɵɵelementStart(9, "div", 148);
909
+ i0.ɵɵelement(10, "i", 131);
901
910
  i0.ɵɵelementStart(11, "span");
902
911
  i0.ɵɵtext(12);
903
912
  i0.ɵɵpipe(13, "date");
904
913
  i0.ɵɵelementEnd()();
905
- i0.ɵɵelementStart(14, "div", 147);
906
- i0.ɵɵelement(15, "i", 148);
914
+ i0.ɵɵelementStart(14, "div", 148);
915
+ i0.ɵɵelement(15, "i", 149);
907
916
  i0.ɵɵelementStart(16, "span");
908
917
  i0.ɵɵtext(17);
909
918
  i0.ɵɵelementEnd()()()();
@@ -916,8 +925,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditi
916
925
  i0.ɵɵadvance(5);
917
926
  i0.ɵɵtextInterpolate1("Total Retry Duration: ", ctx_r1.formatDuration(ctx_r1.record.TotalRetryDurationMS));
918
927
  } }
919
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
920
- i0.ɵɵelementStart(0, "span", 145);
928
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
929
+ i0.ɵɵelementStart(0, "span", 146);
921
930
  i0.ɵɵtext(1);
922
931
  i0.ɵɵelementEnd();
923
932
  } if (rf & 2) {
@@ -925,11 +934,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditi
925
934
  i0.ɵɵadvance();
926
935
  i0.ɵɵtextInterpolate1("(", attempt_r14.validationErrorCount, " errors)");
927
936
  } }
928
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
929
- i0.ɵɵelementStart(0, "span", 156);
937
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
938
+ i0.ɵɵelementStart(0, "span", 157);
930
939
  i0.ɵɵtext(1);
931
940
  i0.ɵɵelementEnd();
932
- i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 145);
941
+ i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 146);
933
942
  } if (rf & 2) {
934
943
  const attempt_r14 = i0.ɵɵnextContext().$implicit;
935
944
  i0.ɵɵadvance();
@@ -937,8 +946,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditi
937
946
  i0.ɵɵadvance();
938
947
  i0.ɵɵconditional(attempt_r14.validationErrorCount > 0 ? 2 : -1);
939
948
  } }
940
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
941
- i0.ɵɵelementStart(0, "span", 155);
949
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
950
+ i0.ɵɵelementStart(0, "span", 156);
942
951
  i0.ɵɵtext(1);
943
952
  i0.ɵɵelementEnd();
944
953
  } if (rf & 2) {
@@ -946,16 +955,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditi
946
955
  i0.ɵɵadvance();
947
956
  i0.ɵɵtextInterpolate1("Output: ", attempt_r14.outputLength, " chars");
948
957
  } }
949
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Template(rf, ctx) { if (rf & 1) {
950
- i0.ɵɵelementStart(0, "div", 151)(1, "div", 152);
958
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Template(rf, ctx) { if (rf & 1) {
959
+ i0.ɵɵelementStart(0, "div", 152)(1, "div", 153);
951
960
  i0.ɵɵelement(2, "i");
952
961
  i0.ɵɵtext(3);
953
962
  i0.ɵɵelementEnd();
954
- i0.ɵɵelementStart(4, "div", 153)(5, "span", 154);
963
+ i0.ɵɵelementStart(4, "div", 154)(5, "span", 155);
955
964
  i0.ɵɵtext(6);
956
965
  i0.ɵɵelementEnd();
957
- i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_7_Template, 3, 2);
958
- i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Conditional_8_Template, 2, 1, "span", 155);
966
+ i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Template, 3, 2);
967
+ i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_8_Template, 2, 1, "span", 156);
959
968
  i0.ɵɵelementEnd()();
960
969
  } if (rf & 2) {
961
970
  const attempt_r14 = ctx.$implicit;
@@ -971,29 +980,29 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditi
971
980
  i0.ɵɵadvance();
972
981
  i0.ɵɵconditional(attempt_r14.outputLength ? 8 : -1);
973
982
  } }
974
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_Template(rf, ctx) { if (rf & 1) {
975
- i0.ɵɵelementStart(0, "div", 141)(1, "h4");
983
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_Template(rf, ctx) { if (rf & 1) {
984
+ i0.ɵɵelementStart(0, "div", 142)(1, "h4");
976
985
  i0.ɵɵtext(2, "Validation Attempts");
977
986
  i0.ɵɵelementEnd();
978
- i0.ɵɵelementStart(3, "div", 149);
979
- i0.ɵɵrepeaterCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_For_5_Template, 9, 10, "div", 150, _forTrack0);
987
+ i0.ɵɵelementStart(3, "div", 150);
988
+ i0.ɵɵrepeaterCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Template, 9, 10, "div", 151, _forTrack0);
980
989
  i0.ɵɵelementEnd()();
981
990
  } if (rf & 2) {
982
991
  const ctx_r1 = i0.ɵɵnextContext(3);
983
992
  i0.ɵɵadvance(4);
984
993
  i0.ɵɵrepeater(ctx_r1.validationAttempts);
985
994
  } }
986
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_35_Template(rf, ctx) { if (rf & 1) {
995
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_35_Template(rf, ctx) { if (rf & 1) {
987
996
  const _r15 = i0.ɵɵgetCurrentView();
988
- i0.ɵɵelementStart(0, "div", 142)(1, "div", 102)(2, "h4", 125);
997
+ i0.ɵɵelementStart(0, "div", 143)(1, "div", 103)(2, "h4", 126);
989
998
  i0.ɵɵtext(3, "Validation Summary Details");
990
999
  i0.ɵɵelementEnd();
991
- i0.ɵɵelementStart(4, "button", 105);
992
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_35_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationSummary, "json", "Validation Summary")); });
993
- i0.ɵɵelement(5, "i", 106);
1000
+ i0.ɵɵelementStart(4, "button", 106);
1001
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_35_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationSummary, "json", "Validation Summary")); });
1002
+ i0.ɵɵelement(5, "i", 107);
994
1003
  i0.ɵɵelementEnd()();
995
- i0.ɵɵelementStart(6, "div", 157)(7, "mj-code-editor", 158);
996
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_35_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationSummary, $event) || (ctx_r1.formattedValidationSummary = $event); return i0.ɵɵresetView($event); });
1004
+ i0.ɵɵelementStart(6, "div", 158)(7, "mj-code-editor", 159);
1005
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_35_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationSummary, $event) || (ctx_r1.formattedValidationSummary = $event); return i0.ɵɵresetView($event); });
997
1006
  i0.ɵɵelementEnd()()();
998
1007
  } if (rf & 2) {
999
1008
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1001,17 +1010,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditi
1001
1010
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationSummary);
1002
1011
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
1003
1012
  } }
1004
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_36_Template(rf, ctx) { if (rf & 1) {
1013
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_36_Template(rf, ctx) { if (rf & 1) {
1005
1014
  const _r16 = i0.ɵɵgetCurrentView();
1006
- i0.ɵɵelementStart(0, "div", 142)(1, "div", 102)(2, "h4", 125);
1015
+ i0.ɵɵelementStart(0, "div", 143)(1, "div", 103)(2, "h4", 126);
1007
1016
  i0.ɵɵtext(3, "Validation Attempts (Raw JSON)");
1008
1017
  i0.ɵɵelementEnd();
1009
- i0.ɵɵelementStart(4, "button", 105);
1010
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_36_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationAttempts, "json", "Validation Attempts")); });
1011
- i0.ɵɵelement(5, "i", 106);
1018
+ i0.ɵɵelementStart(4, "button", 106);
1019
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_36_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedValidationAttempts, "json", "Validation Attempts")); });
1020
+ i0.ɵɵelement(5, "i", 107);
1012
1021
  i0.ɵɵelementEnd()();
1013
- i0.ɵɵelementStart(6, "div", 157)(7, "mj-code-editor", 159);
1014
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_36_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationAttempts, $event) || (ctx_r1.formattedValidationAttempts = $event); return i0.ɵɵresetView($event); });
1022
+ i0.ɵɵelementStart(6, "div", 158)(7, "mj-code-editor", 160);
1023
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_36_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedValidationAttempts, $event) || (ctx_r1.formattedValidationAttempts = $event); return i0.ɵɵresetView($event); });
1015
1024
  i0.ɵɵelementEnd()()();
1016
1025
  } if (rf & 2) {
1017
1026
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1019,49 +1028,49 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditi
1019
1028
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationAttempts);
1020
1029
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
1021
1030
  } }
1022
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template(rf, ctx) { if (rf & 1) {
1031
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template(rf, ctx) { if (rf & 1) {
1023
1032
  const _r13 = i0.ɵɵgetCurrentView();
1024
1033
  i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
1025
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onValidationPanelToggle($event)); });
1026
- i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Template, 6, 2, "ng-template", 28);
1027
- i0.ɵɵelementStart(2, "div", 29)(3, "div", 133)(4, "div", 134)(5, "h4");
1034
+ i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onValidationPanelToggle($event)); });
1035
+ i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Template, 6, 2, "ng-template", 28);
1036
+ i0.ɵɵelementStart(2, "div", 29)(3, "div", 134)(4, "div", 135)(5, "h4");
1028
1037
  i0.ɵɵtext(6, "Validation Summary");
1029
1038
  i0.ɵɵelementEnd();
1030
- i0.ɵɵelementStart(7, "div", 135);
1039
+ i0.ɵɵelementStart(7, "div", 136);
1031
1040
  i0.ɵɵelement(8, "i");
1032
1041
  i0.ɵɵtext(9);
1033
1042
  i0.ɵɵelementEnd()();
1034
- i0.ɵɵelementStart(10, "div", 136)(11, "div", 137)(12, "div", 86);
1043
+ i0.ɵɵelementStart(10, "div", 137)(11, "div", 138)(12, "div", 87);
1035
1044
  i0.ɵɵtext(13, "Total Attempts");
1036
1045
  i0.ɵɵelementEnd();
1037
- i0.ɵɵelementStart(14, "div", 87);
1046
+ i0.ɵɵelementStart(14, "div", 88);
1038
1047
  i0.ɵɵtext(15);
1039
1048
  i0.ɵɵelementEnd()();
1040
- i0.ɵɵelementStart(16, "div", 137)(17, "div", 86);
1049
+ i0.ɵɵelementStart(16, "div", 138)(17, "div", 87);
1041
1050
  i0.ɵɵtext(18, "Successful");
1042
1051
  i0.ɵɵelementEnd();
1043
- i0.ɵɵelementStart(19, "div", 87);
1052
+ i0.ɵɵelementStart(19, "div", 88);
1044
1053
  i0.ɵɵtext(20);
1045
1054
  i0.ɵɵelementEnd()();
1046
- i0.ɵɵelementStart(21, "div", 137)(22, "div", 86);
1055
+ i0.ɵɵelementStart(21, "div", 138)(22, "div", 87);
1047
1056
  i0.ɵɵtext(23, "Behavior");
1048
1057
  i0.ɵɵelementEnd();
1049
- i0.ɵɵelementStart(24, "div", 87);
1058
+ i0.ɵɵelementStart(24, "div", 88);
1050
1059
  i0.ɵɵtext(25);
1051
1060
  i0.ɵɵelementEnd()();
1052
- i0.ɵɵelementStart(26, "div", 137)(27, "div", 86);
1061
+ i0.ɵɵelementStart(26, "div", 138)(27, "div", 87);
1053
1062
  i0.ɵɵtext(28, "Retry Strategy");
1054
1063
  i0.ɵɵelementEnd();
1055
- i0.ɵɵelementStart(29, "div", 87);
1064
+ i0.ɵɵelementStart(29, "div", 88);
1056
1065
  i0.ɵɵtext(30);
1057
1066
  i0.ɵɵelementEnd()()();
1058
- i0.ɵɵconditionalCreate(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_31_Template, 7, 2, "div", 138);
1059
- i0.ɵɵconditionalCreate(32, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_32_Template, 6, 1, "div", 139);
1067
+ i0.ɵɵconditionalCreate(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Template, 7, 2, "div", 139);
1068
+ i0.ɵɵconditionalCreate(32, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_32_Template, 6, 1, "div", 140);
1060
1069
  i0.ɵɵelementEnd();
1061
- i0.ɵɵconditionalCreate(33, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_33_Template, 18, 9, "div", 140);
1062
- i0.ɵɵconditionalCreate(34, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_34_Template, 6, 0, "div", 141);
1063
- i0.ɵɵconditionalCreate(35, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_35_Template, 8, 4, "div", 142);
1064
- i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Conditional_36_Template, 8, 4, "div", 142);
1070
+ i0.ɵɵconditionalCreate(33, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_33_Template, 18, 9, "div", 141);
1071
+ i0.ɵɵconditionalCreate(34, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_Template, 6, 0, "div", 142);
1072
+ i0.ɵɵconditionalCreate(35, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_35_Template, 8, 4, "div", 143);
1073
+ i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_36_Template, 8, 4, "div", 143);
1065
1074
  i0.ɵɵelementEnd()();
1066
1075
  } if (rf & 2) {
1067
1076
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1093,8 +1102,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Templat
1093
1102
  i0.ɵɵadvance();
1094
1103
  i0.ɵɵconditional(ctx_r1.record.ValidationAttempts ? 36 : -1);
1095
1104
  } }
1096
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1097
- i0.ɵɵelementStart(0, "span", 110);
1105
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1106
+ i0.ɵɵelementStart(0, "span", 111);
1098
1107
  i0.ɵɵtext(1);
1099
1108
  i0.ɵɵelementEnd();
1100
1109
  } if (rf & 2) {
@@ -1102,47 +1111,47 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_temp
1102
1111
  i0.ɵɵadvance();
1103
1112
  i0.ɵɵtextInterpolate1("(", ctx_r1.childRuns.length, " children)");
1104
1113
  } }
1105
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1106
- i0.ɵɵelementStart(0, "span", 95);
1107
- i0.ɵɵelement(1, "i", 162);
1114
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1115
+ i0.ɵɵelementStart(0, "span", 96);
1116
+ i0.ɵɵelement(1, "i", 163);
1108
1117
  i0.ɵɵtext(2, " Run Hierarchy ");
1109
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_3_Template, 2, 1, "span", 110);
1118
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Conditional_3_Template, 2, 1, "span", 111);
1110
1119
  i0.ɵɵelementEnd();
1111
1120
  } if (rf & 2) {
1112
1121
  const ctx_r1 = i0.ɵɵnextContext(3);
1113
1122
  i0.ɵɵadvance(3);
1114
1123
  i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 3 : -1);
1115
1124
  } }
1116
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1125
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1117
1126
  const _r17 = i0.ɵɵgetCurrentView();
1118
- i0.ɵɵelementStart(0, "div", 160)(1, "h4");
1119
- i0.ɵɵelement(2, "i", 82);
1127
+ i0.ɵɵelementStart(0, "div", 161)(1, "h4");
1128
+ i0.ɵɵelement(2, "i", 83);
1120
1129
  i0.ɵɵtext(3, " Parent Run");
1121
1130
  i0.ɵɵelementEnd();
1122
- i0.ɵɵelementStart(4, "div", 163);
1123
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_3_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
1124
- i0.ɵɵelementStart(5, "div", 164);
1131
+ i0.ɵɵelementStart(4, "div", 164);
1132
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_3_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", ctx_r1.parentRun.ID)); });
1133
+ i0.ɵɵelementStart(5, "div", 165);
1125
1134
  i0.ɵɵelement(6, "i");
1126
1135
  i0.ɵɵelementEnd();
1127
- i0.ɵɵelementStart(7, "div", 165)(8, "div", 166);
1136
+ i0.ɵɵelementStart(7, "div", 166)(8, "div", 167);
1128
1137
  i0.ɵɵtext(9);
1129
- i0.ɵɵelementStart(10, "span", 167);
1138
+ i0.ɵɵelementStart(10, "span", 168);
1130
1139
  i0.ɵɵtext(11);
1131
1140
  i0.ɵɵelementEnd()();
1132
- i0.ɵɵelementStart(12, "div", 168)(13, "span");
1133
- i0.ɵɵelement(14, "i", 89);
1141
+ i0.ɵɵelementStart(12, "div", 169)(13, "span");
1142
+ i0.ɵɵelement(14, "i", 90);
1134
1143
  i0.ɵɵtext(15);
1135
1144
  i0.ɵɵelementEnd();
1136
1145
  i0.ɵɵelementStart(16, "span");
1137
- i0.ɵɵelement(17, "i", 41);
1146
+ i0.ɵɵelement(17, "i", 42);
1138
1147
  i0.ɵɵtext(18);
1139
1148
  i0.ɵɵelementEnd();
1140
1149
  i0.ɵɵelementStart(19, "span");
1141
- i0.ɵɵelement(20, "i", 94);
1150
+ i0.ɵɵelement(20, "i", 95);
1142
1151
  i0.ɵɵtext(21);
1143
1152
  i0.ɵɵpipe(22, "date");
1144
1153
  i0.ɵɵelementEnd()()();
1145
- i0.ɵɵelement(23, "i", 132);
1154
+ i0.ɵɵelement(23, "i", 133);
1146
1155
  i0.ɵɵelementEnd()();
1147
1156
  } if (rf & 2) {
1148
1157
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1161,8 +1170,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
1161
1170
  i0.ɵɵadvance(3);
1162
1171
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"));
1163
1172
  } }
1164
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1165
- i0.ɵɵelementStart(0, "span", 173);
1173
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1174
+ i0.ɵɵelementStart(0, "span", 174);
1166
1175
  i0.ɵɵtext(1);
1167
1176
  i0.ɵɵelementEnd();
1168
1177
  } if (rf & 2) {
@@ -1170,32 +1179,32 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
1170
1179
  i0.ɵɵadvance();
1171
1180
  i0.ɵɵtextInterpolate1("#", childRun_r19.ExecutionOrder);
1172
1181
  } }
1173
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Template(rf, ctx) { if (rf & 1) {
1182
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Template(rf, ctx) { if (rf & 1) {
1174
1183
  const _r18 = i0.ɵɵgetCurrentView();
1175
- i0.ɵɵelementStart(0, "div", 172);
1176
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Template_div_click_0_listener() { const childRun_r19 = i0.ɵɵrestoreView(_r18).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r19.ID)); });
1177
- i0.ɵɵelementStart(1, "div", 164);
1184
+ i0.ɵɵelementStart(0, "div", 173);
1185
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Template_div_click_0_listener() { const childRun_r19 = i0.ɵɵrestoreView(_r18).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompt Runs", childRun_r19.ID)); });
1186
+ i0.ɵɵelementStart(1, "div", 165);
1178
1187
  i0.ɵɵelement(2, "i");
1179
1188
  i0.ɵɵelementEnd();
1180
- i0.ɵɵelementStart(3, "div", 165)(4, "div", 166);
1189
+ i0.ɵɵelementStart(3, "div", 166)(4, "div", 167);
1181
1190
  i0.ɵɵtext(5);
1182
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Conditional_6_Template, 2, 1, "span", 173);
1183
- i0.ɵɵelementStart(7, "span", 167);
1191
+ i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Conditional_6_Template, 2, 1, "span", 174);
1192
+ i0.ɵɵelementStart(7, "span", 168);
1184
1193
  i0.ɵɵtext(8);
1185
1194
  i0.ɵɵelementEnd()();
1186
- i0.ɵɵelementStart(9, "div", 168)(10, "span", 16);
1195
+ i0.ɵɵelementStart(9, "div", 169)(10, "span", 16);
1187
1196
  i0.ɵɵelement(11, "i");
1188
1197
  i0.ɵɵtext(12);
1189
1198
  i0.ɵɵelementEnd();
1190
1199
  i0.ɵɵelementStart(13, "span");
1191
- i0.ɵɵelement(14, "i", 89);
1200
+ i0.ɵɵelement(14, "i", 90);
1192
1201
  i0.ɵɵtext(15);
1193
1202
  i0.ɵɵelementEnd();
1194
1203
  i0.ɵɵelementStart(16, "span");
1195
- i0.ɵɵelement(17, "i", 41);
1204
+ i0.ɵɵelement(17, "i", 42);
1196
1205
  i0.ɵɵtext(18);
1197
1206
  i0.ɵɵelementEnd()()();
1198
- i0.ɵɵelement(19, "i", 132);
1207
+ i0.ɵɵelement(19, "i", 133);
1199
1208
  i0.ɵɵelementEnd();
1200
1209
  } if (rf & 2) {
1201
1210
  const childRun_r19 = ctx.$implicit;
@@ -1221,25 +1230,25 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditi
1221
1230
  i0.ɵɵadvance(3);
1222
1231
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r19.TokensUsed));
1223
1232
  } }
1224
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1225
- i0.ɵɵelementStart(0, "div", 161)(1, "h4");
1226
- i0.ɵɵelement(2, "i", 169);
1233
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1234
+ i0.ɵɵelementStart(0, "div", 162)(1, "h4");
1235
+ i0.ɵɵelement(2, "i", 170);
1227
1236
  i0.ɵɵtext(3, " Child Runs");
1228
1237
  i0.ɵɵelementEnd();
1229
- i0.ɵɵelementStart(4, "div", 170);
1230
- i0.ɵɵrepeaterCreate(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_For_6_Template, 20, 14, "div", 171, _forTrack1);
1238
+ i0.ɵɵelementStart(4, "div", 171);
1239
+ i0.ɵɵrepeaterCreate(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_For_6_Template, 20, 14, "div", 172, _forTrack1);
1231
1240
  i0.ɵɵelementEnd()();
1232
1241
  } if (rf & 2) {
1233
1242
  const ctx_r1 = i0.ɵɵnextContext(3);
1234
1243
  i0.ɵɵadvance(5);
1235
1244
  i0.ɵɵrepeater(ctx_r1.childRuns);
1236
1245
  } }
1237
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template(rf, ctx) { if (rf & 1) {
1238
- i0.ɵɵelementStart(0, "mj-accordion-panel", 47);
1239
- i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Template, 4, 1, "ng-template", 28);
1246
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Template(rf, ctx) { if (rf & 1) {
1247
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 48);
1248
+ i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Template, 4, 1, "ng-template", 28);
1240
1249
  i0.ɵɵelementStart(2, "div", 29);
1241
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_3_Template, 24, 12, "div", 160);
1242
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_4_Template, 7, 0, "div", 161);
1250
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_3_Template, 24, 12, "div", 161);
1251
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Template, 7, 0, "div", 162);
1243
1252
  i0.ɵɵelementEnd()();
1244
1253
  } if (rf & 2) {
1245
1254
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1249,33 +1258,33 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Templat
1249
1258
  i0.ɵɵadvance();
1250
1259
  i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 4 : -1);
1251
1260
  } }
1252
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_92_Template(rf, ctx) { if (rf & 1) {
1253
- i0.ɵɵelementStart(0, "span", 95);
1254
- i0.ɵɵelement(1, "i", 60);
1261
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_93_Template(rf, ctx) { if (rf & 1) {
1262
+ i0.ɵɵelementStart(0, "span", 96);
1263
+ i0.ɵɵelement(1, "i", 61);
1255
1264
  i0.ɵɵtext(2, " Additional Details ");
1256
1265
  i0.ɵɵelementEnd();
1257
1266
  } }
1258
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template(rf, ctx) { if (rf & 1) {
1267
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template(rf, ctx) { if (rf & 1) {
1259
1268
  const _r20 = i0.ɵɵgetCurrentView();
1260
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
1269
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1261
1270
  i0.ɵɵtext(2, "Agent");
1262
1271
  i0.ɵɵelementEnd();
1263
- i0.ɵɵelementStart(3, "div", 174);
1264
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
1265
- i0.ɵɵelement(4, "i", 175);
1272
+ i0.ɵɵelementStart(3, "div", 175);
1273
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Agents", ctx_r1.record.AgentID)); });
1274
+ i0.ɵɵelement(4, "i", 176);
1266
1275
  i0.ɵɵtext(5);
1267
- i0.ɵɵelement(6, "i", 132);
1276
+ i0.ɵɵelement(6, "i", 133);
1268
1277
  i0.ɵɵelementEnd()();
1269
1278
  } if (rf & 2) {
1270
1279
  const ctx_r1 = i0.ɵɵnextContext(2);
1271
1280
  i0.ɵɵadvance(5);
1272
1281
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Unknown", " ");
1273
1282
  } }
1274
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template(rf, ctx) { if (rf & 1) {
1275
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
1283
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_97_Template(rf, ctx) { if (rf & 1) {
1284
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1276
1285
  i0.ɵɵtext(2, "Run Type");
1277
1286
  i0.ɵɵelementEnd();
1278
- i0.ɵɵelementStart(3, "div", 50);
1287
+ i0.ɵɵelementStart(3, "div", 51);
1279
1288
  i0.ɵɵelement(4, "i");
1280
1289
  i0.ɵɵtext(5);
1281
1290
  i0.ɵɵelementEnd()();
@@ -1286,12 +1295,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Templat
1286
1295
  i0.ɵɵadvance();
1287
1296
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
1288
1297
  } }
1289
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_97_Template(rf, ctx) { if (rf & 1) {
1290
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
1298
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_98_Template(rf, ctx) { if (rf & 1) {
1299
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1291
1300
  i0.ɵɵtext(2, "Response Format");
1292
1301
  i0.ɵɵelementEnd();
1293
- i0.ɵɵelementStart(3, "div", 50);
1294
- i0.ɵɵelement(4, "i", 92);
1302
+ i0.ɵɵelementStart(3, "div", 51);
1303
+ i0.ɵɵelement(4, "i", 93);
1295
1304
  i0.ɵɵtext(5);
1296
1305
  i0.ɵɵelementEnd()();
1297
1306
  } if (rf & 2) {
@@ -1299,12 +1308,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_97_Templat
1299
1308
  i0.ɵɵadvance(5);
1300
1309
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.ResponseFormat, " ");
1301
1310
  } }
1302
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template(rf, ctx) { if (rf & 1) {
1303
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
1311
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_153_Template(rf, ctx) { if (rf & 1) {
1312
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1304
1313
  i0.ɵɵtext(2, "Started At");
1305
1314
  i0.ɵɵelementEnd();
1306
- i0.ɵɵelementStart(3, "div", 50);
1307
- i0.ɵɵelement(4, "i", 89);
1315
+ i0.ɵɵelementStart(3, "div", 51);
1316
+ i0.ɵɵelement(4, "i", 90);
1308
1317
  i0.ɵɵtext(5);
1309
1318
  i0.ɵɵpipe(6, "date");
1310
1319
  i0.ɵɵelementEnd()();
@@ -1313,12 +1322,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Templa
1313
1322
  i0.ɵɵadvance(5);
1314
1323
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.RunAt, "medium"), " ");
1315
1324
  } }
1316
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_153_Template(rf, ctx) { if (rf & 1) {
1317
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
1325
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template(rf, ctx) { if (rf & 1) {
1326
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1318
1327
  i0.ɵɵtext(2, "Completed At");
1319
1328
  i0.ɵɵelementEnd();
1320
- i0.ɵɵelementStart(3, "div", 50);
1321
- i0.ɵɵelement(4, "i", 176);
1329
+ i0.ɵɵelementStart(3, "div", 51);
1330
+ i0.ɵɵelement(4, "i", 177);
1322
1331
  i0.ɵɵtext(5);
1323
1332
  i0.ɵɵpipe(6, "date");
1324
1333
  i0.ɵɵelementEnd()();
@@ -1327,30 +1336,30 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_153_Templa
1327
1336
  i0.ɵɵadvance(5);
1328
1337
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.CompletedAt, "medium"), " ");
1329
1338
  } }
1330
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1331
- i0.ɵɵelementStart(0, "span", 95);
1332
- i0.ɵɵelement(1, "i", 80);
1339
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1340
+ i0.ɵɵelementStart(0, "span", 96);
1341
+ i0.ɵɵelement(1, "i", 81);
1333
1342
  i0.ɵɵtext(2, " Model Specific Response Details ");
1334
- i0.ɵɵelementStart(3, "span", 97);
1343
+ i0.ɵɵelementStart(3, "span", 98);
1335
1344
  i0.ɵɵtext(4, "JSON");
1336
1345
  i0.ɵɵelementEnd()();
1337
1346
  } }
1338
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template(rf, ctx) { if (rf & 1) {
1347
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Template(rf, ctx) { if (rf & 1) {
1339
1348
  const _r21 = i0.ɵɵgetCurrentView();
1340
1349
  i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
1341
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onModelSpecificPanelToggle($event)); });
1342
- i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_ng_template_1_Template, 5, 0, "ng-template", 28);
1343
- i0.ɵɵelementStart(2, "div", 29)(3, "div", 33)(4, "div", 102)(5, "button", 103);
1344
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedModelSpecificResponseDetails, "Model Specific Response Details")); });
1345
- i0.ɵɵelement(6, "i", 104);
1350
+ i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onModelSpecificPanelToggle($event)); });
1351
+ i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_ng_template_1_Template, 5, 0, "ng-template", 28);
1352
+ i0.ɵɵelementStart(2, "div", 29)(3, "div", 33)(4, "div", 103)(5, "button", 104);
1353
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedModelSpecificResponseDetails, "Model Specific Response Details")); });
1354
+ i0.ɵɵelement(6, "i", 105);
1346
1355
  i0.ɵɵtext(7, " Copy ");
1347
1356
  i0.ɵɵelementEnd();
1348
- i0.ɵɵelementStart(8, "button", 105);
1349
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSpecificResponseDetails, "json", "Model Specific Response Details")); });
1350
- i0.ɵɵelement(9, "i", 106);
1357
+ i0.ɵɵelementStart(8, "button", 106);
1358
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSpecificResponseDetails, "json", "Model Specific Response Details")); });
1359
+ i0.ɵɵelement(9, "i", 107);
1351
1360
  i0.ɵɵelementEnd()();
1352
- i0.ɵɵelementStart(10, "mj-code-editor", 177);
1353
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template_mj_code_editor_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSpecificResponseDetails, $event) || (ctx_r1.formattedModelSpecificResponseDetails = $event); return i0.ɵɵresetView($event); });
1361
+ i0.ɵɵelementStart(10, "mj-code-editor", 178);
1362
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Template_mj_code_editor_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSpecificResponseDetails, $event) || (ctx_r1.formattedModelSpecificResponseDetails = $event); return i0.ɵɵresetView($event); });
1354
1363
  i0.ɵɵelementEnd()()()();
1355
1364
  } if (rf & 2) {
1356
1365
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1359,22 +1368,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Templa
1359
1368
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSpecificResponseDetails);
1360
1369
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
1361
1370
  } }
1362
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1363
- i0.ɵɵelementStart(0, "span", 144);
1371
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1372
+ i0.ɵɵelementStart(0, "span", 145);
1364
1373
  i0.ɵɵtext(1, "Cached");
1365
1374
  i0.ɵɵelementEnd();
1366
1375
  } }
1367
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1368
- i0.ɵɵelementStart(0, "span", 144);
1376
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1377
+ i0.ɵɵelementStart(0, "span", 145);
1369
1378
  i0.ɵɵtext(1, "Selected");
1370
1379
  i0.ɵɵelementEnd();
1371
1380
  } }
1372
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Template(rf, ctx) { if (rf & 1) {
1373
- i0.ɵɵelementStart(0, "span", 95);
1374
- i0.ɵɵelement(1, "i", 80);
1381
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Template(rf, ctx) { if (rf & 1) {
1382
+ i0.ɵɵelementStart(0, "span", 96);
1383
+ i0.ɵɵelement(1, "i", 81);
1375
1384
  i0.ɵɵtext(2, " Model Selection & Performance ");
1376
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Conditional_3_Template, 2, 0, "span", 144);
1377
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Conditional_4_Template, 2, 0, "span", 144);
1385
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_3_Template, 2, 0, "span", 145);
1386
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_4_Template, 2, 0, "span", 145);
1378
1387
  i0.ɵɵelementEnd();
1379
1388
  } if (rf & 2) {
1380
1389
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1383,12 +1392,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Templa
1383
1392
  i0.ɵɵadvance();
1384
1393
  i0.ɵɵconditional(ctx_r1.record.WasSelectedResult ? 4 : -1);
1385
1394
  } }
1386
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Template(rf, ctx) { if (rf & 1) {
1387
- i0.ɵɵelementStart(0, "div", 63)(1, "label");
1395
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template(rf, ctx) { if (rf & 1) {
1396
+ i0.ɵɵelementStart(0, "div", 64)(1, "label");
1388
1397
  i0.ɵɵtext(2, "Cache Key");
1389
1398
  i0.ɵɵelementEnd();
1390
- i0.ɵɵelementStart(3, "div", 50);
1391
- i0.ɵɵelement(4, "i", 178);
1399
+ i0.ɵɵelementStart(3, "div", 51);
1400
+ i0.ɵɵelement(4, "i", 179);
1392
1401
  i0.ɵɵelementStart(5, "code");
1393
1402
  i0.ɵɵtext(6);
1394
1403
  i0.ɵɵelementEnd()()();
@@ -1397,28 +1406,28 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Templa
1397
1406
  i0.ɵɵadvance(6);
1398
1407
  i0.ɵɵtextInterpolate(ctx_r1.record.CacheKey);
1399
1408
  } }
1400
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template(rf, ctx) { if (rf & 1) {
1409
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Template(rf, ctx) { if (rf & 1) {
1401
1410
  const _r22 = i0.ɵɵgetCurrentView();
1402
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
1411
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1403
1412
  i0.ɵɵtext(2, "Judge Prompt");
1404
1413
  i0.ɵɵelementEnd();
1405
- i0.ɵɵelementStart(3, "div", 179);
1406
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.JudgeID)); });
1407
- i0.ɵɵelement(4, "i", 180);
1414
+ i0.ɵɵelementStart(3, "div", 180);
1415
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Prompts", ctx_r1.record.JudgeID)); });
1416
+ i0.ɵɵelement(4, "i", 181);
1408
1417
  i0.ɵɵtext(5);
1409
- i0.ɵɵelement(6, "i", 132);
1418
+ i0.ɵɵelement(6, "i", 133);
1410
1419
  i0.ɵɵelementEnd()();
1411
1420
  } if (rf & 2) {
1412
1421
  const ctx_r1 = i0.ɵɵnextContext(2);
1413
1422
  i0.ɵɵadvance(5);
1414
1423
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Judge || "Unknown", " ");
1415
1424
  } }
1416
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Template(rf, ctx) { if (rf & 1) {
1417
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
1425
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_186_Template(rf, ctx) { if (rf & 1) {
1426
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1418
1427
  i0.ɵɵtext(2, "Judge Score");
1419
1428
  i0.ɵɵelementEnd();
1420
- i0.ɵɵelementStart(3, "div", 50);
1421
- i0.ɵɵelement(4, "i", 181);
1429
+ i0.ɵɵelementStart(3, "div", 51);
1430
+ i0.ɵɵelement(4, "i", 182);
1422
1431
  i0.ɵɵtext(5);
1423
1432
  i0.ɵɵelementEnd()();
1424
1433
  } if (rf & 2) {
@@ -1426,12 +1435,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Templa
1426
1435
  i0.ɵɵadvance(5);
1427
1436
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.JudgeScore, " ");
1428
1437
  } }
1429
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template(rf, ctx) { if (rf & 1) {
1430
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
1438
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template(rf, ctx) { if (rf & 1) {
1439
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1431
1440
  i0.ɵɵtext(2, "First Token Time");
1432
1441
  i0.ɵɵelementEnd();
1433
- i0.ɵɵelementStart(3, "div", 50);
1434
- i0.ɵɵelement(4, "i", 93);
1442
+ i0.ɵɵelementStart(3, "div", 51);
1443
+ i0.ɵɵelement(4, "i", 94);
1435
1444
  i0.ɵɵtext(5);
1436
1445
  i0.ɵɵelementEnd()();
1437
1446
  } if (rf & 2) {
@@ -1439,12 +1448,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Templa
1439
1448
  i0.ɵɵadvance(5);
1440
1449
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.FirstTokenTime, " ms ");
1441
1450
  } }
1442
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1443
- i0.ɵɵelementStart(0, "div", 63)(1, "label");
1451
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1452
+ i0.ɵɵelementStart(0, "div", 64)(1, "label");
1444
1453
  i0.ɵɵtext(2, "Cancellation Reason");
1445
1454
  i0.ɵɵelementEnd();
1446
- i0.ɵɵelementStart(3, "div", 50);
1447
- i0.ɵɵelement(4, "i", 184);
1455
+ i0.ɵɵelementStart(3, "div", 51);
1456
+ i0.ɵɵelement(4, "i", 185);
1448
1457
  i0.ɵɵtext(5);
1449
1458
  i0.ɵɵelementEnd()();
1450
1459
  } if (rf & 2) {
@@ -1452,31 +1461,31 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Condit
1452
1461
  i0.ɵɵadvance(5);
1453
1462
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CancellationReason, " ");
1454
1463
  } }
1455
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template(rf, ctx) { if (rf & 1) {
1456
- i0.ɵɵelementStart(0, "div", 49)(1, "label");
1464
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template(rf, ctx) { if (rf & 1) {
1465
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1457
1466
  i0.ɵɵtext(2, "Cancelled");
1458
1467
  i0.ɵɵelementEnd();
1459
- i0.ɵɵelementStart(3, "div", 182);
1460
- i0.ɵɵelement(4, "i", 183);
1468
+ i0.ɵɵelementStart(3, "div", 183);
1469
+ i0.ɵɵelement(4, "i", 184);
1461
1470
  i0.ɵɵtext(5, " Yes ");
1462
1471
  i0.ɵɵelementEnd()();
1463
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Conditional_6_Template, 6, 1, "div", 63);
1472
+ i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Conditional_6_Template, 6, 1, "div", 64);
1464
1473
  } if (rf & 2) {
1465
1474
  const ctx_r1 = i0.ɵɵnextContext(2);
1466
1475
  i0.ɵɵadvance(6);
1467
1476
  i0.ɵɵconditional(ctx_r1.record.CancellationReason ? 6 : -1);
1468
1477
  } }
1469
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template(rf, ctx) { if (rf & 1) {
1478
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template(rf, ctx) { if (rf & 1) {
1470
1479
  const _r23 = i0.ɵɵgetCurrentView();
1471
- i0.ɵɵelementStart(0, "div", 64)(1, "div", 102)(2, "h4", 125);
1480
+ i0.ɵɵelementStart(0, "div", 65)(1, "div", 103)(2, "h4", 126);
1472
1481
  i0.ɵɵtext(3, "Model Selection Details");
1473
1482
  i0.ɵɵelementEnd();
1474
- i0.ɵɵelementStart(4, "button", 105);
1475
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSelection, "json", "Model Selection")); });
1476
- i0.ɵɵelement(5, "i", 106);
1483
+ i0.ɵɵelementStart(4, "button", 106);
1484
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedModelSelection, "json", "Model Selection")); });
1485
+ i0.ɵɵelement(5, "i", 107);
1477
1486
  i0.ɵɵelementEnd()();
1478
- i0.ɵɵelementStart(6, "div", 157)(7, "mj-code-editor", 185);
1479
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSelection, $event) || (ctx_r1.formattedModelSelection = $event); return i0.ɵɵresetView($event); });
1487
+ i0.ɵɵelementStart(6, "div", 158)(7, "mj-code-editor", 186);
1488
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedModelSelection, $event) || (ctx_r1.formattedModelSelection = $event); return i0.ɵɵresetView($event); });
1480
1489
  i0.ɵɵelementEnd()()();
1481
1490
  } if (rf & 2) {
1482
1491
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1484,17 +1493,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Templa
1484
1493
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSelection);
1485
1494
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
1486
1495
  } }
1487
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template(rf, ctx) { if (rf & 1) {
1496
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_202_Template(rf, ctx) { if (rf & 1) {
1488
1497
  const _r24 = i0.ɵɵgetCurrentView();
1489
- i0.ɵɵelementStart(0, "div", 65)(1, "div", 102)(2, "h4", 125);
1498
+ i0.ɵɵelementStart(0, "div", 66)(1, "div", 103)(2, "h4", 126);
1490
1499
  i0.ɵɵtext(3, "Error Details");
1491
1500
  i0.ɵɵelementEnd();
1492
- i0.ɵɵelementStart(4, "button", 105);
1493
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
1494
- i0.ɵɵelement(5, "i", 106);
1501
+ i0.ɵɵelementStart(4, "button", 106);
1502
+ i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_202_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
1503
+ i0.ɵɵelement(5, "i", 107);
1495
1504
  i0.ɵɵelementEnd()();
1496
- i0.ɵɵelementStart(6, "div", 157)(7, "mj-code-editor", 186);
1497
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedErrorDetails, $event) || (ctx_r1.formattedErrorDetails = $event); return i0.ɵɵresetView($event); });
1505
+ i0.ɵɵelementStart(6, "div", 158)(7, "mj-code-editor", 187);
1506
+ i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_202_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedErrorDetails, $event) || (ctx_r1.formattedErrorDetails = $event); return i0.ɵɵresetView($event); });
1498
1507
  i0.ɵɵelementEnd()()();
1499
1508
  } if (rf & 2) {
1500
1509
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1561,176 +1570,177 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1561
1570
  i0.ɵɵtext(54);
1562
1571
  i0.ɵɵelementEnd();
1563
1572
  i0.ɵɵconditionalCreate(55, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_55_Template, 3, 1, "div", 39);
1573
+ i0.ɵɵconditionalCreate(56, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_56_Template, 3, 1, "div", 39);
1564
1574
  i0.ɵɵelementEnd();
1565
- i0.ɵɵelementStart(56, "div", 35)(57, "div", 36);
1566
- i0.ɵɵelement(58, "i", 40);
1567
- i0.ɵɵelementStart(59, "h4");
1568
- i0.ɵɵtext(60, "Completion Tokens");
1575
+ i0.ɵɵelementStart(57, "div", 35)(58, "div", 36);
1576
+ i0.ɵɵelement(59, "i", 40);
1577
+ i0.ɵɵelementStart(60, "h4");
1578
+ i0.ɵɵtext(61, "Completion Tokens");
1569
1579
  i0.ɵɵelementEnd()();
1570
- i0.ɵɵelementStart(61, "div", 38);
1571
- i0.ɵɵtext(62);
1580
+ i0.ɵɵelementStart(62, "div", 41);
1581
+ i0.ɵɵtext(63);
1572
1582
  i0.ɵɵelementEnd();
1573
- i0.ɵɵconditionalCreate(63, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_63_Template, 3, 1, "div", 39);
1583
+ i0.ɵɵconditionalCreate(64, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_64_Template, 3, 1, "div", 39);
1574
1584
  i0.ɵɵelementEnd();
1575
- i0.ɵɵelementStart(64, "div", 35)(65, "div", 36);
1576
- i0.ɵɵelement(66, "i", 41);
1577
- i0.ɵɵelementStart(67, "h4");
1578
- i0.ɵɵtext(68, "Total Tokens");
1585
+ i0.ɵɵelementStart(65, "div", 35)(66, "div", 36);
1586
+ i0.ɵɵelement(67, "i", 42);
1587
+ i0.ɵɵelementStart(68, "h4");
1588
+ i0.ɵɵtext(69, "Total Tokens");
1579
1589
  i0.ɵɵelementEnd()();
1580
- i0.ɵɵelementStart(69, "div", 42);
1581
- i0.ɵɵtext(70);
1590
+ i0.ɵɵelementStart(70, "div", 43);
1591
+ i0.ɵɵtext(71);
1582
1592
  i0.ɵɵelementEnd();
1583
- i0.ɵɵconditionalCreate(71, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_71_Template, 3, 1, "div", 39);
1584
1593
  i0.ɵɵconditionalCreate(72, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_72_Template, 3, 1, "div", 39);
1594
+ i0.ɵɵconditionalCreate(73, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Template, 3, 1, "div", 39);
1585
1595
  i0.ɵɵelementEnd();
1586
- i0.ɵɵconditionalCreate(73, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Template, 9, 3, "div", 35);
1587
- i0.ɵɵelementStart(74, "div", 35)(75, "div", 36);
1588
- i0.ɵɵelement(76, "i", 43);
1589
- i0.ɵɵelementStart(77, "h4");
1590
- i0.ɵɵtext(78, "Cost");
1596
+ i0.ɵɵconditionalCreate(74, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Template, 9, 3, "div", 35);
1597
+ i0.ɵɵelementStart(75, "div", 35)(76, "div", 36);
1598
+ i0.ɵɵelement(77, "i", 44);
1599
+ i0.ɵɵelementStart(78, "h4");
1600
+ i0.ɵɵtext(79, "Cost");
1591
1601
  i0.ɵɵelementEnd()();
1592
- i0.ɵɵelementStart(79, "div", 38);
1593
- i0.ɵɵtext(80);
1602
+ i0.ɵɵelementStart(80, "div", 41);
1603
+ i0.ɵɵtext(81);
1594
1604
  i0.ɵɵelementEnd();
1595
- i0.ɵɵconditionalCreate(81, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Template, 3, 1, "div", 39);
1596
- i0.ɵɵconditionalCreate(82, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template, 2, 1, "div", 44);
1605
+ i0.ɵɵconditionalCreate(82, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template, 3, 1, "div", 39);
1606
+ i0.ɵɵconditionalCreate(83, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template, 2, 1, "div", 45);
1597
1607
  i0.ɵɵelementEnd();
1598
- i0.ɵɵconditionalCreate(83, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template, 7, 1, "div", 35);
1599
1608
  i0.ɵɵconditionalCreate(84, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Template, 7, 1, "div", 35);
1600
1609
  i0.ɵɵconditionalCreate(85, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template, 7, 1, "div", 35);
1610
+ i0.ɵɵconditionalCreate(86, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template, 7, 1, "div", 35);
1601
1611
  i0.ɵɵelementEnd();
1602
- i0.ɵɵelementStart(86, "div", 45);
1603
- i0.ɵɵconditionalCreate(87, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template, 5, 1, "div", 46);
1604
- i0.ɵɵconditionalCreate(88, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template, 6, 1, "div", 46);
1612
+ i0.ɵɵelementStart(87, "div", 46);
1613
+ i0.ɵɵconditionalCreate(88, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template, 5, 1, "div", 47);
1614
+ i0.ɵɵconditionalCreate(89, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template, 6, 1, "div", 47);
1605
1615
  i0.ɵɵelementEnd()()();
1606
- i0.ɵɵconditionalCreate(89, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template, 37, 18, "mj-accordion-panel", 47);
1607
- i0.ɵɵconditionalCreate(90, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template, 5, 3, "mj-accordion-panel", 47);
1608
- i0.ɵɵelementStart(91, "mj-accordion-panel", 47);
1609
- i0.ɵɵtemplate(92, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_92_Template, 3, 0, "ng-template", 28);
1610
- i0.ɵɵelementStart(93, "div", 29)(94, "div", 48);
1611
- i0.ɵɵconditionalCreate(95, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template, 7, 1, "div", 49);
1612
- i0.ɵɵconditionalCreate(96, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template, 6, 3, "div", 49);
1613
- i0.ɵɵconditionalCreate(97, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_97_Template, 6, 1, "div", 49);
1614
- i0.ɵɵelementStart(98, "div", 49)(99, "label");
1615
- i0.ɵɵtext(100, "Temperature");
1616
+ i0.ɵɵconditionalCreate(90, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template, 37, 18, "mj-accordion-panel", 48);
1617
+ i0.ɵɵconditionalCreate(91, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Template, 5, 3, "mj-accordion-panel", 48);
1618
+ i0.ɵɵelementStart(92, "mj-accordion-panel", 48);
1619
+ i0.ɵɵtemplate(93, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_93_Template, 3, 0, "ng-template", 28);
1620
+ i0.ɵɵelementStart(94, "div", 29)(95, "div", 49);
1621
+ i0.ɵɵconditionalCreate(96, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template, 7, 1, "div", 50);
1622
+ i0.ɵɵconditionalCreate(97, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_97_Template, 6, 3, "div", 50);
1623
+ i0.ɵɵconditionalCreate(98, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_98_Template, 6, 1, "div", 50);
1624
+ i0.ɵɵelementStart(99, "div", 50)(100, "label");
1625
+ i0.ɵɵtext(101, "Temperature");
1616
1626
  i0.ɵɵelementEnd();
1617
- i0.ɵɵelementStart(101, "div", 50);
1618
- i0.ɵɵelement(102, "i", 51);
1619
- i0.ɵɵtext(103);
1627
+ i0.ɵɵelementStart(102, "div", 51);
1628
+ i0.ɵɵelement(103, "i", 52);
1629
+ i0.ɵɵtext(104);
1620
1630
  i0.ɵɵelementEnd()();
1621
- i0.ɵɵelementStart(104, "div", 49)(105, "label");
1622
- i0.ɵɵtext(106, "Top P");
1631
+ i0.ɵɵelementStart(105, "div", 50)(106, "label");
1632
+ i0.ɵɵtext(107, "Top P");
1623
1633
  i0.ɵɵelementEnd();
1624
- i0.ɵɵelementStart(107, "div", 50);
1625
- i0.ɵɵelement(108, "i", 52);
1626
- i0.ɵɵtext(109);
1634
+ i0.ɵɵelementStart(108, "div", 51);
1635
+ i0.ɵɵelement(109, "i", 53);
1636
+ i0.ɵɵtext(110);
1627
1637
  i0.ɵɵelementEnd()();
1628
- i0.ɵɵelementStart(110, "div", 49)(111, "label");
1629
- i0.ɵɵtext(112, "Top K");
1638
+ i0.ɵɵelementStart(111, "div", 50)(112, "label");
1639
+ i0.ɵɵtext(113, "Top K");
1630
1640
  i0.ɵɵelementEnd();
1631
- i0.ɵɵelementStart(113, "div", 50);
1632
- i0.ɵɵelement(114, "i", 53);
1633
- i0.ɵɵtext(115);
1641
+ i0.ɵɵelementStart(114, "div", 51);
1642
+ i0.ɵɵelement(115, "i", 54);
1643
+ i0.ɵɵtext(116);
1634
1644
  i0.ɵɵelementEnd()();
1635
- i0.ɵɵelementStart(116, "div", 49)(117, "label");
1636
- i0.ɵɵtext(118, "Min P");
1645
+ i0.ɵɵelementStart(117, "div", 50)(118, "label");
1646
+ i0.ɵɵtext(119, "Min P");
1637
1647
  i0.ɵɵelementEnd();
1638
- i0.ɵɵelementStart(119, "div", 50);
1639
- i0.ɵɵelement(120, "i", 54);
1640
- i0.ɵɵtext(121);
1648
+ i0.ɵɵelementStart(120, "div", 51);
1649
+ i0.ɵɵelement(121, "i", 55);
1650
+ i0.ɵɵtext(122);
1641
1651
  i0.ɵɵelementEnd()();
1642
- i0.ɵɵelementStart(122, "div", 49)(123, "label");
1643
- i0.ɵɵtext(124, "Frequency Penalty");
1652
+ i0.ɵɵelementStart(123, "div", 50)(124, "label");
1653
+ i0.ɵɵtext(125, "Frequency Penalty");
1644
1654
  i0.ɵɵelementEnd();
1645
- i0.ɵɵelementStart(125, "div", 50);
1646
- i0.ɵɵelement(126, "i", 55);
1647
- i0.ɵɵtext(127);
1655
+ i0.ɵɵelementStart(126, "div", 51);
1656
+ i0.ɵɵelement(127, "i", 56);
1657
+ i0.ɵɵtext(128);
1648
1658
  i0.ɵɵelementEnd()();
1649
- i0.ɵɵelementStart(128, "div", 49)(129, "label");
1650
- i0.ɵɵtext(130, "Presence Penalty");
1659
+ i0.ɵɵelementStart(129, "div", 50)(130, "label");
1660
+ i0.ɵɵtext(131, "Presence Penalty");
1651
1661
  i0.ɵɵelementEnd();
1652
- i0.ɵɵelementStart(131, "div", 50);
1653
- i0.ɵɵelement(132, "i", 56);
1654
- i0.ɵɵtext(133);
1662
+ i0.ɵɵelementStart(132, "div", 51);
1663
+ i0.ɵɵelement(133, "i", 57);
1664
+ i0.ɵɵtext(134);
1655
1665
  i0.ɵɵelementEnd()();
1656
- i0.ɵɵelementStart(134, "div", 49)(135, "label");
1657
- i0.ɵɵtext(136, "Seed");
1666
+ i0.ɵɵelementStart(135, "div", 50)(136, "label");
1667
+ i0.ɵɵtext(137, "Seed");
1658
1668
  i0.ɵɵelementEnd();
1659
- i0.ɵɵelementStart(137, "div", 50);
1660
- i0.ɵɵelement(138, "i", 57);
1661
- i0.ɵɵtext(139);
1669
+ i0.ɵɵelementStart(138, "div", 51);
1670
+ i0.ɵɵelement(139, "i", 58);
1671
+ i0.ɵɵtext(140);
1662
1672
  i0.ɵɵelementEnd()();
1663
- i0.ɵɵelementStart(140, "div", 49)(141, "label");
1664
- i0.ɵɵtext(142, "Stop Sequences");
1673
+ i0.ɵɵelementStart(141, "div", 50)(142, "label");
1674
+ i0.ɵɵtext(143, "Stop Sequences");
1665
1675
  i0.ɵɵelementEnd();
1666
- i0.ɵɵelementStart(143, "div", 50);
1667
- i0.ɵɵelement(144, "i", 58);
1668
- i0.ɵɵtext(145);
1676
+ i0.ɵɵelementStart(144, "div", 51);
1677
+ i0.ɵɵelement(145, "i", 59);
1678
+ i0.ɵɵtext(146);
1669
1679
  i0.ɵɵelementEnd()();
1670
- i0.ɵɵelementStart(146, "div", 49)(147, "label");
1671
- i0.ɵɵtext(148, "Assistant Prefill");
1680
+ i0.ɵɵelementStart(147, "div", 50)(148, "label");
1681
+ i0.ɵɵtext(149, "Assistant Prefill");
1672
1682
  i0.ɵɵelementEnd();
1673
- i0.ɵɵelementStart(149, "div", 50);
1674
- i0.ɵɵelement(150, "i", 59);
1675
- i0.ɵɵtext(151);
1683
+ i0.ɵɵelementStart(150, "div", 51);
1684
+ i0.ɵɵelement(151, "i", 60);
1685
+ i0.ɵɵtext(152);
1676
1686
  i0.ɵɵelementEnd()();
1677
- i0.ɵɵconditionalCreate(152, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template, 7, 4, "div", 49);
1678
- i0.ɵɵconditionalCreate(153, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_153_Template, 7, 4, "div", 49);
1687
+ i0.ɵɵconditionalCreate(153, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_153_Template, 7, 4, "div", 50);
1688
+ i0.ɵɵconditionalCreate(154, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template, 7, 4, "div", 50);
1679
1689
  i0.ɵɵelementEnd()()();
1680
- i0.ɵɵconditionalCreate(154, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template, 11, 5, "mj-accordion-panel", 47);
1681
- i0.ɵɵelementStart(155, "mj-accordion-panel", 27);
1682
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_155_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onModelSelectionPanelToggle($event)); });
1683
- i0.ɵɵtemplate(156, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_156_Template, 5, 2, "ng-template", 28);
1684
- i0.ɵɵelementStart(157, "div", 29)(158, "div", 48)(159, "div", 49)(160, "label");
1685
- i0.ɵɵtext(161, "Status");
1690
+ i0.ɵɵconditionalCreate(155, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Template, 11, 5, "mj-accordion-panel", 48);
1691
+ i0.ɵɵelementStart(156, "mj-accordion-panel", 27);
1692
+ i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_156_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onModelSelectionPanelToggle($event)); });
1693
+ i0.ɵɵtemplate(157, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Template, 5, 2, "ng-template", 28);
1694
+ i0.ɵɵelementStart(158, "div", 29)(159, "div", 49)(160, "div", 50)(161, "label");
1695
+ i0.ɵɵtext(162, "Status");
1686
1696
  i0.ɵɵelementEnd();
1687
- i0.ɵɵelementStart(162, "div", 50);
1688
- i0.ɵɵelement(163, "i", 60);
1689
- i0.ɵɵtext(164);
1697
+ i0.ɵɵelementStart(163, "div", 51);
1698
+ i0.ɵɵelement(164, "i", 61);
1699
+ i0.ɵɵtext(165);
1690
1700
  i0.ɵɵelementEnd()();
1691
- i0.ɵɵelementStart(165, "div", 49)(166, "label");
1692
- i0.ɵɵtext(167, "Selection Strategy");
1701
+ i0.ɵɵelementStart(166, "div", 50)(167, "label");
1702
+ i0.ɵɵtext(168, "Selection Strategy");
1693
1703
  i0.ɵɵelementEnd();
1694
- i0.ɵɵelementStart(168, "div", 50);
1695
- i0.ɵɵelement(169, "i", 61);
1696
- i0.ɵɵtext(170);
1704
+ i0.ɵɵelementStart(169, "div", 51);
1705
+ i0.ɵɵelement(170, "i", 62);
1706
+ i0.ɵɵtext(171);
1697
1707
  i0.ɵɵelementEnd()();
1698
- i0.ɵɵelementStart(171, "div", 49)(172, "label");
1699
- i0.ɵɵtext(173, "Model Power Rank");
1708
+ i0.ɵɵelementStart(172, "div", 50)(173, "label");
1709
+ i0.ɵɵtext(174, "Model Power Rank");
1700
1710
  i0.ɵɵelementEnd();
1701
- i0.ɵɵelementStart(174, "div", 50);
1702
- i0.ɵɵelement(175, "i", 62);
1703
- i0.ɵɵtext(176);
1711
+ i0.ɵɵelementStart(175, "div", 51);
1712
+ i0.ɵɵelement(176, "i", 63);
1713
+ i0.ɵɵtext(177);
1704
1714
  i0.ɵɵelementEnd()();
1705
- i0.ɵɵelementStart(177, "div", 49)(178, "label");
1706
- i0.ɵɵtext(179, "Cache Hit");
1715
+ i0.ɵɵelementStart(178, "div", 50)(179, "label");
1716
+ i0.ɵɵtext(180, "Cache Hit");
1707
1717
  i0.ɵɵelementEnd();
1708
- i0.ɵɵelementStart(180, "div", 50);
1709
- i0.ɵɵelement(181, "i");
1710
- i0.ɵɵtext(182);
1718
+ i0.ɵɵelementStart(181, "div", 51);
1719
+ i0.ɵɵelement(182, "i");
1720
+ i0.ɵɵtext(183);
1711
1721
  i0.ɵɵelementEnd()();
1712
- i0.ɵɵconditionalCreate(183, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Template, 7, 1, "div", 63);
1713
- i0.ɵɵconditionalCreate(184, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template, 7, 1, "div", 49);
1714
- i0.ɵɵconditionalCreate(185, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Template, 6, 1, "div", 49);
1715
- i0.ɵɵelementStart(186, "div", 49)(187, "label");
1716
- i0.ɵɵtext(188, "Was Selected Result");
1722
+ i0.ɵɵconditionalCreate(184, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template, 7, 1, "div", 64);
1723
+ i0.ɵɵconditionalCreate(185, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Template, 7, 1, "div", 50);
1724
+ i0.ɵɵconditionalCreate(186, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_186_Template, 6, 1, "div", 50);
1725
+ i0.ɵɵelementStart(187, "div", 50)(188, "label");
1726
+ i0.ɵɵtext(189, "Was Selected Result");
1717
1727
  i0.ɵɵelementEnd();
1718
- i0.ɵɵelementStart(189, "div", 50);
1719
- i0.ɵɵelement(190, "i");
1720
- i0.ɵɵtext(191);
1728
+ i0.ɵɵelementStart(190, "div", 51);
1729
+ i0.ɵɵelement(191, "i");
1730
+ i0.ɵɵtext(192);
1721
1731
  i0.ɵɵelementEnd()();
1722
- i0.ɵɵelementStart(192, "div", 49)(193, "label");
1723
- i0.ɵɵtext(194, "Streaming Enabled");
1732
+ i0.ɵɵelementStart(193, "div", 50)(194, "label");
1733
+ i0.ɵɵtext(195, "Streaming Enabled");
1724
1734
  i0.ɵɵelementEnd();
1725
- i0.ɵɵelementStart(195, "div", 50);
1726
- i0.ɵɵelement(196, "i");
1727
- i0.ɵɵtext(197);
1735
+ i0.ɵɵelementStart(196, "div", 51);
1736
+ i0.ɵɵelement(197, "i");
1737
+ i0.ɵɵtext(198);
1728
1738
  i0.ɵɵelementEnd()();
1729
- i0.ɵɵconditionalCreate(198, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template, 6, 1, "div", 49);
1730
- i0.ɵɵconditionalCreate(199, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template, 7, 1);
1739
+ i0.ɵɵconditionalCreate(199, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template, 6, 1, "div", 50);
1740
+ i0.ɵɵconditionalCreate(200, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template, 7, 1);
1731
1741
  i0.ɵɵelementEnd();
1732
- i0.ɵɵconditionalCreate(200, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template, 8, 4, "div", 64);
1733
1742
  i0.ɵɵconditionalCreate(201, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template, 8, 4, "div", 65);
1743
+ i0.ɵɵconditionalCreate(202, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_202_Template, 8, 4, "div", 66);
1734
1744
  i0.ɵɵelementEnd()()()()();
1735
1745
  } if (rf & 2) {
1736
1746
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1772,49 +1782,51 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1772
1782
  i0.ɵɵadvance(2);
1773
1783
  i0.ɵɵproperty("Expanded", ctx_r1.metricsExpanded);
1774
1784
  i0.ɵɵadvance(10);
1775
- i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensPrompt));
1785
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.FullPromptTokens));
1786
+ i0.ɵɵadvance();
1787
+ i0.ɵɵconditional(ctx_r1.CachedTokens > 0 ? 55 : -1);
1776
1788
  i0.ɵɵadvance();
1777
- i0.ɵɵconditional(ctx_r1.record.TokensPromptRollup && ctx_r1.record.TokensPromptRollup !== ctx_r1.record.TokensPrompt ? 55 : -1);
1789
+ i0.ɵɵconditional(ctx_r1.record.TokensPromptRollup && ctx_r1.record.TokensPromptRollup !== ctx_r1.record.TokensPrompt ? 56 : -1);
1778
1790
  i0.ɵɵadvance(7);
1779
1791
  i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCompletion));
1780
1792
  i0.ɵɵadvance();
1781
- i0.ɵɵconditional(ctx_r1.record.TokensCompletionRollup && ctx_r1.record.TokensCompletionRollup !== ctx_r1.record.TokensCompletion ? 63 : -1);
1793
+ i0.ɵɵconditional(ctx_r1.record.TokensCompletionRollup && ctx_r1.record.TokensCompletionRollup !== ctx_r1.record.TokensCompletion ? 64 : -1);
1782
1794
  i0.ɵɵadvance(7);
1783
1795
  i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.TotalTokensProcessed));
1784
1796
  i0.ɵɵadvance();
1785
- i0.ɵɵconditional(ctx_r1.CachedTokens > 0 ? 71 : -1);
1797
+ i0.ɵɵconditional(ctx_r1.CachedTokens > 0 ? 72 : -1);
1786
1798
  i0.ɵɵadvance();
1787
- i0.ɵɵconditional(ctx_r1.record.TokensUsedRollup && ctx_r1.record.TokensUsedRollup !== ctx_r1.record.TokensUsed ? 72 : -1);
1799
+ i0.ɵɵconditional(ctx_r1.record.TokensUsedRollup && ctx_r1.record.TokensUsedRollup !== ctx_r1.record.TokensUsed ? 73 : -1);
1788
1800
  i0.ɵɵadvance();
1789
- i0.ɵɵconditional(ctx_r1.record.TokensCacheRead != null || ctx_r1.record.TokensCacheWrite != null ? 73 : -1);
1801
+ i0.ɵɵconditional(ctx_r1.record.TokensCacheRead != null || ctx_r1.record.TokensCacheWrite != null ? 74 : -1);
1790
1802
  i0.ɵɵadvance(7);
1791
1803
  i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.Cost));
1792
1804
  i0.ɵɵadvance();
1793
- i0.ɵɵconditional(ctx_r1.record.TotalCost && ctx_r1.record.TotalCost !== ctx_r1.record.Cost ? 81 : -1);
1805
+ i0.ɵɵconditional(ctx_r1.record.TotalCost && ctx_r1.record.TotalCost !== ctx_r1.record.Cost ? 82 : -1);
1794
1806
  i0.ɵɵadvance();
1795
- i0.ɵɵconditional(ctx_r1.record.CostCurrency ? 82 : -1);
1807
+ i0.ɵɵconditional(ctx_r1.record.CostCurrency ? 83 : -1);
1796
1808
  i0.ɵɵadvance();
1797
- i0.ɵɵconditional(ctx_r1.record.QueueTime != null ? 83 : -1);
1809
+ i0.ɵɵconditional(ctx_r1.record.QueueTime != null ? 84 : -1);
1798
1810
  i0.ɵɵadvance();
1799
- i0.ɵɵconditional(ctx_r1.record.PromptTime != null ? 84 : -1);
1811
+ i0.ɵɵconditional(ctx_r1.record.PromptTime != null ? 85 : -1);
1800
1812
  i0.ɵɵadvance();
1801
- i0.ɵɵconditional(ctx_r1.record.CompletionTime != null ? 85 : -1);
1813
+ i0.ɵɵconditional(ctx_r1.record.CompletionTime != null ? 86 : -1);
1802
1814
  i0.ɵɵadvance(2);
1803
- i0.ɵɵconditional(ctx_r1.record.ExecutionOrder !== null ? 87 : -1);
1815
+ i0.ɵɵconditional(ctx_r1.record.ExecutionOrder !== null ? 88 : -1);
1804
1816
  i0.ɵɵadvance();
1805
- i0.ɵɵconditional(ctx_r1.record.AgentID ? 88 : -1);
1817
+ i0.ɵɵconditional(ctx_r1.record.AgentID ? 89 : -1);
1806
1818
  i0.ɵɵadvance();
1807
- i0.ɵɵconditional(ctx_r1.record && (ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 0 || ctx_r1.record.ValidationBehavior) ? 89 : -1);
1819
+ i0.ɵɵconditional(ctx_r1.record && (ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 0 || ctx_r1.record.ValidationBehavior) ? 90 : -1);
1808
1820
  i0.ɵɵadvance();
1809
- i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ? 90 : -1);
1821
+ i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ? 91 : -1);
1810
1822
  i0.ɵɵadvance();
1811
1823
  i0.ɵɵproperty("Expanded", false);
1812
1824
  i0.ɵɵadvance(4);
1813
- i0.ɵɵconditional(ctx_r1.record.AgentID ? 95 : -1);
1825
+ i0.ɵɵconditional(ctx_r1.record.AgentID ? 96 : -1);
1814
1826
  i0.ɵɵadvance();
1815
- i0.ɵɵconditional(ctx_r1.record.RunType ? 96 : -1);
1827
+ i0.ɵɵconditional(ctx_r1.record.RunType ? 97 : -1);
1816
1828
  i0.ɵɵadvance();
1817
- i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 97 : -1);
1829
+ i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 98 : -1);
1818
1830
  i0.ɵɵadvance(4);
1819
1831
  i0.ɵɵclassProp("null-value", ctx_r1.record.Temperature === null || ctx_r1.record.Temperature === undefined);
1820
1832
  i0.ɵɵadvance(2);
@@ -1852,11 +1864,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1852
1864
  i0.ɵɵadvance(2);
1853
1865
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.AssistantPrefill || "\u2014", " ");
1854
1866
  i0.ɵɵadvance();
1855
- i0.ɵɵconditional(ctx_r1.record.RunAt ? 152 : -1);
1867
+ i0.ɵɵconditional(ctx_r1.record.RunAt ? 153 : -1);
1856
1868
  i0.ɵɵadvance();
1857
- i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 153 : -1);
1869
+ i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 154 : -1);
1858
1870
  i0.ɵɵadvance();
1859
- i0.ɵɵconditional(ctx_r1.record.ModelSpecificResponseDetails ? 154 : -1);
1871
+ i0.ɵɵconditional(ctx_r1.record.ModelSpecificResponseDetails ? 155 : -1);
1860
1872
  i0.ɵɵadvance();
1861
1873
  i0.ɵɵproperty("Expanded", false);
1862
1874
  i0.ɵɵadvance(9);
@@ -1872,11 +1884,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1872
1884
  i0.ɵɵadvance();
1873
1885
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CacheHit ? "Yes" : "No", " ");
1874
1886
  i0.ɵɵadvance();
1875
- i0.ɵɵconditional(ctx_r1.record.CacheKey ? 183 : -1);
1887
+ i0.ɵɵconditional(ctx_r1.record.CacheKey ? 184 : -1);
1876
1888
  i0.ɵɵadvance();
1877
- i0.ɵɵconditional(ctx_r1.record.JudgeID ? 184 : -1);
1889
+ i0.ɵɵconditional(ctx_r1.record.JudgeID ? 185 : -1);
1878
1890
  i0.ɵɵadvance();
1879
- i0.ɵɵconditional(ctx_r1.record.JudgeScore !== null ? 185 : -1);
1891
+ i0.ɵɵconditional(ctx_r1.record.JudgeScore !== null ? 186 : -1);
1880
1892
  i0.ɵɵadvance(5);
1881
1893
  i0.ɵɵclassMap(ctx_r1.record.WasSelectedResult ? "fa-solid fa-trophy" : "fa-solid fa-times");
1882
1894
  i0.ɵɵadvance();
@@ -1886,36 +1898,36 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1886
1898
  i0.ɵɵadvance();
1887
1899
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.StreamingEnabled ? "Yes" : "No", " ");
1888
1900
  i0.ɵɵadvance();
1889
- i0.ɵɵconditional(ctx_r1.record.FirstTokenTime !== null ? 198 : -1);
1901
+ i0.ɵɵconditional(ctx_r1.record.FirstTokenTime !== null ? 199 : -1);
1890
1902
  i0.ɵɵadvance();
1891
- i0.ɵɵconditional(ctx_r1.record.Cancelled ? 199 : -1);
1903
+ i0.ɵɵconditional(ctx_r1.record.Cancelled ? 200 : -1);
1892
1904
  i0.ɵɵadvance();
1893
- i0.ɵɵconditional(ctx_r1.record.ModelSelection ? 200 : -1);
1905
+ i0.ɵɵconditional(ctx_r1.record.ModelSelection ? 201 : -1);
1894
1906
  i0.ɵɵadvance();
1895
- i0.ɵɵconditional(ctx_r1.record.ErrorDetails ? 201 : -1);
1907
+ i0.ɵɵconditional(ctx_r1.record.ErrorDetails ? 202 : -1);
1896
1908
  } }
1897
1909
  function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1898
1910
  const _r25 = i0.ɵɵgetCurrentView();
1899
- i0.ɵɵelementStart(0, "div", 187);
1911
+ i0.ɵɵelementStart(0, "div", 188);
1900
1912
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeFullScreen()); });
1901
- i0.ɵɵelementStart(1, "div", 188);
1913
+ i0.ɵɵelementStart(1, "div", 189);
1902
1914
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r25); return i0.ɵɵresetView($event.stopPropagation()); });
1903
- i0.ɵɵelementStart(2, "div", 189)(3, "span", 190);
1904
- i0.ɵɵelement(4, "i", 106);
1915
+ i0.ɵɵelementStart(2, "div", 190)(3, "span", 191);
1916
+ i0.ɵɵelement(4, "i", 107);
1905
1917
  i0.ɵɵtext(5);
1906
1918
  i0.ɵɵelementEnd();
1907
- i0.ɵɵelementStart(6, "div", 191)(7, "button", 192);
1919
+ i0.ɵɵelementStart(6, "div", 192)(7, "button", 193);
1908
1920
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.FullScreenContent, ctx_r1.FullScreenTitle)); });
1909
- i0.ɵɵelement(8, "i", 104);
1921
+ i0.ɵɵelement(8, "i", 105);
1910
1922
  i0.ɵɵtext(9, " Copy ");
1911
1923
  i0.ɵɵelementEnd();
1912
- i0.ɵɵelementStart(10, "button", 193);
1924
+ i0.ɵɵelementStart(10, "button", 194);
1913
1925
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeFullScreen()); });
1914
- i0.ɵɵelement(11, "i", 194);
1926
+ i0.ɵɵelement(11, "i", 195);
1915
1927
  i0.ɵɵtext(12, " Close ");
1916
1928
  i0.ɵɵelementEnd()()();
1917
- i0.ɵɵelementStart(13, "div", 195);
1918
- i0.ɵɵelement(14, "mj-code-editor", 196);
1929
+ i0.ɵɵelementStart(13, "div", 196);
1930
+ i0.ɵɵelement(14, "mj-code-editor", 197);
1919
1931
  i0.ɵɵelementEnd()()();
1920
1932
  } if (rf & 2) {
1921
1933
  const ctx_r1 = i0.ɵɵnextContext();
@@ -2281,6 +2293,18 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
2281
2293
  return 0;
2282
2294
  return (r.TokensCacheRead ?? 0) + (r.TokensCacheWrite ?? 0);
2283
2295
  }
2296
+ /**
2297
+ * Full prompt/input token count = uncached (net) prompt PLUS the cache buckets. TokensPrompt is
2298
+ * stored net (cache-read subtracted out by the provider-normalization layer), so on a cached run
2299
+ * the raw field understates the real input; this reconstructs the true input the headline should
2300
+ * show, with {@link CachedTokens} surfaced as the cached subset. Equals TokensPrompt when no cache.
2301
+ */
2302
+ get FullPromptTokens() {
2303
+ const r = this.record;
2304
+ if (!r)
2305
+ return 0;
2306
+ return (r.TokensPrompt ?? 0) + (r.TokensCacheRead ?? 0) + (r.TokensCacheWrite ?? 0);
2307
+ }
2284
2308
  /** Percentage of this run's input tokens served from the provider's prompt cache. */
2285
2309
  get CacheHitRatePct() {
2286
2310
  const read = this.record?.TokensCacheRead ?? 0;
@@ -2430,8 +2454,8 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
2430
2454
  // Don't auto-expand validation panel anymore - let user expand when needed
2431
2455
  }
2432
2456
  static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJAIPromptRunFormComponentExtended_BaseFactory; return function MJAIPromptRunFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJAIPromptRunFormComponentExtended_BaseFactory || (ɵMJAIPromptRunFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJAIPromptRunFormComponentExtended)))(__ngFactoryType__ || MJAIPromptRunFormComponentExtended); }; })(); }
2433
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [["form", "ngForm"], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "fullscreen-overlay"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "prompt-run-header"], [1, "header-content"], [1, "run-overview"], [1, "run-icon-wrapper"], [1, "run-info"], [1, "run-title"], [1, "run-id"], [1, "run-meta"], [1, "meta-card", "status-card"], [1, "c3-card-label"], [1, "meta-card-body"], [1, "status-indicator"], [1, "meta-card", "execution-card"], [1, "model-card-c3"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "form-content", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "panel-content"], [1, "nested-panels"], [1, "empty-state"], [1, "error-message"], [1, "json-editor-container"], [1, "metrics-grid"], [1, "metric-card"], [1, "metric-header"], [1, "fa-solid", "fa-message"], [1, "metric-value", "large"], [1, "metric-rollup"], [1, "fa-solid", "fa-reply"], [1, "fa-solid", "fa-coins"], ["title", "Prompt + completion + cached tokens \u2014 the full amount the model processed", 1, "metric-value", "large"], [1, "fa-solid", "fa-dollar-sign"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [2, "margin-bottom", "8px", 3, "Expanded"], [1, "detail-fields-grid"], [1, "detail-field"], [1, "detail-value"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-repeat"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], [1, "fa-solid", "fa-stop-circle"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-strategy"], [1, "fa-solid", "fa-ranking-star"], [1, "detail-field", "full-width"], [1, "model-selection-json"], [1, "error-details-json"], [1, "prompt-card-c3"], [1, "meta-card", "prompt-single-card"], ["title", "View Agent Prompt", 1, "c3-child-section", 3, "click"], [1, "fa-solid", "fa-comment", "prompt-icon"], [1, "c3-divider"], [1, "c3-line"], [1, "c3-divider-label"], ["title", "View System Prompt", 1, "c3-parent-section", 3, "click"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-arrow-up-right-from-square", "c3-link-icon"], ["title", "View Prompt", 1, "meta-card-body", "clickable", 3, "click"], [1, "fa-solid", "fa-comment-dots", 2, "color", "var(--mj-brand-primary)"], ["title", "View Model", 1, "c3-card-body", 3, "click"], [1, "c3-model-name"], [1, "fa-solid", "fa-microchip"], [1, "c3-vendor-name"], [1, "fa-solid", "fa-level-up-alt"], [1, "original-link", 3, "click"], [1, "metric-item"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], ["href", "javascript:void(0)", 1, "config-link", 3, "click"], [1, "fa-solid", "fa-clock"], ["title", "Total tokens the model processed, including cached input", 1, "metric-item"], [1, "fa-solid", "fa-tachometer-alt"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-bolt"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "fa-solid", "fa-comment-dots"], [1, "panel-badge"], [1, "sub-expansion-panel", 2, "margin-bottom", "8px", 3, "Expanded"], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], [1, "json-toolbar"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View full screen", 3, "click"], [1, "fa-solid", "fa-expand"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "sub-panel-title"], [1, "fa-solid", "fa-comments"], [1, "panel-count"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-comment-slash"], [1, "fa-solid", "fa-database"], ["name", "formattedData", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], ["name", "formattedResult", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-inbox"], [1, "error-info"], [1, "finish-reason"], [1, "error-details"], [1, "error-hint"], [2, "margin", "0"], [2, "height", "200px", "width", "100%", 3, "ngModel", "disabled", "language", "lineWrapping"], [1, "fa-solid", "fa-chart-line"], [1, "fa-solid", "fa-hourglass-start"], [1, "fa-solid", "fa-brain"], [1, "fa-solid", "fa-flag-checkered"], [1, "metric-value", "link", 3, "click"], [1, "fa-solid", "fa-external-link"], [1, "validation-summary"], [1, "summary-header"], [1, "validation-status"], [1, "validation-metrics"], [1, "metric-card", "small"], [1, "validation-error"], [1, "common-error"], [1, "retry-timeline"], [1, "validation-attempts"], [1, "validation-json"], [1, "fa-solid", "fa-shield-check"], [1, "panel-badge", "success"], [1, "error-count"], [1, "timeline-info"], [1, "timeline-stat"], [1, "fa-solid", "fa-stopwatch"], [1, "attempts-list"], [1, "attempt-item", 3, "success", "failed"], [1, "attempt-item"], [1, "attempt-number"], [1, "attempt-details"], [1, "attempt-time"], [1, "output-length"], [1, "attempt-error"], [1, "json-viewer-container"], ["name", "formattedValidationSummary", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedValidationAttempts", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "parent-run-section"], [1, "child-runs-section"], [1, "fa-solid", "fa-sitemap"], [1, "run-item", "parent", 3, "click"], [1, "run-item-icon"], [1, "run-item-content"], [1, "run-item-title"], [1, "run-item-type"], [1, "run-item-meta"], [1, "fa-solid", "fa-level-down-alt"], [1, "runs-list"], [1, "run-item", "child"], [1, "run-item", "child", 3, "click"], [1, "execution-order"], ["title", "View Agent", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-check-circle"], ["name", "formattedModelSpecificResponseDetails", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-key"], ["title", "View Judge Prompt", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-gavel"], [1, "fa-solid", "fa-star"], [1, "detail-value", "error"], [1, "fa-solid", "fa-ban"], [1, "fa-solid", "fa-exclamation-circle"], ["name", "formattedModelSelection", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedErrorDetails", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fullscreen-overlay", 3, "click"], [1, "fullscreen-container", 3, "click"], [1, "fullscreen-header"], [1, "fullscreen-title"], [1, "fullscreen-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy content", 3, "click"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fullscreen-body"], [2, "height", "100%", "width", "100%", 3, "value", "readonly", "language"]], template: function MJAIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
2434
- i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Template, 202, 103, "mj-record-form-container", 1);
2457
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [["form", "ngForm"], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "fullscreen-overlay"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "prompt-run-header"], [1, "header-content"], [1, "run-overview"], [1, "run-icon-wrapper"], [1, "run-info"], [1, "run-title"], [1, "run-id"], [1, "run-meta"], [1, "meta-card", "status-card"], [1, "c3-card-label"], [1, "meta-card-body"], [1, "status-indicator"], [1, "meta-card", "execution-card"], [1, "model-card-c3"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "form-content", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "panel-content"], [1, "nested-panels"], [1, "empty-state"], [1, "error-message"], [1, "json-editor-container"], [1, "metrics-grid"], [1, "metric-card"], [1, "metric-header"], [1, "fa-solid", "fa-message"], ["title", "Full input the model processed \u2014 uncached (new) prompt tokens plus any cached tokens", 1, "metric-value", "large"], [1, "metric-rollup"], [1, "fa-solid", "fa-reply"], [1, "metric-value", "large"], [1, "fa-solid", "fa-coins"], ["title", "Prompt + completion + cached tokens \u2014 the full amount the model processed", 1, "metric-value", "large"], [1, "fa-solid", "fa-dollar-sign"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [2, "margin-bottom", "8px", 3, "Expanded"], [1, "detail-fields-grid"], [1, "detail-field"], [1, "detail-value"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-repeat"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], [1, "fa-solid", "fa-stop-circle"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-strategy"], [1, "fa-solid", "fa-ranking-star"], [1, "detail-field", "full-width"], [1, "model-selection-json"], [1, "error-details-json"], [1, "prompt-card-c3"], [1, "meta-card", "prompt-single-card"], ["title", "View Agent Prompt", 1, "c3-child-section", 3, "click"], [1, "fa-solid", "fa-comment", "prompt-icon"], [1, "c3-divider"], [1, "c3-line"], [1, "c3-divider-label"], ["title", "View System Prompt", 1, "c3-parent-section", 3, "click"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-arrow-up-right-from-square", "c3-link-icon"], ["title", "View Prompt", 1, "meta-card-body", "clickable", 3, "click"], [1, "fa-solid", "fa-comment-dots", 2, "color", "var(--mj-brand-primary)"], ["title", "View Model", 1, "c3-card-body", 3, "click"], [1, "c3-model-name"], [1, "fa-solid", "fa-microchip"], [1, "c3-vendor-name"], [1, "fa-solid", "fa-level-up-alt"], [1, "original-link", 3, "click"], [1, "metric-item"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], ["href", "javascript:void(0)", 1, "config-link", 3, "click"], [1, "fa-solid", "fa-clock"], ["title", "Total tokens the model processed, including cached input", 1, "metric-item"], [1, "fa-solid", "fa-tachometer-alt"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-bolt"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "fa-solid", "fa-comment-dots"], [1, "panel-badge"], [1, "sub-expansion-panel", 2, "margin-bottom", "8px", 3, "Expanded"], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], [1, "json-toolbar"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View full screen", 3, "click"], [1, "fa-solid", "fa-expand"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "sub-panel-title"], [1, "fa-solid", "fa-comments"], [1, "panel-count"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-comment-slash"], [1, "fa-solid", "fa-database"], ["name", "formattedData", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], ["name", "formattedResult", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-inbox"], [1, "error-info"], [1, "finish-reason"], [1, "error-details"], [1, "error-hint"], [2, "margin", "0"], [2, "height", "200px", "width", "100%", 3, "ngModel", "disabled", "language", "lineWrapping"], [1, "fa-solid", "fa-chart-line"], [1, "fa-solid", "fa-hourglass-start"], [1, "fa-solid", "fa-brain"], [1, "fa-solid", "fa-flag-checkered"], [1, "metric-value", "link", 3, "click"], [1, "fa-solid", "fa-external-link"], [1, "validation-summary"], [1, "summary-header"], [1, "validation-status"], [1, "validation-metrics"], [1, "metric-card", "small"], [1, "validation-error"], [1, "common-error"], [1, "retry-timeline"], [1, "validation-attempts"], [1, "validation-json"], [1, "fa-solid", "fa-shield-check"], [1, "panel-badge", "success"], [1, "error-count"], [1, "timeline-info"], [1, "timeline-stat"], [1, "fa-solid", "fa-stopwatch"], [1, "attempts-list"], [1, "attempt-item", 3, "success", "failed"], [1, "attempt-item"], [1, "attempt-number"], [1, "attempt-details"], [1, "attempt-time"], [1, "output-length"], [1, "attempt-error"], [1, "json-viewer-container"], ["name", "formattedValidationSummary", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedValidationAttempts", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "parent-run-section"], [1, "child-runs-section"], [1, "fa-solid", "fa-sitemap"], [1, "run-item", "parent", 3, "click"], [1, "run-item-icon"], [1, "run-item-content"], [1, "run-item-title"], [1, "run-item-type"], [1, "run-item-meta"], [1, "fa-solid", "fa-level-down-alt"], [1, "runs-list"], [1, "run-item", "child"], [1, "run-item", "child", 3, "click"], [1, "execution-order"], ["title", "View Agent", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-check-circle"], ["name", "formattedModelSpecificResponseDetails", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-key"], ["title", "View Judge Prompt", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-gavel"], [1, "fa-solid", "fa-star"], [1, "detail-value", "error"], [1, "fa-solid", "fa-ban"], [1, "fa-solid", "fa-exclamation-circle"], ["name", "formattedModelSelection", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedErrorDetails", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fullscreen-overlay", 3, "click"], [1, "fullscreen-container", 3, "click"], [1, "fullscreen-header"], [1, "fullscreen-title"], [1, "fullscreen-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy content", 3, "click"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fullscreen-body"], [2, "height", "100%", "width", "100%", 3, "value", "readonly", "language"]], template: function MJAIPromptRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
2458
+ i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Template, 203, 104, "mj-record-form-container", 1);
2435
2459
  i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_1_Template, 15, 4, "div", 2);
2436
2460
  } if (rf & 2) {
2437
2461
  i0.ɵɵconditional(ctx.record ? 0 : -1);
@@ -2445,7 +2469,7 @@ MJAIPromptRunFormComponentExtended = __decorate([
2445
2469
  export { MJAIPromptRunFormComponentExtended };
2446
2470
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptRunFormComponentExtended, [{
2447
2471
  type: Component,
2448
- args: [{ standalone: false, selector: 'mj-ai-prompt-run-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <!-- Status Card -->\n <div class=\"meta-card status-card\">\n <div class=\"c3-card-label\">Status</div>\n <div class=\"meta-card-body\">\n <span class=\"status-indicator\" [style.background-color]=\"getStatusColor()\"></span>\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n {{ getStatusText() }}\n </div>\n </div>\n\n <!-- Execution Card -->\n @if (record.RunType) {\n <div class=\"meta-card execution-card\">\n <div class=\"c3-card-label\">Execution</div>\n <div class=\"meta-card-body\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\" [style.color]=\"getRunTypeColor(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n\n <!-- Prompt Card -->\n @if (prompt) {\n @if (record.ChildPromptID) {\n <!-- C3 Stacked Connector: child prompt prominent, parent nested -->\n <div class=\"prompt-card-c3\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"c3-child-section\" (click)=\"navigateToEntity('MJ: AI Prompts', record.ChildPromptID)\" title=\"View Agent Prompt\">\n <i class=\"fa-solid fa-comment prompt-icon\"></i>\n {{ record.ChildPrompt }}\n </div>\n <div class=\"c3-divider\">\n <span class=\"c3-line\"></span>\n <span class=\"c3-divider-label\">wrapped by</span>\n <span class=\"c3-line\"></span>\n </div>\n <div class=\"c3-parent-section\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View System Prompt\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ prompt.Name }}\n <i class=\"fa-solid fa-arrow-up-right-from-square c3-link-icon\"></i>\n </div>\n </div>\n } @else {\n <!-- Single prompt (no child) \u2014 same card style -->\n <div class=\"meta-card prompt-single-card\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"meta-card-body clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ prompt.Name }}\n </div>\n </div>\n }\n }\n\n <!-- Model Card -->\n @if (model) {\n <div class=\"model-card-c3\">\n <div class=\"c3-card-label\">Model</div>\n <div class=\"c3-card-body\" (click)=\"navigateToEntity('MJ: AI Models', model.ID)\" title=\"View Model\">\n <span class=\"c3-model-name\"><i class=\"fa-solid fa-microchip\"></i> {{ model.Name }}</span>\n @if (record.Vendor) {\n <span class=\"c3-vendor-name\">{{ record.Vendor }}</span>\n }\n </div>\n </div>\n }\n @if (record.RerunFromPromptRunID) {\n <span class=\"original-run\" title=\"View Original Run\">\n <i class=\"fa-solid fa-level-up-alt\"></i>\n <a (click)=\"navigateToOriginalRun()\" class=\"original-link\">Original Run</a>\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n @if (record.ConfigurationID) {\n <!-- Configuration Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-cog\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Configuration</div>\n <div class=\"metric-value\">\n <a href=\"javascript:void(0)\" class=\"config-link\" (click)=\"navigateToEntity('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n @if (record.Temperature !== null && record.Temperature !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Temperature</div>\n <div class=\"metric-value\">{{ record.Temperature }}</div>\n </div>\n </div>\n }\n @if (record.TopP !== null && record.TopP !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-percentage\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top P</div>\n <div class=\"metric-value\">{{ record.TopP }}</div>\n </div>\n </div>\n }\n @if (record.TopK !== null && record.TopK !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-list-ol\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top K</div>\n <div class=\"metric-value\">{{ record.TopK }}</div>\n </div>\n </div>\n }\n @if (record.EffortLevel !== null && record.EffortLevel !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Effort Level</div>\n <div class=\"metric-value\">{{ record.EffortLevel }}</div>\n </div>\n </div>\n }\n @if (record.ResponseFormat) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-code\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Response Format</div>\n <div class=\"metric-value\">{{ record.ResponseFormat }}</div>\n </div>\n </div>\n }\n </div>\n \n <!-- Execution Metrics Bar (always show when configuration exists) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\" title=\"Total tokens the model processed, including cached input\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(TotalTokensProcessed) }}</div>\n </div>\n </div>\n @if (record.TokensCacheRead) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cached</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensCacheRead) }}</div>\n </div>\n </div>\n }\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n } @else {\n <!-- Execution Metrics Bar (original behavior when no configuration) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\" title=\"Total tokens the model processed, including cached input\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(TotalTokensProcessed) }}</div>\n </div>\n </div>\n @if (record.TokensCacheRead) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cached</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensCacheRead) }}</div>\n </div>\n </div>\n }\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n\n <!-- Input Panel with nested sub-panels -->\n <mj-accordion-panel [Expanded]=\"inputExpanded\" (ExpandedChange)=\"onInputPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <!-- Nested expansion panels for sub-sections -->\n <div class=\"nested-panels\">\n <!-- Messages Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"messagesExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Messages\n @if (chatMessages.length > 0) {\n <span class=\"panel-count\">({{ chatMessages.length }})</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (isParsingMessages || isLoadingRelatedData) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading messages...</p>\n </div>\n } @else if (chatMessages.length > 0) {\n <mj-chat-message-viewer \n [messages]=\"chatMessages\">\n </mj-chat-message-viewer>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No chat messages found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Data Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"dataExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-database\"></i>\n Data\n @if (inputData) {\n <span class=\"panel-badge\">Object</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (inputData && formattedData) {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedData, 'json', 'Data')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedData\"\n name=\"formattedData\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No data object found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Raw Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"rawExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Raw\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedMessages, 'json', 'Raw Messages')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessages\"\n name=\"formattedMessages\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n \n <!-- Result Panel -->\n <mj-accordion-panel [Expanded]=\"resultExpanded\" (ExpandedChange)=\"onResultPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedResult, 'json', 'Result')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedResult\"\n name=\"formattedResult\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (!record.ErrorMessage) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No result data recorded</p>\n @if (record.CompletedAt && (record.Status === 'Failed' || record.Success === false)) {\n <div class=\"error-info\">\n @if (record.Status) {\n <p class=\"finish-reason\">\n <strong>Status:</strong> {{ record.Status }}\n </p>\n }\n @if (formattedErrorDetails) {\n <div class=\"error-details\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor\n [ngModel]=\"formattedErrorDetails\"\n [disabled]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (!formattedErrorDetails) {\n <p class=\"error-hint\">\n The prompt execution failed but no additional error information is available.\n </p>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Token Usage & Metrics Panel -->\n <mj-accordion-panel [Expanded]=\"metricsExpanded\" (ExpandedChange)=\"onMetricsPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage &amp; Metrics\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensPrompt) }}</div>\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\" title=\"Prompt + completion + cached tokens \u2014 the full amount the model processed\">{{ formatTokens(TotalTokensProcessed) }}</div>\n @if (CachedTokens > 0) {\n <div class=\"metric-rollup\">\n <span>incl. {{ formatTokens(CachedTokens) }} cached</span>\n </div>\n }\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Net rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n\n <!-- Prompt-cache tokens (provider cache reads = hits, writes = cache creation).\n Only rendered when the provider reported cache usage. -->\n @if (record.TokensCacheRead != null || record.TokensCacheWrite != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-bolt\"></i>\n <h4>Cache Read</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCacheRead) }}</div>\n @if (record.TokensCacheWrite) {\n <div class=\"metric-rollup\">\n <span>Write: {{ formatTokens(record.TokensCacheWrite) }}</span>\n </div>\n }\n @if (record.TokensCacheRead || record.TokensCacheWrite) {\n <div class=\"metric-rollup\">\n <span>{{ CacheHitRatePct | number:'1.0-0' }}% hit rate</span>\n </div>\n }\n </div>\n }\n\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n \n <!-- Timing Metrics -->\n @if (record.QueueTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-hourglass-start\"></i>\n <h4>Queue Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.QueueTime) }}</div>\n </div>\n }\n \n @if (record.PromptTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>Prompt Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.PromptTime) }}</div>\n </div>\n }\n \n @if (record.CompletionTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <h4>Completion Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.CompletionTime) }}</div>\n </div>\n }\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <mj-accordion-panel [Expanded]=\"validationExpanded\" (ExpandedChange)=\"onValidationPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation &amp; Retries\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <span class=\"panel-count\">({{ record.ValidationAttemptCount }} attempts)</span>\n }\n @if (record.FinalValidationPassed) {\n <span class=\"panel-badge success\">Passed</span>\n } @else if (record.FinalValidationPassed === false) {\n <span class=\"panel-badge error\">Failed</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <!-- Validation Summary -->\n <div class=\"validation-summary\">\n <div class=\"summary-header\">\n <h4>Validation Summary</h4>\n <div class=\"validation-status\" [class.success]=\"record.FinalValidationPassed === true\" [class.failed]=\"record.FinalValidationPassed === false\">\n <i [class]=\"record.FinalValidationPassed === true ? 'fa-solid fa-check-circle' : (record.FinalValidationPassed === false ? 'fa-solid fa-times-circle' : 'fa-solid fa-hourglass-half')\"></i>\n {{ record.FinalValidationPassed === true ? 'Validation Passed' : (record.FinalValidationPassed === false ? 'Validation Failed' : 'Validation Pending') }}\n </div>\n </div>\n \n <div class=\"validation-metrics\">\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Total Attempts</div>\n <div class=\"metric-value\">{{ record.ValidationAttemptCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Successful</div>\n <div class=\"metric-value\">{{ record.SuccessfulValidationCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Behavior</div>\n <div class=\"metric-value\">{{ record.ValidationBehavior || 'Not set' }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Retry Strategy</div>\n <div class=\"metric-value\">{{ record.RetryStrategy || 'Not set' }}</div>\n </div>\n </div>\n \n @if (record.FinalValidationError) {\n <div class=\"validation-error\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Final Validation Error</h5>\n <p>{{ record.FinalValidationError }}</p>\n @if (record && record.ValidationErrorCount && record.ValidationErrorCount > 0) {\n <span class=\"error-count\">{{ record.ValidationErrorCount }} validation errors</span>\n }\n </div>\n }\n \n @if (record.CommonValidationError && record.CommonValidationError !== record.FinalValidationError) {\n <div class=\"common-error\">\n <h5><i class=\"fa-solid fa-repeat\"></i> Most Common Error</h5>\n <p>{{ record.CommonValidationError }}</p>\n </div>\n }\n </div>\n \n <!-- Retry Timeline -->\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <div class=\"retry-timeline\">\n <h4>Retry Timeline</h4>\n <div class=\"timeline-info\">\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>First Attempt: {{ record.FirstAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <span>Last Attempt: {{ record.LastAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span>Total Retry Duration: {{ formatDuration(record.TotalRetryDurationMS) }}</span>\n </div>\n </div>\n </div>\n }\n \n <!-- Validation Attempts Details -->\n @if (validationAttempts && validationAttempts.length > 0) {\n <div class=\"validation-attempts\">\n <h4>Validation Attempts</h4>\n <div class=\"attempts-list\">\n @for (attempt of validationAttempts; track attempt.attemptNumber) {\n <div class=\"attempt-item\" [class.success]=\"attempt.success\" [class.failed]=\"!attempt.success\">\n <div class=\"attempt-number\">\n <i [class]=\"attempt.success ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n Attempt #{{ attempt.attemptNumber }}\n </div>\n <div class=\"attempt-details\">\n <span class=\"attempt-time\">{{ attempt.timestamp }}</span>\n @if (!attempt.success) {\n <span class=\"attempt-error\">{{ attempt.errorMessage || 'Unknown error' }}</span>\n @if (attempt.validationErrorCount > 0) {\n <span class=\"error-count\">({{ attempt.validationErrorCount }} errors)</span>\n }\n }\n @if (attempt.outputLength) {\n <span class=\"output-length\">Output: {{ attempt.outputLength }} chars</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Validation Summary JSON -->\n @if (validationSummary) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Summary Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationSummary, 'json', 'Validation Summary')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationSummary\"\n name=\"formattedValidationSummary\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Validation Attempts JSON -->\n @if (record.ValidationAttempts) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Attempts (Raw JSON)</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationAttempts, 'json', 'Validation Attempts')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationAttempts\"\n name=\"formattedValidationAttempts\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <mj-accordion-panel [Expanded]=\"hierarchyExpanded\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Run Hierarchy\n @if (childRuns.length > 0) {\n <span class=\"panel-count\">({{ childRuns.length }} children)</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (parentRun) {\n <div class=\"parent-run-section\">\n <h4><i class=\"fa-solid fa-level-up-alt\"></i> Parent Run</h4>\n <div class=\"run-item parent\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', parentRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(parentRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Parent Run #{{ parentRun.ID.substring(0, 8) }}\n <span class=\"run-item-type\">{{ parentRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(parentRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(parentRun.TokensUsed) }}</span>\n <span><i class=\"fa-solid fa-calendar\"></i> {{ parentRun.RunAt | date:'short' }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (childRuns.length > 0) {\n <div class=\"child-runs-section\">\n <h4><i class=\"fa-solid fa-level-down-alt\"></i> Child Runs</h4>\n <div class=\"runs-list\">\n @for (childRun of childRuns; track childRun.ID) {\n <div class=\"run-item child\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', childRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(childRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Child Run #{{ childRun.ID.substring(0, 8) }}\n @if (childRun.ExecutionOrder !== null) {\n <span class=\"execution-order\">#{{ childRun.ExecutionOrder }}</span>\n }\n <span class=\"run-item-type\">{{ childRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span class=\"status-indicator\" [style.color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ childRun.Success ? 'Success' : childRun.ErrorMessage ? 'Failed' : 'Running' }}\n </span>\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(childRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(childRun.TokensUsed) }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Additional Details Panel -->\n <mj-accordion-panel [Expanded]=\"false\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\" title=\"View Agent\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ record.Agent || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n \n @if (record.RunType) {\n <div class=\"detail-field\">\n <label>Run Type</label>\n <div class=\"detail-value\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n \n @if (record.ResponseFormat) {\n <div class=\"detail-field\">\n <label>Response Format</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-code\"></i>\n {{ record.ResponseFormat }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Temperature</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Temperature === null || record.Temperature === undefined\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n {{ record.Temperature !== null && record.Temperature !== undefined ? record.Temperature : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopP === null || record.TopP === undefined\">\n <i class=\"fa-solid fa-percentage\"></i>\n {{ record.TopP !== null && record.TopP !== undefined ? record.TopP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top K</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopK === null || record.TopK === undefined\">\n <i class=\"fa-solid fa-list-ol\"></i>\n {{ record.TopK !== null && record.TopK !== undefined ? record.TopK : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Min P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.MinP === null || record.MinP === undefined\">\n <i class=\"fa-solid fa-filter\"></i>\n {{ record.MinP !== null && record.MinP !== undefined ? record.MinP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Frequency Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.FrequencyPenalty === null || record.FrequencyPenalty === undefined\">\n <i class=\"fa-solid fa-repeat\"></i>\n {{ record.FrequencyPenalty !== null && record.FrequencyPenalty !== undefined ? record.FrequencyPenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Presence Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.PresencePenalty === null || record.PresencePenalty === undefined\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n {{ record.PresencePenalty !== null && record.PresencePenalty !== undefined ? record.PresencePenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Seed</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Seed === null || record.Seed === undefined\">\n <i class=\"fa-solid fa-seedling\"></i>\n {{ record.Seed !== null && record.Seed !== undefined ? record.Seed : '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Stop Sequences</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.StopSequences\">\n <i class=\"fa-solid fa-stop-circle\"></i>\n {{ record.StopSequences || '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Assistant Prefill</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.AssistantPrefill\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ record.AssistantPrefill || '\u2014' }}\n </div>\n </div>\n\n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <mj-accordion-panel [Expanded]=\"modelSpecificExpanded\" (ExpandedChange)=\"onModelSpecificPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Specific Response Details\n <span class=\"panel-badge\">JSON</span>\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSpecificResponseDetails, 'json', 'Model Specific Response Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedModelSpecificResponseDetails\"\n name=\"formattedModelSpecificResponseDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <mj-accordion-panel [Expanded]=\"false\" (ExpandedChange)=\"onModelSelectionPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection &amp; Performance\n @if (record.CacheHit) {\n <span class=\"panel-badge success\">Cached</span>\n }\n @if (record.WasSelectedResult) {\n <span class=\"panel-badge success\">Selected</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n <!-- Model Selection Details -->\n <div class=\"detail-field\">\n <label>Status</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ record.Status || 'Unknown' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Selection Strategy</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-strategy\"></i>\n {{ record.SelectionStrategy || '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Model Power Rank</label>\n <div class=\"detail-value\" [class.null-value]=\"record.ModelPowerRank === null\">\n <i class=\"fa-solid fa-ranking-star\"></i>\n {{ record.ModelPowerRank !== null ? record.ModelPowerRank : '\u2014' }}\n </div>\n </div>\n \n <!-- Cache Information -->\n <div class=\"detail-field\">\n <label>Cache Hit</label>\n <div class=\"detail-value\">\n <i [class]=\"record.CacheHit ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.CacheHit ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.CacheKey) {\n <div class=\"detail-field full-width\">\n <label>Cache Key</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-key\"></i>\n <code>{{ record.CacheKey }}</code>\n </div>\n </div>\n }\n \n <!-- Judge Information -->\n @if (record.JudgeID) {\n <div class=\"detail-field\">\n <label>Judge Prompt</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', record.JudgeID)\" title=\"View Judge Prompt\">\n <i class=\"fa-solid fa-gavel\"></i>\n {{ record.Judge || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.JudgeScore !== null) {\n <div class=\"detail-field\">\n <label>Judge Score</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-star\"></i>\n {{ record.JudgeScore }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Was Selected Result</label>\n <div class=\"detail-value\">\n <i [class]=\"record.WasSelectedResult ? 'fa-solid fa-trophy' : 'fa-solid fa-times'\"></i>\n {{ record.WasSelectedResult ? 'Yes' : 'No' }}\n </div>\n </div>\n \n <!-- Performance Metrics -->\n <div class=\"detail-field\">\n <label>Streaming Enabled</label>\n <div class=\"detail-value\">\n <i [class]=\"record.StreamingEnabled ? 'fa-solid fa-stream' : 'fa-solid fa-ban'\"></i>\n {{ record.StreamingEnabled ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.FirstTokenTime !== null) {\n <div class=\"detail-field\">\n <label>First Token Time</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ record.FirstTokenTime }} ms\n </div>\n </div>\n }\n \n @if (record.Cancelled) {\n <div class=\"detail-field\">\n <label>Cancelled</label>\n <div class=\"detail-value error\">\n <i class=\"fa-solid fa-ban\"></i>\n Yes\n </div>\n </div>\n \n @if (record.CancellationReason) {\n <div class=\"detail-field full-width\">\n <label>Cancellation Reason</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ record.CancellationReason }}\n </div>\n </div>\n }\n }\n </div>\n \n <!-- Model Selection JSON -->\n @if (record.ModelSelection) {\n <div class=\"model-selection-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Model Selection Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSelection, 'json', 'Model Selection')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedModelSelection\"\n name=\"formattedModelSelection\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Error Details JSON -->\n @if (record.ErrorDetails) {\n <div class=\"error-details-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedErrorDetails\"\n name=\"formattedErrorDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Full-screen overlay -->\n @if (FullScreenContent) {\n <div class=\"fullscreen-overlay\" (click)=\"closeFullScreen()\">\n <div class=\"fullscreen-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"fullscreen-header\">\n <span class=\"fullscreen-title\">\n <i class=\"fa-solid fa-expand\"></i>\n {{ FullScreenTitle }}\n </span>\n <div class=\"fullscreen-actions\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(FullScreenContent, FullScreenTitle)\"\n title=\"Copy content\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"closeFullScreen()\"\n title=\"Close\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n </div>\n </div>\n <div class=\"fullscreen-body\">\n <mj-code-editor\n [value]=\"FullScreenContent\"\n [readonly]=\"true\"\n [language]=\"FullScreenLanguage\"\n style=\"height: 100%; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n }", styles: ["/* Host and Container Layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n/* Error Info Styles */\n.error-info {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details {\n margin-top: 12px;\n}\n\n.error-details h4 {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n/* Header Section */\n.prompt-run-header {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper i {\n font-size: 24px;\n}\n\n.run-info {\n flex: 1;\n min-width: 0;\n}\n\n.run-title {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n/* Shared meta-card style (Status, Execution, single Prompt) */\n.meta-card {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Status indicator dot */\n.status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n/* C3 Stacked Connector \u2014 Prompt Card */\n.prompt-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section i.prompt-icon {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section i {\n font-size: 0.75rem;\n}\n\n.c3-link-icon {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section:hover .c3-link-icon {\n opacity: 0.8;\n}\n\n/* C3 Model Card */\n.model-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name i {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions {\n display: flex;\n gap: 8px;\n}\n\n/* Metrics Bar */\n.metrics-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item > i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n/* Panels */\n.form-content {\n padding: 16px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n/* Nested Sub-Panel Styles */\n.sub-panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content {\n padding: 0;\n}\n\n/* Nested accordion panel styles */\n.nested-panels mj-accordion-panel {\n margin-bottom: 8px;\n}\n\n/* Ensure chat message viewer takes appropriate height */\n.sub-panel-content mj-chat-message-viewer {\n display: block;\n min-height: 200px;\n max-height: 750px; /* Increased by 50% from 500px */\n height: auto;\n overflow: hidden;\n}\n\n/* Different colors for sub-expansion panels */\n.sub-expansion-panel {\n margin-bottom: 8px;\n}\n\n/* Sub-expansion panel styles */\n.sub-expansion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* JSON Editor Container */\n.json-editor-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message i {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Loading State */\n.loading-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Metrics Grid */\n.metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n/* Additional Metrics */\n.additional-metrics {\n padding-top: 16px;\n}\n\n.metric-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row .metric-value.link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row .metric-value.link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n/* Hierarchy Section */\n.parent-run-section,\n.child-runs-section {\n margin-bottom: 24px;\n}\n\n.parent-run-section:last-child,\n.child-runs-section:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section h4,\n.child-runs-section h4 {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta span {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator {\n font-weight: 500;\n}\n\n.run-item > i:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n/* Detail Fields Grid */\n.detail-fields-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field label {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable {\n cursor: pointer;\n}\n\n.detail-value.clickable:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable i:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable:hover i:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value i:first-child {\n opacity: 0.5;\n}\n\n/* Accordion Panel Overrides */\nmj-accordion-panel {\n display: block;\n}\n\n/* Validation Panel Styles */\n.validation-summary {\n margin-bottom: 24px;\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header h4 {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small .metric-label {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small .metric-value {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error,\n.common-error {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error h5,\n.common-error h5 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error p,\n.common-error p {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n/* Retry Timeline */\n.retry-timeline {\n margin-bottom: 24px;\n}\n\n.retry-timeline h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat i {\n font-size: 1.1em;\n}\n\n/* Validation Attempts */\n.validation-attempts {\n margin-bottom: 24px;\n}\n\n.validation-attempts h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success .attempt-number {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed .attempt-number {\n color: var(--mj-status-error);\n}\n\n.attempt-details {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time {\n color: var(--mj-text-muted);\n}\n\n.attempt-error {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* Validation JSON */\n.validation-json {\n margin-top: 24px;\n}\n\n.validation-json h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Panel badge styles */\n.panel-badge.success {\n background: var(--mj-status-success);\n color: white;\n}\n\n/* Full-screen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title i {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body mj-code-editor {\n display: block;\n height: 100%;\n}\n"] }]
2472
+ args: [{ standalone: false, selector: 'mj-ai-prompt-run-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <!-- Status Card -->\n <div class=\"meta-card status-card\">\n <div class=\"c3-card-label\">Status</div>\n <div class=\"meta-card-body\">\n <span class=\"status-indicator\" [style.background-color]=\"getStatusColor()\"></span>\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n {{ getStatusText() }}\n </div>\n </div>\n\n <!-- Execution Card -->\n @if (record.RunType) {\n <div class=\"meta-card execution-card\">\n <div class=\"c3-card-label\">Execution</div>\n <div class=\"meta-card-body\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\" [style.color]=\"getRunTypeColor(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n\n <!-- Prompt Card -->\n @if (prompt) {\n @if (record.ChildPromptID) {\n <!-- C3 Stacked Connector: child prompt prominent, parent nested -->\n <div class=\"prompt-card-c3\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"c3-child-section\" (click)=\"navigateToEntity('MJ: AI Prompts', record.ChildPromptID)\" title=\"View Agent Prompt\">\n <i class=\"fa-solid fa-comment prompt-icon\"></i>\n {{ record.ChildPrompt }}\n </div>\n <div class=\"c3-divider\">\n <span class=\"c3-line\"></span>\n <span class=\"c3-divider-label\">wrapped by</span>\n <span class=\"c3-line\"></span>\n </div>\n <div class=\"c3-parent-section\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View System Prompt\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ prompt.Name }}\n <i class=\"fa-solid fa-arrow-up-right-from-square c3-link-icon\"></i>\n </div>\n </div>\n } @else {\n <!-- Single prompt (no child) \u2014 same card style -->\n <div class=\"meta-card prompt-single-card\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"meta-card-body clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ prompt.Name }}\n </div>\n </div>\n }\n }\n\n <!-- Model Card -->\n @if (model) {\n <div class=\"model-card-c3\">\n <div class=\"c3-card-label\">Model</div>\n <div class=\"c3-card-body\" (click)=\"navigateToEntity('MJ: AI Models', model.ID)\" title=\"View Model\">\n <span class=\"c3-model-name\"><i class=\"fa-solid fa-microchip\"></i> {{ model.Name }}</span>\n @if (record.Vendor) {\n <span class=\"c3-vendor-name\">{{ record.Vendor }}</span>\n }\n </div>\n </div>\n }\n @if (record.RerunFromPromptRunID) {\n <span class=\"original-run\" title=\"View Original Run\">\n <i class=\"fa-solid fa-level-up-alt\"></i>\n <a (click)=\"navigateToOriginalRun()\" class=\"original-link\">Original Run</a>\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n @if (record.ConfigurationID) {\n <!-- Configuration Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-cog\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Configuration</div>\n <div class=\"metric-value\">\n <a href=\"javascript:void(0)\" class=\"config-link\" (click)=\"navigateToEntity('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n @if (record.Temperature !== null && record.Temperature !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Temperature</div>\n <div class=\"metric-value\">{{ record.Temperature }}</div>\n </div>\n </div>\n }\n @if (record.TopP !== null && record.TopP !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-percentage\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top P</div>\n <div class=\"metric-value\">{{ record.TopP }}</div>\n </div>\n </div>\n }\n @if (record.TopK !== null && record.TopK !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-list-ol\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top K</div>\n <div class=\"metric-value\">{{ record.TopK }}</div>\n </div>\n </div>\n }\n @if (record.EffortLevel !== null && record.EffortLevel !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Effort Level</div>\n <div class=\"metric-value\">{{ record.EffortLevel }}</div>\n </div>\n </div>\n }\n @if (record.ResponseFormat) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-code\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Response Format</div>\n <div class=\"metric-value\">{{ record.ResponseFormat }}</div>\n </div>\n </div>\n }\n </div>\n \n <!-- Execution Metrics Bar (always show when configuration exists) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\" title=\"Total tokens the model processed, including cached input\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(TotalTokensProcessed) }}</div>\n </div>\n </div>\n @if (record.TokensCacheRead) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cached</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensCacheRead) }}</div>\n </div>\n </div>\n }\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n } @else {\n <!-- Execution Metrics Bar (original behavior when no configuration) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\" title=\"Total tokens the model processed, including cached input\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(TotalTokensProcessed) }}</div>\n </div>\n </div>\n @if (record.TokensCacheRead) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cached</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensCacheRead) }}</div>\n </div>\n </div>\n }\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n\n <!-- Input Panel with nested sub-panels -->\n <mj-accordion-panel [Expanded]=\"inputExpanded\" (ExpandedChange)=\"onInputPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <!-- Nested expansion panels for sub-sections -->\n <div class=\"nested-panels\">\n <!-- Messages Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"messagesExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Messages\n @if (chatMessages.length > 0) {\n <span class=\"panel-count\">({{ chatMessages.length }})</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (isParsingMessages || isLoadingRelatedData) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading messages...</p>\n </div>\n } @else if (chatMessages.length > 0) {\n <mj-chat-message-viewer \n [messages]=\"chatMessages\">\n </mj-chat-message-viewer>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No chat messages found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Data Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"dataExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-database\"></i>\n Data\n @if (inputData) {\n <span class=\"panel-badge\">Object</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (inputData && formattedData) {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedData, 'json', 'Data')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedData\"\n name=\"formattedData\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No data object found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Raw Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"rawExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Raw\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedMessages, 'json', 'Raw Messages')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessages\"\n name=\"formattedMessages\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n \n <!-- Result Panel -->\n <mj-accordion-panel [Expanded]=\"resultExpanded\" (ExpandedChange)=\"onResultPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedResult, 'json', 'Result')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedResult\"\n name=\"formattedResult\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (!record.ErrorMessage) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No result data recorded</p>\n @if (record.CompletedAt && (record.Status === 'Failed' || record.Success === false)) {\n <div class=\"error-info\">\n @if (record.Status) {\n <p class=\"finish-reason\">\n <strong>Status:</strong> {{ record.Status }}\n </p>\n }\n @if (formattedErrorDetails) {\n <div class=\"error-details\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor\n [ngModel]=\"formattedErrorDetails\"\n [disabled]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (!formattedErrorDetails) {\n <p class=\"error-hint\">\n The prompt execution failed but no additional error information is available.\n </p>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Token Usage & Metrics Panel -->\n <mj-accordion-panel [Expanded]=\"metricsExpanded\" (ExpandedChange)=\"onMetricsPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage &amp; Metrics\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\" title=\"Full input the model processed \u2014 uncached (new) prompt tokens plus any cached tokens\">{{ formatTokens(FullPromptTokens) }}</div>\n @if (CachedTokens > 0) {\n <div class=\"metric-rollup\">\n <span>incl. {{ formatTokens(CachedTokens) }} cached</span>\n </div>\n }\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\" title=\"Prompt + completion + cached tokens \u2014 the full amount the model processed\">{{ formatTokens(TotalTokensProcessed) }}</div>\n @if (CachedTokens > 0) {\n <div class=\"metric-rollup\">\n <span>incl. {{ formatTokens(CachedTokens) }} cached</span>\n </div>\n }\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Net rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n\n <!-- Prompt-cache tokens (provider cache reads = hits, writes = cache creation).\n Only rendered when the provider reported cache usage. -->\n @if (record.TokensCacheRead != null || record.TokensCacheWrite != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-bolt\"></i>\n <h4>Cache Read</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCacheRead) }}</div>\n @if (record.TokensCacheWrite) {\n <div class=\"metric-rollup\">\n <span>Write: {{ formatTokens(record.TokensCacheWrite) }}</span>\n </div>\n }\n @if (record.TokensCacheRead || record.TokensCacheWrite) {\n <div class=\"metric-rollup\">\n <span>{{ CacheHitRatePct | number:'1.0-0' }}% hit rate</span>\n </div>\n }\n </div>\n }\n\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n \n <!-- Timing Metrics -->\n @if (record.QueueTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-hourglass-start\"></i>\n <h4>Queue Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.QueueTime) }}</div>\n </div>\n }\n \n @if (record.PromptTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>Prompt Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.PromptTime) }}</div>\n </div>\n }\n \n @if (record.CompletionTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <h4>Completion Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.CompletionTime) }}</div>\n </div>\n }\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <mj-accordion-panel [Expanded]=\"validationExpanded\" (ExpandedChange)=\"onValidationPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation &amp; Retries\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <span class=\"panel-count\">({{ record.ValidationAttemptCount }} attempts)</span>\n }\n @if (record.FinalValidationPassed) {\n <span class=\"panel-badge success\">Passed</span>\n } @else if (record.FinalValidationPassed === false) {\n <span class=\"panel-badge error\">Failed</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <!-- Validation Summary -->\n <div class=\"validation-summary\">\n <div class=\"summary-header\">\n <h4>Validation Summary</h4>\n <div class=\"validation-status\" [class.success]=\"record.FinalValidationPassed === true\" [class.failed]=\"record.FinalValidationPassed === false\">\n <i [class]=\"record.FinalValidationPassed === true ? 'fa-solid fa-check-circle' : (record.FinalValidationPassed === false ? 'fa-solid fa-times-circle' : 'fa-solid fa-hourglass-half')\"></i>\n {{ record.FinalValidationPassed === true ? 'Validation Passed' : (record.FinalValidationPassed === false ? 'Validation Failed' : 'Validation Pending') }}\n </div>\n </div>\n \n <div class=\"validation-metrics\">\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Total Attempts</div>\n <div class=\"metric-value\">{{ record.ValidationAttemptCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Successful</div>\n <div class=\"metric-value\">{{ record.SuccessfulValidationCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Behavior</div>\n <div class=\"metric-value\">{{ record.ValidationBehavior || 'Not set' }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Retry Strategy</div>\n <div class=\"metric-value\">{{ record.RetryStrategy || 'Not set' }}</div>\n </div>\n </div>\n \n @if (record.FinalValidationError) {\n <div class=\"validation-error\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Final Validation Error</h5>\n <p>{{ record.FinalValidationError }}</p>\n @if (record && record.ValidationErrorCount && record.ValidationErrorCount > 0) {\n <span class=\"error-count\">{{ record.ValidationErrorCount }} validation errors</span>\n }\n </div>\n }\n \n @if (record.CommonValidationError && record.CommonValidationError !== record.FinalValidationError) {\n <div class=\"common-error\">\n <h5><i class=\"fa-solid fa-repeat\"></i> Most Common Error</h5>\n <p>{{ record.CommonValidationError }}</p>\n </div>\n }\n </div>\n \n <!-- Retry Timeline -->\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <div class=\"retry-timeline\">\n <h4>Retry Timeline</h4>\n <div class=\"timeline-info\">\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>First Attempt: {{ record.FirstAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <span>Last Attempt: {{ record.LastAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span>Total Retry Duration: {{ formatDuration(record.TotalRetryDurationMS) }}</span>\n </div>\n </div>\n </div>\n }\n \n <!-- Validation Attempts Details -->\n @if (validationAttempts && validationAttempts.length > 0) {\n <div class=\"validation-attempts\">\n <h4>Validation Attempts</h4>\n <div class=\"attempts-list\">\n @for (attempt of validationAttempts; track attempt.attemptNumber) {\n <div class=\"attempt-item\" [class.success]=\"attempt.success\" [class.failed]=\"!attempt.success\">\n <div class=\"attempt-number\">\n <i [class]=\"attempt.success ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n Attempt #{{ attempt.attemptNumber }}\n </div>\n <div class=\"attempt-details\">\n <span class=\"attempt-time\">{{ attempt.timestamp }}</span>\n @if (!attempt.success) {\n <span class=\"attempt-error\">{{ attempt.errorMessage || 'Unknown error' }}</span>\n @if (attempt.validationErrorCount > 0) {\n <span class=\"error-count\">({{ attempt.validationErrorCount }} errors)</span>\n }\n }\n @if (attempt.outputLength) {\n <span class=\"output-length\">Output: {{ attempt.outputLength }} chars</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Validation Summary JSON -->\n @if (validationSummary) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Summary Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationSummary, 'json', 'Validation Summary')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationSummary\"\n name=\"formattedValidationSummary\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Validation Attempts JSON -->\n @if (record.ValidationAttempts) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Attempts (Raw JSON)</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedValidationAttempts, 'json', 'Validation Attempts')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedValidationAttempts\"\n name=\"formattedValidationAttempts\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <mj-accordion-panel [Expanded]=\"hierarchyExpanded\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Run Hierarchy\n @if (childRuns.length > 0) {\n <span class=\"panel-count\">({{ childRuns.length }} children)</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (parentRun) {\n <div class=\"parent-run-section\">\n <h4><i class=\"fa-solid fa-level-up-alt\"></i> Parent Run</h4>\n <div class=\"run-item parent\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', parentRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(parentRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Parent Run #{{ parentRun.ID.substring(0, 8) }}\n <span class=\"run-item-type\">{{ parentRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(parentRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(parentRun.TokensUsed) }}</span>\n <span><i class=\"fa-solid fa-calendar\"></i> {{ parentRun.RunAt | date:'short' }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (childRuns.length > 0) {\n <div class=\"child-runs-section\">\n <h4><i class=\"fa-solid fa-level-down-alt\"></i> Child Runs</h4>\n <div class=\"runs-list\">\n @for (childRun of childRuns; track childRun.ID) {\n <div class=\"run-item child\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', childRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(childRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Child Run #{{ childRun.ID.substring(0, 8) }}\n @if (childRun.ExecutionOrder !== null) {\n <span class=\"execution-order\">#{{ childRun.ExecutionOrder }}</span>\n }\n <span class=\"run-item-type\">{{ childRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span class=\"status-indicator\" [style.color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ childRun.Success ? 'Success' : childRun.ErrorMessage ? 'Failed' : 'Running' }}\n </span>\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(childRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(childRun.TokensUsed) }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Additional Details Panel -->\n <mj-accordion-panel [Expanded]=\"false\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\" title=\"View Agent\">\n <i class=\"fa-solid fa-robot\"></i>\n {{ record.Agent || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n \n @if (record.RunType) {\n <div class=\"detail-field\">\n <label>Run Type</label>\n <div class=\"detail-value\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n \n @if (record.ResponseFormat) {\n <div class=\"detail-field\">\n <label>Response Format</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-code\"></i>\n {{ record.ResponseFormat }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Temperature</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Temperature === null || record.Temperature === undefined\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n {{ record.Temperature !== null && record.Temperature !== undefined ? record.Temperature : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopP === null || record.TopP === undefined\">\n <i class=\"fa-solid fa-percentage\"></i>\n {{ record.TopP !== null && record.TopP !== undefined ? record.TopP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Top K</label>\n <div class=\"detail-value\" [class.null-value]=\"record.TopK === null || record.TopK === undefined\">\n <i class=\"fa-solid fa-list-ol\"></i>\n {{ record.TopK !== null && record.TopK !== undefined ? record.TopK : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Min P</label>\n <div class=\"detail-value\" [class.null-value]=\"record.MinP === null || record.MinP === undefined\">\n <i class=\"fa-solid fa-filter\"></i>\n {{ record.MinP !== null && record.MinP !== undefined ? record.MinP : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Frequency Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.FrequencyPenalty === null || record.FrequencyPenalty === undefined\">\n <i class=\"fa-solid fa-repeat\"></i>\n {{ record.FrequencyPenalty !== null && record.FrequencyPenalty !== undefined ? record.FrequencyPenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Presence Penalty</label>\n <div class=\"detail-value\" [class.null-value]=\"record.PresencePenalty === null || record.PresencePenalty === undefined\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n {{ record.PresencePenalty !== null && record.PresencePenalty !== undefined ? record.PresencePenalty : '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Seed</label>\n <div class=\"detail-value\" [class.null-value]=\"record.Seed === null || record.Seed === undefined\">\n <i class=\"fa-solid fa-seedling\"></i>\n {{ record.Seed !== null && record.Seed !== undefined ? record.Seed : '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Stop Sequences</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.StopSequences\">\n <i class=\"fa-solid fa-stop-circle\"></i>\n {{ record.StopSequences || '\u2014' }}\n </div>\n </div>\n\n <div class=\"detail-field\">\n <label>Assistant Prefill</label>\n <div class=\"detail-value\" [class.null-value]=\"!record.AssistantPrefill\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n {{ record.AssistantPrefill || '\u2014' }}\n </div>\n </div>\n\n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <mj-accordion-panel [Expanded]=\"modelSpecificExpanded\" (ExpandedChange)=\"onModelSpecificPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Specific Response Details\n <span class=\"panel-badge\">JSON</span>\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSpecificResponseDetails, 'json', 'Model Specific Response Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedModelSpecificResponseDetails\"\n name=\"formattedModelSpecificResponseDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <mj-accordion-panel [Expanded]=\"false\" (ExpandedChange)=\"onModelSelectionPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection &amp; Performance\n @if (record.CacheHit) {\n <span class=\"panel-badge success\">Cached</span>\n }\n @if (record.WasSelectedResult) {\n <span class=\"panel-badge success\">Selected</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n <!-- Model Selection Details -->\n <div class=\"detail-field\">\n <label>Status</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ record.Status || 'Unknown' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Selection Strategy</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-strategy\"></i>\n {{ record.SelectionStrategy || '\u2014' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Model Power Rank</label>\n <div class=\"detail-value\" [class.null-value]=\"record.ModelPowerRank === null\">\n <i class=\"fa-solid fa-ranking-star\"></i>\n {{ record.ModelPowerRank !== null ? record.ModelPowerRank : '\u2014' }}\n </div>\n </div>\n \n <!-- Cache Information -->\n <div class=\"detail-field\">\n <label>Cache Hit</label>\n <div class=\"detail-value\">\n <i [class]=\"record.CacheHit ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.CacheHit ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.CacheKey) {\n <div class=\"detail-field full-width\">\n <label>Cache Key</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-key\"></i>\n <code>{{ record.CacheKey }}</code>\n </div>\n </div>\n }\n \n <!-- Judge Information -->\n @if (record.JudgeID) {\n <div class=\"detail-field\">\n <label>Judge Prompt</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', record.JudgeID)\" title=\"View Judge Prompt\">\n <i class=\"fa-solid fa-gavel\"></i>\n {{ record.Judge || 'Unknown' }}\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (record.JudgeScore !== null) {\n <div class=\"detail-field\">\n <label>Judge Score</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-star\"></i>\n {{ record.JudgeScore }}\n </div>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Was Selected Result</label>\n <div class=\"detail-value\">\n <i [class]=\"record.WasSelectedResult ? 'fa-solid fa-trophy' : 'fa-solid fa-times'\"></i>\n {{ record.WasSelectedResult ? 'Yes' : 'No' }}\n </div>\n </div>\n \n <!-- Performance Metrics -->\n <div class=\"detail-field\">\n <label>Streaming Enabled</label>\n <div class=\"detail-value\">\n <i [class]=\"record.StreamingEnabled ? 'fa-solid fa-stream' : 'fa-solid fa-ban'\"></i>\n {{ record.StreamingEnabled ? 'Yes' : 'No' }}\n </div>\n </div>\n \n @if (record.FirstTokenTime !== null) {\n <div class=\"detail-field\">\n <label>First Token Time</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ record.FirstTokenTime }} ms\n </div>\n </div>\n }\n \n @if (record.Cancelled) {\n <div class=\"detail-field\">\n <label>Cancelled</label>\n <div class=\"detail-value error\">\n <i class=\"fa-solid fa-ban\"></i>\n Yes\n </div>\n </div>\n \n @if (record.CancellationReason) {\n <div class=\"detail-field full-width\">\n <label>Cancellation Reason</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{ record.CancellationReason }}\n </div>\n </div>\n }\n }\n </div>\n \n <!-- Model Selection JSON -->\n @if (record.ModelSelection) {\n <div class=\"model-selection-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Model Selection Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSelection, 'json', 'Model Selection')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedModelSelection\"\n name=\"formattedModelSelection\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n \n <!-- Error Details JSON -->\n @if (record.ErrorDetails) {\n <div class=\"error-details-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <div class=\"json-viewer-container\">\n <mj-code-editor\n [(ngModel)]=\"formattedErrorDetails\"\n name=\"formattedErrorDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n </div>\n </form>\n</mj-record-form-container>\n}\n\n<!-- Full-screen overlay -->\n @if (FullScreenContent) {\n <div class=\"fullscreen-overlay\" (click)=\"closeFullScreen()\">\n <div class=\"fullscreen-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"fullscreen-header\">\n <span class=\"fullscreen-title\">\n <i class=\"fa-solid fa-expand\"></i>\n {{ FullScreenTitle }}\n </span>\n <div class=\"fullscreen-actions\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(FullScreenContent, FullScreenTitle)\"\n title=\"Copy content\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"closeFullScreen()\"\n title=\"Close\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n </div>\n </div>\n <div class=\"fullscreen-body\">\n <mj-code-editor\n [value]=\"FullScreenContent\"\n [readonly]=\"true\"\n [language]=\"FullScreenLanguage\"\n style=\"height: 100%; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n }", styles: ["/* Host and Container Layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n/* Error Info Styles */\n.error-info {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details {\n margin-top: 12px;\n}\n\n.error-details h4 {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n/* Header Section */\n.prompt-run-header {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper i {\n font-size: 24px;\n}\n\n.run-info {\n flex: 1;\n min-width: 0;\n}\n\n.run-title {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n/* Shared meta-card style (Status, Execution, single Prompt) */\n.meta-card {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Status indicator dot */\n.status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n/* C3 Stacked Connector \u2014 Prompt Card */\n.prompt-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section i.prompt-icon {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section i {\n font-size: 0.75rem;\n}\n\n.c3-link-icon {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section:hover .c3-link-icon {\n opacity: 0.8;\n}\n\n/* C3 Model Card */\n.model-card-c3 {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name i {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions {\n display: flex;\n gap: 8px;\n}\n\n/* Metrics Bar */\n.metrics-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item > i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n/* Panels */\n.form-content {\n padding: 16px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n/* Nested Sub-Panel Styles */\n.sub-panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content {\n padding: 0;\n}\n\n/* Nested accordion panel styles */\n.nested-panels mj-accordion-panel {\n margin-bottom: 8px;\n}\n\n/* Ensure chat message viewer takes appropriate height */\n.sub-panel-content mj-chat-message-viewer {\n display: block;\n min-height: 200px;\n max-height: 750px; /* Increased by 50% from 500px */\n height: auto;\n overflow: hidden;\n}\n\n/* Different colors for sub-expansion panels */\n.sub-expansion-panel {\n margin-bottom: 8px;\n}\n\n/* Sub-expansion panel styles */\n.sub-expansion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n/* JSON Editor Container */\n.json-editor-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n/* Error Message */\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message i {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content h4 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content p {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Loading State */\n.loading-state {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state i {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state p {\n margin: 0;\n font-size: 1.1em;\n}\n\n/* Metrics Grid */\n.metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header h4 {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n/* Additional Metrics */\n.additional-metrics {\n padding-top: 16px;\n}\n\n.metric-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row:last-child {\n border-bottom: none;\n}\n\n.metric-row .metric-label {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row .metric-value {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row .metric-value.link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row .metric-value.link:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n/* Hierarchy Section */\n.parent-run-section,\n.child-runs-section {\n margin-bottom: 24px;\n}\n\n.parent-run-section:last-child,\n.child-runs-section:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section h4,\n.child-runs-section h4 {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta span {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator {\n font-weight: 500;\n}\n\n.run-item > i:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n/* Detail Fields Grid */\n.detail-fields-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field label {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value i:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable {\n cursor: pointer;\n}\n\n.detail-value.clickable:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable i:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable:hover i:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value i:first-child {\n opacity: 0.5;\n}\n\n/* Accordion Panel Overrides */\nmj-accordion-panel {\n display: block;\n}\n\n/* Validation Panel Styles */\n.validation-summary {\n margin-bottom: 24px;\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header h4 {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small .metric-label {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small .metric-value {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error,\n.common-error {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error h5,\n.common-error h5 {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error p,\n.common-error p {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n/* Retry Timeline */\n.retry-timeline {\n margin-bottom: 24px;\n}\n\n.retry-timeline h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat i {\n font-size: 1.1em;\n}\n\n/* Validation Attempts */\n.validation-attempts {\n margin-bottom: 24px;\n}\n\n.validation-attempts h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success .attempt-number {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed .attempt-number {\n color: var(--mj-status-error);\n}\n\n.attempt-details {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time {\n color: var(--mj-text-muted);\n}\n\n.attempt-error {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* Validation JSON */\n.validation-json {\n margin-top: 24px;\n}\n\n.validation-json h4 {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Panel badge styles */\n.panel-badge.success {\n background: var(--mj-status-success);\n color: white;\n}\n\n/* Full-screen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title i {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body mj-code-editor {\n display: block;\n height: 100%;\n}\n"] }]
2449
2473
  }], null, null); })();
2450
2474
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIPromptRunFormComponentExtended, { className: "MJAIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 21 }); })();
2451
2475
  //# sourceMappingURL=ai-prompt-run-form.component.js.map