Skip to main content
Glama
model-manager.ts3.72 kB
/** * AI模型配置管理器 * 提供统一的模型选择、配置管理和默认值设置 */ import { loadAIProvidersConfig } from './ai-client-adapter.js'; import { ModelPurpose, AIProvidersConfig, AIModelConfig } from './types.js'; // 模型配置缓存 let modelConfigCache: AIProvidersConfig | null = null; /** * 获取模型配置(带缓存) */ export function getModelConfig(forceReload = false): AIProvidersConfig { if (!modelConfigCache || forceReload) { modelConfigCache = loadAIProvidersConfig(forceReload); } return modelConfigCache; } /** * 根据用途获取推荐的模型名称 */ export function getRecommendedModel(purpose: ModelPurpose): string { const config = getModelConfig(); // 首先尝试从配置文件获取默认模型 if (config.defaultModels && config.defaultModels[purpose]) { const recommendedModelName = config.defaultModels[purpose]; // 检查推荐的模型是否在配置中存在 const modelExists = config.providers.some(provider => provider.models.some(model => model.model === recommendedModelName) ); if (modelExists) { return recommendedModelName; } } // 如果配置文件中没有指定,尝试根据模型用途映射找到合适的模型 if (config.modelPurposes) { for (const [modelName, purposes] of Object.entries(config.modelPurposes)) { if (purposes.includes(purpose)) { // 检查模型是否在配置中存在 const modelExists = config.providers.some(provider => provider.models.some(model => model.model === modelName) ); if (modelExists) { return modelName; } } } } // 如果没有找到合适的模型,返回第一个可用的模型 for (const provider of config.providers) { if (provider.models.length > 0) { return provider.models[0].model; } } throw new Error('No AI models configured'); } /** * 获取所有可用的模型列表 */ export function getAvailableModels(): Array<{ model: string; title: string; provider: string; purposes: ModelPurpose[]; }> { const config = getModelConfig(); const models: Array<{ model: string; title: string; provider: string; purposes: ModelPurpose[]; }> = []; for (const provider of config.providers) { for (const model of provider.models) { // 从配置文件获取模型用途 let purposes: ModelPurpose[] = [ModelPurpose.DESIGN]; // 默认用途 if (config.modelPurposes && config.modelPurposes[model.model]) { purposes = config.modelPurposes[model.model] as ModelPurpose[]; } models.push({ model: model.model, title: model.title, provider: provider.provider, purposes, }); } } return models; } /** * 验证模型是否可用 */ export function validateModel(modelName: string): boolean { const config = getModelConfig(); return config.providers.some(provider => provider.models.some(model => model.model === modelName) ); } /** * 获取模型详细信息 */ export function getModelInfo(modelName: string): AIModelConfig | null { const config = getModelConfig(); for (const provider of config.providers) { const model = provider.models.find(m => m.model === modelName); if (model) { return model; } } return null; } /** * 根据模型名称获取提供商 */ export function getProviderByModel(modelName: string): string | null { const config = getModelConfig(); for (const provider of config.providers) { const model = provider.models.find(m => m.model === modelName); if (model) { return provider.provider; } } return null; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lyw405/mcp-garendesign'

If you have feedback or need assistance with the MCP directory API, please join our Discord server