| |
| """ |
| Example usage of the Advanced Magnus Chess Model from Hugging Face |
| """ |
|
|
| import torch |
| import chess |
| import yaml |
| import json |
| from pathlib import Path |
| import sys |
|
|
| |
| sys.path.append(".") |
|
|
|
|
| def load_model_from_hf(): |
| """Load the Advanced Magnus model""" |
| try: |
| from advanced_magnus_predictor import AdvancedMagnusPredictor |
|
|
| |
| predictor = AdvancedMagnusPredictor() |
|
|
| if predictor.model is None: |
| raise Exception("Failed to load model") |
|
|
| print("β
Advanced Magnus Chess Model loaded successfully!") |
| print(f" Device: {predictor.device}") |
| print(f" Vocabulary size: {predictor.vocab_size}") |
| print( |
| f" Parameters: {sum(p.numel() for p in predictor.model.parameters()):,}" |
| ) |
|
|
| return predictor |
|
|
| except Exception as e: |
| print(f"β Failed to load model: {e}") |
| return None |
|
|
|
|
| def demo_predictions(predictor): |
| """Demonstrate model predictions on various positions""" |
|
|
| print("\nπ― Magnus Style Move Predictions Demo") |
| print("=" * 50) |
|
|
| |
| positions = [ |
| { |
| "name": "Opening - King's Pawn", |
| "fen": "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1", |
| "description": "Black to move after 1.e4", |
| }, |
| { |
| "name": "Sicilian Defense", |
| "fen": "rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 2", |
| "description": "White to move after 1.e4 c5", |
| }, |
| { |
| "name": "Queen's Gambit", |
| "fen": "rnbqkbnr/ppp1pppp/8/3p4/2PP4/8/PP2PPPP/RNBQKBNR b KQkq c3 0 2", |
| "description": "Black to move after 1.d4 d5 2.c4", |
| }, |
| ] |
|
|
| for pos in positions: |
| print(f"\nπ {pos['name']}") |
| print(f" {pos['description']}") |
| print(f" FEN: {pos['fen']}") |
|
|
| try: |
| board = chess.Board(pos["fen"]) |
| predictions = predictor.predict_moves(board, top_k=3) |
|
|
| print(" π§ Magnus-style predictions:") |
| for i, pred in enumerate(predictions[:3], 1): |
| move = pred["move"] |
| confidence = pred["confidence"] |
| san = board.san(chess.Move.from_uci(move)) |
| print(f" {i}. {san} ({move}) - {confidence:.3f} confidence") |
|
|
| except Exception as e: |
| print(f" β Error predicting for this position: {e}") |
|
|
|
|
| def show_model_info(): |
| """Display model information""" |
| print("\nπ Model Information") |
| print("=" * 30) |
|
|
| |
| if Path("config.yaml").exists(): |
| with open("config.yaml", "r") as f: |
| config = yaml.safe_load(f) |
|
|
| print(f"Architecture: {config['model']['architecture']}") |
| print(f"Version: {config['model']['version']}") |
| print(f"Parameters: {config['training']['total_params']:,}") |
| print(f"Vocabulary: {config['training']['vocab_size']} moves") |
| print( |
| f"Training time: {config['metrics']['training_time_minutes']:.1f} minutes" |
| ) |
| print(f"Test accuracy: {config['metrics']['test_accuracy']:.4f}") |
| print(f"Top-3 accuracy: {config['metrics']['test_top3_accuracy']:.4f}") |
| print(f"Top-5 accuracy: {config['metrics']['test_top5_accuracy']:.4f}") |
|
|
| |
| if Path("version.json").exists(): |
| with open("version.json", "r") as f: |
| version = json.load(f) |
|
|
| print(f"\nModel ID: {version['model_id']}") |
| print(f"Timestamp: {version['timestamp']}") |
| print(f"Hash: {version['model_hash'][:16]}...") |
|
|
|
|
| def main(): |
| """Main demo function""" |
| print("π― Advanced Magnus Chess Model - Demo") |
| print("π Trained on Magnus Carlsen's games") |
| print("=" * 60) |
|
|
| |
| show_model_info() |
|
|
| |
| predictor = load_model_from_hf() |
|
|
| if predictor is None: |
| print("Failed to load model. Please ensure all files are present.") |
| return |
|
|
| |
| demo_predictions(predictor) |
|
|
| print("\n" + "=" * 60) |
| print("β¨ Demo completed! Try your own positions with the predictor.") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|