Spaces:
Running
Running
fixing batching for loading data
Browse files
components/review_dashboard_page.py
CHANGED
@@ -479,10 +479,17 @@ class ReviewDashboardPage:
|
|
479 |
gr.update(value="β Reject") # Reset reject button text
|
480 |
)
|
481 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
482 |
def navigate_and_load_fn(items, current_idx, direction, session):
|
483 |
"""Combined navigation and loading function"""
|
484 |
if not items:
|
485 |
-
return items, 0
|
486 |
|
487 |
# Navigate
|
488 |
if direction == "next":
|
@@ -492,13 +499,15 @@ class ReviewDashboardPage:
|
|
492 |
if should_load_more:
|
493 |
log.info(f"User reached end of loaded items ({new_idx}/{len(items)}), will load more items")
|
494 |
# Load more items
|
495 |
-
updated_items = load_more_items_fn(items, session, current_batch_size=10)
|
496 |
-
|
|
|
|
|
497 |
else:
|
498 |
-
return items, new_idx
|
499 |
else: # prev
|
500 |
new_idx = max(current_idx - 1, 0)
|
501 |
-
return items, new_idx
|
502 |
|
503 |
def save_validation_fn(items, idx, session, approved: bool, rejection_reason: str = ""):
|
504 |
if not items or idx >= len(items):
|
@@ -615,7 +624,7 @@ class ReviewDashboardPage:
|
|
615 |
username = session.get("username")
|
616 |
|
617 |
if not user_id or not username:
|
618 |
-
return items # Return existing items if no user session
|
619 |
|
620 |
# Find target annotator
|
621 |
target_annotator = None
|
@@ -625,12 +634,17 @@ class ReviewDashboardPage:
|
|
625 |
break
|
626 |
|
627 |
if not target_annotator:
|
628 |
-
return items
|
629 |
|
630 |
with get_db() as db:
|
631 |
target_annotator_obj = db.query(Annotator).filter_by(name=target_annotator).first()
|
632 |
if not target_annotator_obj:
|
633 |
-
return items
|
|
|
|
|
|
|
|
|
|
|
634 |
|
635 |
# Load next batch starting from where we left off
|
636 |
offset = len(items)
|
@@ -670,7 +684,7 @@ class ReviewDashboardPage:
|
|
670 |
# Combine with existing items
|
671 |
all_items = items + new_items
|
672 |
log.info(f"Loaded {len(new_items)} more items, total now: {len(all_items)}")
|
673 |
-
return all_items
|
674 |
|
675 |
# Output definitions
|
676 |
review_display_outputs = [
|
@@ -715,7 +729,7 @@ class ReviewDashboardPage:
|
|
715 |
).then(
|
716 |
fn=lambda items, idx, session, dir=direction: navigate_and_load_fn(items, idx, dir, session),
|
717 |
inputs=[self.items_state, self.idx_state, session_state],
|
718 |
-
outputs=[self.items_state, self.idx_state]
|
719 |
).then(
|
720 |
fn=show_current_review_item_fn,
|
721 |
inputs=[self.items_state, self.idx_state, session_state],
|
@@ -751,7 +765,7 @@ class ReviewDashboardPage:
|
|
751 |
).then(
|
752 |
fn=lambda items, idx, session: navigate_and_load_fn(items, idx, "next", session),
|
753 |
inputs=[self.items_state, self.idx_state, session_state],
|
754 |
-
outputs=[self.items_state, self.idx_state]
|
755 |
).then(
|
756 |
fn=show_current_review_item_fn,
|
757 |
inputs=[self.items_state, self.idx_state, session_state],
|
@@ -772,9 +786,9 @@ class ReviewDashboardPage:
|
|
772 |
inputs=[self.items_state, self.idx_state, session_state, self.rejection_mode_active],
|
773 |
outputs=[self.header.progress_display]
|
774 |
).then(
|
775 |
-
fn=lambda items, idx, session, rejection_mode: navigate_and_load_fn(items, idx, "next", session) if not rejection_mode else (items, idx),
|
776 |
inputs=[self.items_state, self.idx_state, session_state, self.rejection_mode_active],
|
777 |
-
outputs=[self.items_state, self.idx_state]
|
778 |
).then(
|
779 |
fn=lambda items, idx, session, rejection_mode: show_current_review_item_fn(items, idx, session) if not rejection_mode else (
|
780 |
str(items[idx]["tts_id"]) if items and idx < len(items) else "",
|
@@ -802,7 +816,7 @@ class ReviewDashboardPage:
|
|
802 |
self.btn_skip.click(
|
803 |
fn=lambda items, idx, session: navigate_and_load_fn(items, idx, "next", session),
|
804 |
inputs=[self.items_state, self.idx_state, session_state],
|
805 |
-
outputs=[self.items_state, self.idx_state]
|
806 |
).then(
|
807 |
fn=show_current_review_item_fn,
|
808 |
inputs=[self.items_state, self.idx_state, session_state],
|
|
|
479 |
gr.update(value="β Reject") # Reset reject button text
|
480 |
)
|
481 |
|
482 |
+
def update_review_info_fn(items, total_count):
|
483 |
+
"""Update the review info banner with current loaded items count"""
|
484 |
+
if items:
|
485 |
+
return f"π **Phase 2 Review Mode** - Reviewing assigned annotations. Loaded {len(items)} of {total_count} total items."
|
486 |
+
else:
|
487 |
+
return f"π **Phase 2 Review Mode** - No annotations found for review."
|
488 |
+
|
489 |
def navigate_and_load_fn(items, current_idx, direction, session):
|
490 |
"""Combined navigation and loading function"""
|
491 |
if not items:
|
492 |
+
return items, 0, ""
|
493 |
|
494 |
# Navigate
|
495 |
if direction == "next":
|
|
|
499 |
if should_load_more:
|
500 |
log.info(f"User reached end of loaded items ({new_idx}/{len(items)}), will load more items")
|
501 |
# Load more items
|
502 |
+
updated_items, total_count = load_more_items_fn(items, session, current_batch_size=10)
|
503 |
+
# Update review info with new count
|
504 |
+
review_info = update_review_info_fn(updated_items, total_count)
|
505 |
+
return updated_items, new_idx, review_info
|
506 |
else:
|
507 |
+
return items, new_idx, "" # No review info update needed
|
508 |
else: # prev
|
509 |
new_idx = max(current_idx - 1, 0)
|
510 |
+
return items, new_idx, "" # No review info update needed
|
511 |
|
512 |
def save_validation_fn(items, idx, session, approved: bool, rejection_reason: str = ""):
|
513 |
if not items or idx >= len(items):
|
|
|
624 |
username = session.get("username")
|
625 |
|
626 |
if not user_id or not username:
|
627 |
+
return items, 0 # Return existing items if no user session
|
628 |
|
629 |
# Find target annotator
|
630 |
target_annotator = None
|
|
|
634 |
break
|
635 |
|
636 |
if not target_annotator:
|
637 |
+
return items, 0
|
638 |
|
639 |
with get_db() as db:
|
640 |
target_annotator_obj = db.query(Annotator).filter_by(name=target_annotator).first()
|
641 |
if not target_annotator_obj:
|
642 |
+
return items, 0
|
643 |
+
|
644 |
+
# Get total count for updated review info
|
645 |
+
total_count = db.query(Annotation).filter(
|
646 |
+
Annotation.annotator_id == target_annotator_obj.id
|
647 |
+
).count()
|
648 |
|
649 |
# Load next batch starting from where we left off
|
650 |
offset = len(items)
|
|
|
684 |
# Combine with existing items
|
685 |
all_items = items + new_items
|
686 |
log.info(f"Loaded {len(new_items)} more items, total now: {len(all_items)}")
|
687 |
+
return all_items, total_count
|
688 |
|
689 |
# Output definitions
|
690 |
review_display_outputs = [
|
|
|
729 |
).then(
|
730 |
fn=lambda items, idx, session, dir=direction: navigate_and_load_fn(items, idx, dir, session),
|
731 |
inputs=[self.items_state, self.idx_state, session_state],
|
732 |
+
outputs=[self.items_state, self.idx_state, self.review_info]
|
733 |
).then(
|
734 |
fn=show_current_review_item_fn,
|
735 |
inputs=[self.items_state, self.idx_state, session_state],
|
|
|
765 |
).then(
|
766 |
fn=lambda items, idx, session: navigate_and_load_fn(items, idx, "next", session),
|
767 |
inputs=[self.items_state, self.idx_state, session_state],
|
768 |
+
outputs=[self.items_state, self.idx_state, self.review_info]
|
769 |
).then(
|
770 |
fn=show_current_review_item_fn,
|
771 |
inputs=[self.items_state, self.idx_state, session_state],
|
|
|
786 |
inputs=[self.items_state, self.idx_state, session_state, self.rejection_mode_active],
|
787 |
outputs=[self.header.progress_display]
|
788 |
).then(
|
789 |
+
fn=lambda items, idx, session, rejection_mode: navigate_and_load_fn(items, idx, "next", session) if not rejection_mode else (items, idx, ""),
|
790 |
inputs=[self.items_state, self.idx_state, session_state, self.rejection_mode_active],
|
791 |
+
outputs=[self.items_state, self.idx_state, self.review_info]
|
792 |
).then(
|
793 |
fn=lambda items, idx, session, rejection_mode: show_current_review_item_fn(items, idx, session) if not rejection_mode else (
|
794 |
str(items[idx]["tts_id"]) if items and idx < len(items) else "",
|
|
|
816 |
self.btn_skip.click(
|
817 |
fn=lambda items, idx, session: navigate_and_load_fn(items, idx, "next", session),
|
818 |
inputs=[self.items_state, self.idx_state, session_state],
|
819 |
+
outputs=[self.items_state, self.idx_state, self.review_info]
|
820 |
).then(
|
821 |
fn=show_current_review_item_fn,
|
822 |
inputs=[self.items_state, self.idx_state, session_state],
|