packages feed

openai-hs-0.1.1.0: src/OpenAI/Client/Internal/Helpers.hs

-- | Private helper functions. Note that all contents of this module are excluded from the versioning scheme.
{-# LANGUAGE BangPatterns #-}
module OpenAI.Client.Internal.Helpers where

import Network.HTTP.Types.Status
import Servant.Client

runRequest :: Int -> Int -> IO (Either ClientError a) -> IO (Either ClientError a)
runRequest maxRetries !retryCount makeRequest =
  do res <- makeRequest
     case res of
       Right ok -> pure (Right ok)
       Left err@(ConnectionError _) -> maybeRetry err
       Left err@(FailureResponse _ resp)
         | responseStatusCode resp == conflict409 -> maybeRetry err
         | statusCode (responseStatusCode resp) >= 500 -> maybeRetry err
         | otherwise -> pure (Left err)
       Left err -> pure (Left err)
  where
    maybeRetry err =
      if retryCount + 1 >= maxRetries
      then pure (Left err)
      else runRequest maxRetries (retryCount + 1) makeRequest