Assistant / app.py
ayouubelb's picture
Update app.py
8f030af verified
import google.generativeai as genai
import gradio as gr
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
from datasets import load_dataset
import pandas as pd
# Charger les embeddings sauvegardés
dataset = load_dataset("ayouubelb/embeddings")
data = pd.DataFrame(dataset)
embeddings = np.array(data['embedding']).astype('float32')
texts = data['metadata']
# Créer un index FAISS
dim = embeddings.shape[1]
index = faiss.IndexFlatIP(dim)
index.add(embeddings)
genai.configure(api_key="AIzaSyBLlaGtxtzHmVgMfOC02AfgvOoKTwXGGIc")
model_gene = genai.GenerativeModel("gemini-2.0-flash")
model = SentenceTransformer("dangvantuan/sentence-camembert-base")
def rag_legal_bot(user_input):
# Générer l'embedding de la requête
query_embedding = model.encode([user_input]).astype("float32")
distances, indices = index.search(query_embedding, 5)
print(distances, indices)
# Contexte
contextes = [texts[i] for i in indices[0]]
contexte = "\n\n".join([f"[Contexte {i+1}]\n{ctx}" for i, ctx in enumerate(contextes)])
#le prompt pour Gemini
prompt = f"""
Tu es un assistant juridique expert en droit français. Ta mission est de fournir des réponses précises,
factuelles, claires et pédagogiques, destinées à un public mixte (non-juristes et professionnels).
Tu t’appuies uniquement sur les textes de loi et contextes fournis, sans interpréter ni spéculer.
Consignes détaillées :
1. Rigueur juridique :
- Cite précisément les articles de loi pertinents.
- Mentionne toujours le critère ou principe juridique central lié à la question (ex. lien de subordination pour contrat de travail).
- Ne réponds qu’à partir du contexte et des lois fournies.
2. Structure et pédagogie :
- Organise ta réponse avec titres, sous-titres et listes à puces pour faciliter la lecture.
- Explique clairement les notions juridiques, en évitant le jargon technique inutile.
- Utilise un exemple concret chaque fois que possible pour illustrer les concepts.
3. Portée juridique :
- Indique la portée, les conditions d’application et les conséquences juridiques des règles.
- Mentionne les enjeux pratiques ou contentieux liés au sujet (ex. risques de requalification, effets sur les droits).
- Précise quand des informations complémentaires seraient nécessaires.
4. Objectivité et professionnalisme :
- Reste neutre, rigoureux et factuel, sans jugement ni supposition.
- Si un élément manque ou n’est pas clair, indique-le explicitement.
- Termine toujours par un résumé clair et synthétique des points essentiels.
Exemple d’introduction dans la réponse :
« Selon l’article X du Code Y, … »
« Le critère principal pour distinguer est … »
« Cette règle a pour conséquence … »
Ce prompt incite à :
- Mettre en avant le critère clé dans la réponse (ex. lien de subordination)
- Donner la portée pratique et juridique des règles
- Structurer la réponse de façon pédagogique et professionnelle
- Signaler les limites éventuelles du contexte fourni
Question : {user_input}
{contexte}
Réponse :
"""
response = model_gene.generate_content(prompt)
print("Contexte utilisé :\n", contextes)
return response.text
#Interface Gradio
interface = gr.Interface(
fn=rag_legal_bot,
inputs=gr.Textbox(label="💬 Entrez votre question ici :"),
outputs=gr.Textbox(label="📢 Réponse du chatbot :"),
title="🧑‍⚖️ Assistant Juridique",
description="Posez votre question juridique."
)
interface.launch()