Fix: Chargement automatique des modèles OpenRouter dans le chatbox

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).
This commit is contained in:
Claude committed 2025-11-12 19:08:12 +00:00
1 parent 2ebef22dd8
commit 4864eae3ce
2 files changed
+13 -4

No files matched your search

+1 -1
View File
@@ -14,7 +14,7 @@ const CACHE_DURATION = 60 * 60 * 1000; // 1 heure
* GET /api/openrouter/models * GET /api/openrouter/models
* Récupérer la liste des modèles disponibles depuis OpenRouter * 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 { try {
// Vérifier le cache // Vérifier le cache
const now = Date.now(); const now = Date.now();
+12 -3
View File
@@ -223,7 +223,7 @@ const Index = () => {
}; };
const loadOpenRouterModels = async () => { const loadOpenRouterModels = async () => {
if (user?.is_admin && settings.openrouter_api_key) { if (settings.openrouter_api_key) {
setLoadingModels(true); setLoadingModels(true);
try { try {
const models = await OpenRouterService.getModels(); const models = await OpenRouterService.getModels();
@@ -528,6 +528,13 @@ const Index = () => {
chatEndRef.current?.scrollIntoView({ behavior: 'smooth' }); chatEndRef.current?.scrollIntoView({ behavior: 'smooth' });
}, [chatMessages]); }, [chatMessages]);
// Load models when chatbox opens
useEffect(() => {
if (chatOpen && openRouterModels.length === 0) {
loadOpenRouterModels();
}
}, [chatOpen]);
// Set default model when models are loaded // Set default model when models are loaded
useEffect(() => { useEffect(() => {
if (openRouterModels.length > 0 && !selectedModel) { if (openRouterModels.length > 0 && !selectedModel) {
@@ -2329,9 +2336,11 @@ const Index = () => {
value={selectedModel} value={selectedModel}
onChange={(e) => setSelectedModel(e.target.value)} onChange={(e) => setSelectedModel(e.target.value)}
className="w-full text-xs px-2 py-1.5 border border-input rounded-md bg-background" 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 ? (
<option value="">Chargement des modèles...</option>
) : openRouterModels.length === 0 ? (
<option value="">Aucun modèle disponible</option> <option value="">Aucun modèle disponible</option>
) : ( ) : (
openRouterModels.map(model => ( openRouterModels.map(model => (