@memberjunction/ng-core-entity-forms 5.38.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 (154) 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 +17 -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 +695 -557
  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/Queries/query-form.component.d.ts +13 -4
  13. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  14. package/dist/lib/custom/Queries/query-form.component.js +374 -326
  15. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  16. package/dist/lib/custom/Tests/test-form.component.js +2 -3
  17. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  18. package/dist/lib/custom/Tests/test-suite-form.component.js +1 -2
  19. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  20. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +24 -0
  21. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  22. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +411 -234
  23. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  24. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +2 -2
  25. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
  26. package/dist/lib/custom/custom-forms.module.d.ts +39 -41
  27. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  28. package/dist/lib/custom/custom-forms.module.js +8 -9
  29. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  30. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +75 -69
  31. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  32. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +3 -3
  33. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  34. package/dist/lib/generated/Entities/MJAIModelCost/mjaimodelcost.form.component.js +10 -6
  35. package/dist/lib/generated/Entities/MJAIModelCost/mjaimodelcost.form.component.js.map +1 -1
  36. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +3 -3
  37. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  38. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  39. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +65 -39
  40. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  41. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.d.ts.map +1 -1
  42. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js +29 -21
  43. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js.map +1 -1
  44. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.d.ts.map +1 -1
  45. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js +47 -11
  46. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js.map +1 -1
  47. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.d.ts.map +1 -1
  48. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js +24 -6
  49. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js.map +1 -1
  50. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.d.ts.map +1 -1
  51. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js +27 -9
  52. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js.map +1 -1
  53. package/dist/lib/generated/Entities/MJClusterAnalysis/mjclusteranalysis.form.component.d.ts +10 -0
  54. package/dist/lib/generated/Entities/MJClusterAnalysis/mjclusteranalysis.form.component.d.ts.map +1 -0
  55. package/dist/lib/generated/Entities/MJClusterAnalysis/mjclusteranalysis.form.component.js +93 -0
  56. package/dist/lib/generated/Entities/MJClusterAnalysis/mjclusteranalysis.form.component.js.map +1 -0
  57. package/dist/lib/generated/Entities/MJClusterAnalysisCluster/mjclusteranalysiscluster.form.component.d.ts +10 -0
  58. package/dist/lib/generated/Entities/MJClusterAnalysisCluster/mjclusteranalysiscluster.form.component.d.ts.map +1 -0
  59. package/dist/lib/generated/Entities/MJClusterAnalysisCluster/mjclusteranalysiscluster.form.component.js +66 -0
  60. package/dist/lib/generated/Entities/MJClusterAnalysisCluster/mjclusteranalysiscluster.form.component.js.map +1 -0
  61. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.d.ts.map +1 -1
  62. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js +27 -9
  63. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js.map +1 -1
  64. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.d.ts.map +1 -1
  65. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js +13 -3
  66. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js.map +1 -1
  67. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
  68. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +29 -11
  69. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  70. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  71. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +100 -64
  72. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  73. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.d.ts.map +1 -1
  74. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +58 -24
  75. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +10 -8
  77. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -1
  78. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.d.ts +10 -0
  79. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.d.ts.map +1 -0
  80. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.js +173 -0
  81. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.js.map +1 -0
  82. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedDomain/mjmagiclinkinvitealloweddomain.form.component.d.ts +10 -0
  83. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedDomain/mjmagiclinkinvitealloweddomain.form.component.d.ts.map +1 -0
  84. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedDomain/mjmagiclinkinvitealloweddomain.form.component.js +58 -0
  85. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedDomain/mjmagiclinkinvitealloweddomain.form.component.js.map +1 -0
  86. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedPath/mjmagiclinkinviteallowedpath.form.component.d.ts +10 -0
  87. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedPath/mjmagiclinkinviteallowedpath.form.component.d.ts.map +1 -0
  88. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedPath/mjmagiclinkinviteallowedpath.form.component.js +58 -0
  89. package/dist/lib/generated/Entities/MJMagicLinkInviteAllowedPath/mjmagiclinkinviteallowedpath.form.component.js.map +1 -0
  90. package/dist/lib/generated/Entities/MJMagicLinkInviteApplication/mjmagiclinkinviteapplication.form.component.d.ts +10 -0
  91. package/dist/lib/generated/Entities/MJMagicLinkInviteApplication/mjmagiclinkinviteapplication.form.component.d.ts.map +1 -0
  92. package/dist/lib/generated/Entities/MJMagicLinkInviteApplication/mjmagiclinkinviteapplication.form.component.js +58 -0
  93. package/dist/lib/generated/Entities/MJMagicLinkInviteApplication/mjmagiclinkinviteapplication.form.component.js.map +1 -0
  94. package/dist/lib/generated/Entities/MJMagicLinkInviteRole/mjmagiclinkinviterole.form.component.d.ts +10 -0
  95. package/dist/lib/generated/Entities/MJMagicLinkInviteRole/mjmagiclinkinviterole.form.component.d.ts.map +1 -0
  96. package/dist/lib/generated/Entities/MJMagicLinkInviteRole/mjmagiclinkinviterole.form.component.js +58 -0
  97. package/dist/lib/generated/Entities/MJMagicLinkInviteRole/mjmagiclinkinviterole.form.component.js.map +1 -0
  98. package/dist/lib/generated/Entities/MJMagicLinkRedemption/mjmagiclinkredemption.form.component.d.ts +10 -0
  99. package/dist/lib/generated/Entities/MJMagicLinkRedemption/mjmagiclinkredemption.form.component.d.ts.map +1 -0
  100. package/dist/lib/generated/Entities/MJMagicLinkRedemption/mjmagiclinkredemption.form.component.js +68 -0
  101. package/dist/lib/generated/Entities/MJMagicLinkRedemption/mjmagiclinkredemption.form.component.js.map +1 -0
  102. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.d.ts.map +1 -1
  103. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js +26 -8
  104. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js.map +1 -1
  105. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
  106. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +52 -16
  107. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js +27 -25
  109. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js.map +1 -1
  110. package/dist/lib/generated/Entities/MJSignatureAccount/mjsignatureaccount.form.component.d.ts +10 -0
  111. package/dist/lib/generated/Entities/MJSignatureAccount/mjsignatureaccount.form.component.d.ts.map +1 -0
  112. package/dist/lib/generated/Entities/MJSignatureAccount/mjsignatureaccount.form.component.js +115 -0
  113. package/dist/lib/generated/Entities/MJSignatureAccount/mjsignatureaccount.form.component.js.map +1 -0
  114. package/dist/lib/generated/Entities/MJSignatureProvider/mjsignatureprovider.form.component.d.ts +10 -0
  115. package/dist/lib/generated/Entities/MJSignatureProvider/mjsignatureprovider.form.component.d.ts.map +1 -0
  116. package/dist/lib/generated/Entities/MJSignatureProvider/mjsignatureprovider.form.component.js +101 -0
  117. package/dist/lib/generated/Entities/MJSignatureProvider/mjsignatureprovider.form.component.js.map +1 -0
  118. package/dist/lib/generated/Entities/MJSignatureRequest/mjsignaturerequest.form.component.d.ts +10 -0
  119. package/dist/lib/generated/Entities/MJSignatureRequest/mjsignaturerequest.form.component.d.ts.map +1 -0
  120. package/dist/lib/generated/Entities/MJSignatureRequest/mjsignaturerequest.form.component.js +153 -0
  121. package/dist/lib/generated/Entities/MJSignatureRequest/mjsignaturerequest.form.component.js.map +1 -0
  122. package/dist/lib/generated/Entities/MJSignatureRequestDocument/mjsignaturerequestdocument.form.component.d.ts +10 -0
  123. package/dist/lib/generated/Entities/MJSignatureRequestDocument/mjsignaturerequestdocument.form.component.d.ts.map +1 -0
  124. package/dist/lib/generated/Entities/MJSignatureRequestDocument/mjsignaturerequestdocument.form.component.js +78 -0
  125. package/dist/lib/generated/Entities/MJSignatureRequestDocument/mjsignaturerequestdocument.form.component.js.map +1 -0
  126. package/dist/lib/generated/Entities/MJSignatureRequestLog/mjsignaturerequestlog.form.component.d.ts +10 -0
  127. package/dist/lib/generated/Entities/MJSignatureRequestLog/mjsignaturerequestlog.form.component.d.ts.map +1 -0
  128. package/dist/lib/generated/Entities/MJSignatureRequestLog/mjsignaturerequestlog.form.component.js +84 -0
  129. package/dist/lib/generated/Entities/MJSignatureRequestLog/mjsignaturerequestlog.form.component.js.map +1 -0
  130. package/dist/lib/generated/Entities/MJSignatureRequestRecipient/mjsignaturerequestrecipient.form.component.d.ts +10 -0
  131. package/dist/lib/generated/Entities/MJSignatureRequestRecipient/mjsignaturerequestrecipient.form.component.d.ts.map +1 -0
  132. package/dist/lib/generated/Entities/MJSignatureRequestRecipient/mjsignaturerequestrecipient.form.component.js +88 -0
  133. package/dist/lib/generated/Entities/MJSignatureRequestRecipient/mjsignaturerequestrecipient.form.component.js.map +1 -0
  134. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js +8 -6
  135. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js.map +1 -1
  136. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  137. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +156 -102
  138. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  139. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.d.ts.map +1 -1
  140. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js +34 -26
  141. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js.map +1 -1
  142. package/dist/lib/generated/Entities/MJViewType/mjviewtype.form.component.d.ts +10 -0
  143. package/dist/lib/generated/Entities/MJViewType/mjviewtype.form.component.d.ts.map +1 -0
  144. package/dist/lib/generated/Entities/MJViewType/mjviewtype.form.component.js +91 -0
  145. package/dist/lib/generated/Entities/MJViewType/mjviewtype.form.component.js.map +1 -0
  146. package/dist/lib/generated/generated-forms.module.d.ts +265 -250
  147. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  148. package/dist/lib/generated/generated-forms.module.js +224 -179
  149. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  150. package/package.json +36 -36
  151. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts +0 -34
  152. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts.map +0 -1
  153. package/dist/lib/custom/Queries/query-category-dialog.component.js +0 -203
  154. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +0 -1
@@ -48,26 +48,26 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_20_Templat
48
48
  } }
49
49
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_0_Template(rf, ctx) { if (rf & 1) {
50
50
  const _r3 = i0.ɵɵgetCurrentView();
51
- i0.ɵɵelementStart(0, "div", 65)(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", 67);
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", 68);
56
+ i0.ɵɵelement(4, "i", 70);
57
57
  i0.ɵɵtext(5);
58
58
  i0.ɵɵelementEnd();
59
- i0.ɵɵelementStart(6, "div", 69);
60
- i0.ɵɵelement(7, "span", 70);
61
- i0.ɵɵelementStart(8, "span", 71);
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", 70);
64
+ i0.ɵɵelement(10, "span", 72);
65
65
  i0.ɵɵelementEnd();
66
- i0.ɵɵelementStart(11, "div", 72);
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", 73);
68
+ i0.ɵɵelement(12, "i", 75);
69
69
  i0.ɵɵtext(13);
70
- i0.ɵɵelement(14, "i", 74);
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", 66)(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", 75);
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", 76);
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", 65)(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_21_Conditional_1_Template, 6, 1, "div", 66);
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", 80);
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", 77);
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", 78);
117
- i0.ɵɵelement(5, "i", 79);
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", 80);
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", 81);
133
- i0.ɵɵelementStart(2, "a", 82);
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", 83);
140
- i0.ɵɵelement(1, "i", 50);
141
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
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", 86);
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", 83);
154
- i0.ɵɵelement(1, "i", 51);
155
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
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", 86);
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", 83);
168
- i0.ɵɵelement(1, "i", 52);
169
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
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", 86);
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", 83);
182
- i0.ɵɵelement(1, "i", 89);
183
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
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", 86);
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", 83);
196
- i0.ɵɵelement(1, "i", 90);
197
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
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", 86);
200
+ i0.ɵɵelementStart(5, "div", 88);
201
201
  i0.ɵɵtext(6);
202
202
  i0.ɵɵelementEnd()()();
203
203
  } if (rf & 2) {
@@ -205,13 +205,27 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
205
205
  i0.ɵɵadvance(6);
206
206
  i0.ɵɵtextInterpolate(ctx_r1.record.ResponseFormat);
207
207
  } }
208
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_36_Template(rf, ctx) { if (rf & 1) {
209
- i0.ɵɵelementStart(0, "div", 83);
210
- i0.ɵɵelement(1, "i", 91);
211
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
208
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_29_Template(rf, ctx) { if (rf & 1) {
209
+ i0.ɵɵelementStart(0, "div", 85);
210
+ i0.ɵɵelement(1, "i", 94);
211
+ i0.ɵɵelementStart(2, "div", 86)(3, "div", 87);
212
+ i0.ɵɵtext(4, "Cached");
213
+ i0.ɵɵelementEnd();
214
+ i0.ɵɵelementStart(5, "div", 88);
215
+ i0.ɵɵtext(6);
216
+ i0.ɵɵelementEnd()()();
217
+ } if (rf & 2) {
218
+ const ctx_r1 = i0.ɵɵnextContext(3);
219
+ i0.ɵɵadvance(6);
220
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCacheRead));
221
+ } }
222
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_37_Template(rf, ctx) { if (rf & 1) {
223
+ i0.ɵɵelementStart(0, "div", 85);
224
+ i0.ɵɵelement(1, "i", 95);
225
+ i0.ɵɵelementStart(2, "div", 86)(3, "div", 87);
212
226
  i0.ɵɵtext(4, "Started");
213
227
  i0.ɵɵelementEnd();
214
- i0.ɵɵelementStart(5, "div", 86);
228
+ i0.ɵɵelementStart(5, "div", 88);
215
229
  i0.ɵɵtext(6);
216
230
  i0.ɵɵpipe(7, "date");
217
231
  i0.ɵɵelementEnd()()();
@@ -222,46 +236,47 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditi
222
236
  } }
223
237
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template(rf, ctx) { if (rf & 1) {
224
238
  const _r7 = i0.ɵɵgetCurrentView();
225
- i0.ɵɵelementStart(0, "div", 25)(1, "div", 83);
226
- i0.ɵɵelement(2, "i", 73);
227
- i0.ɵɵelementStart(3, "div", 84)(4, "div", 85);
239
+ i0.ɵɵelementStart(0, "div", 25)(1, "div", 85);
240
+ i0.ɵɵelement(2, "i", 75);
241
+ i0.ɵɵelementStart(3, "div", 86)(4, "div", 87);
228
242
  i0.ɵɵtext(5, "Configuration");
229
243
  i0.ɵɵelementEnd();
230
- i0.ɵɵelementStart(6, "div", 86)(7, "a", 87);
244
+ i0.ɵɵelementStart(6, "div", 88)(7, "a", 89);
231
245
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template_a_click_7_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigateToEntity("MJ: AI Configurations", ctx_r1.record.ConfigurationID)); });
232
246
  i0.ɵɵtext(8);
233
247
  i0.ɵɵelementEnd()()()();
234
- i0.ɵɵconditionalCreate(9, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_9_Template, 7, 1, "div", 83);
235
- i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_10_Template, 7, 1, "div", 83);
236
- i0.ɵɵconditionalCreate(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_11_Template, 7, 1, "div", 83);
237
- i0.ɵɵconditionalCreate(12, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_12_Template, 7, 1, "div", 83);
238
- i0.ɵɵconditionalCreate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_13_Template, 7, 1, "div", 83);
239
- i0.ɵɵelementEnd();
240
- i0.ɵɵelementStart(14, "div", 25)(15, "div", 83);
241
- i0.ɵɵelement(16, "i", 88);
242
- i0.ɵɵelementStart(17, "div", 84)(18, "div", 85);
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);
243
257
  i0.ɵɵtext(19, "Duration");
244
258
  i0.ɵɵelementEnd();
245
- i0.ɵɵelementStart(20, "div", 86);
259
+ i0.ɵɵelementStart(20, "div", 88);
246
260
  i0.ɵɵtext(21);
247
261
  i0.ɵɵelementEnd()()();
248
- i0.ɵɵelementStart(22, "div", 83);
249
- i0.ɵɵelement(23, "i", 41);
250
- i0.ɵɵelementStart(24, "div", 84)(25, "div", 85);
262
+ i0.ɵɵelementStart(22, "div", 91);
263
+ i0.ɵɵelement(23, "i", 42);
264
+ i0.ɵɵelementStart(24, "div", 86)(25, "div", 87);
251
265
  i0.ɵɵtext(26, "Total Tokens");
252
266
  i0.ɵɵelementEnd();
253
- i0.ɵɵelementStart(27, "div", 86);
267
+ i0.ɵɵelementStart(27, "div", 88);
254
268
  i0.ɵɵtext(28);
255
269
  i0.ɵɵelementEnd()()();
256
- i0.ɵɵelementStart(29, "div", 83);
257
- i0.ɵɵelement(30, "i", 42);
258
- i0.ɵɵelementStart(31, "div", 84)(32, "div", 85);
259
- i0.ɵɵtext(33, "Cost");
260
- i0.ɵɵelementEnd();
261
- i0.ɵɵelementStart(34, "div", 86);
262
- i0.ɵɵtext(35);
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
+ i0.ɵɵtext(34, "Cost");
275
+ i0.ɵɵelementEnd();
276
+ i0.ɵɵelementStart(35, "div", 88);
277
+ i0.ɵɵtext(36);
263
278
  i0.ɵɵelementEnd()()();
264
- i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_36_Template, 8, 4, "div", 83);
279
+ i0.ɵɵconditionalCreate(37, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Conditional_37_Template, 8, 4, "div", 85);
265
280
  i0.ɵɵelementEnd();
266
281
  } if (rf & 2) {
267
282
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -280,19 +295,35 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Templat
280
295
  i0.ɵɵadvance(8);
281
296
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.ExecutionTimeMS));
282
297
  i0.ɵɵadvance(7);
283
- i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensUsed));
298
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.TotalTokensProcessed));
299
+ i0.ɵɵadvance();
300
+ i0.ɵɵconditional(ctx_r1.record.TokensCacheRead ? 29 : -1);
284
301
  i0.ɵɵadvance(7);
