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