From 465bbaef2b93bcb6ce4236b3d5850b492cb27571 Mon Sep 17 00:00:00 2001 From: HenryZ-0302 <211446046+HenryZ-0302@users.noreply.github.com> Date: Sun, 5 Apr 2026 14:01:16 -0700 Subject: [PATCH] fix: avoid common/provider-models circular import --- src/utils/common.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/utils/common.js b/src/utils/common.js index 4e101c5..7a54b71 100644 --- a/src/utils/common.js +++ b/src/utils/common.js @@ -6,7 +6,6 @@ import logger from './logger.js'; import { convertData, getOpenAIStreamChunkStop } from '../convert/convert.js'; import { ProviderStrategyFactory } from './provider-strategies.js'; import { getPluginManager } from '../core/plugin-manager.js'; -import { getConfiguredSupportedModels, usesManagedModelList } from '../providers/provider-models.js'; // ==================== 网络错误处理 ==================== @@ -77,6 +76,30 @@ export const MODEL_PROVIDER = { AUTO: 'auto', } +const MANAGED_MODEL_LIST_PROVIDER_TYPES = new Set([ + 'openai-custom', + 'openaiResponses-custom' +]); + +function usesManagedModelList(providerType = '') { + return [...MANAGED_MODEL_LIST_PROVIDER_TYPES].some(baseType => + providerType === baseType || providerType.startsWith(baseType + '-') + ); +} + +function getConfiguredSupportedModels(providerType, providerConfig = {}) { + if (!usesManagedModelList(providerType)) { + return []; + } + + return [...new Set( + (Array.isArray(providerConfig?.supportedModels) ? providerConfig.supportedModels : []) + .filter(model => typeof model === 'string') + .map(model => model.trim()) + .filter(Boolean) + )].sort((a, b) => a.localeCompare(b)); +} + /** * Extracts the protocol prefix from a given model provider string. * This is used to determine if two providers belong to the same underlying protocol (e.g., gemini, openai, claude).