pipeline2 / app2.py
Nourhenem's picture
initial commit
f92da22 verified
raw
history blame
3.98 kB
#!/usr/bin/env python3
"""
Interface Gradio : Transcription médicale → Correction → Matching → Rapport
"""
import gradio as gr
import sys
import os
# Fix pour le problème de pickle avec TemplateInfo
import template_db_creation
sys.modules['__main__'].TemplateInfo = template_db_creation.TemplateInfo
from template_db_creation import MedicalTemplateParser
from smart_match import TranscriptionMatcher
from correcteur import MedicalTranscriptionProcessor, AZURE_OPENAI_DEPLOYMENT
# Chemin hardcodé vers la base de données
DB_PATH = "/Users/macbook/medical-agent/medical-agent/templates/medical_templates.pkl"
# Variables globales
parser = None
matcher = None
def initialize_system():
"""Initialise le système au démarrage"""
global parser, matcher
try:
print(f"📂 Chargement de la base de données: {DB_PATH}")
parser = MedicalTemplateParser()
parser.load_database(DB_PATH)
matcher = TranscriptionMatcher(parser)
print(f"✅ Système initialisé avec {len(parser.templates)} templates")
return True
except Exception as e:
print(f"❌ Erreur initialisation: {e}")
return False
def process_transcription(transcription: str):
"""
Traite la transcription médicale complète
Args:
transcription: Texte de la transcription
Returns:
Tuple (transcription_corrigée, template_vide, rapport_final)
"""
try:
# Étape 1: Correction ASR
print("🔧 Étape 1: Correction de la transcription...")
processor = MedicalTranscriptionProcessor(AZURE_OPENAI_DEPLOYMENT)
result = processor.process_transcription(transcription)
corrected_transcription = result.final_corrected_text
# Étape 2: Matching et remplissage du template
print("🔍 Étape 2: Recherche du template approprié...")
results = matcher.match_and_fill(corrected_transcription, return_top_k=1)
if not results:
return (
corrected_transcription,
"❌ Aucun template approprié trouvé",
"❌ Impossible de générer le rapport"
)
best_result = results[0]
# Préparer le template vide avec toutes les informations
template_vide = f"{best_result.template_id}\n"
template_vide += "=" * len(best_result.template_id) + "\n"
template_vide += best_result.template_content
# Préparer le rapport final rempli avec toutes les sections
rapport_final = f"{best_result.template_id}\n"
rapport_final += "=" * len(best_result.template_id) + "\n"
# Ajouter toutes les sections remplies
rapport_final += best_result.filled_template
print(f"✅ Traitement terminé - Template: {best_result.template_id}")
return corrected_transcription, template_vide, rapport_final
except Exception as e:
error_msg = f"❌ Erreur: {str(e)}"
print(error_msg)
return error_msg, "", ""
# Initialiser le système au démarrage
print("🚀 Initialisation du système...")
if not initialize_system():
print("⚠️ Erreur lors de l'initialisation - vérifiez le chemin de la DB")
# Interface Gradio
demo = gr.Interface(
fn=process_transcription,
inputs=gr.Textbox(
lines=15,
label="📝 Transcription médicale",
placeholder="Collez ici la transcription de l'examen médical..."
),
outputs=[
gr.Textbox(lines=20, label="✅ Transcription corrigée", show_copy_button=True),
gr.Textbox(lines=20, label="📋 Rapport à remplir (Template)", show_copy_button=True),
gr.Textbox(lines=20, label="📄 Compte-rendu structuré final", show_copy_button=True),
],
title="🏥 Génération de comptes-rendus structurés",
)
if __name__ == "__main__":
demo.launch(share=True)