/** * RAGSearchPanel Component * * Enhanced RAG search panel for teachers to query their Erwartungshorizonte. * Features: * - search_info display (which RAG features were active) * - Confidence indicator based on re-ranking scores * - Toggle for "Enhanced Search" with advanced options */ import { useState, useCallback } from 'react' import { ehApi, EHRAGResult } from '../services/api' interface RAGSearchPanelProps { onClose: () => void defaultSubject?: string passphrase: string } interface SearchOptions { rerank: boolean limit: number } // Confidence level based on score type ConfidenceLevel = 'high' | 'medium' | 'low' function getConfidenceLevel(score: number): ConfidenceLevel { if (score >= 0.8) return 'high' if (score >= 0.5) return 'medium' return 'low' } function getConfidenceColor(level: ConfidenceLevel): string { switch (level) { case 'high': return 'var(--bp-success, #22c55e)' case 'medium': return 'var(--bp-warning, #f59e0b)' case 'low': return 'var(--bp-danger, #ef4444)' } } function getConfidenceLabel(level: ConfidenceLevel): string { switch (level) { case 'high': return 'Hohe Relevanz' case 'medium': return 'Mittlere Relevanz' case 'low': return 'Geringe Relevanz' } } export default function RAGSearchPanel({ onClose, defaultSubject, passphrase }: RAGSearchPanelProps) { const [query, setQuery] = useState('') const [searching, setSearching] = useState(false) const [results, setResults] = useState(null) const [error, setError] = useState(null) // Enhanced search options const [showAdvancedOptions, setShowAdvancedOptions] = useState(false) const [options, setOptions] = useState({ rerank: true, // Default: enabled for better results limit: 5 }) const handleSearch = useCallback(async () => { if (!query.trim() || !passphrase) return setSearching(true) setError(null) try { const result = await ehApi.ragQuery({ query_text: query, passphrase: passphrase, subject: defaultSubject, limit: options.limit, rerank: options.rerank }) setResults(result) } catch (err) { console.error('RAG search failed:', err) setError(err instanceof Error ? err.message : 'Suche fehlgeschlagen') } finally { setSearching(false) } }, [query, passphrase, defaultSubject, options]) const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault() handleSearch() } } return (
{/* Header */}

Erwartungshorizont durchsuchen

{/* Search Input */}