SPB Git

Repository Public Research preview

batch_wait.py 1.5 KB 46 lines python

1#!/usr/bin/env python32"""Poll the Anthropic Message Batches of a job until every batch has ended (or a time limit), printing one status3line per poll. Exit code 0 = all ended, 2 = time limit reached."""4from __future__ import annotations56import argparse7import sys8import time9from pathlib import Path1011ROOT = Path(__file__).resolve().parents[1]12sys.path.insert(0, str(ROOT / "src"))13from htr.utils.io import read_json  # noqa: E402141516def main() -> None:17    ap = argparse.ArgumentParser()18    ap.add_argument("--job", required=True)19    ap.add_argument("--interval", type=int, default=300)20    ap.add_argument("--max-minutes", type=int, default=600)21    a = ap.parse_args()22    import anthropic2324    client = anthropic.Anthropic()25    led = read_json(ROOT / "data/pairs" / a.job / "ledger.json")26    t0 = time.time()27    while True:28        ended = succ = err = proc = 029        for b in led["batches"]:30            r = client.messages.batches.retrieve(b)31            rc = r.request_counts32            ended += r.processing_status == "ended"33            succ += rc.succeeded34            err += rc.errored + rc.canceled + rc.expired35            proc += rc.processing36        print(f"{time.strftime('%H:%M:%S')} batches ended {ended}/{len(led['batches'])} succeeded {succ} errored {err} processing {proc}", flush=True)37        if ended == len(led["batches"]):38            sys.exit(0)39        if (time.time() - t0) / 60 > a.max_minutes:40            sys.exit(2)41        time.sleep(a.interval)424344if __name__ == "__main__":45    main()46
Files main
Menu

Theme