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