projetcbaollm/main.py
2025-03-20 11:25:56 +01:00

97 lines
4.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 denvoyer."
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 na 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 den 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()