import React from 'react'; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, Typography, Box, Chip, Divider, LinearProgress, Accordion, AccordionSummary, AccordionDetails, Stepper, Step, StepLabel, StepContent, IconButton, } from '@mui/material'; import { Close as CloseIcon, ExpandMore as ExpandIcon, Diamond as DiamondIcon, Timeline as TimelineIcon, Verified as VerifiedIcon, Description as SourceIcon, BubbleChart as GraphIcon, } from '@mui/icons-material'; function ExplainabilityModal({ open, data, onClose }) { if (!data) return null; const summary = data.summary || {}; const entities = data.entities || data.identified_entities || []; const steps = data.reasoning_steps || data.reasoning_trace || []; const confidence = data.confidence || data.confidence_breakdown || {}; const sources = data.sources || data.sources_cited || []; const graphData = data.graph_data || data.graph_visualization || {}; const getConfidenceColor = (level) => { switch (level) { case 'high': return '#22c55e'; case 'moderate': return '#eab308'; case 'low': return '#f97316'; default: return '#6b7280'; } }; return ( Why This Answer? {/* Summary Card */} {summary.message && ( {summary.status?.replace('_', ' ').toUpperCase() || 'RESULT'} {summary.message} {summary.quick_stats && ( )} )} {/* Confidence Breakdown */} }> 📊 Confidence Breakdown {confidence.message} {(confidence.factors || []).map((factor, i) => ( {factor.name} {factor.percent} {factor.description} ))} {/* Fallback if no factors - use RAG metrics */} {!confidence.factors && ( Domain Relevance {confidence.domain_relevance || 'N/A'} Retrieval Quality {confidence.retrieval_quality || 'N/A'} Faithfulness {confidence.faithfulness || 'N/A'} {confidence.claims_supported && ( Claims Supported {confidence.claims_supported} )} )} {/* Identified Entities */} {entities.length > 0 && ( }> 🏷️ Identified Entities ({entities.length}) {entities.map((entity, i) => ( ))} )} {/* Reasoning Steps */} {steps.length > 0 && ( }> Reasoning Trace ({steps.length} steps) {steps.map((step, i) => ( ( {step.icon || step.step_number || i + 1} )} > {step.action_display || step.action?.replace('_', ' ').toUpperCase()} {step.explanation} {step.path_visualization && ( {step.path_visualization} )} ))} )} {/* Graph Visualization */} {(graphData.nodes?.length > 0 || graphData.edges?.length > 0) && ( }> Knowledge Graph ({graphData.node_count || graphData.nodes?.length || 0} nodes) {/* Simple node visualization */} {(graphData.nodes || []).slice(0, 15).map((node, i) => ( ))} {(graphData.nodes?.length || 0) > 15 && ( +{graphData.nodes.length - 15} more nodes )} {/* Edges count */} {graphData.edges?.length > 0 && ( {graphData.edges.length} relationships found )} )} {/* Sources */} {sources.length > 0 && ( }> Sources ({sources.length}) {sources.map((source, i) => ( {source.icon || '📎'} {source.citation || source} ))} )} ); } export default ExplainabilityModal;