from flask import Flask, request, jsonify from stockfish import Stockfish app = Flask(__name__) # Replace YOUR_API_TOKEN with the API token you want to use for authentication API_TOKEN = "blunderboard-security-token" default_engine_settings = { "Debug Log File": "stocklog.txt", "Contempt": 0, "Min Split Depth": 0, "Threads": 2, # More threads will make the engine stronger, but should be kept at less than # the number of logical processors on your computer. "Ponder": "false", "Hash": 516, # Default size is 16 MB. It's recommended that you increase this value, but keep # it as some power of 2. E.g., if you're fine using 2 GB of RAM, set Hash to # 2048 (11th power of 2). "MultiPV": 1, "Skill Level": 20, "Move Overhead": 10, "Minimum Thinking Time": 5, "Slow Mover": 100, "UCI_Chess960": "false", "UCI_LimitStrength": "false", "UCI_Elo": 1350, # "NNUE": "true", # TODO Find out if NNUE can be used with the python wrapper } # Create a Stockfish chess engine instance engine = Stockfish(path="/usr/bin/stockfish") # Set the engine settings engine.update_engine_parameters(default_engine_settings) @app.route("/api/get_evaluation", methods=["POST"]) def get_evaluation(): # Get the API token from the request header token = request.headers.get("Authorization") # If the API token is not provided or is invalid, return an error if token != API_TOKEN: return jsonify({"error": "Invalid API token"}), 401 # Get the current chess position and the desired depth from the request body data = request.get_json() position = data.get("position") depth = data.get("depth") # Set the position and search depth in the chess engine engine.set_fen_position(position) engine.set_depth(depth) # Get the evaluation in centipawns evaluation = engine.get_evaluation() # Return the evaluation to the client return evaluation if __name__ == "__main__": app.run(host="")