fetchAll( "SELECT * FROM available_models WHERE active = TRUE ORDER BY provider, recommended DESC, display_name" ); foreach ($all_models as $model) { $models_by_provider[$model['provider']][] = $model; } // Récupérer les statistiques d'utilisation (requête directe) $stats = $db->fetchOne( "SELECT COUNT(DISTINCT cc.id) as total_conversations, COUNT(cm.id) as total_messages, cc.provider, cc.model_used FROM chat_conversations cc LEFT JOIN chat_messages cm ON cm.id_conversation = cc.id WHERE cc.id_enseignant = ? GROUP BY cc.provider, cc.model_used ORDER BY total_conversations DESC LIMIT 1", [$user['id_utilisateur']] ); $stats_detail = $db->fetchAll( "SELECT cc.provider, cc.model_used, COUNT(DISTINCT cc.id) as conversations, COUNT(cm.id) as messages, DATE_FORMAT(cc.date_debut, '%Y-%m') as month FROM chat_conversations cc LEFT JOIN chat_messages cm ON cm.id_conversation = cc.id WHERE cc.id_enseignant = ? GROUP BY cc.provider, cc.model_used, month ORDER BY month DESC, conversations DESC", [$user['id_utilisateur']] ); ?> Configuration API Chatbot - WebVal
💬
Conversations
📨
Messages
🤖
Provider actuel

🔑 Mes clés API

'Gemini', 'mistral' => 'Mistral', 'openai' => 'OpenAI', 'ollama' => 'Ollama']; $provider_icons = [ 'gemini' => '✨', 'mistral' => '⚡', 'openai' => '🧠', 'ollama' => '🏠' ]; foreach ($providers as $provider_id => $provider_name): $key_info = null; foreach ($api_keys as $key) { if ($key['provider'] === $provider_id) { $key_info = $key; break; } } $is_configured = $key_info !== null; $is_active = $is_configured && $key_info['is_active']; ?>
🟢 Active ✨ Par défaut 🟠 Désactivée ⚪ Aucune
Modèle par défaut :
Quota : /
Dernière utilisation :

Aucune clé configurée pour

📊 Historique d'utilisation

Mois Provider Modèle Conversations Messages