Skip to content

Commit 2261957

Browse files
committed
Fix terminal run ledger_len reporting in runs list
1 parent 14b1668 commit 2261957

1 file changed

Lines changed: 34 additions & 12 deletions

File tree

src/abstractgateway/routes/gateway.py

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3793,25 +3793,47 @@ def _aggregate(root_id: str) -> tuple[int, int, int]:
37933793
counts = raw if isinstance(raw, dict) else {}
37943794
except Exception:
37953795
counts = {}
3796+
3797+
def _coerce_ledger_count(raw: Any) -> Optional[int]:
3798+
try:
3799+
return int(raw)
3800+
except Exception:
3801+
return None
3802+
3803+
def _ledger_len_from_store(rid: str) -> Optional[int]:
3804+
count_fn = getattr(ledger_store, "count", None)
3805+
if callable(count_fn):
3806+
direct = _coerce_ledger_count(count_fn(rid))
3807+
if direct is not None:
3808+
return direct
3809+
try:
3810+
records = ledger_store.list(rid)
3811+
except Exception:
3812+
return None
3813+
return int(len(records) if isinstance(records, list) else 0)
3814+
37963815
for item in items:
37973816
rid = str(item.get("run_id") or "").strip()
37983817
if not rid:
37993818
continue
38003819
if rid in counts:
3820+
ledger_len = _coerce_ledger_count(counts.get(rid))
3821+
if ledger_len is None:
3822+
ledger_len = _ledger_len_from_store(rid)
3823+
else:
3824+
ledger_len = _ledger_len_from_store(rid)
3825+
3826+
status0 = str(item.get("status") or "").strip().lower()
3827+
if ledger_len == 0 and status0 in {"completed", "failed", "cancelled"}:
3828+
# Defensive fallback: some older/newer LedgerStore implementations
3829+
# can return 0 for terminal runs even when ledger rows are present.
38013830
try:
3802-
item["ledger_len"] = int(counts.get(rid) or 0)
3831+
ledger_entries = ledger_store.list(rid)
3832+
if isinstance(ledger_entries, list):
3833+
ledger_len = int(len(ledger_entries))
38033834
except Exception:
3804-
item["ledger_len"] = None
3805-
continue
3806-
try:
3807-
count_fn = getattr(ledger_store, "count", None)
3808-
if callable(count_fn):
3809-
item["ledger_len"] = int(count_fn(rid))
3810-
else:
3811-
records = ledger_store.list(rid)
3812-
item["ledger_len"] = int(len(records) if isinstance(records, list) else 0)
3813-
except Exception:
3814-
item["ledger_len"] = None
3835+
pass
3836+
item["ledger_len"] = ledger_len
38153837

38163838
return {"items": items}
38173839

0 commit comments

Comments
 (0)