'use client' import Link from 'next/link' import { SkeletonDots } from '@/components/common/SkeletonText' import { TrainingMetrics } from '@/components/ai/TrainingMetrics' import type { TrOCRStatus, TrainingExample, MagicSettings } from '../types' import { API_BASE } from '../types' interface TabTrainingProps { status: TrOCRStatus | null examples: TrainingExample[] trainingImage: File | null trainingText: string fineTuning: boolean settings: MagicSettings showTrainingDashboard: boolean onSetTrainingImage: (file: File | null) => void onSetTrainingText: (text: string) => void onAddExample: () => void onFineTune: () => void onToggleDashboard: () => void } export function TabTraining({ status, examples, trainingImage, trainingText, fineTuning, settings, showTrainingDashboard, onSetTrainingImage, onSetTrainingText, onAddExample, onFineTune, onToggleDashboard, }: TabTrainingProps) { const exampleCount = status?.training_examples_count || 0 const progressPct = Math.min(100, (exampleCount / 10) * 100) return (
{/* Training Overview */}
{/* Add Training Example */} {/* Fine-Tuning */}
{/* Training Examples List */} {examples.length > 0 && ( )} {/* Training Dashboard Demo */}
) } /* ------------------------------------------------------------------ */ function TrainingOverviewCard({ status, settings, exampleCount, progressPct, }: { status: TrOCRStatus | null settings: MagicSettings exampleCount: number progressPct: number }) { return (

Training mit LoRA

LoRA (Low-Rank Adaptation) ermoeglicht effizientes Fine-Tuning ohne das Basismodell zu veraendern. Das Training erfolgt lokal auf Ihrem System.

{exampleCount}
Trainingsbeispiele
10
Minimum benoetigt
{settings.loraRank}
LoRA Rank
{status?.has_lora_adapter ? '\u2713' : '\u2717'}
Adapter aktiv
Fortschritt zum Fine-Tuning {progressPct.toFixed(0)}%
) } function AddExampleCard({ trainingImage, trainingText, onSetTrainingImage, onSetTrainingText, onAddExample, }: { trainingImage: File | null trainingText: string onSetTrainingImage: (file: File | null) => void onSetTrainingText: (text: string) => void onAddExample: () => void }) { return (

Trainingsbeispiel hinzufuegen

Lade ein Bild mit handgeschriebenem Text hoch und gib die korrekte Transkription ein.

onSetTrainingImage(e.target.files?.[0] || null)} /> {trainingImage && (
Bild ausgewaehlt: {trainingImage.name}
)}