config-debug-env / test_validator_simulation.py
Deepika
Initial commit: config debug environment application
398d45e
Raw
History Blame Contribute Delete
3.78 kB
"""
Simulates EXACTLY what the Scaler validator does:
1. Import grader classes from openenv.yaml paths
2. Instantiate each class
3. Call .grade(env) or .grade(None)
4. Check score is strictly in (0.01, 0.99)
Run: python test_validator_simulation.py
"""
import sys
import os
# Add project root to path
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
def test_grader_classes():
print("=" * 60)
print("VALIDATOR SIMULATION: Testing grader classes")
print("=" * 60)
from server.graders.grader_api import (
Task1Grader, Task2Grader, Task3Grader,
Task4Grader, Task5Grader, Task6Grader, Task7Grader,
)
graders = {
"task1_json": Task1Grader(),
"task2_yaml": Task2Grader(),
"task3_dockerfile": Task3Grader(),
"task4_compose": Task4Grader(),
"task5_k8s": Task5Grader(),
"task6_github_actions": Task6Grader(),
"task7_nginx": Task7Grader(),
}
all_pass = True
for task_id, grader in graders.items():
# Test 1: .grade(None) β€” validator may call with None
score_none = grader.grade(None)
ok_none = 0.0 < score_none < 1.0
# Test 2: .grade(env) β€” validator passes environment
from server.config_debug_environment import ConfigDebugEnvironment
env = ConfigDebugEnvironment()
env.reset(task_id=task_id)
score_env = grader.grade(env)
ok_env = 0.0 < score_env < 1.0
# Test 3: .grade(ground_truth_string) β€” direct string
from server.tasks.task_registry import get_task
task = get_task(task_id)
score_gt = grader.grade(task.ground_truth)
ok_gt = 0.0 < score_gt < 1.0
status = "PASS" if (ok_none and ok_env and ok_gt) else "FAIL"
if not (ok_none and ok_env and ok_gt):
all_pass = False
print(f"\n[{status}] {task_id}")
print(f" .grade(None) = {score_none:.4f} {'OK' if ok_none else 'OUT OF RANGE!'}")
print(f" .grade(env) = {score_env:.4f} {'OK' if ok_env else 'OUT OF RANGE!'}")
print(f" .grade(ground_truth) = {score_gt:.4f} {'OK' if ok_gt else 'OUT OF RANGE!'}")
# Strict check
if score_none == 0.0 or score_none == 1.0:
print(f" FATAL: score is exactly {score_none} β€” validator rejects 0.0 and 1.0!")
all_pass = False
if score_env == 0.0 or score_env == 1.0:
print(f" FATAL: score is exactly {score_env} β€” validator rejects 0.0 and 1.0!")
all_pass = False
if score_gt == 0.0 or score_gt == 1.0:
print(f" FATAL: score is exactly {score_gt} β€” validator rejects 0.0 and 1.0!")
all_pass = False
print("\n" + "=" * 60)
if all_pass:
print("ALL TASKS PASSED β€” safe to push and submit!")
else:
print("SOME TASKS FAILED β€” fix before pushing!")
print("=" * 60)
def test_docker_verification():
"""The exact Docker test command from the Meta AI email."""
print("\n\nDOCKER VERIFICATION EQUIVALENT:")
print("-" * 40)
from server.graders.grader_api import (
Task1Grader, Task2Grader, Task3Grader,
Task4Grader, Task5Grader, Task6Grader, Task7Grader,
)
for name, cls in [
("Task1Grader", Task1Grader),
("Task2Grader", Task2Grader),
("Task3Grader", Task3Grader),
("Task4Grader", Task4Grader),
("Task5Grader", Task5Grader),
("Task6Grader", Task6Grader),
("Task7Grader", Task7Grader),
]:
score = cls().grade(None)
print(f"{name}().grade(None) = {score}")
if __name__ == "__main__":
test_grader_classes()
test_docker_verification()