285
302
  i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
286
303
  i0.ɵɵadvance();
287
- i0.ɵɵconditional(ctx_r1.record.RunAt ? 36 : -1);
304
+ i0.ɵɵconditional(ctx_r1.record.RunAt ? 37 : -1);
288
305
  } }
289
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_22_Template(rf, ctx) { if (rf & 1) {
290
- i0.ɵɵelementStart(0, "div", 83);
291
- i0.ɵɵelement(1, "i", 91);
292
- i0.ɵɵelementStart(2, "div", 84)(3, "div", 85);
306
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_15_Template(rf, ctx) { if (rf & 1) {
307
+ i0.ɵɵelementStart(0, "div", 85);
308
+ i0.ɵɵelement(1, "i", 94);
309
+ i0.ɵɵelementStart(2, "div", 86)(3, "div", 87);
310
+ i0.ɵɵtext(4, "Cached");
311
+ i0.ɵɵelementEnd();
312
+ i0.ɵɵelementStart(5, "div", 88);
313
+ i0.ɵɵtext(6);
314
+ i0.ɵɵelementEnd()()();
315
+ } if (rf & 2) {
316
+ const ctx_r1 = i0.ɵɵnextContext(3);
317
+ i0.ɵɵadvance(6);
318
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCacheRead));
319
+ } }
320
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_23_Template(rf, ctx) { if (rf & 1) {
321
+ i0.ɵɵelementStart(0, "div", 85);
322
+ i0.ɵɵelement(1, "i", 95);
323
+ i0.ɵɵelementStart(2, "div", 86)(3, "div", 87);
293
324
  i0.ɵɵtext(4, "Started");
294
325
  i0.ɵɵelementEnd();
295
- i0.ɵɵelementStart(5, "div", 86);
326
+ i0.ɵɵelementStart(5, "div", 88);
296
327
  i0.ɵɵtext(6);
297
328
  i0.ɵɵpipe(7, "date");
298
329
  i0.ɵɵelementEnd()()();
@@ -302,53 +333,56 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditi
302
333
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 1, ctx_r1.record.RunAt, "short"));
303
334
  } }
304
335
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
305
- i0.ɵɵelementStart(0, "div", 25)(1, "div", 83);
306
- i0.ɵɵelement(2, "i", 88);
307
- i0.ɵɵelementStart(3, "div", 84)(4, "div", 85);
336
+ i0.ɵɵelementStart(0, "div", 25)(1, "div", 85);
337
+ i0.ɵɵelement(2, "i", 90);
338
+ i0.ɵɵelementStart(3, "div", 86)(4, "div", 87);
308
339
  i0.ɵɵtext(5, "Duration");
309
340
  i0.ɵɵelementEnd();
310
- i0.ɵɵelementStart(6, "div", 86);
341
+ i0.ɵɵelementStart(6, "div", 88);
311
342
  i0.ɵɵtext(7);
312
343
  i0.ɵɵelementEnd()()();
313
- i0.ɵɵelementStart(8, "div", 83);
314
- i0.ɵɵelement(9, "i", 41);
315
- i0.ɵɵelementStart(10, "div", 84)(11, "div", 85);
344
+ i0.ɵɵelementStart(8, "div", 91);
345
+ i0.ɵɵelement(9, "i", 42);
346
+ i0.ɵɵelementStart(10, "div", 86)(11, "div", 87);
316
347
  i0.ɵɵtext(12, "Total Tokens");
317
348
  i0.ɵɵelementEnd();
318
- i0.ɵɵelementStart(13, "div", 86);
349
+ i0.ɵɵelementStart(13, "div", 88);
319
350
  i0.ɵɵtext(14);
320
351
  i0.ɵɵelementEnd()()();
321
- i0.ɵɵelementStart(15, "div", 83);
322
- i0.ɵɵelement(16, "i", 42);
323
- i0.ɵɵelementStart(17, "div", 84)(18, "div", 85);
324
- i0.ɵɵtext(19, "Cost");
325
- i0.ɵɵelementEnd();
326
- i0.ɵɵelementStart(20, "div", 86);
327
- i0.ɵɵtext(21);
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
+ i0.ɵɵtext(20, "Cost");
357
+ i0.ɵɵelementEnd();
358
+ i0.ɵɵelementStart(21, "div", 88);
359
+ i0.ɵɵtext(22);
328
360
  i0.ɵɵelementEnd()()();
329
- i0.ɵɵconditionalCreate(22, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_22_Template, 8, 4, "div", 83);
361
+ i0.ɵɵconditionalCreate(23, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Conditional_23_Template, 8, 4, "div", 85);
330
362
  i0.ɵɵelementEnd();
331
363
  } if (rf & 2) {
332
364
  const ctx_r1 = i0.ɵɵnextContext(2);
333
365
  i0.ɵɵadvance(7);
334
366
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.ExecutionTimeMS));
335
367
  i0.ɵɵadvance(7);
336
- i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensUsed));
368
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.TotalTokensProcessed));
369
+ i0.ɵɵadvance();
370
+ i0.ɵɵconditional(ctx_r1.record.TokensCacheRead ? 15 : -1);
337
371
  i0.ɵɵadvance(7);
338
372
  i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.TotalCost || ctx_r1.record.Cost));
339
373
  i0.ɵɵadvance();
340
- i0.ɵɵconditional(ctx_r1.record.RunAt ? 22 : -1);
374
+ i0.ɵɵconditional(ctx_r1.record.RunAt ? 23 : -1);
341
375
  } }
342
376
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template(rf, ctx) { if (rf & 1) {
343
- i0.ɵɵelementStart(0, "span", 94);
377
+ i0.ɵɵelementStart(0, "span", 98);
344
378
  i0.ɵɵtext(1, "JSON");
345
379
  i0.ɵɵelementEnd();
346
380
  } }
347
381
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Template(rf, ctx) { if (rf & 1) {
348
- i0.ɵɵelementStart(0, "span", 92);
349
- i0.ɵɵelement(1, "i", 93);
382
+ i0.ɵɵelementStart(0, "span", 96);
383
+ i0.ɵɵelement(1, "i", 97);
350
384
  i0.ɵɵtext(2, " Input ");
351
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template, 2, 0, "span", 94);
385
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Conditional_3_Template, 2, 0, "span", 98);
352
386
  i0.ɵɵelementEnd();
353
387
  } if (rf & 2) {
354
388
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -356,7 +390,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_34_Templat
356
390
  i0.ɵɵconditional(ctx_r1.record.Messages && ctx_r1.record.Messages.trim() !== "" ? 3 : -1);
357
391
  } }
358
392
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
359
- i0.ɵɵelementStart(0, "span", 107);
393
+ i0.ɵɵelementStart(0, "span", 111);
360
394
  i0.ɵɵtext(1);
361
395
  i0.ɵɵelementEnd();
362
396
  } if (rf & 2) {
@@ -365,10 +399,10 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
365
399
  i0.ɵɵtextInterpolate1("(", ctx_r1.chatMessages.length, ")");
366
400
  } }
367
401
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Template(rf, ctx) { if (rf & 1) {
368
- i0.ɵɵelementStart(0, "span", 105);
369
- i0.ɵɵelement(1, "i", 106);
402
+ i0.ɵɵelementStart(0, "span", 109);
403
+ i0.ɵɵelement(1, "i", 110);
370
404
  i0.ɵɵtext(2, " Messages ");
371
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template, 2, 1, "span", 107);
405
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Conditional_3_Template, 2, 1, "span", 111);
372
406
  i0.ɵɵelementEnd();
373
407
  } if (rf & 2) {
374
408
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -376,35 +410,35 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
376
410
  i0.ɵɵconditional(ctx_r1.chatMessages.length > 0 ? 3 : -1);
377
411
  } }
378
412
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template(rf, ctx) { if (rf & 1) {
379
- i0.ɵɵelementStart(0, "div", 97);
380
- i0.ɵɵelement(1, "i", 108);
413
+ i0.ɵɵelementStart(0, "div", 101);
414
+ i0.ɵɵelement(1, "i", 112);
381
415
  i0.ɵɵelementStart(2, "p");
382
416
  i0.ɵɵtext(3, "Loading messages...");
383
417
  i0.ɵɵelementEnd()();
384
418
  } }
385
419
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template(rf, ctx) { if (rf & 1) {
386
- i0.ɵɵelement(0, "mj-chat-message-viewer", 98);
420
+ i0.ɵɵelement(0, "mj-chat-message-viewer", 102);
387
421
  } if (rf & 2) {
388
422
  const ctx_r1 = i0.ɵɵnextContext(3);
389
423
  i0.ɵɵproperty("messages", ctx_r1.chatMessages);
390
424
  } }
391
425
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_6_Template(rf, ctx) { if (rf & 1) {
392
426
  i0.ɵɵelementStart(0, "div", 31);
393
- i0.ɵɵelement(1, "i", 109);
427
+ i0.ɵɵelement(1, "i", 113);
394
428
  i0.ɵɵelementStart(2, "p");
395
429
  i0.ɵɵtext(3, "No chat messages found");
396
430
  i0.ɵɵelementEnd()();
397
431
  } }
398
432
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
399
- i0.ɵɵelementStart(0, "span", 94);
433
+ i0.ɵɵelementStart(0, "span", 98);
400
434
  i0.ɵɵtext(1, "Object");
401
435
  i0.ɵɵelementEnd();
402
436
  } }
403
437
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template(rf, ctx) { if (rf & 1) {
404
- i0.ɵɵelementStart(0, "span", 105);
405
- i0.ɵɵelement(1, "i", 110);
438
+ i0.ɵɵelementStart(0, "span", 109);
439
+ i0.ɵɵelement(1, "i", 114);
406
440
  i0.ɵɵtext(2, " Data ");
407
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template, 2, 0, "span", 94);
441
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Conditional_3_Template, 2, 0, "span", 98);
408
442
  i0.ɵɵelementEnd();
409
443
  } if (rf & 2) {
410
444
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -413,16 +447,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_temp
413
447
  } }
414
448
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template(rf, ctx) { if (rf & 1) {
415
449
  const _r9 = i0.ɵɵgetCurrentView();
416
- i0.ɵɵelementStart(0, "div", 33)(1, "div", 99)(2, "button", 100);
450
+ i0.ɵɵelementStart(0, "div", 33)(1, "div", 103)(2, "button", 104);
417
451
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedData, "Data")); });
418
- i0.ɵɵelement(3, "i", 101);
452
+ i0.ɵɵelement(3, "i", 105);
419
453
  i0.ɵɵtext(4, " Copy ");
420
454
  i0.ɵɵelementEnd();
421
- i0.ɵɵelementStart(5, "button", 102);
455
+ i0.ɵɵelementStart(5, "button", 106);
422
456
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedData, "json", "Data")); });
423
- i0.ɵɵelement(6, "i", 103);
457
+ i0.ɵɵelement(6, "i", 107);
424
458
  i0.ɵɵelementEnd()();
425
- i0.ɵɵelementStart(7, "mj-code-editor", 111);
459
+ i0.ɵɵelementStart(7, "mj-code-editor", 115);
426
460
  i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedData, $event) || (ctx_r1.formattedData = $event); return i0.ɵɵresetView($event); });
427
461
  i0.ɵɵelementEnd()();
428
462
  } if (rf & 2) {
@@ -433,41 +467,41 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditi
433
467
  } }
434
468
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template(rf, ctx) { if (rf & 1) {
435
469
  i0.ɵɵelementStart(0, "div", 31);
436
- i0.ɵɵelement(1, "i", 110);
470
+ i0.ɵɵelement(1, "i", 114);
437
471
  i0.ɵɵelementStart(2, "p");
438
472
  i0.ɵɵtext(3, "No data object found");
439
473
  i0.ɵɵelementEnd()();
440
474
  } }
441
475
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_13_Template(rf, ctx) { if (rf & 1) {
442
- i0.ɵɵelementStart(0, "span", 105);
443
- i0.ɵɵelement(1, "i", 90);
476
+ i0.ɵɵelementStart(0, "span", 109);
477
+ i0.ɵɵelement(1, "i", 93);
444
478
  i0.ɵɵtext(2, " Raw ");
445
479
  i0.ɵɵelementEnd();
446
480
  } }
447
481
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template(rf, ctx) { if (rf & 1) {
448
482
  const _r8 = i0.ɵɵgetCurrentView();
449
- i0.ɵɵelementStart(0, "div", 30)(1, "mj-accordion-panel", 95);
483
+ i0.ɵɵelementStart(0, "div", 30)(1, "mj-accordion-panel", 99);
450
484
  i0.ɵɵtemplate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_2_Template, 4, 1, "ng-template", 28);
451
- i0.ɵɵelementStart(3, "div", 96);
452
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_4_Template, 4, 0, "div", 97)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_5_Template, 1, 1, "mj-chat-message-viewer", 98)(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);
453
487
  i0.ɵɵelementEnd()();
454
- i0.ɵɵelementStart(7, "mj-accordion-panel", 95);
488
+ i0.ɵɵelementStart(7, "mj-accordion-panel", 99);
455
489
  i0.ɵɵtemplate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_8_Template, 4, 1, "ng-template", 28);
456
- i0.ɵɵelementStart(9, "div", 96);
490
+ i0.ɵɵelementStart(9, "div", 100);
457
491
  i0.ɵɵconditionalCreate(10, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_10_Template, 8, 4, "div", 33)(11, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Conditional_11_Template, 4, 0, "div", 31);
458
492
  i0.ɵɵelementEnd()();
459
- i0.ɵɵelementStart(12, "mj-accordion-panel", 95);
493
+ i0.ɵɵelementStart(12, "mj-accordion-panel", 99);
460
494
  i0.ɵɵtemplate(13, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_ng_template_13_Template, 3, 0, "ng-template", 28);
461
- i0.ɵɵelementStart(14, "div", 96)(15, "div", 33)(16, "div", 99)(17, "button", 100);
495
+ i0.ɵɵelementStart(14, "div", 100)(15, "div", 33)(16, "div", 103)(17, "button", 104);
462
496
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedMessages, "Messages")); });
463
- i0.ɵɵelement(18, "i", 101);
497
+ i0.ɵɵelement(18, "i", 105);
464
498
  i0.ɵɵtext(19, " Copy ");
465
499
  i0.ɵɵelementEnd();
466
- i0.ɵɵelementStart(20, "button", 102);
500
+ i0.ɵɵelementStart(20, "button", 106);
467
501
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedMessages, "json", "Raw Messages")); });
468
- i0.ɵɵelement(21, "i", 103);
502
+ i0.ɵɵelement(21, "i", 107);
469
503
  i0.ɵɵelementEnd()();
470
- i0.ɵɵelementStart(22, "mj-code-editor", 104);
504
+ i0.ɵɵelementStart(22, "mj-code-editor", 108);
471
505
  i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Template_mj_code_editor_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedMessages, $event) || (ctx_r1.formattedMessages = $event); return i0.ɵɵresetView($event); });
472
506
  i0.ɵɵelementEnd()()()()();
473
507
  } if (rf & 2) {
@@ -488,27 +522,27 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_36_Templat
488
522
  } }
489
523
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_37_Template(rf, ctx) { if (rf & 1) {
490
524
  i0.ɵɵelementStart(0, "div", 31);
491
- i0.ɵɵelement(1, "i", 109);
525
+ i0.ɵɵelement(1, "i", 113);
492
526
  i0.ɵɵelementStart(2, "p");
493
527
  i0.ɵɵtext(3, "No input messages recorded");
494
528
  i0.ɵɵelementEnd()();
495
529
  } }
496
530
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
497
- i0.ɵɵelementStart(0, "span", 94);
531
+ i0.ɵɵelementStart(0, "span", 98);
498
532
  i0.ɵɵtext(1, "JSON");
499
533
  i0.ɵɵelementEnd();
500
534
  } }
501
535
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template(rf, ctx) { if (rf & 1) {
502
- i0.ɵɵelementStart(0, "span", 113);
536
+ i0.ɵɵelementStart(0, "span", 117);
503
537
  i0.ɵɵtext(1, "Error");
504
538
  i0.ɵɵelementEnd();
505
539
  } }
506
540
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Template(rf, ctx) { if (rf & 1) {
507
- i0.ɵɵelementStart(0, "span", 92);
508
- i0.ɵɵelement(1, "i", 112);
541
+ i0.ɵɵelementStart(0, "span", 96);
542
+ i0.ɵɵelement(1, "i", 116);
509
543
  i0.ɵɵtext(2, " Result ");
510
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_3_Template, 2, 0, "span", 94);
511
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Conditional_4_Template, 2, 0, "span", 113);
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);
512
546
  i0.ɵɵelementEnd();
513
547
  } if (rf & 2) {
514
548
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -519,8 +553,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_39_Templat
519
553
  } }
520
554
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Template(rf, ctx) { if (rf & 1) {
521
555
  i0.ɵɵelementStart(0, "div", 32);
522
- i0.ɵɵelement(1, "i", 114);
523
- i0.ɵɵelementStart(2, "div", 115)(3, "h4");
556
+ i0.ɵɵelement(1, "i", 118);
557
+ i0.ɵɵelementStart(2, "div", 119)(3, "h4");
524
558
  i0.ɵɵtext(4, "Error Message");
525
559
  i0.ɵɵelementEnd();
526
560
  i0.ɵɵelementStart(5, "p");
@@ -533,16 +567,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_41_Templat
533
567
  } }
534
568
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template(rf, ctx) { if (rf & 1) {
535
569
  const _r10 = i0.ɵɵgetCurrentView();
536
- i0.ɵɵelementStart(0, "div", 33)(1, "div", 99)(2, "button", 100);
570
+ i0.ɵɵelementStart(0, "div", 33)(1, "div", 103)(2, "button", 104);
537
571
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyToClipboard(ctx_r1.formattedResult, "Result")); });
538
- i0.ɵɵelement(3, "i", 101);
572
+ i0.ɵɵelement(3, "i", 105);
539
573
  i0.ɵɵtext(4, " Copy ");
540
574
  i0.ɵɵelementEnd();
