fetchOne( "SELECT provider, model_default FROM chatbot_default_provider WHERE id_enseignant = ?", [$user['id_utilisateur']] ); // Si pas de config, initialiser avec Ollama if (!$default_config) { $db->query( "INSERT INTO chatbot_default_provider (id_enseignant, provider, model_default) VALUES (?, 'ollama', 'ministral-3:3b')", [$user['id_utilisateur']] ); $default_config = ['provider' => 'ollama', 'model_default' => 'ministral-3:3b']; } $default_provider = $default_config['provider']; $default_model = $default_config['model_default']; // Récupérer les modèles disponibles groupés par provider $models_by_provider = []; $all_models = $db->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 🟠 Désactivée ⚪ Aucune
Type : 🏠 Local (Jetson)
Modèle actuel :
Coût : Gratuit ✅
Modèle par défaut :
Quota : /
Dernière utilisation :

Aucune clé configurée pour

📊 Historique d'utilisation

Mois Provider Modèle Conversations Messages