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
@@ -0,0 +1,47 @@
const DEFAULT_MODEL_TEST_MESSAGE = 'Hello! This is a test message.'
export function buildDefaultModelTestRequestBody(modelName: string): string {
return JSON.stringify({
model: modelName,
messages: [
{
role: 'user',
content: DEFAULT_MODEL_TEST_MESSAGE,
},
],
max_tokens: 30,
temperature: 0.7,
stream: true,
}, null, 2)
}
export function parseModelTestRequestBodyDraft(
draft: string,
): { value: Record<string, unknown> | null; error: string | null } {
const normalized = draft.trim()
if (!normalized) {
return {
value: null,
error: '测试请求体不能为空',
}
}
try {
const parsed = JSON.parse(normalized)
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
return {
value: null,
error: '测试请求体必须是 JSON 对象',
}
}
return {
value: parsed as Record<string, unknown>,
error: null,
}
} catch (error) {
return {
value: null,
error: error instanceof Error ? error.message : '无效的 JSON',
}
}
}