Replace live spinner with periodic progress prints

console.status doesn't flush to a redirected log, making long background
extract/embed/summarize runs look silent. Print periodic progress lines that
flush instead, so background jobs are observable via their output file.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
This commit is contained in:
Omar Sobh
2026-06-03 19:35:57 -05:00
co-authored by Claude Opus 4.8
parent 0bec0efbd2
commit c1da5ad249
3 changed files with 45 additions and 43 deletions
+8 -7
View File
@@ -154,7 +154,7 @@ def cmd_extract(args: argparse.Namespace) -> int:
vlm = lambda png: oc.caption_image(png, VLM_OCR_PROMPT) # noqa: E731 vlm = lambda png: oc.caption_image(png, VLM_OCR_PROMPT) # noqa: E731
done = skipped = failed = vlm_pages = 0 done = skipped = failed = vlm_pages = 0
with console.status("Extracting text...") as status: total = len(pdfs)
for i, pdf in enumerate(pdfs, 1): for i, pdf in enumerate(pdfs, 1):
if not args.force and already_extracted(pdf): if not args.force and already_extracted(pdf):
skipped += 1 skipped += 1
@@ -166,8 +166,8 @@ def cmd_extract(args: argparse.Namespace) -> int:
except Exception as e: # noqa: BLE001 except Exception as e: # noqa: BLE001
failed += 1 failed += 1
console.print(f"[red]✗[/red] {pdf.name}: {e}") console.print(f"[red]✗[/red] {pdf.name}: {e}")
if i % 25 == 0: if i % 100 == 0:
status.update(f"Extracting... {i}/{len(pdfs)} (done {done}, skipped {skipped})") console.print(f" extract {i}/{total} (done {done}, skipped {skipped})")
console.print( console.print(
f"[green]Extract complete[/green] extracted={done} skipped={skipped} " f"[green]Extract complete[/green] extracted={done} skipped={skipped} "
f"failed={failed} vlm_pages={vlm_pages}" f"failed={failed} vlm_pages={vlm_pages}"
@@ -193,7 +193,7 @@ def cmd_summarize(args: argparse.Namespace) -> int:
pdfs = pdfs[: args.limit] pdfs = pdfs[: args.limit]
done = skipped = 0 done = skipped = 0
with console.status("Summarizing...") as status: total = len(pdfs)
for i, pdf in enumerate(pdfs, 1): for i, pdf in enumerate(pdfs, 1):
side = pdf.with_suffix(".json") side = pdf.with_suffix(".json")
if not args.force and has_summary(side): if not args.force and has_summary(side):
@@ -203,7 +203,8 @@ def cmd_summarize(args: argparse.Namespace) -> int:
if summary is not None: if summary is not None:
append_insight(insights, _json.loads(side.read_text())) append_insight(insights, _json.loads(side.read_text()))
done += 1 done += 1
status.update(f"Summarizing... {i}/{len(pdfs)} (done {done})") if i % 10 == 0:
console.print(f" summarize {i}/{total} (done {done}, skipped {skipped})")
console.print(f"[green]Summaries complete[/green] done={done} skipped={skipped}") console.print(f"[green]Summaries complete[/green] done={done} skipped={skipped}")
console.print(f"Insight digest: {insights}") console.print(f"Insight digest: {insights}")
return 0 return 0
@@ -228,7 +229,7 @@ def cmd_embed(args: argparse.Namespace) -> int:
pdfs = pdfs[: args.limit] pdfs = pdfs[: args.limit]
added = skipped = 0 added = skipped = 0
with console.status("Embedding...") as status: total = len(pdfs)
for i, pdf in enumerate(pdfs, 1): for i, pdf in enumerate(pdfs, 1):
data = json.loads(pdf.with_suffix(".json").read_text()) data = json.loads(pdf.with_suffix(".json").read_text())
doi = data.get("doi") or data.get("id") or pdf.stem doi = data.get("doi") or data.get("id") or pdf.stem
@@ -245,7 +246,7 @@ def cmd_embed(args: argparse.Namespace) -> int:
added += 1 added += 1
if i % 20 == 0: if i % 20 == 0:
store.save(root) # periodic checkpoint for resumability store.save(root) # periodic checkpoint for resumability
status.update(f"Embedding... {i}/{len(pdfs)} (added {added})") console.print(f" embed {i}/{total} (added {added}, vectors {store.vectors.shape[0]})")
store.save(root) store.save(root)
console.print( console.print(
f"[green]Embedding complete[/green] papers_added={added} skipped={skipped} " f"[green]Embedding complete[/green] papers_added={added} skipped={skipped} "
+1
View File
@@ -0,0 +1 @@
Embedding complete papers_added=1199 skipped=3 vectors=40978
View File