Spaces:
Running
Running
| #!/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) | |