File size: 2,184 Bytes
2d82711
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
"""Smoke-test the Beam GPU captioner against real frames.

Usage (from the repo root, with DOCUMAKER_BEAM_CAPTION_URL / DOCUMAKER_BEAM_TOKEN
set in .env or the environment):

    python scripts/test_beam_captions.py [frame.png ...]

With no arguments it picks a few frames out of ``work/``. Prints the caption each
backend produces so you can see the Qwen2.5-VL vs BLIP difference directly.
"""
from __future__ import annotations

import sys
import time
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parent.parent))

from src import config, vision  # noqa: E402


def find_frames(limit: int = 3) -> list[Path]:
    work = Path(__file__).resolve().parent.parent / "work"
    frames = sorted(work.glob("*/frames/*.png"))
    return frames[:limit]


def main() -> int:
    paths = [Path(a) for a in sys.argv[1:]] or find_frames()
    paths = [p for p in paths if p.exists()]
    if not paths:
        print("No frames found. Pass image paths explicitly.")
        return 1

    print(f"Beam URL   : {config.BEAM_CAPTION_URL or '(unset)'}")
    print(f"Beam token : {'set' if config.BEAM_CAPTION_TOKEN else '(unset)'}")
    print(f"Frames     : {len(paths)}\n")

    if not config.BEAM_CAPTION_URL:
        print("DOCUMAKER_BEAM_CAPTION_URL is unset — caption_batch would fall back "
              "to the HF API / local BLIP. Set it to test the GPU path.")
        return 1

    start = time.time()
    captions = vision.caption_batch([(p, "") for p in paths])
    elapsed = time.time() - start

    for path, caption in zip(paths, captions):
        print(f"--- {path.name}")
        print(f"    {caption or '(empty)'}\n")

    ok = sum(1 for c in captions if c)
    print(f"{ok}/{len(paths)} captioned in {elapsed:.1f}s "
          f"({elapsed / max(len(paths), 1):.1f}s per frame)")
    # _BEAM_DISABLED flips on the first hard failure (bad URL/token/endpoint).
    if vision._BEAM_DISABLED:
        print("\nNOTE: the Beam backend errored and was disabled for this run — "
              "captions above (if any) came from the HF API or local BLIP.")
        return 1
    return 0 if ok else 1


if __name__ == "__main__":
    raise SystemExit(main())