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)
|
||
}
|
||
|