541
- i0.ɵɵelementStart(5, "button", 102);
575
+ i0.ɵɵelementStart(5, "button", 106);
542
576
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedResult, "json", "Result")); });
543
- i0.ɵɵelement(6, "i", 103);
577
+ i0.ɵɵelement(6, "i", 107);
544
578
  i0.ɵɵelementEnd()();
545
- i0.ɵɵelementStart(7, "mj-code-editor", 116);
579
+ i0.ɵɵelementStart(7, "mj-code-editor", 120);
546
580
  i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Template_mj_code_editor_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.formattedResult, $event) || (ctx_r1.formattedResult = $event); return i0.ɵɵresetView($event); });
547
581
  i0.ɵɵelementEnd()();
548
582
  } if (rf & 2) {
@@ -552,7 +586,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_42_Templat
552
586
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
553
587
  } }
554
588
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
555
- i0.ɵɵelementStart(0, "p", 119)(1, "strong");
589
+ i0.ɵɵelementStart(0, "p", 123)(1, "strong");
556
590
  i0.ɵɵtext(2, "Status:");
557
591
  i0.ɵɵelementEnd();
558
592
  i0.ɵɵtext(3);
@@ -564,14 +598,14 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
564
598
  } }
565
599
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
566
600
  const _r11 = i0.ɵɵgetCurrentView();
567
- i0.ɵɵelementStart(0, "div", 120)(1, "div", 99)(2, "h4", 122);
601
+ i0.ɵɵelementStart(0, "div", 124)(1, "div", 103)(2, "h4", 126);
568
602
  i0.ɵɵtext(3, "Error Details");
569
603
  i0.ɵɵelementEnd();
570
- i0.ɵɵelementStart(4, "button", 102);
604
+ i0.ɵɵelementStart(4, "button", 106);
571
605
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openFullScreen(ctx_r1.formattedErrorDetails, "json", "Error Details")); });
572
- i0.ɵɵelement(5, "i", 103);
606
+ i0.ɵɵelement(5, "i", 107);
573
607
  i0.ɵɵelementEnd()();
574
- i0.ɵɵelement(6, "mj-code-editor", 123);
608
+ i0.ɵɵelement(6, "mj-code-editor", 127);
575
609
  i0.ɵɵelementEnd();
576
610
  } if (rf & 2) {
577
611
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -579,15 +613,15 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
579
613
  i0.ɵɵproperty("ngModel", ctx_r1.formattedErrorDetails)("disabled", true)("language", "json")("lineWrapping", true);
580
614
  } }
581
615
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
582
- i0.ɵɵelementStart(0, "p", 121);
616
+ i0.ɵɵelementStart(0, "p", 125);
583
617
  i0.ɵɵtext(1, " The prompt execution failed but no additional error information is available. ");
584
618
  i0.ɵɵelementEnd();
585
619
  } }
586
620
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template(rf, ctx) { if (rf & 1) {
587
- i0.ɵɵelementStart(0, "div", 118);
588
- i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template, 4, 1, "p", 119);
589
- i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_2_Template, 7, 4, "div", 120);
590
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_3_Template, 2, 0, "p", 121);
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);
591
625
  i0.ɵɵelementEnd();
592
626
  } if (rf & 2) {
593
627
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -600,11 +634,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditi
600
634
  } }
601
635
  function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
602
636
  i0.ɵɵelementStart(0, "div", 31);
603
- i0.ɵɵelement(1, "i", 117);
637
+ i0.ɵɵelement(1, "i", 121);
604
638
  i0.ɵɵelementStart(2, "p");
605
639
  i0.ɵɵtext(3, "No result data recorded");
606
640
  i0.ɵɵelementEnd();
607
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template, 4, 3, "div", 118);
641
+ i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template, 4, 3, "div", 122);
608
642
  i0.ɵɵelementEnd();
609
643
  } if (rf & 2) {
610
644
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -612,8 +646,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_43_Templat
612
646
  i0.ɵɵconditional(ctx_r1.record.CompletedAt && (ctx_r1.record.Status === "Failed" || ctx_r1.record.Success === false) ? 4 : -1);
613
647
  } }
614
648
  function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_45_Template(rf, ctx) { if (rf & 1) {
615
- i0.ɵɵelementStart(0, "span", 92);
616
- i0.ɵɵelement(1, "i", 124);
649
+ i0.ɵɵelementStart(0, "span", 96);
650
+ i0.ɵɵelement(1, "i", 128);
617
651
  i0.ɵɵtext(2, " Token Usage & Metrics ");
618
652
  i0.ɵɵelementEnd();
619
653
  } }
@@ -621,12 +655,21 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_55_Templat
621
655
  i0.ɵɵelementStart(0, "div", 39)(1, "span");
622
656
  i0.ɵɵtext(2);
623
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()();
624
667
  } if (rf & 2) {
625
668
  const ctx_r1 = i0.ɵɵnextContext(2);
626
669
  i0.ɵɵadvance(2);
627
670
  i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensPromptRollup));
628
671
  } }
629
- 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) {
630
673
  i0.ɵɵelementStart(0, "div", 39)(1, "span");
631
674
  i0.ɵɵtext(2);
632
675
  i0.ɵɵelementEnd()();
@@ -635,16 +678,65 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_63_Templat
635
678
  i0.ɵɵadvance(2);
636
679
  i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensCompletionRollup));
637
680
  } }
638
- 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) {
639
682
  i0.ɵɵelementStart(0, "div", 39)(1, "span");
640
683
  i0.ɵɵtext(2);
641
684
  i0.ɵɵelementEnd()();
642
685
  } if (rf & 2) {
643
686
  const ctx_r1 = i0.ɵɵnextContext(2);
644
687
  i0.ɵɵadvance(2);
645
- i0.ɵɵtextInterpolate1("Rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup));
688
+ i0.ɵɵtextInterpolate1("incl. ", ctx_r1.formatTokens(ctx_r1.CachedTokens), " cached");
689
+ } }
690
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_73_Template(rf, ctx) { if (rf & 1) {
691
+ i0.ɵɵelementStart(0, "div", 39)(1, "span");
692
+ i0.ɵɵtext(2);
693
+ i0.ɵɵelementEnd()();
694
+ } if (rf & 2) {
695
+ const ctx_r1 = i0.ɵɵnextContext(2);
696
+ i0.ɵɵadvance(2);
697
+ i0.ɵɵtextInterpolate1("Net rollup: ", ctx_r1.formatTokens(ctx_r1.record.TokensUsedRollup));
698
+ } }
699
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Conditional_7_Template(rf, ctx) { if (rf & 1) {
700
+ i0.ɵɵelementStart(0, "div", 39)(1, "span");
701
+ i0.ɵɵtext(2);
702
+ i0.ɵɵelementEnd()();
703
+ } if (rf & 2) {
704
+ const ctx_r1 = i0.ɵɵnextContext(3);
705
+ i0.ɵɵadvance(2);
706
+ i0.ɵɵtextInterpolate1("Write: ", ctx_r1.formatTokens(ctx_r1.record.TokensCacheWrite));
646
707
  } }
647
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Template(rf, ctx) { if (rf & 1) {
708
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Conditional_8_Template(rf, ctx) { if (rf & 1) {
709
+ i0.ɵɵelementStart(0, "div", 39)(1, "span");
710
+ i0.ɵɵtext(2);
711
+ i0.ɵɵpipe(3, "number");
712
+ i0.ɵɵelementEnd()();
713
+ } if (rf & 2) {
714
+ const ctx_r1 = i0.ɵɵnextContext(3);
715
+ i0.ɵɵadvance(2);
716
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(3, 1, ctx_r1.CacheHitRatePct, "1.0-0"), "% hit rate");
717
+ } }
718
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_74_Template(rf, ctx) { if (rf & 1) {
719
+ i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
720
+ i0.ɵɵelement(2, "i", 94);
721
+ i0.ɵɵelementStart(3, "h4");
722
+ i0.ɵɵtext(4, "Cache Read");
723
+ i0.ɵɵelementEnd()();
724
+ i0.ɵɵelementStart(5, "div", 41);
725
+ i0.ɵɵtext(6);
726
+ i0.ɵɵelementEnd();
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);
729
+ i0.ɵɵelementEnd();
730
+ } if (rf & 2) {
731
+ const ctx_r1 = i0.ɵɵnextContext(2);
732
+ i0.ɵɵadvance(6);
733
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCacheRead));
734
+ i0.ɵɵadvance();
735
+ i0.ɵɵconditional(ctx_r1.record.TokensCacheWrite ? 7 : -1);
736
+ i0.ɵɵadvance();
737
+ i0.ɵɵconditional(ctx_r1.record.TokensCacheRead || ctx_r1.record.TokensCacheWrite ? 8 : -1);
738
+ } }
739
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template(rf, ctx) { if (rf & 1) {
648
740
  i0.ɵɵelementStart(0, "div", 39)(1, "span");
649
741
  i0.ɵɵtext(2);
650
742
  i0.ɵɵelementEnd()();
@@ -653,8 +745,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Templat
653
745
  i0.ɵɵadvance(2);
654
746
  i0.ɵɵtextInterpolate1("Total: ", ctx_r1.formatCost(ctx_r1.record.TotalCost));
655
747
  } }
656
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_80_Template(rf, ctx) { if (rf & 1) {
657
- i0.ɵɵelementStart(0, "div", 43);
748
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template(rf, ctx) { if (rf & 1) {
749
+ i0.ɵɵelementStart(0, "div", 45);
658
750
  i0.ɵɵtext(1);
659
751
  i0.ɵɵelementEnd();
660
752
  } if (rf & 2) {
@@ -662,13 +754,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_80_Templat
662
754
  i0.ɵɵadvance();
663
755
  i0.ɵɵtextInterpolate(ctx_r1.record.CostCurrency);
664
756
  } }
665
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Template(rf, ctx) { if (rf & 1) {
757
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Template(rf, ctx) { if (rf & 1) {
666
758
  i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
667
- i0.ɵɵelement(2, "i", 125);
759
+ i0.ɵɵelement(2, "i", 129);
668
760
  i0.ɵɵelementStart(3, "h4");
669
761
  i0.ɵɵtext(4, "Queue Time");
670
762
  i0.ɵɵelementEnd()();
671
- i0.ɵɵelementStart(5, "div", 38);
763
+ i0.ɵɵelementStart(5, "div", 41);
672
764
  i0.ɵɵtext(6);
673
765
  i0.ɵɵelementEnd()();
674
766
  } if (rf & 2) {
@@ -676,13 +768,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Templat
676
768
  i0.ɵɵadvance(6);
677
769
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.QueueTime));
678
770
  } }
679
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template(rf, ctx) { if (rf & 1) {
771
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template(rf, ctx) { if (rf & 1) {
680
772
  i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
681
- i0.ɵɵelement(2, "i", 126);
773
+ i0.ɵɵelement(2, "i", 130);
682
774
  i0.ɵɵelementStart(3, "h4");
683
775
  i0.ɵɵtext(4, "Prompt Time");
684
776
  i0.ɵɵelementEnd()();
685
- i0.ɵɵelementStart(5, "div", 38);
777
+ i0.ɵɵelementStart(5, "div", 41);
686
778
  i0.ɵɵtext(6);
687
779
  i0.ɵɵelementEnd()();
688
780
  } if (rf & 2) {
@@ -690,13 +782,13 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Templat
690
782
  i0.ɵɵadvance(6);
691
783
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.PromptTime));
692
784
  } }
693
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template(rf, ctx) { if (rf & 1) {
785
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template(rf, ctx) { if (rf & 1) {
694
786
  i0.ɵɵelementStart(0, "div", 35)(1, "div", 36);
695
- i0.ɵɵelement(2, "i", 127);
787
+ i0.ɵɵelement(2, "i", 131);
696
788
  i0.ɵɵelementStart(3, "h4");
697
789
  i0.ɵɵtext(4, "Completion Time");
698
790
  i0.ɵɵelementEnd()();
699
- i0.ɵɵelementStart(5, "div", 38);
791
+ i0.ɵɵelementStart(5, "div", 41);
700
792
  i0.ɵɵtext(6);
701
793
  i0.ɵɵelementEnd()();
702
794
  } if (rf & 2) {
@@ -704,11 +796,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Templat
704
796
  i0.ɵɵadvance(6);
705
797
  i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.record.CompletionTime));
706
798
  } }
707
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template(rf, ctx) { if (rf & 1) {
708
- i0.ɵɵelementStart(0, "div", 45)(1, "span", 85);
799
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template(rf, ctx) { if (rf & 1) {
800
+ i0.ɵɵelementStart(0, "div", 47)(1, "span", 87);
709
801
  i0.ɵɵtext(2, "Execution Order:");
710
802
  i0.ɵɵelementEnd();
711
- i0.ɵɵelementStart(3, "span", 86);
803
+ i0.ɵɵelementStart(3, "span", 88);
712
804
  i0.ɵɵtext(4);
713
805
  i0.ɵɵelementEnd()();
714
806
  } if (rf & 2) {
@@ -716,23 +808,23 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Templat
716
808
  i0.ɵɵadvance(4);
717
809
  i0.ɵɵtextInterpolate(ctx_r1.record.ExecutionOrder);
718
810
  } }
719
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template(rf, ctx) { if (rf & 1) {
811
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_89_Template(rf, ctx) { if (rf & 1) {
720
812
  const _r12 = i0.ɵɵgetCurrentView();
721
- i0.ɵɵelementStart(0, "div", 45)(1, "span", 85);
813
+ i0.ɵɵelementStart(0, "div", 47)(1, "span", 87);
722
814
  i0.ɵɵtext(2, "Agent:");
723
815
  i0.ɵɵelementEnd();
724
- i0.ɵɵelementStart(3, "span", 128);
725
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_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)); });
726
818
  i0.ɵɵtext(4);
727
- i0.ɵɵelement(5, "i", 129);
819
+ i0.ɵɵelement(5, "i", 133);
728
820
  i0.ɵɵelementEnd()();
729
821
  } if (rf & 2) {
730
822
  const ctx_r1 = i0.ɵɵnextContext(2);
731
823
  i0.ɵɵadvance(4);
732
824
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent, " ");
733
825
  } }
734
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
735
- i0.ɵɵelementStart(0, "span", 107);
826
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
827
+ i0.ɵɵelementStart(0, "span", 111);
736
828
  i0.ɵɵtext(1);
737
829
  i0.ɵɵelementEnd();
738
830
  } if (rf & 2) {
@@ -740,22 +832,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_temp
740
832
  i0.ɵɵadvance();
741
833
  i0.ɵɵtextInterpolate1("(", ctx_r1.record.ValidationAttemptCount, " attempts)");
742
834
  } }
743
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
744
- i0.ɵɵelementStart(0, "span", 141);
835
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
836
+ i0.ɵɵelementStart(0, "span", 145);
745
837
  i0.ɵɵtext(1, "Passed");
746
838
  i0.ɵɵelementEnd();
747
839
  } }
748
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
749
- i0.ɵɵelementStart(0, "span", 113);
840
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
841
+ i0.ɵɵelementStart(0, "span", 117);
750
842
  i0.ɵɵtext(1, "Failed");
751
843
  i0.ɵɵelementEnd();
752
844
  } }
753
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Template(rf, ctx) { if (rf & 1) {
754
- i0.ɵɵelementStart(0, "span", 92);
755
- i0.ɵɵelement(1, "i", 140);
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);
756
848
  i0.ɵɵtext(2, " Validation & Retries ");
757
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_3_Template, 2, 1, "span", 107);
758
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_4_Template, 2, 0, "span", 141)(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Conditional_5_Template, 2, 0, "span", 113);
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);
759
851
  i0.ɵɵelementEnd();
760
852
  } if (rf & 2) {
761
853
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -764,8 +856,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_temp
764
856
  i0.ɵɵadvance();
765
857
  i0.ɵɵconditional(ctx_r1.record.FinalValidationPassed ? 4 : ctx_r1.record.FinalValidationPassed === false ? 5 : -1);
766
858
  } }
767
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_31_Conditional_6_Template(rf, ctx) { if (rf & 1) {
768
- i0.ɵɵelementStart(0, "span", 142);
859
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Conditional_6_Template(rf, ctx) { if (rf & 1) {
860
+ i0.ɵɵelementStart(0, "span", 146);
769
861
  i0.ɵɵtext(1);
770
862
  i0.ɵɵelementEnd();
771
863
  } if (rf & 2) {
@@ -773,15 +865,15 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
773
865
  i0.ɵɵadvance();
774
866
  i0.ɵɵtextInterpolate1("", ctx_r1.record.ValidationErrorCount, " validation errors");
775
867
  } }
776
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_31_Template(rf, ctx) { if (rf & 1) {
777
- i0.ɵɵelementStart(0, "div", 135)(1, "h5");
778
- i0.ɵɵelement(2, "i", 114);
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);
779
871
  i0.ɵɵtext(3, " Final Validation Error");
780
872
  i0.ɵɵelementEnd();
781
873
  i0.ɵɵelementStart(4, "p");
782
874
  i0.ɵɵtext(5);
783
875
  i0.ɵɵelementEnd();
784
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_31_Conditional_6_Template, 2, 1, "span", 142);
876
+ i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_31_Conditional_6_Template, 2, 1, "span", 146);
785
877
  i0.ɵɵelementEnd();
786
878
  } if (rf & 2) {
787
879
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -790,9 +882,9 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
790
882
  i0.ɵɵadvance();
791
883
  i0.ɵɵconditional(ctx_r1.record && ctx_r1.record.ValidationErrorCount && ctx_r1.record.ValidationErrorCount > 0 ? 6 : -1);
792
884
  } }
793
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_32_Template(rf, ctx) { if (rf & 1) {
794
- i0.ɵɵelementStart(0, "div", 136)(1, "h5");
795
- i0.ɵɵelement(2, "i", 54);
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);
796
888
  i0.ɵɵtext(3, " Most Common Error");
797
889
  i0.ɵɵelementEnd();
798
890
  i0.ɵɵelementStart(4, "p");
@@ -803,24 +895,24 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
803
895
  i0.ɵɵadvance(5);
804
896
  i0.ɵɵtextInterpolate(ctx_r1.record.CommonValidationError);
805
897
  } }
