Spaces:
Sleeping
Sleeping
File size: 4,295 Bytes
1b0a70f 6ec905a ee7e713 1b0a70f 6ec905a ee7e713 1b0a70f ee7e713 1b0a70f ee7e713 6ec905a ee7e713 6ec905a ee7e713 6ec905a ee7e713 6ec905a ee7e713 1b0a70f ee7e713 1b0a70f ee7e713 1b0a70f ee7e713 1b0a70f ee7e713 1b0a70f ee7e713 1b0a70f ee7e713 1b0a70f ee7e713 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
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}")
|