mirror of
https://github.com/Ladebeze66/projetcbaollm.git
synced 2025-12-15 20:06:53 +01:00
97 lines
4.0 KiB
Python
97 lines
4.0 KiB
Python
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("<h2 style='text-align: center;'>🔧 Gestion des modèles Ollama</h2>")
|
||
|
||
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("<h2 style='text-align: center;'>💬 Chat avec Ollama</h2>")
|
||
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("<h2 style='text-align: center;'>📜 Historique des conversations</h2>")
|
||
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()
|