fix: verify provider connection online

This commit is contained in:
2026-06-13 12:42:46 +08:00
parent 5f3b4502f6
commit 1d98d831e3
3 changed files with 41 additions and 26 deletions
+30 -24
View File
@@ -142,7 +142,7 @@ async def delete_provider(provider_id: str, db: AsyncSession = Depends(get_db)):
@router.post("/{provider_id}/test", summary="测试提供商连接")
async def test_provider(provider_id: str, db: AsyncSession = Depends(get_db)):
"""测试提供商连接"""
"""通过真实模型接口测试提供商连接"""
result = await db.execute(
select(LLMProvider).where(
LLMProvider.id == provider_id,
@@ -152,37 +152,43 @@ async def test_provider(provider_id: str, db: AsyncSession = Depends(get_db)):
provider = result.scalar_one_or_none()
if not provider:
raise HTTPException(status_code=404, detail="提供商不存在")
# 创建提供商实例
api_base = provider.api_base or ''
instance_kwargs = {}
if provider.provider_type == 'ollama' and provider.ollama_host:
api_base = provider.ollama_host
instance_kwargs['ollama_host'] = provider.ollama_host
provider_instance = ProviderRegistry.create_instance(
provider_type=provider.provider_type,
api_key=provider.api_key,
api_base=provider.api_base,
ollama_host=provider.ollama_host,
api_base=api_base,
**instance_kwargs,
)
if not provider_instance:
raise HTTPException(status_code=400, detail=f"不支持的提供商类型: {provider.provider_type}")
# 验证配置
if not provider_instance.validate_config():
raise HTTPException(status_code=400, detail="配置无效,请检查 API Key")
# 尝试获取模型列表(如果支持)
try:
models = provider_instance.get_available_models()
return {
"success": True,
"message": "连接成功",
"models": models,
}
except Exception as e:
logger.warning(f"获取模型列表失败: {e}")
return {
"success": True,
"message": "连接成功(无法获取模型列表)",
"models": [],
}
models = await provider_instance.fetch_models_from_api()
if not models:
logger.warning(
"Provider online test failed: no models returned "
f"[provider={provider.name}, type={provider.provider_type}, api_base={api_base or '(empty)'}]"
)
raise HTTPException(
status_code=400,
detail="连接失败:模型接口未返回可用模型,请检查 Base URL、API Key 或网络连通性",
)
return {
"success": True,
"message": f"连接成功,已从模型接口拉取到 {len(models)} 个模型",
"source": "api",
"model_count": len(models),
"models": models[:20],
}
@router.get("/{provider_id}/default-models", summary="获取默认模型列表")
@@ -391,7 +391,9 @@ export async function deleteProviderApi(id: string) {
export async function testProviderApi(id: string) {
return requestClient.post<{
message: string;
models: any[];
model_count: number;
models: DefaultModel[];
source: 'api';
success: boolean;
}>(`${BASE_URL}/provider/${id}/test`);
}
@@ -332,7 +332,14 @@ async function handleTestProvider(row: ProviderListItem) {
try {
const res = await testProviderApi(row.id);
if (res.success) {
ElMessage.success(res.message);
const sampleModels = res.models
.slice(0, 3)
.map((model) => model.model_name)
.join(', ');
const sampleText = sampleModels ? `: ${sampleModels}` : '';
ElMessage.success(
`连接成功,已从模型接口拉取到 ${res.model_count} 个模型${sampleText}`,
);
} else {
ElMessage.error($t('ui.actionMessage.operationFailed'));
}