import gradio as gr from gtts import gTTS import uuid # ----------------------------- # SANTÉ PHYSIQUE # ----------------------------- def analyse_physique(texte): texte = texte.lower() conditions = { "Stressé": { "fr": "Je suis désolé(e) que vous traversiez cela. Voici quelques pistes simples issues de nos ressources : prendre un moment pour respirer, écrire ce que vous ressentez ou contacter une personne de confiance. Si ce mal-être devient intense ou persistant, il est important d’en parler à un professionnel..." "wo": "Baaxul ma ci sa xaalis bi ngay dund. Maa ngi la dégg. Am na ay pexe yu simples yu nekk ci sunuy ressources : jël benn waxtu ngir nga noyyi sa xel (respirer), bind li nga feel, wala wax ak ku la wóor te nga gëm ko. Su sa metit bi gëna tar walla di dox ak yàgg, li gëna am solo mooy nga wax ak ku am xam-xam ci loolu." }, "toux": { "fr": "Toux détectée. Hydratez-vous et évitez le froid.", "wo": "Yaram bi dafa di wër. Moytu sañ-sañ ak ndox." }, "maux de tête": { "fr": "Mal de tête. Reposez-vous dans un endroit calme.", "wo": "Bopp bi dafay wéy. Noppalu ci bérab bu dal." }, "douleur poitrine": { "fr": "⚠️ Douleur poitrine détectée. Consultez immédiatement un médecin.", "wo": "⚠️ Wér gu metti ci dënk. Demal ci docteur bu gaaw." }, "fatigue": { "fr": "Fatigue détectée. Dormez bien et hydratez-vous.", "wo": "Fatigue bi am na. Nelaw bu baax te naan ndox." } } fr_list, wo_list = [], [] niveau = "normal" for key, val in conditions.items(): if key in texte: fr_list.append(val["fr"]) wo_list.append(val["wo"]) if key == "douleur poitrine": niveau = "urgent" return " ".join(fr_list), " ".join(wo_list), niveau # ----------------------------- # SANTÉ MENTALE # ----------------------------- def analyse_mentale(texte): texte = texte.lower() conditions = { "stress": { "fr": "Je suis désolé(e) que vous traversiez cela. Voici quelques pistes simples issues de nos ressources : prendre un moment pour respirer, écrire ce que vous ressentez ou contacter une personne de confiance. Si ce mal-être devient intense ou persistant, il est important d’en parler à un professionnel...", "wo": "Baaxul ma ci sa xaalis bi ngay dund. Maa ngi la dégg. Am na ay pexe yu simples yu nekk ci sunuy ressources : jël benn waxtu ngir nga noyyi sa xel (respirer), bind li nga feel, wala wax ak ku la wóor te nga gëm ko. Su sa metit bi gëna tar walla di dox ak yàgg, li gëna am solo mooy nga wax ak ku am xam-xam ci loolu.." }, "anxiété": { "fr": "Signes d’anxiété légère. Écrivez ce que vous ressentez.", "wo": "Dafa mel ni yaakaar yaram. Bind li ngay sant." }, "fatigue mentale": { "fr": "Fatigue mentale. Réduisez les écrans et reposez-vous.", "wo": "Xel bi dafa sonn. Wàññi sreen yi." }, "tristesse": { "fr": "Moment difficile. Parlez à quelqu’un de confiance.", "wo": "Jafe jafe. Wax ak kenn ku la gëm." }, "motivation": { "fr": "Baisse de motivation. Commencez par une petite tâche.", "wo": "Motivation bi dafa wàññiku. Tambali ndank." }, "sommeil": { "fr": "Améliorez votre sommeil avec une routine régulière.", "wo": "Nelaw bi am solo. Tegginu sa jamono." } } fr_list, wo_list = [], [] for key, val in conditions.items(): if key in texte: fr_list.append(val["fr"]) wo_list.append(val["wo"]) return " ".join(fr_list), " ".join(wo_list) # ----------------------------- # AUDIO (SAFE) # ----------------------------- def speak(text): try: filename = f"audio_{uuid.uuid4().hex}.mp3" tts = gTTS(text=text, lang="fr") tts.save(filename) return filename except: return None # ----------------------------- # CHATBOT # ----------------------------- def chatbot(message): if not message or message.strip() == "": return "Veuillez entrer un texte", "", "", None fr_p, wo_p, niveau = analyse_physique(message) fr_m, wo_m = analyse_mentale(message) # fusion fr = (fr_p + " " + fr_m).strip() wo = (wo_p + " " + wo_m).strip() # fallback if fr == "": fr = "Symptômes non clairs. Surveillez votre état." wo = "Symptoom yi leerul. Seet sa yaram." # audio audio = speak(fr) return fr, wo, niveau, audio # ----------------------------- # UI GRADIO # ----------------------------- demo = gr.Interface( fn=chatbot, inputs=gr.Textbox(label="📝 Comment tu te sens ?"), outputs=[ gr.Textbox(label="🇫🇷 Français"), gr.Textbox(label="🇸🇳 Wolof"), gr.Audio(label="🔊 Audio") ], title="SentixRAG", description="psychoéducation" ) demo.launch()