Dev176's picture
Initial project structure for Meta PyTorch OpenEnv Hackathon
18db941
"""
Pre-submission validation script.
Run this before submitting to check all automated judge requirements.
Usage: python scripts/validate.py
"""
import httpx
import yaml
import sys
BASE_URL = "http://localhost:8000"
PASS = "✅"
FAIL = "❌"
results = []
def check(label: str, passed: bool, detail: str = ""):
icon = PASS if passed else FAIL
print(f" {icon} {label}" + (f" — {detail}" if detail else ""))
results.append(passed)
def main():
print("\n🔍 Pre-submission validation\n")
# 1. openenv.yaml exists and is valid
try:
with open("openenv.yaml") as f:
config = yaml.safe_load(f)
check("openenv.yaml valid", True)
tasks = config.get("tasks", [])
check("3+ tasks defined", len(tasks) >= 3, f"{len(tasks)} tasks found")
except Exception as e:
check("openenv.yaml valid", False, str(e))
# 2. Server reachable
try:
r = httpx.get(f"{BASE_URL}/tasks", timeout=5)
check("Server reachable", r.status_code == 200)
except Exception as e:
check("Server reachable", False, str(e))
print("\n⚠️ Start the server first: uvicorn src.environment.server:app --host 0.0.0.0 --port 8000")
sys.exit(1)
# 3. /reset responds
try:
r = httpx.post(f"{BASE_URL}/reset", timeout=5)
check("/reset returns 200", r.status_code == 200)
except Exception as e:
check("/reset returns 200", False, str(e))
# 4. /tasks lists 3+ tasks
try:
r = httpx.get(f"{BASE_URL}/tasks", timeout=5)
task_list = r.json().get("tasks", [])
check("/tasks returns 3+ tasks", len(task_list) >= 3, f"{len(task_list)} returned")
except Exception as e:
check("/tasks returns 3+ tasks", False, str(e))
# 5. /grader scores in 0.0–1.0 range
try:
r = httpx.get(f"{BASE_URL}/grader", params={"task_id": "task_easy"}, timeout=5)
score = r.json().get("score", -1)
check("Grader score in 0.0–1.0", 0.0 <= score <= 1.0, f"score={score}")
except Exception as e:
check("Grader score in 0.0–1.0", False, str(e))
# 6. /baseline runs
try:
r = httpx.get(f"{BASE_URL}/baseline", timeout=30)
check("/baseline returns 200", r.status_code == 200)
except Exception as e:
check("/baseline returns 200", False, str(e))
passed = sum(results)
total = len(results)
print(f"\n{'='*40}")
print(f"Result: {passed}/{total} checks passed")
if passed == total:
print("🎉 Ready to submit!")
else:
print("⚠️ Fix the failing checks before submitting.")
print("="*40 + "\n")
sys.exit(0 if passed == total else 1)
if __name__ == "__main__":
main()