From 79a64f0118f60848a95a474367817e9c33e48d45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=87=AA=E7=94=B1=E7=9A=84=E4=B8=96=E7=95=8C=E4=BA=BA?= <3196812536@qq.com> Date: Wed, 9 Jul 2025 00:15:47 +0800 Subject: [PATCH] fix: Improve model filtering and group handling (#7950) Expanded the text-to-image model regex to include more identifiers. Removed the getModelGroup function and now use the model's group property directly. Updated model selection in ModelSettings and TranslatePage to also filter out rerank and text-to-image models, ensuring only appropriate models are shown in dropdowns. --- src/renderer/src/config/models.ts | 2 +- .../src/pages/paintings/NewApiPage.tsx | 9 ++------ .../pages/paintings/config/NewApiConfig.ts | 15 ------------ .../settings/ModelSettings/ModelSettings.tsx | 23 +++++++++++++------ .../src/pages/translate/TranslatePage.tsx | 22 ++++++++++++------ 5 files changed, 34 insertions(+), 37 deletions(-) diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index 2b4d9e959a..f05a0447b3 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -208,7 +208,7 @@ export const isDedicatedImageGenerationModel = (model: Model): boolean => DEDICATED_IMAGE_MODELS.filter((m) => model.id.includes(m)).length > 0 // Text to image models -export const TEXT_TO_IMAGE_REGEX = /flux|diffusion|stabilityai|sd-|dall|cogview|janus/i +export const TEXT_TO_IMAGE_REGEX = /flux|diffusion|stabilityai|sd-|dall|cogview|janus|midjourney|mj-|image|gpt-image/i // Reasoning models export const REASONING_REGEX = diff --git a/src/renderer/src/pages/paintings/NewApiPage.tsx b/src/renderer/src/pages/paintings/NewApiPage.tsx index 030c53d82e..544622fab2 100644 --- a/src/renderer/src/pages/paintings/NewApiPage.tsx +++ b/src/renderer/src/pages/paintings/NewApiPage.tsx @@ -13,12 +13,7 @@ import { useAllProviders } from '@renderer/hooks/useProvider' import { useRuntime } from '@renderer/hooks/useRuntime' import { useSettings } from '@renderer/hooks/useSettings' import PaintingsList from '@renderer/pages/paintings/components/PaintingsList' -import { - DEFAULT_PAINTING, - getModelGroup, - MODELS, - SUPPORTED_MODELS -} from '@renderer/pages/paintings/config/NewApiConfig' +import { DEFAULT_PAINTING, MODELS, SUPPORTED_MODELS } from '@renderer/pages/paintings/config/NewApiConfig' import FileManager from '@renderer/services/FileManager' import { translateText } from '@renderer/services/TranslateService' import { useAppDispatch } from '@renderer/store' @@ -96,7 +91,7 @@ const NewApiPage: FC<{ Options: string[] }> = ({ Options }) => { label: m.name, value: m.id, custom: !SUPPORTED_MODELS.includes(m.id), - group: getModelGroup(m.id) + group: m.group })) return [...customModels] }, [newApiProvider.models]) diff --git a/src/renderer/src/pages/paintings/config/NewApiConfig.ts b/src/renderer/src/pages/paintings/config/NewApiConfig.ts index 5d3096d3f2..1b8b3f04b5 100644 --- a/src/renderer/src/pages/paintings/config/NewApiConfig.ts +++ b/src/renderer/src/pages/paintings/config/NewApiConfig.ts @@ -30,18 +30,3 @@ export const DEFAULT_PAINTING: GeneratePainting = { moderation: 'auto', size: 'auto' } - -export const getModelGroup = (model: string): string => { - const modelConfig = MODELS.find((m) => m.name === model) - if (modelConfig) { - return modelConfig.group - } - if (model.includes('flux')) { - return 'Black Forest Lab' - } else if (model.includes('imagen')) { - return 'Gemini' - } else if (model.includes('dall-e')) { - return 'OpenAI' - } - return 'Custom' -} diff --git a/src/renderer/src/pages/settings/ModelSettings/ModelSettings.tsx b/src/renderer/src/pages/settings/ModelSettings/ModelSettings.tsx index 69020d90d0..f113649ea9 100644 --- a/src/renderer/src/pages/settings/ModelSettings/ModelSettings.tsx +++ b/src/renderer/src/pages/settings/ModelSettings/ModelSettings.tsx @@ -2,7 +2,7 @@ import { RedoOutlined } from '@ant-design/icons' import ModelAvatar from '@renderer/components/Avatar/ModelAvatar' import { HStack } from '@renderer/components/Layout' import PromptPopup from '@renderer/components/Popups/PromptPopup' -import { isEmbeddingModel, isRerankModel } from '@renderer/config/models' +import { isEmbeddingModel, isRerankModel, isTextToImageModel } from '@renderer/config/models' import { TRANSLATE_PROMPT } from '@renderer/config/prompts' import { useTheme } from '@renderer/context/ThemeProvider' import { useAssistants, useDefaultAssistant, useDefaultModel } from '@renderer/hooks/useAssistant' @@ -41,16 +41,25 @@ const ModelSettings: FC = () => { const selectOptions = providers .filter((p) => p.models.length > 0) - .map((p) => ({ - label: p.isSystem ? t(`provider.${p.id}`) : p.name, - title: p.name, - options: sortBy(p.models, 'name') - .filter((m) => !isEmbeddingModel(m) && !isRerankModel(m)) + .flatMap((p) => { + const filteredModels = sortBy(p.models, 'name') + .filter((m) => !isEmbeddingModel(m) && !isRerankModel(m) && !isTextToImageModel(m)) .map((m) => ({ label: `${m.name} | ${p.isSystem ? t(`provider.${p.id}`) : p.name}`, value: getModelUniqId(m) })) - })) + + if (filteredModels.length > 0) { + return [ + { + label: p.isSystem ? t(`provider.${p.id}`) : p.name, + title: p.name, + options: filteredModels + } + ] + } + return [] + }) const defaultModelValue = useMemo( () => (hasModel(defaultModel) ? getModelUniqId(defaultModel) : undefined), diff --git a/src/renderer/src/pages/translate/TranslatePage.tsx b/src/renderer/src/pages/translate/TranslatePage.tsx index ae1ee408a3..ee1bb58a40 100644 --- a/src/renderer/src/pages/translate/TranslatePage.tsx +++ b/src/renderer/src/pages/translate/TranslatePage.tsx @@ -2,7 +2,7 @@ import { CheckOutlined, DeleteOutlined, HistoryOutlined, RedoOutlined, SendOutli import { Navbar, NavbarCenter } from '@renderer/components/app/Navbar' import CopyIcon from '@renderer/components/Icons/CopyIcon' import { HStack } from '@renderer/components/Layout' -import { isEmbeddingModel } from '@renderer/config/models' +import { isEmbeddingModel, isRerankModel, isTextToImageModel } from '@renderer/config/models' import { TRANSLATE_PROMPT } from '@renderer/config/prompts' import { LanguagesEnum, translateLanguageOptions } from '@renderer/config/translate' import { useCodeStyle } from '@renderer/context/CodeStyleProvider' @@ -312,16 +312,24 @@ const TranslatePage: FC = () => { () => providers .filter((p) => p.models.length > 0) - .map((p) => ({ - label: p.isSystem ? t(`provider.${p.id}`) : p.name, - title: p.name, - options: sortBy(p.models, 'name') - .filter((m) => !isEmbeddingModel(m)) + .flatMap((p) => { + const filteredModels = sortBy(p.models, 'name') + .filter((m) => !isEmbeddingModel(m) && !isRerankModel(m) && !isTextToImageModel(m)) .map((m) => ({ label: `${m.name} | ${p.isSystem ? t(`provider.${p.id}`) : p.name}`, value: getModelUniqId(m) })) - })), + if (filteredModels.length > 0) { + return [ + { + label: p.isSystem ? t(`provider.${p.id}`) : p.name, + title: p.name, + options: filteredModels + } + ] + } + return [] + }), [providers, t] )