import { Bot, Heart, Download, Cpu, DatabaseIcon, CheckCircle, XCircle, ExternalLink } from 'lucide-react' import { getModelSize } from '../lib/huggingface' import { useModel } from '../contexts/ModelContext' import ModelLoader from './ModelLoader' import Tooltip from './Tooltip' const ModelInfo = () => { const formatNumber = (num: number) => { if (num >= 1000000000) { return (num / 1000000000).toFixed(1) + 'B' } else if (num >= 1000000) { return (num / 1000000).toFixed(1) + 'M' } else if (num >= 1000) { return (num / 1000).toFixed(1) + 'K' } return num.toString() } const { models, status, modelInfo, selectedQuantization, isFetching, errorText } = useModel() const ModelInfoSkeleton = () => (

) if (!modelInfo || isFetching || models.length === 0) { return } return (
{/* Model Name Row */}
{/* Compatibility Status */} {typeof modelInfo.isCompatible === 'boolean' && (
{modelInfo.isCompatible && status !== 'error' ? ( ) : ( )}
)}
{modelInfo.name} {/* Base Model Link */} {modelInfo.baseId && modelInfo.baseId !== modelInfo.id && ( ( {modelInfo.baseId}) )}
{/* Stats Grid */}
{modelInfo.likes > 0 && (
{formatNumber(modelInfo.likes)}
)} {modelInfo.downloads > 0 && (
{formatNumber(modelInfo.downloads)}
)}
{modelInfo.parameters ? ( {formatNumber(modelInfo.parameters)} ) : ( ? )}
{modelInfo.parameters ? ( {`~${getModelSize( modelInfo.parameters, selectedQuantization ).toFixed(1)}MB`} ) : ( ? )}
{/* Incompatibility Message */} {((modelInfo.isCompatible === false && modelInfo.incompatibilityReason) || errorText) && (

{errorText ? errorText : modelInfo.incompatibilityReason}

)}
) } export default ModelInfo