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()