Antho24's picture
Update app.py
be4ebbd verified
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()