-- | @\/v1\/assistants@ module OpenAI.V1.Assistants ( -- * Main types AssistantID(..) , CreateAssistant(..) , _CreateAssistant , ModifyAssistant(..) , _ModifyAssistant , AssistantObject(..) -- * Other types , RankingOptions , FileSearch(..) , Function(..) , Tool(..) , CodeInterpreterResources(..) , FileSearchResources(..) , ToolResources(..) -- * Servant , API ) where import OpenAI.Prelude import OpenAI.V1.AutoOr import OpenAI.V1.DeletionStatus import OpenAI.V1.ListOf import OpenAI.V1.Models (Model) import OpenAI.V1.Order import OpenAI.V1.ResponseFormat import OpenAI.V1.Tool import OpenAI.V1.ToolResources -- | AssistantID newtype AssistantID = AssistantID{ text :: Text } deriving newtype (FromJSON, IsString, Show, ToHttpApiData, ToJSON) -- | Request body for @\/v1\/assistants@ data CreateAssistant = CreateAssistant { model :: Model , name :: Maybe Text , description :: Maybe Text , instructions :: Maybe Text , tools :: Maybe (Vector Tool) , tool_resources :: Maybe ToolResources , metadata :: Maybe (Map Text Text) , temperature :: Maybe Double , top_p :: Maybe Double , response_format :: Maybe (AutoOr ResponseFormat) } deriving stock (Generic, Show) instance FromJSON CreateAssistant where parseJSON = genericParseJSON aesonOptions instance ToJSON CreateAssistant where toJSON = genericToJSON aesonOptions -- | Default `CreateAssistant` _CreateAssistant :: CreateAssistant _CreateAssistant = CreateAssistant { name = Nothing , description = Nothing , instructions = Nothing , tools = Nothing , tool_resources = Nothing , metadata = Nothing , temperature = Nothing , top_p = Nothing , response_format = Nothing } -- | Request body for @\/v1\/assistants/:assistant_id@ data ModifyAssistant = ModifyAssistant { model :: Model , name :: Maybe Text , description :: Maybe Text , instructions :: Maybe Text , tools :: Maybe (Vector Tool) , tool_resources :: Maybe ToolResources , metadata :: Maybe (Map Text Text) , temperature :: Maybe Double , top_p :: Maybe Double , response_format :: Maybe (AutoOr ResponseFormat) } deriving stock (Generic, Show) instance FromJSON ModifyAssistant where parseJSON = genericParseJSON aesonOptions instance ToJSON ModifyAssistant where toJSON = genericToJSON aesonOptions -- | Default `ModifyAssistant` _ModifyAssistant :: ModifyAssistant _ModifyAssistant = ModifyAssistant { name = Nothing , description = Nothing , instructions = Nothing , tools = Nothing , tool_resources = Nothing , metadata = Nothing , temperature = Nothing , top_p = Nothing , response_format = Nothing } -- | Represents an assistant that can call the model and use tools. data AssistantObject = AssistantObject { id :: AssistantID , object :: Text , created_at :: POSIXTime , name :: Maybe Text , description :: Maybe Text , model :: Model , instructions :: Maybe Text , tools :: Maybe (Vector Tool) , tool_resources :: Maybe ToolResources , metadata :: Map Text Text , temperature :: Maybe Double , top_p :: Maybe Double , response_format :: AutoOr ResponseFormat } deriving stock (Generic, Show) deriving anyclass (FromJSON, ToJSON) -- | Servant API type API = Header' '[Required, Strict] "OpenAI-Beta" Text :> "assistants" :> ( ReqBody '[JSON] CreateAssistant :> Post '[JSON] AssistantObject :<|> QueryParam "limit" Natural :> QueryParam "order" Order :> QueryParam "after" Text :> QueryParam "before" Text :> Get '[JSON] (ListOf AssistantObject) :<|> Capture "assistant_id" AssistantID :> Get '[JSON] AssistantObject :<|> Capture "assistant_id" AssistantID :> ReqBody '[JSON] ModifyAssistant :> Post '[JSON] AssistantObject :<|> Capture "assistant_id" AssistantID :> Delete '[JSON] DeletionStatus )