File size: 2,002 Bytes
95766bb
5e9ce93
7f56798
 
 
d7fc645
7f56798
390c234
33be1fe
 
 
383666d
33be1fe
 
 
 
 
 
 
 
383666d
244366b
383666d
 
 
ea5d2c5
c440b7d
7f56798
 
ea5d2c5
7f56798
383666d
 
d199e78
7f56798
 
 
 
d199e78
383666d
 
7f56798
 
 
 
 
383666d
7f56798
 
 
 
 
 
 
95766bb
be4ebbd
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
import gradio as gr
import os
import requests
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# Base de connaissances
REPONSES = {
    # DEVISES
    "devise": "🛡️ Notre cri : 'Unis comme les racines du chêne, libres comme le vent des plaines !'",
    "serment": "⚔️ Je jure sur le sang de mes ancêtres : vaincre ou mourir !",
    
    # HISTOIRE
    "alésia": "52 av. J.-C. : Siège héroïque. Nous avons tenu 30 jours contre 10 légions romaines !",
    "gergovie": "Victoire éclatante ! César y perdit 700 soldats et son orgueil.",
    "combats": "Nos batailles mémorables : Gergovie (-52), Alésia (-52), Lutèce (-53)",
    
    # STRATÉGIE
    "tactique": "3 secrets :\n1. Guérilla éclair\n2. Terrain accidenté\n3. Alliance des peuples",
    "romains": "Leurs forces : discipline. Leur faiblesse : méprisent notre terre !"
}  # <-- Fermeture correcte du dictionnaire

# Préparation IA
corpus = list(REPONSES.keys())
vectorizer = TfidfVectorizer().fit(corpus)

def chatbot(question):
    # Nettoyage
    question = question.lower().strip(" ?!.,")
    
    # 1. Recherche exacte
    if question in REPONSES:
        return REPONSES[question]
    
    # 2. Similarité sémantique (IA légère)
    question_vec = vectorizer.transform([question])
    sim = cosine_similarity(question_vec, vectorizer.transform(corpus))
    idx = sim.argmax()
    
    if sim.max() > 0.5:  # Seuil de confiance
        return REPONSES[corpus[idx]]
    
    # 3. Fallback intelligent
    return (
        "Par Teutatès ! Je ne reconnais pas cette question. "
        "Essaie avec : 'devise', 'Alésia', ou 'tactiques'"
    )

# Interface
with gr.Blocks(theme=gr.themes.Base(primary_hue="amber")) as app:
    gr.Markdown("# 🏛️ Encyclopédie Gauloise")
    question = gr.Textbox(label="Interrogez nos sagas")
    reponse = gr.Textbox(label="Chroniques", lines=5)
    question.submit(chatbot, question, reponse)

app.launch()