import React, { useState } from 'react'; import { Search, Filter, Plus, Trash2, Key, Server, Ear, Globe, Languages } from 'lucide-react'; import { Button, Input, TableHeader, TableRow, TableHead, TableCell, Dialog, Badge } from '../components/UI'; import { mockASRModels } from '../services/mockData'; import { ASRModel } from '../types'; export const ASRLibraryPage: React.FC = () => { const [models, setModels] = useState(mockASRModels); const [searchTerm, setSearchTerm] = useState(''); const [vendorFilter, setVendorFilter] = useState('all'); const [langFilter, setLangFilter] = useState('all'); const [isAddModalOpen, setIsAddModalOpen] = useState(false); // Form State const [newModel, setNewModel] = useState>({ vendor: 'OpenAI Compatible', language: 'zh' }); const filteredModels = models.filter(m => { const matchesSearch = m.name.toLowerCase().includes(searchTerm.toLowerCase()); const matchesVendor = vendorFilter === 'all' || m.vendor === vendorFilter; const matchesLang = langFilter === 'all' || m.language === langFilter || (langFilter !== 'all' && m.language === 'Multi-lingual'); return matchesSearch && matchesVendor && matchesLang; }); const handleAddModel = () => { if (!newModel.name || !newModel.baseUrl || !newModel.apiKey) { alert("请填写完整信息"); return; } const model: ASRModel = { id: `asr_${Date.now()}`, name: newModel.name, vendor: newModel.vendor as 'OpenAI Compatible', language: newModel.language || 'zh', baseUrl: newModel.baseUrl, apiKey: newModel.apiKey }; setModels([model, ...models]); setIsAddModalOpen(false); setNewModel({ vendor: 'OpenAI Compatible', language: 'zh', name: '', baseUrl: '', apiKey: '' }); }; const handleDeleteModel = (id: string) => { if (confirm('确认删除该语音识别模型吗?')) { setModels(prev => prev.filter(m => m.id !== id)); } }; const maskApiKey = (key: string) => { if (!key || key.length < 8) return '********'; return `${key.substring(0, 3)}****${key.substring(key.length - 4)}`; }; return (

语音识别

setSearchTerm(e.target.value)} />
模型名称 接口类型 语言 Base URL API Key 操作 {filteredModels.map(model => ( {model.name} {model.vendor} {model.language} {model.baseUrl} {maskApiKey(model.apiKey)} ))} {filteredModels.length === 0 && ( 暂无语音识别模型 )}
setIsAddModalOpen(false)} title="添加语音识别模型" footer={ <> } >
{(['zh', 'en', 'Multi-lingual'] as const).map(l => ( ))}
setNewModel({...newModel, name: e.target.value})} placeholder="例如: whisper-1, funasr" />
setNewModel({...newModel, baseUrl: e.target.value})} placeholder="https://api.openai.com/v1" className="font-mono text-xs" />
setNewModel({...newModel, apiKey: e.target.value})} placeholder="sk-..." className="font-mono text-xs" />
); };