feat(provider): 重构模型测试对话框,加固 Vertex AI 传输层

模型测试:
- 将消息输入替换为完整 JSON 请求体编辑器,支持格式化和校验
- 新增端点选择面板,测试前可选择目标端点
- 新增调试检查器,可查看每次尝试的请求/响应头和体
- 结果视图改用 HorizontalRequestTimeline 组件展示请求追踪
- endpoint_checker 返回完整调试数据,通过 candidate extra_data 持久化

Vertex AI:
- 改进上下文检测逻辑,不再仅依赖 provider_type,支持从 base_url 推断
- Service Account 密钥现支持自动拉取模型(使用 auth_config 而非 api_key)
- 移除 Gemini Developer API 回退,API Key 仅走 Express 模式
- 端点表单为 Vertex AI 显示格式特定的默认路径模板
- 密钥格式校验仅在 auth_type/api_formats 变更时执行

其他:
- 禁用 ClaudeCode 提供商类型创建入口
- Dialog 组件新增 closeOnBackdrop 属性
This commit is contained in:
fawney19
2026-03-19 23:52:17 +08:00
parent e4ebd5cca1
commit 6984984c22
31 changed files with 1609 additions and 434 deletions

View File

@@ -52,7 +52,7 @@ async def test_fetch_models_for_key_vertex_api_key_custom_fetcher() -> None:
@pytest.mark.asyncio
async def test_fetch_models_for_key_vertex_service_account_ignores_soft_404_when_success() -> None:
async def test_fetch_models_for_key_vertex_service_account_fetches_google_and_claude() -> None:
auth_config = {
"project_id": "demo-project",
"client_email": "svc@example.iam.gserviceaccount.com",
@@ -74,16 +74,27 @@ async def test_fetch_models_for_key_vertex_service_account_ignores_soft_404_when
(
[
{
"id": "gemini-2.0-flash",
"id": "gemini-3.1-pro-preview",
"owned_by": "google",
"display_name": "Gemini 2.0 Flash",
"display_name": "Gemini 3.1 Pro Preview",
"api_format": "gemini:chat",
}
],
None,
True,
),
([], "HTTP 404: not found", False),
(
[
{
"id": "claude-3-7-sonnet@20250219",
"owned_by": "anthropic",
"display_name": "Claude 3.7 Sonnet",
"api_format": "claude:chat",
}
],
None,
True,
),
]
with (
@@ -111,7 +122,8 @@ async def test_fetch_models_for_key_vertex_service_account_ignores_soft_404_when
assert errors == []
assert meta is None
ids = {m.get("id") for m in models}
assert "gemini-2.0-flash" in ids
assert "gemini-3.1-pro-preview" in ids
assert "claude-3-7-sonnet@20250219" in ids
@pytest.mark.asyncio
@@ -132,7 +144,6 @@ async def test_fetch_models_for_key_vertex_api_key_returns_soft_404_when_all_fai
AsyncMock(
side_effect=[
([], "HTTP 404: not found", False),
([], "HTTP 404: not found", False),
]
),
),