import React from "react"; import { PredictionResult } from "../apiClient"; import "../static/style.css"; // Ensure the main CSS file is imported interface ResultsDisplayProps { result: PredictionResult; } const ResultsDisplay: React.FC = ({ result }) => { const confidencePercent = (result.confidence * 100).toFixed(1); return (
{/* --- CONFIDENCE HEADER --- */}
Confidence Score {confidencePercent}%
Stable {(result.probabilities[0] * 100).toFixed(1)}%
Weathered {(result.probabilities[1] * 100).toFixed(1)}%
{/* --- GROUPED METRICS CONTAINER (THE FIX) --- */}
{/* Performance Card */}

Performance

  • Inference{(result.inference_time * 1000).toFixed(1)} ms
  • Preprocessing{(result.preprocessing_time * 1000).toFixed(1)} ms
  • Total Time{(result.total_time * 1000).toFixed(1)} ms
  • Memory{result.memory_usage_mb.toFixed(1)} MB
{/* Model Card */}

Model

  • Name{result.model_metadata.model_name}
  • Parameters{result.model_metadata.parameters_count || "N/A"}
  • Accuracy{((result.model_metadata.performance_metrics?.accuracy ?? 0) * 100).toFixed(1)}%
{/* Quality Control Card */}

Quality Control

  • S/N Ratio{result.quality_control.signal_to_noise_ratio?.toFixed(2) ?? "N/A"}
  • Cosmic Rays {result.quality_control.cosmic_ray_detected ? "Detected" : "Clean"}
  • Saturation {result.quality_control.saturation_detected ? "Detected" : "Clean"}
{/* Preprocessing Card */}

Preprocessing

  • Range (cm⁻¹){result.preprocessing.wavenumber_range[0].toFixed(0)} - {result.preprocessing.wavenumber_range[1].toFixed(0)}
  • Data Points{result.preprocessing.original_length} → {result.preprocessing.target_length}
  • Smooth Window{result.preprocessing.smooth_window}
{/* --- QUALITY ISSUES CALLOUT --- */} {(result.quality_control.issues?.length ?? 0) > 0 && (
Quality Issues Detected
    {(result.quality_control.issues ?? []).map((issue, i) => (
  • {issue}
  • ))}
)}
); }; export default ResultsDisplay;