module OpenAI.V1.Images.Edits
(
CreateImageEdit(..)
, _CreateImageEdit
, ResponseFormat(..)
, API
) where
import OpenAI.Prelude
import OpenAI.V1.Images.Image
import OpenAI.V1.Images.ResponseFormat
import OpenAI.V1.ListOf
import OpenAI.V1.Models (Model(..))
import qualified Data.Text as Text
data CreateImageEdit = CreateImageEdit
{ CreateImageEdit -> FilePath
image :: FilePath
, CreateImageEdit -> Text
prompt :: Text
, CreateImageEdit -> Maybe FilePath
mask :: Maybe FilePath
, CreateImageEdit -> Maybe Model
model :: Maybe Model
, CreateImageEdit -> Maybe Natural
n :: Maybe Natural
, CreateImageEdit -> Maybe Text
size :: Maybe Text
, CreateImageEdit -> Maybe ResponseFormat
response_format :: Maybe ResponseFormat
, CreateImageEdit -> Maybe Text
user :: Maybe Text
} deriving stock ((forall x. CreateImageEdit -> Rep CreateImageEdit x)
-> (forall x. Rep CreateImageEdit x -> CreateImageEdit)
-> Generic CreateImageEdit
forall x. Rep CreateImageEdit x -> CreateImageEdit
forall x. CreateImageEdit -> Rep CreateImageEdit x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. CreateImageEdit -> Rep CreateImageEdit x
from :: forall x. CreateImageEdit -> Rep CreateImageEdit x
$cto :: forall x. Rep CreateImageEdit x -> CreateImageEdit
to :: forall x. Rep CreateImageEdit x -> CreateImageEdit
Generic, Int -> CreateImageEdit -> ShowS
[CreateImageEdit] -> ShowS
CreateImageEdit -> FilePath
(Int -> CreateImageEdit -> ShowS)
-> (CreateImageEdit -> FilePath)
-> ([CreateImageEdit] -> ShowS)
-> Show CreateImageEdit
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CreateImageEdit -> ShowS
showsPrec :: Int -> CreateImageEdit -> ShowS
$cshow :: CreateImageEdit -> FilePath
show :: CreateImageEdit -> FilePath
$cshowList :: [CreateImageEdit] -> ShowS
showList :: [CreateImageEdit] -> ShowS
Show)
_CreateImageEdit :: CreateImageEdit
_CreateImageEdit :: CreateImageEdit
_CreateImageEdit = CreateImageEdit
{ $sel:mask:CreateImageEdit :: Maybe FilePath
mask = Maybe FilePath
forall a. Maybe a
Nothing
, $sel:model:CreateImageEdit :: Maybe Model
model = Maybe Model
forall a. Maybe a
Nothing
, $sel:n:CreateImageEdit :: Maybe Natural
n = Maybe Natural
forall a. Maybe a
Nothing
, $sel:size:CreateImageEdit :: Maybe Text
size = Maybe Text
forall a. Maybe a
Nothing
, $sel:response_format:CreateImageEdit :: Maybe ResponseFormat
response_format = Maybe ResponseFormat
forall a. Maybe a
Nothing
, $sel:user:CreateImageEdit :: Maybe Text
user = Maybe Text
forall a. Maybe a
Nothing
}
instance ToMultipart Tmp CreateImageEdit where
toMultipart :: CreateImageEdit -> MultipartData Tmp
toMultipart CreateImageEdit{ FilePath
Maybe Natural
Maybe FilePath
Maybe Text
Maybe ResponseFormat
Maybe Model
Text
$sel:image:CreateImageEdit :: CreateImageEdit -> FilePath
$sel:prompt:CreateImageEdit :: CreateImageEdit -> Text
$sel:mask:CreateImageEdit :: CreateImageEdit -> Maybe FilePath
$sel:model:CreateImageEdit :: CreateImageEdit -> Maybe Model
$sel:n:CreateImageEdit :: CreateImageEdit -> Maybe Natural
$sel:size:CreateImageEdit :: CreateImageEdit -> Maybe Text
$sel:response_format:CreateImageEdit :: CreateImageEdit -> Maybe ResponseFormat
$sel:user:CreateImageEdit :: CreateImageEdit -> Maybe Text
image :: FilePath
prompt :: Text
mask :: Maybe FilePath
model :: Maybe Model
n :: Maybe Natural
size :: Maybe Text
response_format :: Maybe ResponseFormat
user :: Maybe Text
..} = MultipartData{[Input]
[FileData Tmp]
inputs :: [Input]
files :: [FileData Tmp]
inputs :: [Input]
files :: [FileData Tmp]
..}
where
inputs :: [Input]
inputs =
Text -> Text -> [Input]
input Text
"prompt" Text
prompt
[Input] -> [Input] -> [Input]
forall a. Semigroup a => a -> a -> a
<> (Model -> [Input]) -> Maybe Model -> [Input]
forall m a. Monoid m => (a -> m) -> Maybe a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Text -> Text -> [Input]
input Text
"model" (Text -> [Input]) -> (Model -> Text) -> Model -> [Input]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Model -> Text
text) Maybe Model
model
[Input] -> [Input] -> [Input]
forall a. Semigroup a => a -> a -> a
<> (Natural -> [Input]) -> Maybe Natural -> [Input]
forall m a. Monoid m => (a -> m) -> Maybe a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Text -> Text -> [Input]
input Text
"n" (Text -> [Input]) -> (Natural -> Text) -> Natural -> [Input]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Natural -> Text
forall number. Integral number => number -> Text
renderIntegral) Maybe Natural
n
[Input] -> [Input] -> [Input]
forall a. Semigroup a => a -> a -> a
<> (Text -> [Input]) -> Maybe Text -> [Input]
forall m a. Monoid m => (a -> m) -> Maybe a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Text -> Text -> [Input]
input Text
"size") Maybe Text
size
[Input] -> [Input] -> [Input]
forall a. Semigroup a => a -> a -> a
<> (ResponseFormat -> [Input]) -> Maybe ResponseFormat -> [Input]
forall m a. Monoid m => (a -> m) -> Maybe a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Text -> Text -> [Input]
input Text
"response_format" (Text -> [Input])
-> (ResponseFormat -> Text) -> ResponseFormat -> [Input]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ResponseFormat -> Text
forall a. ToHttpApiData a => a -> Text
toUrlPiece) Maybe ResponseFormat
response_format
[Input] -> [Input] -> [Input]
forall a. Semigroup a => a -> a -> a
<> (Text -> [Input]) -> Maybe Text -> [Input]
forall m a. Monoid m => (a -> m) -> Maybe a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Text -> Text -> [Input]
input Text
"user") Maybe Text
user
files :: [FileData Tmp]
files = FileData Tmp
file0 FileData Tmp -> [FileData Tmp] -> [FileData Tmp]
forall a. a -> [a] -> [a]
: [FileData Tmp]
files1
where
file0 :: FileData Tmp
file0 = FileData{FilePath
Text
MultipartResult Tmp
fdInputName :: Text
fdFileName :: Text
fdFileCType :: Text
fdPayload :: FilePath
fdInputName :: Text
fdFileName :: Text
fdFileCType :: Text
fdPayload :: MultipartResult Tmp
..}
where
fdInputName :: Text
fdInputName = Text
"image"
fdFileName :: Text
fdFileName = FilePath -> Text
Text.pack FilePath
image
fdFileCType :: Text
fdFileCType = Text
"image/" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> FilePath -> Text
getExtension FilePath
image
fdPayload :: FilePath
fdPayload = FilePath
image
files1 :: [FileData Tmp]
files1 = case Maybe FilePath
mask of
Maybe FilePath
Nothing -> [ ]
Just FilePath
m -> [ FileData{FilePath
Text
MultipartResult Tmp
fdInputName :: Text
fdFileName :: Text
fdFileCType :: Text
fdPayload :: MultipartResult Tmp
fdInputName :: Text
fdFileName :: Text
fdFileCType :: Text
fdPayload :: FilePath
..} ]
where
fdInputName :: Text
fdInputName = Text
"mask"
fdFileName :: Text
fdFileName = FilePath -> Text
Text.pack FilePath
m
fdFileCType :: Text
fdFileCType = Text
"image/" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> FilePath -> Text
getExtension FilePath
m
fdPayload :: FilePath
fdPayload = FilePath
m
type API =
"edits"
:> MultipartForm Tmp CreateImageEdit
:> Post '[JSON] (ListOf ImageObject)