Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- src/streamlit_app.py +27 -12
src/streamlit_app.py
CHANGED
|
@@ -432,7 +432,6 @@ def upload_and_poll_files(api_key: str, uploaded_files: list):
|
|
| 432 |
if "processed_files" not in st.session_state:
|
| 433 |
st.session_state.processed_files = []
|
| 434 |
|
| 435 |
-
# Only keep files not yet processed
|
| 436 |
files_to_process = [f for f in uploaded_files if f.name not in st.session_state.processed_files]
|
| 437 |
|
| 438 |
if not files_to_process:
|
|
@@ -452,7 +451,8 @@ def upload_and_poll_files(api_key: str, uploaded_files: list):
|
|
| 452 |
|
| 453 |
data = result.get("data") or {}
|
| 454 |
job_id = data.get("document_id") or data.get("job_id")
|
| 455 |
-
status = data.get("status", "queued")
|
|
|
|
| 456 |
|
| 457 |
# Poll until final status
|
| 458 |
if job_id:
|
|
@@ -463,8 +463,6 @@ def upload_and_poll_files(api_key: str, uploaded_files: list):
|
|
| 463 |
elapsed = 0
|
| 464 |
|
| 465 |
final_status = status
|
| 466 |
-
display_name = st.session_state.username or "You"
|
| 467 |
-
|
| 468 |
while elapsed < max_poll_seconds:
|
| 469 |
try:
|
| 470 |
resp = requests.get(
|
|
@@ -497,6 +495,11 @@ def upload_and_poll_files(api_key: str, uploaded_files: list):
|
|
| 497 |
if elapsed >= max_poll_seconds:
|
| 498 |
st.error(f"β {file.name}: Processing timed out after {max_poll_seconds}s")
|
| 499 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 500 |
elif status == "success":
|
| 501 |
st.success(f"β
{file.name} uploaded and processed successfully")
|
| 502 |
else:
|
|
@@ -506,7 +509,11 @@ def upload_and_poll_files(api_key: str, uploaded_files: list):
|
|
| 506 |
st.session_state.processed_files.append(file.name)
|
| 507 |
progress_bar.progress((i + 1) / len(files_to_process))
|
| 508 |
|
| 509 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 510 |
|
| 511 |
# ============================================
|
| 512 |
# MAIN APPLICATION UI
|
|
@@ -562,15 +569,23 @@ def show_main_app():
|
|
| 562 |
|
| 563 |
# Integrated uploader (upload before asking)
|
| 564 |
uploaded_files = st.file_uploader(
|
| 565 |
-
|
| 566 |
-
|
| 567 |
-
|
| 568 |
-
|
| 569 |
-
|
|
|
|
|
|
|
| 570 |
|
| 571 |
-
|
|
|
|
| 572 |
if st.button("π€ Upload All", use_container_width=True, type="secondary"):
|
| 573 |
-
upload_and_poll_files(st.session_state.api_key,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 574 |
|
| 575 |
# Chat interface
|
| 576 |
# Provide a scope selector: General (all docs) or a specific uploaded document
|
|
|
|
| 432 |
if "processed_files" not in st.session_state:
|
| 433 |
st.session_state.processed_files = []
|
| 434 |
|
|
|
|
| 435 |
files_to_process = [f for f in uploaded_files if f.name not in st.session_state.processed_files]
|
| 436 |
|
| 437 |
if not files_to_process:
|
|
|
|
| 451 |
|
| 452 |
data = result.get("data") or {}
|
| 453 |
job_id = data.get("document_id") or data.get("job_id")
|
| 454 |
+
status = data.get("status", "queued")
|
| 455 |
+
display_name = st.session_state.username or "You"
|
| 456 |
|
| 457 |
# Poll until final status
|
| 458 |
if job_id:
|
|
|
|
| 463 |
elapsed = 0
|
| 464 |
|
| 465 |
final_status = status
|
|
|
|
|
|
|
| 466 |
while elapsed < max_poll_seconds:
|
| 467 |
try:
|
| 468 |
resp = requests.get(
|
|
|
|
| 495 |
if elapsed >= max_poll_seconds:
|
| 496 |
st.error(f"β {file.name}: Processing timed out after {max_poll_seconds}s")
|
| 497 |
|
| 498 |
+
# Clear polling message after a short delay
|
| 499 |
+
time.sleep(2)
|
| 500 |
+
poll_text.empty()
|
| 501 |
+
poll_progress.empty()
|
| 502 |
+
|
| 503 |
elif status == "success":
|
| 504 |
st.success(f"β
{file.name} uploaded and processed successfully")
|
| 505 |
else:
|
|
|
|
| 509 |
st.session_state.processed_files.append(file.name)
|
| 510 |
progress_bar.progress((i + 1) / len(files_to_process))
|
| 511 |
|
| 512 |
+
# Final upload complete message, disappears after 2s
|
| 513 |
+
status_text.success("β
Upload complete!")
|
| 514 |
+
time.sleep(2)
|
| 515 |
+
status_text.empty()
|
| 516 |
+
progress_bar.empty()
|
| 517 |
|
| 518 |
# ============================================
|
| 519 |
# MAIN APPLICATION UI
|
|
|
|
| 569 |
|
| 570 |
# Integrated uploader (upload before asking)
|
| 571 |
uploaded_files = st.file_uploader(
|
| 572 |
+
"Upload PDF files (optional)",
|
| 573 |
+
type=["pdf"],
|
| 574 |
+
accept_multiple_files=True,
|
| 575 |
+
key="pdf_uploader")
|
| 576 |
+
|
| 577 |
+
# Filter out already processed files so they disappear from uploader
|
| 578 |
+
display_files = [f for f in uploaded_files if f.name not in st.session_state.get("processed_files", [])]
|
| 579 |
|
| 580 |
+
|
| 581 |
+
if display_files:
|
| 582 |
if st.button("π€ Upload All", use_container_width=True, type="secondary"):
|
| 583 |
+
upload_and_poll_files(st.session_state.api_key, display_files)
|
| 584 |
+
else:
|
| 585 |
+
if uploaded_files:
|
| 586 |
+
st.info("β
All uploaded files have been processed and removed from uploader.")
|
| 587 |
+
|
| 588 |
+
|
| 589 |
|
| 590 |
# Chat interface
|
| 591 |
# Provide a scope selector: General (all docs) or a specific uploaded document
|