content: -- | @\/v1\/audio\/translations@
  --
  -- To simplify things, this only supports the @verbose_json@ response format
  module OpenAI.V1.Audio.Translations
      ( -- * Main types
        CreateTranslation(..)
      , _CreateTranslation
      , TranslationObject(..)
        -- * Servant
      , API
      ) where
  
  import OpenAI.Prelude as OpenAI.Prelude
  import OpenAI.V1.Models (Model(..))
  
  import qualified Data.Text as Text
  
  -- | Request body for @\/v1\/audio\/translations@
  data CreateTranslation = CreateTranslation
      { file :: FilePath
      , model :: Model
      , prompt :: Maybe Text
      , temperature :: Maybe Double
      } deriving stock (Generic, Show)
        deriving anyclass (FromJSON, ToJSON)
  
  instance ToMultipart Tmp CreateTranslation where
      toMultipart CreateTranslation{ model = Model model, ..} = MultipartData{..}
        where
          inputs =
                  input "model" model
              <>  foldMap (input "prompt") prompt
              <>  input "response_format" "verbose_json"
              <>  foldMap (input "temperature" . renderRealFloat) temperature
  
          files = [ FileData{..} ]
            where
              fdInputName = "file"
              fdFileName = Text.pack file
              fdFileCType = "audio/" <> getExtension file
              fdPayload = file
  
  -- | Default `CreateTranslation`
  _CreateTranslation :: CreateTranslation
  _CreateTranslation = CreateTranslation
      { prompt = Nothing
      , temperature = Nothing
      }
  
  -- | Represents a transcription response returned by model, based on the
  -- provided input.
  data TranslationObject = TranslationObject
      { text :: Text
      } deriving stock (Generic, Show)
        deriving anyclass (FromJSON, ToJSON)
  
  -- | Servant API
  type API =
          "translations"
      :>  MultipartForm Tmp CreateTranslation
      :>  Post '[JSON] TranslationObject
  