From 4864eae3ce1ec4c438f37b6e2eba50691f43151d Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 12 Nov 2025 19:08:12 +0000 Subject: [PATCH] =?UTF-8?q?Fix:=20Chargement=20automatique=20des=20mod?= =?UTF-8?q?=C3=A8les=20OpenRouter=20dans=20le=20chatbox?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corrections pour permettre le chargement automatique des modèles IA: - Retrait de la restriction admin sur la route GET /api/openrouter/models - Retrait de la condition is_admin dans loadOpenRouterModels() - Ajout d'un useEffect pour charger les modèles à l'ouverture du chatbox - Ajout d'un indicateur "Chargement des modèles..." dans le sélecteur - Désactivation du sélecteur pendant le chargement Les modèles se chargent maintenant automatiquement quand l'utilisateur ouvre le chatbox, et tous les utilisateurs authentifiés peuvent y accéder (pas seulement les admins). --- routes/openrouter.routes.js | 2 +- src/pages/Index.tsx | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/routes/openrouter.routes.js b/routes/openrouter.routes.js index f890818..42a43e8 100644 --- a/routes/openrouter.routes.js +++ b/routes/openrouter.routes.js @@ -14,7 +14,7 @@ const CACHE_DURATION = 60 * 60 * 1000; // 1 heure * GET /api/openrouter/models * Récupérer la liste des modèles disponibles depuis OpenRouter */ -router.get('/models', authenticateToken, requireAdmin, async (req, res) => { +router.get('/models', authenticateToken, async (req, res) => { try { // Vérifier le cache const now = Date.now(); diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index 8321da5..8980b93 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -223,7 +223,7 @@ const Index = () => { }; const loadOpenRouterModels = async () => { - if (user?.is_admin && settings.openrouter_api_key) { + if (settings.openrouter_api_key) { setLoadingModels(true); try { const models = await OpenRouterService.getModels(); @@ -528,6 +528,13 @@ const Index = () => { chatEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }, [chatMessages]); + // Load models when chatbox opens + useEffect(() => { + if (chatOpen && openRouterModels.length === 0) { + loadOpenRouterModels(); + } + }, [chatOpen]); + // Set default model when models are loaded useEffect(() => { if (openRouterModels.length > 0 && !selectedModel) { @@ -2329,9 +2336,11 @@ const Index = () => { value={selectedModel} onChange={(e) => setSelectedModel(e.target.value)} className="w-full text-xs px-2 py-1.5 border border-input rounded-md bg-background" - disabled={chatLoading} + disabled={chatLoading || loadingModels} > - {openRouterModels.length === 0 ? ( + {loadingModels ? ( + + ) : openRouterModels.length === 0 ? ( ) : ( openRouterModels.map(model => (