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

111 lines
2.6 KiB
TypeScript
Raw Normal View History

2025-12-16 10:08:51 +00:00
/**
*
* 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)
}