using System.Net.Http.Headers; namespace AnthropicClient.Models; /// /// Represents headers included in Anthropic API responses. /// public class AnthropicHeaders { private const string RequestIdHeaderKey = "request-id"; private const string RateLimitRequestsLimitHeaderKey = "anthropic-ratelimit-requests-limit"; private const string RateLimitRequestsRemainingHeaderKey = "anthropic-ratelimit-requests-remaining"; private const string RateLimitRequestsResetHeaderKey = "anthropic-ratelimit-requests-reset"; private const string RateLimitTokensLimitHeaderKey = "anthropic-ratelimit-tokens-limit"; private const string RateLimitTokensRemainingHeaderKey = "anthropic-ratelimit-tokens-remaining"; private const string RateLimitTokensResetHeaderKey = "anthropic-ratelimit-tokens-reset"; private const string RetryAfterHeaderKey = "retry-after"; /// /// Gets the request ID. /// public string RequestId { get; init; } = string.Empty; /// /// Gets the rate limit requests limit. /// public int RateLimitRequestsLimit { get; init; } /// /// Gets the rate limit requests remaining. /// public int RateLimitRequestsRemaining { get; init; } /// /// Gets the time of the rate limit requests reset. /// public DateTimeOffset RateLimitRequestsReset { get; init; } /// /// Gets the rate limit tokens limit. /// public int RateLimitTokensLimit { get; init; } /// /// Gets the rate limit tokens remaining. /// public int RateLimitTokensRemaining { get; init; } /// /// Gets the time of the rate limit tokens reset. /// public DateTimeOffset RateLimitTokensReset { get; init; } /// /// Gets the retry after value. /// public int RetryAfter { get; init; } internal AnthropicHeaders() { } /// /// Initializes a new instance of the class. /// /// The HTTP response headers. /// A new instance of the class. public AnthropicHeaders(HttpResponseHeaders headers) { RequestId = headers.TryGetValues(RequestIdHeaderKey, out var requestIdValues) ? requestIdValues.FirstOrDefault() : string.Empty; RateLimitRequestsLimit = int.Parse( headers.TryGetValues(RateLimitRequestsLimitHeaderKey, out var requestLimitValues) ? requestLimitValues.FirstOrDefault() : "0" ); RateLimitRequestsRemaining = int.Parse( headers.TryGetValues(RateLimitRequestsRemainingHeaderKey, out var remainingRequestsValues) ? remainingRequestsValues.FirstOrDefault() : "0" ); RateLimitRequestsReset = DateTimeOffset.Parse( headers.TryGetValues(RateLimitRequestsResetHeaderKey, out var requestResetValues) ? requestResetValues.FirstOrDefault() : DateTimeOffset.MinValue.ToString() ); RateLimitTokensLimit = int.Parse( headers.TryGetValues(RateLimitTokensLimitHeaderKey, out var limitValues) ? limitValues.FirstOrDefault() : "0" ); RateLimitTokensRemaining = int.Parse( headers.TryGetValues(RateLimitTokensRemainingHeaderKey, out var remainingTokensValues) ? remainingTokensValues.FirstOrDefault() : "0" ); RateLimitTokensReset = DateTimeOffset.Parse( headers.TryGetValues(RateLimitTokensResetHeaderKey, out var tokenResetValues) ? tokenResetValues.FirstOrDefault() : DateTimeOffset.MinValue.ToString() ); RetryAfter = int.Parse( headers.TryGetValues(RetryAfterHeaderKey, out var retryValues) ? retryValues.FirstOrDefault() : "0" ); } }