import gradio as gr import requests import json import os from datetime import datetime from ollama_manager import list_models, start_model, stop_ollama, get_active_model from chat_manager import save_conversation, load_conversation # 📂 Import gestion des conversations # 📌 Configuration serveur OVH Ollama OLLAMA_SERVER = "http://217.182.105.173:11434/api" MODEL_NAME = get_active_model() # Modèle par défaut def chat_with_ollama(user, prompt): """Envoie le prompt à Ollama, récupère la réponse et sauvegarde la conversation.""" if not user: return "⚠️ Veuillez entrer un identifiant utilisateur avant de chatter." if not prompt.strip(): return "⚠️ Veuillez entrer un message avant d’envoyer." data = { "model": MODEL_NAME, "prompt": prompt, "stream": False } headers = {"Content-Type": "application/json"} try: response = requests.post(f"{OLLAMA_SERVER}/generate", json=data, headers=headers) if response.status_code != 200: return f"❌ Erreur HTTP {response.status_code}: {response.text}" response_json = response.json() bot_response = response_json.get("response", "").strip() if bot_response: save_conversation(user, prompt, bot_response) # ✅ Enregistrement de la conversation return bot_response if bot_response else "🤖 Ollama n’a pas généré de réponse." except requests.exceptions.RequestException as e: return f"❌ Erreur de connexion à Ollama : {str(e)}" def update_model(selected_model): """Met à jour le modèle actif après arrêt du précédent.""" global MODEL_NAME stop_ollama() # ✅ On arrête le modèle actif avant d’en lancer un autre result = start_model(selected_model) if "✅" in result: MODEL_NAME = selected_model return result # 🎨 Interface Gradio with gr.Blocks(css="body {background-color: #f8f9fa; font-family: Arial, sans-serif;}") as iface: with gr.Tab("🔧 Configuration Modèles"): gr.Markdown("

🔧 Gestion des modèles Ollama

") models_list = gr.Dropdown( label="Modèles disponibles", choices=list_models(), value=MODEL_NAME, interactive=True ) active_model_display = gr.Textbox(label="Modèle actif", value=MODEL_NAME, interactive=False) refresh_button = gr.Button("🔄 Rafraîchir modèles") start_button = gr.Button("🚀 Lancer le modèle sélectionné") stop_button = gr.Button("🛑 Arrêter Ollama") check_button = gr.Button("🔍 Vérifier modèle actif") # ✅ Actions refresh_button.click(lambda: list_models(), outputs=models_list) check_button.click(lambda: get_active_model(), outputs=active_model_display) start_button.click(update_model, inputs=[models_list], outputs=active_model_display) stop_button.click(stop_ollama, outputs=active_model_display) with gr.Tab("💬 Chat"): gr.Markdown("

đź’¬ Chat avec Ollama

") user_input = gr.Textbox(label="Nom d'utilisateur", placeholder="Entrez votre nom...") chat_input = gr.Textbox(label="Votre message", placeholder="Tapez votre question ici...") chat_button = gr.Button("Envoyer") chat_output = gr.Textbox(label="Réponse", interactive=False) chat_button.click(chat_with_ollama, inputs=[user_input, chat_input], outputs=chat_output) with gr.Tab("📜 Historique des conversations"): gr.Markdown("

📜 Historique des conversations

") history_user_input = gr.Textbox(label="Nom d'utilisateur", placeholder="Entrez votre nom pour voir votre historique") history_button = gr.Button("🔄 Charger l'historique") history_output = gr.Textbox(label="Historique des messages", interactive=False, lines=10) history_button.click(load_conversation, inputs=[history_user_input], outputs=history_output) iface.launch()