"""
Monitor training progress without blocking.
"""

import os
import time
import json
from datetime import datetime

checkpoint_dir = './checkpoints/benchmark_run'

print("Monitoring training progress...")
print("Press Ctrl+C to stop monitoring\n")

try:
    while True:
        if os.path.exists(checkpoint_dir):
            # Check for checkpoints
            checkpoints = [f for f in os.listdir(checkpoint_dir) if f.endswith('.pt')]
            
            if checkpoints:
                latest = max(checkpoints, key=lambda f: os.path.getmtime(os.path.join(checkpoint_dir, f)))
                mtime = datetime.fromtimestamp(os.path.getmtime(os.path.join(checkpoint_dir, latest)))
                print(f"[{datetime.now().strftime('%H:%M:%S')}] Latest checkpoint: {latest} (modified {mtime.strftime('%H:%M:%S')})")
            
            # Check for eval results
            eval_files = [f for f in os.listdir(checkpoint_dir) if f.startswith('eval_results')]
            if eval_files:
                latest_eval = max(eval_files)
                print(f"  Latest evaluation: {latest_eval}")
                
                # Try to read and display
                try:
                    with open(os.path.join(checkpoint_dir, latest_eval), 'r') as f:
                        results = json.load(f)
                        for dataset, metrics in results.items():
                            if dataset != 'model_info':
                                ppl = metrics.get('perplexity', 'N/A')
                                acc = metrics.get('accuracy', 'N/A')
                                if isinstance(acc, float):
                                    acc = acc * 100
                                print(f"    {dataset}: PPL={ppl:.2f if isinstance(ppl, float) else ppl}, Acc={acc:.2f if isinstance(acc, float) else acc}%")
                except:
                    pass
        
        time.sleep(30)  # Check every 30 seconds
        
except KeyboardInterrupt:
    print("\nMonitoring stopped.")



