refactor: extract API_PROVIDER_PRESETS to provider-presets.ts

Moves 18 provider preset definitions (148 lines) from settings.ts into
a dedicated provider-presets.ts file. settings.ts reduced from 443 to
297 lines, now contains only utility functions and non-preset constants.

Change-Id: Ia9a1ef48854ab79cb405df9cd1f88d19826317d6
This commit is contained in:
wujunchen 2026-04-27 15:15:23 +08:00
parent 15b471efad
commit 62f99718f6
3 changed files with 161 additions and 155 deletions

12
main.js

File diff suppressed because one or more lines are too long

152
src/provider-presets.ts Normal file
View file

@ -0,0 +1,152 @@
'use strict';
import type { ApiProviderPreset } from './types';
export const API_PROVIDER_PRESETS: Record<string, ApiProviderPreset> = {
anthropic: {
label: 'Anthropic',
format: 'anthropic-messages',
baseUrl: 'https://api.anthropic.com/v1',
authType: 'x-api-key',
envVar: 'ANTHROPIC_API_KEY',
model: 'claude-sonnet-4-6',
},
openai: {
label: 'OpenAI',
format: 'openai-chat',
baseUrl: 'https://api.openai.com/v1',
authType: 'bearer',
envVar: 'OPENAI_API_KEY',
tokenLimitField: 'max_completion_tokens',
model: 'gpt-5.1',
},
'openai-responses': {
label: 'OpenAI Responses',
format: 'openai-responses',
baseUrl: 'https://api.openai.com/v1',
authType: 'bearer',
envVar: 'OPENAI_API_KEY',
modelPrefix: 'openai',
model: 'gpt-5.1',
},
google: {
label: 'Google Gemini',
format: 'google-generative-ai',
baseUrl: 'https://generativelanguage.googleapis.com/v1beta',
authType: 'x-goog-api-key',
envVar: 'GEMINI_API_KEY',
model: 'gemini-3-pro-preview',
},
openrouter: {
label: 'OpenRouter',
format: 'openai-chat',
baseUrl: 'https://openrouter.ai/api/v1',
authType: 'bearer',
envVar: 'OPENROUTER_API_KEY',
model: '',
},
groq: {
label: 'Groq',
format: 'openai-chat',
baseUrl: 'https://api.groq.com/openai/v1',
authType: 'bearer',
envVar: 'GROQ_API_KEY',
model: '',
},
deepseek: {
label: 'DeepSeek',
format: 'openai-chat',
baseUrl: 'https://api.deepseek.com',
authType: 'bearer',
envVar: 'DEEPSEEK_API_KEY',
model: 'deepseek-chat',
},
moonshot: {
label: 'Moonshot / Kimi',
format: 'openai-chat',
baseUrl: 'https://api.moonshot.ai/v1',
authType: 'bearer',
envVar: 'MOONSHOT_API_KEY',
model: 'kimi-k2.5',
},
qianfan: {
label: 'Baidu Qianfan',
format: 'openai-chat',
baseUrl: 'https://qianfan.baidubce.com/v2',
authType: 'bearer',
envVar: 'QIANFAN_API_KEY',
model: 'deepseek-v3.2',
},
minimax: {
label: 'MiniMax (Anthropic-compatible)',
format: 'anthropic-messages',
baseUrl: 'https://api.minimax.io/anthropic',
authType: 'bearer',
envVar: 'MINIMAX_API_KEY',
model: 'MiniMax-M2.1',
},
xai: {
label: 'xAI',
format: 'openai-chat',
baseUrl: 'https://api.x.ai/v1',
authType: 'bearer',
envVar: 'XAI_API_KEY',
model: '',
},
mistral: {
label: 'Mistral',
format: 'openai-chat',
baseUrl: 'https://api.mistral.ai/v1',
authType: 'bearer',
envVar: 'MISTRAL_API_KEY',
model: '',
},
cerebras: {
label: 'Cerebras',
format: 'openai-chat',
baseUrl: 'https://api.cerebras.ai/v1',
authType: 'bearer',
envVar: 'CEREBRAS_API_KEY',
model: '',
},
zai: {
label: 'Z.AI / GLM',
format: 'openai-chat',
baseUrl: 'https://api.z.ai/api/paas/v4',
authType: 'bearer',
envVar: 'ZAI_API_KEY',
model: '',
},
ollama: {
label: 'Ollama (local)',
format: 'openai-chat',
baseUrl: 'http://127.0.0.1:11434/v1',
authType: 'none',
envVar: '',
model: '',
},
lmstudio: {
label: 'LM Studio (local)',
format: 'openai-chat',
baseUrl: 'http://127.0.0.1:1234/v1',
authType: 'none',
envVar: '',
model: '',
},
'custom-openai': {
label: 'Custom OpenAI-compatible',
format: 'openai-chat',
baseUrl: '',
authType: 'bearer',
envVar: '',
model: '',
},
'custom-anthropic': {
label: 'Custom Anthropic-compatible',
format: 'anthropic-messages',
baseUrl: '',
authType: 'x-api-key',
envVar: '',
model: '',
},
};

