packages feed

openai-1.0.0: src/OpenAI/V1/Images/Generations.hs

-- | @\/v1\/images\/generations@
module OpenAI.V1.Images.Generations
    ( -- * Main types
      CreateImage(..)
    , _CreateImage
      -- * Other types
    , Quality(..)
    , Style(..)
      -- * Servant
    , API
    ) where

import OpenAI.Prelude
import OpenAI.V1.Images.Image
import OpenAI.V1.Images.ResponseFormat
import OpenAI.V1.ListOf
import OpenAI.V1.Models (Model)

-- | The quality of the image that will be generated
data Quality = Standard | HD
    deriving stock (Generic, Show)

instance ToJSON Quality where
    toJSON = genericToJSON aesonOptions

-- | The style of the generated images
data Style = Vivid | Natural
    deriving stock (Generic, Show)

instance ToJSON Style where
    toJSON = genericToJSON aesonOptions

-- | Requesty body for @\/v1/images/generations@
data CreateImage = CreateImage
    { prompt :: Text
    , model :: Maybe Model
    , n :: Maybe Natural
    , quality :: Maybe Quality
    , response_format :: Maybe ResponseFormat
    , size :: Maybe Text
    , style :: Maybe Style
    , user :: Maybe Text
    } deriving stock (Generic, Show)

-- | Default `CreateImage`
_CreateImage :: CreateImage
_CreateImage = CreateImage
    { model = Nothing
    , n = Nothing
    , quality = Nothing
    , response_format = Nothing
    , size = Nothing
    , style = Nothing
    , user = Nothing
    }

instance ToJSON CreateImage where
    toJSON = genericToJSON aesonOptions

-- | Servant API
type API =
        "generations"
    :>  ReqBody '[JSON] CreateImage
    :>  Post '[JSON] (ListOf ImageObject)