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