From b9c3c47a37b6ebb502bdeaf932557d5f97e539a6 Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Thu, 5 Mar 2026 17:34:54 +0100 Subject: [PATCH] refactor: LLM Compare komplett entfernt, Video/Voice/Alerts Sidebar hinzugefuegt - LLM Compare Seiten, Configs und alle Referenzen geloescht - Kommunikation-Kategorie in Sidebar mit Video & Chat, Voice Service, Alerts - Compliance SDK Kategorie aus Sidebar entfernt Co-Authored-By: Claude Opus 4.6 --- admin-lehrer/app/(admin)/ai/gpu/page.tsx | 1 - .../app/(admin)/ai/llm-compare/page.tsx | 503 ------------ .../app/(admin)/ai/ocr-compare/page.tsx | 1 - .../app/(admin)/ai/test-quality/page.tsx | 1 - .../app/(admin)/communication/matrix/page.tsx | 1 - admin-lehrer/app/(admin)/development/page.tsx | 1 - .../(admin)/development/screen-flow/page.tsx | 3 - .../app/(admin)/infrastructure/gpu/page.tsx | 1 - admin-lehrer/app/(admin)/rbac/page.tsx | 1 - admin-lehrer/components/ai/AIToolsSidebar.tsx | 31 +- admin-lehrer/lib/module-registry.ts | 22 - admin-lehrer/lib/navigation.ts | 10 - admin-lehrer/types/ai-modules.ts | 27 - website/app/admin/llm-compare/page.tsx | 761 ------------------ website/app/admin/llm-compare/wizard/page.tsx | 342 -------- website/app/admin/screen-flow/page.tsx | 3 - website/components/admin/AdminLayout.tsx | 10 - .../admin/system-info-configs/index.ts | 3 - .../system-info-configs/llm-compare-config.ts | 164 ---- 19 files changed, 1 insertion(+), 1885 deletions(-) delete mode 100644 admin-lehrer/app/(admin)/ai/llm-compare/page.tsx delete mode 100644 website/app/admin/llm-compare/page.tsx delete mode 100644 website/app/admin/llm-compare/wizard/page.tsx delete mode 100644 website/components/admin/system-info-configs/llm-compare-config.ts diff --git a/admin-lehrer/app/(admin)/ai/gpu/page.tsx b/admin-lehrer/app/(admin)/ai/gpu/page.tsx index d77f507..f77a5a7 100644 --- a/admin-lehrer/app/(admin)/ai/gpu/page.tsx +++ b/admin-lehrer/app/(admin)/ai/gpu/page.tsx @@ -179,7 +179,6 @@ export default function GPUInfrastructurePage() { databases: ['PostgreSQL (Logs)'], }} relatedPages={[ - { name: 'LLM Vergleich', href: '/ai/llm-compare', description: 'KI-Provider testen' }, { name: 'Test Quality (BQAS)', href: '/ai/test-quality', description: 'Golden Suite & Tests' }, { name: 'Magic Help', href: '/ai/magic-help', description: 'TrOCR Testing' }, ]} diff --git a/admin-lehrer/app/(admin)/ai/llm-compare/page.tsx b/admin-lehrer/app/(admin)/ai/llm-compare/page.tsx deleted file mode 100644 index 162fb53..0000000 --- a/admin-lehrer/app/(admin)/ai/llm-compare/page.tsx +++ /dev/null @@ -1,503 +0,0 @@ -'use client' - -/** - * LLM Comparison Tool - * - * Vergleicht Antworten von verschiedenen LLM-Providern: - * - OpenAI/ChatGPT - * - Claude - * - Self-hosted + Tavily - * - Self-hosted + EduSearch - */ - -import { useState, useEffect, useCallback } from 'react' -import { PagePurpose } from '@/components/common/PagePurpose' -import { AIToolsSidebarResponsive } from '@/components/ai/AIToolsSidebar' - -interface LLMResponse { - provider: string - model: string - response: string - latency_ms: number - tokens_used?: number - search_results?: Array<{ - title: string - url: string - content: string - score?: number - }> - error?: string - timestamp: string -} - -interface ComparisonResult { - comparison_id: string - prompt: string - system_prompt?: string - responses: LLMResponse[] - created_at: string -} - -const providerColors: Record = { - openai: { bg: 'bg-emerald-50', border: 'border-emerald-300', text: 'text-emerald-700' }, - claude: { bg: 'bg-orange-50', border: 'border-orange-300', text: 'text-orange-700' }, - selfhosted_tavily: { bg: 'bg-blue-50', border: 'border-blue-300', text: 'text-blue-700' }, - selfhosted_edusearch: { bg: 'bg-purple-50', border: 'border-purple-300', text: 'text-purple-700' }, -} - -const providerLabels: Record = { - openai: 'OpenAI GPT-4o-mini', - claude: 'Claude 3.5 Sonnet', - selfhosted_tavily: 'Self-hosted + Tavily', - selfhosted_edusearch: 'Self-hosted + EduSearch', -} - -export default function LLMComparePage() { - // State - const [prompt, setPrompt] = useState('') - const [systemPrompt, setSystemPrompt] = useState('Du bist ein hilfreicher Assistent fuer Lehrkraefte in Deutschland.') - - // Provider toggles - const [enableOpenAI, setEnableOpenAI] = useState(true) - const [enableClaude, setEnableClaude] = useState(true) - const [enableTavily, setEnableTavily] = useState(true) - const [enableEduSearch, setEnableEduSearch] = useState(true) - - // Parameters - const [model, setModel] = useState('llama3.2:3b') - const [temperature, setTemperature] = useState(0.7) - const [maxTokens, setMaxTokens] = useState(2048) - - // Results - const [isLoading, setIsLoading] = useState(false) - const [result, setResult] = useState(null) - const [history, setHistory] = useState([]) - const [error, setError] = useState(null) - - // UI State - const [showSettings, setShowSettings] = useState(false) - const [showHistory, setShowHistory] = useState(false) - - // API Base URL - const API_URL = process.env.NEXT_PUBLIC_LLM_GATEWAY_URL || 'http://localhost:8082' - const API_KEY = process.env.NEXT_PUBLIC_LLM_API_KEY || 'dev-key' - - // Load history - const loadHistory = useCallback(async () => { - try { - const response = await fetch(`${API_URL}/v1/comparison/history?limit=20`, { - headers: { Authorization: `Bearer ${API_KEY}` }, - }) - if (response.ok) { - const data = await response.json() - setHistory(data.comparisons || []) - } - } catch (e) { - console.error('Failed to load history:', e) - } - }, [API_URL, API_KEY]) - - useEffect(() => { - loadHistory() - }, [loadHistory]) - - const runComparison = async () => { - if (!prompt.trim()) { - setError('Bitte geben Sie einen Prompt ein') - return - } - - setIsLoading(true) - setError(null) - setResult(null) - - try { - const response = await fetch(`${API_URL}/v1/comparison/run`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${API_KEY}`, - }, - body: JSON.stringify({ - prompt, - system_prompt: systemPrompt || undefined, - enable_openai: enableOpenAI, - enable_claude: enableClaude, - enable_selfhosted_tavily: enableTavily, - enable_selfhosted_edusearch: enableEduSearch, - selfhosted_model: model, - temperature, - max_tokens: maxTokens, - }), - }) - - if (!response.ok) { - throw new Error(`API Error: ${response.status}`) - } - - const data = await response.json() - setResult(data) - loadHistory() - } catch (e) { - setError(e instanceof Error ? e.message : 'Unbekannter Fehler') - } finally { - setIsLoading(false) - } - } - - const ResponseCard = ({ response }: { response: LLMResponse }) => { - const colors = providerColors[response.provider] || { - bg: 'bg-slate-50', - border: 'border-slate-300', - text: 'text-slate-700', - } - const label = providerLabels[response.provider] || response.provider - - return ( -
-
-
-

{label}

-

{response.model}

-
-
-
{response.latency_ms}ms
- {response.tokens_used &&
{response.tokens_used} tokens
} -
-
- -
- {response.error ? ( -
- Fehler: {response.error} -
- ) : ( -
-              {response.response}
-            
- )} -
- - {response.search_results && response.search_results.length > 0 && ( -
-
- - {response.search_results.length} Suchergebnisse anzeigen - - -
-
- )} -
- ) - } - - return ( -
- {/* Page Purpose */} - - - {/* KI-Werkzeuge Sidebar */} - - -
- {/* Left Column: Input & Settings */} -
- {/* Prompt Input */} -
-

Prompt

- - {/* System Prompt */} -
- -