增加 openai 的模型兼容
This commit is contained in:
131
prisma/config.ts
131
prisma/config.ts
@@ -1,16 +1,90 @@
|
||||
|
||||
import { ModelOption, ThinkingLevel, AppConfig } from './types';
|
||||
import { ModelOption, ThinkingLevel, AppConfig, ApiProvider } from './types';
|
||||
|
||||
export const MODELS: { value: ModelOption; label: string; desc: string }[] = [
|
||||
{
|
||||
value: 'gemini-3-flash-preview',
|
||||
label: 'Gemini 3 Flash',
|
||||
desc: 'Low latency, high throughput, dynamic thinking.'
|
||||
export const MODELS: { value: ModelOption; label: string; desc: string; provider: ApiProvider }[] = [
|
||||
{
|
||||
value: 'gemini-3-flash-preview',
|
||||
label: 'Gemini 3 Flash',
|
||||
desc: 'Low latency, high throughput, dynamic thinking.',
|
||||
provider: 'google'
|
||||
},
|
||||
{
|
||||
value: 'gemini-3-pro-preview',
|
||||
label: 'Gemini 3 Pro',
|
||||
desc: 'Deep reasoning, complex tasks, higher intelligence.'
|
||||
{
|
||||
value: 'gemini-3-pro-preview',
|
||||
label: 'Gemini 3 Pro',
|
||||
desc: 'Deep reasoning, complex tasks, higher intelligence.',
|
||||
provider: 'google'
|
||||
},
|
||||
{
|
||||
value: 'gpt-4o',
|
||||
label: 'GPT-4o',
|
||||
desc: 'OpenAI flagship model with vision capabilities.',
|
||||
provider: 'openai'
|
||||
},
|
||||
{
|
||||
value: 'gpt-4o-mini',
|
||||
label: 'GPT-4o Mini',
|
||||
desc: 'Fast, affordable small model for focused tasks.',
|
||||
provider: 'openai'
|
||||
},
|
||||
{
|
||||
value: 'o1-preview',
|
||||
label: 'O1 Preview',
|
||||
desc: 'Advanced reasoning model with chain-of-thought.',
|
||||
provider: 'openai'
|
||||
},
|
||||
{
|
||||
value: 'o1-mini',
|
||||
label: 'O1 Mini',
|
||||
desc: 'Fast reasoning model for efficient problem solving.',
|
||||
provider: 'openai'
|
||||
},
|
||||
{
|
||||
value: 'deepseek-chat',
|
||||
label: 'DeepSeek Chat',
|
||||
desc: 'Advanced language model optimized for conversational AI.',
|
||||
provider: 'deepseek'
|
||||
},
|
||||
{
|
||||
value: 'deepseek-coder',
|
||||
label: 'DeepSeek Coder',
|
||||
desc: 'Specialized model for code generation and programming tasks.',
|
||||
provider: 'deepseek'
|
||||
},
|
||||
{
|
||||
value: 'claude-3-5-sonnet-20241022',
|
||||
label: 'Claude 3.5 Sonnet',
|
||||
desc: 'Anthropic\'s most capable model with excellent reasoning.',
|
||||
provider: 'anthropic'
|
||||
},
|
||||
{
|
||||
value: 'claude-3-haiku-20240307',
|
||||
label: 'Claude 3 Haiku',
|
||||
desc: 'Fast and efficient model for quick responses.',
|
||||
provider: 'anthropic'
|
||||
},
|
||||
{
|
||||
value: 'grok-2-1212',
|
||||
label: 'Grok 2',
|
||||
desc: 'xAI\'s advanced model with real-time knowledge.',
|
||||
provider: 'xai'
|
||||
},
|
||||
{
|
||||
value: 'mistral-large-2411',
|
||||
label: 'Mistral Large',
|
||||
desc: 'Mistral\'s flagship model for complex reasoning.',
|
||||
provider: 'mistral'
|
||||
},
|
||||
{
|
||||
value: 'mixtral-8x7b-32768',
|
||||
label: 'Mixtral 8x7B',
|
||||
desc: 'Mixture of Experts model with excellent performance.',
|
||||
provider: 'mistral'
|
||||
},
|
||||
{
|
||||
value: 'custom',
|
||||
label: 'Custom Model',
|
||||
desc: 'Use any OpenAI-compatible API (LM Studio, Ollama, LocalAI, etc.) by configuring custom base URL.',
|
||||
provider: 'custom'
|
||||
},
|
||||
];
|
||||
|
||||
@@ -27,24 +101,51 @@ export const DEFAULT_CONFIG: AppConfig = {
|
||||
customApiKey: '',
|
||||
customBaseUrl: '',
|
||||
enableCustomApi: false,
|
||||
enableRecursiveLoop: false
|
||||
enableRecursiveLoop: false,
|
||||
apiProvider: 'google',
|
||||
customModels: []
|
||||
};
|
||||
|
||||
export const getValidThinkingLevels = (model: ModelOption): ThinkingLevel[] => {
|
||||
if (model === 'gemini-3-pro-preview') {
|
||||
return ['low', 'high'];
|
||||
}
|
||||
if (model === 'o1-preview' || model === 'o1-mini') {
|
||||
return ['low', 'medium', 'high'];
|
||||
}
|
||||
return ['minimal', 'low', 'medium', 'high'];
|
||||
};
|
||||
|
||||
export const getThinkingBudget = (level: ThinkingLevel, model: ModelOption): number => {
|
||||
const isPro = model === 'gemini-3-pro-preview';
|
||||
|
||||
const isGeminiPro = model === 'gemini-3-pro-preview';
|
||||
const isOpenAIReasoning = model === 'o1-preview' || model === 'o1-mini';
|
||||
|
||||
switch (level) {
|
||||
case 'minimal': return 0; // Disables thinking
|
||||
case 'minimal': return 0;
|
||||
case 'low': return 2048;
|
||||
case 'medium': return 8192;
|
||||
case 'high': return isPro ? 32768 : 16384;
|
||||
case 'high':
|
||||
if (isOpenAIReasoning) return 65536;
|
||||
if (isGeminiPro) return 32768;
|
||||
return 16384;
|
||||
default: return 0;
|
||||
}
|
||||
};
|
||||
|
||||
export const getProvider = (model: ModelOption): ApiProvider => {
|
||||
const modelInfo = MODELS.find(m => m.value === model);
|
||||
return modelInfo?.provider || 'google';
|
||||
};
|
||||
|
||||
export const getAllModels = (config: AppConfig): { value: ModelOption; label: string; desc: string; provider: ApiProvider }[] => {
|
||||
const presetModels = MODELS.filter(m => m.value !== 'custom');
|
||||
|
||||
const customModels = (config.customModels || []).map(m => ({
|
||||
value: m.name as ModelOption,
|
||||
label: m.name,
|
||||
desc: `Custom ${m.provider} model`,
|
||||
provider: m.provider
|
||||
}));
|
||||
|
||||
return [...presetModels, ...customModels];
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user