Programmes commited on
Commit
ca1537a
·
verified ·
1 Parent(s): 2575226

Upload 6 files

Browse files
.gitattributes CHANGED
@@ -1,2 +1,4 @@
1
  edu_pilot_gradio_space_final/faiss_index/documents.pkl filter=lfs diff=lfs merge=lfs -text
2
  edu_pilot_gradio_space_final/faiss_index/faiss_index.faiss filter=lfs diff=lfs merge=lfs -text
 
 
 
1
  edu_pilot_gradio_space_final/faiss_index/documents.pkl filter=lfs diff=lfs merge=lfs -text
2
  edu_pilot_gradio_space_final/faiss_index/faiss_index.faiss filter=lfs diff=lfs merge=lfs -text
3
+ faiss_index/documents.pkl filter=lfs diff=lfs merge=lfs -text
4
+ faiss_index/faiss_index.faiss filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: EduPilot
3
+ emoji: 🎓
4
+ colorFrom: blue
5
+ colorTo: yellow
6
+ sdk: gradio
7
+ sdk_version: "4.20.0"
8
+ app_file: app.py
9
+ pinned: false
10
+ ---
11
+
12
+ # EduPilot – Chatbot d’Orientation IA
13
+
14
+ Bienvenue ! Ce chatbot est un conseiller d'orientation IA intelligent, entraîné à répondre aux questions sur les études, les filières, et les métiers.
15
+
16
+ Pose-lui toutes tes questions sur ton avenir scolaire 🤖🎓
app.py ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ from rag_utils import load_faiss_index, get_embedding_model, query_index, nettoyer_context, generate_answer
4
+
5
+ # Chargement de l'index et du modèle d'embedding
6
+ index, documents = load_faiss_index()
7
+ embedder = get_embedding_model()
8
+
9
+ # Fonction de réponse avec gestion d'erreur
10
+ def ask_edu_pilot(message, history):
11
+ try:
12
+ context = query_index(message, index, documents, embedder)
13
+ cleaned_context = nettoyer_context("\n".join(context))
14
+ answer = generate_answer(message, cleaned_context)
15
+ return answer
16
+ except Exception as e:
17
+ print("Erreur lors de l'appel au modèle :", e)
18
+ return "😓 Le conseiller IA est temporairement indisponible. Merci de réessayer plus tard."
19
+
20
+ # Message d'accueil dans le chat
21
+ welcome_message = "👋 Bonjour ! Je suis **EduPilot**, ton conseiller IA.
22
+
23
+ Pose-moi une question sur ton avenir scolaire, les filières, les écoles ou les métiers qui t'intéressent. 🎓"
24
+
25
+ # Interface Gradio stylisée
26
+ gr.ChatInterface(
27
+ fn=ask_edu_pilot,
28
+ chatbot=gr.Chatbot(label="🎓 EduPilot - Conseiller IA", bubble_full_width=False, show_copy_button=True),
29
+ textbox=gr.Textbox(placeholder="Exemple : Que faire après un bac pro ?", container=True, scale=7),
30
+ title="🎓 EduPilot - Chatbot d'Orientation Scolaire",
31
+ theme=gr.themes.Soft(primary_hue="blue", secondary_hue="yellow"),
32
+ description=welcome_message,
33
+ ).launch()
faiss_index/documents.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4cc6100b51468166d2e0b5e0ca119f239e648cb5d539dd256dc886ef39f45f46
3
+ size 36366182
faiss_index/faiss_index.faiss ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:43efadcf8c063cedf2414c75df1dd801404c0ba263b0e35de8f21c25436d0694
3
+ size 165167661
rag_utils.py ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import faiss
2
+ import pickle
3
+ import numpy as np
4
+ import re
5
+ from sentence_transformers import SentenceTransformer
6
+ from huggingface_hub import hf_hub_download
7
+ from llama_cpp import Llama
8
+
9
+ def load_faiss_index(index_path="faiss_index/faiss_index.faiss", doc_path="faiss_index/documents.pkl"):
10
+ index = faiss.read_index(index_path)
11
+ with open(doc_path, "rb") as f:
12
+ documents = pickle.load(f)
13
+ return index, documents
14
+
15
+ def get_embedding_model():
16
+ return SentenceTransformer("sentence-transformers/multi-qa-MiniLM-L6-cos-v1")
17
+
18
+ def query_index(question, index, documents, model, k=3):
19
+ question_embedding = model.encode([question])
20
+ _, indices = index.search(np.array(question_embedding).astype("float32"), k)
21
+ return [documents[i] for i in indices[0]]
22
+
23
+ def nettoyer_context(context):
24
+ context = re.sub(r"\[\'(.*?)\'\]", r"\1", context)
25
+ context = context.replace("None", "")
26
+ return context
27
+
28
+
29
+
30
+ import os
31
+ from huggingface_hub import InferenceClient
32
+
33
+ client = InferenceClient("mistralai/Mistral-7B-Instruct-v0.1", token=os.environ.get("edup"))
34
+
35
+ def generate_answer(question, context):
36
+ prompt = f"""Voici des informations sur des établissements et formations :
37
+
38
+ {context}
39
+
40
+ Formule ta réponse comme un conseiller d’orientation bienveillant, de manière fluide et naturelle.
41
+
42
+ Question : {question}
43
+ Réponse :"""
44
+
45
+ response = client.text_generation(prompt, max_new_tokens=300)
46
+ return response
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ gradio
2
+ sentence-transformers
3
+ faiss-cpu
4
+ numpy
5
+ requests