Spaces:
Sleeping
Sleeping
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() | |