806
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_33_Template(rf, ctx) { if (rf & 1) {
807
- i0.ɵɵelementStart(0, "div", 137)(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");
808
900
  i0.ɵɵtext(2, "Retry Timeline");
809
901
  i0.ɵɵelementEnd();
810
- i0.ɵɵelementStart(3, "div", 143)(4, "div", 144);
811
- i0.ɵɵelement(5, "i", 88);
902
+ i0.ɵɵelementStart(3, "div", 147)(4, "div", 148);
903
+ i0.ɵɵelement(5, "i", 90);
812
904
  i0.ɵɵelementStart(6, "span");
813
905
  i0.ɵɵtext(7);
814
906
  i0.ɵɵpipe(8, "date");
815
907
  i0.ɵɵelementEnd()();
816
- i0.ɵɵelementStart(9, "div", 144);
817
- i0.ɵɵelement(10, "i", 127);
908
+ i0.ɵɵelementStart(9, "div", 148);
909
+ i0.ɵɵelement(10, "i", 131);
818
910
  i0.ɵɵelementStart(11, "span");
819
911
  i0.ɵɵtext(12);
820
912
  i0.ɵɵpipe(13, "date");
821
913
  i0.ɵɵelementEnd()();
822
- i0.ɵɵelementStart(14, "div", 144);
823
- i0.ɵɵelement(15, "i", 145);
914
+ i0.ɵɵelementStart(14, "div", 148);
915
+ i0.ɵɵelement(15, "i", 149);
824
916
  i0.ɵɵelementStart(16, "span");
825
917
  i0.ɵɵtext(17);
826
918
  i0.ɵɵelementEnd()()()();
@@ -833,8 +925,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
833
925
  i0.ɵɵadvance(5);
834
926
  i0.ɵɵtextInterpolate1("Total Retry Duration: ", ctx_r1.formatDuration(ctx_r1.record.TotalRetryDurationMS));
835
927
  } }
836
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
837
- i0.ɵɵelementStart(0, "span", 142);
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);
838
930
  i0.ɵɵtext(1);
839
931
  i0.ɵɵelementEnd();
840
932
  } if (rf & 2) {
@@ -842,11 +934,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
842
934
  i0.ɵɵadvance();
843
935
  i0.ɵɵtextInterpolate1("(", attempt_r14.validationErrorCount, " errors)");
844
936
  } }
845
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
846
- i0.ɵɵelementStart(0, "span", 153);
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);
847
939
  i0.ɵɵtext(1);
848
940
  i0.ɵɵelementEnd();
849
- i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 142);
941
+ i0.ɵɵconditionalCreate(2, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_34_For_5_Conditional_7_Conditional_2_Template, 2, 1, "span", 146);
850
942
  } if (rf & 2) {
851
943
  const attempt_r14 = i0.ɵɵnextContext().$implicit;
852
944
  i0.ɵɵadvance();
@@ -854,8 +946,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
854
946
  i0.ɵɵadvance();
855
947
  i0.ɵɵconditional(attempt_r14.validationErrorCount > 0 ? 2 : -1);
856
948
  } }
857
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
858
- i0.ɵɵelementStart(0, "span", 152);
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);
859
951
  i0.ɵɵtext(1);
860
952
  i0.ɵɵelementEnd();
861
953
  } if (rf & 2) {
@@ -863,16 +955,16 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
863
955
  i0.ɵɵadvance();
864
956
  i0.ɵɵtextInterpolate1("Output: ", attempt_r14.outputLength, " chars");
865
957
  } }
866
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Template(rf, ctx) { if (rf & 1) {
867
- i0.ɵɵelementStart(0, "div", 148)(1, "div", 149);
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);
868
960
  i0.ɵɵelement(2, "i");
869
961
  i0.ɵɵtext(3);
870
962
  i0.ɵɵelementEnd();
871
- i0.ɵɵelementStart(4, "div", 150)(5, "span", 151);
963
+ i0.ɵɵelementStart(4, "div", 154)(5, "span", 155);
872
964
  i0.ɵɵtext(6);
873
965
  i0.ɵɵelementEnd();
874
- i0.ɵɵconditionalCreate(7, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_7_Template, 3, 2);
875
- i0.ɵɵconditionalCreate(8, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Conditional_8_Template, 2, 1, "span", 152);
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);
876
968
  i0.ɵɵelementEnd()();
877
969
  } if (rf & 2) {
878
970
  const attempt_r14 = ctx.$implicit;
@@ -888,29 +980,29 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
888
980
  i0.ɵɵadvance();
889
981
  i0.ɵɵconditional(attempt_r14.outputLength ? 8 : -1);
890
982
  } }
891
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_Template(rf, ctx) { if (rf & 1) {
892
- i0.ɵɵelementStart(0, "div", 138)(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");
893
985
  i0.ɵɵtext(2, "Validation Attempts");
894
986
  i0.ɵɵelementEnd();
895
- i0.ɵɵelementStart(3, "div", 146);
896
- i0.ɵɵrepeaterCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_For_5_Template, 9, 10, "div", 147, _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);
897
989
  i0.ɵɵelementEnd()();
898
990
  } if (rf & 2) {
899
991
  const ctx_r1 = i0.ɵɵnextContext(3);
900
992
  i0.ɵɵadvance(4);
901
993
  i0.ɵɵrepeater(ctx_r1.validationAttempts);
902
994
  } }
903
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_35_Template(rf, ctx) { if (rf & 1) {
995
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_35_Template(rf, ctx) { if (rf & 1) {
904
996
  const _r15 = i0.ɵɵgetCurrentView();
905
- i0.ɵɵelementStart(0, "div", 139)(1, "div", 99)(2, "h4", 122);
997
+ i0.ɵɵelementStart(0, "div", 143)(1, "div", 103)(2, "h4", 126);
906
998
  i0.ɵɵtext(3, "Validation Summary Details");
907
999
  i0.ɵɵelementEnd();
908
- i0.ɵɵelementStart(4, "button", 102);
909
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_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")); });
910
- i0.ɵɵelement(5, "i", 103);
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);
911
1003
  i0.ɵɵelementEnd()();
912
- i0.ɵɵelementStart(6, "div", 154)(7, "mj-code-editor", 155);
913
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_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); });
914
1006
  i0.ɵɵelementEnd()()();
915
1007
  } if (rf & 2) {
916
1008
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -918,17 +1010,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
918
1010
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationSummary);
919
1011
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
920
1012
  } }
921
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_36_Template(rf, ctx) { if (rf & 1) {
1013
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Conditional_36_Template(rf, ctx) { if (rf & 1) {
922
1014
  const _r16 = i0.ɵɵgetCurrentView();
923
- i0.ɵɵelementStart(0, "div", 139)(1, "div", 99)(2, "h4", 122);
1015
+ i0.ɵɵelementStart(0, "div", 143)(1, "div", 103)(2, "h4", 126);
924
1016
  i0.ɵɵtext(3, "Validation Attempts (Raw JSON)");
925
1017
  i0.ɵɵelementEnd();
926
- i0.ɵɵelementStart(4, "button", 102);
927
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_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")); });
928
- i0.ɵɵelement(5, "i", 103);
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);
929
1021
  i0.ɵɵelementEnd()();
930
- i0.ɵɵelementStart(6, "div", 154)(7, "mj-code-editor", 156);
931
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_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); });
932
1024
  i0.ɵɵelementEnd()()();
933
1025
  } if (rf & 2) {
934
1026
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -936,49 +1028,49 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditi
936
1028
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedValidationAttempts);
937
1029
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
938
1030
  } }
939
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template(rf, ctx) { if (rf & 1) {
1031
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_90_Template(rf, ctx) { if (rf & 1) {
940
1032
  const _r13 = i0.ɵɵgetCurrentView();
941
1033
  i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
942
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onValidationPanelToggle($event)); });
943
- i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_ng_template_1_Template, 6, 2, "ng-template", 28);
944
- i0.ɵɵelementStart(2, "div", 29)(3, "div", 130)(4, "div", 131)(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");
945
1037
  i0.ɵɵtext(6, "Validation Summary");
946
1038
  i0.ɵɵelementEnd();
947
- i0.ɵɵelementStart(7, "div", 132);
1039
+ i0.ɵɵelementStart(7, "div", 136);
948
1040
  i0.ɵɵelement(8, "i");
949
1041
  i0.ɵɵtext(9);
950
1042
  i0.ɵɵelementEnd()();
951
- i0.ɵɵelementStart(10, "div", 133)(11, "div", 134)(12, "div", 85);
1043
+ i0.ɵɵelementStart(10, "div", 137)(11, "div", 138)(12, "div", 87);
952
1044
  i0.ɵɵtext(13, "Total Attempts");
953
1045
  i0.ɵɵelementEnd();
954
- i0.ɵɵelementStart(14, "div", 86);
1046
+ i0.ɵɵelementStart(14, "div", 88);
955
1047
  i0.ɵɵtext(15);
956
1048
  i0.ɵɵelementEnd()();
957
- i0.ɵɵelementStart(16, "div", 134)(17, "div", 85);
1049
+ i0.ɵɵelementStart(16, "div", 138)(17, "div", 87);
958
1050
  i0.ɵɵtext(18, "Successful");
959
1051
  i0.ɵɵelementEnd();
960
- i0.ɵɵelementStart(19, "div", 86);
1052
+ i0.ɵɵelementStart(19, "div", 88);
961
1053
  i0.ɵɵtext(20);
962
1054
  i0.ɵɵelementEnd()();
963
- i0.ɵɵelementStart(21, "div", 134)(22, "div", 85);
1055
+ i0.ɵɵelementStart(21, "div", 138)(22, "div", 87);
964
1056
  i0.ɵɵtext(23, "Behavior");
965
1057
  i0.ɵɵelementEnd();
966
- i0.ɵɵelementStart(24, "div", 86);
1058
+ i0.ɵɵelementStart(24, "div", 88);
967
1059
  i0.ɵɵtext(25);
968
1060
  i0.ɵɵelementEnd()();
969
- i0.ɵɵelementStart(26, "div", 134)(27, "div", 85);
1061
+ i0.ɵɵelementStart(26, "div", 138)(27, "div", 87);
970
1062
  i0.ɵɵtext(28, "Retry Strategy");
971
1063
  i0.ɵɵelementEnd();
972
- i0.ɵɵelementStart(29, "div", 86);
1064
+ i0.ɵɵelementStart(29, "div", 88);
973
1065
  i0.ɵɵtext(30);
974
1066
  i0.ɵɵelementEnd()()();
975
- i0.ɵɵconditionalCreate(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_31_Template, 7, 2, "div", 135);
976
- i0.ɵɵconditionalCreate(32, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_32_Template, 6, 1, "div", 136);
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);
977
1069
  i0.ɵɵelementEnd();
978
- i0.ɵɵconditionalCreate(33, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_33_Template, 18, 9, "div", 137);
979
- i0.ɵɵconditionalCreate(34, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_34_Template, 6, 0, "div", 138);
980
- i0.ɵɵconditionalCreate(35, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_35_Template, 8, 4, "div", 139);
981
- i0.ɵɵconditionalCreate(36, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Conditional_36_Template, 8, 4, "div", 139);
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);
982
1074
  i0.ɵɵelementEnd()();
983
1075
  } if (rf & 2) {
984
1076
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1010,8 +1102,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Templat
1010
1102
  i0.ɵɵadvance();
1011
1103
  i0.ɵɵconditional(ctx_r1.record.ValidationAttempts ? 36 : -1);
1012
1104
  } }
1013
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1014
- i0.ɵɵelementStart(0, "span", 107);
1105
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1106
+ i0.ɵɵelementStart(0, "span", 111);
1015
1107
  i0.ɵɵtext(1);
1016
1108
  i0.ɵɵelementEnd();
1017
1109
  } if (rf & 2) {
@@ -1019,47 +1111,47 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_temp
1019
1111
  i0.ɵɵadvance();
1020
1112
  i0.ɵɵtextInterpolate1("(", ctx_r1.childRuns.length, " children)");
1021
1113
  } }
1022
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1023
- i0.ɵɵelementStart(0, "span", 92);
1024
- i0.ɵɵelement(1, "i", 159);
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);
1025
1117
  i0.ɵɵtext(2, " Run Hierarchy ");
1026
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_ng_template_1_Conditional_3_Template, 2, 1, "span", 107);
1118
+ i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Conditional_3_Template, 2, 1, "span", 111);
1027
1119
  i0.ɵɵelementEnd();
1028
1120
  } if (rf & 2) {
1029
1121
  const ctx_r1 = i0.ɵɵnextContext(3);
1030
1122
  i0.ɵɵadvance(3);
1031
1123
  i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 3 : -1);
1032
1124
  } }
1033
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1125
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_91_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1034
1126
  const _r17 = i0.ɵɵgetCurrentView();
1035
- i0.ɵɵelementStart(0, "div", 157)(1, "h4");
1036
- i0.ɵɵelement(2, "i", 81);
1127
+ i0.ɵɵelementStart(0, "div", 161)(1, "h4");
1128
+ i0.ɵɵelement(2, "i", 83);
1037
1129
  i0.ɵɵtext(3, " Parent Run");
1038
1130
  i0.ɵɵelementEnd();
1039
- i0.ɵɵelementStart(4, "div", 160);
1040
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_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)); });
1041
- i0.ɵɵelementStart(5, "div", 161);
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);
1042
1134
  i0.ɵɵelement(6, "i");
1043
1135
  i0.ɵɵelementEnd();
1044
- i0.ɵɵelementStart(7, "div", 162)(8, "div", 163);
1136
+ i0.ɵɵelementStart(7, "div", 166)(8, "div", 167);
1045
1137
  i0.ɵɵtext(9);
1046
- i0.ɵɵelementStart(10, "span", 164);
1138
+ i0.ɵɵelementStart(10, "span", 168);
1047
1139
  i0.ɵɵtext(11);
1048
1140
  i0.ɵɵelementEnd()();
1049
- i0.ɵɵelementStart(12, "div", 165)(13, "span");
1050
- i0.ɵɵelement(14, "i", 88);
1141
+ i0.ɵɵelementStart(12, "div", 169)(13, "span");
1142
+ i0.ɵɵelement(14, "i", 90);
1051
1143
  i0.ɵɵtext(15);
1052
1144
  i0.ɵɵelementEnd();
1053
1145
  i0.ɵɵelementStart(16, "span");
1054
- i0.ɵɵelement(17, "i", 41);
1146
+ i0.ɵɵelement(17, "i", 42);
1055
1147
  i0.ɵɵtext(18);
1056
1148
  i0.ɵɵelementEnd();
1057
1149
  i0.ɵɵelementStart(19, "span");
1058
- i0.ɵɵelement(20, "i", 91);
1150
+ i0.ɵɵelement(20, "i", 95);
1059
1151
  i0.ɵɵtext(21);
1060
1152
  i0.ɵɵpipe(22, "date");
1061
1153
  i0.ɵɵelementEnd()()();
1062
- i0.ɵɵelement(23, "i", 129);
1154
+ i0.ɵɵelement(23, "i", 133);
1063
1155
  i0.ɵɵelementEnd()();
1064
1156
  } if (rf & 2) {
1065
1157
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1078,8 +1170,8 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditi
1078
1170
  i0.ɵɵadvance(3);
1079
1171
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(22, 9, ctx_r1.parentRun.RunAt, "short"));
1080
1172
  } }
1081
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1082
- i0.ɵɵelementStart(0, "span", 170);
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);
1083
1175
  i0.ɵɵtext(1);
1084
1176
  i0.ɵɵelementEnd();
1085
1177
  } if (rf & 2) {
@@ -1087,32 +1179,32 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditi
1087
1179
  i0.ɵɵadvance();
1088
1180
  i0.ɵɵtextInterpolate1("#", childRun_r19.ExecutionOrder);
1089
1181
  } }
1090
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_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) {
1091
1183
  const _r18 = i0.ɵɵgetCurrentView();
1092
- i0.ɵɵelementStart(0, "div", 169);
1093
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_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)); });
1094
- i0.ɵɵelementStart(1, "div", 161);
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);
1095
1187
  i0.ɵɵelement(2, "i");
1096
1188
  i0.ɵɵelementEnd();
1097
- i0.ɵɵelementStart(3, "div", 162)(4, "div", 163);
1189
+ i0.ɵɵelementStart(3, "div", 166)(4, "div", 167);
1098
1190
  i0.ɵɵtext(5);
1099
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_For_6_Conditional_6_Template, 2, 1, "span", 170);
1100
- i0.ɵɵelementStart(7, "span", 164);
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);
1101
1193
  i0.ɵɵtext(8);
1102
1194
  i0.ɵɵelementEnd()();
1103
- i0.ɵɵelementStart(9, "div", 165)(10, "span", 16);
1195
+ i0.ɵɵelementStart(9, "div", 169)(10, "span", 16);
1104
1196
  i0.ɵɵelement(11, "i");
1105
1197
  i0.ɵɵtext(12);
1106
1198
  i0.ɵɵelementEnd();
1107
1199
  i0.ɵɵelementStart(13, "span");
1108
- i0.ɵɵelement(14, "i", 88);
1200
+ i0.ɵɵelement(14, "i", 90);
1109
1201
  i0.ɵɵtext(15);
1110
1202
  i0.ɵɵelementEnd();
1111
1203
  i0.ɵɵelementStart(16, "span");
1112
- i0.ɵɵelement(17, "i", 41);
1204
+ i0.ɵɵelement(17, "i", 42);
1113
1205
  i0.ɵɵtext(18);
1114
1206
  i0.ɵɵelementEnd()()();
1115
- i0.ɵɵelement(19, "i", 129);
1207
+ i0.ɵɵelement(19, "i", 133);
1116
1208
  i0.ɵɵelementEnd();
1117
1209
  } if (rf & 2) {
1118
1210
  const childRun_r19 = ctx.$implicit;
@@ -1138,25 +1230,25 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditi
1138
1230
  i0.ɵɵadvance(3);
1139
1231
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatTokens(childRun_r19.TokensUsed));
1140
1232
  } }
1141
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1142
- i0.ɵɵelementStart(0, "div", 158)(1, "h4");
1143
- i0.ɵɵelement(2, "i", 166);
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);
1144
1236
  i0.ɵɵtext(3, " Child Runs");
