From 1f51a9a89b1e911638fe35a2c66527281f6c82a4 Mon Sep 17 00:00:00 2001 From: SmallJiu <70803028+SmallJiu@users.noreply.github.com> Date: Sat, 20 Jun 2026 00:14:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E9=85=8D=E7=BD=AE=E7=9A=84=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/providers/builtin/deepseek.ts | 15 ++++--- src/main/providers/builtin/glm.ts | 15 ++++--- src/main/providers/builtin/kimi.ts | 15 ++++--- src/main/providers/builtin/mimo.ts | 21 ++++----- src/main/providers/builtin/minimax.ts | 15 ++++--- src/main/providers/builtin/perplexity.ts | 15 ++++--- src/main/providers/builtin/qwen-ai.ts | 27 ++++++------ src/main/providers/builtin/qwen.ts | 30 ++++++------- src/main/providers/builtin/util.ts | 54 ++++++++++++++++++++++++ src/main/providers/builtin/zai.ts | 27 ++++++------ 10 files changed, 151 insertions(+), 83 deletions(-) create mode 100644 src/main/providers/builtin/util.ts diff --git a/src/main/providers/builtin/deepseek.ts b/src/main/providers/builtin/deepseek.ts index 98250a4b..a618fad0 100644 --- a/src/main/providers/builtin/deepseek.ts +++ b/src/main/providers/builtin/deepseek.ts @@ -1,5 +1,13 @@ import type { BuiltinProviderConfig } from '../../store/types' +import { getFileConfig } from './util' +const configs = getFileConfig('deepseek.json', { + modelMappings: { + 'deepseek-v4-flash': 'deepseek-v4-flash', + 'deepseek-v4-pro': 'deepseek-v4-pro', + } +}) + export const deepseekConfig: BuiltinProviderConfig = { id: 'deepseek', name: 'DeepSeek', @@ -28,11 +36,8 @@ export const deepseekConfig: BuiltinProviderConfig = { }, enabled: true, description: 'DeepSeek AI assistant, supports deep thinking and web search', - supportedModels: ['deepseek-v4-flash', 'deepseek-v4-pro'], - modelMappings: { - 'deepseek-v4-flash': 'deepseek-v4-flash', - 'deepseek-v4-pro': 'deepseek-v4-pro', - }, + supportedModels: configs.supportedModels || Object.keys(configs.modelMappings) || [], + modelMappings: configs.modelMappings, credentialFields: [ { name: 'token', diff --git a/src/main/providers/builtin/glm.ts b/src/main/providers/builtin/glm.ts index 7ceb77a6..7958aba3 100644 --- a/src/main/providers/builtin/glm.ts +++ b/src/main/providers/builtin/glm.ts @@ -1,5 +1,12 @@ import type { BuiltinProviderConfig } from '../../store/types' +import { getFileConfig } from './util' +const configs = getFileConfig('glm.json', { + modelMappings: { + 'GLM-5.1': 'glm-5.1', + } +}) + export const glmConfig: BuiltinProviderConfig = { id: 'glm', name: 'GLM', @@ -32,12 +39,8 @@ export const glmConfig: BuiltinProviderConfig = { }, enabled: true, description: 'Zhipu Qingyan AI assistant, supports GLM-5.1 flagship model, deep thinking and video generation', - supportedModels: [ - 'GLM-5.1', - ], - modelMappings: { - 'GLM-5.1': 'glm-5.1', - }, + supportedModels: configs.supportedModels || Object.keys(configs.modelMappings) || [], + modelMappings: configs.modelMappings, credentialFields: [ { name: 'refresh_token', diff --git a/src/main/providers/builtin/kimi.ts b/src/main/providers/builtin/kimi.ts index 4570984a..470475b2 100644 --- a/src/main/providers/builtin/kimi.ts +++ b/src/main/providers/builtin/kimi.ts @@ -1,5 +1,12 @@ import type { BuiltinProviderConfig } from '../../store/types' +import { getFileConfig } from './util' +const configs = getFileConfig('kimi.json', { + modelMappings: { + 'Kimi-K2.6': 'kimi-k2.6', + } +}) + export const kimiConfig: BuiltinProviderConfig = { id: 'kimi', name: 'Kimi', @@ -26,12 +33,8 @@ export const kimiConfig: BuiltinProviderConfig = { }, enabled: true, description: 'Kimi K2.6 AI assistant by Moonshot, supports thinking mode and web search', - supportedModels: [ - 'Kimi-K2.6', - ], - modelMappings: { - 'Kimi-K2.6': 'kimi-k2.6', - }, + supportedModels: configs.supportedModels || Object.keys(configs.modelMappings) || [], + modelMappings: configs.modelMappings, credentialFields: [ { name: 'token', diff --git a/src/main/providers/builtin/mimo.ts b/src/main/providers/builtin/mimo.ts index 428ea212..99f31034 100644 --- a/src/main/providers/builtin/mimo.ts +++ b/src/main/providers/builtin/mimo.ts @@ -1,5 +1,14 @@ import type { BuiltinProviderConfig } from '../../store/types' +import { getFileConfig } from './util' +const configs = getFileConfig('mimo.json', { + modelMappings: { + 'MiMo-V2.5-Pro': 'mimo-v2.5-pro', + 'MiMo-V2.5': 'mimo-v2.5', + 'MiMo-V2-Flash': 'mimo-v2-flash', + } +}) + export const mimoConfig: BuiltinProviderConfig = { id: 'mimo', name: 'Mimo', @@ -26,16 +35,8 @@ export const mimoConfig: BuiltinProviderConfig = { }, enabled: true, description: 'XiaomiMIMO - Xiaomi General Intelligence Foundation Model', - supportedModels: [ - 'MiMo-V2.5-Pro', - 'MiMo-V2.5', - 'MiMo-V2-Flash', - ], - modelMappings: { - 'MiMo-V2.5-Pro': 'mimo-v2.5-pro', - 'MiMo-V2.5': 'mimo-v2.5', - 'MiMo-V2-Flash': 'mimo-v2-flash', - }, + supportedModels: configs.supportedModels || Object.keys(configs.modelMappings) || [], + modelMappings: configs.modelMappings, credentialFields: [ { name: 'service_token', diff --git a/src/main/providers/builtin/minimax.ts b/src/main/providers/builtin/minimax.ts index 3c547a92..0bfd1f0b 100644 --- a/src/main/providers/builtin/minimax.ts +++ b/src/main/providers/builtin/minimax.ts @@ -1,5 +1,12 @@ import type { BuiltinProviderConfig } from '../../store/types' +import { getFileConfig } from './util' +const configs = getFileConfig('minimax.json', { + modelMappings: { + 'MiniMax-M2.7': 'MiniMax-M2.7', + } +}) + export const minimaxConfig: BuiltinProviderConfig = { id: 'minimax', name: 'MiniMax', @@ -25,12 +32,8 @@ export const minimaxConfig: BuiltinProviderConfig = { }, enabled: true, description: 'MiniMax Agent - AI assistant with MCP multi-agent collaboration', - supportedModels: [ - 'MiniMax-M2.7', - ], - modelMappings: { - 'MiniMax-M2.7': 'MiniMax-M2.7', - }, + supportedModels: configs.supportedModels || Object.keys(configs.modelMappings) || [], + modelMappings: configs.modelMappings, credentialFields: [ { name: 'token', diff --git a/src/main/providers/builtin/perplexity.ts b/src/main/providers/builtin/perplexity.ts index 522c7660..c7fa281b 100644 --- a/src/main/providers/builtin/perplexity.ts +++ b/src/main/providers/builtin/perplexity.ts @@ -1,5 +1,12 @@ import type { BuiltinProviderConfig } from '../../store/types' +import { getFileConfig } from './util' +const configs = getFileConfig('perplexity.json', { + modelMappings: { + 'Auto': 'auto', + } +}) + export const perplexityConfig: BuiltinProviderConfig = { id: 'perplexity', name: 'Perplexity', @@ -16,12 +23,8 @@ export const perplexityConfig: BuiltinProviderConfig = { }, enabled: true, description: 'Perplexity AI search assistant with Free Auto mode and web search enhancement', - supportedModels: [ - 'Auto', - ], - modelMappings: { - 'Auto': 'auto', - }, + supportedModels: configs.supportedModels || Object.keys(configs.modelMappings) || [], + modelMappings: configs.modelMappings, credentialFields: [ { name: 'sessionToken', diff --git a/src/main/providers/builtin/qwen-ai.ts b/src/main/providers/builtin/qwen-ai.ts index 772cf672..ac61618f 100644 --- a/src/main/providers/builtin/qwen-ai.ts +++ b/src/main/providers/builtin/qwen-ai.ts @@ -1,5 +1,16 @@ import type { BuiltinProviderConfig } from '../../store/types' +import { getFileConfig } from './util' +const configs = getFileConfig('qwen-ai.json', { + modelMappings: { + 'Qwen3.7-Max': 'qwen3.7-max', + 'Qwen3.6-Plus': 'qwen3.6-plus', + 'Qwen3.6-35B-A3B': 'qwen3.6-35b-a3b', + 'Qwen3.6-27B': 'qwen3.6-27b', + 'Qwen3-Coder': 'qwen3-coder-plus', + } +}) + export const qwenAiConfig: BuiltinProviderConfig = { id: 'qwen-ai', name: 'Qwen AI (International)', @@ -21,20 +32,8 @@ export const qwenAiConfig: BuiltinProviderConfig = { source: 'web', Version: '0.2.35', }, - supportedModels: [ - 'Qwen3.7-Max', - 'Qwen3.6-Plus', - 'Qwen3.6-35B-A3B', - 'Qwen3.6-27B', - 'Qwen3-Coder', - ], - modelMappings: { - 'Qwen3.7-Max': 'qwen3.7-max', - 'Qwen3.6-Plus': 'qwen3.6-plus', - 'Qwen3.6-35B-A3B': 'qwen3.6-35b-a3b', - 'Qwen3.6-27B': 'qwen3.6-27b', - 'Qwen3-Coder': 'qwen3-coder-plus', - }, + supportedModels: configs.supportedModels || Object.keys(configs.modelMappings) || [], + modelMappings: configs.modelMappings, credentialFields: [ { name: 'token', diff --git a/src/main/providers/builtin/qwen.ts b/src/main/providers/builtin/qwen.ts index 4d9efe7f..4e7d3620 100644 --- a/src/main/providers/builtin/qwen.ts +++ b/src/main/providers/builtin/qwen.ts @@ -1,5 +1,17 @@ import type { BuiltinProviderConfig } from '../../store/types' +import { getFileConfig } from './util' +const configs = getFileConfig('qwen.json', { + modelMappings: { + 'Qwen3.6': 'Qwen', + 'Qwen3.7-Max': 'Qwen3.7-Max', + 'Qwen3.5-Flash': 'Qwen3.5-Flash', + 'Qwen3-Max': 'Qwen3-Max', + 'Qwen3-Max-Thinking-Preview': 'Qwen3-Max-Thinking-Preview', + 'Qwen3-Coder': 'Qwen3-Coder', + } +}) + export const qwenConfig: BuiltinProviderConfig = { id: 'qwen', name: 'Qwen', @@ -15,22 +27,8 @@ export const qwenConfig: BuiltinProviderConfig = { }, enabled: true, description: 'Qwen AI assistant by Alibaba Cloud (www.qianwen.com)', - supportedModels: [ - 'Qwen3.6', - 'Qwen3.7-Max', - 'Qwen3.5-Flash', - 'Qwen3-Max', - 'Qwen3-Max-Thinking-Preview', - 'Qwen3-Coder', - ], - modelMappings: { - 'Qwen3.6': 'Qwen', - 'Qwen3.7-Max': 'Qwen3.7-Max', - 'Qwen3.5-Flash': 'Qwen3.5-Flash', - 'Qwen3-Max': 'Qwen3-Max', - 'Qwen3-Max-Thinking-Preview': 'Qwen3-Max-Thinking-Preview', - 'Qwen3-Coder': 'Qwen3-Coder', - }, + supportedModels: configs.supportedModels || Object.keys(configs.modelMappings) || [], + modelMappings: configs.modelMappings, credentialFields: [ { name: 'ticket', diff --git a/src/main/providers/builtin/util.ts b/src/main/providers/builtin/util.ts new file mode 100644 index 00000000..8c39e89e --- /dev/null +++ b/src/main/providers/builtin/util.ts @@ -0,0 +1,54 @@ +import fs from 'fs' +import path from 'path' +import { homedir } from 'os' + +` +import { getFileConfig } from './util' +const configs = getFileConfig('models.json', { + modelMappings: { + "Model-1": "model-1" + } +}) + +export const aiConfig: BuiltinProviderConfig = { + ... + supportedModels: Object.keys(configs.modelMappings || {}), + modelMappings: configs.modelMappings, + ... +} +` + +const parentDir = path.join(homedir(), '.chat2api', 'models') +export function getFileConfig(filename: string, defaultConfig: Record): Record { + const filepath = path.join(parentDir, filename) + try { + if (!fs.existsSync(parentDir)) { + fs.mkdirSync(parentDir, { recursive: true }) + } + + if (fs.existsSync(filepath)) { + const content = fs.readFileSync(filepath, 'utf-8') + + try { + return JSON.parse(content) + } catch (parseError) { + console.error(`[Config] JSON parse error in ${filepath}. Backing up corrupted file and using defaults.`) + fs.renameSync(filepath, `${filepath}.bak`) + fs.writeFileSync(filepath, JSON.stringify(defaultConfig, null, 2), 'utf-8') + return defaultConfig + } + } else { + console.log(`[Config] File not found at ${filepath}. Creating with defaults.`) + fs.writeFileSync(filepath, JSON.stringify(defaultConfig, null, 2), 'utf-8') + return defaultConfig + } + } catch (error) { + console.error(`[Config] Failed to load config from ${filepath}, falling back to defaults.`, error) + try { + fs.writeFileSync(filepath, JSON.stringify(defaultConfig, null, 2), 'utf-8') + } catch (writeError) { + console.error('[Config] Failed to write default config.', writeError) + } + return defaultConfig + } +} diff --git a/src/main/providers/builtin/zai.ts b/src/main/providers/builtin/zai.ts index 7586d395..5055093b 100644 --- a/src/main/providers/builtin/zai.ts +++ b/src/main/providers/builtin/zai.ts @@ -1,5 +1,16 @@ import type { BuiltinProviderConfig } from '../../store/types' +import { getFileConfig } from './util' +const configs = getFileConfig('zai.json', { + modelMappings: { + 'GLM-5.1': 'GLM-5.1', + 'GLM-5-Turbo': 'GLM-5-Turbo', + 'GLM-5V-Turbo': 'GLM-5v-Turbo', + 'GLM-5': 'glm-5', + 'GLM-4.7': 'glm-4.7', + } +}) + export const zaiConfig: BuiltinProviderConfig = { id: 'zai', name: 'Z.ai', @@ -26,20 +37,8 @@ export const zaiConfig: BuiltinProviderConfig = { }, enabled: true, description: 'Z.ai - Free AI Chatbot powered by GLM-5.1, GLM-5, and GLM-4.7', - supportedModels: [ - 'GLM-5.1', - 'GLM-5-Turbo', - 'GLM-5V-Turbo', - 'GLM-5', - 'GLM-4.7', - ], - modelMappings: { - 'GLM-5.1': 'GLM-5.1', - 'GLM-5-Turbo': 'GLM-5-Turbo', - 'GLM-5V-Turbo': 'GLM-5v-Turbo', - 'GLM-5': 'glm-5', - 'GLM-4.7': 'glm-4.7', - }, + supportedModels: configs.supportedModels || Object.keys(configs.modelMappings) || [], + modelMappings: configs.modelMappings, credentialFields: [ { name: 'token',