-- | The `Usage` type
module OpenAI.V1.Usage
    ( -- * Main types
      Usage(..)

      -- * Other types
    , CompletionTokensDetails(..)
    , PromptTokensDetails(..)
    ) where

import OpenAI.Prelude

-- | Breakdown of tokens used in a completion
data CompletionTokensDetails = CompletionTokensDetails
    { CompletionTokensDetails -> Natural
accepted_prediction_tokens :: Natural
    , CompletionTokensDetails -> Natural
audio_tokens :: Natural
    , CompletionTokensDetails -> Natural
reasoning_tokens :: Natural
    , CompletionTokensDetails -> Natural
rejected_prediction_tokens :: Natural
    } deriving stock ((forall x.
 CompletionTokensDetails -> Rep CompletionTokensDetails x)
-> (forall x.
    Rep CompletionTokensDetails x -> CompletionTokensDetails)
-> Generic CompletionTokensDetails
forall x. Rep CompletionTokensDetails x -> CompletionTokensDetails
forall x. CompletionTokensDetails -> Rep CompletionTokensDetails x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. CompletionTokensDetails -> Rep CompletionTokensDetails x
from :: forall x. CompletionTokensDetails -> Rep CompletionTokensDetails x
$cto :: forall x. Rep CompletionTokensDetails x -> CompletionTokensDetails
to :: forall x. Rep CompletionTokensDetails x -> CompletionTokensDetails
Generic, Int -> CompletionTokensDetails -> ShowS
[CompletionTokensDetails] -> ShowS
CompletionTokensDetails -> String
(Int -> CompletionTokensDetails -> ShowS)
-> (CompletionTokensDetails -> String)
-> ([CompletionTokensDetails] -> ShowS)
-> Show CompletionTokensDetails
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CompletionTokensDetails -> ShowS
showsPrec :: Int -> CompletionTokensDetails -> ShowS
$cshow :: CompletionTokensDetails -> String
show :: CompletionTokensDetails -> String
$cshowList :: [CompletionTokensDetails] -> ShowS
showList :: [CompletionTokensDetails] -> ShowS
Show)
      deriving anyclass (Maybe CompletionTokensDetails
Value -> Parser [CompletionTokensDetails]
Value -> Parser CompletionTokensDetails
(Value -> Parser CompletionTokensDetails)
-> (Value -> Parser [CompletionTokensDetails])
-> Maybe CompletionTokensDetails
-> FromJSON CompletionTokensDetails
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Maybe a -> FromJSON a
$cparseJSON :: Value -> Parser CompletionTokensDetails
parseJSON :: Value -> Parser CompletionTokensDetails
$cparseJSONList :: Value -> Parser [CompletionTokensDetails]
parseJSONList :: Value -> Parser [CompletionTokensDetails]
$comittedField :: Maybe CompletionTokensDetails
omittedField :: Maybe CompletionTokensDetails
FromJSON)

-- | Breakdown of tokens used in the prompt
data PromptTokensDetails = PromptTokensDetails
    { PromptTokensDetails -> Natural
audio_tokens :: Natural
    , PromptTokensDetails -> Natural
cached_tokens :: Natural
    } deriving stock ((forall x. PromptTokensDetails -> Rep PromptTokensDetails x)
-> (forall x. Rep PromptTokensDetails x -> PromptTokensDetails)
-> Generic PromptTokensDetails
forall x. Rep PromptTokensDetails x -> PromptTokensDetails
forall x. PromptTokensDetails -> Rep PromptTokensDetails x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. PromptTokensDetails -> Rep PromptTokensDetails x
from :: forall x. PromptTokensDetails -> Rep PromptTokensDetails x
$cto :: forall x. Rep PromptTokensDetails x -> PromptTokensDetails
to :: forall x. Rep PromptTokensDetails x -> PromptTokensDetails
Generic, Int -> PromptTokensDetails -> ShowS
[PromptTokensDetails] -> ShowS
PromptTokensDetails -> String
(Int -> PromptTokensDetails -> ShowS)
-> (PromptTokensDetails -> String)
-> ([PromptTokensDetails] -> ShowS)
-> Show PromptTokensDetails
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PromptTokensDetails -> ShowS
showsPrec :: Int -> PromptTokensDetails -> ShowS
$cshow :: PromptTokensDetails -> String
show :: PromptTokensDetails -> String
$cshowList :: [PromptTokensDetails] -> ShowS
showList :: [PromptTokensDetails] -> ShowS
Show)
      deriving anyclass (Maybe PromptTokensDetails
Value -> Parser [PromptTokensDetails]
Value -> Parser PromptTokensDetails
(Value -> Parser PromptTokensDetails)
-> (Value -> Parser [PromptTokensDetails])
-> Maybe PromptTokensDetails
-> FromJSON PromptTokensDetails
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Maybe a -> FromJSON a
$cparseJSON :: Value -> Parser PromptTokensDetails
parseJSON :: Value -> Parser PromptTokensDetails
$cparseJSONList :: Value -> Parser [PromptTokensDetails]
parseJSONList :: Value -> Parser [PromptTokensDetails]
$comittedField :: Maybe PromptTokensDetails
omittedField :: Maybe PromptTokensDetails
FromJSON)