1145
1237
  i0.ɵɵelementEnd();
1146
- i0.ɵɵelementStart(4, "div", 167);
1147
- i0.ɵɵrepeaterCreate(5, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_For_6_Template, 20, 14, "div", 168, _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);
1148
1240
  i0.ɵɵelementEnd()();
1149
1241
  } if (rf & 2) {
1150
1242
  const ctx_r1 = i0.ɵɵnextContext(3);
1151
1243
  i0.ɵɵadvance(5);
1152
1244
  i0.ɵɵrepeater(ctx_r1.childRuns);
1153
1245
  } }
1154
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template(rf, ctx) { if (rf & 1) {
1155
- i0.ɵɵelementStart(0, "mj-accordion-panel", 46);
1156
- i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_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);
1157
1249
  i0.ɵɵelementStart(2, "div", 29);
1158
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_3_Template, 24, 12, "div", 157);
1159
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Conditional_4_Template, 7, 0, "div", 158);
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);
1160
1252
  i0.ɵɵelementEnd()();
1161
1253
  } if (rf & 2) {
1162
1254
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1166,33 +1258,33 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Templat
1166
1258
  i0.ɵɵadvance();
1167
1259
  i0.ɵɵconditional(ctx_r1.childRuns.length > 0 ? 4 : -1);
1168
1260
  } }
1169
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_90_Template(rf, ctx) { if (rf & 1) {
1170
- i0.ɵɵelementStart(0, "span", 92);
1171
- i0.ɵɵelement(1, "i", 59);
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);
1172
1264
  i0.ɵɵtext(2, " Additional Details ");
1173
1265
  i0.ɵɵelementEnd();
1174
1266
  } }
1175
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_93_Template(rf, ctx) { if (rf & 1) {
1267
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_96_Template(rf, ctx) { if (rf & 1) {
1176
1268
  const _r20 = i0.ɵɵgetCurrentView();
1177
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1269
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1178
1270
  i0.ɵɵtext(2, "Agent");
1179
1271
  i0.ɵɵelementEnd();
1180
- i0.ɵɵelementStart(3, "div", 171);
1181
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_93_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)); });
1182
- i0.ɵɵelement(4, "i", 172);
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);
1183
1275
  i0.ɵɵtext(5);
1184
- i0.ɵɵelement(6, "i", 129);
1276
+ i0.ɵɵelement(6, "i", 133);
1185
1277
  i0.ɵɵelementEnd()();
1186
1278
  } if (rf & 2) {
1187
1279
  const ctx_r1 = i0.ɵɵnextContext(2);
1188
1280
  i0.ɵɵadvance(5);
1189
1281
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Agent || "Unknown", " ");
1190
1282
  } }
1191
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_94_Template(rf, ctx) { if (rf & 1) {
1192
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1283
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_97_Template(rf, ctx) { if (rf & 1) {
1284
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1193
1285
  i0.ɵɵtext(2, "Run Type");
1194
1286
  i0.ɵɵelementEnd();
1195
- i0.ɵɵelementStart(3, "div", 49);
1287
+ i0.ɵɵelementStart(3, "div", 51);
1196
1288
  i0.ɵɵelement(4, "i");
1197
1289
  i0.ɵɵtext(5);
1198
1290
  i0.ɵɵelementEnd()();
@@ -1203,12 +1295,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_94_Templat
1203
1295
  i0.ɵɵadvance();
1204
1296
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.RunType, " ");
1205
1297
  } }
1206
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template(rf, ctx) { if (rf & 1) {
1207
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1298
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_98_Template(rf, ctx) { if (rf & 1) {
1299
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1208
1300
  i0.ɵɵtext(2, "Response Format");
1209
1301
  i0.ɵɵelementEnd();
1210
- i0.ɵɵelementStart(3, "div", 49);
1211
- i0.ɵɵelement(4, "i", 90);
1302
+ i0.ɵɵelementStart(3, "div", 51);
1303
+ i0.ɵɵelement(4, "i", 93);
1212
1304
  i0.ɵɵtext(5);
1213
1305
  i0.ɵɵelementEnd()();
1214
1306
  } if (rf & 2) {
@@ -1216,12 +1308,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Templat
1216
1308
  i0.ɵɵadvance(5);
1217
1309
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.ResponseFormat, " ");
1218
1310
  } }
1219
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_150_Template(rf, ctx) { if (rf & 1) {
1220
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1311
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_153_Template(rf, ctx) { if (rf & 1) {
1312
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1221
1313
  i0.ɵɵtext(2, "Started At");
1222
1314
  i0.ɵɵelementEnd();
1223
- i0.ɵɵelementStart(3, "div", 49);
1224
- i0.ɵɵelement(4, "i", 88);
1315
+ i0.ɵɵelementStart(3, "div", 51);
1316
+ i0.ɵɵelement(4, "i", 90);
1225
1317
  i0.ɵɵtext(5);
1226
1318
  i0.ɵɵpipe(6, "date");
1227
1319
  i0.ɵɵelementEnd()();
@@ -1230,12 +1322,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_150_Templa
1230
1322
  i0.ɵɵadvance(5);
1231
1323
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.RunAt, "medium"), " ");
1232
1324
  } }
1233
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_151_Template(rf, ctx) { if (rf & 1) {
1234
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1325
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_154_Template(rf, ctx) { if (rf & 1) {
1326
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1235
1327
  i0.ɵɵtext(2, "Completed At");
1236
1328
  i0.ɵɵelementEnd();
1237
- i0.ɵɵelementStart(3, "div", 49);
1238
- i0.ɵɵelement(4, "i", 173);
1329
+ i0.ɵɵelementStart(3, "div", 51);
1330
+ i0.ɵɵelement(4, "i", 177);
1239
1331
  i0.ɵɵtext(5);
1240
1332
  i0.ɵɵpipe(6, "date");
1241
1333
  i0.ɵɵelementEnd()();
@@ -1244,30 +1336,30 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_151_Templa
1244
1336
  i0.ɵɵadvance(5);
1245
1337
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 1, ctx_r1.record.CompletedAt, "medium"), " ");
1246
1338
  } }
1247
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1248
- i0.ɵɵelementStart(0, "span", 92);
1249
- i0.ɵɵelement(1, "i", 79);
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);
1250
1342
  i0.ɵɵtext(2, " Model Specific Response Details ");
1251
- i0.ɵɵelementStart(3, "span", 94);
1343
+ i0.ɵɵelementStart(3, "span", 98);
1252
1344
  i0.ɵɵtext(4, "JSON");
1253
1345
  i0.ɵɵelementEnd()();
1254
1346
  } }
1255
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template(rf, ctx) { if (rf & 1) {
1347
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_155_Template(rf, ctx) { if (rf & 1) {
1256
1348
  const _r21 = i0.ɵɵgetCurrentView();
1257
1349
  i0.ɵɵelementStart(0, "mj-accordion-panel", 27);
1258
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onModelSpecificPanelToggle($event)); });
1259
- i0.ɵɵtemplate(1, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_ng_template_1_Template, 5, 0, "ng-template", 28);
1260
- i0.ɵɵelementStart(2, "div", 29)(3, "div", 33)(4, "div", 99)(5, "button", 100);
1261
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_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")); });
1262
- i0.ɵɵelement(6, "i", 101);
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);
1263
1355
  i0.ɵɵtext(7, " Copy ");
1264
1356
  i0.ɵɵelementEnd();
1265
- i0.ɵɵelementStart(8, "button", 102);
1266
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_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")); });
1267
- i0.ɵɵelement(9, "i", 103);
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);
1268
1360
  i0.ɵɵelementEnd()();
1269
- i0.ɵɵelementStart(10, "mj-code-editor", 174);
1270
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_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); });
1271
1363
  i0.ɵɵelementEnd()()()();
1272
1364
  } if (rf & 2) {
1273
1365
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1276,22 +1368,22 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Templa
1276
1368
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSpecificResponseDetails);
1277
1369
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
1278
1370
  } }
1279
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1280
- i0.ɵɵelementStart(0, "span", 141);
1371
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1372
+ i0.ɵɵelementStart(0, "span", 145);
1281
1373
  i0.ɵɵtext(1, "Cached");
1282
1374
  i0.ɵɵelementEnd();
1283
1375
  } }
1284
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1285
- i0.ɵɵelementStart(0, "span", 141);
1376
+ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_157_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1377
+ i0.ɵɵelementStart(0, "span", 145);
1286
1378
  i0.ɵɵtext(1, "Selected");
1287
1379
  i0.ɵɵelementEnd();
1288
1380
  } }
1289
- function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Template(rf, ctx) { if (rf & 1) {
1290
- i0.ɵɵelementStart(0, "span", 92);
1291
- i0.ɵɵelement(1, "i", 79);
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);
1292
1384
  i0.ɵɵtext(2, " Model Selection & Performance ");
1293
- i0.ɵɵconditionalCreate(3, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Conditional_3_Template, 2, 0, "span", 141);
1294
- i0.ɵɵconditionalCreate(4, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Conditional_4_Template, 2, 0, "span", 141);
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);
1295
1387
  i0.ɵɵelementEnd();
1296
1388
  } if (rf & 2) {
1297
1389
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1300,12 +1392,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Templa
1300
1392
  i0.ɵɵadvance();
1301
1393
  i0.ɵɵconditional(ctx_r1.record.WasSelectedResult ? 4 : -1);
1302
1394
  } }
1303
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_181_Template(rf, ctx) { if (rf & 1) {
1304
- i0.ɵɵelementStart(0, "div", 62)(1, "label");
1395
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_184_Template(rf, ctx) { if (rf & 1) {
1396
+ i0.ɵɵelementStart(0, "div", 64)(1, "label");
1305
1397
  i0.ɵɵtext(2, "Cache Key");
1306
1398
  i0.ɵɵelementEnd();
1307
- i0.ɵɵelementStart(3, "div", 49);
1308
- i0.ɵɵelement(4, "i", 175);
1399
+ i0.ɵɵelementStart(3, "div", 51);
1400
+ i0.ɵɵelement(4, "i", 179);
1309
1401
  i0.ɵɵelementStart(5, "code");
1310
1402
  i0.ɵɵtext(6);
1311
1403
  i0.ɵɵelementEnd()()();
@@ -1314,28 +1406,28 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_181_Templa
1314
1406
  i0.ɵɵadvance(6);
1315
1407
  i0.ɵɵtextInterpolate(ctx_r1.record.CacheKey);
1316
1408
  } }
1317
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_182_Template(rf, ctx) { if (rf & 1) {
1409
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_185_Template(rf, ctx) { if (rf & 1) {
1318
1410
  const _r22 = i0.ɵɵgetCurrentView();
1319
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1411
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1320
1412
  i0.ɵɵtext(2, "Judge Prompt");
1321
1413
  i0.ɵɵelementEnd();
1322
- i0.ɵɵelementStart(3, "div", 176);
1323
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_182_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)); });
1324
- i0.ɵɵelement(4, "i", 177);
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);
1325
1417
  i0.ɵɵtext(5);
1326
- i0.ɵɵelement(6, "i", 129);
1418
+ i0.ɵɵelement(6, "i", 133);
1327
1419
  i0.ɵɵelementEnd()();
1328
1420
  } if (rf & 2) {
1329
1421
  const ctx_r1 = i0.ɵɵnextContext(2);
1330
1422
  i0.ɵɵadvance(5);
1331
1423
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Judge || "Unknown", " ");
1332
1424
  } }
1333
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Template(rf, ctx) { if (rf & 1) {
1334
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1425
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_186_Template(rf, ctx) { if (rf & 1) {
1426
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1335
1427
  i0.ɵɵtext(2, "Judge Score");
1336
1428
  i0.ɵɵelementEnd();
1337
- i0.ɵɵelementStart(3, "div", 49);
1338
- i0.ɵɵelement(4, "i", 178);
1429
+ i0.ɵɵelementStart(3, "div", 51);
1430
+ i0.ɵɵelement(4, "i", 182);
1339
1431
  i0.ɵɵtext(5);
1340
1432
  i0.ɵɵelementEnd()();
1341
1433
  } if (rf & 2) {
@@ -1343,12 +1435,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Templa
1343
1435
  i0.ɵɵadvance(5);
1344
1436
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.JudgeScore, " ");
1345
1437
  } }
1346
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_196_Template(rf, ctx) { if (rf & 1) {
1347
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1438
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template(rf, ctx) { if (rf & 1) {
1439
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1348
1440
  i0.ɵɵtext(2, "First Token Time");
1349
1441
  i0.ɵɵelementEnd();
1350
- i0.ɵɵelementStart(3, "div", 49);
1351
- i0.ɵɵelement(4, "i", 179);
1442
+ i0.ɵɵelementStart(3, "div", 51);
1443
+ i0.ɵɵelement(4, "i", 94);
1352
1444
  i0.ɵɵtext(5);
1353
1445
  i0.ɵɵelementEnd()();
1354
1446
  } if (rf & 2) {
@@ -1356,12 +1448,12 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_196_Templa
1356
1448
  i0.ɵɵadvance(5);
1357
1449
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.FirstTokenTime, " ms ");
1358
1450
  } }
1359
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1360
- i0.ɵɵelementStart(0, "div", 62)(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");
1361
1453
  i0.ɵɵtext(2, "Cancellation Reason");
1362
1454
  i0.ɵɵelementEnd();
1363
- i0.ɵɵelementStart(3, "div", 49);
1364
- i0.ɵɵelement(4, "i", 182);
1455
+ i0.ɵɵelementStart(3, "div", 51);
1456
+ i0.ɵɵelement(4, "i", 185);
1365
1457
  i0.ɵɵtext(5);
1366
1458
  i0.ɵɵelementEnd()();
1367
1459
  } if (rf & 2) {
@@ -1369,31 +1461,31 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Condit
1369
1461
  i0.ɵɵadvance(5);
1370
1462
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CancellationReason, " ");
1371
1463
  } }
1372
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Template(rf, ctx) { if (rf & 1) {
1373
- i0.ɵɵelementStart(0, "div", 48)(1, "label");
1464
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Template(rf, ctx) { if (rf & 1) {
1465
+ i0.ɵɵelementStart(0, "div", 50)(1, "label");
1374
1466
  i0.ɵɵtext(2, "Cancelled");
1375
1467
  i0.ɵɵelementEnd();
1376
- i0.ɵɵelementStart(3, "div", 180);
1377
- i0.ɵɵelement(4, "i", 181);
1468
+ i0.ɵɵelementStart(3, "div", 183);
1469
+ i0.ɵɵelement(4, "i", 184);
1378
1470
  i0.ɵɵtext(5, " Yes ");
1379
1471
  i0.ɵɵelementEnd()();
1380
- i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_Conditional_6_Template, 6, 1, "div", 62);
1472
+ i0.ɵɵconditionalCreate(6, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_200_Conditional_6_Template, 6, 1, "div", 64);
1381
1473
  } if (rf & 2) {
1382
1474
  const ctx_r1 = i0.ɵɵnextContext(2);
1383
1475
  i0.ɵɵadvance(6);
1384
1476
  i0.ɵɵconditional(ctx_r1.record.CancellationReason ? 6 : -1);
1385
1477
  } }
1386
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template(rf, ctx) { if (rf & 1) {
1478
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_201_Template(rf, ctx) { if (rf & 1) {
1387
1479
  const _r23 = i0.ɵɵgetCurrentView();
1388
- i0.ɵɵelementStart(0, "div", 63)(1, "div", 99)(2, "h4", 122);
1480
+ i0.ɵɵelementStart(0, "div", 65)(1, "div", 103)(2, "h4", 126);
1389
1481
  i0.ɵɵtext(3, "Model Selection Details");
1390
1482
  i0.ɵɵelementEnd();
1391
- i0.ɵɵelementStart(4, "button", 102);
1392
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_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")); });
1393
- i0.ɵɵelement(5, "i", 103);
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);
1394
1486
  i0.ɵɵelementEnd()();
1395
- i0.ɵɵelementStart(6, "div", 154)(7, "mj-code-editor", 183);
1396
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_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); });
1397
1489
  i0.ɵɵelementEnd()()();
1398
1490
  } if (rf & 2) {
1399
1491
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1401,17 +1493,17 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Templa
1401
1493
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.formattedModelSelection);
1402
1494
  i0.ɵɵproperty("readonly", true)("language", "json")("lineWrapping", true);
1403
1495
  } }
1404
- function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template(rf, ctx) { if (rf & 1) {
1496
+ function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_202_Template(rf, ctx) { if (rf & 1) {
1405
1497
  const _r24 = i0.ɵɵgetCurrentView();
1406
- i0.ɵɵelementStart(0, "div", 64)(1, "div", 99)(2, "h4", 122);
1498
+ i0.ɵɵelementStart(0, "div", 66)(1, "div", 103)(2, "h4", 126);
1407
1499
  i0.ɵɵtext(3, "Error Details");
1408
1500
  i0.ɵɵelementEnd();
1409
- i0.ɵɵelementStart(4, "button", 102);
1410
- i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_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")); });
1411
- i0.ɵɵelement(5, "i", 103);
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);
1412
1504
  i0.ɵɵelementEnd()();
1413
- i0.ɵɵelementStart(6, "div", 154)(7, "mj-code-editor", 184);
1414
- i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_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); });
1415
1507
  i0.ɵɵelementEnd()()();
1416
1508
  } if (rf & 2) {
1417
1509
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1451,7 +1543,7 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1451
1543
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.refreshData()); });
1452
1544
  i0.ɵɵelement(29, "i", 24);
1453
1545
  i0.ɵɵelementEnd()()();
1454
- i0.ɵɵconditionalCreate(30, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template, 37, 10)(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Template, 23, 4, "div", 25);
1546
+ i0.ɵɵconditionalCreate(30, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_30_Template, 38, 11)(31, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_31_Template, 24, 5, "div", 25);
1455
1547
  i0.ɵɵelementEnd();
1456
1548
  i0.ɵɵelementStart(32, "div", 26)(33, "mj-accordion-panel", 27);
1457
1549
  i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_33_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onInputPanelToggle($event)); });
@@ -1478,174 +1570,177 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1478
1570
  i0.ɵɵtext(54);
1479
1571
  i0.ɵɵelementEnd();
