-- | @\/v1\/models@
module OpenAI.V1.Models
    ( -- * Main types
      Model(..)
    , ModelObject(..)

      -- * Servant
    , API
    ) where

import OpenAI.Prelude
import OpenAI.V1.DeletionStatus
import OpenAI.V1.ListOf

-- | Model
newtype Model = Model{ text :: Text }
    deriving newtype (FromJSON, IsString, Show, ToHttpApiData, ToJSON)

-- | Describes an OpenAI model offering that can be used with the API
data ModelObject = ModelObject
    { id :: Model
    , created :: POSIXTime
    , object :: Text
    , owned_by :: Text
    } deriving stock (Generic, Show)
      deriving anyclass (FromJSON)

-- | Servant API
type API =
        "models"
    :>  (         Get '[JSON] (ListOf ModelObject)
        :<|>      Capture "model" Model
              :>  Get '[JSON] ModelObject
        :<|>      Capture "model" Model
              :>  Delete '[JSON] DeletionStatus
        )