yalrashed commited on
Commit
2e86f0d
·
verified ·
1 Parent(s): a9b7134

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -15
app.py CHANGED
@@ -3,26 +3,45 @@ import os
3
  from src.processing.gemini_processor import GeminiProcessor
4
  from src.analysis.coverage_generator import CoverageGenerator
5
  from pathlib import Path
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
  def process_pdf(pdf_file, progress=gr.Progress()):
8
  if pdf_file is None:
9
  raise gr.Error("Please upload a PDF file")
10
 
11
- console_output = []
12
 
13
- def update_console(message):
14
- console_output.append(message)
15
- return "\n".join(console_output)
 
 
 
 
 
 
 
 
 
 
16
 
17
  try:
18
- # Initialize processors
19
- progress(0.1, desc="Initializing...")
20
  processor = GeminiProcessor()
21
  coverage_gen = CoverageGenerator()
22
 
23
  # Clean screenplay
24
  progress(0.2, desc="Processing screenplay...")
25
- update_console("Starting screenplay processing...")
26
  cleaned_path = Path("cleaned_screenplay_long.txt")
27
  success = processor.process_screenplay(pdf_file.name, str(cleaned_path))
28
  if not success:
@@ -30,25 +49,22 @@ def process_pdf(pdf_file, progress=gr.Progress()):
30
 
31
  with open(cleaned_path, 'r') as f:
32
  cleaned_text = f.read()
33
- update_console("Screenplay processing complete!")
34
 
35
  # Generate coverage
36
  progress(0.6, desc="Generating coverage...")
37
- update_console("Starting coverage generation...")
38
  success = coverage_gen.generate_coverage(cleaned_path)
39
  if not success:
40
  raise gr.Error("Failed to generate coverage")
41
 
42
  with open(Path("coverage.txt"), 'r') as f:
43
  coverage = f.read()
44
- update_console("Coverage generation complete!")
45
 
46
  progress(1.0, desc="Complete!")
47
- return cleaned_text, coverage, "\n".join(console_output)
48
 
49
  except Exception as e:
50
  error_msg = f"Error: {str(e)}"
51
- update_console(error_msg)
52
  raise gr.Error(error_msg)
53
 
54
  with gr.Blocks(title="Screenplay Coverage Generator") as demo:
@@ -61,13 +77,30 @@ with gr.Blocks(title="Screenplay Coverage Generator") as demo:
61
  process_btn = gr.Button("Process Screenplay")
62
 
63
  with gr.Row():
64
- console = gr.Textbox(label="Console Output", lines=5)
 
 
 
 
 
 
 
65
 
66
  with gr.Tabs():
67
  with gr.TabItem("Cleaned Screenplay"):
68
- cleaned_output = gr.Textbox(label="Cleaned Screenplay", lines=10)
 
 
 
 
 
69
  with gr.TabItem("Coverage"):
70
- coverage_output = gr.Textbox(label="Coverage Document", lines=10)
 
 
 
 
 
71
 
72
  process_btn.click(
73
  fn=process_pdf,
 
3
  from src.processing.gemini_processor import GeminiProcessor
4
  from src.analysis.coverage_generator import CoverageGenerator
5
  from pathlib import Path
6
+ import logging
7
+
8
+ class ConsoleOutput:
9
+ def __init__(self):
10
+ self.messages = []
11
+
12
+ def write(self, message):
13
+ self.messages.append(str(message))
14
+ return "\n".join(self.messages)
15
+
16
+ def get_output(self):
17
+ return "\n".join(self.messages)
18
 
19
  def process_pdf(pdf_file, progress=gr.Progress()):
20
  if pdf_file is None:
21
  raise gr.Error("Please upload a PDF file")
22
 
23
+ console = ConsoleOutput()
24
 
25
+ # Set up logging to console
26
+ logging.basicConfig(level=logging.DEBUG,
27
+ format='%(asctime)s - %(levelname)s - %(message)s')
28
+
29
+ logger = logging.getLogger()
30
+ logger.handlers = [] # Remove existing handlers
31
+
32
+ class GradioHandler(logging.Handler):
33
+ def emit(self, record):
34
+ msg = self.format(record)
35
+ console.write(msg)
36
+
37
+ logger.addHandler(GradioHandler())
38
 
39
  try:
 
 
40
  processor = GeminiProcessor()
41
  coverage_gen = CoverageGenerator()
42
 
43
  # Clean screenplay
44
  progress(0.2, desc="Processing screenplay...")
 
45
  cleaned_path = Path("cleaned_screenplay_long.txt")
46
  success = processor.process_screenplay(pdf_file.name, str(cleaned_path))
47
  if not success:
 
49
 
50
  with open(cleaned_path, 'r') as f:
51
  cleaned_text = f.read()
 
52
 
53
  # Generate coverage
54
  progress(0.6, desc="Generating coverage...")
 
55
  success = coverage_gen.generate_coverage(cleaned_path)
56
  if not success:
57
  raise gr.Error("Failed to generate coverage")
58
 
59
  with open(Path("coverage.txt"), 'r') as f:
60
  coverage = f.read()
 
61
 
62
  progress(1.0, desc="Complete!")
63
+ return cleaned_text, coverage, console.get_output()
64
 
65
  except Exception as e:
66
  error_msg = f"Error: {str(e)}"
67
+ console.write(error_msg)
68
  raise gr.Error(error_msg)
69
 
70
  with gr.Blocks(title="Screenplay Coverage Generator") as demo:
 
77
  process_btn = gr.Button("Process Screenplay")
78
 
79
  with gr.Row():
80
+ console = gr.Textbox(
81
+ label="Console Output",
82
+ lines=10,
83
+ max_lines=30,
84
+ autoscroll=True,
85
+ container=True,
86
+ show_copy_button=True
87
+ )
88
 
89
  with gr.Tabs():
90
  with gr.TabItem("Cleaned Screenplay"):
91
+ cleaned_output = gr.Textbox(
92
+ label="Cleaned Screenplay",
93
+ lines=10,
94
+ max_lines=30,
95
+ show_copy_button=True
96
+ )
97
  with gr.TabItem("Coverage"):
98
+ coverage_output = gr.Textbox(
99
+ label="Coverage Document",
100
+ lines=10,
101
+ max_lines=30,
102
+ show_copy_button=True
103
+ )
104
 
105
  process_btn.click(
106
  fn=process_pdf,