Job_Scheduler_Env / hf_debug.py
Atharva1232's picture
Upload folder using huggingface_hub
5d6a21a verified
Raw
History Blame Contribute Delete
4.62 kB
#!/usr/bin/env python3
"""
Debug script to test environment on HuggingFace Spaces.
This connects to the online deployed environment instead of local.
"""
from Job_Scheduler_Env import JobSchedulerEnvEnv, JobSchedulerEnvAction
def parse_action(text: str) -> str:
"""Extract (job_id, machine_id) from model output."""
import re
match = re.search(r'\(\s*(\d+)\s*,\s*(\d+)\s*\)', text)
if match:
return f"({match.group(1)}, {match.group(2)})"
return None
async def test_environment():
"""Test if HF Spaces environment works and gives non-constant rewards."""
print("=" * 60)
print("Testing Job Scheduler Environment on HF Spaces")
print("=" * 60)
# Connect to HF Spaces environment
env = await JobSchedulerEnvEnv.from_env("Atharva1232/Job_Scheduler_Env")
async with env:
# Test 1: Reset
print("\n1. Testing reset()...")
try:
result = await env.reset()
obs = result.observation
print(f" ✓ Reset successful")
print(f" - Current time: {obs.current_time}")
print(f" - Jobs: {len(obs.job_info)}")
print(f" - Machines: {len(obs.machine_info)}")
print(f" - Description: {obs.llm_description[:100]}")
except Exception as e:
print(f" ✗ Reset failed: {e}")
return
# Test 2: Parse action from description
print("\n2. Testing action extraction...")
job_ids = [j["id"] for j in obs.job_info]
machine_ids = [m["id"] for m in obs.machine_info]
if job_ids and machine_ids:
test_action_str = f"({job_ids[0]}, {machine_ids[0]})"
print(f" Test action: {test_action_str}")
else:
print(f" ✗ No jobs or machines available")
return
# Test 3: Step with valid action
print("\n3. Testing step() with valid action...")
try:
action = JobSchedulerEnvAction(action=test_action_str)
result = await env.step(action)
obs = result.observation
reward = result.reward
done = result.done
print(f" ✓ Step successful")
print(f" - Reward: {reward}")
print(f" - Done: {done}")
print(f" - New description: {obs.llm_description[:100]}")
except Exception as e:
print(f" ✗ Step failed: {e}")
return
# Test 4: Step with invalid action
print("\n4. Testing step() with invalid action...")
try:
action = JobSchedulerEnvAction(action="(99999, 99999)")
result = await env.step(action)
reward = result.reward
print(f" ✓ Invalid action handled")
print(f" - Reward for invalid action: {reward}")
except Exception as e:
print(f" ✗ Invalid action caused error: {e}")
# Test 5: Multiple episodes
print("\n5. Testing multiple episodes...")
rewards_list = []
for ep in range(3):
result = await env.reset()
obs = result.observation
ep_reward = 0
for step in range(5):
jobs = obs.job_info
machines = obs.machine_info
if jobs and machines:
job_id = jobs[0]["id"]
machine_id = machines[0]["id"]
action_str = f"({job_id}, {machine_id})"
action = JobSchedulerEnvAction(action=action_str)
result = await env.step(action)
obs = result.observation
ep_reward += float(result.reward or 0.0)
if result.done:
break
rewards_list.append(ep_reward)
print(f" Episode {ep + 1}: reward={ep_reward:.2f}")
avg_reward = sum(rewards_list) / len(rewards_list) if rewards_list else 0
reward_std = (sum((r - avg_reward) ** 2 for r in rewards_list) / len(rewards_list)) ** 0.5
print(f" Average: {avg_reward:.2f}, Std: {reward_std:.2f}")
if reward_std < 0.1:
print(f"\n ⚠️ WARNING: Reward variation is very low (std={reward_std:.4f})")
print(f" This will prevent the model from learning!")
print("\n" + "=" * 60)
print("Diagnosis Complete")
print("=" * 60)
if __name__ == "__main__":
print("Testing Job Scheduler Environment on HF Spaces...")
print("Make sure the space is deployed and running.\n")
import asyncio
asyncio.run(test_environment())