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'
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,
modelInfo,
selectedQuantization,
isFetching
} = useModel()
const ModelInfoSkeleton = () => (
)
if (!modelInfo || isFetching || models.length === 0) {
return
}
return (
{/* Model Name Row */}
{modelInfo.name}
{/* Compatibility Status */}
{typeof modelInfo.isCompatible === 'boolean' && (
{modelInfo.isCompatible ? (
<>
>
) : (
<>
>
)}
)}
{/* Base Model Link */}
{modelInfo.baseId && (
)}
{/* Stats Row */}
{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 && (
{modelInfo.incompatibilityReason}
)}
)
}
export default ModelInfo