import { HoverCard, HoverCardContent, HoverCardTrigger, } from '@/components/ui/hover-card' import { IconInfoCircle } from '@tabler/icons-react' import { CatalogModel, ModelQuant } from '@/services/models' interface ModelInfoHoverCardProps { model: CatalogModel variant?: ModelQuant isDefaultVariant?: boolean defaultModelQuantizations: string[] modelSupportStatus: Record onCheckModelSupport: (variant: ModelQuant) => void children?: React.ReactNode } export const ModelInfoHoverCard = ({ model, variant, isDefaultVariant, defaultModelQuantizations, modelSupportStatus, onCheckModelSupport, children, }: ModelInfoHoverCardProps) => { const displayVariant = variant || model.quants.find((m) => defaultModelQuantizations.some((e) => m.model_id.toLowerCase().includes(e) ) ) || model.quants?.[0] const handleMouseEnter = () => { if (displayVariant) { onCheckModelSupport(displayVariant) } } const getCompatibilityStatus = () => { const status = displayVariant ? modelSupportStatus[displayVariant.model_id] : null if (status === 'LOADING') { return (
Checking...
) } else if (status === 'GREEN') { return (
Recommended for your device
) } else if (status === 'YELLOW') { return (
May be slow on your device
) } else if (status === 'RED') { return (
May be incompatible with your device
) } else if (status === 'GREY') { return (
Unable to determine model compatibility with your current device
) } else { return (
Unknown
) } } return ( {children || (
)}
{/* Header */}

{!isDefaultVariant ? variant?.model_id : model?.model_name}

{!isDefaultVariant ? 'Model Variant Information' : 'Model Information'}

{/* Main Info Grid */}
<>
{isDefaultVariant ? 'Default Quantization' : 'Quantization'} {variant?.model_id.split('-').pop()?.toUpperCase() || 'N/A'}
Compatibility
{getCompatibilityStatus()}
{/* Features Section */} {(model.num_mmproj > 0 || model.tools) && (
Features
{model.num_mmproj > 0 && (
Vision
)} {model.tools && (
Tools
)}
)}
) }