From 2207a7992214bcb6a386d3185e8b9f72e847cdf4 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 3 Oct 2026 18:33:54 -0700 Subject: [PATCH] fix(lens): start review history over when a run is reclaimed --- litellm/proxy/lens/state.py | 3 +++ tests/unit/proxy/lens/test_state.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/litellm/proxy/lens/state.py b/litellm/proxy/lens/state.py index 96e2f63cda6..83cb20320c5 100644 --- a/litellm/proxy/lens/state.py +++ b/litellm/proxy/lens/state.py @@ -149,6 +149,9 @@ def claim_job(lens: Lens, worker: Worker, now: datetime) -> Lens: "worker_id": worker.id, "lease_until": now + timedelta(minutes=5), "attempts": job.attempts + 1, + "reviews": (), + "reviewed": 0, + "reading": (), } ) ), diff --git a/tests/unit/proxy/lens/test_state.py b/tests/unit/proxy/lens/test_state.py index 88caa63f40a..0066b40a633 100644 --- a/tests/unit/proxy/lens/test_state.py +++ b/tests/unit/proxy/lens/test_state.py @@ -377,6 +377,21 @@ def test_reviews_keep_the_newest_window_while_counting_every_review() -> None: assert grown.reviews[-1].execution_id == f"run-{MAX_REVIEWS + 2}" +def test_reclaimed_run_starts_its_review_history_over() -> None: + queued: Final = queue_job(lens(), NOW, "job") + first: Final = claim_job(queued, worker(), NOW) + reviewed: Final = replace_job(first, reduce(add_review, (review(0), review(1)), first.jobs[0])) + stalled: Final = reviewed.jobs[0].model_copy( + update={"reading": (InFlight(execution_id="run-2", trace_id="t", agent="support", started_at=NOW),)} + ) + reclaimed: Final = claim_job(replace_job(reviewed, stalled), worker(identity="other"), NOW + timedelta(minutes=6)) + job: Final = reclaimed.jobs[0] + assert job.worker_id == "other" + assert (job.reviews, job.reviewed, job.reading) == ((), 0, ()) + replayed: Final = reduce(add_review, (review(0), review(1)), job) + assert replayed.reviewed == len(replayed.reviews) == 2 + + def test_progress_without_a_review_leaves_the_review_history_alone() -> None: job: Final = add_review(queue_job(lens(), NOW, "job").jobs[0], review(0)) assert add_review(job, None) == job