farasha-chatbot / app.py
essaidiAnass's picture
Update app.py
2f6cb59 verified
Raw
History Blame Contribute Delete
1.82 kB
import gradio as gr
import pandas as pd
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
from transformers import pipeline
# Charger la FAQ
df = pd.read_csv("faq.csv", names=["question", "reponse"])
# Embeddings pour la similarité
model_embed = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
faq_embeddings = model_embed.encode(df["question"].tolist())
# Générateur (ex. flan-t5)
generator = pipeline("text2text-generation", model="google/flan-t5-base")
def generate_prompt(user_question):
user_emb = model_embed.encode([user_question])
similarities = cosine_similarity(user_emb, faq_embeddings)[0]
top_indices = similarities.argsort()[-3:][::-1]
context = ""
for i in top_indices:
context += f"Q: {df.iloc[i]['question']}\nA: {df.iloc[i]['reponse']}\n\n"
prompt = f"""Tu es un assistant pour Farasha Systems.
Voici des exemples issus de la FAQ :
{context}
Question : {user_question}
Réponse :"""
return prompt
# Fonction commune pour les deux interfaces
def chat_fn(user_message, history):
prompt = generate_prompt(user_message)
response = generator(prompt, max_new_tokens=256)
answer = response[0]['generated_text'].strip()
return answer
# ✅ Interface conversationnelle (type ChatGPT)
chat_ui = gr.ChatInterface(
fn=chat_fn,
title="🤖 Farasha Assistant",
description="Posez une question sur Farasha Systems.",
theme="soft"
)
# ✅ Interface API REST pour JS
api_interface = gr.Interface(
fn=chat_fn,
inputs=gr.Textbox(lines=2, placeholder="Posez votre question ici..."),
outputs="text",
api_name="chat"
)
# ✅ Lancement des deux
demo = gr.TabbedInterface([chat_ui, api_interface], tab_names=["💬 Chatbot", "🔧 API"])
demo.launch()