import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Progress } from "@/components/ui/progress"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import { Trash2, HardDrive, Cpu, Database, Upload, Globe } from "lucide-react"; import { useSystemMonitor } from "@/hooks/use-system-monitor"; import { useLocalModels } from "@/hooks/use-local-models"; import { useState } from "react"; import { ModelDownloadDialog } from "./model-download-dialog"; export function SystemPanel() { const stats = useSystemMonitor(); const { models, deleteModel, refresh } = useLocalModels(); const [showDownloadDialog, setShowDownloadDialog] = useState(false); const ramUsagePercent = stats ? (stats.memory_used / stats.memory_total) * 100 : 0; const formatBytes = (bytes: number) => { const gb = bytes / (1024 * 1024 * 1024); return `${gb.toFixed(1)} GB`; }; return (
{/* Hardware Stats */}

Monitoramento

Processador
Uso {stats?.cpu_usage.toFixed(1)}%
Memória RAM
{stats ? formatBytes(stats.memory_used) : '-'} {stats ? formatBytes(stats.memory_total) : '-'}
{/* Models List */}

Modelos Instalados

{models.map((model) => { // Tentar detectar se é modelo local/GGUF (heurística: modelos GGUF geralmente têm nomes específicos) // Por enquanto, vamos mostrar todos como disponíveis const isLocal = model.name.toLowerCase().includes('gguf') || model.name.toLowerCase().endsWith('.gguf'); return (
{model.name}
{isLocal && ( Local )}
{model.size}

Remover modelo

); })} {models.length === 0 && (

Nenhum modelo encontrado.

)}
{ refresh(); setShowDownloadDialog(false); }} />
); }