1480
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);
1481
1574
  i0.ɵɵelementEnd();
1482
- i0.ɵɵelementStart(56, "div", 35)(57, "div", 36);
1483
- i0.ɵɵelement(58, "i", 40);
1484
- i0.ɵɵelementStart(59, "h4");
1485
- 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");
1486
1579
  i0.ɵɵelementEnd()();
1487
- i0.ɵɵelementStart(61, "div", 38);
1488
- i0.ɵɵtext(62);
1580
+ i0.ɵɵelementStart(62, "div", 41);
1581
+ i0.ɵɵtext(63);
1489
1582
  i0.ɵɵelementEnd();
1490
- 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);
1491
1584
  i0.ɵɵelementEnd();
1492
- i0.ɵɵelementStart(64, "div", 35)(65, "div", 36);
1493
- i0.ɵɵelement(66, "i", 41);
1494
- i0.ɵɵelementStart(67, "h4");
1495
- 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");
1496
1589
  i0.ɵɵelementEnd()();
1497
- i0.ɵɵelementStart(69, "div", 38);
1498
- i0.ɵɵtext(70);
1590
+ i0.ɵɵelementStart(70, "div", 43);
1591
+ i0.ɵɵtext(71);
1499
1592
  i0.ɵɵelementEnd();
1500
- i0.ɵɵconditionalCreate(71, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_71_Template, 3, 1, "div", 39);
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);
1501
1595
  i0.ɵɵelementEnd();
1502
- i0.ɵɵelementStart(72, "div", 35)(73, "div", 36);
1503
- i0.ɵɵelement(74, "i", 42);
1504
- i0.ɵɵelementStart(75, "h4");
1505
- i0.ɵɵtext(76, "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");
1506
1601
  i0.ɵɵelementEnd()();
1507
- i0.ɵɵelementStart(77, "div", 38);
1508
- i0.ɵɵtext(78);
1602
+ i0.ɵɵelementStart(80, "div", 41);
1603
+ i0.ɵɵtext(81);
1509
1604
  i0.ɵɵelementEnd();
1510
- i0.ɵɵconditionalCreate(79, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_79_Template, 3, 1, "div", 39);
1511
- i0.ɵɵconditionalCreate(80, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_80_Template, 2, 1, "div", 43);
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);
1512
1607
  i0.ɵɵelementEnd();
1513
- i0.ɵɵconditionalCreate(81, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_81_Template, 7, 1, "div", 35);
1514
- i0.ɵɵconditionalCreate(82, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_82_Template, 7, 1, "div", 35);
1515
- i0.ɵɵconditionalCreate(83, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_83_Template, 7, 1, "div", 35);
1608
+ i0.ɵɵconditionalCreate(84, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_84_Template, 7, 1, "div", 35);
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);
1516
1611
  i0.ɵɵelementEnd();
1517
- i0.ɵɵelementStart(84, "div", 44);
1518
- i0.ɵɵconditionalCreate(85, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_85_Template, 5, 1, "div", 45);
1519
- i0.ɵɵconditionalCreate(86, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_86_Template, 6, 1, "div", 45);
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);
1520
1615
  i0.ɵɵelementEnd()()();
1521
- i0.ɵɵconditionalCreate(87, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_87_Template, 37, 18, "mj-accordion-panel", 46);
1522
- i0.ɵɵconditionalCreate(88, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_88_Template, 5, 3, "mj-accordion-panel", 46);
1523
- i0.ɵɵelementStart(89, "mj-accordion-panel", 46);
1524
- i0.ɵɵtemplate(90, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_90_Template, 3, 0, "ng-template", 28);
1525
- i0.ɵɵelementStart(91, "div", 29)(92, "div", 47);
1526
- i0.ɵɵconditionalCreate(93, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_93_Template, 7, 1, "div", 48);
1527
- i0.ɵɵconditionalCreate(94, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_94_Template, 6, 3, "div", 48);
1528
- i0.ɵɵconditionalCreate(95, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_95_Template, 6, 1, "div", 48);
1529
- i0.ɵɵelementStart(96, "div", 48)(97, "label");
1530
- i0.ɵɵtext(98, "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");
1531
1626
  i0.ɵɵelementEnd();
1532
- i0.ɵɵelementStart(99, "div", 49);
1533
- i0.ɵɵelement(100, "i", 50);
1534
- i0.ɵɵtext(101);
1627
+ i0.ɵɵelementStart(102, "div", 51);
1628
+ i0.ɵɵelement(103, "i", 52);
1629
+ i0.ɵɵtext(104);
1535
1630
  i0.ɵɵelementEnd()();
1536
- i0.ɵɵelementStart(102, "div", 48)(103, "label");
1537
- i0.ɵɵtext(104, "Top P");
1631
+ i0.ɵɵelementStart(105, "div", 50)(106, "label");
1632
+ i0.ɵɵtext(107, "Top P");
1538
1633
  i0.ɵɵelementEnd();
1539
- i0.ɵɵelementStart(105, "div", 49);
1540
- i0.ɵɵelement(106, "i", 51);
1541
- i0.ɵɵtext(107);
1634
+ i0.ɵɵelementStart(108, "div", 51);
1635
+ i0.ɵɵelement(109, "i", 53);
1636
+ i0.ɵɵtext(110);
1542
1637
  i0.ɵɵelementEnd()();
1543
- i0.ɵɵelementStart(108, "div", 48)(109, "label");
1544
- i0.ɵɵtext(110, "Top K");
1638
+ i0.ɵɵelementStart(111, "div", 50)(112, "label");
1639
+ i0.ɵɵtext(113, "Top K");
1545
1640
  i0.ɵɵelementEnd();
1546
- i0.ɵɵelementStart(111, "div", 49);
1547
- i0.ɵɵelement(112, "i", 52);
1548
- i0.ɵɵtext(113);
1641
+ i0.ɵɵelementStart(114, "div", 51);
1642
+ i0.ɵɵelement(115, "i", 54);
1643
+ i0.ɵɵtext(116);
1549
1644
  i0.ɵɵelementEnd()();
1550
- i0.ɵɵelementStart(114, "div", 48)(115, "label");
1551
- i0.ɵɵtext(116, "Min P");
1645
+ i0.ɵɵelementStart(117, "div", 50)(118, "label");
1646
+ i0.ɵɵtext(119, "Min P");
1552
1647
  i0.ɵɵelementEnd();
1553
- i0.ɵɵelementStart(117, "div", 49);
1554
- i0.ɵɵelement(118, "i", 53);
1555
- i0.ɵɵtext(119);
1648
+ i0.ɵɵelementStart(120, "div", 51);
1649
+ i0.ɵɵelement(121, "i", 55);
1650
+ i0.ɵɵtext(122);
1556
1651
  i0.ɵɵelementEnd()();
1557
- i0.ɵɵelementStart(120, "div", 48)(121, "label");
1558
- i0.ɵɵtext(122, "Frequency Penalty");
1652
+ i0.ɵɵelementStart(123, "div", 50)(124, "label");
1653
+ i0.ɵɵtext(125, "Frequency Penalty");
1559
1654
  i0.ɵɵelementEnd();
1560
- i0.ɵɵelementStart(123, "div", 49);
1561
- i0.ɵɵelement(124, "i", 54);
1562
- i0.ɵɵtext(125);
1655
+ i0.ɵɵelementStart(126, "div", 51);
1656
+ i0.ɵɵelement(127, "i", 56);
1657
+ i0.ɵɵtext(128);
1563
1658
  i0.ɵɵelementEnd()();
1564
- i0.ɵɵelementStart(126, "div", 48)(127, "label");
1565
- i0.ɵɵtext(128, "Presence Penalty");
1659
+ i0.ɵɵelementStart(129, "div", 50)(130, "label");
1660
+ i0.ɵɵtext(131, "Presence Penalty");
1566
1661
  i0.ɵɵelementEnd();
1567
- i0.ɵɵelementStart(129, "div", 49);
1568
- i0.ɵɵelement(130, "i", 55);
1569
- i0.ɵɵtext(131);
1662
+ i0.ɵɵelementStart(132, "div", 51);
1663
+ i0.ɵɵelement(133, "i", 57);
1664
+ i0.ɵɵtext(134);
1570
1665
  i0.ɵɵelementEnd()();
1571
- i0.ɵɵelementStart(132, "div", 48)(133, "label");
1572
- i0.ɵɵtext(134, "Seed");
1666
+ i0.ɵɵelementStart(135, "div", 50)(136, "label");
1667
+ i0.ɵɵtext(137, "Seed");
1573
1668
  i0.ɵɵelementEnd();
1574
- i0.ɵɵelementStart(135, "div", 49);
1575
- i0.ɵɵelement(136, "i", 56);
1576
- i0.ɵɵtext(137);
1669
+ i0.ɵɵelementStart(138, "div", 51);
1670
+ i0.ɵɵelement(139, "i", 58);
1671
+ i0.ɵɵtext(140);
1577
1672
  i0.ɵɵelementEnd()();
1578
- i0.ɵɵelementStart(138, "div", 48)(139, "label");
1579
- i0.ɵɵtext(140, "Stop Sequences");
1673
+ i0.ɵɵelementStart(141, "div", 50)(142, "label");
1674
+ i0.ɵɵtext(143, "Stop Sequences");
1580
1675
  i0.ɵɵelementEnd();
1581
- i0.ɵɵelementStart(141, "div", 49);
1582
- i0.ɵɵelement(142, "i", 57);
1583
- i0.ɵɵtext(143);
1676
+ i0.ɵɵelementStart(144, "div", 51);
1677
+ i0.ɵɵelement(145, "i", 59);
1678
+ i0.ɵɵtext(146);
1584
1679
  i0.ɵɵelementEnd()();
1585
- i0.ɵɵelementStart(144, "div", 48)(145, "label");
1586
- i0.ɵɵtext(146, "Assistant Prefill");
1680
+ i0.ɵɵelementStart(147, "div", 50)(148, "label");
1681
+ i0.ɵɵtext(149, "Assistant Prefill");
1587
1682
  i0.ɵɵelementEnd();
1588
- i0.ɵɵelementStart(147, "div", 49);
1589
- i0.ɵɵelement(148, "i", 58);
1590
- i0.ɵɵtext(149);
1683
+ i0.ɵɵelementStart(150, "div", 51);
1684
+ i0.ɵɵelement(151, "i", 60);
1685
+ i0.ɵɵtext(152);
1591
1686
  i0.ɵɵelementEnd()();
1592
- i0.ɵɵconditionalCreate(150, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_150_Template, 7, 4, "div", 48);
1593
- i0.ɵɵconditionalCreate(151, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_151_Template, 7, 4, "div", 48);
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);
1594
1689
  i0.ɵɵelementEnd()()();
1595
- i0.ɵɵconditionalCreate(152, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_152_Template, 11, 5, "mj-accordion-panel", 46);
1596
- i0.ɵɵelementStart(153, "mj-accordion-panel", 27);
1597
- i0.ɵɵlistener("ExpandedChange", function MJAIPromptRunFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_153_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onModelSelectionPanelToggle($event)); });
1598
- i0.ɵɵtemplate(154, MJAIPromptRunFormComponentExtended_Conditional_0_ng_template_154_Template, 5, 2, "ng-template", 28);
1599
- i0.ɵɵelementStart(155, "div", 29)(156, "div", 47)(157, "div", 48)(158, "label");
1600
- i0.ɵɵtext(159, "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");
1601
1696
  i0.ɵɵelementEnd();
1602
- i0.ɵɵelementStart(160, "div", 49);
1603
- i0.ɵɵelement(161, "i", 59);
1604
- i0.ɵɵtext(162);
1697
+ i0.ɵɵelementStart(163, "div", 51);
1698
+ i0.ɵɵelement(164, "i", 61);
1699
+ i0.ɵɵtext(165);
1605
1700
  i0.ɵɵelementEnd()();
1606
- i0.ɵɵelementStart(163, "div", 48)(164, "label");
1607
- i0.ɵɵtext(165, "Selection Strategy");
1701
+ i0.ɵɵelementStart(166, "div", 50)(167, "label");
1702
+ i0.ɵɵtext(168, "Selection Strategy");
1608
1703
  i0.ɵɵelementEnd();
1609
- i0.ɵɵelementStart(166, "div", 49);
1610
- i0.ɵɵelement(167, "i", 60);
1611
- i0.ɵɵtext(168);
1704
+ i0.ɵɵelementStart(169, "div", 51);
1705
+ i0.ɵɵelement(170, "i", 62);
1706
+ i0.ɵɵtext(171);
1612
1707
  i0.ɵɵelementEnd()();
1613
- i0.ɵɵelementStart(169, "div", 48)(170, "label");
1614
- i0.ɵɵtext(171, "Model Power Rank");
1708
+ i0.ɵɵelementStart(172, "div", 50)(173, "label");
1709
+ i0.ɵɵtext(174, "Model Power Rank");
1615
1710
  i0.ɵɵelementEnd();
1616
- i0.ɵɵelementStart(172, "div", 49);
1617
- i0.ɵɵelement(173, "i", 61);
1618
- i0.ɵɵtext(174);
1711
+ i0.ɵɵelementStart(175, "div", 51);
1712
+ i0.ɵɵelement(176, "i", 63);
1713
+ i0.ɵɵtext(177);
1619
1714
  i0.ɵɵelementEnd()();
1620
- i0.ɵɵelementStart(175, "div", 48)(176, "label");
1621
- i0.ɵɵtext(177, "Cache Hit");
1715
+ i0.ɵɵelementStart(178, "div", 50)(179, "label");
1716
+ i0.ɵɵtext(180, "Cache Hit");
1622
1717
  i0.ɵɵelementEnd();
1623
- i0.ɵɵelementStart(178, "div", 49);
1624
- i0.ɵɵelement(179, "i");
1625
- i0.ɵɵtext(180);
1718
+ i0.ɵɵelementStart(181, "div", 51);
1719
+ i0.ɵɵelement(182, "i");
1720
+ i0.ɵɵtext(183);
1626
1721
  i0.ɵɵelementEnd()();
1627
- i0.ɵɵconditionalCreate(181, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_181_Template, 7, 1, "div", 62);
1628
- i0.ɵɵconditionalCreate(182, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_182_Template, 7, 1, "div", 48);
1629
- i0.ɵɵconditionalCreate(183, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_183_Template, 6, 1, "div", 48);
1630
- i0.ɵɵelementStart(184, "div", 48)(185, "label");
1631
- i0.ɵɵtext(186, "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");
1632
1727
  i0.ɵɵelementEnd();
1633
- i0.ɵɵelementStart(187, "div", 49);
1634
- i0.ɵɵelement(188, "i");
1635
- i0.ɵɵtext(189);
1728
+ i0.ɵɵelementStart(190, "div", 51);
1729
+ i0.ɵɵelement(191, "i");
1730
+ i0.ɵɵtext(192);
1636
1731
  i0.ɵɵelementEnd()();
1637
- i0.ɵɵelementStart(190, "div", 48)(191, "label");
1638
- i0.ɵɵtext(192, "Streaming Enabled");
1732
+ i0.ɵɵelementStart(193, "div", 50)(194, "label");
1733
+ i0.ɵɵtext(195, "Streaming Enabled");
1639
1734
  i0.ɵɵelementEnd();
1640
- i0.ɵɵelementStart(193, "div", 49);
1641
- i0.ɵɵelement(194, "i");
1642
- i0.ɵɵtext(195);
1735
+ i0.ɵɵelementStart(196, "div", 51);
1736
+ i0.ɵɵelement(197, "i");
1737
+ i0.ɵɵtext(198);
1643
1738
  i0.ɵɵelementEnd()();
1644
- i0.ɵɵconditionalCreate(196, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_196_Template, 6, 1, "div", 48);
1645
- i0.ɵɵconditionalCreate(197, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_197_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);
1646
1741
  i0.ɵɵelementEnd();
1647
- i0.ɵɵconditionalCreate(198, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_198_Template, 8, 4, "div", 63);
1648
- i0.ɵɵconditionalCreate(199, MJAIPromptRunFormComponentExtended_Conditional_0_Conditional_199_Template, 8, 4, "div", 64);
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);
1649
1744
  i0.ɵɵelementEnd()()()()();
1650
1745
  } if (rf & 2) {
1651
1746
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1687,45 +1782,51 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1687
1782
  i0.ɵɵadvance(2);
1688
1783
  i0.ɵɵproperty("Expanded", ctx_r1.metricsExpanded);
1689
1784
  i0.ɵɵadvance(10);
1690
- 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);
1691
1788
  i0.ɵɵadvance();
1692
- 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);
1693
1790
  i0.ɵɵadvance(7);
1694
1791
  i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensCompletion));
1695
1792
  i0.ɵɵadvance();
1696
- 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);
1697
1794
  i0.ɵɵadvance(7);
1698
- i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.record.TokensUsed));
1795
+ i0.ɵɵtextInterpolate(ctx_r1.formatTokens(ctx_r1.TotalTokensProcessed));
1699
1796
  i0.ɵɵadvance();
1700
- i0.ɵɵconditional(ctx_r1.record.TokensUsedRollup && ctx_r1.record.TokensUsedRollup !== ctx_r1.record.TokensUsed ? 71 : -1);
1797
+ i0.ɵɵconditional(ctx_r1.CachedTokens > 0 ? 72 : -1);
1798
+ i0.ɵɵadvance();
1799
+ i0.ɵɵconditional(ctx_r1.record.TokensUsedRollup && ctx_r1.record.TokensUsedRollup !== ctx_r1.record.TokensUsed ? 73 : -1);
1800
+ i0.ɵɵadvance();
1801
+ i0.ɵɵconditional(ctx_r1.record.TokensCacheRead != null || ctx_r1.record.TokensCacheWrite != null ? 74 : -1);
1701
1802
  i0.ɵɵadvance(7);
1702
1803
  i0.ɵɵtextInterpolate(ctx_r1.formatCost(ctx_r1.record.Cost));
1703
1804
  i0.ɵɵadvance();
1704
- i0.ɵɵconditional(ctx_r1.record.TotalCost && ctx_r1.record.TotalCost !== ctx_r1.record.Cost ? 79 : -1);
1805
+ i0.ɵɵconditional(ctx_r1.record.TotalCost && ctx_r1.record.TotalCost !== ctx_r1.record.Cost ? 82 : -1);
1705
1806
  i0.ɵɵadvance();
