Code/API/AnalysisAPI.cs

Client API method that queries Lichess cloud analysis for a FEN position and returns a PositionEvaluation. It builds a request with fen, multiPv and variant query parameters, enforces a rate limit, sends the request, reads JSON and deserializes to PositionEvaluation.

NetworkingHttp Calls
🌐 api/cloud-eval
#nullable enable annotations

using LichessNET.Entities.Analysis;
using LichessNET.Entities.Enumerations;
using LichessNET.Extensions;

namespace LichessNET.API;

public partial class LichessApiClient
{
    /// <summary>
    /// Gets the evaluation of a position from the Lichess cloud analysis.
    /// </summary>
    /// <param name="fen">The FEN of the position</param>
    /// <param name="multiPv">How much different variants to include in the analysis. Can go up to 5.</param>
    /// <param name="variant">Which chess variant the game is from</param>
    /// <returns>A PositionEvaluation object</returns>
    public async Task<PositionEvaluation> GetCloudEvaluationAsync(string fen, int multiPv = 1,
        ChessVariant variant = ChessVariant.Standard)
    {
        await _ratelimitController.Consume();

        var endpoint = $"api/cloud-eval";
        var request = GetRequestScaffold(endpoint,
            Tuple.Create("fen", fen),
            Tuple.Create("multiPv", multiPv.ToString()),
            Tuple.Create("variant", variant.GetApiName()));

        var response = await SendRequest(request);
        var content = await response.Content.ReadAsStringAsync();

        var evaluationResponse = LichessJson.Deserialize<PositionEvaluation>(content);
        return evaluationResponse;
    }
}