Guillaumedbx commited on
Commit
5e8b427
·
1 Parent(s): 441e374

changement modele llm gratuit

Browse files
Files changed (2) hide show
  1. requirements.txt +3 -0
  2. src/streamlit_app.py +30 -41
requirements.txt CHANGED
@@ -16,3 +16,6 @@ chromadb
16
  # Optional but often useful
17
  tqdm # Pour affichage des barres de progression
18
  python-dotenv # Pour lire .env si tu stockes des clés API
 
 
 
 
16
  # Optional but often useful
17
  tqdm # Pour affichage des barres de progression
18
  python-dotenv # Pour lire .env si tu stockes des clés API
19
+
20
+ transformers
21
+ torch
src/streamlit_app.py CHANGED
@@ -9,6 +9,35 @@ from utils.load_embeddings import get_local_embeddings
9
  import requests
10
  import datetime
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  st.set_page_config(page_title="Assistant Juridique IA", layout="wide")
13
  st.title("📚 Assistant Juridique avec IA")
14
  st.write("Posez une question juridique.")
@@ -192,46 +221,6 @@ if st.button("📤 Envoyer") and user_input.strip():
192
  f"\n[RESPONSE]"
193
  )
194
  # Appel direct à l'API Inference Hugging Face pour Mixtral
195
- api_url = "https://api-inference.huggingface.co/models/mistralai/Mixtral-8x7B-Instruct-v0.1"
196
- headers = {"Authorization": f"Bearer {token}"}
197
- payload = {"inputs": prompt}
198
- try:
199
- response = requests.post(api_url, headers=headers, json=payload, timeout=60)
200
- response.raise_for_status()
201
- result_json = response.json()
202
- if isinstance(result_json, list) and len(result_json) > 0 and "generated_text" in result_json[0]:
203
- output_text = result_json[0]["generated_text"]
204
- # Post-traitement : ne garder que la réponse après [RESPONSE]
205
- if "[RESPONSE]" in output_text:
206
- output_text = output_text.split("[RESPONSE]", 1)[-1].lstrip("\n :")
207
- elif isinstance(result_json, dict) and "error" in result_json:
208
- st.error(f"Erreur Hugging Face API : {result_json['error']}")
209
- st.stop()
210
- else:
211
- output_text = str(result_json)
212
- except Exception as e:
213
- import traceback
214
- st.error(f"❌ Erreur pendant la génération de la réponse : {e}")
215
- st.error(f"Type d'erreur : {type(e).__name__}")
216
- st.expander("Voir détails de l'erreur").write(traceback.format_exc())
217
- st.write("### Question utilisateur")
218
- st.write(user_input)
219
- st.write("### Nombre de documents récupérés :", len(filtered_docs))
220
- st.write("### Aperçu du premier document (métadonnées + contenu)")
221
- if filtered_docs:
222
- doc, score, pertinence = filtered_docs[0]
223
- st.json({
224
- "metadata": doc.metadata,
225
- "pertinence": pertinence,
226
- "page_content_preview": doc.page_content[:500]
227
- })
228
- st.stop()
229
- # Gestion explicite de l'erreur 402 Hugging Face API
230
- except requests.exceptions.HTTPError as e:
231
- if hasattr(e.response, 'status_code') and e.response.status_code == 402:
232
- st.error("❌ Erreur 402 : L’accès au modèle Mixtral via l’API Hugging Face nécessite un abonnement payant. Veuillez vérifier votre clé API ou utiliser un modèle local.")
233
- st.stop()
234
- else:
235
- raise
236
  st.subheader("✅ Réponse générée")
237
  st.write(output_text)
 
9
  import requests
10
  import datetime
11
 
12
+ from transformers import AutoTokenizer, AutoModelForCausalLM
13
+ import torch
14
+
15
+ @st.cache_resource
16
+ def load_local_model():
17
+ model_id = "mistralai/Mistral-7B-Instruct-v0.2"
18
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
19
+ model = AutoModelForCausalLM.from_pretrained(
20
+ model_id,
21
+ torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
22
+ device_map="auto"
23
+ )
24
+ return tokenizer, model
25
+
26
+ tokenizer, model = load_local_model()
27
+
28
+ def generate_response(prompt):
29
+ inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
30
+ with torch.no_grad():
31
+ outputs = model.generate(
32
+ **inputs,
33
+ max_new_tokens=512,
34
+ do_sample=True,
35
+ temperature=0.7,
36
+ top_p=0.9
37
+ )
38
+ return tokenizer.decode(outputs[0], skip_special_tokens=True).split("[RESPONSE]")[-1].strip()
39
+
40
+
41
  st.set_page_config(page_title="Assistant Juridique IA", layout="wide")
42
  st.title("📚 Assistant Juridique avec IA")
43
  st.write("Posez une question juridique.")
 
221
  f"\n[RESPONSE]"
222
  )
223
  # Appel direct à l'API Inference Hugging Face pour Mixtral
224
+ output_text = generate_response(prompt)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
225
  st.subheader("✅ Réponse générée")
226
  st.write(output_text)