Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions src/main/providers/builtin/deepseek.ts
Original file line number Diff line number Diff line change
@@ -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',
Expand Down Expand Up @@ -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',
Expand Down
15 changes: 9 additions & 6 deletions src/main/providers/builtin/glm.ts
Original file line number Diff line number Diff line change
@@ -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',
Expand Down Expand Up @@ -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',
Expand Down
15 changes: 9 additions & 6 deletions src/main/providers/builtin/kimi.ts
Original file line number Diff line number Diff line change
@@ -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',
Expand All @@ -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',
Expand Down
21 changes: 11 additions & 10 deletions src/main/providers/builtin/mimo.ts
Original file line number Diff line number Diff line change
@@ -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',
Expand All @@ -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',
Expand Down
15 changes: 9 additions & 6 deletions src/main/providers/builtin/minimax.ts
Original file line number Diff line number Diff line change
@@ -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',
Expand All @@ -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',
Expand Down
15 changes: 9 additions & 6 deletions src/main/providers/builtin/perplexity.ts
Original file line number Diff line number Diff line change
@@ -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',
Expand All @@ -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',
Expand Down
27 changes: 13 additions & 14 deletions src/main/providers/builtin/qwen-ai.ts
Original file line number Diff line number Diff line change
@@ -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)',
Expand All @@ -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',
Expand Down
30 changes: 14 additions & 16 deletions src/main/providers/builtin/qwen.ts
Original file line number Diff line number Diff line change
@@ -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',
Expand All @@ -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',
Expand Down
54 changes: 54 additions & 0 deletions src/main/providers/builtin/util.ts
Original file line number Diff line number Diff line change
@@ -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<string, any>): Record<string, any> {
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
}
}
27 changes: 13 additions & 14 deletions src/main/providers/builtin/zai.ts
Original file line number Diff line number Diff line change
@@ -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',
Expand All @@ -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',
Expand Down