File size: 3,379 Bytes
c7a56f2 df9cf6c 2e86f0d c7a56f2 df9cf6c a9b7134 2e86f0d a9b7134 2e86f0d df9cf6c a9b7134 df9cf6c a9b7134 df9cf6c a9b7134 df9cf6c a9b7134 df9cf6c 2e86f0d df9cf6c a9b7134 2e86f0d a9b7134 c7a56f2 a9b7134 2e86f0d a9b7134 2e86f0d a9b7134 2e86f0d a9b7134 c7a56f2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | import gradio as gr
import os
from src.processing.gemini_processor import GeminiProcessor
from src.analysis.coverage_generator import CoverageGenerator
from pathlib import Path
import logging
class ConsoleOutput:
def __init__(self):
self.messages = []
def write(self, message):
self.messages.append(str(message))
return "\n".join(self.messages)
def get_output(self):
return "\n".join(self.messages)
def process_pdf(pdf_file, progress=gr.Progress()):
if pdf_file is None:
raise gr.Error("Please upload a PDF file")
console = ConsoleOutput()
# Set up logging to console
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger()
logger.handlers = [] # Remove existing handlers
class GradioHandler(logging.Handler):
def emit(self, record):
msg = self.format(record)
console.write(msg)
logger.addHandler(GradioHandler())
try:
processor = GeminiProcessor()
coverage_gen = CoverageGenerator()
# Clean screenplay
progress(0.2, desc="Processing screenplay...")
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()
# Generate coverage
progress(0.6, desc="Generating coverage...")
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()
progress(1.0, desc="Complete!")
return cleaned_text, coverage, console.get_output()
except Exception as e:
error_msg = f"Error: {str(e)}"
console.write(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=10,
max_lines=30,
autoscroll=True,
container=True,
show_copy_button=True
)
with gr.Tabs():
with gr.TabItem("Cleaned Screenplay"):
cleaned_output = gr.Textbox(
label="Cleaned Screenplay",
lines=10,
max_lines=30,
show_copy_button=True
)
with gr.TabItem("Coverage"):
coverage_output = gr.Textbox(
label="Coverage Document",
lines=10,
max_lines=30,
show_copy_button=True
)
process_btn.click(
fn=process_pdf,
inputs=[file_input],
outputs=[cleaned_output, coverage_output, console]
)
if __name__ == "__main__":
demo.launch() |