Gridmind / verify_readiness.py
adityss's picture
Add coordinator endpoint tests and project readiness verification script
88da572
#!/usr/bin/env python3
"""Final project readiness verification."""
import json
import os
import subprocess
import sys
from pathlib import Path
GRIDMIND_ROOT = Path(".")
def check_file_exists(path: str, description: str) -> bool:
"""Check if a file exists."""
exists = os.path.exists(path)
status = "✓" if exists else "✗"
print(f" {status} {description:<50} ({path})")
return exists
def check_directory_exists(path: str, description: str) -> bool:
"""Check if a directory exists."""
exists = os.path.isdir(path)
status = "✓" if exists else "✗"
print(f" {status} {description:<50} ({path})")
return exists
def check_file_size(path: str, min_bytes: int, description: str) -> bool:
"""Check if a file exists and is above minimum size."""
if not os.path.exists(path):
print(f" ✗ {description:<50} (not found)")
return False
size = os.path.getsize(path)
ok = size >= min_bytes
status = "✓" if ok else "✗"
print(f" {status} {description:<50} ({size} bytes, min {min_bytes})")
return ok
print("=" * 70)
print("GridMind-RL PROJECT READINESS CHECK")
print("=" * 70)
all_ok = True
# 1. Essential Files
print("\n1. ESSENTIAL FILES")
all_ok &= check_file_exists("main.go", "Go server main file")
all_ok &= check_file_exists("inference.py", "Python inference script")
all_ok &= check_file_exists("go.mod", "Go module file")
all_ok &= check_file_exists("go.sum", "Go dependencies")
# 2. Environment Module
print("\n2. ENVIRONMENT PACKAGE")
all_ok &= check_directory_exists("env", "Environment package directory")
all_ok &= check_file_exists("env/environment.go", "Main environment logic")
all_ok &= check_file_exists("env/models.go", "Data models")
all_ok &= check_file_exists("env/rewards.go", "Reward computation")
all_ok &= check_file_exists("env/faults.go", "Fault system")
all_ok &= check_file_exists("env/tasks.go", "Task definitions")
# 3. Python Module
print("\n3. PYTHON PACKAGE")
all_ok &= check_directory_exists("python", "Python package directory")
all_ok &= check_file_exists("python/__init__.py", "Python package init")
all_ok &= check_file_exists("python/models.py", "Python models")
all_ok &= check_file_size("python/requirements.txt", 100, "Python requirements")
# 4. Notebooks
print("\n4. NOTEBOOKS")
all_ok &= check_file_size("scripts/gridmind_grpo_colab.ipynb", 20000, "Colab notebook (≥20KB)")
# 5. Dashboard
print("\n5. DASHBOARD")
all_ok &= check_directory_exists("dashboard", "Dashboard directory")
all_ok &= check_file_exists("dashboard/server.py", "Dashboard server")
all_ok &= check_file_exists("dashboard/static/index.html", "Dashboard HTML")
all_ok &= check_file_exists("dashboard/static/dashboard.js", "Dashboard JavaScript")
# 6. Test Files
print("\n6. TEST/DEMO FILES")
all_ok &= check_file_exists("scripts/demo_run.py", "Demo runner")
all_ok &= check_file_exists("scripts/full_demo.py", "Full demo")
all_ok &= check_file_exists("tests/environment_test.go", "Go tests")
# 7. README & Docs
print("\n7. DOCUMENTATION")
all_ok &= check_file_exists("README.md", "README")
all_ok &= check_file_exists("HF_BLOG_POST.md", "Blog post")
# 8. Key Features Check
print("\n8. KEY FEATURES (Code Inspection)")
try:
with open("inference.py", encoding="utf-8-sig", errors="ignore") as f:
content = f.read()
has_coordinator = "--coordinator" in content and "coordinator_step" in content
has_curriculum = "CurriculumManager" in content
has_planning = "--use-planning" in content and "simulate" in content
status = "✓" if has_coordinator else "✗"
print(f" {status} Multi-Agent Coordinator mode (Theme 1)")
status = "✓" if has_curriculum else "✗"
print(f" {status} Curriculum Learning (Theme 4)")
status = "✓" if has_planning else "✗"
print(f" {status} World Modeling (/simulate) (Theme 3)")
all_ok &= has_coordinator and has_curriculum and has_planning
except Exception as e:
print(f" ✗ Could not read inference.py: {e}")
all_ok = False
try:
with open("main.go", encoding="utf-8-sig", errors="ignore") as f:
content = f.read()
has_coord_reset = "handleCoordinatorReset" in content
has_coord_step = "handleCoordinatorStep" in content
has_simulate = "handleSimulate" in content
has_reset = "handleReset" in content
status = "✓" if has_coord_reset else "✗"
print(f" {status} /coordinator/reset endpoint")
status = "✓" if has_coord_step else "✗"
print(f" {status} /coordinator/step endpoint")
status = "✓" if has_simulate else "✗"
print(f" {status} /simulate endpoint (world modeling)")
status = "✓" if has_reset else "✗"
print(f" {status} /reset endpoint (task 1-4 support)")
all_ok &= has_coord_reset and has_coord_step and has_simulate and has_reset
except Exception as e:
print(f" ✗ Could not read main.go: {e}")
all_ok = False
# 9. Test Quick Functionality
print("\n9. QUICK FUNCTIONALITY TEST")
try:
import requests
health = requests.get("http://localhost:7860/health", timeout=5)
if health.status_code == 200:
print(f" ✓ Server health check passed (port 7860)")
else:
print(f" ✗ Server health check failed ({health.status_code})")
all_ok = False
except Exception as e:
print(f" ✗ Could not reach server: {e}")
all_ok = False
# Final Summary
print("\n" + "=" * 70)
if all_ok:
print("✓ PROJECT READY FOR SUBMISSION")
print("=" * 70)
sys.exit(0)
else:
print("✗ SOME CHECKS FAILED - REVIEW REQUIRED")
print("=" * 70)
sys.exit(1)