From 3a1542077053995037d728368bcb3a9c80103cb5 Mon Sep 17 00:00:00 2001 From: Jason Date: Fri, 29 May 2026 15:54:03 +0800 Subject: [PATCH] Update default models and pricing across presets Bump default model names project-wide: gpt-5.4 -> gpt-5.5, gemini-3.x -> gemini-3.5-flash, glm-5 -> glm-5.1, and grok-code-fast-1 -> grok-build-0.1 across all provider presets (claude, codex, gemini, hermes, openclaw, opencode, universal), Gemini config, and stream check defaults. Pricing: - Seed gemini-3.5-flash, gemini-3.1-flash-lite, step-3.5-flash-2603, doubao-seed-2.0-code, mimo-v2.5(/pro), qwen3-coder-480b, grok-build-0.1. - Correct deepseek-v4-flash/pro, glm-5/5.1, grok pricing. - Add repair_current_model_pricing: idempotent pass that fixes only rows still equal to the outdated built-in values, preserving any user-customized prices (seed uses INSERT OR IGNORE and cannot update existing rows). Fixes from review: - opencode: drop duplicate gemini-3.5-flash variant (unreachable via .find), keep the entry with the full minimal/low/medium/high set. - Align stale display names/costs to gemini-3.5-flash (hermes, openclaw, opencode); openclaw cost -> {1.5, 9, 0.15} to match seed. - i18n (zh/en/ja/zh-TW): refresh OMO category tooltips for new model names; fix writing tooltip to Kimi K2.5 to match its recommended. Update tests accordingly and add a regression test asserting unique model ids in the Google opencode preset variants. --- src-tauri/src/database/schema.rs | 165 ++++++++++++++++-- src-tauri/src/database/tests.rs | 60 +++++++ src-tauri/src/gemini_config.rs | 19 +- src-tauri/src/services/stream_check.rs | 18 +- .../forms/GeminiCommonConfigModal.tsx | 2 +- .../providers/forms/GeminiConfigSections.tsx | 2 +- .../providers/forms/GeminiFormFields.tsx | 2 +- .../forms/helpers/opencodeFormUtils.ts | 2 +- .../universal/UniversalProviderFormModal.tsx | 4 +- src/components/usage/ModelTestConfigPanel.tsx | 4 +- src/config/claudeDesktopProviderPresets.ts | 24 +-- src/config/claudeProviderPresets.ts | 46 ++--- src/config/codexProviderPresets.ts | 60 ++++--- src/config/codexTemplates.ts | 2 +- src/config/geminiProviderPresets.ts | 64 +++---- src/config/hermesProviderPresets.ts | 50 +++--- src/config/openclawProviderPresets.ts | 58 +++--- src/config/opencodeProviderPresets.ts | 46 ++--- src/config/universalProviderPresets.ts | 4 +- src/i18n/locales/en.json | 6 +- src/i18n/locales/ja.json | 6 +- src/i18n/locales/zh-TW.json | 6 +- src/i18n/locales/zh.json | 6 +- src/types/omo.ts | 16 +- tests/config/codexChatProviderPresets.test.ts | 8 +- .../therouterOpenCodeOpenClawPresets.test.ts | 49 +++++- tests/config/therouterProviderPresets.test.ts | 4 +- 27 files changed, 477 insertions(+), 256 deletions(-) diff --git a/src-tauri/src/database/schema.rs b/src-tauri/src/database/schema.rs index f6df634bb..60cf7ca86 100644 --- a/src-tauri/src/database/schema.rs +++ b/src-tauri/src/database/schema.rs @@ -1485,6 +1485,15 @@ impl Database { ("gpt-4.1", "GPT-4.1", "2", "8", "0.50", "0"), ("gpt-4.1-mini", "GPT-4.1 Mini", "0.40", "1.60", "0.10", "0"), ("gpt-4.1-nano", "GPT-4.1 Nano", "0.10", "0.40", "0.025", "0"), + // Gemini 3.5 系列 + ( + "gemini-3.5-flash", + "Gemini 3.5 Flash", + "1.50", + "9.00", + "0.15", + "0", + ), // Gemini 3.1 系列 ( "gemini-3.1-pro-preview", @@ -1494,6 +1503,14 @@ impl Database { "0.20", "0", ), + ( + "gemini-3.1-flash-lite", + "Gemini 3.1 Flash Lite", + "0.25", + "1.50", + "0.025", + "0", + ), ( "gemini-3.1-flash-lite-preview", "Gemini 3.1 Flash Lite Preview", @@ -1562,6 +1579,14 @@ impl Database { "0.02", "0", ), + ( + "step-3.5-flash-2603", + "Step 3.5 Flash 2603", + "0.10", + "0.30", + "0.02", + "0", + ), // ====== 国产模型 (USD/1M tokens) ====== // Doubao (字节跳动) ( @@ -1588,6 +1613,14 @@ impl Database { "0", "0", ), + ( + "doubao-seed-2-0-code-preview-latest", + "Doubao Seed 2.0 Code Preview", + "0.47", + "2.37", + "0", + "0", + ), ( "doubao-seed-2-0-lite", "Doubao Seed 2.0 Lite", @@ -1644,15 +1677,15 @@ impl Database { "DeepSeek V4 Flash", "0.14", "0.28", - "0.028", + "0.0028", "0", ), ( "deepseek-v4-pro", "DeepSeek V4 Pro", - "1.68", - "3.36", - "0.14", + "0.435", + "0.87", + "0.003625", "0", ), // Kimi (月之暗面) @@ -1714,8 +1747,8 @@ impl Database { // GLM (智谱) ("glm-4.7", "GLM-4.7", "0.39", "1.75", "0.04", "0"), ("glm-4.6", "GLM-4.6", "0.28", "1.11", "0.03", "0"), - ("glm-5", "GLM-5", "0.72", "2.30", "0", "0"), - ("glm-5.1", "GLM-5.1", "0.95", "3.15", "0", "0"), + ("glm-5", "GLM-5", "1", "3.2", "0.2", "0"), + ("glm-5.1", "GLM-5.1", "1.4", "4.4", "0.26", "0"), // MiMo (小米) ( "mimo-v2-flash", @@ -1726,6 +1759,8 @@ impl Database { "0", ), ("mimo-v2-pro", "MiMo V2 Pro", "1", "3", "0", "0"), + ("mimo-v2.5", "MiMo V2.5", "0.09", "0.29", "0.009", "0"), + ("mimo-v2.5-pro", "MiMo V2.5 Pro", "1", "3", "0", "0"), // Qwen 系列 (阿里巴巴) ("qwen3.6-plus", "Qwen3.6 Plus", "0.325", "1.95", "0", "0"), ("qwen3.5-plus", "Qwen3.5 Plus", "0.26", "1.56", "0", "0"), @@ -1746,6 +1781,22 @@ impl Database { "0", "0", ), + ( + "qwen3-coder-480b", + "Qwen3 Coder 480B", + "0.65", + "3.25", + "0", + "0", + ), + ( + "qwen3-coder-480b-a35b-instruct", + "Qwen3 Coder 480B-A35B Instruct", + "0.65", + "3.25", + "0", + "0", + ), ( "qwen3-coder-flash", "Qwen3 Coder Flash", @@ -1801,12 +1852,13 @@ impl Database { ("grok-4", "Grok 4", "3", "15", "0.75", "0"), ( "grok-code-fast-1", - "Grok Code Fast", + "Grok Build 0.1 (Code Fast Alias)", + "1", + "2", "0.20", - "1.50", - "0.02", "0", ), + ("grok-build-0.1", "Grok Build 0.1", "1", "2", "0.20", "0"), ("grok-3", "Grok 3", "3", "15", "0.75", "0"), ("grok-3-mini", "Grok 3 Mini", "0.25", "0.50", "0.075", "0"), // Mistral 系列 @@ -1898,6 +1950,96 @@ impl Database { Ok(()) } + fn repair_current_model_pricing(conn: &Connection) -> Result<(), AppError> { + let pricing_fixes = [ + ( + "deepseek-v4-flash", + "DeepSeek V4 Flash", + "0.14", + "0.28", + "0.0028", + "0", + "0.14", + "0.28", + "0.028", + "0", + ), + ( + "deepseek-v4-pro", + "DeepSeek V4 Pro", + "0.435", + "0.87", + "0.003625", + "0", + "1.68", + "3.36", + "0.14", + "0", + ), + ( + "glm-5", "GLM-5", "1", "3.2", "0.2", "0", "0.72", "2.30", "0", "0", + ), + ( + "glm-5.1", "GLM-5.1", "1.4", "4.4", "0.26", "0", "0.95", "3.15", "0", "0", + ), + ( + "grok-code-fast-1", + "Grok Build 0.1 (Code Fast Alias)", + "1", + "2", + "0.20", + "0", + "0.20", + "1.50", + "0.02", + "0", + ), + ]; + + for ( + model_id, + display_name, + input, + output, + cache_read, + cache_creation, + old_input, + old_output, + old_cache_read, + old_cache_creation, + ) in pricing_fixes + { + conn.execute( + "UPDATE model_pricing SET + display_name = ?2, + input_cost_per_million = ?3, + output_cost_per_million = ?4, + cache_read_cost_per_million = ?5, + cache_creation_cost_per_million = ?6 + WHERE model_id = ?1 + AND input_cost_per_million = ?7 + AND output_cost_per_million = ?8 + AND cache_read_cost_per_million = ?9 + AND cache_creation_cost_per_million = ?10", + rusqlite::params![ + model_id, + display_name, + input, + output, + cache_read, + cache_creation, + old_input, + old_output, + old_cache_read, + old_cache_creation + ], + ) + .map_err(|e| AppError::Database(format!("修复模型 {model_id} 定价失败: {e}")))?; + } + + Ok(()) + } + /// 确保模型定价表具备默认数据 pub fn ensure_model_pricing_seeded(&self) -> Result<(), AppError> { let conn = lock_conn!(self.conn); @@ -1905,8 +2047,9 @@ impl Database { } fn ensure_model_pricing_seeded_on_conn(conn: &Connection) -> Result<(), AppError> { - // 每次启动都执行 INSERT OR IGNORE,增量追加新模型,已有数据不覆盖 - Self::seed_model_pricing(conn) + // 每次启动都执行 INSERT OR IGNORE,增量追加新模型;仅修复仍等于旧内置值的定价。 + Self::seed_model_pricing(conn)?; + Self::repair_current_model_pricing(conn) } // --- 辅助方法 --- diff --git a/src-tauri/src/database/tests.rs b/src-tauri/src/database/tests.rs index 8c99e0a9a..3695210e5 100644 --- a/src-tauri/src/database/tests.rs +++ b/src-tauri/src/database/tests.rs @@ -662,6 +662,66 @@ fn schema_model_pricing_is_seeded_on_init() { ); } +#[test] +fn model_pricing_seed_repairs_known_outdated_builtin_prices() { + let db = Database::memory().expect("create memory db"); + + { + let conn = db.conn.lock().expect("lock conn"); + conn.execute( + "UPDATE model_pricing + SET input_cost_per_million = '1.68', + output_cost_per_million = '3.36', + cache_read_cost_per_million = '0.14', + cache_creation_cost_per_million = '0' + WHERE model_id = 'deepseek-v4-pro'", + [], + ) + .expect("restore old DeepSeek price"); + conn.execute( + "UPDATE model_pricing + SET input_cost_per_million = '9', + output_cost_per_million = '9', + cache_read_cost_per_million = '9', + cache_creation_cost_per_million = '0' + WHERE model_id = 'glm-5.1'", + [], + ) + .expect("set custom GLM price"); + } + + db.ensure_model_pricing_seeded() + .expect("ensure pricing seeded"); + + let conn = db.conn.lock().expect("lock conn"); + let deepseek: (String, String, String) = conn + .query_row( + "SELECT input_cost_per_million, output_cost_per_million, cache_read_cost_per_million + FROM model_pricing WHERE model_id = 'deepseek-v4-pro'", + [], + |row| Ok((row.get(0)?, row.get(1)?, row.get(2)?)), + ) + .expect("query DeepSeek price"); + assert_eq!( + deepseek, + ( + "0.435".to_string(), + "0.87".to_string(), + "0.003625".to_string() + ) + ); + + let glm: (String, String, String) = conn + .query_row( + "SELECT input_cost_per_million, output_cost_per_million, cache_read_cost_per_million + FROM model_pricing WHERE model_id = 'glm-5.1'", + [], + |row| Ok((row.get(0)?, row.get(1)?, row.get(2)?)), + ) + .expect("query GLM price"); + assert_eq!(glm, ("9".to_string(), "9".to_string(), "9".to_string())); +} + #[test] fn ensure_incremental_auto_vacuum_rebuilds_existing_file_db() { let temp = NamedTempFile::new().expect("create temp db file"); diff --git a/src-tauri/src/gemini_config.rs b/src-tauri/src/gemini_config.rs index 94774f2d5..90fa28b2e 100644 --- a/src-tauri/src/gemini_config.rs +++ b/src-tauri/src/gemini_config.rs @@ -380,7 +380,7 @@ mod tests { # Comment line GOOGLE_GEMINI_BASE_URL=https://example.com GEMINI_API_KEY=sk-test123 -GEMINI_MODEL=gemini-3-pro-preview +GEMINI_MODEL=gemini-3.5-flash # Another comment "#; @@ -395,7 +395,7 @@ GEMINI_MODEL=gemini-3-pro-preview assert_eq!(map.get("GEMINI_API_KEY"), Some(&"sk-test123".to_string())); assert_eq!( map.get("GEMINI_MODEL"), - Some(&"gemini-3-pro-preview".to_string()) + Some(&"gemini-3.5-flash".to_string()) ); } @@ -403,15 +403,12 @@ GEMINI_MODEL=gemini-3-pro-preview fn test_serialize_env_file() { let mut map = HashMap::new(); map.insert("GEMINI_API_KEY".to_string(), "sk-test".to_string()); - map.insert( - "GEMINI_MODEL".to_string(), - "gemini-3-pro-preview".to_string(), - ); + map.insert("GEMINI_MODEL".to_string(), "gemini-3.5-flash".to_string()); let content = serialize_env_file(&map); assert!(content.contains("GEMINI_API_KEY=sk-test")); - assert!(content.contains("GEMINI_MODEL=gemini-3-pro-preview")); + assert!(content.contains("GEMINI_MODEL=gemini-3.5-flash")); } #[test] @@ -435,7 +432,7 @@ GEMINI_MODEL=gemini-3-pro-preview # Comment line GOOGLE_GEMINI_BASE_URL=https://example.com GEMINI_API_KEY=sk-test123 -GEMINI_MODEL=gemini-3-pro-preview +GEMINI_MODEL=gemini-3.5-flash # Another comment "#; @@ -452,7 +449,7 @@ GEMINI_MODEL=gemini-3-pro-preview assert_eq!(map.get("GEMINI_API_KEY"), Some(&"sk-test123".to_string())); assert_eq!( map.get("GEMINI_MODEL"), - Some(&"gemini-3-pro-preview".to_string()) + Some(&"gemini-3.5-flash".to_string()) ); } @@ -619,7 +616,7 @@ KEY_WITH-DASH=value"; let settings = serde_json::json!({ "env": { "GEMINI_API_KEY": "sk-test123", - "GEMINI_MODEL": "gemini-3-pro-preview" + "GEMINI_MODEL": "gemini-3.5-flash" } }); @@ -632,7 +629,7 @@ KEY_WITH-DASH=value"; // 测试缺少 API Key 的非空配置在基本验证中可以通过(用户稍后填写) let settings = serde_json::json!({ "env": { - "GEMINI_MODEL": "gemini-3-pro-preview" + "GEMINI_MODEL": "gemini-3.5-flash" } }); diff --git a/src-tauri/src/services/stream_check.rs b/src-tauri/src/services/stream_check.rs index 4f2b9a6ee..665d8c0d2 100644 --- a/src-tauri/src/services/stream_check.rs +++ b/src-tauri/src/services/stream_check.rs @@ -58,8 +58,8 @@ impl Default for StreamCheckConfig { max_retries: 2, degraded_threshold_ms: 6000, claude_model: "claude-haiku-4-5-20251001".to_string(), - codex_model: "gpt-5.4@low".to_string(), - gemini_model: "gemini-3-flash-preview".to_string(), + codex_model: "gpt-5.5@low".to_string(), + gemini_model: "gemini-3.5-flash".to_string(), test_prompt: default_test_prompt(), } } @@ -1886,7 +1886,7 @@ mod tests { AuthStrategy::Bearer, "openai_chat", true, - "gpt-5.4", + "gpt-5.5", ); assert_eq!(url, "https://relay.example/v1/chat/completions"); @@ -1899,7 +1899,7 @@ mod tests { AuthStrategy::GitHubCopilot, "openai_chat", false, - "gpt-5.4", + "gpt-5.5", ); assert_eq!(url, "https://api.githubcopilot.com/chat/completions"); @@ -1912,7 +1912,7 @@ mod tests { AuthStrategy::GitHubCopilot, "openai_responses", false, - "gpt-5.4", + "gpt-5.5", ); assert_eq!(url, "https://api.githubcopilot.com/v1/responses"); @@ -1925,7 +1925,7 @@ mod tests { AuthStrategy::Bearer, "openai_chat", false, - "gpt-5.4", + "gpt-5.5", ); assert_eq!(url, "https://example.com/v1/chat/completions"); @@ -1938,7 +1938,7 @@ mod tests { AuthStrategy::Bearer, "openai_responses", false, - "gpt-5.4", + "gpt-5.5", ); assert_eq!(url, "https://example.com/v1/responses"); @@ -2005,7 +2005,7 @@ mod tests { #[test] fn test_resolve_claude_stream_url_for_gemini_native_cloudflare_vertex_full_url() { let url = StreamCheckService::resolve_claude_stream_url( - "https://gateway.ai.cloudflare.com/v1/account/gateway/google-vertex-ai/v1/projects/project/locations/us-central1/publishers/google/models/gemini-3.1-pro-preview:streamGenerateContent", + "https://gateway.ai.cloudflare.com/v1/account/gateway/google-vertex-ai/v1/projects/project/locations/us-central1/publishers/google/models/gemini-3.5-flash:streamGenerateContent", AuthStrategy::Google, "gemini_native", true, @@ -2014,7 +2014,7 @@ mod tests { assert_eq!( url, - "https://gateway.ai.cloudflare.com/v1/account/gateway/google-vertex-ai/v1/projects/project/locations/us-central1/publishers/google/models/gemini-3.1-pro-preview:streamGenerateContent?alt=sse" + "https://gateway.ai.cloudflare.com/v1/account/gateway/google-vertex-ai/v1/projects/project/locations/us-central1/publishers/google/models/gemini-3.5-flash:streamGenerateContent?alt=sse" ); } diff --git a/src/components/providers/forms/GeminiCommonConfigModal.tsx b/src/components/providers/forms/GeminiCommonConfigModal.tsx index c7dd05769..48fc779fb 100644 --- a/src/components/providers/forms/GeminiCommonConfigModal.tsx +++ b/src/components/providers/forms/GeminiCommonConfigModal.tsx @@ -135,7 +135,7 @@ export const GeminiCommonConfigModal: React.FC< value={draftValue} onChange={setDraftValue} placeholder={`{ - "GEMINI_MODEL": "gemini-3-pro-preview" + "GEMINI_MODEL": "gemini-3.5-flash" }`} darkMode={isDarkMode} rows={16} diff --git a/src/components/providers/forms/GeminiConfigSections.tsx b/src/components/providers/forms/GeminiConfigSections.tsx index 999f986dc..981451949 100644 --- a/src/components/providers/forms/GeminiConfigSections.tsx +++ b/src/components/providers/forms/GeminiConfigSections.tsx @@ -97,7 +97,7 @@ export const GeminiEnvSection: React.FC = ({ onChange={handleChange} placeholder={`GOOGLE_GEMINI_BASE_URL=https://your-api-endpoint.com/ GEMINI_API_KEY=sk-your-api-key-here -GEMINI_MODEL=gemini-3-pro-preview`} +GEMINI_MODEL=gemini-3.5-flash`} darkMode={isDarkMode} rows={6} showValidation={false} diff --git a/src/components/providers/forms/GeminiFormFields.tsx b/src/components/providers/forms/GeminiFormFields.tsx index a01a16c56..0754bb706 100644 --- a/src/components/providers/forms/GeminiFormFields.tsx +++ b/src/components/providers/forms/GeminiFormFields.tsx @@ -185,7 +185,7 @@ export function GeminiFormFields({ id="gemini-model" value={model} onChange={onModelChange} - placeholder="gemini-3-pro-preview" + placeholder="gemini-3.5-flash" fetchedModels={fetchedModels} isLoading={isFetchingModels} /> diff --git a/src/components/providers/forms/helpers/opencodeFormUtils.ts b/src/components/providers/forms/helpers/opencodeFormUtils.ts index a24361628..dfb9a6e2b 100644 --- a/src/components/providers/forms/helpers/opencodeFormUtils.ts +++ b/src/components/providers/forms/helpers/opencodeFormUtils.ts @@ -24,7 +24,7 @@ export const GEMINI_DEFAULT_CONFIG = JSON.stringify( env: { GOOGLE_GEMINI_BASE_URL: "", GEMINI_API_KEY: "", - GEMINI_MODEL: "gemini-3-pro-preview", + GEMINI_MODEL: "gemini-3.5-flash", }, }, null, diff --git a/src/components/universal/UniversalProviderFormModal.tsx b/src/components/universal/UniversalProviderFormModal.tsx index ec4198509..b7162fced 100644 --- a/src/components/universal/UniversalProviderFormModal.tsx +++ b/src/components/universal/UniversalProviderFormModal.tsx @@ -146,7 +146,7 @@ export function UniversalProviderFormModal({ // 计算 Codex 配置 JSON 预览 const codexConfigJson = useMemo(() => { if (!codexEnabled) return null; - const model = models.codex?.model || "gpt-5.4"; + const model = models.codex?.model || "gpt-5.5"; const reasoningEffort = models.codex?.reasoningEffort || "high"; // 确保 base_url 以 /v1 结尾(Codex 使用 OpenAI 兼容 API) const codexBaseUrl = baseUrl.endsWith("/v1") @@ -592,7 +592,7 @@ requires_openai_auth = true`; onChange={(e) => updateModel("codex", "model", e.target.value) } - placeholder="gpt-5.4" + placeholder="gpt-5.5" />
diff --git a/src/components/usage/ModelTestConfigPanel.tsx b/src/components/usage/ModelTestConfigPanel.tsx index 65dba22e9..39981a948 100644 --- a/src/components/usage/ModelTestConfigPanel.tsx +++ b/src/components/usage/ModelTestConfigPanel.tsx @@ -24,8 +24,8 @@ export function ModelTestConfigPanel() { maxRetries: "2", degradedThresholdMs: "6000", claudeModel: "claude-haiku-4-5-20251001", - codexModel: "gpt-5.4@low", - geminiModel: "gemini-3-flash-preview", + codexModel: "gpt-5.5@low", + geminiModel: "gemini-3.5-flash", testPrompt: "Who are you?", }); diff --git a/src/config/claudeDesktopProviderPresets.ts b/src/config/claudeDesktopProviderPresets.ts index 7ed37db9e..afc40a270 100644 --- a/src/config/claudeDesktopProviderPresets.ts +++ b/src/config/claudeDesktopProviderPresets.ts @@ -250,9 +250,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [ mode: "proxy", apiFormat: "gemini_native", modelRoutes: brandedRoutes( - "gemini-3.1-pro", - "gemini-3.1-pro", - "gemini-3-flash", + "gemini-3.5-flash", + "gemini-3.5-flash", + "gemini-3.5-flash", ), endpointCandidates: ["https://generativelanguage.googleapis.com"], icon: "gemini", @@ -284,7 +284,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [ apiFormat: "openai_responses", providerType: "codex_oauth", requiresOAuth: true, - modelRoutes: brandedRoutes("gpt-5.4", "gpt-5.4", "gpt-5.4-mini"), + modelRoutes: brandedRoutes("gpt-5.5", "gpt-5.5", "gpt-5.4-mini"), icon: "openai", iconColor: "#000000", }, @@ -327,7 +327,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [ baseUrl: "https://open.bigmodel.cn/api/anthropic", mode: "proxy", apiFormat: "anthropic", - modelRoutes: brandedRoutes("glm-5", "glm-5", "glm-5"), + modelRoutes: brandedRoutes("glm-5.1", "glm-5.1", "glm-5.1"), icon: "zhipu", iconColor: "#0F62FE", }, @@ -339,7 +339,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [ baseUrl: "https://api.z.ai/api/anthropic", mode: "proxy", apiFormat: "anthropic", - modelRoutes: brandedRoutes("glm-5", "glm-5", "glm-5"), + modelRoutes: brandedRoutes("glm-5.1", "glm-5.1", "glm-5.1"), icon: "zhipu", iconColor: "#0F62FE", }, @@ -447,9 +447,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [ mode: "proxy", apiFormat: "anthropic", modelRoutes: brandedRoutes( - "ZhipuAI/GLM-5", - "ZhipuAI/GLM-5", - "ZhipuAI/GLM-5", + "ZhipuAI/GLM-5.1", + "ZhipuAI/GLM-5.1", + "ZhipuAI/GLM-5.1", ), icon: "modelscope", iconColor: "#624AFF", @@ -920,9 +920,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [ mode: "proxy", apiFormat: "anthropic", modelRoutes: brandedRoutes( - "zai-org/glm-5", - "zai-org/glm-5", - "zai-org/glm-5", + "zai-org/glm-5.1", + "zai-org/glm-5.1", + "zai-org/glm-5.1", ), endpointCandidates: ["https://api.novita.ai/anthropic"], icon: "novita", diff --git a/src/config/claudeProviderPresets.ts b/src/config/claudeProviderPresets.ts index f0f298daf..724f6fdab 100644 --- a/src/config/claudeProviderPresets.ts +++ b/src/config/claudeProviderPresets.ts @@ -202,10 +202,10 @@ export const providerPresets: ProviderPreset[] = [ env: { ANTHROPIC_BASE_URL: "https://generativelanguage.googleapis.com", ANTHROPIC_API_KEY: "", - ANTHROPIC_MODEL: "gemini-3.1-pro", - ANTHROPIC_DEFAULT_HAIKU_MODEL: "gemini-3-flash", - ANTHROPIC_DEFAULT_SONNET_MODEL: "gemini-3.1-pro", - ANTHROPIC_DEFAULT_OPUS_MODEL: "gemini-3.1-pro", + ANTHROPIC_MODEL: "gemini-3.5-flash", + ANTHROPIC_DEFAULT_HAIKU_MODEL: "gemini-3.5-flash", + ANTHROPIC_DEFAULT_SONNET_MODEL: "gemini-3.5-flash", + ANTHROPIC_DEFAULT_OPUS_MODEL: "gemini-3.5-flash", }, }, category: "third_party", @@ -260,10 +260,10 @@ export const providerPresets: ProviderPreset[] = [ env: { ANTHROPIC_BASE_URL: "https://open.bigmodel.cn/api/anthropic", ANTHROPIC_AUTH_TOKEN: "", - ANTHROPIC_MODEL: "glm-5", - ANTHROPIC_DEFAULT_HAIKU_MODEL: "glm-5", - ANTHROPIC_DEFAULT_SONNET_MODEL: "glm-5", - ANTHROPIC_DEFAULT_OPUS_MODEL: "glm-5", + ANTHROPIC_MODEL: "glm-5.1", + ANTHROPIC_DEFAULT_HAIKU_MODEL: "glm-5.1", + ANTHROPIC_DEFAULT_SONNET_MODEL: "glm-5.1", + ANTHROPIC_DEFAULT_OPUS_MODEL: "glm-5.1", }, }, category: "cn_official", @@ -278,10 +278,10 @@ export const providerPresets: ProviderPreset[] = [ env: { ANTHROPIC_BASE_URL: "https://api.z.ai/api/anthropic", ANTHROPIC_AUTH_TOKEN: "", - ANTHROPIC_MODEL: "glm-5", - ANTHROPIC_DEFAULT_HAIKU_MODEL: "glm-5", - ANTHROPIC_DEFAULT_SONNET_MODEL: "glm-5", - ANTHROPIC_DEFAULT_OPUS_MODEL: "glm-5", + ANTHROPIC_MODEL: "glm-5.1", + ANTHROPIC_DEFAULT_HAIKU_MODEL: "glm-5.1", + ANTHROPIC_DEFAULT_SONNET_MODEL: "glm-5.1", + ANTHROPIC_DEFAULT_OPUS_MODEL: "glm-5.1", }, }, category: "cn_official", @@ -410,10 +410,10 @@ export const providerPresets: ProviderPreset[] = [ env: { ANTHROPIC_BASE_URL: "https://api-inference.modelscope.cn", ANTHROPIC_AUTH_TOKEN: "", - ANTHROPIC_MODEL: "ZhipuAI/GLM-5", - ANTHROPIC_DEFAULT_HAIKU_MODEL: "ZhipuAI/GLM-5", - ANTHROPIC_DEFAULT_SONNET_MODEL: "ZhipuAI/GLM-5", - ANTHROPIC_DEFAULT_OPUS_MODEL: "ZhipuAI/GLM-5", + ANTHROPIC_MODEL: "ZhipuAI/GLM-5.1", + ANTHROPIC_DEFAULT_HAIKU_MODEL: "ZhipuAI/GLM-5.1", + ANTHROPIC_DEFAULT_SONNET_MODEL: "ZhipuAI/GLM-5.1", + ANTHROPIC_DEFAULT_OPUS_MODEL: "ZhipuAI/GLM-5.1", }, }, category: "aggregator", @@ -1008,10 +1008,10 @@ export const providerPresets: ProviderPreset[] = [ env: { ANTHROPIC_BASE_URL: "https://api.novita.ai/anthropic", ANTHROPIC_AUTH_TOKEN: "", - ANTHROPIC_MODEL: "zai-org/glm-5", - ANTHROPIC_DEFAULT_HAIKU_MODEL: "zai-org/glm-5", - ANTHROPIC_DEFAULT_SONNET_MODEL: "zai-org/glm-5", - ANTHROPIC_DEFAULT_OPUS_MODEL: "zai-org/glm-5", + ANTHROPIC_MODEL: "zai-org/glm-5.1", + ANTHROPIC_DEFAULT_HAIKU_MODEL: "zai-org/glm-5.1", + ANTHROPIC_DEFAULT_SONNET_MODEL: "zai-org/glm-5.1", + ANTHROPIC_DEFAULT_OPUS_MODEL: "zai-org/glm-5.1", }, }, category: "aggregator", @@ -1046,10 +1046,10 @@ export const providerPresets: ProviderPreset[] = [ // base_url 由代理后端强制重写为 chatgpt.com/backend-api/codex // 用户无需配置 ANTHROPIC_BASE_URL: "https://chatgpt.com/backend-api/codex", - ANTHROPIC_MODEL: "gpt-5.4", + ANTHROPIC_MODEL: "gpt-5.5", ANTHROPIC_DEFAULT_HAIKU_MODEL: "gpt-5.4-mini", - ANTHROPIC_DEFAULT_SONNET_MODEL: "gpt-5.4", - ANTHROPIC_DEFAULT_OPUS_MODEL: "gpt-5.4", + ANTHROPIC_DEFAULT_SONNET_MODEL: "gpt-5.5", + ANTHROPIC_DEFAULT_OPUS_MODEL: "gpt-5.5", }, }, category: "third_party", diff --git a/src/config/codexProviderPresets.ts b/src/config/codexProviderPresets.ts index f1fa0dfe3..adb289ff5 100644 --- a/src/config/codexProviderPresets.ts +++ b/src/config/codexProviderPresets.ts @@ -52,7 +52,7 @@ export function generateThirdPartyAuth(apiKey: string): Record { export function generateThirdPartyConfig( providerName: string, baseUrl: string, - modelName = "gpt-5.4", + modelName = "gpt-5.5", ): string { const tomlString = (value: string) => JSON.stringify(value); @@ -223,7 +223,7 @@ export const codexProviderPresets: CodexProviderPreset[] = [ isOfficial: true, auth: generateThirdPartyAuth(""), config: `model_provider = "custom" -model = "gpt-5.4" +model = "gpt-5.5" model_reasoning_effort = "high" disable_response_storage = true @@ -287,12 +287,12 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "zhipu_glm", "https://open.bigmodel.cn/api/paas/v4", - "glm-5", + "glm-5.1", ), endpointCandidates: ["https://open.bigmodel.cn/api/paas/v4"], apiFormat: "openai_chat", modelCatalog: modelCatalog([ - { model: "glm-5", displayName: "GLM-5", contextWindow: 200000 }, + { model: "glm-5.1", displayName: "GLM-5.1", contextWindow: 200000 }, ]), codexChatReasoning: { supportsThinking: true, @@ -313,12 +313,12 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "zhipu_glm_en", "https://api.z.ai/api/paas/v4", - "glm-5", + "glm-5.1", ), endpointCandidates: ["https://api.z.ai/api/paas/v4"], apiFormat: "openai_chat", modelCatalog: modelCatalog([ - { model: "glm-5", displayName: "GLM-5", contextWindow: 200000 }, + { model: "glm-5.1", displayName: "GLM-5.1", contextWindow: 200000 }, ]), codexChatReasoning: { supportsThinking: true, @@ -476,14 +476,14 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "modelscope", "https://api-inference.modelscope.cn/v1", - "ZhipuAI/GLM-5", + "ZhipuAI/GLM-5.1", ), endpointCandidates: ["https://api-inference.modelscope.cn/v1"], apiFormat: "openai_chat", modelCatalog: modelCatalog([ { - model: "ZhipuAI/GLM-5", - displayName: "ZhipuAI / GLM-5", + model: "ZhipuAI/GLM-5.1", + displayName: "ZhipuAI / GLM-5.1", contextWindow: 200000, }, ]), @@ -732,12 +732,16 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "novita", "https://api.novita.ai/openai/v1", - "zai-org/glm-5", + "zai-org/glm-5.1", ), endpointCandidates: ["https://api.novita.ai/openai/v1"], apiFormat: "openai_chat", modelCatalog: modelCatalog([ - { model: "zai-org/glm-5", displayName: "GLM-5", contextWindow: 202800 }, + { + model: "zai-org/glm-5.1", + displayName: "GLM-5.1", + contextWindow: 202800, + }, ]), codexChatReasoning: { supportsThinking: true, @@ -788,7 +792,7 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "aihubmix", "https://aihubmix.com/v1", - "gpt-5.4", + "gpt-5.5", ), endpointCandidates: [ "https://aihubmix.com/v1", @@ -803,7 +807,7 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "dmxapi", "https://www.dmxapi.cn/v1", - "gpt-5.4", + "gpt-5.5", ), endpointCandidates: ["https://www.dmxapi.cn/v1"], isPartner: true, // 合作伙伴 @@ -818,7 +822,7 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "packycode", "https://www.packyapi.com/v1", - "gpt-5.4", + "gpt-5.5", ), endpointCandidates: [ "https://www.packyapi.com/v1", @@ -976,7 +980,7 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "cubence", "https://api.cubence.com/v1", - "gpt-5.4", + "gpt-5.5", ), endpointCandidates: [ "https://api.cubence.com/v1", @@ -999,7 +1003,7 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "aigocode", "https://api.aigocode.com", - "gpt-5.4", + "gpt-5.5", ), endpointCandidates: ["https://api.aigocode.com"], isPartner: true, // 合作伙伴 @@ -1015,7 +1019,7 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "rightcode", "https://right.codes/codex/v1", - "gpt-5.4", + "gpt-5.5", ), category: "third_party", isPartner: true, @@ -1031,7 +1035,7 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "aicodemirror", "https://api.aicodemirror.com/api/codex/backend-api/codex", - "gpt-5.4", + "gpt-5.5", ), endpointCandidates: [ "https://api.aicodemirror.com/api/codex/backend-api/codex", @@ -1050,7 +1054,7 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "crazyrouter", "https://cn.crazyrouter.com/v1", - "gpt-5.4", + "gpt-5.5", ), endpointCandidates: ["https://cn.crazyrouter.com/v1"], isPartner: true, @@ -1066,7 +1070,7 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "sssaicode", "https://node-hk.sssaicode.com/api/v1", - "gpt-5.4", + "gpt-5.5", ), endpointCandidates: [ "https://node-hk.sssaicode.com/api/v1", @@ -1089,7 +1093,7 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "compshare", "https://api.modelverse.cn/v1", - "gpt-5.4", + "gpt-5.5", ), endpointCandidates: ["https://api.modelverse.cn/v1"], category: "aggregator", @@ -1108,7 +1112,7 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "compshare_coding", "https://cp.compshare.cn/v1", - "gpt-5.4", + "gpt-5.5", ), endpointCandidates: ["https://cp.compshare.cn/v1"], category: "aggregator", @@ -1125,7 +1129,7 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "micu", "https://www.micuapi.ai/v1", - "gpt-5.4", + "gpt-5.5", ), endpointCandidates: ["https://www.micuapi.ai/v1"], category: "third_party", @@ -1142,7 +1146,7 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "ctok", "https://api.ctok.ai/v1", - "gpt-5.4", + "gpt-5.5", ), endpointCandidates: ["https://api.ctok.ai/v1"], category: "third_party", @@ -1159,7 +1163,7 @@ requires_openai_auth = true`, OPENAI_API_KEY: "", }, config: `model_provider = "custom" -model = "gpt-5.4" +model = "gpt-5.5" model_reasoning_effort = "high" disable_response_storage = true personality = "pragmatic" @@ -1185,7 +1189,7 @@ model_auto_compact_token_limit = 9000000`, config: generateThirdPartyConfig( "lemondata", "https://api.lemondata.cc/v1", - "gpt-5.4", + "gpt-5.5", ), endpointCandidates: ["https://api.lemondata.cc/v1"], isPartner: true, @@ -1200,7 +1204,7 @@ model_auto_compact_token_limit = 9000000`, OPENAI_API_KEY: "", }, config: `model_provider = "custom" -model = "gpt-5.4" +model = "gpt-5.5" model_reasoning_effort = "medium" disable_response_storage = true @@ -1221,7 +1225,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`, config: generateThirdPartyConfig( "openrouter", "https://openrouter.ai/api/v1", - "gpt-5.4", + "gpt-5.5", ), category: "aggregator", icon: "openrouter", diff --git a/src/config/codexTemplates.ts b/src/config/codexTemplates.ts index b697c544d..42bf0c962 100644 --- a/src/config/codexTemplates.ts +++ b/src/config/codexTemplates.ts @@ -14,7 +14,7 @@ export interface CodexTemplate { */ export function getCodexCustomTemplate(): CodexTemplate { const config = `model_provider = "custom" -model = "gpt-5.4" +model = "gpt-5.5" model_reasoning_effort = "high" disable_response_storage = true diff --git a/src/config/geminiProviderPresets.ts b/src/config/geminiProviderPresets.ts index 8ace7922e..18d4147de 100644 --- a/src/config/geminiProviderPresets.ts +++ b/src/config/geminiProviderPresets.ts @@ -58,11 +58,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ settingsConfig: { env: { GOOGLE_GEMINI_BASE_URL: "https://router.shengsuanyun.com/api", - GEMINI_MODEL: "google/gemini-3.1-pro-preview", + GEMINI_MODEL: "google/gemini-3.5-flash", }, }, baseURL: "https://router.shengsuanyun.com/api", - model: "google/gemini-3.1-pro-preview", + model: "google/gemini-3.5-flash", description: "Shengsuanyun", category: "aggregator", isPartner: true, @@ -76,11 +76,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ settingsConfig: { env: { GOOGLE_GEMINI_BASE_URL: "https://www.packyapi.com", - GEMINI_MODEL: "gemini-3.1-pro", + GEMINI_MODEL: "gemini-3.5-flash", }, }, baseURL: "https://www.packyapi.com", - model: "gemini-3.1-pro", + model: "gemini-3.5-flash", description: "PackyCode", category: "third_party", isPartner: true, @@ -99,11 +99,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ env: { GOOGLE_GEMINI_BASE_URL: "https://api.apikey.fun", GEMINI_API_KEY: "", - GEMINI_MODEL: "gemini-3-pro-preview", + GEMINI_MODEL: "gemini-3.5-flash", }, }, baseURL: "https://api.apikey.fun", - model: "gemini-3-pro-preview", + model: "gemini-3.5-flash", description: "APIKEY.FUN", category: "third_party", isPartner: true, @@ -119,11 +119,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ env: { GOOGLE_GEMINI_BASE_URL: "https://apinebula.com", GEMINI_API_KEY: "", - GEMINI_MODEL: "gemini-3-pro-preview", + GEMINI_MODEL: "gemini-3.5-flash", }, }, baseURL: "https://apinebula.com", - model: "gemini-3-pro-preview", + model: "gemini-3.5-flash", description: "APINebula", category: "third_party", isPartner: true, @@ -139,11 +139,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ env: { GOOGLE_GEMINI_BASE_URL: "https://sudocode.us", GEMINI_API_KEY: "", - GEMINI_MODEL: "gemini-3.1-flash-lite-preview", + GEMINI_MODEL: "gemini-3.1-flash-lite", }, }, baseURL: "https://sudocode.us", - model: "gemini-3.1-flash-lite-preview", + model: "gemini-3.1-flash-lite", description: "SudoCode", category: "third_party", isPartner: true, @@ -158,11 +158,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ settingsConfig: { env: { GOOGLE_GEMINI_BASE_URL: "https://api.cubence.com", - GEMINI_MODEL: "gemini-3.1-pro", + GEMINI_MODEL: "gemini-3.5-flash", }, }, baseURL: "https://api.cubence.com", - model: "gemini-3.1-pro", + model: "gemini-3.5-flash", description: "Cubence", category: "third_party", isPartner: true, @@ -183,11 +183,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ settingsConfig: { env: { GOOGLE_GEMINI_BASE_URL: "https://api.aigocode.com", - GEMINI_MODEL: "gemini-3.1-pro", + GEMINI_MODEL: "gemini-3.5-flash", }, }, baseURL: "https://api.aigocode.com", - model: "gemini-3.1-pro", + model: "gemini-3.5-flash", description: "AIGoCode", category: "third_party", isPartner: true, @@ -203,11 +203,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ settingsConfig: { env: { GOOGLE_GEMINI_BASE_URL: "https://api.aicodemirror.com/api/gemini", - GEMINI_MODEL: "gemini-3.1-pro", + GEMINI_MODEL: "gemini-3.5-flash", }, }, baseURL: "https://api.aicodemirror.com/api/gemini", - model: "gemini-3.1-pro", + model: "gemini-3.5-flash", description: "AICodeMirror", category: "third_party", isPartner: true, @@ -226,11 +226,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ settingsConfig: { env: { GOOGLE_GEMINI_BASE_URL: "https://cn.crazyrouter.com", - GEMINI_MODEL: "gemini-3.1-pro", + GEMINI_MODEL: "gemini-3.5-flash", }, }, baseURL: "https://cn.crazyrouter.com", - model: "gemini-3.1-pro", + model: "gemini-3.5-flash", description: "CrazyRouter", category: "third_party", isPartner: true, @@ -246,11 +246,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ settingsConfig: { env: { GOOGLE_GEMINI_BASE_URL: "https://node-hk.sssaicode.com/api", - GEMINI_MODEL: "gemini-3.1-pro", + GEMINI_MODEL: "gemini-3.5-flash", }, }, baseURL: "https://node-hk.sssaicode.com/api", - model: "gemini-3.1-pro", + model: "gemini-3.5-flash", description: "SSSAiCode", category: "third_party", isPartner: true, @@ -270,11 +270,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ settingsConfig: { env: { GOOGLE_GEMINI_BASE_URL: "https://api.ctok.ai/v1beta", - GEMINI_MODEL: "gemini-3.1-pro", + GEMINI_MODEL: "gemini-3.5-flash", }, }, baseURL: "https://api.ctok.ai/v1beta", - model: "gemini-3.1-pro", + model: "gemini-3.5-flash", description: "CTok", category: "third_party", isPartner: true, @@ -291,7 +291,7 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ env: { GOOGLE_GEMINI_BASE_URL: "https://e-flowcode.cc", GEMINI_API_KEY: "", - GEMINI_MODEL: "gemini-3.1-pro-preview", + GEMINI_MODEL: "gemini-3.5-flash", }, config: { general: { @@ -311,7 +311,7 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ }, }, baseURL: "https://e-flowcode.cc", - model: "gemini-3.1-pro-preview", + model: "gemini-3.5-flash", description: "E-FlowCode", category: "third_party", endpointCandidates: ["https://e-flowcode.cc"], @@ -325,11 +325,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ settingsConfig: { env: { GOOGLE_GEMINI_BASE_URL: "https://api.lemondata.cc", - GEMINI_MODEL: "gemini-3.1-pro", + GEMINI_MODEL: "gemini-3.5-flash", }, }, baseURL: "https://api.lemondata.cc", - model: "gemini-3.1-pro", + model: "gemini-3.5-flash", description: "LemonData", category: "third_party", isPartner: true, @@ -344,11 +344,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ settingsConfig: { env: { GOOGLE_GEMINI_BASE_URL: "https://openrouter.ai/api", - GEMINI_MODEL: "gemini-3.1-pro", + GEMINI_MODEL: "gemini-3.5-flash", }, }, baseURL: "https://openrouter.ai/api", - model: "gemini-3.1-pro", + model: "gemini-3.5-flash", description: "OpenRouter", category: "aggregator", icon: "openrouter", @@ -361,11 +361,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ settingsConfig: { env: { GOOGLE_GEMINI_BASE_URL: "https://api.therouter.ai", - GEMINI_MODEL: "gemini-3.1-pro", + GEMINI_MODEL: "gemini-3.5-flash", }, }, baseURL: "https://api.therouter.ai", - model: "gemini-3.1-pro", + model: "gemini-3.5-flash", description: "TheRouter", category: "aggregator", endpointCandidates: ["https://api.therouter.ai"], @@ -376,10 +376,10 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ settingsConfig: { env: { GOOGLE_GEMINI_BASE_URL: "", - GEMINI_MODEL: "gemini-3.1-pro", + GEMINI_MODEL: "gemini-3.5-flash", }, }, - model: "gemini-3.1-pro", + model: "gemini-3.5-flash", description: "自定义 Gemini API 端点", category: "custom", }, diff --git a/src/config/hermesProviderPresets.ts b/src/config/hermesProviderPresets.ts index 4cd7af18c..fd5bf26e6 100644 --- a/src/config/hermesProviderPresets.ts +++ b/src/config/hermesProviderPresets.ts @@ -138,7 +138,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ base_url: "https://router.shengsuanyun.com/api/v1", api_key: "", api_mode: "chat_completions", - models: [{ id: "openai/gpt-5.4", name: "GPT-5.4" }], + models: [{ id: "openai/gpt-5.5", name: "GPT-5.5" }], }, category: "aggregator", isPartner: true, @@ -265,13 +265,13 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ context_length: 200000, }, { - id: "openai/gpt-5.4", - name: "GPT-5.4", + id: "openai/gpt-5.5", + name: "GPT-5.5", context_length: 400000, }, { - id: "google/gemini-3-pro", - name: "Gemini 3 Pro", + id: "google/gemini-3.5-flash", + name: "Gemini 3.5 Flash", context_length: 1000000, }, ], @@ -396,13 +396,13 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ base_url: "https://open.bigmodel.cn/api/paas/v4", api_key: "", api_mode: "chat_completions", - models: [{ id: "glm-5", name: "GLM-5" }], + models: [{ id: "glm-5.1", name: "GLM-5.1" }], }, category: "cn_official", icon: "zhipu", iconColor: "#0F62FE", suggestedDefaults: { - model: { default: "glm-5", provider: "zhipu_glm" }, + model: { default: "glm-5.1", provider: "zhipu_glm" }, }, }, { @@ -414,13 +414,13 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ base_url: "https://api.z.ai/api/paas/v4", api_key: "", api_mode: "chat_completions", - models: [{ id: "glm-5", name: "GLM-5" }], + models: [{ id: "glm-5.1", name: "GLM-5.1" }], }, category: "cn_official", icon: "zhipu", iconColor: "#0F62FE", suggestedDefaults: { - model: { default: "glm-5", provider: "zhipu_glm_en" }, + model: { default: "glm-5.1", provider: "zhipu_glm_en" }, }, }, { @@ -523,13 +523,13 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ base_url: "https://api-inference.modelscope.cn/v1", api_key: "", api_mode: "chat_completions", - models: [{ id: "ZhipuAI/GLM-5", name: "ZhipuAI / GLM-5" }], + models: [{ id: "ZhipuAI/GLM-5.1", name: "ZhipuAI / GLM-5.1" }], }, category: "aggregator", icon: "modelscope", iconColor: "#624AFF", suggestedDefaults: { - model: { default: "ZhipuAI/GLM-5", provider: "modelscope" }, + model: { default: "ZhipuAI/GLM-5.1", provider: "modelscope" }, }, }, { @@ -645,13 +645,13 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ base_url: "https://aihubmix.com/v1", api_key: "", api_mode: "chat_completions", - models: [{ id: "gpt-5.4", name: "GPT-5.4" }], + models: [{ id: "gpt-5.5", name: "GPT-5.5" }], }, category: "aggregator", icon: "aihubmix", iconColor: "#006FFB", suggestedDefaults: { - model: { default: "gpt-5.4", provider: "aihubmix" }, + model: { default: "gpt-5.5", provider: "aihubmix" }, }, }, { @@ -714,13 +714,13 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ base_url: "https://www.dmxapi.cn/v1", api_key: "", api_mode: "chat_completions", - models: [{ id: "gpt-5.4", name: "GPT-5.4" }], + models: [{ id: "gpt-5.5", name: "GPT-5.5" }], }, category: "aggregator", isPartner: true, partnerPromotionKey: "dmxapi", suggestedDefaults: { - model: { default: "gpt-5.4", provider: "dmxapi" }, + model: { default: "gpt-5.5", provider: "dmxapi" }, }, }, { @@ -1068,7 +1068,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ base_url: "https://api.modelverse.cn/v1", api_key: "", api_mode: "chat_completions", - models: [{ id: "gpt-5.4", name: "GPT-5.4" }], + models: [{ id: "gpt-5.5", name: "GPT-5.5" }], }, category: "aggregator", isPartner: true, @@ -1076,7 +1076,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ icon: "ucloud", iconColor: "#000000", suggestedDefaults: { - model: { default: "gpt-5.4", provider: "compshare" }, + model: { default: "gpt-5.5", provider: "compshare" }, }, }, { @@ -1090,7 +1090,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ base_url: "https://cp.compshare.cn/v1", api_key: "", api_mode: "chat_completions", - models: [{ id: "gpt-5.4", name: "GPT-5.4" }], + models: [{ id: "gpt-5.5", name: "GPT-5.5" }], }, category: "aggregator", isPartner: true, @@ -1098,7 +1098,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ icon: "ucloud", iconColor: "#000000", suggestedDefaults: { - model: { default: "gpt-5.4", provider: "compshare_coding" }, + model: { default: "gpt-5.5", provider: "compshare_coding" }, }, }, { @@ -1180,14 +1180,14 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ base_url: "https://api.lemondata.cc/v1", api_key: "", api_mode: "chat_completions", - models: [{ id: "gpt-5.4", name: "GPT-5.4" }], + models: [{ id: "gpt-5.5", name: "GPT-5.5" }], }, category: "third_party", isPartner: true, partnerPromotionKey: "lemondata", icon: "lemondata", suggestedDefaults: { - model: { default: "gpt-5.4", provider: "lemondata" }, + model: { default: "gpt-5.5", provider: "lemondata" }, }, }, { @@ -1200,7 +1200,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ api_key: "", api_mode: "chat_completions", models: [ - { id: "openai/gpt-5.4", name: "GPT-5.4" }, + { id: "openai/gpt-5.5", name: "GPT-5.5" }, { id: "openai/gpt-5.4-mini", name: "GPT-5.4 mini" }, { id: "openai/gpt-5.4-nano", name: "GPT-5.4 nano" }, ], @@ -1208,7 +1208,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ category: "aggregator", suggestedDefaults: { model: { - default: "openai/gpt-5.4", + default: "openai/gpt-5.5", provider: "therouter", }, }, @@ -1222,13 +1222,13 @@ export const hermesProviderPresets: HermesProviderPreset[] = [ base_url: "https://api.novita.ai/v3/openai", api_key: "", api_mode: "chat_completions", - models: [{ id: "zai-org/glm-5", name: "Zai-Org / GLM-5" }], + models: [{ id: "zai-org/glm-5.1", name: "Zai-Org / GLM-5.1" }], }, category: "aggregator", icon: "novita", iconColor: "#000000", suggestedDefaults: { - model: { default: "zai-org/glm-5", provider: "novita" }, + model: { default: "zai-org/glm-5.1", provider: "novita" }, }, }, { diff --git a/src/config/openclawProviderPresets.ts b/src/config/openclawProviderPresets.ts index a1f09a6f9..1b9b13de2 100644 --- a/src/config/openclawProviderPresets.ts +++ b/src/config/openclawProviderPresets.ts @@ -311,8 +311,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ api: "openai-completions", models: [ { - id: "glm-5", - name: "GLM-5", + id: "glm-5.1", + name: "GLM-5.1", contextWindow: 128000, cost: { input: 0.001, output: 0.001 }, }, @@ -335,8 +335,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ }, }, suggestedDefaults: { - model: { primary: "zhipu/glm-5" }, - modelCatalog: { "zhipu/glm-5": { alias: "GLM" } }, + model: { primary: "zhipu/glm-5.1" }, + modelCatalog: { "zhipu/glm-5.1": { alias: "GLM" } }, }, }, { @@ -349,8 +349,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ api: "openai-completions", models: [ { - id: "glm-5", - name: "GLM-5", + id: "glm-5.1", + name: "GLM-5.1", contextWindow: 128000, cost: { input: 0.001, output: 0.001 }, }, @@ -373,8 +373,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ }, }, suggestedDefaults: { - model: { primary: "zhipu-en/glm-5" }, - modelCatalog: { "zhipu-en/glm-5": { alias: "GLM" } }, + model: { primary: "zhipu-en/glm-5.1" }, + modelCatalog: { "zhipu-en/glm-5.1": { alias: "GLM" } }, }, }, { @@ -1112,10 +1112,10 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ cost: { input: 1.75, output: 14, cacheRead: 0.175 }, }, { - id: "google/gemini-3-flash-preview", - name: "Gemini 3 Flash Preview", + id: "google/gemini-3.5-flash", + name: "Gemini 3.5 Flash", contextWindow: 1000000, - cost: { input: 0.5, output: 3, cacheRead: 0.05 }, + cost: { input: 1.5, output: 9, cacheRead: 0.15 }, }, { id: "qwen/qwen3-coder-480b", @@ -1138,13 +1138,13 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ primary: "therouter/anthropic/claude-sonnet-4.6", fallbacks: [ "therouter/openai/gpt-5.2", - "therouter/google/gemini-3-flash-preview", + "therouter/google/gemini-3.5-flash", ], }, modelCatalog: { "therouter/anthropic/claude-sonnet-4.6": { alias: "Sonnet" }, "therouter/openai/gpt-5.2": { alias: "GPT-5.2" }, - "therouter/google/gemini-3-flash-preview": { alias: "Gemini Flash" }, + "therouter/google/gemini-3.5-flash": { alias: "Gemini Flash" }, "therouter/openai/gpt-5.3-codex": { alias: "Codex" }, "therouter/qwen/qwen3-coder-480b": { alias: "Qwen Coder" }, }, @@ -1160,8 +1160,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ api: "openai-completions", models: [ { - id: "ZhipuAI/GLM-5", - name: "GLM-5", + id: "ZhipuAI/GLM-5.1", + name: "GLM-5.1", contextWindow: 128000, cost: { input: 0.001, output: 0.001 }, }, @@ -1184,8 +1184,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ }, }, suggestedDefaults: { - model: { primary: "modelscope/ZhipuAI/GLM-5" }, - modelCatalog: { "modelscope/ZhipuAI/GLM-5": { alias: "GLM" } }, + model: { primary: "modelscope/ZhipuAI/GLM-5.1" }, + modelCatalog: { "modelscope/ZhipuAI/GLM-5.1": { alias: "GLM" } }, }, }, { @@ -1270,8 +1270,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ api: "openai-completions", models: [ { - id: "zai-org/glm-5", - name: "GLM-5", + id: "zai-org/glm-5.1", + name: "GLM-5.1", contextWindow: 202800, cost: { input: 1, output: 3.2, cacheRead: 0.2 }, }, @@ -1288,9 +1288,9 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ }, }, suggestedDefaults: { - model: { primary: "novita/zai-org/glm-5" }, + model: { primary: "novita/zai-org/glm-5.1" }, modelCatalog: { - "novita/zai-org/glm-5": { alias: "GLM-5" }, + "novita/zai-org/glm-5.1": { alias: "GLM-5.1" }, }, }, }, @@ -2026,8 +2026,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ name: "gpt-5.3-codex", }, { - id: "gpt-5.4", - name: "gpt-5.4", + id: "gpt-5.5", + name: "gpt-5.5", }, { id: "gpt-5.2-codex", @@ -2052,11 +2052,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ suggestedDefaults: { model: { primary: "eflowcode/gpt-5.3-codex", - fallbacks: ["eflowcode/gpt-5.4", "eflowcode/gpt-5.2-codex"], + fallbacks: ["eflowcode/gpt-5.5", "eflowcode/gpt-5.2-codex"], }, modelCatalog: { "eflowcode/gpt-5.3-codex": { alias: "gpt-5.3-codex" }, - "eflowcode/gpt-5.4": { alias: "gpt-5.4" }, + "eflowcode/gpt-5.5": { alias: "gpt-5.5" }, "eflowcode/gpt-5.2-codex": { alias: "gpt-5.2-codex" }, "eflowcode/gpt-5.2": { alias: "gpt-5.2" }, }, @@ -2072,8 +2072,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ api: "openai-completions", models: [ { - id: "gpt-5.4", - name: "GPT-5.4", + id: "gpt-5.5", + name: "GPT-5.5", contextWindow: 400000, }, ], @@ -2091,10 +2091,10 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ }, suggestedDefaults: { model: { - primary: "lemondata/gpt-5.4", + primary: "lemondata/gpt-5.5", }, modelCatalog: { - "lemondata/gpt-5.4": { alias: "GPT-5.4" }, + "lemondata/gpt-5.5": { alias: "GPT-5.5" }, }, }, }, diff --git a/src/config/opencodeProviderPresets.ts b/src/config/opencodeProviderPresets.ts index e2fe5b5c2..23f49c4a6 100644 --- a/src/config/opencodeProviderPresets.ts +++ b/src/config/opencodeProviderPresets.ts @@ -49,8 +49,8 @@ export const OPENCODE_PRESET_MODEL_VARIANTS: Record< modalities: { input: ["text"], output: ["text"] }, }, { - id: "glm-5", - name: "GLM 5", + id: "glm-5.1", + name: "GLM 5.1", contextLimit: 204800, outputLimit: 131072, modalities: { input: ["text"], output: ["text"] }, @@ -91,8 +91,8 @@ export const OPENCODE_PRESET_MODEL_VARIANTS: Record< }, }, { - id: "gemini-3-flash-preview", - name: "Gemini 3 Flash Preview", + id: "gemini-3.5-flash", + name: "Gemini 3.5 Flash", contextLimit: 1048576, outputLimit: 65536, modalities: { @@ -114,29 +114,11 @@ export const OPENCODE_PRESET_MODEL_VARIANTS: Record< }, }, }, - { - id: "gemini-3-pro-preview", - name: "Gemini 3 Pro Preview", - contextLimit: 1048576, - outputLimit: 65536, - modalities: { - input: ["text", "image", "pdf", "video", "audio"], - output: ["text"], - }, - variants: { - low: { - thinkingConfig: { includeThoughts: true, thinkingLevel: "low" }, - }, - high: { - thinkingConfig: { includeThoughts: true, thinkingLevel: "high" }, - }, - }, - }, ], "@ai-sdk/openai": [ { - id: "gpt-5.4", - name: "GPT-5.4", + id: "gpt-5.5", + name: "GPT-5.5", contextLimit: 400000, outputLimit: 128000, modalities: { input: ["text", "image"], output: ["text"] }, @@ -465,7 +447,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [ setCacheKey: true, }, models: { - "glm-5": { name: "GLM-5" }, + "glm-5.1": { name: "GLM-5.1" }, }, }, category: "cn_official", @@ -498,7 +480,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [ setCacheKey: true, }, models: { - "glm-5": { name: "GLM-5" }, + "glm-5.1": { name: "GLM-5.1" }, }, }, category: "cn_official", @@ -722,7 +704,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [ setCacheKey: true, }, models: { - "ZhipuAI/GLM-5": { name: "GLM-5" }, + "ZhipuAI/GLM-5.1": { name: "GLM-5.1" }, }, }, category: "aggregator", @@ -1079,8 +1061,8 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [ "anthropic/claude-sonnet-4.6": { name: "Claude Sonnet 4.6" }, "openai/gpt-5.3-codex": { name: "GPT-5.3 Codex" }, "openai/gpt-5.2": { name: "GPT-5.2" }, - "google/gemini-3-flash-preview": { - name: "Gemini 3 Flash Preview", + "google/gemini-3.5-flash": { + name: "Gemini 3.5 Flash", }, "qwen/qwen3-coder-480b": { name: "Qwen3 Coder 480B" }, }, @@ -1107,7 +1089,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [ setCacheKey: true, }, models: { - "zai-org/glm-5": { name: "GLM-5" }, + "zai-org/glm-5.1": { name: "GLM-5.1" }, }, }, category: "aggregator", @@ -1393,7 +1375,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [ setCacheKey: true, }, models: { - "gpt-5.4": { name: "GPT-5.4" }, + "gpt-5.5": { name: "GPT-5.5" }, }, }, category: "third_party", @@ -1662,7 +1644,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [ setCacheKey: true, }, models: { - "gpt-5.4": { name: "GPT-5.4" }, + "gpt-5.5": { name: "GPT-5.5" }, }, }, category: "third_party", diff --git a/src/config/universalProviderPresets.ts b/src/config/universalProviderPresets.ts index 3c8d31b31..1585c87fc 100644 --- a/src/config/universalProviderPresets.ts +++ b/src/config/universalProviderPresets.ts @@ -47,11 +47,11 @@ const NEWAPI_DEFAULT_MODELS: UniversalProviderModels = { opusModel: "claude-opus-4-8", }, codex: { - model: "gpt-5.4", + model: "gpt-5.5", reasoningEffort: "high", }, gemini: { - model: "gemini-3.1-pro", + model: "gemini-3.5-flash", }, }; diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 4c59b86d0..1bc58d4cf 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -2617,14 +2617,14 @@ "writing": "Writing" }, "categoryTooltip": { - "visualEngineering": "Frontend and visual engineering category for UI/UX design, styling, animation and interface implementation. Defaults to Gemini 3 Pro model.", + "visualEngineering": "Frontend and visual engineering category for UI/UX design, styling, animation and interface implementation. Defaults to Gemini 3.5 Flash model.", "ultrabrain": "Deep logical reasoning category for complex architectural decisions requiring extensive analysis. Defaults to GPT-5.3 Codex ultra-high reasoning variant.", "deep": "Deep autonomous problem-solving category with goal-oriented execution. Conducts thorough research before action, suitable for difficult problems requiring deep understanding.", - "artistry": "Highly creative and artistic task category that inspires novel ideas and creative solutions. Defaults to Gemini 3 Pro max variant.", + "artistry": "Highly creative and artistic task category that inspires novel ideas and creative solutions. Defaults to Gemini 3.5 Flash high variant.", "quick": "Lightweight task category for single-file modifications, typo fixes, and simple adjustments. Defaults to Claude Haiku 4.5 fast model.", "unspecifiedLow": "Uncategorized low-effort task category for tasks that don't fit other categories with small workload. Defaults to Claude Sonnet 4.5.", "unspecifiedHigh": "Uncategorized high-effort task category for tasks that don't fit other categories with large workload. Defaults to Claude Opus 4.8 max variant.", - "writing": "Writing category for documentation, prose and technical writing. Defaults to Gemini 3 Flash fast generation model." + "writing": "Writing category for documentation, prose and technical writing. Defaults to Kimi K2.5 model." }, "slimAgentDesc": { "orchestrator": "Orchestrator", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index c3b248000..2847b2974 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -2617,14 +2617,14 @@ "writing": "ライティング" }, "categoryTooltip": { - "visualEngineering": "フロントエンドとビジュアルエンジニアリングカテゴリ。UI/UX デザイン、スタイリング、アニメーション、インターフェース実装に特化。デフォルトで Gemini 3 Pro モデルを使用。", + "visualEngineering": "フロントエンドとビジュアルエンジニアリングカテゴリ。UI/UX デザイン、スタイリング、アニメーション、インターフェース実装に特化。デフォルトで Gemini 3.5 Flash モデルを使用。", "ultrabrain": "ディープロジック推論カテゴリ。広範な分析が必要な複雑なアーキテクチャ決定に使用。デフォルトで GPT-5.3 Codex の超高推論バリアントを使用。", "deep": "ディープ自律問題解決カテゴリ。目標指向の実行で、行動前に徹底的な調査を実施。深い理解が必要な難問に適しています。", - "artistry": "高度にクリエイティブで芸術的なタスクカテゴリ。斬新なアイデアとクリエイティブなソリューションを促進。デフォルトで Gemini 3 Pro の max バリアントを使用。", + "artistry": "高度にクリエイティブで芸術的なタスクカテゴリ。斬新なアイデアとクリエイティブなソリューションを促進。デフォルトで Gemini 3.5 Flash の高推論バリアントを使用。", "quick": "軽量タスクカテゴリ。単一ファイルの修正、タイポ修正、簡単な調整などの些細な作業に使用。デフォルトで Claude Haiku 4.5 高速モデルを使用。", "unspecifiedLow": "未分類の低作業量タスクカテゴリ。他のカテゴリに該当せず作業量が小さいタスクに適用。デフォルトで Claude Sonnet 4.5 を使用。", "unspecifiedHigh": "未分類の高作業量タスクカテゴリ。他のカテゴリに該当せず作業量が大きいタスクに適用。デフォルトで Claude Opus 4.8 の max バリアントを使用。", - "writing": "ライティングカテゴリ。ドキュメント、散文、技術文書に特化。デフォルトで Gemini 3 Flash 高速生成モデルを使用。" + "writing": "ライティングカテゴリ。ドキュメント、散文、技術文書に特化。デフォルトで Kimi K2.5 モデルを使用。" }, "slimAgentDesc": { "orchestrator": "オーケストレーター", diff --git a/src/i18n/locales/zh-TW.json b/src/i18n/locales/zh-TW.json index ee3eb721e..8d06015e3 100644 --- a/src/i18n/locales/zh-TW.json +++ b/src/i18n/locales/zh-TW.json @@ -2563,14 +2563,14 @@ "writing": "寫作" }, "categoryTooltip": { - "visualEngineering": "前端與視覺工程類別,專注於 UI/UX 設計、樣式、動畫和介面實作,預設使用 Gemini 3 Pro 模型。", + "visualEngineering": "前端與視覺工程類別,專注於 UI/UX 設計、樣式、動畫和介面實作,預設使用 Gemini 3.5 Flash 模型。", "ultrabrain": "深度邏輯推理類別,用於需要廣泛分析的複雜架構決策,預設使用 GPT-5.3 Codex 的超高推理變體。", "deep": "深度自主問題解決類別,目標導向執行,行動前進行徹底研究,適用於需要深度理解的棘手問題。", - "artistry": "高度創意與藝術性任務類別,激發新穎想法和創造性解決方案,預設使用 Gemini 3 Pro 的最大變體。", + "artistry": "高度創意與藝術性任務類別,激發新穎想法和創造性解決方案,預設使用 Gemini 3.5 Flash 的高推理變體。", "quick": "輕量任務類別,用於單檔案修改、錯別字修復、簡單調整等瑣碎工作,預設使用 Claude Haiku 4.5 快速模型。", "unspecifiedLow": "未分類低工作量任務類別,適用於不適合其他類別且工作量較小的任務,預設使用 Claude Sonnet 4.5。", "unspecifiedHigh": "未分類高工作量任務類別,適用於不適合其他類別且工作量較大的任務,預設使用 Claude Opus 4.8 的最大變體。", - "writing": "寫作類別,專注於文件、散文和技術寫作,預設使用 Gemini 3 Flash 快速產生模型。" + "writing": "寫作類別,專注於文件、散文和技術寫作,預設使用 Kimi K2.5 模型。" }, "slimAgentDesc": { "orchestrator": "協調器", diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index c66fa3fe7..befba5daf 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -2617,14 +2617,14 @@ "writing": "写作" }, "categoryTooltip": { - "visualEngineering": "前端与视觉工程类别,专注于 UI/UX 设计、样式、动画和界面实现,默认使用 Gemini 3 Pro 模型。", + "visualEngineering": "前端与视觉工程类别,专注于 UI/UX 设计、样式、动画和界面实现,默认使用 Gemini 3.5 Flash 模型。", "ultrabrain": "深度逻辑推理类别,用于需要广泛分析的复杂架构决策,默认使用 GPT-5.3 Codex 的超高推理变体。", "deep": "深度自主问题解决类别,目标导向执行,行动前进行彻底研究,适用于需要深度理解的棘手问题。", - "artistry": "高度创意与艺术性任务类别,激发新颖想法和创造性解决方案,默认使用 Gemini 3 Pro 的最大变体。", + "artistry": "高度创意与艺术性任务类别,激发新颖想法和创造性解决方案,默认使用 Gemini 3.5 Flash 的高推理变体。", "quick": "轻量任务类别,用于单文件修改、错别字修复、简单调整等琐碎工作,默认使用 Claude Haiku 4.5 快速模型。", "unspecifiedLow": "未归类低工作量任务类别,适用于不适合其他类别且工作量较小的任务,默认使用 Claude Sonnet 4.5。", "unspecifiedHigh": "未归类高工作量任务类别,适用于不适合其他类别且工作量较大的任务,默认使用 Claude Opus 4.8 的最大变体。", - "writing": "写作类别,专注于文档、散文和技术写作,默认使用 Gemini 3 Flash 快速生成模型。" + "writing": "写作类别,专注于文档、散文和技术写作,默认使用 Kimi K2.5 模型。" }, "slimAgentDesc": { "orchestrator": "编排者", diff --git a/src/types/omo.ts b/src/types/omo.ts index 886e8486a..7b3ef4171 100644 --- a/src/types/omo.ts +++ b/src/types/omo.ts @@ -120,7 +120,7 @@ export const OMO_BUILTIN_CATEGORIES: OmoCategoryDef[] = [ display: "Visual Engineering", descKey: "omo.categoryDesc.visualEngineering", tooltipKey: "omo.categoryTooltip.visualEngineering", - recommended: "gemini-3.1-pro", + recommended: "gemini-3.5-flash", }, { key: "ultrabrain", @@ -141,7 +141,7 @@ export const OMO_BUILTIN_CATEGORIES: OmoCategoryDef[] = [ display: "Artistry", descKey: "omo.categoryDesc.artistry", tooltipKey: "omo.categoryTooltip.artistry", - recommended: "gemini-3.1-pro", + recommended: "gemini-3.5-flash", }, { key: "quick", @@ -282,7 +282,7 @@ export const OMO_BACKGROUND_TASK_PLACEHOLDER = `{ }, "modelConcurrency": { "anthropic/claude-opus-4-8": 2, - "google/gemini-3-flash": 10 + "google/gemini-3.5-flash": 10 } }`; @@ -328,7 +328,7 @@ export const OMO_SLIM_BUILTIN_AGENTS: OmoAgentDef[] = [ display: "Oracle", descKey: "omo.slimAgentDesc.oracle", tooltipKey: "omo.slimAgentTooltip.oracle", - recommended: "gpt-5.4", + recommended: "gpt-5.5", group: "sub", }, { @@ -336,7 +336,7 @@ export const OMO_SLIM_BUILTIN_AGENTS: OmoAgentDef[] = [ display: "Librarian", descKey: "omo.slimAgentDesc.librarian", tooltipKey: "omo.slimAgentTooltip.librarian", - recommended: "gemini-3-flash", + recommended: "gemini-3.5-flash", group: "sub", }, { @@ -344,7 +344,7 @@ export const OMO_SLIM_BUILTIN_AGENTS: OmoAgentDef[] = [ display: "Explorer", descKey: "omo.slimAgentDesc.explorer", tooltipKey: "omo.slimAgentTooltip.explorer", - recommended: "grok-code-fast-1", + recommended: "grok-build-0.1", group: "sub", }, { @@ -352,7 +352,7 @@ export const OMO_SLIM_BUILTIN_AGENTS: OmoAgentDef[] = [ display: "Designer", descKey: "omo.slimAgentDesc.designer", tooltipKey: "omo.slimAgentTooltip.designer", - recommended: "gemini-3-pro", + recommended: "gemini-3.5-flash", group: "sub", }, { @@ -360,7 +360,7 @@ export const OMO_SLIM_BUILTIN_AGENTS: OmoAgentDef[] = [ display: "Fixer", descKey: "omo.slimAgentDesc.fixer", tooltipKey: "omo.slimAgentTooltip.fixer", - recommended: "gpt-5.4", + recommended: "gpt-5.5", group: "sub", }, { diff --git a/tests/config/codexChatProviderPresets.test.ts b/tests/config/codexChatProviderPresets.test.ts index 1ce739729..23fe9cb58 100644 --- a/tests/config/codexChatProviderPresets.test.ts +++ b/tests/config/codexChatProviderPresets.test.ts @@ -45,14 +45,14 @@ const expectedChatPresets = new Map< "Zhipu GLM", { baseUrl: "https://open.bigmodel.cn/api/paas/v4", - contextWindows: { "glm-5": 200000 }, + contextWindows: { "glm-5.1": 200000 }, }, ], [ "Zhipu GLM en", { baseUrl: "https://api.z.ai/api/paas/v4", - contextWindows: { "glm-5": 200000 }, + contextWindows: { "glm-5.1": 200000 }, }, ], [ @@ -103,7 +103,7 @@ const expectedChatPresets = new Map< "ModelScope", { baseUrl: "https://api-inference.modelscope.cn/v1", - contextWindows: { "ZhipuAI/GLM-5": 200000 }, + contextWindows: { "ZhipuAI/GLM-5.1": 200000 }, }, ], [ @@ -166,7 +166,7 @@ const expectedChatPresets = new Map< "Novita AI", { baseUrl: "https://api.novita.ai/openai/v1", - contextWindows: { "zai-org/glm-5": 202800 }, + contextWindows: { "zai-org/glm-5.1": 202800 }, }, ], [ diff --git a/tests/config/therouterOpenCodeOpenClawPresets.test.ts b/tests/config/therouterOpenCodeOpenClawPresets.test.ts index 29279f9d7..aec5955f0 100644 --- a/tests/config/therouterOpenCodeOpenClawPresets.test.ts +++ b/tests/config/therouterOpenCodeOpenClawPresets.test.ts @@ -1,10 +1,15 @@ import { describe, expect, it } from "vitest"; -import { opencodeProviderPresets } from "@/config/opencodeProviderPresets"; +import { + OPENCODE_PRESET_MODEL_VARIANTS, + opencodeProviderPresets, +} from "@/config/opencodeProviderPresets"; import { openclawProviderPresets } from "@/config/openclawProviderPresets"; describe("TheRouter OpenCode and OpenClaw presets", () => { it("uses OpenAI-compatible config for OpenCode", () => { - const preset = opencodeProviderPresets.find((item) => item.name === "TheRouter"); + const preset = opencodeProviderPresets.find( + (item) => item.name === "TheRouter", + ); const models = preset?.settingsConfig.models ?? {}; expect(preset).toBeDefined(); @@ -18,12 +23,16 @@ describe("TheRouter OpenCode and OpenClaw presets", () => { expect(preset?.settingsConfig.options?.setCacheKey).toBe(true); expect(models).toHaveProperty("openai/gpt-5.3-codex"); expect(models).toHaveProperty("anthropic/claude-sonnet-4.6"); - expect(models).toHaveProperty("google/gemini-3-flash-preview"); + expect(models).toHaveProperty("google/gemini-3.5-flash"); + expect(models["google/gemini-3.5-flash"]?.name).toBe("Gemini 3.5 Flash"); }); it("uses OpenAI completions config for OpenClaw", () => { - const preset = openclawProviderPresets.find((item) => item.name === "TheRouter"); - const modelIds = (preset?.settingsConfig.models ?? []).map((model) => model.id); + const preset = openclawProviderPresets.find( + (item) => item.name === "TheRouter", + ); + const openClawModels = preset?.settingsConfig.models ?? []; + const modelIds = openClawModels.map((model) => model.id); expect(preset).toBeDefined(); expect(preset?.websiteUrl).toBe("https://therouter.ai"); @@ -36,15 +45,41 @@ describe("TheRouter OpenCode and OpenClaw presets", () => { "anthropic/claude-sonnet-4.6", "openai/gpt-5.3-codex", "openai/gpt-5.2", - "google/gemini-3-flash-preview", + "google/gemini-3.5-flash", ]), ); + expect( + openClawModels.find((model) => model.id === "google/gemini-3.5-flash"), + ).toMatchObject({ + name: "Gemini 3.5 Flash", + cost: { input: 1.5, output: 9, cacheRead: 0.15 }, + }); expect(preset?.suggestedDefaults?.model).toEqual({ primary: "therouter/anthropic/claude-sonnet-4.6", fallbacks: [ "therouter/openai/gpt-5.2", - "therouter/google/gemini-3-flash-preview", + "therouter/google/gemini-3.5-flash", ], }); }); + + it("keeps Google OpenCode preset model ids unique", () => { + const googleModels = OPENCODE_PRESET_MODEL_VARIANTS["@ai-sdk/google"]; + const ids = googleModels.map((model) => model.id); + const geminiFlashModels = googleModels.filter( + (model) => model.id === "gemini-3.5-flash", + ); + + expect(new Set(ids).size).toBe(ids.length); + expect(geminiFlashModels).toHaveLength(1); + expect(geminiFlashModels[0]).toMatchObject({ + name: "Gemini 3.5 Flash", + variants: { + minimal: expect.any(Object), + low: expect.any(Object), + medium: expect.any(Object), + high: expect.any(Object), + }, + }); + }); }); diff --git a/tests/config/therouterProviderPresets.test.ts b/tests/config/therouterProviderPresets.test.ts index 33511e1ad..bcefec284 100644 --- a/tests/config/therouterProviderPresets.test.ts +++ b/tests/config/therouterProviderPresets.test.ts @@ -60,10 +60,10 @@ describe("TheRouter provider presets", () => { expect(preset?.category).toBe("aggregator"); expect(preset?.endpointCandidates).toEqual(["https://api.therouter.ai"]); expect(preset?.baseURL).toBe("https://api.therouter.ai"); - expect(preset?.model).toBe("gemini-3.1-pro"); + expect(preset?.model).toBe("gemini-3.5-flash"); const env = (preset?.settingsConfig as { env: Record }).env; expect(env.GOOGLE_GEMINI_BASE_URL).toBe("https://api.therouter.ai"); - expect(env.GEMINI_MODEL).toBe("gemini-3.1-pro"); + expect(env.GEMINI_MODEL).toBe("gemini-3.5-flash"); }); });