'use client' /** * RAG Pipeline Page * * Dokument-Indexierung fuer die semantische Suche. * Teil der KI-Daten-Pipeline: * OCR-Labeling -> RAG Pipeline -> Daten & RAG */ import { PagePurpose } from '@/components/common/PagePurpose' import { AIModuleSidebarResponsive } from '@/components/ai/AIModuleSidebar' import { useRagPipeline } from './useRagPipeline' import { TabButton } from './_components/SharedWidgets' import { TrainingJobCard } from './_components/TrainingJobCard' import { DatasetOverview } from './_components/DatasetOverview' import { ArchitectureTab } from './_components/ArchitectureTab' import { DataSourcesTab } from './_components/DataSourcesTab' import { NewTrainingModal } from './_components/NewTrainingModal' export default function TrainingDashboardPage() { const { activeTab, setActiveTab, jobs, stats, dataSources, showNewTrainingModal, setShowNewTrainingModal, setSelectedJob, isLoading, error, setError, handleStartTraining, handlePauseJob, handleResumeJob, handleCancelJob, } = useRagPipeline() return (
{/* Header */}

RAG-Indexierung

Dokumente fuer die semantische Suche aufbereiten und indexieren

{activeTab === 'dashboard' && ( )}
{/* Tabs */}
setActiveTab('dashboard')}> Dashboard setActiveTab('architecture')}> Architektur setActiveTab('sources')}> Datenquellen
{/* Error Banner */} {error && (
{error}
)} {/* Tab Content */} {activeTab === 'architecture' ? ( ) : activeTab === 'sources' ? ( ) : isLoading ? ( ) : ( )}
setShowNewTrainingModal(false)} onSubmit={handleStartTraining} />
) } // --- Internal layout components --- function LoadingSpinner() { return (

Lade Daten...

) } function DashboardContent({ jobs, stats, setActiveTab, setShowNewTrainingModal, setSelectedJob, handlePauseJob, handleResumeJob, handleCancelJob }: { jobs: import('./types').TrainingJob[] stats: import('./types').DatasetStats activeTab: string setActiveTab: (tab: 'dashboard' | 'architecture' | 'sources') => void setShowNewTrainingModal: (show: boolean) => void setSelectedJob: (job: import('./types').TrainingJob | null) => void handlePauseJob: (jobId: string) => Promise handleResumeJob: (jobId: string) => Promise handleCancelJob: (jobId: string) => Promise }) { return (
{/* Training Jobs */}
{jobs.length === 0 ? ( setShowNewTrainingModal(true)} /> ) : ( jobs.map(job => ( handlePauseJob(job.id)} onResume={() => handleResumeJob(job.id)} onStop={() => handleCancelJob(job.id)} onViewDetails={() => setSelectedJob(job)} /> )) )}
{/* Sidebar */}
) } function EmptyJobsState({ onStart }: { onStart: () => void }) { return (

Keine aktive Indexierung

Starten Sie eine neue Indexierung, um Dokumente fuer die Suche aufzubereiten.

) } function QuickActions({ setActiveTab }: { setActiveTab: (tab: 'dashboard' | 'architecture' | 'sources') => void }) { return (

Schnellaktionen

setActiveTab('architecture')} /> setActiveTab('sources')} />
) } function QuickActionButton({ icon, title, subtitle, onClick }: { icon: string title: string subtitle: string onClick?: () => void }) { return ( ) }