import gradio as gr import os import tempfile from datetime import datetime import logging import json from ai_enhance import AIEnhance from presentation_generator import PresentationGenerator # Configuration logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) # Initialisation des services ai_service = AIEnhance() presentation_generator = PresentationGenerator() def create_presentation_structure(texte): """Crée la structure de présentation avec analyse IA""" analysis = ai_service.analyze_text_advanced(texte) summary = ai_service.smart_summarize(texte) structure = { "title": f"Présentation: {analysis['content_analysis'].capitalize()}", "slides": analysis["recommended_structure"]["slides"], "key_points": analysis["keywords"][:8], "style_recommendation": analysis["recommended_structure"]["recommended_style"], "analysis_metadata": analysis } return structure, summary def generate_presentation_gradio(texte, style="professionnel"): """Version Gradio de votre fonction generate()""" try: if not texte or len(texte.strip()) < 50: return None, "❌ Veuillez entrer au moins 50 caractères." logger.info(f"🚀 Génération IA pour {len(texte)} caractères") # VOTRE LOGIQUE EXISTANTE structure, summary = create_presentation_structure(texte) filename = presentation_generator.generate_presentation(structure, style) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") download_filename = f"presentation_ia_{timestamp}.pptx" logger.info("✅ Présentation générée avec succès!") return filename, f"🎉 Présentation générée! ({len(structure['slides'])} slides)" except Exception as e: logger.error(f"❌ Erreur lors de la génération: {e}") return None, f"❌ Erreur: {str(e)}" def analyze_text_gradio(texte): """Version Gradio de votre api_analyze()""" try: if not texte or len(texte.strip()) < 10: return "❌ Texte trop court. Minimum 10 caractères." # VOTRE LOGIQUE EXISTANTE structure, summary = create_presentation_structure(texte) # Formatage pour l'interface Gradio result = f""" ## 📊 Analyse IA du Texte **Statistiques:** - {structure['analysis_metadata']['statistics']['word_count']} mots - {structure['analysis_metadata']['statistics']['sentence_count']} phrases - {structure['analysis_metadata']['statistics']['paragraph_count']} paragraphes **🎯 Thèmes identifiés:** {', '.join(structure['key_points'][:8])} **📝 Résumé:** {summary} **🏗️ Structure proposée:** """ for i, slide in enumerate(structure['slides']): result += f"\n{i+1}. **{slide['title']}** - {slide['content'][:100]}..." return result except Exception as e: return f"❌ Erreur d'analyse: {str(e)}" def summarize_text_gradio(texte): """Version Gradio de votre api_summarize()""" try: if not texte.strip(): return "❌ Texte manquant" # VOTRE LOGIQUE EXISTANTE summary = ai_service.smart_summarize(texte) return f"**📄 Résumé:**\n\n{summary}" except Exception as e: return f"❌ Erreur résumé: {str(e)}" # INTERFACE GRADIO with gr.Blocks(theme=gr.themes.Soft(), title="Générateur de Présentation IA") as demo: gr.Markdown("# 🧠 Générateur de Présentation IA Intelligente") gr.Markdown("Powered by Lab_Math_and Labhp & CIE Label_Bertoua") with gr.Tab("🚀 Générer Présentation"): with gr.Row(): with gr.Column(): text_input = gr.Textbox( label="📝 Collez votre texte ici", placeholder="Collez ou tapez votre texte, article, rapport...", lines=10, max_lines=20 ) style_dropdown = gr.Dropdown( choices=["professionnel", "moderne", "creatif"], label="🎨 Style de présentation", value="professionnel" ) generate_btn = gr.Button("🚀 Générer la Présentation", variant="primary") with gr.Column(): output_file = gr.File(label="📥 Présentation Générée") output_message = gr.Textbox(label="📋 Statut", interactive=False) generate_btn.click( fn=generate_presentation_gradio, inputs=[text_input, style_dropdown], outputs=[output_file, output_message] ) with gr.Tab("🔍 Analyser le Texte"): with gr.Row(): with gr.Column(): analyze_text_input = gr.Textbox( label="📝 Texte à analyser", placeholder="Collez votre texte pour l'analyse IA...", lines=8 ) analyze_btn = gr.Button("🔍 Analyser avec IA", variant="secondary") with gr.Column(): analysis_output = gr.Markdown(label="📊 Résultats de l'analyse") analyze_btn.click( fn=analyze_text_gradio, inputs=[analyze_text_input], outputs=[analysis_output] ) with gr.Tab("📄 Résumer le Texte"): with gr.Row(): with gr.Column(): summarize_text_input = gr.Textbox( label="📝 Texte à résumer", placeholder="Collez votre texte pour le résumé IA...", lines=8 ) summarize_btn = gr.Button("📊 Générer Résumé", variant="secondary") with gr.Column(): summary_output = gr.Markdown(label="📋 Résumé généré") summarize_btn.click( fn=summarize_text_gradio, inputs=[summarize_text_input], outputs=[summary_output] ) if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860)