fix model config

This commit is contained in:
qixinbo
2026-03-17 16:55:41 +08:00
parent 885f8dcb09
commit 4c382f27f2
2 changed files with 7 additions and 55 deletions
-9
View File
@@ -24,9 +24,6 @@ class LLMConfig(BaseModel):
name: Optional[str] = Field(None, description="Display name") name: Optional[str] = Field(None, description="Display name")
provider: str = Field(..., description="Provider name (e.g., openai, azure, anthropic)") provider: str = Field(..., description="Provider name (e.g., openai, azure, anthropic)")
model: str = Field(..., description="Model name (e.g., gpt-4, claude-3-opus)") model: str = Field(..., description="Model name (e.g., gpt-4, claude-3-opus)")
model_type: Optional[str] = Field(None, description="Model type")
base_model: Optional[str] = Field(None, description="Base model")
protocol_type: Optional[str] = Field(None, description="Protocol type")
api_key: Optional[str] = Field(None, description="API Key for the provider") api_key: Optional[str] = Field(None, description="API Key for the provider")
api_base: Optional[str] = Field(None, description="Base URL for the API") api_base: Optional[str] = Field(None, description="Base URL for the API")
extra_headers: Optional[Dict[str, str]] = Field(None, description="Extra headers for the request") extra_headers: Optional[Dict[str, str]] = Field(None, description="Extra headers for the request")
@@ -37,9 +34,6 @@ class LLMConfigCreate(BaseModel):
name: Optional[str] = None name: Optional[str] = None
provider: str provider: str
model: str model: str
model_type: Optional[str] = None
base_model: Optional[str] = None
protocol_type: Optional[str] = None
api_key: Optional[str] = None api_key: Optional[str] = None
api_base: Optional[str] = None api_base: Optional[str] = None
extra_headers: Optional[Dict[str, str]] = None extra_headers: Optional[Dict[str, str]] = None
@@ -49,9 +43,6 @@ class LLMConfigUpdate(BaseModel):
name: Optional[str] = None name: Optional[str] = None
provider: Optional[str] = None provider: Optional[str] = None
model: Optional[str] = None model: Optional[str] = None
model_type: Optional[str] = None
base_model: Optional[str] = None
protocol_type: Optional[str] = None
api_key: Optional[str] = None api_key: Optional[str] = None
api_base: Optional[str] = None api_base: Optional[str] = None
extra_headers: Optional[Dict[str, str]] = None extra_headers: Optional[Dict[str, str]] = None
+7 -46
View File
@@ -15,9 +15,6 @@ interface ModelConfig {
name?: string; name?: string;
provider: string; provider: string;
model: string; model: string;
model_type?: string;
base_model?: string;
protocol_type?: string;
api_key?: string; api_key?: string;
api_base?: string; api_base?: string;
extra_headers?: Record<string, string>; extra_headers?: Record<string, string>;
@@ -28,9 +25,6 @@ const defaultForm: Omit<ModelConfig, "id"> = {
name: "", name: "",
provider: "openai", provider: "openai",
model: "", model: "",
model_type: "LLM",
base_model: "",
protocol_type: "OpenAI",
api_key: "", api_key: "",
api_base: "", api_base: "",
extra_headers: {}, extra_headers: {},
@@ -71,7 +65,7 @@ export function ModelConfigs() {
const value = keyword.trim().toLowerCase(); const value = keyword.trim().toLowerCase();
if (!value) return configs; if (!value) return configs;
return configs.filter((item) => return configs.filter((item) =>
[item.name, item.model, item.provider, item.base_model].filter(Boolean).some((v) => String(v).toLowerCase().includes(value)) [item.name, item.model, item.provider].filter(Boolean).some((v) => String(v).toLowerCase().includes(value))
); );
}, [configs, keyword]); }, [configs, keyword]);
@@ -90,9 +84,6 @@ export function ModelConfigs() {
name: item.name || "", name: item.name || "",
provider: item.provider || "openai", provider: item.provider || "openai",
model: item.model || "", model: item.model || "",
model_type: item.model_type || "LLM",
base_model: item.base_model || "",
protocol_type: item.protocol_type || "OpenAI",
api_key: item.api_key || "", api_key: item.api_key || "",
api_base: item.api_base || "", api_base: item.api_base || "",
extra_headers: item.extra_headers || {}, extra_headers: item.extra_headers || {},
@@ -107,8 +98,8 @@ export function ModelConfigs() {
const [isTesting, setIsTesting] = useState(false); const [isTesting, setIsTesting] = useState(false);
const handleTestConnection = async () => { const handleTestConnection = async () => {
if (!form.model || !form.provider || !form.api_base) { if (!form.model || !form.provider) {
setError("请先填写必要信息(供应商、模型ID、API域名"); setError("请先填写必要信息(供应商、模型ID)");
return; return;
} }
setIsTesting(true); setIsTesting(true);
@@ -145,7 +136,7 @@ export function ModelConfigs() {
const handleSave = async (e?: React.FormEvent) => { const handleSave = async (e?: React.FormEvent) => {
if (e) e.preventDefault(); if (e) e.preventDefault();
if (!form.model || !form.provider || !form.api_base) { if (!form.model || !form.provider) {
setError("请填写必填项"); setError("请填写必填项");
return; return;
} }
@@ -167,9 +158,6 @@ export function ModelConfigs() {
...form, ...form,
extra_headers: extraHeaders, extra_headers: extraHeaders,
name: form.name || form.model, name: form.name || form.model,
model_type: form.model_type || "大语言模型",
base_model: form.base_model || form.model,
protocol_type: form.protocol_type || "OpenAI",
}; };
if (editingId) { if (editingId) {
await api.put(`/api/v1/llm/${editingId}`, payload); await api.put(`/api/v1/llm/${editingId}`, payload);
@@ -249,7 +237,6 @@ export function ModelConfigs() {
<TableHead></TableHead> <TableHead></TableHead>
<TableHead></TableHead> <TableHead></TableHead>
<TableHead></TableHead> <TableHead></TableHead>
<TableHead></TableHead>
<TableHead></TableHead> <TableHead></TableHead>
<TableHead className="text-right"></TableHead> <TableHead className="text-right"></TableHead>
</TableRow> </TableRow>
@@ -257,7 +244,7 @@ export function ModelConfigs() {
<TableBody> <TableBody>
{filteredConfigs.length === 0 ? ( {filteredConfigs.length === 0 ? (
<TableRow> <TableRow>
<TableCell colSpan={6} className="text-center h-24 text-zinc-500"> <TableCell colSpan={5} className="text-center h-24 text-zinc-500">
</TableCell> </TableCell>
</TableRow> </TableRow>
@@ -269,7 +256,6 @@ export function ModelConfigs() {
</TableCell> </TableCell>
<TableCell className="capitalize">{item.provider}</TableCell> <TableCell className="capitalize">{item.provider}</TableCell>
<TableCell className="text-zinc-500 font-mono text-xs">{item.model}</TableCell> <TableCell className="text-zinc-500 font-mono text-xs">{item.model}</TableCell>
<TableCell className="text-zinc-500">{item.model_type || "大语言模型"}</TableCell>
<TableCell> <TableCell>
<span <span
onClick={() => handleSetDefault(item)} onClick={() => handleSetDefault(item)}
@@ -354,36 +340,11 @@ export function ModelConfigs() {
<Input value={form.model || ""} onChange={(e) => setForm((p) => ({ ...p, model: e.target.value }))} placeholder="如:gpt-4-turbo" required /> <Input value={form.model || ""} onChange={(e) => setForm((p) => ({ ...p, model: e.target.value }))} placeholder="如:gpt-4-turbo" required />
</div> </div>
<div className="space-y-2"> <div className="space-y-2">
<Label></Label> <Label>API </Label>
<Select value={form.model_type || "LLM"} onValueChange={(v) => setForm((p) => ({ ...p, model_type: v || "LLM" }))}> <Input value={form.api_base || ""} onChange={(e) => setForm((p) => ({ ...p, api_base: e.target.value }))} placeholder="如:https://api.openai.com/v1" />
<SelectTrigger><SelectValue /></SelectTrigger>
<SelectContent>
<SelectItem value="LLM">LLM</SelectItem>
<SelectItem value="Embedding">Embedding</SelectItem>
<SelectItem value="Rerank">Rerank</SelectItem>
</SelectContent>
</Select>
</div> </div>
</div> </div>
<div className="grid grid-cols-2 gap-4">
<div className="space-y-2">
<Label></Label>
<Select value={form.protocol_type || "OpenAI"} onValueChange={(v) => setForm((p) => ({ ...p, protocol_type: v || "OpenAI" }))}>
<SelectTrigger><SelectValue /></SelectTrigger>
<SelectContent>
<SelectItem value="OpenAI">OpenAI</SelectItem>
<SelectItem value="Anthropic">Anthropic</SelectItem>
</SelectContent>
</Select>
</div>
</div>
<div className="space-y-2">
<Label>API *</Label>
<Input value={form.api_base || ""} onChange={(e) => setForm((p) => ({ ...p, api_base: e.target.value }))} placeholder="如:https://api.openai.com/v1" required />
</div>
<div className="space-y-2"> <div className="space-y-2">
<Label>API Key</Label> <Label>API Key</Label>
<div className="relative"> <div className="relative">