File size: 3,902 Bytes
c7a56f2 df9cf6c 2e86f0d c7a56f2 dff6c34 df9cf6c a9b7134 2e86f0d dff6c34 2e86f0d dff6c34 2e86f0d df9cf6c a9b7134 dff6c34 df9cf6c dff6c34 df9cf6c a9b7134 dff6c34 df9cf6c dff6c34 df9cf6c dff6c34 df9cf6c a9b7134 2e86f0d a9b7134 c7a56f2 a9b7134 dff6c34 a9b7134 dff6c34 a9b7134 dff6c34 a9b7134 dff6c34 a9b7134 dff6c34 a9b7134 dff6c34 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 113 114 115 116 117 118 119 | 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_screenplay(pdf_file, progress=gr.Progress()):
if pdf_file is None:
raise gr.Error("Please upload a PDF file")
console = ConsoleOutput()
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger()
logger.handlers = []
class GradioHandler(logging.Handler):
def emit(self, record):
msg = self.format(record)
console.write(msg)
logger.addHandler(GradioHandler())
try:
processor = GeminiProcessor()
progress(0.5, 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()
progress(1.0, desc="Complete!")
return cleaned_text, gr.Button.update(interactive=True), console.get_output()
except Exception as e:
error_msg = f"Error: {str(e)}"
console.write(error_msg)
raise gr.Error(error_msg)
def generate_coverage(progress=gr.Progress()):
console = ConsoleOutput()
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger()
logger.handlers = []
class GradioHandler(logging.Handler):
def emit(self, record):
msg = self.format(record)
console.write(msg)
logger.addHandler(GradioHandler())
try:
coverage_gen = CoverageGenerator()
progress(0.5, desc="Generating coverage...")
cleaned_path = Path("cleaned_screenplay_long.txt")
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 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")
coverage_btn = gr.Button("Generate Coverage", interactive=False)
with gr.Row():
console = gr.Textbox(label="Console Output", lines=10, max_lines=30, autoscroll=True, show_copy_button=True)
with gr.Tabs():
with gr.TabItem("Cleaned Screenplay"):
cleaned_output = gr.Textbox(label="Cleaned Screenplay", lines=10, show_copy_button=True)
with gr.TabItem("Coverage"):
coverage_output = gr.Textbox(label="Coverage Document", lines=10, show_copy_button=True)
process_btn.click(
fn=process_screenplay,
inputs=[file_input],
outputs=[cleaned_output, coverage_btn, console]
)
coverage_btn.click(
fn=generate_coverage,
outputs=[coverage_output, console]
)
if __name__ == "__main__":
demo.launch() |