1706
- i0.ɵɵconditional(ctx_r1.record.CostCurrency ? 80 : -1);
1807
+ i0.ɵɵconditional(ctx_r1.record.CostCurrency ? 83 : -1);
1707
1808
  i0.ɵɵadvance();
1708
- i0.ɵɵconditional(ctx_r1.record.QueueTime != null ? 81 : -1);
1809
+ i0.ɵɵconditional(ctx_r1.record.QueueTime != null ? 84 : -1);
1709
1810
  i0.ɵɵadvance();
1710
- i0.ɵɵconditional(ctx_r1.record.PromptTime != null ? 82 : -1);
1811
+ i0.ɵɵconditional(ctx_r1.record.PromptTime != null ? 85 : -1);
1711
1812
  i0.ɵɵadvance();
1712
- i0.ɵɵconditional(ctx_r1.record.CompletionTime != null ? 83 : -1);
1813
+ i0.ɵɵconditional(ctx_r1.record.CompletionTime != null ? 86 : -1);
1713
1814
  i0.ɵɵadvance(2);
1714
- i0.ɵɵconditional(ctx_r1.record.ExecutionOrder !== null ? 85 : -1);
1815
+ i0.ɵɵconditional(ctx_r1.record.ExecutionOrder !== null ? 88 : -1);
1715
1816
  i0.ɵɵadvance();
1716
- i0.ɵɵconditional(ctx_r1.record.AgentID ? 86 : -1);
1817
+ i0.ɵɵconditional(ctx_r1.record.AgentID ? 89 : -1);
1717
1818
  i0.ɵɵadvance();
1718
- i0.ɵɵconditional(ctx_r1.record && (ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 0 || ctx_r1.record.ValidationBehavior) ? 87 : -1);
1819
+ i0.ɵɵconditional(ctx_r1.record && (ctx_r1.record.ValidationAttemptCount && ctx_r1.record.ValidationAttemptCount > 0 || ctx_r1.record.ValidationBehavior) ? 90 : -1);
1719
1820
  i0.ɵɵadvance();
1720
- i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ? 88 : -1);
1821
+ i0.ɵɵconditional(ctx_r1.record.ParentID || ctx_r1.childRuns.length > 0 ? 91 : -1);
1721
1822
  i0.ɵɵadvance();
1722
1823
  i0.ɵɵproperty("Expanded", false);
1723
1824
  i0.ɵɵadvance(4);
1724
- i0.ɵɵconditional(ctx_r1.record.AgentID ? 93 : -1);
1825
+ i0.ɵɵconditional(ctx_r1.record.AgentID ? 96 : -1);
1725
1826
  i0.ɵɵadvance();
1726
- i0.ɵɵconditional(ctx_r1.record.RunType ? 94 : -1);
1827
+ i0.ɵɵconditional(ctx_r1.record.RunType ? 97 : -1);
1727
1828
  i0.ɵɵadvance();
1728
- i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 95 : -1);
1829
+ i0.ɵɵconditional(ctx_r1.record.ResponseFormat ? 98 : -1);
1729
1830
  i0.ɵɵadvance(4);
1730
1831
  i0.ɵɵclassProp("null-value", ctx_r1.record.Temperature === null || ctx_r1.record.Temperature === undefined);
1731
1832
  i0.ɵɵadvance(2);
@@ -1763,11 +1864,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1763
1864
  i0.ɵɵadvance(2);
1764
1865
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.AssistantPrefill || "\u2014", " ");
1765
1866
  i0.ɵɵadvance();
1766
- i0.ɵɵconditional(ctx_r1.record.RunAt ? 150 : -1);
1867
+ i0.ɵɵconditional(ctx_r1.record.RunAt ? 153 : -1);
1767
1868
  i0.ɵɵadvance();
1768
- i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 151 : -1);
1869
+ i0.ɵɵconditional(ctx_r1.record.CompletedAt ? 154 : -1);
1769
1870
  i0.ɵɵadvance();
1770
- i0.ɵɵconditional(ctx_r1.record.ModelSpecificResponseDetails ? 152 : -1);
1871
+ i0.ɵɵconditional(ctx_r1.record.ModelSpecificResponseDetails ? 155 : -1);
1771
1872
  i0.ɵɵadvance();
1772
1873
  i0.ɵɵproperty("Expanded", false);
1773
1874
  i0.ɵɵadvance(9);
@@ -1783,11 +1884,11 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1783
1884
  i0.ɵɵadvance();
1784
1885
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.CacheHit ? "Yes" : "No", " ");
1785
1886
  i0.ɵɵadvance();
1786
- i0.ɵɵconditional(ctx_r1.record.CacheKey ? 181 : -1);
1887
+ i0.ɵɵconditional(ctx_r1.record.CacheKey ? 184 : -1);
1787
1888
  i0.ɵɵadvance();
1788
- i0.ɵɵconditional(ctx_r1.record.JudgeID ? 182 : -1);
1889
+ i0.ɵɵconditional(ctx_r1.record.JudgeID ? 185 : -1);
1789
1890
  i0.ɵɵadvance();
1790
- i0.ɵɵconditional(ctx_r1.record.JudgeScore !== null ? 183 : -1);
1891
+ i0.ɵɵconditional(ctx_r1.record.JudgeScore !== null ? 186 : -1);
1791
1892
  i0.ɵɵadvance(5);
1792
1893
  i0.ɵɵclassMap(ctx_r1.record.WasSelectedResult ? "fa-solid fa-trophy" : "fa-solid fa-times");
1793
1894
  i0.ɵɵadvance();
@@ -1797,36 +1898,36 @@ function MJAIPromptRunFormComponentExtended_Conditional_0_Template(rf, ctx) { if
1797
1898
  i0.ɵɵadvance();
1798
1899
  i0.ɵɵtextInterpolate1(" ", ctx_r1.record.StreamingEnabled ? "Yes" : "No", " ");
1799
1900
  i0.ɵɵadvance();
1800
- i0.ɵɵconditional(ctx_r1.record.FirstTokenTime !== null ? 196 : -1);
1901
+ i0.ɵɵconditional(ctx_r1.record.FirstTokenTime !== null ? 199 : -1);
1801
1902
  i0.ɵɵadvance();
1802
- i0.ɵɵconditional(ctx_r1.record.Cancelled ? 197 : -1);
1903
+ i0.ɵɵconditional(ctx_r1.record.Cancelled ? 200 : -1);
1803
1904
  i0.ɵɵadvance();
1804
- i0.ɵɵconditional(ctx_r1.record.ModelSelection ? 198 : -1);
1905
+ i0.ɵɵconditional(ctx_r1.record.ModelSelection ? 201 : -1);
1805
1906
  i0.ɵɵadvance();
1806
- i0.ɵɵconditional(ctx_r1.record.ErrorDetails ? 199 : -1);
1907
+ i0.ɵɵconditional(ctx_r1.record.ErrorDetails ? 202 : -1);
1807
1908
  } }
1808
1909
  function MJAIPromptRunFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1809
1910
  const _r25 = i0.ɵɵgetCurrentView();
1810
- i0.ɵɵelementStart(0, "div", 185);
1911
+ i0.ɵɵelementStart(0, "div", 188);
1811
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()); });
1812
- i0.ɵɵelementStart(1, "div", 186);
1913
+ i0.ɵɵelementStart(1, "div", 189);
1813
1914
  i0.ɵɵlistener("click", function MJAIPromptRunFormComponentExtended_Conditional_1_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r25); return i0.ɵɵresetView($event.stopPropagation()); });
1814
- i0.ɵɵelementStart(2, "div", 187)(3, "span", 188);
1815
- i0.ɵɵelement(4, "i", 103);
1915
+ i0.ɵɵelementStart(2, "div", 190)(3, "span", 191);
1916
+ i0.ɵɵelement(4, "i", 107);
1816
1917
  i0.ɵɵtext(5);
1817
1918
  i0.ɵɵelementEnd();
1818
- i0.ɵɵelementStart(6, "div", 189)(7, "button", 190);
1919
+ i0.ɵɵelementStart(6, "div", 192)(7, "button", 193);
1819
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)); });
1820
- i0.ɵɵelement(8, "i", 101);
1921
+ i0.ɵɵelement(8, "i", 105);
1821
1922
  i0.ɵɵtext(9, " Copy ");
1822
1923
  i0.ɵɵelementEnd();
1823
- i0.ɵɵelementStart(10, "button", 191);
1924
+ i0.ɵɵelementStart(10, "button", 194);
1824
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()); });
1825
- i0.ɵɵelement(11, "i", 192);
1926
+ i0.ɵɵelement(11, "i", 195);
1826
1927
  i0.ɵɵtext(12, " Close ");
1827
1928
  i0.ɵɵelementEnd()()();
1828
- i0.ɵɵelementStart(13, "div", 193);
1829
- i0.ɵɵelement(14, "mj-code-editor", 194);
1929
+ i0.ɵɵelementStart(13, "div", 196);
1930
+ i0.ɵɵelement(14, "mj-code-editor", 197);
1830
1931
  i0.ɵɵelementEnd()()();
1831
1932
  } if (rf & 2) {
1832
1933
  const ctx_r1 = i0.ɵɵnextContext();
@@ -2174,6 +2275,43 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
2174
2275
  return '-';
2175
2276
  return tokens.toLocaleString();
2176
2277
  }
2278
+ /**
2279
+ * Total tokens the provider actually processed = uncached (TokensUsed = prompt+completion) PLUS
2280
+ * the cache buckets. TokensUsed alone excludes cache by design, so a heavily-cached run looks
2281
+ * tiny; this is the real throughput figure for the headline. Equals TokensUsed when no caching.
2282
+ */
2283
+ get TotalTokensProcessed() {
2284
+ const r = this.record;
2285
+ if (!r)
2286
+ return 0;
2287
+ return (r.TokensUsed ?? 0) + (r.TokensCacheRead ?? 0) + (r.TokensCacheWrite ?? 0);
2288
+ }
2289
+ /** Sum of cache read + write tokens for this run (the cached portion of TotalTokensProcessed). */
2290
+ get CachedTokens() {
2291
+ const r = this.record;
2292
+ if (!r)
2293
+ return 0;
2294
+ return (r.TokensCacheRead ?? 0) + (r.TokensCacheWrite ?? 0);
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
+ }
2308
+ /** Percentage of this run's input tokens served from the provider's prompt cache. */
2309
+ get CacheHitRatePct() {
2310
+ const read = this.record?.TokensCacheRead ?? 0;
2311
+ const write = this.record?.TokensCacheWrite ?? 0;
2312
+ const totalInput = (this.record?.TokensPrompt ?? 0) + read + write;
2313
+ return totalInput > 0 ? (read / totalInput) * 100 : 0;
2314
+ }
2177
2315
  getRunTypeIcon(runType) {
2178
2316
  switch (runType) {
2179
2317
  case 'Single':
@@ -2316,14 +2454,14 @@ let MJAIPromptRunFormComponentExtended = class MJAIPromptRunFormComponentExtende
2316
2454
  // Don't auto-expand validation panel anymore - let user expand when needed
2317
2455
  }
2318
2456
  static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJAIPromptRunFormComponentExtended_BaseFactory; return function MJAIPromptRunFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJAIPromptRunFormComponentExtended_BaseFactory || (ɵMJAIPromptRunFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJAIPromptRunFormComponentExtended)))(__ngFactoryType__ || MJAIPromptRunFormComponentExtended); }; })(); }
