import React, { useState } from 'react'; import { Search, Filter, Plus, BrainCircuit, Trash2, Key, Settings2, Server, Thermometer } from 'lucide-react'; import { Button, Input, TableHeader, TableRow, TableHead, TableCell, Dialog, Badge } from '../components/UI'; import { mockLLMModels } from '../services/mockData'; import { LLMModel } from '../types'; export const LLMLibraryPage: React.FC = () => { const [models, setModels] = useState(mockLLMModels); const [searchTerm, setSearchTerm] = useState(''); const [vendorFilter, setVendorFilter] = useState('all'); const [typeFilter, setTypeFilter] = useState('all'); const [isAddModalOpen, setIsAddModalOpen] = useState(false); // Form State const [newModel, setNewModel] = useState>({ vendor: 'OpenAI Compatible', type: 'text', temperature: 0.7 }); const filteredModels = models.filter(m => { const matchesSearch = m.name.toLowerCase().includes(searchTerm.toLowerCase()); const matchesVendor = vendorFilter === 'all' || m.vendor === vendorFilter; const matchesType = typeFilter === 'all' || m.type === typeFilter; return matchesSearch && matchesVendor && matchesType; }); const handleAddModel = () => { if (!newModel.name || !newModel.baseUrl || !newModel.apiKey) { alert("请填写完整信息"); return; } const model: LLMModel = { id: `m_${Date.now()}`, name: newModel.name, vendor: newModel.vendor as string, type: newModel.type as 'text' | 'embedding' | 'rerank', baseUrl: newModel.baseUrl, apiKey: newModel.apiKey, temperature: newModel.type === 'text' ? newModel.temperature : undefined }; setModels([model, ...models]); setIsAddModalOpen(false); setNewModel({ vendor: 'OpenAI Compatible', type: 'text', temperature: 0.7, name: '', baseUrl: '', apiKey: '' }); }; const handleDeleteModel = (id: string) => { if (confirm('确认删除该模型配置吗?')) { setModels(prev => prev.filter(m => m.id !== id)); } }; return (

大模型库

setSearchTerm(e.target.value)} />
模型名称 厂商 类型 Base URL 操作 {filteredModels.map(model => ( {model.name} {model.vendor} {model.type.toUpperCase()} {model.baseUrl} ))} {filteredModels.length === 0 && ( 暂无模型数据 )}
setIsAddModalOpen(false)} title="添加大模型" footer={ <> } >
{(['text', 'embedding', 'rerank'] as const).map(t => ( ))}
setNewModel({...newModel, name: e.target.value})} placeholder="例如: gpt-4o, deepseek-chat" />
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" />
{newModel.type === 'text' && (
{newModel.temperature}
setNewModel({...newModel, temperature: parseFloat(e.target.value)})} className="w-full h-1.5 bg-secondary rounded-lg appearance-none cursor-pointer accent-primary" />
)}
); };