LA_Llama_Chat / app.py
ibrahimBlyc's picture
Update space
ee7e713
raw
history blame
4.3 kB
import gradio as gr
import requests
import json
def respond(message, history, system_message, max_tokens, temperature, top_p):
"""
Fonction pour générer une réponse en utilisant Ollama
Args:
- message: Le dernier message de l'utilisateur
- history: Historique des conversations
- system_message: Message système pour guider le comportement du modèle
- max_tokens: Nombre maximal de tokens à générer
- temperature: Contrôle la créativité de la réponse
- top_p: Échantillonnage nucléaire
Returns:
- Réponse générée par le modèle
"""
# Préparer les messages pour le contexte
messages = [{"role": "system", "content": system_message}]
for user_msg, assistant_msg in history:
if user_msg:
messages.append({"role": "user", "content": user_msg})
if assistant_msg:
messages.append({"role": "assistant", "content": assistant_msg})
messages.append({"role": "user", "content": message})
# Préparer les données pour la requête Ollama
data = {
"model": "hf.co/ibrahimBlyc/LA_Llama:latest", # Assurez-vous que ce modèle est disponible localement
"messages": messages,
"stream": True,
"options": {
"num_predict": max_tokens,
"temperature": temperature,
"top_p": top_p
}
}
# URL du serveur Ollama local
url = "http://localhost:11434/api/chat"
try:
# Envoyer la requête en streaming
response = ""
with requests.post(url, json=data, stream=True) as stream_response:
stream_response.raise_for_status()
for chunk in stream_response.iter_lines():
if chunk:
try:
# Décoder correctement le chunk JSON
chunk_decoded = chunk.decode('utf-8')
chunk_json = json.loads(chunk_decoded)
# Extraire le token de la réponse
if 'message' in chunk_json and 'content' in chunk_json['message']:
token = chunk_json['message']['content']
response += token
yield response
except json.JSONDecodeError as e:
print(f"Erreur de décodage JSON : {e}")
yield f"Erreur : Impossible de décoder la réponse du serveur."
return
except Exception as e:
print(f"Erreur inattendue : {e}")
yield f"Erreur : Une erreur inattendue s'est produite."
return
except requests.exceptions.RequestException as e:
print(f"Erreur de requête : {e}")
yield f"Erreur : Impossible de communiquer avec le serveur Ollama."
# Créer l'interface Gradio
demo = gr.ChatInterface(
respond,
title="Ollama Chatbot",
description="Discutez avec un modèle Ollama local",
additional_inputs=[
gr.Textbox(
value="Tu es un assistant IA amical et utile qui répond de manière concise et informative.",
label="Message système",
lines=3
),
gr.Slider(
minimum=1,
maximum=2048,
value=512,
step=1,
label="Nombre max de tokens"
),
gr.Slider(
minimum=0.1,
maximum=2.0,
value=0.7,
step=0.1,
label="Température"
),
gr.Slider(
minimum=0.1,
maximum=1.0,
value=0.95,
step=0.05,
label="Top-p (échantillonnage nucléaire)"
),
],
theme="default"
)
# Lancement de l'application
if __name__ == "__main__":
# Vérifier que le serveur Ollama est bien installé
try:
import ollama
print("Serveur Ollama détecté. Lancement de l'interface...")
demo.launch(share=True)
except ImportError:
print("Le serveur Ollama n'est pas installé. Veuillez l'installer.")
except Exception as e:
print(f"Erreur lors du lancement : {e}")