import React, { useState, useEffect } from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Progress } from '@/components/ui/progress'; import { Plus, Play, Pause, Download, Trash2, Eye } from 'lucide-react'; import '../App.css'; const Dashboard = ({ onCreateProject, onViewProject }) => { const [projects, setProjects] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { fetchProjects(); }, []); const fetchProjects = async () => { try { const response = await fetch('/api/projects'); const data = await response.json(); setProjects(data); } catch (error) { console.error('Erro ao buscar projetos:', error); } finally { setLoading(false); } }; const getStatusColor = (status) => { switch (status) { case 'completed': return 'bg-green-500'; case 'running': return 'bg-blue-500'; case 'failed': return 'bg-red-500'; case 'pending': return 'bg-yellow-500'; default: return 'bg-gray-500'; } }; const getStatusText = (status) => { switch (status) { case 'completed': return 'Concluído'; case 'running': return 'Treinando'; case 'failed': return 'Falhou'; case 'pending': return 'Pendente'; case 'cancelled': return 'Cancelado'; default: return 'Desconhecido'; } }; const handleStartTraining = async (projectId) => { try { await fetch(`/api/projects/${projectId}/start-training`, { method: 'POST', }); fetchProjects(); // Refresh projects } catch (error) { console.error('Erro ao iniciar treinamento:', error); } }; const handleStopTraining = async (projectId) => { try { await fetch(`/api/projects/${projectId}/stop-training`, { method: 'POST', }); fetchProjects(); // Refresh projects } catch (error) { console.error('Erro ao parar treinamento:', error); } }; const handleDeleteProject = async (projectId) => { if (window.confirm('Tem certeza que deseja excluir este projeto?')) { try { await fetch(`/api/projects/${projectId}`, { method: 'DELETE', }); fetchProjects(); // Refresh projects } catch (error) { console.error('Erro ao excluir projeto:', error); } } }; if (loading) { return (
Carregando projetos...
); } return (
{/* Header */}

Dashboard LoRA

Gerencie seus projetos de treinamento LoRA

{/* Stats Cards */}
Total de Projetos
{projects.length}
Em Treinamento
{projects.filter(p => p.status === 'running').length}
Concluídos
{projects.filter(p => p.status === 'completed').length}
Falharam
{projects.filter(p => p.status === 'failed').length}
{/* Projects List */}

Projetos Recentes

{projects.length === 0 ? (

Nenhum projeto encontrado

Crie seu primeiro projeto LoRA para começar

) : (
{projects.map((project) => (
{project.name} {project.description || 'Sem descrição'}
{getStatusText(project.status)}
Modelo Base: {project.base_model}
Rank: {project.rank} | Alpha: {project.alpha}
Épocas: {project.current_epoch || 0}/{project.num_epochs}
{project.status === 'running' && (
Progresso {Math.round((project.progress || 0) * 100)}%
{project.current_loss && (
Loss atual: {project.current_loss.toFixed(4)}
)}
)}
{project.status === 'pending' || project.status === 'failed' ? ( ) : project.status === 'running' ? ( ) : project.status === 'completed' ? ( ) : null} {project.status !== 'running' && ( )}
))}
)}
); }; export default Dashboard;