Update app.py
Browse files
app.py
CHANGED
@@ -10,6 +10,7 @@ MAX_MODEL_TOKENS = 131072
|
|
10 |
MAX_NEW_TOKENS = 4096
|
11 |
MAX_CHUNK_TOKENS = 8192
|
12 |
PROMPT_OVERHEAD = 300
|
|
|
13 |
|
14 |
# Paths
|
15 |
persistent_dir = "/data/hf_cache"
|
@@ -83,14 +84,14 @@ def init_agent() -> TxAgent:
|
|
83 |
agent.init_model()
|
84 |
return agent
|
85 |
|
86 |
-
# β‘
|
87 |
-
def analyze_parallel(agent,
|
88 |
-
results = [None] * len(
|
89 |
|
90 |
-
def worker(index,
|
91 |
-
prompt = build_prompt(chunk)
|
92 |
if estimate_tokens(prompt) > MAX_MODEL_TOKENS:
|
93 |
-
return f"β
|
94 |
response = ""
|
95 |
try:
|
96 |
for r in agent.run_gradio_chat(
|
@@ -112,16 +113,16 @@ def analyze_parallel(agent, chunks: List[str], max_workers: int = 6) -> List[str
|
|
112 |
response += r.content
|
113 |
return clean_response(response)
|
114 |
except Exception as e:
|
115 |
-
return f"β Error in
|
116 |
|
117 |
with ThreadPoolExecutor(max_workers=max_workers) as executor:
|
118 |
-
futures = {executor.submit(worker, idx,
|
119 |
for future in futures:
|
120 |
idx = futures[future]
|
121 |
try:
|
122 |
results[idx] = future.result()
|
123 |
except Exception as e:
|
124 |
-
results[idx] = f"β Error in
|
125 |
|
126 |
gc.collect()
|
127 |
return results
|
@@ -157,13 +158,14 @@ def process_report(agent, file, messages: List[Dict[str, str]]) -> Tuple[List[Di
|
|
157 |
try:
|
158 |
extracted = extract_text_from_excel(file.name)
|
159 |
chunks = split_text(extracted)
|
160 |
-
|
|
|
161 |
|
162 |
-
chunk_results = analyze_parallel(agent,
|
163 |
valid = [res for res in chunk_results if not res.startswith("β")]
|
164 |
|
165 |
if not valid:
|
166 |
-
messages.append({"role": "assistant", "content": "β No valid
|
167 |
return messages, None
|
168 |
|
169 |
summary = generate_final_summary(agent, "\n\n".join(valid))
|
@@ -179,21 +181,20 @@ def process_report(agent, file, messages: List[Dict[str, str]]) -> Tuple[List[Di
|
|
179 |
messages.append({"role": "assistant", "content": f"β Error: {str(e)}"})
|
180 |
return messages, None
|
181 |
|
|
|
182 |
def create_ui(agent):
|
183 |
with gr.Blocks(css="""
|
184 |
html, body, .gradio-container {
|
185 |
background-color: #0e1621;
|
186 |
color: #e0e0e0;
|
187 |
font-family: 'Inter', sans-serif;
|
188 |
-
padding: 0;
|
189 |
margin: 0;
|
|
|
190 |
}
|
191 |
-
|
192 |
h2, h3, h4 {
|
193 |
color: #89b4fa;
|
194 |
font-weight: 600;
|
195 |
}
|
196 |
-
|
197 |
button.gr-button-primary {
|
198 |
background-color: #007bff !important;
|
199 |
color: white !important;
|
@@ -203,26 +204,35 @@ def create_ui(agent):
|
|
203 |
font-size: 16px !important;
|
204 |
border: none;
|
205 |
}
|
206 |
-
|
207 |
button.gr-button-primary:hover {
|
208 |
background-color: #0056b3 !important;
|
209 |
}
|
210 |
-
|
211 |
.gr-chatbot, .gr-markdown, .gr-file-upload {
|
212 |
border-radius: 16px;
|
213 |
background-color: #1b2533;
|
214 |
border: 1px solid #2a2f45;
|
215 |
padding: 10px;
|
216 |
}
|
217 |
-
|
218 |
.gr-chatbot .message {
|
219 |
font-size: 16px;
|
220 |
line-height: 1.6;
|
221 |
-
|
222 |
-
|
223 |
margin: 8px 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
224 |
}
|
225 |
-
|
226 |
.gr-file-upload .file-name {
|
227 |
font-size: 14px;
|
228 |
color: #89b4fa;
|
@@ -258,3 +268,4 @@ if __name__ == "__main__":
|
|
258 |
except Exception as err:
|
259 |
print(f"Startup failed: {err}")
|
260 |
sys.exit(1)
|
|
|
|
10 |
MAX_NEW_TOKENS = 4096
|
11 |
MAX_CHUNK_TOKENS = 8192
|
12 |
PROMPT_OVERHEAD = 300
|
13 |
+
BATCH_SIZE = 3 # NEW: batching chunks to avoid overload
|
14 |
|
15 |
# Paths
|
16 |
persistent_dir = "/data/hf_cache"
|
|
|
84 |
agent.init_model()
|
85 |
return agent
|
86 |
|
87 |
+
# β‘ Parallel analyzer with batching
|
88 |
+
def analyze_parallel(agent, batch_chunks: List[List[str]], max_workers: int = 3) -> List[str]:
|
89 |
+
results = [None] * len(batch_chunks)
|
90 |
|
91 |
+
def worker(index, batch):
|
92 |
+
prompt = "\n\n".join(build_prompt(chunk) for chunk in batch)
|
93 |
if estimate_tokens(prompt) > MAX_MODEL_TOKENS:
|
94 |
+
return f"β Batch {index+1} too long. Skipped."
|
95 |
response = ""
|
96 |
try:
|
97 |
for r in agent.run_gradio_chat(
|
|
|
113 |
response += r.content
|
114 |
return clean_response(response)
|
115 |
except Exception as e:
|
116 |
+
return f"β Error in batch {index+1}: {str(e)}"
|
117 |
|
118 |
with ThreadPoolExecutor(max_workers=max_workers) as executor:
|
119 |
+
futures = {executor.submit(worker, idx, batch): idx for idx, batch in enumerate(batch_chunks)}
|
120 |
for future in futures:
|
121 |
idx = futures[future]
|
122 |
try:
|
123 |
results[idx] = future.result()
|
124 |
except Exception as e:
|
125 |
+
results[idx] = f"β Error in batch {idx+1}: {str(e)}"
|
126 |
|
127 |
gc.collect()
|
128 |
return results
|
|
|
158 |
try:
|
159 |
extracted = extract_text_from_excel(file.name)
|
160 |
chunks = split_text(extracted)
|
161 |
+
batch_chunks = [chunks[i:i+BATCH_SIZE] for i in range(0, len(chunks), BATCH_SIZE)]
|
162 |
+
messages.append({"role": "assistant", "content": f"π Split into {len(batch_chunks)} batches. Analyzing..."})
|
163 |
|
164 |
+
chunk_results = analyze_parallel(agent, batch_chunks, max_workers=3)
|
165 |
valid = [res for res in chunk_results if not res.startswith("β")]
|
166 |
|
167 |
if not valid:
|
168 |
+
messages.append({"role": "assistant", "content": "β No valid batch outputs."})
|
169 |
return messages, None
|
170 |
|
171 |
summary = generate_final_summary(agent, "\n\n".join(valid))
|
|
|
181 |
messages.append({"role": "assistant", "content": f"β Error: {str(e)}"})
|
182 |
return messages, None
|
183 |
|
184 |
+
|
185 |
def create_ui(agent):
|
186 |
with gr.Blocks(css="""
|
187 |
html, body, .gradio-container {
|
188 |
background-color: #0e1621;
|
189 |
color: #e0e0e0;
|
190 |
font-family: 'Inter', sans-serif;
|
|
|
191 |
margin: 0;
|
192 |
+
padding: 0;
|
193 |
}
|
|
|
194 |
h2, h3, h4 {
|
195 |
color: #89b4fa;
|
196 |
font-weight: 600;
|
197 |
}
|
|
|
198 |
button.gr-button-primary {
|
199 |
background-color: #007bff !important;
|
200 |
color: white !important;
|
|
|
204 |
font-size: 16px !important;
|
205 |
border: none;
|
206 |
}
|
|
|
207 |
button.gr-button-primary:hover {
|
208 |
background-color: #0056b3 !important;
|
209 |
}
|
|
|
210 |
.gr-chatbot, .gr-markdown, .gr-file-upload {
|
211 |
border-radius: 16px;
|
212 |
background-color: #1b2533;
|
213 |
border: 1px solid #2a2f45;
|
214 |
padding: 10px;
|
215 |
}
|
|
|
216 |
.gr-chatbot .message {
|
217 |
font-size: 16px;
|
218 |
line-height: 1.6;
|
219 |
+
padding: 12px 16px;
|
220 |
+
border-radius: 18px;
|
221 |
margin: 8px 0;
|
222 |
+
max-width: 80%;
|
223 |
+
word-break: break-word;
|
224 |
+
white-space: pre-wrap;
|
225 |
+
}
|
226 |
+
.gr-chatbot .message.user {
|
227 |
+
background-color: #334155;
|
228 |
+
align-self: flex-end;
|
229 |
+
margin-left: auto;
|
230 |
+
}
|
231 |
+
.gr-chatbot .message.assistant {
|
232 |
+
background-color: #1e293b;
|
233 |
+
align-self: flex-start;
|
234 |
+
margin-right: auto;
|
235 |
}
|
|
|
236 |
.gr-file-upload .file-name {
|
237 |
font-size: 14px;
|
238 |
color: #89b4fa;
|
|
|
268 |
except Exception as err:
|
269 |
print(f"Startup failed: {err}")
|
270 |
sys.exit(1)
|
271 |
+
|