-
{label}
-
-
{t('Modell')}: {res.model}
-
{t('Latenz')}: {res.latencyMs} ms
-
{t('Konfidenz')}: {(topConfidence * 100).toFixed(1)}%
-
{t('Alternativen')}: {res.results?.length || 0}
- {res.location &&
{t('Region')}: {res.location}
}
-
-
- {topTranscript}
-
- {res.results?.length > 1 && (
-
- {t('Weitere Alternativen')}
- {res.results.slice(1).map((alt, i) => (
-
- [{(alt.confidence * 100).toFixed(1)}%] {alt.transcript}
-
- ))}
-
- )}
-
- );
- };
-
- return (
-
-
-
{t('STT Benchmark')}
-
- {t('Vergleiche Speech-to-Text v1 (latest_long) mit v2 (Chirp 2). Lade eine Audio-Datei hoch oder nimm direkt auf.')}
-
-
-
-
-
- {t('Sprache')}:
- setLanguage(e.target.value)} style={{ marginLeft: 8 }}>
- {(models?.languages || [{ value: 'de-DE', label: 'Deutsch' }]).map(l => (
- {l.label}
- ))}
-
-
-
- v1 {t('Modell')}:
- setV1Model(e.target.value)} style={{ marginLeft: 8 }}>
- {(models?.v1Models || [{ value: 'latest_long', label: 'latest_long' }]).map(m => (
- {m.label}
- ))}
-
-
-
- v2 {t('Modell')}:
- setV2Model(e.target.value)} style={{ marginLeft: 8 }}>
- {(models?.v2Models || [{ value: 'chirp_2', label: 'Chirp 2' }]).map(m => (
- {m.label}
- ))}
-
-
-
- {t('Region')} (v2):
- setV2Location(e.target.value)} style={{ marginLeft: 8 }}>
- {(models?.locations || [{ value: 'europe-west4', label: 'Europe West' }]).map(l => (
- {l.label}
- ))}
-
-
-
-
-
- {!recording ? (
-
- {t('Aufnehmen')}
-
- ) : (
-
- {t('Stoppen')}
-
- )}
-
-
fileInputRef.current?.click()} style={{ display: 'flex', alignItems: 'center', gap: 6, padding: '8px 16px', cursor: 'pointer', background: '#3498db', color: '#fff', border: 'none', borderRadius: 6 }}>
- {t('Datei hochladen')}
-
-
-
- {audioBlob && (
- <>
-
- {audioBlob instanceof File ? audioBlob.name : 'recording.webm'} ({(audioBlob.size / 1024).toFixed(0)} KB)
-
- {audioUrl &&
}
- >
- )}
-
-
-
- {running ? : }
- {running ? t('Benchmark laeuft...') : t('Benchmark starten')}
-
-
- {result && (
-
-
{t('Ergebnis')}
-
- {result.filename} ({(result.fileSizeBytes / 1024).toFixed(0)} KB) — {result.language}
-
-
- {_renderResult(`v1 — ${(result.v1 as any).model || v1Model}`, result.v1)}
- {_renderResult(`v2 — ${(result.v2 as any).model || v2Model}`, result.v2)}
-
-
- )}
-
- );
-};
-
-export default SttBenchmarkPage;
diff --git a/src/pages/admin/index.ts b/src/pages/admin/index.ts
index 2f5a6db..74bc916 100644
--- a/src/pages/admin/index.ts
+++ b/src/pages/admin/index.ts
@@ -19,4 +19,3 @@ export { AdminLogsPage } from './AdminLogsPage';
export { AdminLanguagesPage } from './AdminLanguagesPage';
export { AdminDemoConfigPage } from './AdminDemoConfigPage';
export { AdminDatabaseHealthPage } from './AdminDatabaseHealthPage';
-export { SttBenchmarkPage } from './SttBenchmarkPage';
diff --git a/src/pages/views/chatbot/ChatbotConversationsView.tsx b/src/pages/views/chatbot/ChatbotConversationsView.tsx
deleted file mode 100644
index 0dc9cef..0000000
--- a/src/pages/views/chatbot/ChatbotConversationsView.tsx
+++ /dev/null
@@ -1,286 +0,0 @@
-/**
- * ChatbotConversationsView
- *
- * Chatbot interface with chat history sidebar and messages view.
- * Similar to trustee views but hardcoded for chatbot feature.
- */
-
-import React, { useState, useCallback } from 'react';
-import { useChatbot } from '../../../hooks/useChatbot';
-import { useConfirm } from '../../../hooks/useConfirm';
-import { TextField } from '../../../components/UiComponents/TextField';
-import { Button } from '../../../components/UiComponents/Button';
-import { AutoScroll } from '../../../components/UiComponents/AutoScroll';
-import { ChatMessage } from '../../../components/UiComponents/Messages/ChatMessages/ChatMessage';
-import { formatUnixTimestamp } from '../../../utils/time';
-import { IoMdSend } from 'react-icons/io';
-import { MdStop } from 'react-icons/md';
-import { LuMessageSquare, LuTrash2 } from 'react-icons/lu';
-import messagesStyles from '../../../components/UiComponents/Messages/Messages.module.css';
-import styles from './ChatbotViews.module.css';
-
-import { useLanguage } from '../../../providers/language/LanguageContext';
-
-export const ChatbotConversationsView: React.FC = () => {
- const { t } = useLanguage();
-
- const {
- threads,
- selectedThreadId,
- loadingThreads,
- error,
- messages,
- loadingMessages,
- isStreaming,
- streamingStatus,
- currentWorkflowId,
- selectThread,
- createNewThread,
- sendMessage,
- stopStreaming,
- deleteThread,
- refreshThreads,
- inputValue,
- setInputValue
- } = useChatbot();
-
- const [deletingId, setDeletingId] = useState