Skip to content

Commit e9ce976

Browse files
fix(cli): update in-progress request count immediately when requests are dispatched (#550)
- Call status_tracker.update_display() immediately after incrementing num_tasks_started and num_tasks_in_progress upon dispatching requests in process_requests_online - Call status_tracker.update_display() when requests fail permanently - In OnlineStatusTracker, allow state changes (in_progress, succeeded, failed) to trigger display updates immediately without waiting for _STATUS_UPDATE_INTERVAL - Add regression test test_online_status_tracker_requests_in_progress_update
1 parent 461b417 commit e9ce976

4 files changed

Lines changed: 31 additions & 3 deletions

File tree

‎src/bespokelabs/curator/request_processor/online/base_online_request_processor.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,7 @@ async def process_requests_from_file(
403403

404404
status_tracker.num_tasks_started += 1
405405
status_tracker.num_tasks_in_progress += 1
406+
status_tracker.update_display()
406407

407408
if pending_requests:
408409
await asyncio.gather(*pending_requests)
@@ -561,6 +562,7 @@ async def handle_single_request_with_retries(
561562
await self.append_generic_response(status_tracker, generic_response, response_file)
562563
status_tracker.num_tasks_in_progress -= 1
563564
status_tracker.num_tasks_failed += 1
565+
status_tracker.update_display()
564566
return
565567
else:
566568
self._add_output_token_moving_window(generic_response.token_usage.output)

‎src/bespokelabs/curator/status_tracker/online_status_tracker.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ def update_display(self):
317317
# 3. When costs or tokens change
318318
should_update = (
319319
current_time - self._last_stats_update >= _STATUS_UPDATE_INTERVAL # Time-based update
320-
and (
320+
or (
321321
self.num_tasks_in_progress != getattr(self, "_last_in_progress", -1) # Task state change
322322
or self.num_tasks_succeeded != getattr(self, "_last_succeeded", -1)
323323
or self.num_tasks_failed != getattr(self, "_last_failed", -1)

‎tests/unittests/test_online_status_tracker.py‎

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def test_online_status_tracker_display():
4242
assert "100" in captured # Total requests
4343
assert "50✓" in captured.replace(" ", "") # Success count
4444
assert "5✗" in captured.replace(" ", "") # Failed count
45-
assert "10⋯" in captured.replace(" ", "") # In progress count
45+
assert "10⋯" in captured.replace(" ", "") or "10…" in captured.replace(" ", "") # In progress count
4646
assert "$0.123" in captured # Cost
4747
assert "1000" in captured # Input tokens
4848
assert "2000" in captured # Output tokens
@@ -120,3 +120,29 @@ def test_online_status_tracker_external_model_cost_missing_keys():
120120
assert tracker.output_cost_per_million is None
121121
assert "N/A" in tracker.input_cost_str
122122
assert "N/A" in tracker.output_cost_str
123+
124+
125+
def test_online_status_tracker_requests_in_progress_update():
126+
"""Test that requests in progress update immediately via update_display."""
127+
output = StringIO()
128+
console = Console(file=output, width=200, force_terminal=True)
129+
tracker = OnlineStatusTracker()
130+
tracker.model = "test-model"
131+
tracker.total_requests = 10
132+
tracker.start_tracker(console)
133+
134+
# Dispatch request: tasks started and in_progress increase
135+
tracker.num_tasks_started += 1
136+
tracker.num_tasks_in_progress += 1
137+
tracker.update_display()
138+
139+
assert tracker.num_tasks_in_progress == 1
140+
assert tracker.max_concurrent_requests_seen == 1
141+
142+
# Task finishes: in_progress decrements, succeeded increments
143+
tracker.num_tasks_in_progress -= 1
144+
tracker.num_tasks_succeeded += 1
145+
tracker.update_display()
146+
147+
assert tracker.num_tasks_in_progress == 0
148+
tracker.stop_tracker()

‎tests/unittests/test_status_tracker.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def test_online_status_tracker_display():
4646
assert "test-model" in captured
4747
assert "50✓" in captured.replace(" ", "") # Success count
4848
assert "5✗" in captured.replace(" ", "") # Failed count
49-
assert "10⋯" in captured.replace(" ", "") # In progress count
49+
assert "10⋯" in captured.replace(" ", "") or "10…" in captured.replace(" ", "") # In progress count
5050
assert "$0.123" in captured # Cost
5151
assert "1000" in captured # Input tokens
5252
assert "2000" in captured # Output tokens

0 commit comments

Comments
 (0)