data class RetryPolicy(val maxRetries: Int = 3, val baseDelayMillis: Long = 500, val maxDelayMillis: Long, val backoffMultiplier: Double = 2.0, val jitterMillis: Long = 0, val retryStatusCodes: Set<Int> = setOf(429, 500, 502, 503, 504), val respectRetryAfterHeader: Boolean = true)