File size: 1,950 Bytes
5c776db
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7594762
 
 
5c776db
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
#!/usr/bin/env python3
"""Push offline board-evals (Hart's glint_parity numbers) to an EXISTING fabryka run as
clean board/* metrics (not eval_-prefixed). Attaches by FABRYKA_RUN_ID.

Usage: FABRYKA_API_KEY=... python eval_push.py RUN_ID RUN_NAME STEP 'JSON_METRICS'
  e.g. eval_push.py 538058fc-394b-4cb4-9057-b190685dbf2a GoLLeM-v5-64M-forkB-arcmix-edu \
       340000 '{"board/arc_easy":46.42,"board/blimp":77.53}'
"""
import json
import os
import sys

run_id = sys.argv[1]
name = sys.argv[2]
step = int(sys.argv[3])
metrics = json.loads(sys.argv[4])
os.environ["FABRYKA_RUN_ID"] = run_id  # must be set BEFORE RunClient reads it


def _patch():
    """Make installed SDK honor FABRYKA_RUN_ID (idempotent; pusher may have done it already)."""
    try:
        import fabryka
        p = os.path.join(os.path.dirname(fabryka.__file__), "client.py")
        s = open(p, encoding="utf-8").read()
        if "FABRYKA_RUN_ID" not in s:
            s = s.replace("self.run_id = str(uuid.uuid4())",
                          'self.run_id = os.getenv("FABRYKA_RUN_ID") or str(uuid.uuid4())')
            open(p, "w", encoding="utf-8").write(s)
            for mod in [m for m in sys.modules if m == "fabryka" or m.startswith("fabryka.")]:
                del sys.modules[mod]
    except Exception as e:
        print(f"[eval_push] patch skipped: {e}", flush=True)


_patch()
from fabryka import RunClient

client = RunClient(api_url=os.environ.get("FABRYKA_API_URL", "https://track.fabryka.ai"),
                   api_key=os.environ["FABRYKA_API_KEY"])
client.init(project="gollem-v5", name=name)
client.log({k: float(v) for k, v in metrics.items()}, step=step)
# SDK _atexit calls finish(state="failed") on exit; null run_id so this short-lived push does NOT
# override the live pusher's run-state (we only append a metric, never own/finish the run).
client.run_id = None
print(f"[eval_push] pushed {metrics} @ step {step} -> run {run_id}", flush=True)