@memberjunction/ng-core-entity-forms 5.22.0 → 5.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +55 -59
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +0 -1
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +54 -71
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1053 -1096
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +2 -3
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js +39 -82
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +28 -31
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +15 -14
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +4 -7
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +77 -124
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +2 -2
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +10 -11
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +18 -18
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +59 -80
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +23 -24
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +862 -906
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +4 -5
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +448 -499
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +2 -2
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +6 -11
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +16 -15
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +160 -166
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +93 -94
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/ContentSources/content-source-form.component.d.ts +22 -0
- package/dist/lib/custom/ContentSources/content-source-form.component.d.ts.map +1 -0
- package/dist/lib/custom/ContentSources/content-source-form.component.js +165 -0
- package/dist/lib/custom/ContentSources/content-source-form.component.js.map +1 -0
- package/dist/lib/custom/Entities/entity-form.component.js +2 -2
- package/dist/lib/custom/Lists/list-form.component.js +61 -63
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.js +33 -59
- package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +354 -360
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +62 -71
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +128 -124
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts +45 -22
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +380 -384
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +34 -36
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +8 -9
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js +4 -4
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +7 -7
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +6 -7
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +6 -7
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +381 -409
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +74 -63
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +10 -10
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +352 -332
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +25 -29
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +57 -82
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +59 -66
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +176 -156
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js +65 -0
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js +89 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +98 -44
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +35 -17
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +79 -20
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.js +73 -0
- package/dist/lib/generated/Entities/MJContentItemDuplicate/mjcontentitemduplicate.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js +11 -6
- package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.js +49 -8
- package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.js +107 -0
- package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.js +57 -0
- package/dist/lib/generated/Entities/MJContentProcessRunPromptRun/mjcontentprocessrunpromptrun.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +71 -24
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js +43 -15
- package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +43 -17
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js +21 -11
- package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +19 -13
- package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +7 -9
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +78 -60
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +21 -9
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.js +23 -5
- package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.js +77 -0
- package/dist/lib/generated/Entities/MJKnowledgeHubSavedSearch/mjknowledgehubsavedsearch.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js +22 -4
- package/dist/lib/generated/Entities/MJScheduledAction/mjscheduledaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +139 -19
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.js +67 -0
- package/dist/lib/generated/Entities/MJTagAuditLog/mjtagauditlog.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.js +65 -0
- package/dist/lib/generated/Entities/MJTagCoOccurrence/mjtagcooccurrence.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJTaggedItem/mjtaggeditem.form.component.js +10 -8
- package/dist/lib/generated/Entities/MJTaggedItem/mjtaggeditem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +226 -154
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +41 -5
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +286 -279
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +192 -214
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +14 -15
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +34 -41
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-prompt-run-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts","../../../../src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, ViewContainerRef, OnDestroy, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { MJAIPromptRunEntityExtended, MJAIPromptEntityExtended } from '@memberjunction/ai-core-plus';\nimport { MJAIModelEntity } from \"@memberjunction/core-entities\";\nimport { Metadata, RunView, CompositeKey } from '@memberjunction/core';\nimport { MJAIPromptRunFormComponent } from '../../generated/Entities/MJAIPromptRun/mjaipromptrun.form.component';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ChatMessage } from '@memberjunction/ai';\nimport { TestHarnessWindowService } from '@memberjunction/ng-ai-test-harness';\nimport { ParseJSONOptions, ParseJSONRecursive } from '@memberjunction/global';\n\n@RegisterClass(BaseFormComponent, 'MJ: AI Prompt Runs')\n@Component({\n standalone: false,\n selector: 'mj-ai-prompt-run-form',\n templateUrl: './ai-prompt-run-form.component.html',\n styleUrls: ['./ai-prompt-run-form.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MJAIPromptRunFormComponentExtended extends MJAIPromptRunFormComponent implements AfterViewInit, OnDestroy {\n public record!: MJAIPromptRunEntityExtended;\n \n // Related entities\n public prompt: MJAIPromptEntityExtended | null = null;\n public model: MJAIModelEntity | null = null;\n public parentRun: MJAIPromptRunEntityExtended | null = null;\n public childRuns: MJAIPromptRunEntityExtended[] = [];\n \n // UI state\n public isLoadingRelatedData = false;\n public isParsingMessages = false; // Will be set to true in ngOnInit if there are messages\n public inputExpanded = true; // Start open as users want to see this\n public messagesExpanded = true;\n public dataExpanded = false; // Changed to false - often blank\n public rawExpanded = false;\n public resultExpanded = false; // Start closed for lazy loading\n public metricsExpanded = false;\n public hierarchyExpanded = false;\n public validationExpanded = false; // Start closed for lazy loading\n public modelSpecificExpanded = false; // Start closed for lazy loading\n \n // Track what has been loaded\n private hasLoadedInput = false;\n private hasLoadedResult = false;\n private hasLoadedValidation = false;\n private hasLoadedMetrics = false;\n private hasLoadedModelSpecific = false;\n \n // Formatted values\n public formattedMessages = '';\n public formattedResult = '';\n public formattedValidationSummary = '';\n public formattedValidationAttempts = '';\n public formattedData = '';\n public formattedModelSelection = '';\n public formattedErrorDetails = '';\n public formattedModelSpecificResponseDetails = '';\n \n // Parsed input data\n public chatMessages: ChatMessage[] = [];\n public inputData: any = null;\n \n // Validation data\n public validationAttempts: any[] = [];\n public validationSummary: any = null;\n\n // Full-screen overlay state\n public FullScreenContent: string | null = null;\n public FullScreenLanguage = 'json';\n public FullScreenTitle = '';\n\n // Field injections\n private testHarnessWindowService = inject(TestHarnessWindowService);\n private viewContainerRef = inject(ViewContainerRef);\n \n async ngOnInit() {\n await super.ngOnInit();\n if (this.record?.ID) {\n // Set loading state immediately if input panel will be loaded and has messages\n if (this.inputExpanded && this.record.Messages && this.record.Messages.trim() !== '') {\n this.isParsingMessages = true;\n this.cdr.detectChanges(); // Force immediate update to show spinner\n }\n \n // Load related entities\n await this.loadRelatedData();\n \n // Format ALL JSON fields immediately on load - it's inexpensive\n console.log('🚀 Formatting all JSON fields on init...');\n this.formatAllJsonFields();\n \n // Mark all data as loaded since we're doing it all upfront\n this.hasLoadedInput = true;\n this.hasLoadedResult = true;\n this.hasLoadedValidation = true;\n this.hasLoadedMetrics = true;\n this.hasLoadedModelSpecific = true;\n \n this.isParsingMessages = false;\n this.cdr.detectChanges();\n }\n }\n \n ngAfterViewInit() {\n // Force change detection to ensure expansion panels render correctly\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n \n ngOnDestroy() {\n // Clean up any resources\n // Currently no subscriptions or timers to clean up\n // This is here for future use and to complete the lifecycle\n }\n \n onInputPanelToggle(event: any) {\n const expanded = event as boolean;\n this.inputExpanded = expanded;\n // Data is already formatted on init, no need to do anything\n }\n \n onResultPanelToggle(event: any) {\n const expanded = event as boolean;\n this.resultExpanded = expanded;\n // Data is already formatted on init, no need to do anything\n }\n \n onValidationPanelToggle(event: any) {\n const expanded = event as boolean;\n this.validationExpanded = expanded;\n // Data is already formatted on init, no need to do anything\n }\n \n onMetricsPanelToggle(event: any) {\n const expanded = event as boolean;\n this.metricsExpanded = expanded;\n // Data is already formatted on init, no need to do anything\n }\n \n onModelSpecificPanelToggle(event: any) {\n const expanded = event as boolean;\n this.modelSpecificExpanded = expanded;\n // Data is already formatted on init, no need to do anything\n }\n \n onModelSelectionPanelToggle(event: any) {\n const expanded = event as boolean;\n // Data is already formatted on init, no need to do anything\n }\n \n private async loadRelatedData() {\n this.isLoadingRelatedData = true;\n try {\n const md = new Metadata();\n \n // Load prompt\n if (this.record.PromptID) {\n this.prompt = await md.GetEntityObject<MJAIPromptEntityExtended>('MJ: AI Prompts');\n if (this.prompt) {\n await this.prompt.Load(this.record.PromptID);\n }\n }\n \n // Load model\n if (this.record.ModelID) {\n this.model = await md.GetEntityObject<MJAIModelEntity>('MJ: AI Models');\n if (this.model) {\n await this.model.Load(this.record.ModelID);\n }\n }\n \n // Load parent run if exists\n if (this.record.ParentID) {\n this.parentRun = await md.GetEntityObject<MJAIPromptRunEntityExtended>('MJ: AI Prompt Runs');\n if (this.parentRun) {\n await this.parentRun.Load(this.record.ParentID);\n }\n }\n \n // Load child runs\n await this.loadChildRuns();\n } catch (error) {\n console.error('Error loading related data:', error);\n } finally {\n this.isLoadingRelatedData = false;\n }\n }\n \n private async loadChildRuns() {\n if (!this.record.ID) return;\n \n const rv = new RunView();\n const result = await rv.RunView<MJAIPromptRunEntityExtended>({\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `ParentID='${this.record.ID}'`,\n OrderBy: 'ExecutionOrder ASC, RunAt DESC',\n ResultType: 'entity_object'\n });\n \n if (result.Success) {\n this.childRuns = result.Results || [];\n }\n }\n \n private formatAllJsonFields() {\n if (!this.record) {\n console.warn('formatAllJsonFields called but record is not available');\n return;\n }\n \n console.log('📄 Formatting input data...');\n // Format input/messages data\n const messageData = this.record.ParseMessagesData();\n this.chatMessages = messageData.chatMessages;\n this.inputData = messageData.inputData;\n this.formattedMessages = messageData.formattedMessages;\n this.formattedData = messageData.formattedData;\n console.log('📄 Input data formatted. Chat messages:', this.chatMessages.length, 'Input data exists:', !!this.inputData);\n \n console.log('📊 Formatting result data...');\n // Format result data\n this.formattedResult = this.record.GetFormattedResult();\n console.log('📊 Result formatted:', !!this.formattedResult, 'Length:', this.formattedResult?.length);\n \n console.log('🔍 Formatting validation data...');\n // Format validation data\n this.loadValidationData();\n \n console.log('📈 Formatting metrics data...');\n // Format metrics data (ModelSelection, ErrorDetails)\n this.formatMetricsData();\n \n console.log('🔧 Formatting model specific data...');\n // Format model specific response details\n this.formatModelSpecificResponseDetails();\n \n // Format error details if available\n if (this.record.ErrorDetails && !this.formattedErrorDetails) {\n console.log('⚠️ Formatting error details...');\n this.formatErrorDetails();\n }\n \n console.log('✅ All JSON fields formatted');\n }\n \n \n private formatMetricsData() {\n // Format v2.78 JSON fields related to metrics\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n \n // Format ModelSelection\n if (this.record.ModelSelection) {\n try {\n const modelSelection = JSON.parse(this.record.ModelSelection);\n const parsed = ParseJSONRecursive(modelSelection, parseOptions);\n this.formattedModelSelection = JSON.stringify(parsed, null, 2);\n } catch (error) {\n this.formattedModelSelection = this.record.ModelSelection;\n }\n }\n \n // Format ErrorDetails\n if (this.record.ErrorDetails) {\n try {\n const errorDetails = JSON.parse(this.record.ErrorDetails);\n const parsed = ParseJSONRecursive(errorDetails, parseOptions);\n this.formattedErrorDetails = JSON.stringify(parsed, null, 2);\n } catch (error) {\n this.formattedErrorDetails = this.record.ErrorDetails;\n }\n }\n \n // Note: ModelSpecificResponseDetails is now formatted in its own panel toggle method\n }\n \n private formatErrorDetails() {\n if (!this.record.ErrorDetails) {\n this.formattedErrorDetails = '';\n return;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n \n try {\n const errorDetails = JSON.parse(this.record.ErrorDetails);\n const parsed = ParseJSONRecursive(errorDetails, parseOptions);\n this.formattedErrorDetails = JSON.stringify(parsed, null, 2);\n } catch (error) {\n this.formattedErrorDetails = this.record.ErrorDetails;\n }\n }\n \n private formatModelSpecificResponseDetails() {\n if (!this.record.ModelSpecificResponseDetails) {\n this.formattedModelSpecificResponseDetails = '';\n return;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n \n try {\n const modelDetails = JSON.parse(this.record.ModelSpecificResponseDetails);\n const parsed = ParseJSONRecursive(modelDetails, parseOptions);\n this.formattedModelSpecificResponseDetails = JSON.stringify(parsed, null, 2);\n } catch (error) {\n this.formattedModelSpecificResponseDetails = this.record.ModelSpecificResponseDetails;\n }\n }\n \n getStatusColor(): string {\n if (!this.record) return '#6c757d';\n \n if (this.record.Success === true) {\n return '#28a745'; // Green\n } else if (this.record.Success === false) {\n return '#dc3545'; // Red\n } else if (this.record.CompletedAt) {\n return '#17a2b8'; // Blue (completed but no success flag)\n } else {\n return '#ffc107'; // Yellow (running)\n }\n }\n \n getStatusIcon(): string {\n if (!this.record) return 'fa-circle';\n \n if (this.record.Success === true) {\n return 'fa-check-circle';\n } else if (this.record.Success === false) {\n return 'fa-times-circle';\n } else if (this.record.CompletedAt) {\n return 'fa-info-circle';\n } else {\n return 'fa-spinner fa-spin';\n }\n }\n \n getStatusText(): string {\n if (!this.record) return 'Unknown';\n \n if (this.record.Success === true) {\n return 'Success';\n } else if (this.record.Success === false) {\n return 'Failed';\n } else if (this.record.CompletedAt) {\n return 'Completed';\n } else {\n return 'Running';\n }\n }\n \n formatDuration(ms: number | null): string {\n if (!ms) return '-';\n \n if (ms < 1000) {\n return `${ms}ms`;\n } else if (ms < 60000) {\n return `${(ms / 1000).toFixed(1)}s`;\n } else {\n const minutes = Math.floor(ms / 60000);\n const seconds = ((ms % 60000) / 1000).toFixed(0);\n return `${minutes}m ${seconds}s`;\n }\n }\n \n formatCost(cost: number | null): string {\n if (!cost) return '-';\n return `$${cost.toFixed(4)}`;\n }\n \n formatTokens(tokens: number | null): string {\n if (!tokens) return '-';\n return tokens.toLocaleString();\n }\n \n getRunTypeIcon(runType: string | null): string {\n switch (runType) {\n case 'Single':\n return 'fa-play-circle';\n case 'ParallelParent':\n return 'fa-layer-group';\n case 'ParallelChild':\n return 'fa-clone';\n case 'ResultSelector':\n return 'fa-filter';\n default:\n return 'fa-circle';\n }\n }\n \n getRunTypeColor(runType: string | null): string {\n switch (runType) {\n case 'Single':\n return '#6f42c1';\n case 'ParallelParent':\n return '#007bff';\n case 'ParallelChild':\n return '#17a2b8';\n case 'ResultSelector':\n return '#28a745';\n default:\n return '#6c757d';\n }\n }\n \n navigateToEntity(entityName: string, recordId: string | null) {\n if (!recordId) return;\n \n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n \n navigateToOriginalRun() {\n if (this.record?.RerunFromPromptRunID) {\n SharedService.Instance.OpenEntityRecord('MJ: AI Prompt Runs', CompositeKey.FromID(this.record.RerunFromPromptRunID));\n }\n }\n \n reRunPrompt() {\n console.log('🚀 Re-Run button clicked');\n console.log('📋 Current record:', this.record);\n console.log('🆔 Record ID:', this.record?.ID);\n console.log('🎯 Prompt ID:', this.record?.PromptID);\n \n if (!this.record?.ID || !this.record.PromptID) {\n console.error('❌ Cannot re-run: missing record ID or PromptID');\n return;\n }\n \n const params = {\n promptId: this.record.PromptID,\n promptRunId: this.record.ID,\n title: `Re-Run: ${this.prompt?.Name || 'Prompt'}`,\n width: '80vw',\n height: '80vh',\n viewContainerRef: this.viewContainerRef\n };\n \n console.log('📞 Calling openPromptTestHarness with params:', params);\n \n // Open AI Test Harness dialog with the prompt run ID\n this.testHarnessWindowService.openPromptTestHarness(params).subscribe({\n next: (result: any) => {\n if (result) {\n // Optionally refresh the current view or show a success message\n console.log('Test harness completed', result);\n }\n },\n error: (error: any) => {\n console.error('Error in test harness:', error);\n }\n });\n }\n \n copyToClipboard(text: string, fieldName: string) {\n navigator.clipboard.writeText(text).then(() => {\n // Just show a console log for now, as ShowSimpleNotification may not exist\n console.log(`${fieldName} copied to clipboard`);\n }).catch(err => {\n console.error('Failed to copy:', err);\n });\n }\n \n async refreshData() {\n console.log('🔄 refreshData called');\n if (this.record?.ID) {\n console.log('🔄 Reloading record and formatting all data...');\n \n await this.record.Load(this.record.ID);\n await this.loadRelatedData();\n console.log('🔄 Record reloaded. Result field exists:', !!this.record.Result);\n \n // Format all JSON fields again\n this.formatAllJsonFields();\n \n this.cdr.detectChanges();\n }\n }\n \n public openFullScreen(content: string, language: string, title: string): void {\n this.FullScreenContent = content;\n this.FullScreenLanguage = language;\n this.FullScreenTitle = title;\n this.cdr.detectChanges();\n }\n\n public closeFullScreen(): void {\n this.FullScreenContent = null;\n this.cdr.detectChanges();\n }\n\n private loadValidationData() {\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n\n // Parse validation attempts if available\n if (this.record.ValidationAttempts) {\n try {\n this.validationAttempts = JSON.parse(this.record.ValidationAttempts);\n const recursivelyParsed = ParseJSONRecursive(this.validationAttempts, parseOptions);\n this.formattedValidationAttempts = JSON.stringify(recursivelyParsed, null, 2);\n } catch (error) {\n console.error('Error parsing ValidationAttempts:', error);\n this.validationAttempts = [];\n this.formattedValidationAttempts = '';\n }\n } else {\n this.validationAttempts = [];\n this.formattedValidationAttempts = '';\n }\n \n // Parse validation summary if available\n if (this.record.ValidationSummary) {\n try {\n this.validationSummary = JSON.parse(this.record.ValidationSummary);\n const recursivelyParsed = ParseJSONRecursive(this.validationSummary, parseOptions);\n this.formattedValidationSummary = JSON.stringify(recursivelyParsed, null, 2);\n } catch (error) {\n console.error('Error parsing ValidationSummary:', error);\n this.validationSummary = null;\n this.formattedValidationSummary = '';\n }\n } else {\n this.validationSummary = null;\n this.formattedValidationSummary = '';\n }\n \n // Don't auto-expand validation panel anymore - let user expand when needed\n }\n}","<div class=\"record-form-container\" style=\"height: 100%; display: flex; flex-direction: column;\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <mj-form-toolbar [Form]=\"this\"></mj-form-toolbar>\n\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <!-- 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) — 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 kendoButton fillMode=\"outline\" size=\"small\" (click)=\"reRunPrompt()\" title=\"Re-run this prompt\">\n <i class=\"fa-solid fa-play-circle\"></i>\n Re-Run\n </button>\n <button kendoButton fillMode=\"outline\" size=\"small\" (click)=\"refreshData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n \n <!-- Key Metrics Bar -->\n @if (record.ConfigurationID) {\n <!-- Configuration Bar -->\n <div class=\"metrics-bar\">\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-cog\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Configuration</div>\n <div class=\"metric-value\">\n <a href=\"javascript:void(0)\" class=\"config-link\" (click)=\"navigateToEntity('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n @if (record.Temperature !== null && record.Temperature !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-temperature-high\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Temperature</div>\n <div class=\"metric-value\">{{ record.Temperature }}</div>\n </div>\n </div>\n }\n @if (record.TopP !== null && record.TopP !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-percentage\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top P</div>\n <div class=\"metric-value\">{{ record.TopP }}</div>\n </div>\n </div>\n }\n @if (record.TopK !== null && record.TopK !== undefined) {\n <div class=\"metric-item\">\n <i class=\"fa-solid fa-list-ol\"></i>\n <div class=\"metric-content\">\n <div class=\"metric-label\">Top K</div>\n <div class=\"metric-value\">{{ record.TopK }}</div>\n </div>\n </div>\n }\n @if (record.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 <kendo-panelbar [keepItemContent]=\"true\">\n \n <!-- Input Panel with nested sub-panels -->\n <kendo-panelbar-item [expanded]=\"inputExpanded\" (stateChange)=\"onInputPanelToggle($event)\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Input\n @if (record.Messages && record.Messages.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (record.Messages && record.Messages.trim() !== '') {\n <!-- Nested expansion panels for sub-sections -->\n <div class=\"nested-panels\">\n <!-- Messages Sub-Panel -->\n <kendo-expansionpanel \n [expanded]=\"messagesExpanded\" \n class=\"sub-expansion-panel\"\n [animation]=\"false\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Messages\n @if (chatMessages.length > 0) {\n <span class=\"panel-count\">({{ chatMessages.length }})</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (isParsingMessages || isLoadingRelatedData) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <p>Loading messages...</p>\n </div>\n } @else if (chatMessages.length > 0) {\n <mj-chat-message-viewer \n [messages]=\"chatMessages\">\n </mj-chat-message-viewer>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No chat messages found</p>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n \n <!-- Data Sub-Panel -->\n <kendo-expansionpanel \n [expanded]=\"dataExpanded\" \n class=\"sub-expansion-panel\"\n [animation]=\"false\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-database\"></i>\n Data\n @if (inputData) {\n <span class=\"panel-badge\">Object</span>\n }\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n @if (inputData && formattedData) {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\n (click)=\"copyToClipboard(formattedData, 'Data')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\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 </kendo-expansionpanel>\n \n <!-- Raw Sub-Panel -->\n <kendo-expansionpanel \n [expanded]=\"rawExpanded\" \n class=\"sub-expansion-panel\"\n [animation]=\"false\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"sub-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Raw\n </span>\n </ng-template>\n <div class=\"sub-panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\n (click)=\"copyToClipboard(formattedMessages, 'Messages')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\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 </kendo-expansionpanel>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-slash\"></i>\n <p>No input messages recorded</p>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Result Panel -->\n <kendo-panelbar-item [expanded]=\"resultExpanded\" (stateChange)=\"onResultPanelToggle($event)\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-square-check\"></i>\n Result\n @if (record.Result && record.Result.trim() !== '') {\n <span class=\"panel-badge\">JSON</span>\n }\n @if (record.ErrorMessage) {\n <span class=\"panel-badge error\">Error</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (record.ErrorMessage) {\n <div class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <div class=\"error-content\">\n <h4>Error Message</h4>\n <p>{{ record.ErrorMessage }}</p>\n </div>\n </div>\n }\n \n @if (record.Result && record.Result.trim() !== '') {\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button kendoButton\n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedResult, 'Result')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\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.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 kendoButton\n fillMode=\"flat\"\n size=\"small\"\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 </ng-template>\n </kendo-panelbar-item>\n \n <!-- Token Usage & Metrics Panel -->\n <kendo-panelbar-item [expanded]=\"metricsExpanded\" (stateChange)=\"onMetricsPanelToggle($event)\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage & Metrics\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensPrompt) }}</div>\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensUsed) }}</div>\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n \n <!-- Timing Metrics -->\n @if (record.QueueTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-hourglass-start\"></i>\n <h4>Queue Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.QueueTime) }}</div>\n </div>\n }\n \n @if (record.PromptTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>Prompt Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.PromptTime) }}</div>\n </div>\n }\n \n @if (record.CompletionTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <h4>Completion Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.CompletionTime) }}</div>\n </div>\n }\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('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 </ng-template>\n </kendo-panelbar-item>\n \n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <kendo-panelbar-item [expanded]=\"validationExpanded\" (stateChange)=\"onValidationPanelToggle($event)\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation & Retries\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <span class=\"panel-count\">({{ record.ValidationAttemptCount }} attempts)</span>\n }\n @if (record.FinalValidationPassed) {\n <span class=\"panel-badge success\">Passed</span>\n } @else if (record.FinalValidationPassed === false) {\n <span class=\"panel-badge error\">Failed</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <!-- Validation Summary -->\n <div class=\"validation-summary\">\n <div class=\"summary-header\">\n <h4>Validation Summary</h4>\n <div class=\"validation-status\" [class.success]=\"record.FinalValidationPassed\" [class.failed]=\"!record.FinalValidationPassed\">\n <i [class]=\"record.FinalValidationPassed ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.FinalValidationPassed ? 'Validation Passed' : 'Validation Failed' }}\n </div>\n </div>\n \n <div class=\"validation-metrics\">\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Total Attempts</div>\n <div class=\"metric-value\">{{ record.ValidationAttemptCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Successful</div>\n <div class=\"metric-value\">{{ record.SuccessfulValidationCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Behavior</div>\n <div class=\"metric-value\">{{ record.ValidationBehavior || 'Not set' }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Retry Strategy</div>\n <div class=\"metric-value\">{{ record.RetryStrategy || 'Not set' }}</div>\n </div>\n </div>\n \n @if (record.FinalValidationError) {\n <div class=\"validation-error\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Final Validation Error</h5>\n <p>{{ record.FinalValidationError }}</p>\n @if (record && record.ValidationErrorCount && record.ValidationErrorCount > 0) {\n <span class=\"error-count\">{{ record.ValidationErrorCount }} validation errors</span>\n }\n </div>\n }\n \n @if (record.CommonValidationError && record.CommonValidationError !== record.FinalValidationError) {\n <div class=\"common-error\">\n <h5><i class=\"fa-solid fa-repeat\"></i> Most Common Error</h5>\n <p>{{ record.CommonValidationError }}</p>\n </div>\n }\n </div>\n \n <!-- Retry Timeline -->\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <div class=\"retry-timeline\">\n <h4>Retry Timeline</h4>\n <div class=\"timeline-info\">\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>First Attempt: {{ record.FirstAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <span>Last Attempt: {{ record.LastAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span>Total Retry Duration: {{ formatDuration(record.TotalRetryDurationMS) }}</span>\n </div>\n </div>\n </div>\n }\n \n <!-- Validation Attempts Details -->\n @if (validationAttempts && validationAttempts.length > 0) {\n <div class=\"validation-attempts\">\n <h4>Validation Attempts</h4>\n <div class=\"attempts-list\">\n @for (attempt of validationAttempts; track attempt.attemptNumber) {\n <div class=\"attempt-item\" [class.success]=\"attempt.success\" [class.failed]=\"!attempt.success\">\n <div class=\"attempt-number\">\n <i [class]=\"attempt.success ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n Attempt #{{ attempt.attemptNumber }}\n </div>\n <div class=\"attempt-details\">\n <span class=\"attempt-time\">{{ attempt.timestamp }}</span>\n @if (!attempt.success) {\n <span class=\"attempt-error\">{{ attempt.errorMessage || 'Unknown error' }}</span>\n @if (attempt.validationErrorCount > 0) {\n <span class=\"error-count\">({{ attempt.validationErrorCount }} errors)</span>\n }\n }\n @if (attempt.outputLength) {\n <span class=\"output-length\">Output: {{ attempt.outputLength }} chars</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Validation Summary JSON -->\n @if (validationSummary) {\n <div class=\"validation-json\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Validation Summary Details</h4>\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\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 kendoButton\n fillMode=\"flat\"\n size=\"small\"\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 </ng-template>\n </kendo-panelbar-item>\n }\n \n <!-- Hierarchy Panel (for parent/child relationships) -->\n @if (record.ParentID || childRuns.length > 0) {\n <kendo-panelbar-item [expanded]=\"hierarchyExpanded\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Run Hierarchy\n @if (childRuns.length > 0) {\n <span class=\"panel-count\">({{ childRuns.length }} children)</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n @if (parentRun) {\n <div class=\"parent-run-section\">\n <h4><i class=\"fa-solid fa-level-up-alt\"></i> Parent Run</h4>\n <div class=\"run-item parent\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', parentRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(parentRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Parent Run #{{ parentRun.ID.substring(0, 8) }}\n <span class=\"run-item-type\">{{ parentRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(parentRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(parentRun.TokensUsed) }}</span>\n <span><i class=\"fa-solid fa-calendar\"></i> {{ parentRun.RunAt | date:'short' }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n </div>\n }\n \n @if (childRuns.length > 0) {\n <div class=\"child-runs-section\">\n <h4><i class=\"fa-solid fa-level-down-alt\"></i> Child Runs</h4>\n <div class=\"runs-list\">\n @for (childRun of childRuns; track childRun.ID) {\n <div class=\"run-item child\" (click)=\"navigateToEntity('MJ: AI Prompt Runs', childRun.ID)\">\n <div class=\"run-item-icon\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getRunTypeIcon(childRun.RunType)\"></i>\n </div>\n <div class=\"run-item-content\">\n <div class=\"run-item-title\">\n Child Run #{{ childRun.ID.substring(0, 8) }}\n @if (childRun.ExecutionOrder !== null) {\n <span class=\"execution-order\">#{{ childRun.ExecutionOrder }}</span>\n }\n <span class=\"run-item-type\">{{ childRun.RunType }}</span>\n </div>\n <div class=\"run-item-meta\">\n <span class=\"status-indicator\" [style.color]=\"getStatusColor()\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\"></i>\n {{ childRun.Success ? 'Success' : childRun.ErrorMessage ? 'Failed' : 'Running' }}\n </span>\n <span><i class=\"fa-solid fa-clock\"></i> {{ formatDuration(childRun.ExecutionTimeMS) }}</span>\n <span><i class=\"fa-solid fa-coins\"></i> {{ formatTokens(childRun.TokensUsed) }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n \n <!-- Additional Details Panel -->\n <kendo-panelbar-item [expanded]=\"false\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Additional Details\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n @if (record.AgentID) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"detail-value clickable\" (click)=\"navigateToEntity('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 : '—' }}\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 : '—' }}\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 : '—' }}\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 : '—' }}\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 : '—' }}\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 : '—' }}\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 : '—' }}\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 || '—' }}\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 || '—' }}\n </div>\n </div>\n\n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n \n <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <kendo-panelbar-item [expanded]=\"modelSpecificExpanded\" (stateChange)=\"onModelSpecificPanelToggle($event)\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Specific Response Details\n <span class=\"panel-badge\">JSON</span>\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button kendoButton\n fillMode=\"flat\" \n size=\"small\"\n (click)=\"copyToClipboard(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\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 </ng-template>\n </kendo-panelbar-item>\n }\n \n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <kendo-panelbar-item [expanded]=\"false\" (stateChange)=\"onModelSelectionPanelToggle($event)\">\n <ng-template kendoPanelBarItemTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection & Performance\n @if (record.CacheHit) {\n <span class=\"panel-badge success\">Cached</span>\n }\n @if (record.WasSelectedResult) {\n <span class=\"panel-badge success\">Selected</span>\n }\n </span>\n </ng-template>\n <ng-template kendoPanelBarContent>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n <!-- Model Selection Details -->\n <div class=\"detail-field\">\n <label>Status</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ record.Status || 'Unknown' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Selection Strategy</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-strategy\"></i>\n {{ record.SelectionStrategy || '—' }}\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 : '—' }}\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 kendoButton\n fillMode=\"flat\"\n size=\"small\"\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 kendoButton\n fillMode=\"flat\"\n size=\"small\"\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 </ng-template>\n </kendo-panelbar-item>\n \n </kendo-panelbar>\n </div>\n </form>\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 kendoButton\n fillMode=\"flat\"\n size=\"small\"\n (click)=\"copyToClipboard(FullScreenContent, FullScreenTitle)\"\n title=\"Copy content\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\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 }\n</div>"]}
|
|
1
|
+
{"version":3,"file":"ai-prompt-run-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts","../../../../src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, ViewContainerRef, OnDestroy, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { MJAIPromptRunEntityExtended, MJAIPromptEntityExtended } from '@memberjunction/ai-core-plus';\nimport { MJAIModelEntity } from \"@memberjunction/core-entities\";\nimport { Metadata, RunView, CompositeKey } from '@memberjunction/core';\nimport { MJAIPromptRunFormComponent } from '../../generated/Entities/MJAIPromptRun/mjaipromptrun.form.component';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ChatMessage } from '@memberjunction/ai';\nimport { TestHarnessWindowManagerService } from '@memberjunction/ng-ai-test-harness';\nimport { ParseJSONOptions, ParseJSONRecursive } from '@memberjunction/global';\n\n@RegisterClass(BaseFormComponent, 'MJ: AI Prompt Runs')\n@Component({\n standalone: false,\n selector: 'mj-ai-prompt-run-form',\n templateUrl: './ai-prompt-run-form.component.html',\n styleUrls: ['./ai-prompt-run-form.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MJAIPromptRunFormComponentExtended extends MJAIPromptRunFormComponent implements AfterViewInit, OnDestroy {\n public record!: MJAIPromptRunEntityExtended;\n \n // Related entities\n public prompt: MJAIPromptEntityExtended | null = null;\n public model: MJAIModelEntity | null = null;\n public parentRun: MJAIPromptRunEntityExtended | null = null;\n public childRuns: MJAIPromptRunEntityExtended[] = [];\n \n // UI state\n public isLoadingRelatedData = false;\n public isParsingMessages = false; // Will be set to true in ngOnInit if there are messages\n public inputExpanded = true; // Start open as users want to see this\n public messagesExpanded = true;\n public dataExpanded = false; // Changed to false - often blank\n public rawExpanded = false;\n public resultExpanded = false; // Start closed for lazy loading\n public metricsExpanded = false;\n public hierarchyExpanded = false;\n public validationExpanded = false; // Start closed for lazy loading\n public modelSpecificExpanded = false; // Start closed for lazy loading\n \n // Track what has been loaded\n private hasLoadedInput = false;\n private hasLoadedResult = false;\n private hasLoadedValidation = false;\n private hasLoadedMetrics = false;\n private hasLoadedModelSpecific = false;\n \n // Formatted values\n public formattedMessages = '';\n public formattedResult = '';\n public formattedValidationSummary = '';\n public formattedValidationAttempts = '';\n public formattedData = '';\n public formattedModelSelection = '';\n public formattedErrorDetails = '';\n public formattedModelSpecificResponseDetails = '';\n \n // Parsed input data\n public chatMessages: ChatMessage[] = [];\n public inputData: any = null;\n \n // Validation data\n public validationAttempts: any[] = [];\n public validationSummary: any = null;\n\n // Full-screen overlay state\n public FullScreenContent: string | null = null;\n public FullScreenLanguage = 'json';\n public FullScreenTitle = '';\n\n // Field injections\n private testHarnessWindowService = inject(TestHarnessWindowManagerService);\n private viewContainerRef = inject(ViewContainerRef);\n \n async ngOnInit() {\n await super.ngOnInit();\n if (this.record?.ID) {\n // Set loading state immediately if input panel will be loaded and has messages\n if (this.inputExpanded && this.record.Messages && this.record.Messages.trim() !== '') {\n this.isParsingMessages = true;\n this.cdr.detectChanges(); // Force immediate update to show spinner\n }\n \n // Load related entities\n await this.loadRelatedData();\n \n // Format ALL JSON fields immediately on load - it's inexpensive\n console.log('🚀 Formatting all JSON fields on init...');\n this.formatAllJsonFields();\n \n // Mark all data as loaded since we're doing it all upfront\n this.hasLoadedInput = true;\n this.hasLoadedResult = true;\n this.hasLoadedValidation = true;\n this.hasLoadedMetrics = true;\n this.hasLoadedModelSpecific = true;\n \n this.isParsingMessages = false;\n this.cdr.detectChanges();\n }\n }\n \n ngAfterViewInit() {\n // Force change detection to ensure expansion panels render correctly\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n \n ngOnDestroy() {\n // Clean up any resources\n // Currently no subscriptions or timers to clean up\n // This is here for future use and to complete the lifecycle\n }\n \n onInputPanelToggle(event: any) {\n const expanded = event as boolean;\n this.inputExpanded = expanded;\n // Data is already formatted on init, no need to do anything\n }\n \n onResultPanelToggle(event: any) {\n const expanded = event as boolean;\n this.resultExpanded = expanded;\n // Data is already formatted on init, no need to do anything\n }\n \n onValidationPanelToggle(event: any) {\n const expanded = event as boolean;\n this.validationExpanded = expanded;\n // Data is already formatted on init, no need to do anything\n }\n \n onMetricsPanelToggle(event: any) {\n const expanded = event as boolean;\n this.metricsExpanded = expanded;\n // Data is already formatted on init, no need to do anything\n }\n \n onModelSpecificPanelToggle(event: any) {\n const expanded = event as boolean;\n this.modelSpecificExpanded = expanded;\n // Data is already formatted on init, no need to do anything\n }\n \n onModelSelectionPanelToggle(event: any) {\n const expanded = event as boolean;\n // Data is already formatted on init, no need to do anything\n }\n \n private async loadRelatedData() {\n this.isLoadingRelatedData = true;\n try {\n const md = new Metadata();\n \n // Load prompt\n if (this.record.PromptID) {\n this.prompt = await md.GetEntityObject<MJAIPromptEntityExtended>('MJ: AI Prompts');\n if (this.prompt) {\n await this.prompt.Load(this.record.PromptID);\n }\n }\n \n // Load model\n if (this.record.ModelID) {\n this.model = await md.GetEntityObject<MJAIModelEntity>('MJ: AI Models');\n if (this.model) {\n await this.model.Load(this.record.ModelID);\n }\n }\n \n // Load parent run if exists\n if (this.record.ParentID) {\n this.parentRun = await md.GetEntityObject<MJAIPromptRunEntityExtended>('MJ: AI Prompt Runs');\n if (this.parentRun) {\n await this.parentRun.Load(this.record.ParentID);\n }\n }\n \n // Load child runs\n await this.loadChildRuns();\n } catch (error) {\n console.error('Error loading related data:', error);\n } finally {\n this.isLoadingRelatedData = false;\n }\n }\n \n private async loadChildRuns() {\n if (!this.record.ID) return;\n \n const rv = new RunView();\n const result = await rv.RunView<MJAIPromptRunEntityExtended>({\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: `ParentID='${this.record.ID}'`,\n OrderBy: 'ExecutionOrder ASC, RunAt DESC',\n ResultType: 'entity_object'\n });\n \n if (result.Success) {\n this.childRuns = result.Results || [];\n }\n }\n \n private formatAllJsonFields() {\n if (!this.record) {\n console.warn('formatAllJsonFields called but record is not available');\n return;\n }\n \n console.log('📄 Formatting input data...');\n // Format input/messages data\n const messageData = this.record.ParseMessagesData();\n this.chatMessages = messageData.chatMessages;\n this.inputData = messageData.inputData;\n this.formattedMessages = messageData.formattedMessages;\n this.formattedData = messageData.formattedData;\n console.log('📄 Input data formatted. Chat messages:', this.chatMessages.length, 'Input data exists:', !!this.inputData);\n \n console.log('📊 Formatting result data...');\n // Format result data\n this.formattedResult = this.record.GetFormattedResult();\n console.log('📊 Result formatted:', !!this.formattedResult, 'Length:', this.formattedResult?.length);\n \n console.log('🔍 Formatting validation data...');\n // Format validation data\n this.loadValidationData();\n \n console.log('📈 Formatting metrics data...');\n // Format metrics data (ModelSelection, ErrorDetails)\n this.formatMetricsData();\n \n console.log('🔧 Formatting model specific data...');\n // Format model specific response details\n this.formatModelSpecificResponseDetails();\n \n // Format error details if available\n if (this.record.ErrorDetails && !this.formattedErrorDetails) {\n console.log('⚠️ Formatting error details...');\n this.formatErrorDetails();\n }\n \n console.log('✅ All JSON fields formatted');\n }\n \n \n private formatMetricsData() {\n // Format v2.78 JSON fields related to metrics\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n \n // Format ModelSelection\n if (this.record.ModelSelection) {\n try {\n const modelSelection = JSON.parse(this.record.ModelSelection);\n const parsed = ParseJSONRecursive(modelSelection, parseOptions);\n this.formattedModelSelection = JSON.stringify(parsed, null, 2);\n } catch (error) {\n this.formattedModelSelection = this.record.ModelSelection;\n }\n }\n \n // Format ErrorDetails\n if (this.record.ErrorDetails) {\n try {\n const errorDetails = JSON.parse(this.record.ErrorDetails);\n const parsed = ParseJSONRecursive(errorDetails, parseOptions);\n this.formattedErrorDetails = JSON.stringify(parsed, null, 2);\n } catch (error) {\n this.formattedErrorDetails = this.record.ErrorDetails;\n }\n }\n \n // Note: ModelSpecificResponseDetails is now formatted in its own panel toggle method\n }\n \n private formatErrorDetails() {\n if (!this.record.ErrorDetails) {\n this.formattedErrorDetails = '';\n return;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n \n try {\n const errorDetails = JSON.parse(this.record.ErrorDetails);\n const parsed = ParseJSONRecursive(errorDetails, parseOptions);\n this.formattedErrorDetails = JSON.stringify(parsed, null, 2);\n } catch (error) {\n this.formattedErrorDetails = this.record.ErrorDetails;\n }\n }\n \n private formatModelSpecificResponseDetails() {\n if (!this.record.ModelSpecificResponseDetails) {\n this.formattedModelSpecificResponseDetails = '';\n return;\n }\n \n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n \n try {\n const modelDetails = JSON.parse(this.record.ModelSpecificResponseDetails);\n const parsed = ParseJSONRecursive(modelDetails, parseOptions);\n this.formattedModelSpecificResponseDetails = JSON.stringify(parsed, null, 2);\n } catch (error) {\n this.formattedModelSpecificResponseDetails = this.record.ModelSpecificResponseDetails;\n }\n }\n \n getStatusColor(): string {\n if (!this.record) return '#6c757d';\n \n if (this.record.Success === true) {\n return '#28a745'; // Green\n } else if (this.record.Success === false) {\n return '#dc3545'; // Red\n } else if (this.record.CompletedAt) {\n return '#17a2b8'; // Blue (completed but no success flag)\n } else {\n return '#ffc107'; // Yellow (running)\n }\n }\n \n getStatusIcon(): string {\n if (!this.record) return 'fa-circle';\n \n if (this.record.Success === true) {\n return 'fa-check-circle';\n } else if (this.record.Success === false) {\n return 'fa-times-circle';\n } else if (this.record.CompletedAt) {\n return 'fa-info-circle';\n } else {\n return 'fa-spinner fa-spin';\n }\n }\n \n getStatusText(): string {\n if (!this.record) return 'Unknown';\n \n if (this.record.Success === true) {\n return 'Success';\n } else if (this.record.Success === false) {\n return 'Failed';\n } else if (this.record.CompletedAt) {\n return 'Completed';\n } else {\n return 'Running';\n }\n }\n \n formatDuration(ms: number | null): string {\n if (!ms) return '-';\n \n if (ms < 1000) {\n return `${ms}ms`;\n } else if (ms < 60000) {\n return `${(ms / 1000).toFixed(1)}s`;\n } else {\n const minutes = Math.floor(ms / 60000);\n const seconds = ((ms % 60000) / 1000).toFixed(0);\n return `${minutes}m ${seconds}s`;\n }\n }\n \n formatCost(cost: number | null): string {\n if (!cost) return '-';\n return `$${cost.toFixed(4)}`;\n }\n \n formatTokens(tokens: number | null): string {\n if (!tokens) return '-';\n return tokens.toLocaleString();\n }\n \n getRunTypeIcon(runType: string | null): string {\n switch (runType) {\n case 'Single':\n return 'fa-play-circle';\n case 'ParallelParent':\n return 'fa-layer-group';\n case 'ParallelChild':\n return 'fa-clone';\n case 'ResultSelector':\n return 'fa-filter';\n default:\n return 'fa-circle';\n }\n }\n \n getRunTypeColor(runType: string | null): string {\n switch (runType) {\n case 'Single':\n return '#6f42c1';\n case 'ParallelParent':\n return '#007bff';\n case 'ParallelChild':\n return '#17a2b8';\n case 'ResultSelector':\n return '#28a745';\n default:\n return '#6c757d';\n }\n }\n \n navigateToEntity(entityName: string, recordId: string | null) {\n if (!recordId) return;\n \n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n \n navigateToOriginalRun() {\n if (this.record?.RerunFromPromptRunID) {\n SharedService.Instance.OpenEntityRecord('MJ: AI Prompt Runs', CompositeKey.FromID(this.record.RerunFromPromptRunID));\n }\n }\n \n reRunPrompt() {\n console.log('🚀 Re-Run button clicked');\n console.log('📋 Current record:', this.record);\n console.log('🆔 Record ID:', this.record?.ID);\n console.log('🎯 Prompt ID:', this.record?.PromptID);\n \n if (!this.record?.ID || !this.record.PromptID) {\n console.error('❌ Cannot re-run: missing record ID or PromptID');\n return;\n }\n \n const params = {\n promptId: this.record.PromptID,\n promptRunId: this.record.ID,\n title: `Re-Run: ${this.prompt?.Name || 'Prompt'}`,\n width: '80vw',\n height: '80vh',\n viewContainerRef: this.viewContainerRef\n };\n \n console.log('📞 Calling openPromptTestHarness with params:', params);\n \n // Open AI Test Harness dialog with the prompt run ID\n this.testHarnessWindowService.openPromptTestHarness(params).subscribe({\n next: (result: any) => {\n if (result) {\n // Optionally refresh the current view or show a success message\n console.log('Test harness completed', result);\n }\n },\n error: (error: any) => {\n console.error('Error in test harness:', error);\n }\n });\n }\n \n copyToClipboard(text: string, fieldName: string) {\n navigator.clipboard.writeText(text).then(() => {\n // Just show a console log for now, as ShowSimpleNotification may not exist\n console.log(`${fieldName} copied to clipboard`);\n }).catch(err => {\n console.error('Failed to copy:', err);\n });\n }\n \n async refreshData() {\n console.log('🔄 refreshData called');\n if (this.record?.ID) {\n console.log('🔄 Reloading record and formatting all data...');\n \n await this.record.Load(this.record.ID);\n await this.loadRelatedData();\n console.log('🔄 Record reloaded. Result field exists:', !!this.record.Result);\n \n // Format all JSON fields again\n this.formatAllJsonFields();\n \n this.cdr.detectChanges();\n }\n }\n \n public openFullScreen(content: string, language: string, title: string): void {\n this.FullScreenContent = content;\n this.FullScreenLanguage = language;\n this.FullScreenTitle = title;\n this.cdr.detectChanges();\n }\n\n public closeFullScreen(): void {\n this.FullScreenContent = null;\n this.cdr.detectChanges();\n }\n\n private loadValidationData() {\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n\n // Parse validation attempts if available\n if (this.record.ValidationAttempts) {\n try {\n this.validationAttempts = JSON.parse(this.record.ValidationAttempts);\n const recursivelyParsed = ParseJSONRecursive(this.validationAttempts, parseOptions);\n this.formattedValidationAttempts = JSON.stringify(recursivelyParsed, null, 2);\n } catch (error) {\n console.error('Error parsing ValidationAttempts:', error);\n this.validationAttempts = [];\n this.formattedValidationAttempts = '';\n }\n } else {\n this.validationAttempts = [];\n this.formattedValidationAttempts = '';\n }\n \n // Parse validation summary if available\n if (this.record.ValidationSummary) {\n try {\n this.validationSummary = JSON.parse(this.record.ValidationSummary);\n const recursivelyParsed = ParseJSONRecursive(this.validationSummary, parseOptions);\n this.formattedValidationSummary = JSON.stringify(recursivelyParsed, null, 2);\n } catch (error) {\n console.error('Error parsing ValidationSummary:', error);\n this.validationSummary = null;\n this.formattedValidationSummary = '';\n }\n } else {\n this.validationSummary = null;\n this.formattedValidationSummary = '';\n }\n \n // Don't auto-expand validation panel anymore - let user expand when needed\n }\n}","<div class=\"record-form-container\" style=\"height: 100%; display: flex; flex-direction: column;\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <mj-form-toolbar [Form]=\"this\"></mj-form-toolbar>\n\n <!-- Header Section -->\n <div class=\"prompt-run-header\">\n <div class=\"header-content\">\n <div class=\"run-overview\">\n <div class=\"run-icon-wrapper\" [style.background-color]=\"getStatusColor() + '20'\">\n <i [class]=\"'fa-solid ' + getStatusIcon()\" [style.color]=\"getStatusColor()\"></i>\n </div>\n <div class=\"run-info\">\n <h1 class=\"run-title\">\n Prompt Run\n @if (record.ID) {\n <span class=\"run-id\">#{{ record.ID.substring(0, 8) }}</span>\n }\n </h1>\n <div class=\"run-meta\">\n <!-- 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) — 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.Status === 'Failed' || record.Success === false) {\n <div class=\"error-info\">\n @if (record.Status) {\n <p class=\"finish-reason\">\n <strong>Status:</strong> {{ record.Status }}\n </p>\n }\n @if (formattedErrorDetails) {\n <div class=\"error-details\">\n <div class=\"json-toolbar\">\n <h4 style=\"margin: 0;\">Error Details</h4>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedErrorDetails, 'json', 'Error Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor\n [ngModel]=\"formattedErrorDetails\"\n [disabled]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 200px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n @if (!formattedErrorDetails) {\n <p class=\"error-hint\">\n The prompt execution failed but no additional error information is available.\n </p>\n }\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Token Usage & Metrics Panel -->\n <mj-accordion-panel [Expanded]=\"metricsExpanded\" (ExpandedChange)=\"onMetricsPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Token Usage & Metrics\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"metrics-grid\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-message\"></i>\n <h4>Prompt Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensPrompt) }}</div>\n @if (record.TokensPromptRollup && record.TokensPromptRollup !== record.TokensPrompt) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensPromptRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-reply\"></i>\n <h4>Completion Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensCompletion) }}</div>\n @if (record.TokensCompletionRollup && record.TokensCompletionRollup !== record.TokensCompletion) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensCompletionRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h4>Total Tokens</h4>\n </div>\n <div class=\"metric-value large\">{{ formatTokens(record.TokensUsed) }}</div>\n @if (record.TokensUsedRollup && record.TokensUsedRollup !== record.TokensUsed) {\n <div class=\"metric-rollup\">\n <span>Rollup: {{ formatTokens(record.TokensUsedRollup) }}</span>\n </div>\n }\n </div>\n \n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-dollar-sign\"></i>\n <h4>Cost</h4>\n </div>\n <div class=\"metric-value large\">{{ formatCost(record.Cost) }}</div>\n @if (record.TotalCost && record.TotalCost !== record.Cost) {\n <div class=\"metric-rollup\">\n <span>Total: {{ formatCost(record.TotalCost) }}</span>\n </div>\n }\n @if (record.CostCurrency) {\n <div class=\"metric-currency\">{{ record.CostCurrency }}</div>\n }\n </div>\n \n <!-- Timing Metrics -->\n @if (record.QueueTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-hourglass-start\"></i>\n <h4>Queue Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.QueueTime) }}</div>\n </div>\n }\n \n @if (record.PromptTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-brain\"></i>\n <h4>Prompt Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.PromptTime) }}</div>\n </div>\n }\n \n @if (record.CompletionTime != null) {\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <h4>Completion Time</h4>\n </div>\n <div class=\"metric-value large\">{{ formatDuration(record.CompletionTime) }}</div>\n </div>\n }\n </div>\n \n <!-- Additional Metrics -->\n <div class=\"additional-metrics\">\n @if (record.ExecutionOrder !== null) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Execution Order:</span>\n <span class=\"metric-value\">{{ record.ExecutionOrder }}</span>\n </div>\n }\n @if (record.AgentID) {\n <div class=\"metric-row\">\n <span class=\"metric-label\">Agent:</span>\n <span class=\"metric-value link\" (click)=\"navigateToEntity('MJ: AI Agents', record.AgentID)\">\n {{ record.Agent }}\n <i class=\"fa-solid fa-external-link\"></i>\n </span>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Validation & Retry Panel -->\n @if (record && ((record.ValidationAttemptCount && record.ValidationAttemptCount > 0) || record.ValidationBehavior)) {\n <mj-accordion-panel [Expanded]=\"validationExpanded\" (ExpandedChange)=\"onValidationPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-check\"></i>\n Validation & Retries\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <span class=\"panel-count\">({{ record.ValidationAttemptCount }} attempts)</span>\n }\n @if (record.FinalValidationPassed) {\n <span class=\"panel-badge success\">Passed</span>\n } @else if (record.FinalValidationPassed === false) {\n <span class=\"panel-badge error\">Failed</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <!-- Validation Summary -->\n <div class=\"validation-summary\">\n <div class=\"summary-header\">\n <h4>Validation Summary</h4>\n <div class=\"validation-status\" [class.success]=\"record.FinalValidationPassed\" [class.failed]=\"!record.FinalValidationPassed\">\n <i [class]=\"record.FinalValidationPassed ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n {{ record.FinalValidationPassed ? 'Validation Passed' : 'Validation Failed' }}\n </div>\n </div>\n \n <div class=\"validation-metrics\">\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Total Attempts</div>\n <div class=\"metric-value\">{{ record.ValidationAttemptCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Successful</div>\n <div class=\"metric-value\">{{ record.SuccessfulValidationCount || 0 }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Behavior</div>\n <div class=\"metric-value\">{{ record.ValidationBehavior || 'Not set' }}</div>\n </div>\n <div class=\"metric-card small\">\n <div class=\"metric-label\">Retry Strategy</div>\n <div class=\"metric-value\">{{ record.RetryStrategy || 'Not set' }}</div>\n </div>\n </div>\n \n @if (record.FinalValidationError) {\n <div class=\"validation-error\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Final Validation Error</h5>\n <p>{{ record.FinalValidationError }}</p>\n @if (record && record.ValidationErrorCount && record.ValidationErrorCount > 0) {\n <span class=\"error-count\">{{ record.ValidationErrorCount }} validation errors</span>\n }\n </div>\n }\n \n @if (record.CommonValidationError && record.CommonValidationError !== record.FinalValidationError) {\n <div class=\"common-error\">\n <h5><i class=\"fa-solid fa-repeat\"></i> Most Common Error</h5>\n <p>{{ record.CommonValidationError }}</p>\n </div>\n }\n </div>\n \n <!-- Retry Timeline -->\n @if (record && record.ValidationAttemptCount && record.ValidationAttemptCount > 1) {\n <div class=\"retry-timeline\">\n <h4>Retry Timeline</h4>\n <div class=\"timeline-info\">\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>First Attempt: {{ record.FirstAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-flag-checkered\"></i>\n <span>Last Attempt: {{ record.LastAttemptAt | date:'short' }}</span>\n </div>\n <div class=\"timeline-stat\">\n <i class=\"fa-solid fa-stopwatch\"></i>\n <span>Total Retry Duration: {{ formatDuration(record.TotalRetryDurationMS) }}</span>\n </div>\n </div>\n </div>\n }\n \n <!-- Validation Attempts Details -->\n @if (validationAttempts && validationAttempts.length > 0) {\n <div class=\"validation-attempts\">\n <h4>Validation Attempts</h4>\n <div class=\"attempts-list\">\n @for (attempt of validationAttempts; track attempt.attemptNumber) {\n <div class=\"attempt-item\" [class.success]=\"attempt.success\" [class.failed]=\"!attempt.success\">\n <div class=\"attempt-number\">\n <i [class]=\"attempt.success ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n Attempt #{{ attempt.attemptNumber }}\n </div>\n <div class=\"attempt-details\">\n <span class=\"attempt-time\">{{ attempt.timestamp }}</span>\n @if (!attempt.success) {\n <span class=\"attempt-error\">{{ attempt.errorMessage || 'Unknown error' }}</span>\n @if (attempt.validationErrorCount > 0) {\n <span class=\"error-count\">({{ attempt.validationErrorCount }} errors)</span>\n }\n }\n @if (attempt.outputLength) {\n <span class=\"output-length\">Output: {{ attempt.outputLength }} chars</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Validation Summary JSON -->\n @if (validationSummary) {\n <div class=\"validation-json\">\n <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 : '—' }}\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 : '—' }}\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 : '—' }}\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 : '—' }}\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 : '—' }}\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 : '—' }}\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 : '—' }}\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 || '—' }}\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 || '—' }}\n </div>\n </div>\n\n @if (record.RunAt) {\n <div class=\"detail-field\">\n <label>Started At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-clock\"></i>\n {{ record.RunAt | date:'medium' }}\n </div>\n </div>\n }\n \n @if (record.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed At</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ record.CompletedAt | date:'medium' }}\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Model Specific Response Details Panel -->\n @if (record.ModelSpecificResponseDetails) {\n <mj-accordion-panel [Expanded]=\"modelSpecificExpanded\" (ExpandedChange)=\"onModelSpecificPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Specific Response Details\n <span class=\"panel-badge\">JSON</span>\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"copyToClipboard(formattedModelSpecificResponseDetails, 'Model Specific Response Details')\"\n title=\"Copy JSON\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"openFullScreen(formattedModelSpecificResponseDetails, 'json', 'Model Specific Response Details')\"\n title=\"View full screen\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedModelSpecificResponseDetails\"\n name=\"formattedModelSpecificResponseDetails\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Model Selection & Performance Panel (v2.78 fields) -->\n <mj-accordion-panel [Expanded]=\"false\" (ExpandedChange)=\"onModelSelectionPanelToggle($event)\" style=\"margin-bottom: 8px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Model Selection & Performance\n @if (record.CacheHit) {\n <span class=\"panel-badge success\">Cached</span>\n }\n @if (record.WasSelectedResult) {\n <span class=\"panel-badge success\">Selected</span>\n }\n </span>\n </ng-template>\n <div class=\"panel-content\">\n <div class=\"detail-fields-grid\">\n <!-- Model Selection Details -->\n <div class=\"detail-field\">\n <label>Status</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ record.Status || 'Unknown' }}\n </div>\n </div>\n \n <div class=\"detail-field\">\n <label>Selection Strategy</label>\n <div class=\"detail-value\">\n <i class=\"fa-solid fa-strategy\"></i>\n {{ record.SelectionStrategy || '—' }}\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 : '—' }}\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 }\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 }\n</div>"]}
|