/** * 統一的模型列表 * 包含 Gemini 和 Grok 所有可用模型 */ import { GEMINI_MODELS, type GeminiModel } from './gemini-models' import { GROK_MODELS, type GrokModel } from './grok-models' export interface UnifiedModel { name: string displayName: string description: string provider: 'gemini' | 'grok' capabilities: { text: boolean vision: boolean audio: boolean video: boolean imageGeneration: boolean tts: boolean } category: 'text' | 'vision' | 'multimodal' | 'image-generation' | 'video-generation' | 'audio' | 'tts' | 'robotics' } /** * 將 Gemini 模型轉換為統一格式 */ function convertGeminiModel(model: GeminiModel): UnifiedModel { return { name: model.name, displayName: model.displayName, description: model.description, provider: 'gemini', capabilities: model.capabilities, category: model.category } } /** * 將 Grok 模型轉換為統一格式 */ function convertGrokModel(model: GrokModel): UnifiedModel { return { name: model.name, displayName: model.displayName, description: model.description, provider: 'grok', capabilities: model.capabilities, category: model.category } } /** * 所有可用模型列表(Gemini + Grok) */ export const ALL_MODELS: UnifiedModel[] = [ ...GEMINI_MODELS.map(convertGeminiModel), ...GROK_MODELS.map(convertGrokModel) ] /** * 根據功能過濾模型 */ export function getModelsByCapability(capability: keyof UnifiedModel['capabilities']): UnifiedModel[] { return ALL_MODELS.filter(m => m.capabilities[capability] === true) } /** * 根據 Provider 過濾模型 */ export function getModelsByProvider(provider: 'gemini' | 'grok'): UnifiedModel[] { return ALL_MODELS.filter(m => m.provider === provider) } /** * 根據類別過濾模型 */ export function getModelsByCategory(category: UnifiedModel['category']): UnifiedModel[] { return ALL_MODELS.filter(m => m.category === category) } /** * 取得模型資訊 */ export function getModelInfo(modelName: string): UnifiedModel | undefined { return ALL_MODELS.find(m => m.name === modelName) } /** * 根據模型名稱判斷 Provider */ export function getProviderForModel(modelName: string): 'gemini' | 'grok' { const model = getModelInfo(modelName) if (model) { return model.provider } // 如果找不到模型,根據名稱判斷 if (modelName.toLowerCase().includes('grok')) { return 'grok' } return 'gemini' } /** * 根據模型名稱判斷 Provider(別名,為了向後兼容) */ export function getModelProvider(modelName: string): 'gemini' | 'grok' { return getProviderForModel(modelName) }