import json import os import urllib.request URL = "https://mitvho09--robomind-gradio-serve.modal.run/judge/video" TEST_DIR = "temp_rollouts/test_battery" results = [] for fname in sorted(os.listdir(TEST_DIR)): if not fname.endswith(".mp4"): continue parts = fname.replace(".mp4", "").rsplit("_", 2) env_tier = fname.replace("_ep0.mp4", "") fpath = os.path.join(TEST_DIR, fname) print(f"Testing {env_tier}...", end=" ", flush=True) with open(fpath, "rb") as f: video_data = f.read() boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW" body = ( f"--{boundary}\r\n" f'Content-Disposition: form-data; name="file"; filename="{fname}"\r\n' f"Content-Type: video/mp4\r\n\r\n" ).encode() + video_data + f"\r\n--{boundary}--\r\n".encode() req = urllib.request.Request( URL, data=body, headers={"Content-Type": f"multipart/form-data; boundary={boundary}"}, method="POST", ) try: with urllib.request.urlopen(req, timeout=120) as resp: data = json.loads(resp.read().decode()) hybrid = data.get("hybrid", {}) reward = hybrid.get("predicted_reward", -1) vlm_reward = hybrid.get("vlm_reward", -1) rule_reward = hybrid.get("rule_reward", -1) stability = hybrid.get("stability", "?") method = hybrid.get("method", "?") print(f"reward={reward:.3f} vlm={vlm_reward:.3f} rule={rule_reward:.3f} stability={stability} method={method}") results.append({"env_tier": env_tier, "reward": reward, "vlm": vlm_reward, "rule": rule_reward, "stability": stability}) except Exception as e: print(f"ERROR: {e}") results.append({"env_tier": env_tier, "reward": -1, "error": str(e)}) print("\n=== SUMMARY ===") print(f"{'Env/Tier':<25} {'Reward':>7} {'VLM':>7} {'Rule':>7} {'Stability':<12}") print("-" * 60) for r in results: print(f"{r['env_tier']:<25} {r.get('reward',-1):>7.3f} {r.get('vlm',0):>7.3f} {r.get('rule',0):>7.3f} {r.get('stability','?'):<12}")