2319
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIPromptRunFormComponentExtended, selectors: [["mj-ai-prompt-run-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [["form", "ngForm"], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "fullscreen-overlay"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "prompt-run-header"], [1, "header-content"], [1, "run-overview"], [1, "run-icon-wrapper"], [1, "run-info"], [1, "run-title"], [1, "run-id"], [1, "run-meta"], [1, "meta-card", "status-card"], [1, "c3-card-label"], [1, "meta-card-body"], [1, "status-indicator"], [1, "meta-card", "execution-card"], [1, "model-card-c3"], ["title", "View Original Run", 1, "original-run"], [1, "run-actions"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Re-run this prompt", 3, "click"], [1, "fa-solid", "fa-play-circle"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Refresh data", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "metrics-bar"], [1, "form-content", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [2, "margin-bottom", "8px", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "panel-content"], [1, "nested-panels"], [1, "empty-state"], [1, "error-message"], [1, "json-editor-container"], [1, "metrics-grid"], [1, "metric-card"], [1, "metric-header"], [1, "fa-solid", "fa-message"], [1, "metric-value", "large"], [1, "metric-rollup"], [1, "fa-solid", "fa-reply"], [1, "fa-solid", "fa-coins"], [1, "fa-solid", "fa-dollar-sign"], [1, "metric-currency"], [1, "additional-metrics"], [1, "metric-row"], [2, "margin-bottom", "8px", 3, "Expanded"], [1, "detail-fields-grid"], [1, "detail-field"], [1, "detail-value"], [1, "fa-solid", "fa-temperature-high"], [1, "fa-solid", "fa-percentage"], [1, "fa-solid", "fa-list-ol"], [1, "fa-solid", "fa-filter"], [1, "fa-solid", "fa-repeat"], [1, "fa-solid", "fa-plus-circle"], [1, "fa-solid", "fa-seedling"], [1, "fa-solid", "fa-stop-circle"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-strategy"], [1, "fa-solid", "fa-ranking-star"], [1, "detail-field", "full-width"], [1, "model-selection-json"], [1, "error-details-json"], [1, "prompt-card-c3"], [1, "meta-card", "prompt-single-card"], ["title", "View Agent Prompt", 1, "c3-child-section", 3, "click"], [1, "fa-solid", "fa-comment", "prompt-icon"], [1, "c3-divider"], [1, "c3-line"], [1, "c3-divider-label"], ["title", "View System Prompt", 1, "c3-parent-section", 3, "click"], [1, "fa-solid", "fa-cog"], [1, "fa-solid", "fa-arrow-up-right-from-square", "c3-link-icon"], ["title", "View Prompt", 1, "meta-card-body", "clickable", 3, "click"], [1, "fa-solid", "fa-comment-dots", 2, "color", "var(--mj-brand-primary)"], ["title", "View Model", 1, "c3-card-body", 3, "click"], [1, "c3-model-name"], [1, "fa-solid", "fa-microchip"], [1, "c3-vendor-name"], [1, "fa-solid", "fa-level-up-alt"], [1, "original-link", 3, "click"], [1, "metric-item"], [1, "metric-content"], [1, "metric-label"], [1, "metric-value"], ["href", "javascript:void(0)", 1, "config-link", 3, "click"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-tachometer-alt"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-calendar"], [1, "panel-title"], [1, "fa-solid", "fa-comment-dots"], [1, "panel-badge"], [1, "sub-expansion-panel", 2, "margin-bottom", "8px", 3, "Expanded"], [1, "sub-panel-content"], [1, "loading-state"], [3, "messages"], [1, "json-toolbar"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Copy JSON", 3, "click"], [1, "fa-solid", "fa-copy"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View full screen", 3, "click"], [1, "fa-solid", "fa-expand"], ["name", "formattedMessages", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "sub-panel-title"], [1, "fa-solid", "fa-comments"], [1, "panel-count"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-comment-slash"], [1, "fa-solid", "fa-database"], ["name", "formattedData", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-square-check"], [1, "panel-badge", "error"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-content"], ["name", "formattedResult", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-inbox"], [1, "error-info"], [1, "finish-reason"], [1, "error-details"], [1, "error-hint"], [2, "margin", "0"], [2, "height", "200px", "width", "100%", 3, "ngModel", "disabled", "language", "lineWrapping"], [1, "fa-solid", "fa-chart-line"], [1, "fa-solid", "fa-hourglass-start"], [1, "fa-solid", "fa-brain"], [1, "fa-solid", "fa-flag-checkered"], [1, "metric-value", "link", 3, "click"], [1, "fa-solid", "fa-external-link"], [1, "validation-summary"], [1, "summary-header"], [1, "validation-status"], [1, "validation-metrics"], [1, "metric-card", "small"], [1, "validation-error"], [1, "common-error"], [1, "retry-timeline"], [1, "validation-attempts"], [1, "validation-json"], [1, "fa-solid", "fa-shield-check"], [1, "panel-badge", "success"], [1, "error-count"], [1, "timeline-info"], [1, "timeline-stat"], [1, "fa-solid", "fa-stopwatch"], [1, "attempts-list"], [1, "attempt-item", 3, "success", "failed"], [1, "attempt-item"], [1, "attempt-number"], [1, "attempt-details"], [1, "attempt-time"], [1, "output-length"], [1, "attempt-error"], [1, "json-viewer-container"], ["name", "formattedValidationSummary", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedValidationAttempts", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "parent-run-section"], [1, "child-runs-section"], [1, "fa-solid", "fa-sitemap"], [1, "run-item", "parent", 3, "click"], [1, "run-item-icon"], [1, "run-item-content"], [1, "run-item-title"], [1, "run-item-type"], [1, "run-item-meta"], [1, "fa-solid", "fa-level-down-alt"], [1, "runs-list"], [1, "run-item", "child"], [1, "run-item", "child", 3, "click"], [1, "execution-order"], ["title", "View Agent", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-check-circle"], ["name", "formattedModelSpecificResponseDetails", 2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [1, "fa-solid", "fa-key"], ["title", "View Judge Prompt", 1, "detail-value", "clickable", 3, "click"], [1, "fa-solid", "fa-gavel"], [1, "fa-solid", "fa-star"], [1, "fa-solid", "fa-bolt"], [1, "detail-value", "error"], [1, "fa-solid", "fa-ban"], [1, "fa-solid", "fa-exclamation-circle"], ["name", "formattedModelSelection", 2, "height", "300px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], ["name", "formattedErrorDetails", 2, "height", "200px", "width", "100%", 3, "ngModelChange", "ngModel", "readonly", "language", "lineWrapping"], [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) {
2320
- i0.ɵɵconditionalCreate(0, MJAIPromptRunFormComponentExtended_Conditional_0_Template, 200, 101, "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);
2321
2459
  i0.ɵɵconditionalCreate(1, MJAIPromptRunFormComponentExtended_Conditional_1_Template, 15, 4, "div", 2);
2322
2460
  } if (rf & 2) {
2323
2461
  i0.ɵɵconditional(ctx.record ? 0 : -1);
2324
2462
  i0.ɵɵadvance();
2325
2463
  i0.ɵɵconditional(ctx.FullScreenContent ? 1 : -1);
2326
- } }, dependencies: [i1.ɵNgNoValidate, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ChatMessageViewerComponent, i6.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n\n\n.error-info[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.error-details[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint[_ngcontent-%COMP%] {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n\n\n.prompt-run-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.run-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n\n\n.meta-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n.status-indicator[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n\n\n.prompt-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section[_ngcontent-%COMP%] i.prompt-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line[_ngcontent-%COMP%] {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label[_ngcontent-%COMP%] {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.c3-link-icon[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover .c3-link-icon[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n\n\n.model-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label[_ngcontent-%COMP%] {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name[_ngcontent-%COMP%] {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n\n\n.sub-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n\n\n.nested-panels[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-panel-content[_ngcontent-%COMP%] mj-chat-message-viewer[_ngcontent-%COMP%] {\n display: block;\n min-height: 200px;\n max-height: 750px; \n\n height: auto;\n overflow: hidden;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n\n\n.json-editor-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.metrics-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n\n\n.additional-metrics[_ngcontent-%COMP%] {\n padding-top: 16px;\n}\n\n.metric-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n\n\n.parent-run-section[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.parent-run-section[_ngcontent-%COMP%]:last-child, \n.child-runs-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n\n\n.detail-fields-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%]:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n opacity: 0.5;\n}\n\n\n\nmj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n}\n\n\n\n.validation-summary[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.summary-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n\n\n.retry-timeline[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.retry-timeline[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n\n\n.validation-attempts[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.validation-attempts[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.attempt-details[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.attempt-error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n\n\n.validation-json[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.validation-json[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n\n.panel-badge.success[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: white;\n}\n\n\n\n.fullscreen-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}"], changeDetection: 0 }); }
2464
+ } }, dependencies: [i1.ɵNgNoValidate, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ChatMessageViewerComponent, i6.DecimalPipe, i6.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0 !important;\n overflow: hidden;\n}\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n\n\n.error-info[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 16px;\n background-color: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 8px;\n}\n\n.finish-reason[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-status-error);\n font-size: 14px;\n}\n\n.error-details[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.error-details[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: color-mix(in srgb, var(--mj-status-error) 80%, black);\n font-size: 14px;\n font-weight: 600;\n}\n\n.error-hint[_ngcontent-%COMP%] {\n margin: 0;\n color: color-mix(in srgb, var(--mj-status-error) 70%, black);\n font-size: 14px;\n font-style: italic;\n}\n\n\n\n.prompt-run-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n padding: 20px;\n margin-bottom: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n margin-bottom: 16px;\n}\n\n.run-overview[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex: 1;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.run-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 1.5em;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-size: 0.8em;\n color: var(--mj-text-muted);\n font-weight: 400;\n font-family: 'Courier New', monospace;\n}\n\n.run-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n\n\n.meta-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n}\n\n.meta-card-body[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: color 0.15s;\n}\n\n.meta-card-body.clickable[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n.status-indicator[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n\n\n.prompt-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 10px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.c3-child-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n font-size: 0.92em;\n font-weight: 600;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-child-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n.c3-child-section[_ngcontent-%COMP%] i.prompt-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n}\n\n.c3-divider[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 14px;\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.c3-line[_ngcontent-%COMP%] {\n flex: 1;\n height: 1px;\n background: var(--mj-border-default);\n}\n\n.c3-divider-label[_ngcontent-%COMP%] {\n font-size: 0.55rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.c3-parent-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px 9px 14px;\n font-size: 0.76em;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: color 0.15s;\n border-left: 3px solid color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.c3-parent-section[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n\n.c3-link-icon[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.6rem !important;\n opacity: 0.4;\n}\n\n.c3-parent-section[_ngcontent-%COMP%]:hover .c3-link-icon[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n\n\n.model-card-c3[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: border-color 0.15s;\n}\n\n.model-card-c3[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.c3-card-label[_ngcontent-%COMP%] {\n font-size: 0.6rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n padding: 4px 10px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.c3-card-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n font-size: 0.82em;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.c3-model-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.c3-model-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.9rem;\n}\n\n.c3-vendor-name[_ngcontent-%COMP%] {\n font-size: 0.72em;\n color: var(--mj-text-muted);\n font-weight: 400;\n padding-left: 22px;\n}\n\n.original-run[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 16px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n font-size: 0.85em;\n}\n\n.original-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.original-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-status-error) 85%, black);\n text-decoration: underline;\n}\n\n.run-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-wrap: wrap;\n}\n\n.metric-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.metric-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.metric-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n text-decoration: underline;\n}\n\n\n\n.form-content[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n\n\n.sub-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 0.95em;\n}\n\n.sub-panel-content[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n\n\n.nested-panels[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-panel-content[_ngcontent-%COMP%] mj-chat-message-viewer[_ngcontent-%COMP%] {\n display: block;\n min-height: 200px;\n max-height: 750px; \n\n height: auto;\n overflow: hidden;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n\n\n.sub-expansion-panel[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n font-size: 0.75em;\n font-weight: 500;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: white;\n}\n\n.panel-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 400;\n font-size: 0.9em;\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: none !important;\n overflow: visible !important;\n}\n\n\n\n.json-editor-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.json-toolbar[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: flex-end;\n}\n\n\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 6px;\n padding: 16px;\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.error-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5em;\n color: var(--mj-status-error);\n flex-shrink: 0;\n}\n\n.error-content[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 1em;\n}\n\n.error-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 40px;\n color: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3em;\n margin-bottom: 16px;\n opacity: 0.6;\n color: var(--mj-brand-primary);\n}\n\n.loading-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n}\n\n\n\n.metrics-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-bottom: 24px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 20px;\n}\n\n.metric-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.metric-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.metric-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9em;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.metric-value.large[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.metric-rollup[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.metric-currency[_ngcontent-%COMP%] {\n margin-top: 4px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n}\n\n\n\n.additional-metrics[_ngcontent-%COMP%] {\n padding-top: 16px;\n}\n\n.metric-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.metric-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-primary);\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color 0.2s;\n}\n\n.metric-row[_ngcontent-%COMP%] .metric-value.link[_ngcontent-%COMP%]:hover {\n color: color-mix(in srgb, var(--mj-brand-primary) 75%, black);\n}\n\n\n\n.parent-run-section[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.parent-run-section[_ngcontent-%COMP%]:last-child, \n.child-runs-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.parent-run-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%], \n.child-runs-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 0.95em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.run-item[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.run-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n}\n\n.run-item.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.run-item.parent[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, var(--mj-bg-surface));\n}\n\n.run-item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.run-item-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.run-item-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.execution-order[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.75em;\n font-weight: 600;\n}\n\n.run-item-type[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n.run-item-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 0.85em;\n color: var(--mj-text-muted);\n}\n\n.run-item-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.status-indicator[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]:last-child {\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n\n\n.detail-fields-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 24px;\n width: 100%;\n min-height: auto;\n overflow: visible;\n}\n\n.detail-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n color: var(--mj-text-muted);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 1em;\n color: var(--mj-text-primary);\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: all 0.2s;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n color: var(--mj-text-muted);\n font-size: 1.1em;\n width: 20px;\n text-align: center;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n border-color: var(--mj-border-strong);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.detail-value.clickable[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:last-child {\n margin-left: auto;\n font-size: 0.85em;\n opacity: 0.6;\n}\n\n.detail-value.clickable[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%]:last-child {\n opacity: 1;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n.detail-value.null-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n opacity: 0.5;\n}\n\n\n\nmj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n}\n\n\n\n.validation-summary[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.summary-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.summary-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.validation-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 16px;\n border-radius: 20px;\n font-weight: 500;\n font-size: 0.9em;\n}\n\n.validation-status.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.validation-status.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.validation-metrics[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.metric-card.small[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-label[_ngcontent-%COMP%] {\n font-size: 0.8em;\n margin-bottom: 8px;\n font-weight: 600;\n}\n\n.metric-card.small[_ngcontent-%COMP%] .metric-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: 700;\n}\n\n.validation-error[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n border-radius: 8px;\n padding: 16px;\n margin-bottom: 16px;\n}\n\n.validation-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-error);\n font-size: 0.95em;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.validation-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%], \n.common-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.error-count[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n background: var(--mj-status-error);\n color: white;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 500;\n}\n\n\n\n.retry-timeline[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.retry-timeline[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.timeline-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n flex-wrap: wrap;\n}\n\n.timeline-stat[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.timeline-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n\n\n.validation-attempts[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.validation-attempts[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.attempts-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.attempt-item[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n}\n\n.attempt-item.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 18%, var(--mj-bg-surface));\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 6%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 18%, var(--mj-bg-surface));\n}\n\n.attempt-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.attempt-item.success[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.attempt-item.failed[_ngcontent-%COMP%] .attempt-number[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.attempt-details[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 0.85em;\n}\n\n.attempt-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.attempt-error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n flex: 1 0 100%;\n}\n\n.output-length[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n\n\n.validation-json[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.validation-json[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 1em;\n color: var(--mj-text-secondary);\n}\n\n.json-viewer-container[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n\n.panel-badge.success[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: white;\n}\n\n\n\n.fullscreen-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: var(--mj-bg-overlay, rgba(0, 0, 0, 0.6));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.fullscreen-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n max-width: 95vw;\n max-height: 95vh;\n background: var(--mj-bg-surface);\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.fullscreen-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.fullscreen-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.fullscreen-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.fullscreen-body[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}"], changeDetection: 0 }); }
2327
2465
  };
2328
2466
  MJAIPromptRunFormComponentExtended = __decorate([
2329
2467
  RegisterClass(BaseFormComponent, 'MJ: AI Prompt Runs')
@@ -2331,7 +2469,7 @@ MJAIPromptRunFormComponentExtended = __decorate([
2331
2469
  export { MJAIPromptRunFormComponentExtended };
2332
2470
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptRunFormComponentExtended, [{
2333
2471
  type: Component,
2334
- args: [{ standalone: false, selector: 'mj-ai-prompt-run-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <!-- Status Card -->\n <div class=\"meta-card status-card\">\n <div class=\"c3-card-label\">Status</div>\n <div class=\"meta-card-body\">\n <span class=\"status-indicator\" [style.background-color]=\"getStatusColor()\"></span>\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n {{ getStatusText() }}\n </div>\n </div>\n\n <!-- Execution Card -->\n @if (record.RunType) {\n <div class=\"meta-card execution-card\">\n <div class=\"c3-card-label\">Execution</div>\n <div class=\"meta-card-body\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(record.RunType)\" [style.color]=\"getRunTypeColor(record.RunType)\"></i>\n {{ record.RunType }}\n </div>\n </div>\n }\n\n <!-- Prompt Card -->\n @if (prompt) {\n @if (record.ChildPromptID) {\n <!-- C3 Stacked Connector: child prompt prominent, parent nested -->\n <div class=\"prompt-card-c3\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"c3-child-section\" (click)=\"navigateToEntity('MJ: AI Prompts', record.ChildPromptID)\" title=\"View Agent Prompt\">\n <i class=\"fa-solid fa-comment prompt-icon\"></i>\n {{ record.ChildPrompt }}\n </div>\n <div class=\"c3-divider\">\n <span class=\"c3-line\"></span>\n <span class=\"c3-divider-label\">wrapped by</span>\n <span class=\"c3-line\"></span>\n </div>\n <div class=\"c3-parent-section\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View System Prompt\">\n <i class=\"fa-solid fa-cog\"></i>\n {{ prompt.Name }}\n <i class=\"fa-solid fa-arrow-up-right-from-square c3-link-icon\"></i>\n </div>\n </div>\n } @else {\n <!-- Single prompt (no child) \u2014 same card style -->\n <div class=\"meta-card prompt-single-card\">\n <div class=\"c3-card-label\">Prompt</div>\n <div class=\"meta-card-body clickable\" (click)=\"navigateToEntity('MJ: AI Prompts', prompt.ID)\" title=\"View Prompt\">\n <i class=\"fa-solid fa-comment-dots\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ prompt.Name }}\n </div>\n </div>\n }\n }\n\n <!-- Model Card -->\n @if (model) {\n <div class=\"model-card-c3\">\n <div class=\"c3-card-label\">Model</div>\n <div class=\"c3-card-body\" (click)=\"navigateToEntity('MJ: AI Models', model.ID)\" title=\"View Model\">\n <span class=\"c3-model-name\"><i class=\"fa-solid fa-microchip\"></i> {{ model.Name }}</span>\n @if (record.Vendor) {\n <span class=\"c3-vendor-name\">{{ record.Vendor }}</span>\n }\n </div>\n </div>\n }\n @if (record.RerunFromPromptRunID) {\n <span class=\"original-run\" title=\"View Original Run\">\n <i class=\"fa-solid fa-level-up-alt\"></i>\n <a (click)=\"navigateToOriginalRun()\" class=\"original-link\">Original Run</a>\n </span>\n }\n </div>\n </div>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"run-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n @if (record.ConfigurationID) {\n <!-- Configuration Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-cog\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Configuration</div>\n <div class=\"metric-value\">\n <a href=\"javascript:void(0)\" class=\"config-link\" (click)=\"navigateToEntity('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n @if (record.Temperature !== null && record.Temperature !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Temperature</div>\n <div class=\"metric-value\">{{ record.Temperature }}</div>\n </div>\n </div>\n }\n @if (record.TopP !== null && record.TopP !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-percentage\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top P</div>\n <div class=\"metric-value\">{{ record.TopP }}</div>\n </div>\n </div>\n }\n @if (record.TopK !== null && record.TopK !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-list-ol\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top K</div>\n <div class=\"metric-value\">{{ record.TopK }}</div>\n </div>\n </div>\n }\n @if (record.EffortLevel !== null && record.EffortLevel !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Effort Level</div>\n <div class=\"metric-value\">{{ record.EffortLevel }}</div>\n </div>\n </div>\n }\n @if (record.ResponseFormat) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-code\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Response Format</div>\n <div class=\"metric-value\">{{ record.ResponseFormat }}</div>\n </div>\n </div>\n }\n </div>\n \n <!-- Execution Metrics Bar (always show when configuration exists) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensUsed) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n } @else {\n <!-- Execution Metrics Bar (original behavior when no configuration) -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Duration</div>\n <div class=\"metric-value\">{{ formatDuration(record.ExecutionTimeMS) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-coins\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Total Tokens</div>\n <div class=\"metric-value\">{{ formatTokens(record.TokensUsed) }}</div>\n </div>\n </div>\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Cost</div>\n <div class=\"metric-value\">{{ formatCost(record.TotalCost || record.Cost) }}</div>\n </div>\n </div>\n @if (record.RunAt) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Started</div>\n <div class=\"metric-value\">{{ record.RunAt | date:'short' }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Main Content with Expansion Panels -->\n <div class=\"form-content\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n\n <!-- Input Panel with nested sub-panels -->\n <mj-accordion-panel [Expanded]=\"inputExpanded\" (ExpandedChange)=\"onInputPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <!-- Nested expansion panels for sub-sections -->\n <div class=\"nested-panels\">\n <!-- Messages Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"messagesExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Messages\n @if (chatMessages.length > 0) {\n <span class=\"panel-count\">({{ chatMessages.length }})</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (isParsingMessages || isLoadingRelatedData) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading messages...</p>\n </div>\n } @else if (chatMessages.length > 0) {\n <mj-chat-message-viewer \n [messages]=\"chatMessages\">\n </mj-chat-message-viewer>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No chat messages found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Data Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"dataExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-database\"></i>\n Data\n @if (inputData) {\n <span class=\"panel-badge\">Object</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (inputData && formattedData) {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedData, 'json', 'Data')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedData\"\n name=\"formattedData\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No data object found</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Raw Sub-Panel -->\n <mj-accordion-panel\n [Expanded]=\"rawExpanded\"\n class=\"sub-expansion-panel\"\n style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Raw\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedMessages, 'json', 'Raw Messages')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessages\"\n name=\"formattedMessages\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\n }\n </div>\n </mj-accordion-panel>\n \n <!-- Result Panel -->\n <mj-accordion-panel [Expanded]=\"resultExpanded\" (ExpandedChange)=\"onResultPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedResult, 'json', 'Result')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedResult\"\n name=\"formattedResult\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else if (!record.ErrorMessage) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No result data recorded</p>\n @if (record.CompletedAt && (record.Status === 'Failed' || record.Success === false)) {\n <div class=\"error-info\">\n @if (record.Status) {\n <p class=\"finish-reason\">\n <strong>Status:</strong> {{ record.Status }}\n </p>\n }\n @if (formattedErrorDetails) {\n <div class=\"error-details\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor\n [ngModel]=\"formattedErrorDetails\"\n [disabled]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (!formattedErrorDetails) {\n <p class=\"error-hint\">\n The prompt execution failed but no additional error information is available.\n </p>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Token Usage & Metrics Panel -->\n <mj-accordion-panel [Expanded]=\"metricsExpanded\" (ExpandedChange)=\"onMetricsPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage &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\">{{ formatTokens(record.TokensUsed) }}</div>\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n \n <!-- Timing Metrics -->\n @if (record.QueueTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-hourglass-start\"></i>\n <h4>Queue Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.QueueTime) }}</div>\n </div>\n }\n \n @if (record.PromptTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>Prompt Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.PromptTime) }}</div>\n </div>\n }\n \n @if (record.CompletionTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <h4>Completion Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.CompletionTime) }}</div>\n </div>\n }\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <mj-accordion-panel [Expanded]=\"validationExpanded\" (ExpandedChange)=\"onValidationPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation &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"] }]
2335
2473
  }], null, null); })();
2336
2474
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIPromptRunFormComponentExtended, { className: "MJAIPromptRunFormComponentExtended", filePath: "src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts", lineNumber: 21 }); })();
2337
2475
  //# sourceMappingURL=ai-prompt-run-form.component.js.map