import gradio as gr import os from src.processing.gemini_processor import GeminiProcessor from src.analysis.coverage_generator import CoverageGenerator from pathlib import Path def process_pdf(pdf_file, progress=gr.Progress()): if pdf_file is None: raise gr.Error("Please upload a PDF file") console_output = [] def update_console(message): console_output.append(message) return "\n".join(console_output) try: # Initialize processors progress(0.1, desc="Initializing...") processor = GeminiProcessor() coverage_gen = CoverageGenerator() # Clean screenplay progress(0.2, desc="Processing screenplay...") update_console("Starting screenplay processing...") cleaned_path = Path("cleaned_screenplay_long.txt") success = processor.process_screenplay(pdf_file.name, str(cleaned_path)) if not success: raise gr.Error("Failed to process screenplay") with open(cleaned_path, 'r') as f: cleaned_text = f.read() update_console("Screenplay processing complete!") # Generate coverage progress(0.6, desc="Generating coverage...") update_console("Starting coverage generation...") success = coverage_gen.generate_coverage(cleaned_path) if not success: raise gr.Error("Failed to generate coverage") with open(Path("coverage.txt"), 'r') as f: coverage = f.read() update_console("Coverage generation complete!") progress(1.0, desc="Complete!") return cleaned_text, coverage, "\n".join(console_output) except Exception as e: error_msg = f"Error: {str(e)}" update_console(error_msg) raise gr.Error(error_msg) with gr.Blocks(title="Screenplay Coverage Generator") as demo: gr.Markdown("# Screenplay Coverage Generator") with gr.Row(): file_input = gr.File(label="Upload Screenplay PDF", file_types=[".pdf"]) with gr.Row(): process_btn = gr.Button("Process Screenplay") with gr.Row(): console = gr.Textbox(label="Console Output", lines=5) with gr.Tabs(): with gr.TabItem("Cleaned Screenplay"): cleaned_output = gr.Textbox(label="Cleaned Screenplay", lines=10) with gr.TabItem("Coverage"): coverage_output = gr.Textbox(label="Coverage Document", lines=10) process_btn.click( fn=process_pdf, inputs=[file_input], outputs=[cleaned_output, coverage_output, console] ) if __name__ == "__main__": demo.launch()