-- | Usage statistics for the completion request
data Usage completionTokensDetails promptTokensDetails = Usage
    { forall completionTokensDetails promptTokensDetails.
Usage completionTokensDetails promptTokensDetails -> Natural
completion_tokens :: Natural
    , forall completionTokensDetails promptTokensDetails.
Usage completionTokensDetails promptTokensDetails -> Natural
prompt_tokens :: Natural
    , forall completionTokensDetails promptTokensDetails.
Usage completionTokensDetails promptTokensDetails -> Natural
total_tokens :: Natural
    , forall completionTokensDetails promptTokensDetails.
Usage completionTokensDetails promptTokensDetails
-> completionTokensDetails
completion_tokens_details :: completionTokensDetails
    , forall completionTokensDetails promptTokensDetails.
Usage completionTokensDetails promptTokensDetails
-> promptTokensDetails
prompt_tokens_details :: promptTokensDetails
    } deriving stock ((forall x.
 Usage completionTokensDetails promptTokensDetails
 -> Rep (Usage completionTokensDetails promptTokensDetails) x)
-> (forall x.
    Rep (Usage completionTokensDetails promptTokensDetails) x
    -> Usage completionTokensDetails promptTokensDetails)
-> Generic (Usage completionTokensDetails promptTokensDetails)
forall x.
Rep (Usage completionTokensDetails promptTokensDetails) x
-> Usage completionTokensDetails promptTokensDetails
forall x.
Usage completionTokensDetails promptTokensDetails
-> Rep (Usage completionTokensDetails promptTokensDetails) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall completionTokensDetails promptTokensDetails x.
Rep (Usage completionTokensDetails promptTokensDetails) x
-> Usage completionTokensDetails promptTokensDetails
forall completionTokensDetails promptTokensDetails x.
Usage completionTokensDetails promptTokensDetails
-> Rep (Usage completionTokensDetails promptTokensDetails) x
$cfrom :: forall completionTokensDetails promptTokensDetails x.
Usage completionTokensDetails promptTokensDetails
-> Rep (Usage completionTokensDetails promptTokensDetails) x
from :: forall x.
Usage completionTokensDetails promptTokensDetails
-> Rep (Usage completionTokensDetails promptTokensDetails) x
$cto :: forall completionTokensDetails promptTokensDetails x.
Rep (Usage completionTokensDetails promptTokensDetails) x
-> Usage completionTokensDetails promptTokensDetails
to :: forall x.
Rep (Usage completionTokensDetails promptTokensDetails) x
-> Usage completionTokensDetails promptTokensDetails
Generic, Int -> Usage completionTokensDetails promptTokensDetails -> ShowS
[Usage completionTokensDetails promptTokensDetails] -> ShowS
Usage completionTokensDetails promptTokensDetails -> String
(Int -> Usage completionTokensDetails promptTokensDetails -> ShowS)
-> (Usage completionTokensDetails promptTokensDetails -> String)
-> ([Usage completionTokensDetails promptTokensDetails] -> ShowS)
-> Show (Usage completionTokensDetails promptTokensDetails)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall completionTokensDetails promptTokensDetails.
(Show completionTokensDetails, Show promptTokensDetails) =>
Int -> Usage completionTokensDetails promptTokensDetails -> ShowS
forall completionTokensDetails promptTokensDetails.
(Show completionTokensDetails, Show promptTokensDetails) =>
[Usage completionTokensDetails promptTokensDetails] -> ShowS
forall completionTokensDetails promptTokensDetails.
(Show completionTokensDetails, Show promptTokensDetails) =>
Usage completionTokensDetails promptTokensDetails -> String
$cshowsPrec :: forall completionTokensDetails promptTokensDetails.
(Show completionTokensDetails, Show promptTokensDetails) =>
Int -> Usage completionTokensDetails promptTokensDetails -> ShowS
showsPrec :: Int -> Usage completionTokensDetails promptTokensDetails -> ShowS
$cshow :: forall completionTokensDetails promptTokensDetails.
(Show completionTokensDetails, Show promptTokensDetails) =>
Usage completionTokensDetails promptTokensDetails -> String
show :: Usage completionTokensDetails promptTokensDetails -> String
$cshowList :: forall completionTokensDetails promptTokensDetails.
(Show completionTokensDetails, Show promptTokensDetails) =>
[Usage completionTokensDetails promptTokensDetails] -> ShowS
showList :: [Usage completionTokensDetails promptTokensDetails] -> ShowS
Show)

instance FromJSON (Usage CompletionTokensDetails PromptTokensDetails)
instance FromJSON (Usage (Maybe Void) (Maybe Void))