View file

@ -2,8 +2,11 @@
import crypto from 'crypto';
import { translate } from './i18n';
import { API_PROVIDER_PRESETS } from './provider-presets';
import type { ApiFormat, ApiProviderPreset, CacheEntry, PluginSettings } from './types';
export { API_PROVIDER_PRESETS } from './provider-presets';
export const MAX_DOC_CHARS = 100000;
export const PROMPT_VERSION = 2;
export const CACHE_SCHEMA_VERSION = 2;
@ -78,155 +81,6 @@ export const API_AUTH_TYPES = {
none: 'None',
};
export const API_PROVIDER_PRESETS: Record<string, ApiProviderPreset> = {
anthropic: {
label: 'Anthropic',
format: 'anthropic-messages',
baseUrl: 'https://api.anthropic.com/v1',
authType: 'x-api-key',
envVar: 'ANTHROPIC_API_KEY',
model: 'claude-sonnet-4-6',
},
openai: {
label: 'OpenAI',
format: 'openai-chat',
baseUrl: 'https://api.openai.com/v1',
authType: 'bearer',
envVar: 'OPENAI_API_KEY',
tokenLimitField: 'max_completion_tokens',
model: 'gpt-5.1',
},
'openai-responses': {
label: 'OpenAI Responses',
format: 'openai-responses',
baseUrl: 'https://api.openai.com/v1',
authType: 'bearer',
envVar: 'OPENAI_API_KEY',
modelPrefix: 'openai',
model: 'gpt-5.1',
},
google: {
label: 'Google Gemini',
format: 'google-generative-ai',
baseUrl: 'https://generativelanguage.googleapis.com/v1beta',
authType: 'x-goog-api-key',
envVar: 'GEMINI_API_KEY',
model: 'gemini-3-pro-preview',
},
openrouter: {
label: 'OpenRouter',
format: 'openai-chat',
baseUrl: 'https://openrouter.ai/api/v1',
authType: 'bearer',
envVar: 'OPENROUTER_API_KEY',
model: '',
},
groq: {
label: 'Groq',
format: 'openai-chat',
baseUrl: 'https://api.groq.com/openai/v1',
authType: 'bearer',
envVar: 'GROQ_API_KEY',
model: '',
},
deepseek: {
label: 'DeepSeek',
format: 'openai-chat',
baseUrl: 'https://api.deepseek.com',
authType: 'bearer',
envVar: 'DEEPSEEK_API_KEY',
model: 'deepseek-chat',
},
moonshot: {
label: 'Moonshot / Kimi',
format: 'openai-chat',
baseUrl: 'https://api.moonshot.ai/v1',
authType: 'bearer',
envVar: 'MOONSHOT_API_KEY',
model: 'kimi-k2.5',
},
qianfan: {
label: 'Baidu Qianfan',
format: 'openai-chat',
baseUrl: 'https://qianfan.baidubce.com/v2',
authType: 'bearer',
envVar: 'QIANFAN_API_KEY',
model: 'deepseek-v3.2',
},
minimax: {
label: 'MiniMax (Anthropic-compatible)',
format: 'anthropic-messages',
baseUrl: 'https://api.minimax.io/anthropic',
authType: 'bearer',
envVar: 'MINIMAX_API_KEY',
model: 'MiniMax-M2.1',
},
xai: {
label: 'xAI',
format: 'openai-chat',
baseUrl: 'https://api.x.ai/v1',
authType: 'bearer',
envVar: 'XAI_API_KEY',
model: '',
},
mistral: {
label: 'Mistral',
format: 'openai-chat',
baseUrl: 'https://api.mistral.ai/v1',
authType: 'bearer',
envVar: 'MISTRAL_API_KEY',
model: '',
},
cerebras: {
label: 'Cerebras',
format: 'openai-chat',
baseUrl: 'https://api.cerebras.ai/v1',
authType: 'bearer',
envVar: 'CEREBRAS_API_KEY',
model: '',
},
zai: {
label: 'Z.AI / GLM',
format: 'openai-chat',
baseUrl: 'https://api.z.ai/api/paas/v4',
authType: 'bearer',
envVar: 'ZAI_API_KEY',
model: '',
},
ollama: {
label: 'Ollama (local)',
format: 'openai-chat',
baseUrl: 'http://127.0.0.1:11434/v1',
authType: 'none',
envVar: '',
model: '',
},
lmstudio: {
label: 'LM Studio (local)',
format: 'openai-chat',
baseUrl: 'http://127.0.0.1:1234/v1',
authType: 'none',
envVar: '',
model: '',
},
'custom-openai': {
label: 'Custom OpenAI-compatible',
format: 'openai-chat',
baseUrl: '',
authType: 'bearer',
envVar: '',
model: '',
},
'custom-anthropic': {
label: 'Custom Anthropic-compatible',
format: 'anthropic-messages',
baseUrl: '',
authType: 'x-api-key',
envVar: '',
model: '',
},
};
export function hashContent(text: string): string {
return crypto.createHash('sha1').update(text, 'utf8').digest('hex');
}