ibrahimBlyc commited on
Commit
ee7e713
·
1 Parent(s): 6ec905a

Update space

Browse files
Files changed (1) hide show
  1. app.py +95 -50
app.py CHANGED
@@ -1,76 +1,121 @@
1
  import gradio as gr
2
  import requests
 
3
 
4
  def respond(message, history, system_message, max_tokens, temperature, top_p):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  messages = [{"role": "system", "content": system_message}]
6
-
7
- for val in history:
8
- if val[0]:
9
- messages.append({"role": "user", "content": val[0]})
10
- if val[1]:
11
- messages.append({"role": "assistant", "content": val[1]})
12
-
13
  messages.append({"role": "user", "content": message})
14
-
15
- response = ""
16
-
17
  data = {
18
- "model": "hf.co/ibrahimBlyc/LA_Llama:latest",
19
- "prompt": "", # On construit le prompt complet ci-dessous
20
- "max_tokens": max_tokens,
21
- "temperature": temperature,
22
- "top_p": top_p
23
- # Autres paramètres Ollama si nécessaire
 
 
24
  }
25
-
26
- # Construire le prompt complet à partir des messages
27
- prompt = ""
28
- for msg in messages:
29
- prompt += f"{msg['role']}: {msg['content']}\n"
30
- data["prompt"] = prompt
31
-
32
- url = "http://localhost:11434/api/generate"
33
 
34
  try:
35
- stream_response = requests.post(url, json=data, stream=True)
36
- stream_response.raise_for_status() # Lève une exception si le code de status n'est pas 2xx
37
-
38
- for chunk in stream_response.iter_lines():
39
- if chunk:
40
- decoded_chunk = chunk.decode()
41
- try:
42
- response_json = eval(decoded_chunk) # Évalue la réponse JSON. Attention à la sécurité !
43
- token = response_json.get("response", "")
44
-
45
- if token:
46
- response += token
47
- yield response
48
- except (SyntaxError, NameError, json.JSONDecodeError) as e:
49
- print(f"Erreur lors du décodage du chunk : {e}. Chunk : {decoded_chunk}")
50
- yield f"Erreur: Impossible de décoder la réponse du serveur."
51
- return
52
-
 
 
 
 
 
 
 
 
53
  except requests.exceptions.RequestException as e:
54
  print(f"Erreur de requête : {e}")
55
- yield f"Erreur: Impossible de communiquer avec le serveur Ollama."
56
-
57
 
 
58
  demo = gr.ChatInterface(
59
  respond,
 
 
60
  additional_inputs=[
61
- gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
62
- gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
63
- gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  gr.Slider(
65
  minimum=0.1,
66
  maximum=1.0,
67
  value=0.95,
68
  step=0.05,
69
- label="Top-p (nucleus sampling)",
70
  ),
71
  ],
 
72
  )
73
 
74
-
75
  if __name__ == "__main__":
76
- demo.launch(share=True)
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
  import requests
3
+ import json
4
 
5
  def respond(message, history, system_message, max_tokens, temperature, top_p):
6
+ """
7
+ Fonction pour générer une réponse en utilisant Ollama
8
+
9
+ Args:
10
+ - message: Le dernier message de l'utilisateur
11
+ - history: Historique des conversations
12
+ - system_message: Message système pour guider le comportement du modèle
13
+ - max_tokens: Nombre maximal de tokens à générer
14
+ - temperature: Contrôle la créativité de la réponse
15
+ - top_p: Échantillonnage nucléaire
16
+
17
+ Returns:
18
+ - Réponse générée par le modèle
19
+ """
20
+ # Préparer les messages pour le contexte
21
  messages = [{"role": "system", "content": system_message}]
22
+ for user_msg, assistant_msg in history:
23
+ if user_msg:
24
+ messages.append({"role": "user", "content": user_msg})
25
+ if assistant_msg:
26
+ messages.append({"role": "assistant", "content": assistant_msg})
 
 
27
  messages.append({"role": "user", "content": message})
28
+
29
+ # Préparer les données pour la requête Ollama
 
30
  data = {
31
+ "model": "hf.co/ibrahimBlyc/LA_Llama:latest", # Assurez-vous que ce modèle est disponible localement
32
+ "messages": messages,
33
+ "stream": True,
34
+ "options": {
35
+ "num_predict": max_tokens,
36
+ "temperature": temperature,
37
+ "top_p": top_p
38
+ }
39
  }
40
+
41
+ # URL du serveur Ollama local
42
+ url = "http://localhost:11434/api/chat"
 
 
 
 
 
43
 
44
  try:
45
+ # Envoyer la requête en streaming
46
+ response = ""
47
+ with requests.post(url, json=data, stream=True) as stream_response:
48
+ stream_response.raise_for_status()
49
+ for chunk in stream_response.iter_lines():
50
+ if chunk:
51
+ try:
52
+ # Décoder correctement le chunk JSON
53
+ chunk_decoded = chunk.decode('utf-8')
54
+ chunk_json = json.loads(chunk_decoded)
55
+
56
+ # Extraire le token de la réponse
57
+ if 'message' in chunk_json and 'content' in chunk_json['message']:
58
+ token = chunk_json['message']['content']
59
+ response += token
60
+ yield response
61
+
62
+ except json.JSONDecodeError as e:
63
+ print(f"Erreur de décodage JSON : {e}")
64
+ yield f"Erreur : Impossible de décoder la réponse du serveur."
65
+ return
66
+ except Exception as e:
67
+ print(f"Erreur inattendue : {e}")
68
+ yield f"Erreur : Une erreur inattendue s'est produite."
69
+ return
70
+
71
  except requests.exceptions.RequestException as e:
72
  print(f"Erreur de requête : {e}")
73
+ yield f"Erreur : Impossible de communiquer avec le serveur Ollama."
 
74
 
75
+ # Créer l'interface Gradio
76
  demo = gr.ChatInterface(
77
  respond,
78
+ title="Ollama Chatbot",
79
+ description="Discutez avec un modèle Ollama local",
80
  additional_inputs=[
81
+ gr.Textbox(
82
+ value="Tu es un assistant IA amical et utile qui répond de manière concise et informative.",
83
+ label="Message système",
84
+ lines=3
85
+ ),
86
+ gr.Slider(
87
+ minimum=1,
88
+ maximum=2048,
89
+ value=512,
90
+ step=1,
91
+ label="Nombre max de tokens"
92
+ ),
93
+ gr.Slider(
94
+ minimum=0.1,
95
+ maximum=2.0,
96
+ value=0.7,
97
+ step=0.1,
98
+ label="Température"
99
+ ),
100
  gr.Slider(
101
  minimum=0.1,
102
  maximum=1.0,
103
  value=0.95,
104
  step=0.05,
105
+ label="Top-p (échantillonnage nucléaire)"
106
  ),
107
  ],
108
+ theme="default"
109
  )
110
 
111
+ # Lancement de l'application
112
  if __name__ == "__main__":
113
+ # Vérifier que le serveur Ollama est bien installé
114
+ try:
115
+ import ollama
116
+ print("Serveur Ollama détecté. Lancement de l'interface...")
117
+ demo.launch(share=True)
118
+ except ImportError:
119
+ print("Le serveur Ollama n'est pas installé. Veuillez l'installer.")
120
+ except Exception as e:
121
+ print(f"Erreur lors du lancement : {e}")