diff --git a/dashboard/src/lib/config-api.ts b/dashboard/src/lib/config-api.ts index cfb51108..fa4ac5da 100644 --- a/dashboard/src/lib/config-api.ts +++ b/dashboard/src/lib/config-api.ts @@ -158,7 +158,14 @@ export async function fetchProviderModels( endpoint, }) const response = await fetchWithAuth(`/api/webui/models/list?${params}`) - return parseResponse(response) + // 后端返回 { success, models, provider, count },需要展开取出 models 数组 + const parsed = await parseResponse<{ models?: ModelListItem[] } | ModelListItem[]>(response) + if (!parsed.success) { + return parsed + } + const body = parsed.data + const models = Array.isArray(body) ? body : Array.isArray(body?.models) ? body.models : [] + return { success: true, data: models } } /** diff --git a/dashboard/src/routes/config/modelProvider/ProviderForm.tsx b/dashboard/src/routes/config/modelProvider/ProviderForm.tsx index 8095caa3..d7094ffa 100644 --- a/dashboard/src/routes/config/modelProvider/ProviderForm.tsx +++ b/dashboard/src/routes/config/modelProvider/ProviderForm.tsx @@ -138,7 +138,11 @@ export function ProviderForm({ -
{ e.preventDefault(); handleSaveEdit(); }} autoComplete="off"> + { e.preventDefault(); handleSaveEdit(); }} + autoComplete="off" + className="contents" + >
diff --git a/src/webui/routers/model.py b/src/webui/routers/model.py index fad701ba..27323835 100644 --- a/src/webui/routers/model.py +++ b/src/webui/routers/model.py @@ -146,6 +146,11 @@ async def _fetch_models_from_provider( client_config = build_openai_compatible_client_config(provider) headers.update(client_config.default_headers) params.update(client_config.default_query) + # build_openai_compatible_client_config 在“默认 Bearer”场景下, + # 会把 api_key 留在 client_config.api_key 中交给 OpenAI SDK 自行注入 Authorization 头, + # 而不会写入 default_headers。这里我们用 httpx 直接发请求,需要手动补上鉴权头/参数。 + if client_config.api_key and "Authorization" not in headers: + headers["Authorization"] = f"Bearer {client_config.api_key}" try: async with httpx.AsyncClient(timeout=30.0) as client: