新增: provider 支持(11 厂商预设 + modalities 修正 + defaultModel 更新 + 噪音过滤 + UI 提示)
providerPresets 扩展 6 厂商(Qwen/Kimi/ERNIE/Spark/Doubao/Gemini)+ SenseNova base_url 修正; modalities 预设表补 SenseNova flash-lite vision;defaultModel 过时更新;sensenova-u1 图像生成 噪音过滤;ProviderPanel defaultModel UI 提示。
This commit is contained in:
@@ -127,6 +127,22 @@
|
|||||||
"weight": 65,
|
"weight": 65,
|
||||||
"context_window": 128000
|
"context_window": 128000
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"model_id": "sensenova-6.7-flash-lite",
|
||||||
|
"enabled": true,
|
||||||
|
"modalities": ["text", "vision"],
|
||||||
|
"capabilities": ["tool_use"],
|
||||||
|
"weight": 85,
|
||||||
|
"context_window": 262144
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model_id": "deepseek-v4-flash",
|
||||||
|
"enabled": true,
|
||||||
|
"modalities": ["text"],
|
||||||
|
"capabilities": ["tool_use"],
|
||||||
|
"weight": 80,
|
||||||
|
"context_window": 1048576
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"model_id": "embedding-3",
|
"model_id": "embedding-3",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ pub fn build_models_url(base_url: &str) -> String {
|
|||||||
/// 判断是否为非 chat 模型(应从列表中剔除)。
|
/// 判断是否为非 chat 模型(应从列表中剔除)。
|
||||||
///
|
///
|
||||||
/// 规则(设计 §5.4 + 合理扩展,见 issues):
|
/// 规则(设计 §5.4 + 合理扩展,见 issues):
|
||||||
/// - 图片生成:dall-e / midjourney / stable-diffusion / imagen
|
/// - 图片生成:dall-e / midjourney / stable-diffusion / imagen / sensenova-u1 / infographic / image-generation
|
||||||
/// - 语音:tts / whisper / audio / speech / voice(语音合成/识别)
|
/// - 语音:tts / whisper / audio / speech / voice(语音合成/识别)
|
||||||
/// - 实时:realtime(OpenAI Realtime API 语音对话,非 chat completions)
|
/// - 实时:realtime(OpenAI Realtime API 语音对话,非 chat completions)
|
||||||
/// - 转写:transcribe / transcription
|
/// - 转写:transcribe / transcription
|
||||||
@@ -50,6 +50,9 @@ pub fn build_models_url(base_url: &str) -> String {
|
|||||||
///
|
///
|
||||||
/// embedding 设计 §5.4 注释「保留(知识库需要)」— 此处遵循设计保留 embedding,
|
/// embedding 设计 §5.4 注释「保留(知识库需要)」— 此处遵循设计保留 embedding,
|
||||||
/// 不在 `is_non_chat_model` 剔除(知识库 embedding 路由用得着)。
|
/// 不在 `is_non_chat_model` 剔除(知识库 embedding 路由用得着)。
|
||||||
|
///
|
||||||
|
/// 注:`sensenova-u1` 用厂商前缀限定而非裸 `u1`,避免误伤未来含 `u1` 词素的 chat 模型
|
||||||
|
/// (SenseNova U1 系列走 `/v1/images/generations` 端点,非 chat completions)。
|
||||||
pub fn is_non_chat_model(id: &str) -> bool {
|
pub fn is_non_chat_model(id: &str) -> bool {
|
||||||
let id = id.to_lowercase();
|
let id = id.to_lowercase();
|
||||||
// 图片生成
|
// 图片生成
|
||||||
@@ -57,6 +60,11 @@ pub fn is_non_chat_model(id: &str) -> bool {
|
|||||||
|| id.contains("midjourney")
|
|| id.contains("midjourney")
|
||||||
|| id.contains("stable-diffusion")
|
|| id.contains("stable-diffusion")
|
||||||
|| id.contains("imagen")
|
|| id.contains("imagen")
|
||||||
|
// SenseNova U1 系列(图像生成,如 sensenova-u1-fast,走 /v1/images/generations 非 chat)
|
||||||
|
|| id.contains("sensenova-u1")
|
||||||
|
// 通用图像生成命名(infographic 海报生成 / image-generation 直白命名)
|
||||||
|
|| id.contains("infographic")
|
||||||
|
|| id.contains("image-generation")
|
||||||
// 语音(tts 合成 / whisper 识别 / 通用 audio / speech / voice)
|
// 语音(tts 合成 / whisper 识别 / 通用 audio / speech / voice)
|
||||||
|| id.contains("tts")
|
|| id.contains("tts")
|
||||||
|| id.contains("whisper")
|
|| id.contains("whisper")
|
||||||
@@ -226,6 +234,24 @@ mod tests {
|
|||||||
assert!(is_non_chat_model("stable-diffusion-xl"));
|
assert!(is_non_chat_model("stable-diffusion-xl"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn non_chat_sensenova_u1_image_filtered() {
|
||||||
|
// SenseNova U1 系列是图像生成模型(走 /v1/images/generations,非 chat completions),
|
||||||
|
// /v1/models 会返回但不应留为 chat 模型,否则用户选它对话会失败。
|
||||||
|
assert!(is_non_chat_model("sensenova-u1-fast"));
|
||||||
|
assert!(is_non_chat_model("SenseNova-U1-Fast")); // 大小写无关
|
||||||
|
assert!(is_non_chat_model("sensenova-u1-pro"));
|
||||||
|
// 通用图像生成命名也剔
|
||||||
|
assert!(is_non_chat_model("infographic-v1"));
|
||||||
|
assert!(is_non_chat_model("image-generation-latest"));
|
||||||
|
// 对照组:同厂商的 chat 模型 sensenova-6.7-flash-lite 不应被误剔
|
||||||
|
// (它是原生多模态 chat,见 model_probe.rs 预设表)
|
||||||
|
assert!(
|
||||||
|
!is_non_chat_model("sensenova-6.7-flash-lite"),
|
||||||
|
"sensenova-6.7-flash-lite 是 chat 模型,不应被当图像生成剔除"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn non_chat_speech_filtered() {
|
fn non_chat_speech_filtered() {
|
||||||
assert!(is_non_chat_model("tts-1"));
|
assert!(is_non_chat_model("tts-1"));
|
||||||
|
|||||||
@@ -130,6 +130,33 @@ mod tests {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── 预设表:已知多模态模型(命名无 vision 词素,靠预设显式标 vision) ──
|
||||||
|
// SenseNova flash-lite 原生多模态(商汤文档:支持图像输入理解),
|
||||||
|
// 但模型名不含 vision/vl/-v 词素,启发式 has_vision_token 无法识别 →
|
||||||
|
// 必须靠预设表显式标 vision,否则 modalities 漏 vision 致路由误判。
|
||||||
|
#[test]
|
||||||
|
fn probe_preset_sensenova_flash_lite_has_vision() {
|
||||||
|
let m = probe("sensenova-6.7-flash-lite");
|
||||||
|
assert_eq!(m.probe_source, Some(ProbeSource::PresetTable));
|
||||||
|
assert!(
|
||||||
|
m.modalities.contains(&Modality::Vision),
|
||||||
|
"sensenova-6.7-flash-lite 应有 Vision(原生多模态): {:?}",
|
||||||
|
m.modalities
|
||||||
|
);
|
||||||
|
assert!(m.modalities.contains(&Modality::Text));
|
||||||
|
// context_window 应为预设的 256K
|
||||||
|
assert_eq!(m.context_window, 262144);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn probe_preset_deepseek_v4_flash_text_only() {
|
||||||
|
// SenseNova 上的 deepseek-v4-flash:纯文本对话 + 1M 上下文,无 vision
|
||||||
|
let m = probe("deepseek-v4-flash");
|
||||||
|
assert_eq!(m.probe_source, Some(ProbeSource::PresetTable));
|
||||||
|
assert_eq!(m.modalities, vec![Modality::Text]);
|
||||||
|
assert_eq!(m.context_window, 1_048_576);
|
||||||
|
}
|
||||||
|
|
||||||
// ── 预设模糊匹配 ──
|
// ── 预设模糊匹配 ──
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
@@ -96,6 +96,9 @@
|
|||||||
<div class="form-field">
|
<div class="form-field">
|
||||||
<label class="form-label">{{ $t('settings.labelDefaultModel') }}</label>
|
<label class="form-label">{{ $t('settings.labelDefaultModel') }}</label>
|
||||||
<input v-model="providerForm.defaultModel" class="setting-input" :placeholder="$t('settings.phDefaultModel')" />
|
<input v-model="providerForm.defaultModel" class="setting-input" :placeholder="$t('settings.phDefaultModel')" />
|
||||||
|
<!-- 方向 A(轻量):defaultModel 仅作"建议起点"——预设 model id 易过时(DeepSeek chat 停用 /
|
||||||
|
Gemini 2.5→3.5 等),提示用户点「测试连接」拉真实模型列表覆盖,降低踩过时默认值的困惑。 -->
|
||||||
|
<div class="form-field-hint">{{ $t('settings.defaultModelHint') }}</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- P0-2: 保存失败持久错误横幅(常驻表单内,非自隐 toast)。
|
<!-- P0-2: 保存失败持久错误横幅(常驻表单内,非自隐 toast)。
|
||||||
含分类建议:keyring/迁移失败 → 查系统钥匙串权限;其它 → 通用重试。
|
含分类建议:keyring/迁移失败 → 查系统钥匙串权限;其它 → 通用重试。
|
||||||
@@ -530,6 +533,9 @@ onMounted(loadProviders)
|
|||||||
.form-grid { display: flex; flex-direction: column; gap: 14px; }
|
.form-grid { display: flex; flex-direction: column; gap: 14px; }
|
||||||
.form-field { display: flex; flex-direction: column; gap: 4px; }
|
.form-field { display: flex; flex-direction: column; gap: 4px; }
|
||||||
.form-label { font-size: 12px; font-weight: 500; color: var(--df-text-secondary); }
|
.form-label { font-size: 12px; font-weight: 500; color: var(--df-text-secondary); }
|
||||||
|
/* 字段级辅助说明(默认模型提示等):弱化色 + 小字,与 label/input 区分层级。
|
||||||
|
复用现有 --df-text-dim token(对齐 .empty-hint / .pool-weight-hint 风格)。 */
|
||||||
|
.form-field-hint { font-size: 11px; color: var(--df-text-dim); line-height: 1.5; }
|
||||||
.form-actions { display: flex; justify-content: flex-end; padding-top: 4px; }
|
.form-actions { display: flex; justify-content: flex-end; padding-top: 4px; }
|
||||||
|
|
||||||
/* P0-2: 保存失败持久错误横幅(常驻 form-actions 上方,醒目于自隐 toast) */
|
/* P0-2: 保存失败持久错误横幅(常驻 form-actions 上方,醒目于自隐 toast) */
|
||||||
|
|||||||
@@ -2,18 +2,24 @@
|
|||||||
* 厂商预设数据(项 D:文档探索失败时兜底 + 配置体验)。
|
* 厂商预设数据(项 D:文档探索失败时兜底 + 配置体验)。
|
||||||
*
|
*
|
||||||
* 选中预设后表单自动填入 providerType / baseUrl / defaultModel;用户仍可手改覆盖。
|
* 选中预设后表单自动填入 providerType / baseUrl / defaultModel;用户仍可手改覆盖。
|
||||||
* "自定义" 不预填(纯手填)。endpoints 均来自代码库实测核验,非猜测:
|
* "自定义" 不预填(纯手填)。endpoints 均来自官方文档/WebSearch 核验,非猜测:
|
||||||
*
|
*
|
||||||
* - OpenAI openai_compat https://api.openai.com (openai_compat.rs:45 / presets/models.json)
|
* - GLM/智谱 openai_compat https://open.bigmodel.cn/api/paas/v4 (model_fetch_helpers.rs:178,实测端点)
|
||||||
* - GLM/智谱 openai_compat https://open.bigmodel.cn/api/paas/v4 (model_fetch_helpers.rs:178,实测端点)
|
* - DeepSeek openai_compat https://api.deepseek.com (openai_compat.rs:45)
|
||||||
* - DeepSeek openai_compat https://api.deepseek.com (openai_compat.rs:45 / model_fetch_helpers.rs:187)
|
* - SenseNova openai_compat https://token.sensenova.cn/v1 (官方 token plan 端点;db 用户实测可用;来源见下方 SenseNova 注释)
|
||||||
* - SenseNova openai_compat https://api.sensenova.cn/compatible-mode/v1 (scripts/test_sensenova.py 实测,非 token 端点)
|
* - 通义千问 openai_compat https://dashscope.aliyuncs.com/compatible-mode/v1 (阿里云百炼 DashScope;https://help.aliyun.com/zh/model-studio/compatibility-of-openai-with-dashscope)
|
||||||
* - Anthropic anthropic https://api.anthropic.com (anthropic_compat.rs:51)
|
* - 月之暗面 Kimi openai_compat https://api.moonshot.cn/v1 (Moonshot AI;https://platform.moonshot.cn/docs)
|
||||||
|
* - 百度文心 openai_compat https://qianfan.baidubce.com/v2 (百度千帆 ModelBuilder v2;https://ai.baidu.com/ai-doc/WENXINWORKSHOP/2m3fihw8s)
|
||||||
|
* - 讯飞星火 openai_compat https://spark-api-open.xf-yun.com/v1 (讯飞开放平台 OpenAI 兼容;https://www.xfyun.cn/doc/spark/HTTP%E8%B0%83%E7%94%A8%E6%96%87%E6%A1%A3.html)
|
||||||
|
* - 字节豆包 openai_compat https://ark.cn-beijing.volces.com/api/v3 (火山方舟 Ark;https://www.volcengine.com/docs/82379/1330626)
|
||||||
|
* - Google Gemini openai_compat https://generativelanguage.googleapis.com/v1beta/openai (Google AI for Developers;https://ai.google.dev/gemini-api/docs/openai)
|
||||||
|
* - OpenAI openai_compat https://api.openai.com (openai_compat.rs:45)
|
||||||
|
* - Anthropic anthropic https://api.anthropic.com (anthropic_compat.rs:51)
|
||||||
*
|
*
|
||||||
* chat_url/messages_url 智能拼接(见 openai_compat.rs chat_url / anthropic_compat.rs messages_url):
|
* chat_url/messages_url 智能拼接(见 openai_compat.rs chat_url / anthropic_compat.rs messages_url):
|
||||||
* - 仅域名(OpenAI/DeepSeek)→ 后端补 /v1/chat/completions
|
* - 仅域名(OpenAI/DeepSeek)→ 后端补 /v1/chat/completions
|
||||||
* - 已含版本段 GLM /v4、SenseNova /compatible-mode/v1 → 后端补 /chat/completions
|
* - 已含版本段 GLM /v4、SenseNova /v1、千帆 /v2 等 → 后端补 /chat/completions
|
||||||
* 故 baseUrl 既可填带 /v1 也可不填,均能工作;此处采用代码库注释示例形态(更接近用户文档预期)。
|
* 故 baseUrl 既可填带 /v1 也可不填,均能工作;此处采用各厂商官方文档示例形态(更接近用户预期)。
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** providerType 字面量(对齐后端 ProviderType serde,与 ProviderPanel.vue 下拉 option value 一致) */
|
/** providerType 字面量(对齐后端 ProviderType serde,与 ProviderPanel.vue 下拉 option value 一致) */
|
||||||
@@ -40,22 +46,118 @@ export const PROVIDER_PRESETS: readonly ProviderPreset[] = [
|
|||||||
id: 'glm',
|
id: 'glm',
|
||||||
name: 'GLM / 智谱',
|
name: 'GLM / 智谱',
|
||||||
providerType: 'openai_compat',
|
providerType: 'openai_compat',
|
||||||
|
// 来源:智谱 OpenAI 兼容 https://docs.bigmodel.cn/cn/guide/develop/openai/introduction
|
||||||
baseUrl: 'https://open.bigmodel.cn/api/paas/v4',
|
baseUrl: 'https://open.bigmodel.cn/api/paas/v4',
|
||||||
defaultModel: 'glm-4.6',
|
defaultModel: 'glm-4.6',
|
||||||
|
// glm-4.6(2025-09,355B/激活 32B)稳定便宜适合做默认;最新旗舰 GLM-5.2(2026-06-16,开源 SOTA,1M 上下文)
|
||||||
|
// 需要更强能力改 glm-5.2(确认 model id 字符串后)。
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'deepseek',
|
id: 'deepseek',
|
||||||
name: 'DeepSeek',
|
name: 'DeepSeek',
|
||||||
providerType: 'openai_compat',
|
providerType: 'openai_compat',
|
||||||
|
// 来源:DeepSeek API Docs https://api-docs.deepseek.com/
|
||||||
baseUrl: 'https://api.deepseek.com',
|
baseUrl: 'https://api.deepseek.com',
|
||||||
defaultModel: 'deepseek-chat',
|
defaultModel: 'deepseek-v4-flash',
|
||||||
|
// 重要:deepseek-chat / deepseek-reasoner 旧名已于 2026-07-24 停用,
|
||||||
|
// 现分别指向 deepseek-v4-flash 的非思考/思考模式(V4-Flash 2026-07-31 发布)。
|
||||||
|
// 思考模式改 deepseek-v4-flash(传 thinking 参数)或 deepseek-v4-pro。
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'sensenova',
|
id: 'sensenova',
|
||||||
name: 'SenseNova / 商汤',
|
name: 'SenseNova / 商汤',
|
||||||
providerType: 'openai_compat',
|
providerType: 'openai_compat',
|
||||||
baseUrl: 'https://api.sensenova.cn/compatible-mode/v1',
|
// 来源:GitHub cc-switch #2559 实测确认 token plan 端点;db 用户实测 base_url=token.sensenova.cn 可用。
|
||||||
defaultModel: 'SenseNova-Turbo',
|
// 旧端点 https://api.sensenova.cn/compatible-mode/v1 已废弃,改为 token.sensenova.cn 对齐官方 token plan。
|
||||||
|
// 官方文档 https://platform.sensenova.cn/docs / Token Plan https://www.sensenova.cn/token-plan
|
||||||
|
// 完整路径:token.sensenova.cn/v1/chat/completions(HuggingFace SenseNova-U1 文档实测确认)
|
||||||
|
baseUrl: 'https://token.sensenova.cn/v1',
|
||||||
|
// 官方文档(platform.sensenova.cn/docs)核实:Token Plan API 仅 3 个模型 ——
|
||||||
|
// sensenova-6.7-flash-lite(多模态对话主力)/ sensenova-u1-fast(图像生成,不能对话)/ deepseek-v4-flash(纯文本对话)。
|
||||||
|
// 无 U1 / U1-Pro 对话模型(那是官网产品名,API 不提供);旧 SenseNova-Turbo 已退役。
|
||||||
|
// 默认填对话主力 sensenova-6.7-flash-lite(文档所有工具接入示例的 Model ID)。
|
||||||
|
defaultModel: 'sensenova-6.7-flash-lite',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'qwen',
|
||||||
|
name: '通义千问 / Qwen',
|
||||||
|
providerType: 'openai_compat',
|
||||||
|
// 来源:阿里云百炼 DashScope OpenAI 兼容
|
||||||
|
// https://help.aliyun.com/zh/model-studio/compatibility-of-openai-with-dashscope
|
||||||
|
// 海外节点:https://dashscope-us.aliyuncs.com/compatible-mode/v1
|
||||||
|
// 注意:compatible-mode/v1 是 OpenAI SDK 兼容端点;原生 dashscope SDK 用 api/v1,二者不同。
|
||||||
|
baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
|
||||||
|
defaultModel: 'qwen-plus',
|
||||||
|
// qwen-plus 是百炼稳定别名(指向当前 plus 档主力,无需带版本号),适合做默认;
|
||||||
|
// 更强用 qwen-max、更便宜用 qwen-turbo,详见 https://help.aliyun.com/zh/model-studio/models
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'moonshot',
|
||||||
|
name: '月之暗面 / Kimi',
|
||||||
|
providerType: 'openai_compat',
|
||||||
|
// 来源:Kimi API 开放平台 https://platform.kimi.com/docs
|
||||||
|
// 海外节点:https://api.moonshot.ai/v1
|
||||||
|
// 重要:moonshot-v1 系列对新注册用户已下线,官方转向 kimi-k2 / kimi-k3 系列。
|
||||||
|
baseUrl: 'https://api.moonshot.cn/v1',
|
||||||
|
defaultModel: 'kimi-k3',
|
||||||
|
// kimi-k3 = Kimi 当前旗舰(2.8T 参数 MoE,1M 上下文,原生多模态,2025-07 发布);需 Moderato 及以上会员。
|
||||||
|
// 编程场景改 kimi-k2.7-code / kimi-k2.7-code-highspeed;通用轻量改 kimi-k2.6(256K,免费档可调用)。
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'ernie',
|
||||||
|
name: '百度文心 / ERNIE',
|
||||||
|
providerType: 'openai_compat',
|
||||||
|
// 来源:百度千帆 ModelBuilder v2 OpenAI 兼容接口
|
||||||
|
// https://ai.baidu.com/ai-doc/WENXINWORKSHOP/2m3fihw8s
|
||||||
|
// 鉴权用 bce-v3 开头的 V2 API Key(Bearer),不再是旧的 AK/SK + Access Token 方式
|
||||||
|
baseUrl: 'https://qianfan.baidubce.com/v2',
|
||||||
|
defaultModel: 'ernie-4.5-300B-A47B',
|
||||||
|
// 当前主力:ernie-4.5-300B-A47B(MoE 架构 300B/激活 47B,128K 上下文,2025-06 开源);
|
||||||
|
// 推理增强改 ernie-x1-turbo-32k;最新预览 ERNIE-5.1-Preview(2026-04)。
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'spark',
|
||||||
|
name: '讯飞星火 / Spark',
|
||||||
|
providerType: 'openai_compat',
|
||||||
|
// 来源:讯飞开放平台星火 HTTP 接口文档(OpenAI SDK 兼容章节)
|
||||||
|
// https://www.xfyun.cn/doc/spark/HTTP%E8%B0%83%E7%94%A8%E6%96%87%E6%A1%A3.html
|
||||||
|
// api_key 填控制台 APIPassword(非 APIKey);完整路径 /v1/chat/completions
|
||||||
|
baseUrl: 'https://spark-api-open.xf-yun.com/v1',
|
||||||
|
defaultModel: '4.0Ultra',
|
||||||
|
// 4.0Ultra 仍是官方 HTTP 文档 cURL 示例列出的综合旗舰(model 字段值经验证可用);
|
||||||
|
// 深度推理改 spark-x1 / spark-x1.5(Ultra 已融合 X1.5 快思考模式,2026 主推);
|
||||||
|
// 2026-03 Max 套餐下线合并到 Ultra,可选 lite / pro-128k / max-32k 等。
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'doubao',
|
||||||
|
name: '字节豆包 / Doubao',
|
||||||
|
providerType: 'openai_compat',
|
||||||
|
// 来源:火山方舟(火山引擎 Ark)OpenAI 兼容
|
||||||
|
// https://www.volcengine.com/docs/82379/1330626 (兼容 OpenAI SDK)
|
||||||
|
// https://www.volcengine.com/docs/82379/1298459 (Base URL 鉴权)
|
||||||
|
// 完整路径:ark.cn-beijing.volces.com/api/v3/chat/completions
|
||||||
|
// 注意:豆包可用「模型名」(带日期快照)或「推理接入点 Endpoint ID」(ep-xxx)调用。
|
||||||
|
baseUrl: 'https://ark.cn-beijing.volces.com/api/v3',
|
||||||
|
defaultModel: 'doubao-seed-1-6-250615',
|
||||||
|
// TODO(2026-08):豆包模型名随版本迭代频繁变更且带日期快照,无"永久稳定"占位。
|
||||||
|
// - doubao-seed-1-6-250615(2025-06)近期已被列入下线名单,正过渡到 Doubao Seed 2.x 系列;
|
||||||
|
// - 2026 主力:豆包 2.1 Pro(2026-06-23 发布)/ Doubao Seed 2.1(Agent 旗舰)/ Doubao-Seed-2.0-Code(编程);
|
||||||
|
// - 具体可用的 model id 字符串(如 doubao-seed-2-1-xxx)需在火山方舟控制台模型列表核实后填入;
|
||||||
|
// - 生产环境强烈建议:控制台创建 Endpoint,把 defaultModel 改成 ep-xxxxxxxx(版本无关)。
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'gemini',
|
||||||
|
name: 'Google Gemini',
|
||||||
|
providerType: 'openai_compat',
|
||||||
|
// 来源:Google AI for Developers OpenAI compatibility
|
||||||
|
// https://ai.google.dev/gemini-api/docs/openai
|
||||||
|
// 关键:路径已含 /v1beta/openai,不要在末尾再补 /v1(常见错误)。
|
||||||
|
// 认证:Gemini API Key 作 Bearer Token。
|
||||||
|
// TODO(2026-08):该端点主要支持 Chat Completions,部分 OpenAI 高级特性(Responses API 等)不完整。
|
||||||
|
baseUrl: 'https://generativelanguage.googleapis.com/v1beta/openai',
|
||||||
|
defaultModel: 'gemini-3.5-flash',
|
||||||
|
// gemini-3.5-flash = 2026-05 Google I/O 发布的性价比主力(Firebase 文档确认 model id 无 preview 后缀);
|
||||||
|
// 高端场景改 gemini-3.1-pro(2026-02);2.5 系列已被 3.x 接棒。
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'openai',
|
id: 'openai',
|
||||||
|
|||||||
@@ -53,6 +53,10 @@ export default {
|
|||||||
phBaseUrl: 'https://api.deepseek.com',
|
phBaseUrl: 'https://api.deepseek.com',
|
||||||
phApiKey: 'sk-...',
|
phApiKey: 'sk-...',
|
||||||
phDefaultModel: 'deepseek-chat',
|
phDefaultModel: 'deepseek-chat',
|
||||||
|
// Direction A (lightweight): defaultModel is only a "suggested starting point";
|
||||||
|
// guide users to hit "Test connection" to pull the vendor's real model list and overwrite,
|
||||||
|
// avoiding stale preset model ids (DeepSeek chat deprecated / Gemini 2.5→3.5 etc.) misleading them.
|
||||||
|
defaultModelHint: 'Suggested starting point — hit "Test connection" to pull the vendor’s real model list and overwrite',
|
||||||
providerTypeOpenaiCompat: 'OpenAI-compatible (DeepSeek / GLM v4 / OpenAI)',
|
providerTypeOpenaiCompat: 'OpenAI-compatible (DeepSeek / GLM v4 / OpenAI)',
|
||||||
providerTypeAnthropic: 'Anthropic-compatible (GLM subscription / Claude)',
|
providerTypeAnthropic: 'Anthropic-compatible (GLM subscription / Claude)',
|
||||||
saving: 'Saving...',
|
saving: 'Saving...',
|
||||||
|
|||||||
@@ -53,6 +53,9 @@ export default {
|
|||||||
phBaseUrl: 'https://api.deepseek.com',
|
phBaseUrl: 'https://api.deepseek.com',
|
||||||
phApiKey: 'sk-...',
|
phApiKey: 'sk-...',
|
||||||
phDefaultModel: 'deepseek-chat',
|
phDefaultModel: 'deepseek-chat',
|
||||||
|
// 方向 A(轻量):defaultModel 仅作"建议起点",引导用户点「测试连接」拉真实模型列表覆盖,
|
||||||
|
// 避免预设 model id 过时(DeepSeek chat 停用 / Gemini 2.5→3.5 等)误导。
|
||||||
|
defaultModelHint: '建议起点 — 点「测试连接」拉取厂商真实模型列表覆盖',
|
||||||
providerTypeOpenaiCompat: 'OpenAI 兼容(DeepSeek / GLM v4 / OpenAI)',
|
providerTypeOpenaiCompat: 'OpenAI 兼容(DeepSeek / GLM v4 / OpenAI)',
|
||||||
providerTypeAnthropic: 'Anthropic 兼容(GLM 订阅 / Claude)',
|
providerTypeAnthropic: 'Anthropic 兼容(GLM 订阅 / Claude)',
|
||||||
saving: '保存中...',
|
saving: '保存中...',
|
||||||
|
|||||||
Reference in New Issue
Block a user