fix: Sidebar — MagicHelp (TrOCR) + Bildung & Schule Kategorie entfernt
Diese Module gehoeren nur in den Admin Lehrer (macmini:3002), nicht ins Compliance Dashboard. Entfernt: Education Search, Zeugnisse-Crawler, Abitur-Archiv, Klausur-Korrektur, Magic Help. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -66,16 +66,6 @@
|
|||||||
@apply text-infrastructure-700;
|
@apply text-infrastructure-700;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-category-education {
|
|
||||||
@apply bg-education-100;
|
|
||||||
}
|
|
||||||
.border-category-education {
|
|
||||||
@apply border-education-300;
|
|
||||||
}
|
|
||||||
.text-category-education {
|
|
||||||
@apply text-education-700;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-category-communication {
|
.bg-category-communication {
|
||||||
@apply bg-communication-100;
|
@apply bg-communication-100;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,7 +77,6 @@ export default function RoleSelectPage() {
|
|||||||
{cat === 'compliance' && 'DSGVO & Compliance'}
|
{cat === 'compliance' && 'DSGVO & Compliance'}
|
||||||
{cat === 'ai' && 'KI & Automatisierung'}
|
{cat === 'ai' && 'KI & Automatisierung'}
|
||||||
{cat === 'infrastructure' && 'Infrastruktur'}
|
{cat === 'infrastructure' && 'Infrastruktur'}
|
||||||
{cat === 'education' && 'Bildung'}
|
|
||||||
{cat === 'communication' && 'Kommunikation'}
|
{cat === 'communication' && 'Kommunikation'}
|
||||||
{cat === 'development' && 'Entwicklung'}
|
{cat === 'development' && 'Entwicklung'}
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -56,7 +56,6 @@ const CATEGORY_CONFIG: Record<BackendModule['category'], { name: string; icon: s
|
|||||||
compliance: { name: 'DSGVO & Compliance', icon: 'shield', color: 'purple' },
|
compliance: { name: 'DSGVO & Compliance', icon: 'shield', color: 'purple' },
|
||||||
ai: { name: 'KI & Automatisierung', icon: 'brain', color: 'teal' },
|
ai: { name: 'KI & Automatisierung', icon: 'brain', color: 'teal' },
|
||||||
infrastructure: { name: 'Infrastruktur & DevOps', icon: 'server', color: 'orange' },
|
infrastructure: { name: 'Infrastruktur & DevOps', icon: 'server', color: 'orange' },
|
||||||
education: { name: 'Bildung & Schule', icon: 'graduation', color: 'blue' },
|
|
||||||
communication: { name: 'Kommunikation & Alerts', icon: 'mail', color: 'green' },
|
communication: { name: 'Kommunikation & Alerts', icon: 'mail', color: 'green' },
|
||||||
development: { name: 'Entwicklung & Produkte', icon: 'code', color: 'slate' }
|
development: { name: 'Entwicklung & Produkte', icon: 'code', color: 'slate' }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -463,7 +463,7 @@ export function DataFlowDiagram() {
|
|||||||
fill="#94a3b8"
|
fill="#94a3b8"
|
||||||
fontSize="11"
|
fontSize="11"
|
||||||
>
|
>
|
||||||
/compliance | /ai | /infrastructure | /education | /communication | /development
|
/compliance | /ai | /infrastructure | /communication | /development
|
||||||
</text>
|
</text>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
@@ -39,24 +39,6 @@ function getMockData(): CompanionData {
|
|||||||
suggestions: [
|
suggestions: [
|
||||||
{
|
{
|
||||||
id: '1',
|
id: '1',
|
||||||
title: 'Klausuren korrigieren',
|
|
||||||
description: 'Deutsch LK - 12 unkorrigierte Arbeiten warten',
|
|
||||||
priority: 'urgent',
|
|
||||||
icon: 'ClipboardCheck',
|
|
||||||
actionTarget: '/ai/klausur-korrektur',
|
|
||||||
estimatedTime: 120,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '2',
|
|
||||||
title: 'Elternsprechtag vorbereiten',
|
|
||||||
description: 'Notenuebersicht fuer 8b erstellen',
|
|
||||||
priority: 'high',
|
|
||||||
icon: 'Users',
|
|
||||||
actionTarget: '/education/grades',
|
|
||||||
estimatedTime: 30,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '3',
|
|
||||||
title: 'Material hochladen',
|
title: 'Material hochladen',
|
||||||
description: 'Arbeitsblatt fuer naechste Woche bereitstellen',
|
description: 'Arbeitsblatt fuer naechste Woche bereitstellen',
|
||||||
priority: 'medium',
|
priority: 'medium',
|
||||||
@@ -64,15 +46,6 @@ function getMockData(): CompanionData {
|
|||||||
actionTarget: '/development/content',
|
actionTarget: '/development/content',
|
||||||
estimatedTime: 15,
|
estimatedTime: 15,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: '4',
|
|
||||||
title: 'Lernstandserhebung planen',
|
|
||||||
description: 'Mathe 7a - Naechster Test in 2 Wochen',
|
|
||||||
priority: 'low',
|
|
||||||
icon: 'Calendar',
|
|
||||||
actionTarget: '/education/planning',
|
|
||||||
estimatedTime: 45,
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
upcomingEvents: [
|
upcomingEvents: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,164 +0,0 @@
|
|||||||
/**
|
|
||||||
* Extended TypeScript types for Abitur-Archiv
|
|
||||||
* Builds upon abitur-docs-types.ts with additional search and integration features
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { AbiturDokument, AbiturDocsFilter } from './abitur-docs-types'
|
|
||||||
|
|
||||||
// Theme suggestion for autocomplete search
|
|
||||||
export interface ThemaSuggestion {
|
|
||||||
label: string // "Gedichtanalyse Romantik"
|
|
||||||
count: number // 12 Dokumente
|
|
||||||
aufgabentyp: string // "gedichtanalyse"
|
|
||||||
zeitraum?: string // "Romantik"
|
|
||||||
kategorie?: string // Category for grouping
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extended filter with theme search
|
|
||||||
export interface AbiturArchivFilter extends AbiturDocsFilter {
|
|
||||||
thema?: string // Semantic theme search query
|
|
||||||
aufgabentyp?: string // Specific task type filter
|
|
||||||
}
|
|
||||||
|
|
||||||
// Similar document result from RAG
|
|
||||||
export interface SimilarDocument {
|
|
||||||
id: string
|
|
||||||
dateiname: string
|
|
||||||
similarity_score: number
|
|
||||||
fach: string
|
|
||||||
jahr: number
|
|
||||||
niveau: 'eA' | 'gA'
|
|
||||||
typ: 'aufgabe' | 'erwartungshorizont'
|
|
||||||
aufgaben_nummer: string
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extended document with similar documents
|
|
||||||
export interface AbiturDokumentExtended extends AbiturDokument {
|
|
||||||
similar_documents?: SimilarDocument[]
|
|
||||||
themes?: string[] // Extracted themes from content
|
|
||||||
}
|
|
||||||
|
|
||||||
// Response for archive listing
|
|
||||||
export interface AbiturArchivResponse {
|
|
||||||
documents: AbiturDokumentExtended[]
|
|
||||||
total: number
|
|
||||||
page: number
|
|
||||||
limit: number
|
|
||||||
total_pages: number
|
|
||||||
themes?: ThemaSuggestion[] // Available themes for current filter
|
|
||||||
}
|
|
||||||
|
|
||||||
// Response for theme suggestions
|
|
||||||
export interface ThemaSuggestResponse {
|
|
||||||
suggestions: ThemaSuggestion[]
|
|
||||||
query: string
|
|
||||||
}
|
|
||||||
|
|
||||||
// Response for similar documents
|
|
||||||
export interface SimilarDocsResponse {
|
|
||||||
document_id: string
|
|
||||||
similar: SimilarDocument[]
|
|
||||||
}
|
|
||||||
|
|
||||||
// Klausur creation from archive
|
|
||||||
export interface KlausurFromArchivRequest {
|
|
||||||
archiv_dokument_id: string
|
|
||||||
aufgabentyp: string
|
|
||||||
title?: string
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface KlausurFromArchivResponse {
|
|
||||||
klausur_id: string
|
|
||||||
eh_id?: string
|
|
||||||
success: boolean
|
|
||||||
message?: string
|
|
||||||
}
|
|
||||||
|
|
||||||
// View mode for document display
|
|
||||||
export type ViewMode = 'grid' | 'list'
|
|
||||||
|
|
||||||
// Sort options
|
|
||||||
export type SortField = 'jahr' | 'fach' | 'datum' | 'dateiname'
|
|
||||||
export type SortDirection = 'asc' | 'desc'
|
|
||||||
|
|
||||||
export interface SortConfig {
|
|
||||||
field: SortField
|
|
||||||
direction: SortDirection
|
|
||||||
}
|
|
||||||
|
|
||||||
// Predefined theme categories
|
|
||||||
export const THEME_CATEGORIES = {
|
|
||||||
textanalyse: {
|
|
||||||
label: 'Textanalyse',
|
|
||||||
subcategories: ['pragmatisch', 'literarisch', 'sachtext', 'rede', 'kommentar']
|
|
||||||
},
|
|
||||||
gedichtanalyse: {
|
|
||||||
label: 'Gedichtanalyse',
|
|
||||||
subcategories: ['romantik', 'expressionismus', 'barock', 'klassik', 'moderne']
|
|
||||||
},
|
|
||||||
dramenanalyse: {
|
|
||||||
label: 'Dramenanalyse',
|
|
||||||
subcategories: ['klassisch', 'modern', 'episches_theater']
|
|
||||||
},
|
|
||||||
prosaanalyse: {
|
|
||||||
label: 'Prosaanalyse',
|
|
||||||
subcategories: ['roman', 'kurzgeschichte', 'novelle', 'erzaehlung']
|
|
||||||
},
|
|
||||||
eroerterung: {
|
|
||||||
label: 'Eroerterung',
|
|
||||||
subcategories: ['textgebunden', 'materialgestuetzt', 'frei']
|
|
||||||
},
|
|
||||||
sprachreflexion: {
|
|
||||||
label: 'Sprachreflexion',
|
|
||||||
subcategories: ['sprachwandel', 'sprachkritik', 'kommunikation']
|
|
||||||
}
|
|
||||||
} as const
|
|
||||||
|
|
||||||
// Popular theme suggestions (static fallback)
|
|
||||||
export const POPULAR_THEMES: ThemaSuggestion[] = [
|
|
||||||
{ label: 'Textanalyse', count: 45, aufgabentyp: 'textanalyse_pragmatisch', kategorie: 'Analyse' },
|
|
||||||
{ label: 'Gedichtanalyse', count: 38, aufgabentyp: 'gedichtanalyse', kategorie: 'Analyse' },
|
|
||||||
{ label: 'Eroerterung', count: 32, aufgabentyp: 'eroerterung_textgebunden', kategorie: 'Argumentation' },
|
|
||||||
{ label: 'Dramenanalyse', count: 28, aufgabentyp: 'dramenanalyse', kategorie: 'Analyse' },
|
|
||||||
{ label: 'Prosaanalyse', count: 25, aufgabentyp: 'prosaanalyse', kategorie: 'Analyse' },
|
|
||||||
]
|
|
||||||
|
|
||||||
// Quick action types for document cards
|
|
||||||
export type QuickAction = 'preview' | 'download' | 'add_to_klausur' | 'view_similar'
|
|
||||||
|
|
||||||
// Fullscreen viewer state
|
|
||||||
export interface ViewerState {
|
|
||||||
isFullscreen: boolean
|
|
||||||
zoom: number
|
|
||||||
currentPage: number
|
|
||||||
totalPages: number
|
|
||||||
}
|
|
||||||
|
|
||||||
// Default viewer state
|
|
||||||
export const DEFAULT_VIEWER_STATE: ViewerState = {
|
|
||||||
isFullscreen: false,
|
|
||||||
zoom: 100,
|
|
||||||
currentPage: 1,
|
|
||||||
totalPages: 1
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zoom levels
|
|
||||||
export const ZOOM_LEVELS = [25, 50, 75, 100, 125, 150, 175, 200] as const
|
|
||||||
export const MIN_ZOOM = 25
|
|
||||||
export const MAX_ZOOM = 200
|
|
||||||
export const ZOOM_STEP = 25
|
|
||||||
|
|
||||||
// Helper functions
|
|
||||||
export function getThemeLabel(aufgabentyp: string): string {
|
|
||||||
const entries = Object.entries(THEME_CATEGORIES)
|
|
||||||
for (const [key, value] of entries) {
|
|
||||||
if (aufgabentyp.startsWith(key)) {
|
|
||||||
return value.label
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return aufgabentyp
|
|
||||||
}
|
|
||||||
|
|
||||||
export function formatSimilarityScore(score: number): string {
|
|
||||||
return `${Math.round(score * 100)}%`
|
|
||||||
}
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
/**
|
|
||||||
* TypeScript types for Abitur Documents (NiBiS, etc.)
|
|
||||||
*/
|
|
||||||
|
|
||||||
export interface AbiturDokument {
|
|
||||||
id: string
|
|
||||||
dateiname: string
|
|
||||||
original_dateiname: string
|
|
||||||
bundesland: string
|
|
||||||
fach: string
|
|
||||||
jahr: number
|
|
||||||
niveau: 'eA' | 'gA' // erhöhtes/grundlegendes Anforderungsniveau
|
|
||||||
typ: 'aufgabe' | 'erwartungshorizont'
|
|
||||||
aufgaben_nummer: string // I, II, III
|
|
||||||
status: 'pending' | 'indexed' | 'error'
|
|
||||||
confidence: number
|
|
||||||
file_path: string
|
|
||||||
file_size: number
|
|
||||||
indexed: boolean
|
|
||||||
vector_ids: string[]
|
|
||||||
created_at: string
|
|
||||||
updated_at: string
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AbiturDocsResponse {
|
|
||||||
documents: AbiturDokument[]
|
|
||||||
total: number
|
|
||||||
page: number
|
|
||||||
limit: number
|
|
||||||
total_pages: number
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AbiturDocsFilter {
|
|
||||||
fach?: string
|
|
||||||
jahr?: number
|
|
||||||
bundesland?: string
|
|
||||||
niveau?: 'eA' | 'gA'
|
|
||||||
typ?: 'aufgabe' | 'erwartungshorizont'
|
|
||||||
page?: number
|
|
||||||
limit?: number
|
|
||||||
}
|
|
||||||
|
|
||||||
// Available filter options
|
|
||||||
export const FAECHER = [
|
|
||||||
{ id: 'deutsch', label: 'Deutsch' },
|
|
||||||
{ id: 'mathematik', label: 'Mathematik' },
|
|
||||||
{ id: 'englisch', label: 'Englisch' },
|
|
||||||
{ id: 'biologie', label: 'Biologie' },
|
|
||||||
{ id: 'physik', label: 'Physik' },
|
|
||||||
{ id: 'chemie', label: 'Chemie' },
|
|
||||||
{ id: 'geschichte', label: 'Geschichte' },
|
|
||||||
] as const
|
|
||||||
|
|
||||||
export const JAHRE = [2025, 2024, 2023, 2022, 2021, 2020] as const
|
|
||||||
|
|
||||||
export const BUNDESLAENDER = [
|
|
||||||
{ id: 'niedersachsen', label: 'Niedersachsen' },
|
|
||||||
{ id: 'bayern', label: 'Bayern' },
|
|
||||||
{ id: 'nrw', label: 'Nordrhein-Westfalen' },
|
|
||||||
{ id: 'bw', label: 'Baden-Württemberg' },
|
|
||||||
] as const
|
|
||||||
|
|
||||||
export const NIVEAUS = [
|
|
||||||
{ id: 'eA', label: 'Erhöhtes Anforderungsniveau (eA)' },
|
|
||||||
{ id: 'gA', label: 'Grundlegendes Anforderungsniveau (gA)' },
|
|
||||||
] as const
|
|
||||||
|
|
||||||
export const TYPEN = [
|
|
||||||
{ id: 'aufgabe', label: 'Aufgabe' },
|
|
||||||
{ id: 'erwartungshorizont', label: 'Erwartungshorizont' },
|
|
||||||
] as const
|
|
||||||
|
|
||||||
// Helper functions
|
|
||||||
export function formatFileSize(bytes: number): string {
|
|
||||||
if (bytes < 1024) return bytes + ' B'
|
|
||||||
if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB'
|
|
||||||
return (bytes / (1024 * 1024)).toFixed(1) + ' MB'
|
|
||||||
}
|
|
||||||
|
|
||||||
export function formatDocumentTitle(doc: AbiturDokument): string {
|
|
||||||
const fachLabel = FAECHER.find(f => f.id === doc.fach)?.label || doc.fach
|
|
||||||
const typLabel = doc.typ === 'erwartungshorizont' ? 'EWH' : 'Aufgabe'
|
|
||||||
return `${fachLabel} ${doc.jahr} - ${doc.niveau} ${doc.aufgaben_nummer} (${typLabel})`
|
|
||||||
}
|
|
||||||
@@ -12,7 +12,7 @@ export interface BackendModule {
|
|||||||
id: string
|
id: string
|
||||||
name: string
|
name: string
|
||||||
description: string
|
description: string
|
||||||
category: 'compliance' | 'ai' | 'infrastructure' | 'education' | 'communication' | 'development'
|
category: 'compliance' | 'ai' | 'infrastructure' | 'communication' | 'development'
|
||||||
backend: {
|
backend: {
|
||||||
service: string // e.g. 'consent-service', 'python-backend', 'klausur-service'
|
service: string // e.g. 'consent-service', 'python-backend', 'klausur-service'
|
||||||
port: number
|
port: number
|
||||||
@@ -256,56 +256,6 @@ export const MODULE_REGISTRY: BackendModule[] = [
|
|||||||
},
|
},
|
||||||
priority: 'medium'
|
priority: 'medium'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: 'magic-help',
|
|
||||||
name: 'Magic Help (TrOCR)',
|
|
||||||
description: 'Handschrifterkennung mit TrOCR und LoRA Fine-Tuning',
|
|
||||||
category: 'ai',
|
|
||||||
backend: {
|
|
||||||
service: 'klausur-service',
|
|
||||||
port: 8086,
|
|
||||||
basePath: '/api/klausur/trocr',
|
|
||||||
endpoints: [
|
|
||||||
{ path: '/status', method: 'GET', description: 'TrOCR Status' },
|
|
||||||
{ path: '/extract', method: 'POST', description: 'Text aus Bild extrahieren' },
|
|
||||||
{ path: '/training/examples', method: 'GET', description: 'Trainingsbeispiele' },
|
|
||||||
{ path: '/training/add', method: 'POST', description: 'Trainingsbeispiel hinzufuegen' },
|
|
||||||
{ path: '/training/fine-tune', method: 'POST', description: 'Fine-Tuning starten' },
|
|
||||||
]
|
|
||||||
},
|
|
||||||
frontend: {
|
|
||||||
adminV2Page: '/ai/magic-help',
|
|
||||||
oldAdminPage: '/admin/magic-help',
|
|
||||||
status: 'connected'
|
|
||||||
},
|
|
||||||
priority: 'medium',
|
|
||||||
notes: 'Lokale Handschrifterkennung mit Privacy-by-Design'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'klausur-korrektur',
|
|
||||||
name: 'Klausur-Korrektur',
|
|
||||||
description: 'KI-gestuetzte Abitur-Korrektur mit EH-Vorschlaegen',
|
|
||||||
category: 'ai',
|
|
||||||
backend: {
|
|
||||||
service: 'klausur-service',
|
|
||||||
port: 8086,
|
|
||||||
basePath: '/api/v1',
|
|
||||||
endpoints: [
|
|
||||||
{ path: '/klausuren', method: 'GET', description: 'Alle Klausuren' },
|
|
||||||
{ path: '/klausuren', method: 'POST', description: 'Klausur erstellen' },
|
|
||||||
{ path: '/klausuren/{id}/students', method: 'GET', description: 'Studentenarbeiten' },
|
|
||||||
{ path: '/students/{id}/annotations', method: 'GET', description: 'Anmerkungen' },
|
|
||||||
{ path: '/students/{id}/gutachten/generate', method: 'POST', description: 'Gutachten generieren' },
|
|
||||||
]
|
|
||||||
},
|
|
||||||
frontend: {
|
|
||||||
adminV2Page: '/ai/klausur-korrektur',
|
|
||||||
oldAdminPage: '/admin/klausur-korrektur',
|
|
||||||
status: 'not-connected'
|
|
||||||
},
|
|
||||||
priority: 'high',
|
|
||||||
notes: 'Komplexes Modul mit eigenem Backend-Service'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: 'ocr-labeling',
|
id: 'ocr-labeling',
|
||||||
name: 'OCR-Labeling',
|
name: 'OCR-Labeling',
|
||||||
@@ -464,31 +414,6 @@ export const MODULE_REGISTRY: BackendModule[] = [
|
|||||||
priority: 'medium'
|
priority: 'medium'
|
||||||
},
|
},
|
||||||
|
|
||||||
// ===========================================
|
|
||||||
// EDUCATION MODULES
|
|
||||||
// ===========================================
|
|
||||||
{
|
|
||||||
id: 'edu-search',
|
|
||||||
name: 'Bildungssuche',
|
|
||||||
description: 'Suche nach Bildungsinhalten und Ressourcen',
|
|
||||||
category: 'education',
|
|
||||||
backend: {
|
|
||||||
service: 'edu-search-service',
|
|
||||||
port: 8089,
|
|
||||||
basePath: '/api/edu',
|
|
||||||
endpoints: [
|
|
||||||
{ path: '/search', method: 'GET', description: 'Bildungssuche' },
|
|
||||||
{ path: '/resources', method: 'GET', description: 'Ressourcen' },
|
|
||||||
]
|
|
||||||
},
|
|
||||||
frontend: {
|
|
||||||
adminV2Page: '/education/edu-search',
|
|
||||||
oldAdminPage: '/admin/edu-search',
|
|
||||||
status: 'connected'
|
|
||||||
},
|
|
||||||
priority: 'medium'
|
|
||||||
},
|
|
||||||
|
|
||||||
// ===========================================
|
// ===========================================
|
||||||
// COMMUNICATION MODULES
|
// COMMUNICATION MODULES
|
||||||
// ===========================================
|
// ===========================================
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
* All DSGVO and Compliance modules are now consolidated under the SDK.
|
* All DSGVO and Compliance modules are now consolidated under the SDK.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export type CategoryId = 'ai' | 'education' | 'website' | 'sdk-docs'
|
export type CategoryId = 'ai' | 'website' | 'sdk-docs'
|
||||||
|
|
||||||
export interface NavModule {
|
export interface NavModule {
|
||||||
id: string
|
id: string
|
||||||
@@ -42,18 +42,8 @@ export const navigation: NavCategory[] = [
|
|||||||
description: 'LLM, OCR, RAG & Machine Learning',
|
description: 'LLM, OCR, RAG & Machine Learning',
|
||||||
modules: [
|
modules: [
|
||||||
// -----------------------------------------------------------------------
|
// -----------------------------------------------------------------------
|
||||||
// KI-Daten-Pipeline: Magic Help -> OCR -> Indexierung -> Suche
|
// KI-Daten-Pipeline: OCR -> Indexierung -> Suche
|
||||||
// -----------------------------------------------------------------------
|
// -----------------------------------------------------------------------
|
||||||
{
|
|
||||||
id: 'magic-help',
|
|
||||||
name: 'Magic Help (TrOCR)',
|
|
||||||
href: '/ai/magic-help',
|
|
||||||
description: 'TrOCR Testing & Fine-Tuning',
|
|
||||||
purpose: 'Testen und verbessern Sie die TrOCR-Handschrifterkennung. Laden Sie Bilder hoch, um die OCR-Qualitaet zu pruefen, und trainieren Sie das Modell mit LoRA Fine-Tuning. Bidirektionaler Austausch mit OCR-Labeling.',
|
|
||||||
audience: ['Entwickler', 'Administratoren', 'QA'],
|
|
||||||
oldAdminPath: '/admin/magic-help',
|
|
||||||
subgroup: 'KI-Daten-Pipeline',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: 'ocr-labeling',
|
id: 'ocr-labeling',
|
||||||
name: 'OCR-Labeling',
|
name: 'OCR-Labeling',
|
||||||
@@ -141,54 +131,6 @@ export const navigation: NavCategory[] = [
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
// Bildung & Schule
|
|
||||||
// =========================================================================
|
|
||||||
{
|
|
||||||
id: 'education',
|
|
||||||
name: 'Bildung & Schule',
|
|
||||||
icon: 'graduation',
|
|
||||||
color: '#3b82f6', // Blue
|
|
||||||
colorClass: 'education',
|
|
||||||
description: 'Bildungsquellen & Lehrplaene',
|
|
||||||
modules: [
|
|
||||||
{
|
|
||||||
id: 'edu-search',
|
|
||||||
name: 'Education Search',
|
|
||||||
href: '/education/edu-search',
|
|
||||||
description: 'Bildungsquellen & Crawler',
|
|
||||||
purpose: 'Verwalten Sie Bildungsquellen und konfigurieren Sie Crawler fuer neue Inhalte.',
|
|
||||||
audience: ['Content Manager'],
|
|
||||||
oldAdminPath: '/admin/edu-search',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'zeugnisse-crawler',
|
|
||||||
name: 'Zeugnisse-Crawler',
|
|
||||||
href: '/education/zeugnisse-crawler',
|
|
||||||
description: 'Zeugnis-Daten',
|
|
||||||
purpose: 'Verwalten Sie gecrawlte Zeugnis-Strukturen und -Formate.',
|
|
||||||
audience: ['Entwickler'],
|
|
||||||
oldAdminPath: '/admin/zeugnisse-crawler',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'abitur-archiv',
|
|
||||||
name: 'Abitur-Archiv',
|
|
||||||
href: '/education/abitur-archiv',
|
|
||||||
description: 'Zentralabitur-Materialien 2021-2025',
|
|
||||||
purpose: 'Durchsuchen und filtern Sie Abitur-Aufgaben und Erwartungshorizonte. Themensuche mit semantischer Suche via RAG. Integration mit Klausur-Korrektur fuer schnelle Vorlagen-Nutzung.',
|
|
||||||
audience: ['Lehrer', 'Entwickler'],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'klausur-korrektur',
|
|
||||||
name: 'Klausur-Korrektur',
|
|
||||||
href: '/education/klausur-korrektur',
|
|
||||||
description: 'Abitur-Korrektur mit KI',
|
|
||||||
purpose: 'KI-gestuetzte Korrektur von Abitur- und Vorabitur-Klausuren. Nutzt die RAG-Pipeline fuer Erwartungshorizont-Vorschlaege.',
|
|
||||||
audience: ['Lehrer', 'Entwickler'],
|
|
||||||
oldAdminPath: '/admin/klausur-korrektur',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
// =========================================================================
|
|
||||||
// Website
|
// Website
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export const roles: Role[] = [
|
|||||||
name: 'Entwickler',
|
name: 'Entwickler',
|
||||||
description: 'Voller Zugriff auf alle Bereiche',
|
description: 'Voller Zugriff auf alle Bereiche',
|
||||||
icon: 'code',
|
icon: 'code',
|
||||||
visibleCategories: ['ai', 'education', 'website'],
|
visibleCategories: ['ai', 'website'],
|
||||||
color: 'bg-primary-100 border-primary-300 text-primary-700',
|
color: 'bg-primary-100 border-primary-300 text-primary-700',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -46,18 +46,6 @@ const config: Config = {
|
|||||||
800: '#9a3412',
|
800: '#9a3412',
|
||||||
900: '#7c2d12',
|
900: '#7c2d12',
|
||||||
},
|
},
|
||||||
education: {
|
|
||||||
50: '#eff6ff',
|
|
||||||
100: '#dbeafe',
|
|
||||||
200: '#bfdbfe',
|
|
||||||
300: '#93c5fd',
|
|
||||||
400: '#60a5fa',
|
|
||||||
500: '#3b82f6',
|
|
||||||
600: '#2563eb',
|
|
||||||
700: '#1d4ed8',
|
|
||||||
800: '#1e40af',
|
|
||||||
900: '#1e3a8a',
|
|
||||||
},
|
|
||||||
communication: {
|
communication: {
|
||||||
50: '#f0fdf4',
|
50: '#f0fdf4',
|
||||||
100: '#dcfce7',
|
100: '#dcfce7',
|
||||||
|
|||||||
@@ -80,16 +80,9 @@ export interface AIModuleLink {
|
|||||||
/**
|
/**
|
||||||
* KI-Daten-Pipeline Module
|
* KI-Daten-Pipeline Module
|
||||||
* Diese Module bilden eine zusammenhaengende Pipeline mit Datenfluss.
|
* Diese Module bilden eine zusammenhaengende Pipeline mit Datenfluss.
|
||||||
* Datenfluss: Magic Help ⟷ OCR-Labeling → RAG Pipeline → Daten & RAG
|
* Datenfluss: OCR-Labeling → RAG Pipeline → Daten & RAG
|
||||||
*/
|
*/
|
||||||
export const AI_PIPELINE_MODULES: AIModuleLink[] = [
|
export const AI_PIPELINE_MODULES: AIModuleLink[] = [
|
||||||
{
|
|
||||||
id: 'magic-help',
|
|
||||||
name: 'Magic Help',
|
|
||||||
href: '/ai/magic-help',
|
|
||||||
description: 'TrOCR Testing & LoRA Fine-Tuning',
|
|
||||||
icon: '✨',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: 'ocr-labeling',
|
id: 'ocr-labeling',
|
||||||
name: 'OCR-Labeling',
|
name: 'OCR-Labeling',
|
||||||
@@ -149,39 +142,13 @@ export const AI_MODULES: AIModuleLink[] = [
|
|||||||
*/
|
*/
|
||||||
export const AI_MODULE_RELATIONS: Record<string, AIModuleLink[]> = {
|
export const AI_MODULE_RELATIONS: Record<string, AIModuleLink[]> = {
|
||||||
// KI-Daten-Pipeline Relations
|
// KI-Daten-Pipeline Relations
|
||||||
'magic-help': [
|
|
||||||
{
|
|
||||||
id: 'ocr-labeling',
|
|
||||||
name: 'OCR-Labeling',
|
|
||||||
href: '/ai/ocr-labeling',
|
|
||||||
description: 'Ground Truth erstellen',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'rag-pipeline',
|
|
||||||
name: 'RAG Pipeline',
|
|
||||||
href: '/ai/rag-pipeline',
|
|
||||||
description: 'Erkannte Texte indexieren',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'ocr-labeling': [
|
'ocr-labeling': [
|
||||||
{
|
|
||||||
id: 'magic-help',
|
|
||||||
name: 'Magic Help',
|
|
||||||
href: '/ai/magic-help',
|
|
||||||
description: 'TrOCR testen & fine-tunen',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: 'rag-pipeline',
|
id: 'rag-pipeline',
|
||||||
name: 'RAG Pipeline',
|
name: 'RAG Pipeline',
|
||||||
href: '/ai/rag-pipeline',
|
href: '/ai/rag-pipeline',
|
||||||
description: 'Trainierte Daten indexieren',
|
description: 'Trainierte Daten indexieren',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: 'klausur-korrektur',
|
|
||||||
name: 'Klausur-Korrektur',
|
|
||||||
href: '/ai/klausur-korrektur',
|
|
||||||
description: 'OCR in Aktion',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
'rag-pipeline': [
|
'rag-pipeline': [
|
||||||
{
|
{
|
||||||
@@ -204,12 +171,6 @@ export const AI_MODULE_RELATIONS: Record<string, AIModuleLink[]> = {
|
|||||||
href: '/ai/rag-pipeline',
|
href: '/ai/rag-pipeline',
|
||||||
description: 'Neue Dokumente indexieren',
|
description: 'Neue Dokumente indexieren',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: 'klausur-korrektur',
|
|
||||||
name: 'Klausur-Korrektur',
|
|
||||||
href: '/ai/klausur-korrektur',
|
|
||||||
description: 'RAG-Suche nutzen',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
// KI-Werkzeuge Relations (Standalone-Tools)
|
// KI-Werkzeuge Relations (Standalone-Tools)
|
||||||
'llm-compare': [
|
'llm-compare': [
|
||||||
@@ -233,12 +194,6 @@ export const AI_MODULE_RELATIONS: Record<string, AIModuleLink[]> = {
|
|||||||
href: '/ai/llm-compare',
|
href: '/ai/llm-compare',
|
||||||
description: 'KI-Provider vergleichen',
|
description: 'KI-Provider vergleichen',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: 'klausur-korrektur',
|
|
||||||
name: 'Klausur-Korrektur',
|
|
||||||
href: '/ai/klausur-korrektur',
|
|
||||||
description: 'BQAS in Aktion',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,24 +214,11 @@ export interface DataFlowConnection {
|
|||||||
/**
|
/**
|
||||||
* Definiert den Datenfluss zwischen den AI-Modulen
|
* Definiert den Datenfluss zwischen den AI-Modulen
|
||||||
*
|
*
|
||||||
* Magic Help ⟷ OCR-Labeling: Bidirektionaler Austausch (LoRA + Ground Truth)
|
|
||||||
* OCR-Labeling → RAG Pipeline: Ground Truth für Training
|
* OCR-Labeling → RAG Pipeline: Ground Truth für Training
|
||||||
* RAG Pipeline → Daten & RAG: Embeddings für Vektor-Suche
|
* RAG Pipeline → Daten & RAG: Embeddings für Vektor-Suche
|
||||||
* Daten & RAG → Klausur-Korrektur: RAG-Suche für Bewertung
|
* Daten & RAG → Klausur-Korrektur: RAG-Suche für Bewertung
|
||||||
*/
|
*/
|
||||||
export const DATA_FLOW_CONNECTIONS: DataFlowConnection[] = [
|
export const DATA_FLOW_CONNECTIONS: DataFlowConnection[] = [
|
||||||
{
|
|
||||||
from: 'magic-help',
|
|
||||||
to: 'ocr-labeling',
|
|
||||||
label: 'LoRA Model',
|
|
||||||
description: 'Verbessertes TrOCR-Modell für OCR-Labeling',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
from: 'ocr-labeling',
|
|
||||||
to: 'magic-help',
|
|
||||||
label: 'TrOCR Export',
|
|
||||||
description: 'Ground Truth Daten im TrOCR-Format für Fine-Tuning',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
from: 'ocr-labeling',
|
from: 'ocr-labeling',
|
||||||
to: 'rag-pipeline',
|
to: 'rag-pipeline',
|
||||||
@@ -289,12 +231,6 @@ export const DATA_FLOW_CONNECTIONS: DataFlowConnection[] = [
|
|||||||
label: 'Embeddings',
|
label: 'Embeddings',
|
||||||
description: 'Vektor-Embeddings indexierter Dokumente',
|
description: 'Vektor-Embeddings indexierter Dokumente',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
from: 'rag',
|
|
||||||
to: 'klausur-korrektur',
|
|
||||||
label: 'RAG-Suche',
|
|
||||||
description: 'Semantische Suche für Erwartungshorizonte',
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user