File size: 1,817 Bytes
3ae8669
fb4344e
010a2bc
 
fa54a3b
fb4344e
79d1803
fb4344e
 
db67407
010a2bc
 
3ae8669
db67407
c1bfc7d
fa54a3b
010a2bc
 
 
 
607d03a
010a2bc
 
 
185dd76
db67407
c1bfc7d
db67407
010a2bc
db67407
010a2bc
 
185dd76
db67407
2f6cb59
d3c57cf
db67407
d3c57cf
 
 
37d546c
db67407
 
608a07b
 
53a2151
db67407
 
53a2151
db67407
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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()