From 2827acfe96b74bf3b4175731a01bd345aed84297 Mon Sep 17 00:00:00 2001 From: Augustin Date: Thu, 23 Apr 2026 22:06:21 +0200 Subject: [PATCH] feat(config): providers panel shows only MINIMAX/ZAI with model selector MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Only MINIMAX and ZAI displayed (names in uppercase) - Each provider shows selectable model chips (MiniMax-M2.7, glm-4, etc.) - Save button always visible when editing, not just after validation - Removed setup hint text 💘 Generated with Crush Assisted-by: GLM-5.1 via Crush --- web/src/components/Config.jsx | 49 ++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/web/src/components/Config.jsx b/web/src/components/Config.jsx index 1e711e4..242279d 100644 --- a/web/src/components/Config.jsx +++ b/web/src/components/Config.jsx @@ -331,6 +331,11 @@ function getFieldLabel(key, t) { return key.replace(/_/g, ' ').replace(/\b\w/g, c => c.toUpperCase()) } +const PROVIDER_MODELS = { + minimax: ['MiniMax-M2.7', 'MiniMax-M1', 'abab6.5s-chat', 'abab6.5-chat', 'abab5.5-chat'], + zai: ['glm', 'glm-4', 'glm-4-plus', 'glm-4-flash', 'glm-3-turbo'], +} + function PanelProviders({ providers, editProvider, providerForm, setProviderForm, setEditProvider, openProviderEdit, handleSaveProvider, api, loadData, t }) { const [validating, setValidating] = useState(null) const [validationStatus, setValidationStatus] = useState(null) @@ -352,17 +357,29 @@ function PanelProviders({ providers, editProvider, providerForm, setProviderForm setValidating(null) } + const handleSelectModel = (providerName, model) => { + setProviderForm(prev => ({ + ...prev, + [providerName]: { ...(prev[providerName] || {}), model }, + })) + setEditProvider(providerName) + } + + const displayed = providers.filter(p => p.name === 'minimax' || p.name === 'zai') + return (
-
{t('config.setupDescription')}
- {providers.map((p, i) => { + {displayed.map((p, i) => { const isEditing = editProvider === p.name const isValidationTarget = validationStatus?.provider === p.name + const models = PROVIDER_MODELS[p.name] || [] + const selectedModel = providerForm[p.name]?.model || p.model + return (
- {p.name} + {p.name.toUpperCase()} {p.active && active} {isValidationTarget && validationStatus?.valid && {t('config.keyValid')}} {isValidationTarget && !validationStatus?.valid && {validationStatus?.error}} @@ -376,7 +393,7 @@ function PanelProviders({ providers, editProvider, providerForm, setProviderForm { if (!isEditing) openProviderEdit(p) @@ -391,19 +408,31 @@ function PanelProviders({ providers, editProvider, providerForm, setProviderForm - {isValidationTarget && validationStatus?.valid && ( + {isEditing && ( )}
-
- {p.active && active} - {p.model && p.model !== p.name && {p.model}} -
+ {models.length > 0 && ( +
+ Modèle +
+ {models.map(m => ( +
handleSelectModel(p.name, m)} + > + {m} +
+ ))} +
+
+ )}
)