ai-cut/app/utils/clients/all-models.ts

111 lines
2.6 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 統一的模型列表
* 包含 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)
}