openai-servant 0.2.3.0 → 0.3.0.0
raw patch · 4 files changed
+594/−155 lines, 4 filesdep +mime-typesdep +servant-authdep +servant-auth-clientPVP ok
version bump matches the API change (PVP)
Dependencies added: mime-types, servant-auth, servant-auth-client
API changes (from Hackage documentation)
- OpenAI.Api: type AnswerApi = "answers" :> OpenAIAuth :> ReqBody '[JSON] AnswerReq :> Post '[JSON] AnswerResp
- OpenAI.Resources: AnswerReq :: Maybe FileId -> Maybe (Vector Text) -> Text -> EngineId -> EngineId -> Text -> [[Text]] -> Bool -> AnswerReq
- OpenAI.Resources: AnswerResp :: [Text] -> AnswerResp
- OpenAI.Resources: ClassificationHunk :: Text -> Text -> ClassificationHunk
- OpenAI.Resources: Embedding :: Vector Double -> Int -> Embedding
- OpenAI.Resources: FhClassifications :: ClassificationHunk -> FileHunk
- OpenAI.Resources: FhSearch :: SearchHunk -> FileHunk
- OpenAI.Resources: SearchHunk :: Text -> Maybe Text -> SearchHunk
- OpenAI.Resources: SearchResult :: Int -> Double -> Maybe Text -> SearchResult
- OpenAI.Resources: SearchResultCreate :: Maybe FileId -> Maybe (Vector Text) -> Text -> Bool -> SearchResultCreate
- OpenAI.Resources: [arDocuments] :: AnswerReq -> Maybe (Vector Text)
- OpenAI.Resources: [arExamplesContext] :: AnswerReq -> Text
- OpenAI.Resources: [arExamples] :: AnswerReq -> [[Text]]
- OpenAI.Resources: [arFile] :: AnswerReq -> Maybe FileId
- OpenAI.Resources: [arModel] :: AnswerReq -> EngineId
- OpenAI.Resources: [arQuestion] :: AnswerReq -> Text
- OpenAI.Resources: [arReturnMetadata] :: AnswerReq -> Bool
- OpenAI.Resources: [arSearchModel] :: AnswerReq -> EngineId
- OpenAI.Resources: [arsAnswers] :: AnswerResp -> [Text]
- OpenAI.Resources: [chLabel] :: ClassificationHunk -> Text
- OpenAI.Resources: [chText] :: ClassificationHunk -> Text
- OpenAI.Resources: [eEmbedding] :: Embedding -> Vector Double
- OpenAI.Resources: [eIndex] :: Embedding -> Int
- OpenAI.Resources: [ecInput] :: EmbeddingCreate -> Text
- OpenAI.Resources: [fStatus] :: File -> Text
- OpenAI.Resources: [sccrDocuments] :: SearchResultCreate -> Maybe (Vector Text)
- OpenAI.Resources: [sccrFile] :: SearchResultCreate -> Maybe FileId
- OpenAI.Resources: [sccrQuery] :: SearchResultCreate -> Text
- OpenAI.Resources: [sccrReturnMetadata] :: SearchResultCreate -> Bool
- OpenAI.Resources: [shMetadata] :: SearchHunk -> Maybe Text
- OpenAI.Resources: [shText] :: SearchHunk -> Text
- OpenAI.Resources: [srDocument] :: SearchResult -> Int
- OpenAI.Resources: [srMetadata] :: SearchResult -> Maybe Text
- OpenAI.Resources: [srScore] :: SearchResult -> Double
- OpenAI.Resources: data AnswerReq
- OpenAI.Resources: data AnswerResp
- OpenAI.Resources: data ClassificationHunk
- OpenAI.Resources: data Embedding
- OpenAI.Resources: data SearchHunk
- OpenAI.Resources: data SearchResult
- OpenAI.Resources: data SearchResultCreate
- OpenAI.Resources: defaultTextCompletionCreate :: Text -> TextCompletionCreate
- OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.AnswerReq
- OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.AnswerResp
- OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.ClassificationHunk
- OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.Embedding
- OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.SearchHunk
- OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.SearchResult
- OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.SearchResultCreate
- OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.AnswerReq
- OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.AnswerResp
- OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.ClassificationHunk
- OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.Embedding
- OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.SearchHunk
- OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.SearchResult
- OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.SearchResultCreate
- OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.AnswerReq
- OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.AnswerResp
- OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.ClassificationHunk
- OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.Embedding
- OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.SearchHunk
- OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.SearchResult
- OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.SearchResultCreate
- OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.AnswerReq
- OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.AnswerResp
- OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.ClassificationHunk
- OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.Embedding
- OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.SearchHunk
- OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.SearchResult
- OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.SearchResultCreate
+ OpenAI.Api: type AudioApi = OpenAIAuth :> "transcriptions" :> MultipartForm Tmp AudioTranscriptionRequest :> Post '[JSON] AudioResponseData :<|> OpenAIAuth :> "translations" :> MultipartForm Tmp AudioTranslationRequest :> Post '[JSON] AudioResponseData
+ OpenAI.Api: type ChatApi = OpenAIAuth :> "completions" :> ReqBody '[JSON] ChatCompletionRequest :> Post '[JSON] ChatResponse
+ OpenAI.Api: type CompletionsApi = OpenAIAuth :> ReqBody '[JSON] CompletionCreate :> Post '[JSON] CompletionResponse
+ OpenAI.Api: type EditsApi = OpenAIAuth :> ReqBody '[JSON] EditCreate :> Post '[JSON] EditResponse
+ OpenAI.Api: type EmbeddingsApi = OpenAIAuth :> ReqBody '[JSON] EmbeddingCreate :> Post '[JSON] EmbeddingResponse
+ OpenAI.Api: type ImagesApi = OpenAIAuth :> "generations" :> ReqBody '[JSON] ImageCreate :> Post '[JSON] ImageResponse :<|> OpenAIAuth :> "edits" :> ReqBody '[JSON] ImageEditRequest :> Post '[JSON] ImageResponse :<|> OpenAIAuth :> "variations" :> ReqBody '[JSON] ImageVariationRequest :> Post '[JSON] ImageResponse
+ OpenAI.Api: type ModelsApi = OpenAIAuth :> Get '[JSON] (OpenAIList Model) :<|> OpenAIAuth :> Capture "model_id" ModelId :> Get '[JSON] Model
+ OpenAI.Resources: AudioResponseData :: Text -> AudioResponseData
+ OpenAI.Resources: AudioTranscriptionRequest :: FilePath -> ModelId -> Maybe Text -> Maybe Text -> Maybe Double -> Maybe Text -> AudioTranscriptionRequest
+ OpenAI.Resources: AudioTranslationRequest :: FilePath -> ModelId -> Maybe Text -> Maybe Text -> Maybe Double -> AudioTranslationRequest
+ OpenAI.Resources: ChatChoice :: Int -> ChatMessage -> Maybe Text -> ChatChoice
+ OpenAI.Resources: ChatCompletionRequest :: ModelId -> [ChatMessage] -> Maybe [ChatFunction] -> Maybe Double -> Maybe Double -> Maybe Int -> Maybe Bool -> Maybe (Vector Text) -> Maybe Int -> Maybe Double -> Maybe Double -> Maybe (Vector Double) -> Maybe String -> ChatCompletionRequest
+ OpenAI.Resources: ChatFunction :: Text -> Text -> Value -> ChatFunction
+ OpenAI.Resources: ChatFunctionCall :: Text -> Value -> ChatFunctionCall
+ OpenAI.Resources: ChatMessage :: Maybe Text -> Text -> Maybe ChatFunctionCall -> Maybe Text -> ChatMessage
+ OpenAI.Resources: ChatResponse :: Text -> Text -> Int -> [ChatChoice] -> Usage -> ChatResponse
+ OpenAI.Resources: CompletionChoice :: Text -> Int -> Maybe (Vector Double) -> Maybe Text -> CompletionChoice
+ OpenAI.Resources: CompletionCreate :: ModelId -> Maybe Text -> Maybe Text -> Maybe Int -> Maybe Double -> Maybe Double -> Maybe Int -> Maybe Bool -> Maybe Int -> Maybe Bool -> Maybe (Vector Text) -> Maybe Double -> Maybe Double -> Maybe Int -> Maybe (Vector Double) -> Maybe String -> CompletionCreate
+ OpenAI.Resources: CompletionResponse :: Text -> Text -> Int -> ModelId -> [CompletionChoice] -> Object -> CompletionResponse
+ OpenAI.Resources: EditChoice :: Text -> Int -> EditChoice
+ OpenAI.Resources: EditCreate :: ModelId -> Maybe Text -> Text -> Maybe Int -> Maybe Double -> Maybe Double -> EditCreate
+ OpenAI.Resources: EditResponse :: Text -> Int -> [EditChoice] -> Usage -> EditResponse
+ OpenAI.Resources: EmbeddingResponse :: Text -> [EmbeddingResponseData] -> ModelId -> EmbeddingUsage -> EmbeddingResponse
+ OpenAI.Resources: EmbeddingResponseData :: Text -> Vector Double -> Int -> EmbeddingResponseData
+ OpenAI.Resources: EmbeddingUsage :: Int -> Int -> EmbeddingUsage
+ OpenAI.Resources: EngineEmbedding :: Vector Double -> Int -> EngineEmbedding
+ OpenAI.Resources: EngineEmbeddingCreate :: Text -> EngineEmbeddingCreate
+ OpenAI.Resources: ImageCreate :: Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> ImageCreate
+ OpenAI.Resources: ImageEditRequest :: Text -> Maybe Text -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> ImageEditRequest
+ OpenAI.Resources: ImageResponse :: TimeStamp -> [ImageResponseData] -> ImageResponse
+ OpenAI.Resources: ImageResponseData :: Text -> ImageResponseData
+ OpenAI.Resources: ImageVariationRequest :: Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> ImageVariationRequest
+ OpenAI.Resources: Model :: ModelId -> Text -> Text -> [Object] -> Model
+ OpenAI.Resources: ModelId :: Text -> ModelId
+ OpenAI.Resources: Usage :: Int -> Int -> Int -> Usage
+ OpenAI.Resources: [audrdText] :: AudioResponseData -> Text
+ OpenAI.Resources: [audtlrFile] :: AudioTranslationRequest -> FilePath
+ OpenAI.Resources: [audtlrModel] :: AudioTranslationRequest -> ModelId
+ OpenAI.Resources: [audtlrPrompt] :: AudioTranslationRequest -> Maybe Text
+ OpenAI.Resources: [audtlrResponseFormat] :: AudioTranslationRequest -> Maybe Text
+ OpenAI.Resources: [audtlrTemperature] :: AudioTranslationRequest -> Maybe Double
+ OpenAI.Resources: [audtsrFile] :: AudioTranscriptionRequest -> FilePath
+ OpenAI.Resources: [audtsrLanguage] :: AudioTranscriptionRequest -> Maybe Text
+ OpenAI.Resources: [audtsrModel] :: AudioTranscriptionRequest -> ModelId
+ OpenAI.Resources: [audtsrPrompt] :: AudioTranscriptionRequest -> Maybe Text
+ OpenAI.Resources: [audtsrResponseFormat] :: AudioTranscriptionRequest -> Maybe Text
+ OpenAI.Resources: [audtsrTemperature] :: AudioTranscriptionRequest -> Maybe Double
+ OpenAI.Resources: [cchFinishReason] :: CompletionChoice -> Maybe Text
+ OpenAI.Resources: [cchIndex] :: CompletionChoice -> Int
+ OpenAI.Resources: [cchLogprobs] :: CompletionChoice -> Maybe (Vector Double)
+ OpenAI.Resources: [cchText] :: CompletionChoice -> Text
+ OpenAI.Resources: [ccrBestOf] :: CompletionCreate -> Maybe Int
+ OpenAI.Resources: [ccrEcho] :: CompletionCreate -> Maybe Bool
+ OpenAI.Resources: [ccrFrequencyPenalty] :: CompletionCreate -> Maybe Double
+ OpenAI.Resources: [ccrLogitBias] :: CompletionCreate -> Maybe (Vector Double)
+ OpenAI.Resources: [ccrLogprobs] :: CompletionCreate -> Maybe Int
+ OpenAI.Resources: [ccrMaxTokens] :: CompletionCreate -> Maybe Int
+ OpenAI.Resources: [ccrModel] :: CompletionCreate -> ModelId
+ OpenAI.Resources: [ccrN] :: CompletionCreate -> Maybe Int
+ OpenAI.Resources: [ccrPresencePenalty] :: CompletionCreate -> Maybe Double
+ OpenAI.Resources: [ccrPrompt] :: CompletionCreate -> Maybe Text
+ OpenAI.Resources: [ccrStop] :: CompletionCreate -> Maybe (Vector Text)
+ OpenAI.Resources: [ccrStream] :: CompletionCreate -> Maybe Bool
+ OpenAI.Resources: [ccrSuffix] :: CompletionCreate -> Maybe Text
+ OpenAI.Resources: [ccrTemperature] :: CompletionCreate -> Maybe Double
+ OpenAI.Resources: [ccrTopP] :: CompletionCreate -> Maybe Double
+ OpenAI.Resources: [ccrUser] :: CompletionCreate -> Maybe String
+ OpenAI.Resources: [chchFinishReason] :: ChatChoice -> Maybe Text
+ OpenAI.Resources: [chchIndex] :: ChatChoice -> Int
+ OpenAI.Resources: [chchMessage] :: ChatChoice -> ChatMessage
+ OpenAI.Resources: [chcrFrequencyPenalty] :: ChatCompletionRequest -> Maybe Double
+ OpenAI.Resources: [chcrFunctions] :: ChatCompletionRequest -> Maybe [ChatFunction]
+ OpenAI.Resources: [chcrLogitBias] :: ChatCompletionRequest -> Maybe (Vector Double)
+ OpenAI.Resources: [chcrMaxTokens] :: ChatCompletionRequest -> Maybe Int
+ OpenAI.Resources: [chcrMessages] :: ChatCompletionRequest -> [ChatMessage]
+ OpenAI.Resources: [chcrModel] :: ChatCompletionRequest -> ModelId
+ OpenAI.Resources: [chcrN] :: ChatCompletionRequest -> Maybe Int
+ OpenAI.Resources: [chcrPresencePenalty] :: ChatCompletionRequest -> Maybe Double
+ OpenAI.Resources: [chcrStop] :: ChatCompletionRequest -> Maybe (Vector Text)
+ OpenAI.Resources: [chcrStream] :: ChatCompletionRequest -> Maybe Bool
+ OpenAI.Resources: [chcrTemperature] :: ChatCompletionRequest -> Maybe Double
+ OpenAI.Resources: [chcrTopP] :: ChatCompletionRequest -> Maybe Double
+ OpenAI.Resources: [chcrUser] :: ChatCompletionRequest -> Maybe String
+ OpenAI.Resources: [chfDescription] :: ChatFunction -> Text
+ OpenAI.Resources: [chfName] :: ChatFunction -> Text
+ OpenAI.Resources: [chfParameters] :: ChatFunction -> Value
+ OpenAI.Resources: [chfcArguments] :: ChatFunctionCall -> Value
+ OpenAI.Resources: [chfcName] :: ChatFunctionCall -> Text
+ OpenAI.Resources: [chmContent] :: ChatMessage -> Maybe Text
+ OpenAI.Resources: [chmFunctionCall] :: ChatMessage -> Maybe ChatFunctionCall
+ OpenAI.Resources: [chmName] :: ChatMessage -> Maybe Text
+ OpenAI.Resources: [chmRole] :: ChatMessage -> Text
+ OpenAI.Resources: [chrChoices] :: ChatResponse -> [ChatChoice]
+ OpenAI.Resources: [chrCreated] :: ChatResponse -> Int
+ OpenAI.Resources: [chrId] :: ChatResponse -> Text
+ OpenAI.Resources: [chrObject] :: ChatResponse -> Text
+ OpenAI.Resources: [chrUsage] :: ChatResponse -> Usage
+ OpenAI.Resources: [crChoices] :: CompletionResponse -> [CompletionChoice]
+ OpenAI.Resources: [crCreated] :: CompletionResponse -> Int
+ OpenAI.Resources: [crId] :: CompletionResponse -> Text
+ OpenAI.Resources: [crModel] :: CompletionResponse -> ModelId
+ OpenAI.Resources: [crObject] :: CompletionResponse -> Text
+ OpenAI.Resources: [crUsage] :: CompletionResponse -> Object
+ OpenAI.Resources: [edchIndex] :: EditChoice -> Int
+ OpenAI.Resources: [edchText] :: EditChoice -> Text
+ OpenAI.Resources: [edcrInput] :: EditCreate -> Maybe Text
+ OpenAI.Resources: [edcrInstruction] :: EditCreate -> Text
+ OpenAI.Resources: [edcrModel] :: EditCreate -> ModelId
+ OpenAI.Resources: [edcrN] :: EditCreate -> Maybe Int
+ OpenAI.Resources: [edcrTemperature] :: EditCreate -> Maybe Double
+ OpenAI.Resources: [edcrTopP] :: EditCreate -> Maybe Double
+ OpenAI.Resources: [edrChoices] :: EditResponse -> [EditChoice]
+ OpenAI.Resources: [edrCreated] :: EditResponse -> Int
+ OpenAI.Resources: [edrObject] :: EditResponse -> Text
+ OpenAI.Resources: [edrUsage] :: EditResponse -> Usage
+ OpenAI.Resources: [embcInput] :: EmbeddingCreate -> Text
+ OpenAI.Resources: [embcModel] :: EmbeddingCreate -> ModelId
+ OpenAI.Resources: [embcUser] :: EmbeddingCreate -> Maybe Text
+ OpenAI.Resources: [embdEmbedding] :: EmbeddingResponseData -> Vector Double
+ OpenAI.Resources: [embdIndex] :: EmbeddingResponseData -> Int
+ OpenAI.Resources: [embdObject] :: EmbeddingResponseData -> Text
+ OpenAI.Resources: [embrData] :: EmbeddingResponse -> [EmbeddingResponseData]
+ OpenAI.Resources: [embrModel] :: EmbeddingResponse -> ModelId
+ OpenAI.Resources: [embrObject] :: EmbeddingResponse -> Text
+ OpenAI.Resources: [embrUsage] :: EmbeddingResponse -> EmbeddingUsage
+ OpenAI.Resources: [embuPromptTokens] :: EmbeddingUsage -> Int
+ OpenAI.Resources: [embuTotalTokens] :: EmbeddingUsage -> Int
+ OpenAI.Resources: [eneEmbedding] :: EngineEmbedding -> Vector Double
+ OpenAI.Resources: [eneIndex] :: EngineEmbedding -> Int
+ OpenAI.Resources: [enecInput] :: EngineEmbeddingCreate -> Text
+ OpenAI.Resources: [fBytes] :: File -> Int
+ OpenAI.Resources: [fFilename] :: File -> Text
+ OpenAI.Resources: [fObject] :: File -> Text
+ OpenAI.Resources: [icN] :: ImageCreate -> Maybe Int
+ OpenAI.Resources: [icPrompt] :: ImageCreate -> Text
+ OpenAI.Resources: [icResponseFormat] :: ImageCreate -> Maybe Text
+ OpenAI.Resources: [icSize] :: ImageCreate -> Maybe Text
+ OpenAI.Resources: [icUser] :: ImageCreate -> Maybe Text
+ OpenAI.Resources: [ierImage] :: ImageEditRequest -> Text
+ OpenAI.Resources: [ierMask] :: ImageEditRequest -> Maybe Text
+ OpenAI.Resources: [ierN] :: ImageEditRequest -> Maybe Int
+ OpenAI.Resources: [ierPrompt] :: ImageEditRequest -> Text
+ OpenAI.Resources: [ierResponseFormat] :: ImageEditRequest -> Maybe Text
+ OpenAI.Resources: [ierSize] :: ImageEditRequest -> Maybe Text
+ OpenAI.Resources: [ierUser] :: ImageEditRequest -> Maybe Text
+ OpenAI.Resources: [irCreated] :: ImageResponse -> TimeStamp
+ OpenAI.Resources: [irData] :: ImageResponse -> [ImageResponseData]
+ OpenAI.Resources: [irdUrl] :: ImageResponseData -> Text
+ OpenAI.Resources: [ivrImage] :: ImageVariationRequest -> Text
+ OpenAI.Resources: [ivrN] :: ImageVariationRequest -> Maybe Int
+ OpenAI.Resources: [ivrResponseFormat] :: ImageVariationRequest -> Maybe Text
+ OpenAI.Resources: [ivrSize] :: ImageVariationRequest -> Maybe Text
+ OpenAI.Resources: [ivrUser] :: ImageVariationRequest -> Maybe Text
+ OpenAI.Resources: [mId] :: Model -> ModelId
+ OpenAI.Resources: [mObject] :: Model -> Text
+ OpenAI.Resources: [mOwnedBy] :: Model -> Text
+ OpenAI.Resources: [mPermission] :: Model -> [Object]
+ OpenAI.Resources: [unModelId] :: ModelId -> Text
+ OpenAI.Resources: [usCompletionTokens] :: Usage -> Int
+ OpenAI.Resources: [usPromptTokens] :: Usage -> Int
+ OpenAI.Resources: [usTotalTokens] :: Usage -> Int
+ OpenAI.Resources: data AudioResponseData
+ OpenAI.Resources: data AudioTranscriptionRequest
+ OpenAI.Resources: data AudioTranslationRequest
+ OpenAI.Resources: data ChatChoice
+ OpenAI.Resources: data ChatCompletionRequest
+ OpenAI.Resources: data ChatFunction
+ OpenAI.Resources: data ChatFunctionCall
+ OpenAI.Resources: data ChatMessage
+ OpenAI.Resources: data ChatResponse
+ OpenAI.Resources: data CompletionChoice
+ OpenAI.Resources: data CompletionCreate
+ OpenAI.Resources: data CompletionResponse
+ OpenAI.Resources: data EditChoice
+ OpenAI.Resources: data EditCreate
+ OpenAI.Resources: data EditResponse
+ OpenAI.Resources: data EmbeddingResponse
+ OpenAI.Resources: data EmbeddingResponseData
+ OpenAI.Resources: data EmbeddingUsage
+ OpenAI.Resources: data EngineEmbedding
+ OpenAI.Resources: data EngineEmbeddingCreate
+ OpenAI.Resources: data ImageCreate
+ OpenAI.Resources: data ImageEditRequest
+ OpenAI.Resources: data ImageResponse
+ OpenAI.Resources: data ImageResponseData
+ OpenAI.Resources: data ImageVariationRequest
+ OpenAI.Resources: data Model
+ OpenAI.Resources: data Usage
+ OpenAI.Resources: defaultChatCompletionRequest :: ModelId -> [ChatMessage] -> ChatCompletionRequest
+ OpenAI.Resources: defaultCompletionCreate :: ModelId -> Text -> CompletionCreate
+ OpenAI.Resources: defaultEditCreate :: ModelId -> Text -> Text -> EditCreate
+ OpenAI.Resources: defaultEngineTextCompletionCreate :: Text -> TextCompletionCreate
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.AudioResponseData
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.AudioTranscriptionRequest
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.AudioTranslationRequest
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.ChatChoice
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.ChatCompletionRequest
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.ChatFunction
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.ChatFunctionCall
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.ChatMessage
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.ChatResponse
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.CompletionChoice
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.CompletionCreate
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.CompletionResponse
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.EditChoice
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.EditCreate
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.EditResponse
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.EmbeddingResponse
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.EmbeddingResponseData
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.EmbeddingUsage
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.EngineEmbedding
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.EngineEmbeddingCreate
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.ImageCreate
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.ImageEditRequest
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.ImageResponse
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.ImageResponseData
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.ImageVariationRequest
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.Model
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.ModelId
+ OpenAI.Resources: instance Data.Aeson.Types.FromJSON.FromJSON OpenAI.Resources.Usage
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.AudioResponseData
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.AudioTranscriptionRequest
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.AudioTranslationRequest
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.ChatChoice
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.ChatCompletionRequest
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.ChatFunction
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.ChatFunctionCall
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.ChatMessage
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.ChatResponse
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.CompletionChoice
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.CompletionCreate
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.CompletionResponse
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.EditChoice
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.EditCreate
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.EditResponse
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.EmbeddingResponse
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.EmbeddingResponseData
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.EmbeddingUsage
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.EngineEmbedding
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.EngineEmbeddingCreate
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.ImageCreate
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.ImageEditRequest
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.ImageResponse
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.ImageResponseData
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.ImageVariationRequest
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.Model
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.ModelId
+ OpenAI.Resources: instance Data.Aeson.Types.ToJSON.ToJSON OpenAI.Resources.Usage
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.AudioResponseData
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.AudioTranscriptionRequest
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.AudioTranslationRequest
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.ChatChoice
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.ChatCompletionRequest
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.ChatFunction
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.ChatFunctionCall
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.ChatMessage
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.CompletionChoice
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.CompletionCreate
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.CompletionResponse
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.EditChoice
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.EditCreate
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.EditResponse
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.EmbeddingResponse
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.EmbeddingResponseData
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.EmbeddingUsage
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.EngineEmbedding
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.EngineEmbeddingCreate
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.ImageCreate
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.ImageEditRequest
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.ImageResponse
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.ImageResponseData
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.ImageVariationRequest
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.Model
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.ModelId
+ OpenAI.Resources: instance GHC.Classes.Eq OpenAI.Resources.Usage
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.AudioResponseData
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.AudioTranscriptionRequest
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.AudioTranslationRequest
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.ChatChoice
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.ChatCompletionRequest
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.ChatFunction
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.ChatFunctionCall
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.ChatMessage
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.CompletionChoice
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.CompletionCreate
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.CompletionResponse
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.EditChoice
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.EditCreate
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.EditResponse
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.EmbeddingResponse
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.EmbeddingResponseData
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.EmbeddingUsage
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.EngineEmbedding
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.EngineEmbeddingCreate
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.ImageCreate
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.ImageEditRequest
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.ImageResponse
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.ImageResponseData
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.ImageVariationRequest
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.Model
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.ModelId
+ OpenAI.Resources: instance GHC.Show.Show OpenAI.Resources.Usage
+ OpenAI.Resources: instance Servant.Multipart.API.ToMultipart Servant.Multipart.API.Tmp OpenAI.Resources.AudioTranscriptionRequest
+ OpenAI.Resources: instance Servant.Multipart.API.ToMultipart Servant.Multipart.API.Tmp OpenAI.Resources.AudioTranslationRequest
+ OpenAI.Resources: instance Web.Internal.HttpApiData.ToHttpApiData OpenAI.Resources.ModelId
+ OpenAI.Resources: newtype ModelId
- OpenAI.Api: type EnginesApi = OpenAIAuth :> Get '[JSON] (OpenAIList Engine) :<|> OpenAIAuth :> Capture "engine_id" EngineId :> Get '[JSON] Engine :<|> OpenAIAuth :> Capture "engine_id" EngineId :> "completions" :> ReqBody '[JSON] TextCompletionCreate :> Post '[JSON] TextCompletion :<|> OpenAIAuth :> Capture "engine_id" EngineId :> "search" :> ReqBody '[JSON] SearchResultCreate :> Post '[JSON] (OpenAIList SearchResult) :<|> OpenAIAuth :> Capture "engine_id" EngineId :> "embeddings" :> ReqBody '[JSON] EmbeddingCreate :> Post '[JSON] (OpenAIList Embedding)
+ OpenAI.Api: type EnginesApi = OpenAIAuth :> Get '[JSON] (OpenAIList Engine) :<|> OpenAIAuth :> Capture "engine_id" EngineId :> Get '[JSON] Engine :<|> OpenAIAuth :> Capture "engine_id" EngineId :> "completions" :> ReqBody '[JSON] TextCompletionCreate :> Post '[JSON] TextCompletion :<|> OpenAIAuth :> Capture "engine_id" EngineId :> "embeddings" :> ReqBody '[JSON] EngineEmbeddingCreate :> Post '[JSON] (OpenAIList EngineEmbedding)
- OpenAI.Api: type OpenAIApiInternal = "engines" :> EnginesApi :<|> "files" :> FilesApi :<|> AnswerApi :<|> FineTuneApi
+ OpenAI.Api: type OpenAIApiInternal = "models" :> ModelsApi :<|> "completions" :> CompletionsApi :<|> "chat" :> ChatApi :<|> "edits" :> EditsApi :<|> "images" :> ImagesApi :<|> "embeddings" :> EmbeddingsApi :<|> "audio" :> AudioApi :<|> "files" :> FilesApi :<|> FineTuneApi :<|> "engines" :> EnginesApi
- OpenAI.Api: type OpenAIAuth = BasicAuth "OpenAI API" ()
+ OpenAI.Api: type OpenAIAuth = Auth '[Bearer] ()
- OpenAI.Resources: EmbeddingCreate :: Text -> EmbeddingCreate
+ OpenAI.Resources: EmbeddingCreate :: ModelId -> Text -> Maybe Text -> EmbeddingCreate
- OpenAI.Resources: File :: FileId -> TimeStamp -> Text -> Text -> File
+ OpenAI.Resources: File :: FileId -> Text -> Int -> TimeStamp -> Text -> Text -> File
Files
- openai-servant.cabal +6/−5
- src/OpenAI/Api.hs +37/−8
- src/OpenAI/Internal/Aeson.hs +1/−1
- src/OpenAI/Resources.hs +550/−141
openai-servant.cabal view
@@ -1,13 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.34.4.+-- This file has been generated from package.yaml by hpack version 0.35.2. -- -- see: https://github.com/sol/hpack------ hash: 27222b6af30e297958d20945ecd4e76ffe7b845bcf5513c5b23251ba3d290b5a name: openai-servant-version: 0.2.3.0+version: 0.3.0.0 synopsis: Unofficial OpenAI servant types description: Unofficial description of the OpenAI API using servant types category: Web@@ -15,7 +13,7 @@ bug-reports: https://github.com/agrafix/openai-hs/issues author: Alexander Thiemann <mail@thiemann.at> maintainer: Alexander Thiemann <mail@thiemann.at>-copyright: 2021-2022 Alexander Thiemann <mail@thiemann.at>+copyright: 2021-2023 Alexander Thiemann <mail@thiemann.at> license: BSD3 license-file: LICENSE build-type: Simple@@ -54,7 +52,10 @@ , base >=4.7 && <5 , bytestring , casing+ , mime-types , servant+ , servant-auth+ , servant-auth-client , servant-multipart-api , text , time
src/OpenAI/Api.hs view
@@ -3,26 +3,56 @@ import OpenAI.Resources import Servant.API+import Servant.Auth+import Servant.Auth.Client import Servant.Multipart.API -type OpenAIAuth = BasicAuth "OpenAI API" ()+type OpenAIAuth = Auth '[Bearer] () type OpenAIApi = "v1" :> OpenAIApiInternal type OpenAIApiInternal =- "engines" :> EnginesApi+ "models" :> ModelsApi+ :<|> "completions" :> CompletionsApi+ :<|> "chat" :> ChatApi+ :<|> "edits" :> EditsApi+ :<|> "images" :> ImagesApi+ :<|> "embeddings" :> EmbeddingsApi+ :<|> "audio" :> AudioApi :<|> "files" :> FilesApi- :<|> AnswerApi :<|> FineTuneApi+ :<|> "engines" :> EnginesApi +type ModelsApi =+ OpenAIAuth :> Get '[JSON] (OpenAIList Model)+ :<|> OpenAIAuth :> Capture "model_id" ModelId :> Get '[JSON] Model++type CompletionsApi =+ OpenAIAuth :> ReqBody '[JSON] CompletionCreate :> Post '[JSON] CompletionResponse++type ChatApi =+ OpenAIAuth :> "completions" :> ReqBody '[JSON] ChatCompletionRequest :> Post '[JSON] ChatResponse++type EditsApi =+ OpenAIAuth :> ReqBody '[JSON] EditCreate :> Post '[JSON] EditResponse++type ImagesApi =+ OpenAIAuth :> "generations" :> ReqBody '[JSON] ImageCreate :> Post '[JSON] ImageResponse+ :<|> OpenAIAuth :> "edits" :> ReqBody '[JSON] ImageEditRequest :> Post '[JSON] ImageResponse+ :<|> OpenAIAuth :> "variations" :> ReqBody '[JSON] ImageVariationRequest :> Post '[JSON] ImageResponse++type EmbeddingsApi =+ OpenAIAuth :> ReqBody '[JSON] EmbeddingCreate :> Post '[JSON] EmbeddingResponse++type AudioApi =+ OpenAIAuth :> "transcriptions" :> MultipartForm Tmp AudioTranscriptionRequest :> Post '[JSON] AudioResponseData+ :<|> OpenAIAuth :> "translations" :> MultipartForm Tmp AudioTranslationRequest :> Post '[JSON] AudioResponseData+ type FilesApi = OpenAIAuth :> MultipartForm Mem FileCreate :> Post '[JSON] File :<|> OpenAIAuth :> Capture "file_id" FileId :> Delete '[JSON] FileDeleteConfirmation -type AnswerApi =- "answers" :> OpenAIAuth :> ReqBody '[JSON] AnswerReq :> Post '[JSON] AnswerResp- type FineTuneApi = OpenAIAuth :> "fine-tunes" :> ReqBody '[JSON] FineTuneCreate :> Post '[JSON] FineTune :<|> OpenAIAuth :> "fine-tunes" :> Get '[JSON] (OpenAIList FineTune)@@ -34,5 +64,4 @@ OpenAIAuth :> Get '[JSON] (OpenAIList Engine) :<|> OpenAIAuth :> Capture "engine_id" EngineId :> Get '[JSON] Engine :<|> OpenAIAuth :> Capture "engine_id" EngineId :> "completions" :> ReqBody '[JSON] TextCompletionCreate :> Post '[JSON] TextCompletion- :<|> OpenAIAuth :> Capture "engine_id" EngineId :> "search" :> ReqBody '[JSON] SearchResultCreate :> Post '[JSON] (OpenAIList SearchResult)- :<|> OpenAIAuth :> Capture "engine_id" EngineId :> "embeddings" :> ReqBody '[JSON] EmbeddingCreate :> Post '[JSON] (OpenAIList Embedding)+ :<|> OpenAIAuth :> Capture "engine_id" EngineId :> "embeddings" :> ReqBody '[JSON] EngineEmbeddingCreate :> Post '[JSON] (OpenAIList EngineEmbedding)
src/OpenAI/Internal/Aeson.hs view
@@ -2,7 +2,7 @@ module OpenAI.Internal.Aeson (jsonOpts, deriveJSON, ToJSON, FromJSON) where import Data.Aeson-import Data.Aeson.TH+import Data.Aeson.TH ( deriveJSON ) import Text.Casing (quietSnake) jsonOpts :: Int -> Options
src/OpenAI/Resources.hs view
@@ -1,59 +1,97 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE InstanceSigs #-} {-# LANGUAGE TemplateHaskell #-} module OpenAI.Resources ( -- * Core Types TimeStamp (..), OpenAIList (..),+ Usage (..), - -- * Engine- EngineId (..),- Engine (..),+ -- * Models+ Model (..),+ ModelId (..), - -- * Text completion- TextCompletionId (..),- TextCompletionChoice (..),- TextCompletion (..),- TextCompletionCreate (..),- defaultTextCompletionCreate,+ -- * Completion+ CompletionCreate (..),+ CompletionChoice (..),+ CompletionResponse (..),+ defaultCompletionCreate, + -- * Chat+ ChatFunction (..),+ ChatFunctionCall (..),+ ChatMessage (..),+ ChatCompletionRequest (..),+ ChatChoice (..),+ ChatResponse (..),+ defaultChatCompletionRequest,++ -- * Edits+ EditCreate (..),+ EditChoice (..),+ EditResponse (..),+ defaultEditCreate,++ -- * Images+ ImageResponse (..),+ ImageResponseData (..),+ ImageCreate (..),+ ImageEditRequest (..),+ ImageVariationRequest (..),+ -- * Embeddings EmbeddingCreate (..),- Embedding (..),+ EmbeddingResponseData (..),+ EmbeddingUsage (..),+ EmbeddingResponse (..), - -- * Fine tuning+ -- * Audio+ AudioResponseData (..),+ AudioTranscriptionRequest (..),+ AudioTranslationRequest (..),++ -- * Fine tuning (out of date) FineTuneId (..), FineTuneCreate (..), defaultFineTuneCreate, FineTune (..), FineTuneEvent (..), - -- * Searching- SearchResult (..),- SearchResultCreate (..),-- -- * File API+ -- * File API (out of date) FileCreate (..), FileId (..), File (..), FileHunk (..),- SearchHunk (..),- ClassificationHunk (..), FineTuneHunk (..), FileDeleteConfirmation (..), - -- * Answers API- AnswerReq (..),- AnswerResp (..),+ -- * Engine (deprecated)+ EngineId (..),+ Engine (..),++ -- * Engine text completion (deprecated)+ TextCompletionId (..),+ TextCompletionChoice (..),+ TextCompletion (..),+ TextCompletionCreate (..),+ defaultEngineTextCompletionCreate,++ -- * Engine Embeddings (deprecated)+ EngineEmbeddingCreate (..),+ EngineEmbedding (..), ) where import qualified Data.Aeson as A import qualified Data.ByteString.Lazy as BSL+import Data.Maybe (catMaybes) import qualified Data.Text as T+import qualified Data.Text.Encoding as T import Data.Time import Data.Time.Clock.POSIX import qualified Data.Vector as V+import Network.Mime (defaultMimeLookup) import OpenAI.Internal.Aeson import Servant.API import Servant.Multipart.API@@ -92,6 +130,469 @@ pure = OpenAIList . pure (<*>) go x = OpenAIList (olData go <*> olData x) +$(deriveJSON (jsonOpts 2) ''OpenAIList)++data Usage = Usage+ { usPromptTokens :: Int,+ usCompletionTokens :: Int,+ usTotalTokens :: Int+ }+ deriving (Show, Eq)++$(deriveJSON (jsonOpts 2) ''Usage)++------------------------+------ Model API+------------------------++data Model = Model+ { mId :: ModelId,+ mObject :: T.Text,+ mOwnedBy :: T.Text,+ mPermission :: [A.Object] -- TODO 2023.03.22: Docs do not say what this is+ }+ deriving (Show, Eq)++newtype ModelId = ModelId {unModelId :: T.Text}+ deriving (Show, Eq, ToJSON, FromJSON, ToHttpApiData)++$(deriveJSON (jsonOpts 1) ''Model)++------------------------+------ Completions API+------------------------++data CompletionCreate = CompletionCreate+ { ccrModel :: ModelId,+ ccrPrompt :: Maybe T.Text,+ ccrSuffix :: Maybe T.Text,+ ccrMaxTokens :: Maybe Int,+ ccrTemperature :: Maybe Double,+ ccrTopP :: Maybe Double,+ ccrN :: Maybe Int,+ ccrStream :: Maybe Bool,+ ccrLogprobs :: Maybe Int,+ ccrEcho :: Maybe Bool,+ ccrStop :: Maybe (V.Vector T.Text),+ ccrPresencePenalty :: Maybe Double,+ ccrFrequencyPenalty :: Maybe Double,+ ccrBestOf :: Maybe Int,+ ccrLogitBias :: Maybe (V.Vector Double),+ ccrUser :: Maybe String+ }+ deriving (Show, Eq)++defaultCompletionCreate :: ModelId -> T.Text -> CompletionCreate+defaultCompletionCreate model prompt =+ CompletionCreate+ { ccrModel = model,+ ccrPrompt = Just prompt,+ ccrSuffix = Nothing,+ ccrMaxTokens = Nothing,+ ccrTemperature = Nothing,+ ccrTopP = Nothing,+ ccrN = Nothing,+ ccrStream = Nothing,+ ccrLogprobs = Nothing,+ ccrEcho = Nothing,+ ccrStop = Nothing,+ ccrPresencePenalty = Nothing,+ ccrFrequencyPenalty = Nothing,+ ccrBestOf = Nothing,+ ccrLogitBias = Nothing,+ ccrUser = Nothing+ }++data CompletionChoice = CompletionChoice+ { cchText :: T.Text,+ cchIndex :: Int,+ cchLogprobs :: Maybe (V.Vector Double),+ cchFinishReason :: Maybe T.Text+ }+ deriving (Show, Eq)++data CompletionResponse = CompletionResponse+ { crId :: T.Text,+ crObject :: T.Text,+ crCreated :: Int,+ crModel :: ModelId,+ crChoices :: [CompletionChoice],+ crUsage :: A.Object+ }+ deriving (Show, Eq)++$(deriveJSON (jsonOpts 3) ''CompletionCreate)+$(deriveJSON (jsonOpts 3) ''CompletionChoice)+$(deriveJSON (jsonOpts 2) ''CompletionResponse)++------------------------+------ Chat API+------------------------++data ChatFunctionCall = ChatFunctionCall+ { chfcName :: T.Text,+ chfcArguments :: A.Value+ }+ deriving (Eq, Show)++instance A.FromJSON ChatFunctionCall where+ parseJSON = A.withObject "ChatFunctionCall" $ \obj -> do+ name <- obj A..: "name"+ arguments <- obj A..: "arguments" >>= A.withEmbeddedJSON "Arguments" pure++ pure $ ChatFunctionCall {chfcName = name, chfcArguments = arguments}++instance A.ToJSON ChatFunctionCall where+ toJSON (ChatFunctionCall {chfcName = name, chfcArguments = arguments}) =+ A.object+ [ "name" A..= name,+ "arguments" A..= T.decodeUtf8 (BSL.toStrict (A.encode arguments))+ ]++data ChatMessage = ChatMessage+ { chmContent :: Maybe T.Text,+ chmRole :: T.Text,+ chmFunctionCall :: Maybe ChatFunctionCall,+ chmName :: Maybe T.Text+ }+ deriving (Show, Eq)++data ChatFunction = ChatFunction+ { chfName :: T.Text,+ chfDescription :: T.Text,+ chfParameters :: A.Value+ }+ deriving (Show, Eq)++data ChatCompletionRequest = ChatCompletionRequest+ { chcrModel :: ModelId,+ chcrMessages :: [ChatMessage],+ chcrFunctions :: Maybe [ChatFunction],+ chcrTemperature :: Maybe Double,+ chcrTopP :: Maybe Double,+ chcrN :: Maybe Int,+ chcrStream :: Maybe Bool,+ chcrStop :: Maybe (V.Vector T.Text),+ chcrMaxTokens :: Maybe Int,+ chcrPresencePenalty :: Maybe Double,+ chcrFrequencyPenalty :: Maybe Double,+ chcrLogitBias :: Maybe (V.Vector Double),+ chcrUser :: Maybe String+ }+ deriving (Show, Eq)++defaultChatCompletionRequest :: ModelId -> [ChatMessage] -> ChatCompletionRequest+defaultChatCompletionRequest model messages =+ ChatCompletionRequest+ { chcrModel = model,+ chcrMessages = messages,+ chcrFunctions = Nothing,+ chcrTemperature = Nothing,+ chcrTopP = Nothing,+ chcrN = Nothing,+ chcrStream = Nothing,+ chcrStop = Nothing,+ chcrMaxTokens = Nothing,+ chcrPresencePenalty = Nothing,+ chcrFrequencyPenalty = Nothing,+ chcrLogitBias = Nothing,+ chcrUser = Nothing+ }++data ChatChoice = ChatChoice+ { chchIndex :: Int,+ chchMessage :: ChatMessage,+ chchFinishReason :: Maybe T.Text+ }+ deriving (Show, Eq)++data ChatResponse = ChatResponse+ { chrId :: T.Text,+ chrObject :: T.Text,+ chrCreated :: Int,+ chrChoices :: [ChatChoice],+ chrUsage :: Usage+ }++$(deriveJSON (jsonOpts 3) ''ChatMessage)+$(deriveJSON (jsonOpts 3) ''ChatFunction)+$(deriveJSON (jsonOpts 4) ''ChatCompletionRequest)+$(deriveJSON (jsonOpts 4) ''ChatChoice)+$(deriveJSON (jsonOpts 3) ''ChatResponse)++------------------------+------ Edits API+------------------------++data EditCreate = EditCreate+ { edcrModel :: ModelId,+ edcrInput :: Maybe T.Text,+ edcrInstruction :: T.Text,+ edcrN :: Maybe Int,+ edcrTemperature :: Maybe Double,+ edcrTopP :: Maybe Double+ }+ deriving (Show, Eq)++defaultEditCreate :: ModelId -> T.Text -> T.Text -> EditCreate+defaultEditCreate model input instruction =+ EditCreate+ { edcrModel = model,+ edcrInput = Just input,+ edcrInstruction = instruction,+ edcrN = Nothing,+ edcrTemperature = Nothing,+ edcrTopP = Nothing+ }++data EditChoice = EditChoice+ { edchText :: T.Text,+ edchIndex :: Int+ }+ deriving (Show, Eq)++data EditResponse = EditResponse+ { edrObject :: T.Text,+ edrCreated :: Int,+ edrChoices :: [EditChoice],+ edrUsage :: Usage+ }+ deriving (Show, Eq)++$(deriveJSON (jsonOpts 4) ''EditCreate)+$(deriveJSON (jsonOpts 4) ''EditChoice)+$(deriveJSON (jsonOpts 3) ''EditResponse)++------------------------+------ Images API+------------------------++data ImageResponseData = ImageResponseData+ { irdUrl :: T.Text+ }+ deriving (Show, Eq)++data ImageResponse = ImageResponse+ { irCreated :: TimeStamp,+ irData :: [ImageResponseData]+ }+ deriving (Show, Eq)++$(deriveJSON (jsonOpts 3) ''ImageResponseData)+$(deriveJSON (jsonOpts 2) ''ImageResponse)++-- | Image create API+data ImageCreate = ImageCreate+ { icPrompt :: T.Text,+ icN :: Maybe Int,+ icSize :: Maybe T.Text,+ icResponseFormat :: Maybe T.Text,+ icUser :: Maybe T.Text+ }+ deriving (Show, Eq)++$(deriveJSON (jsonOpts 2) ''ImageCreate)++-- | Image edit API+data ImageEditRequest = ImageEditRequest+ { ierImage :: T.Text,+ ierMask :: Maybe T.Text,+ ierPrompt :: T.Text,+ ierN :: Maybe Int,+ ierSize :: Maybe T.Text,+ ierResponseFormat :: Maybe T.Text,+ ierUser :: Maybe T.Text+ }+ deriving (Show, Eq)++$(deriveJSON (jsonOpts 3) ''ImageEditRequest)++-- | Image variation API+data ImageVariationRequest = ImageVariationRequest+ { ivrImage :: T.Text,+ ivrN :: Maybe Int,+ ivrSize :: Maybe T.Text,+ ivrResponseFormat :: Maybe T.Text,+ ivrUser :: Maybe T.Text+ }+ deriving (Show, Eq)++$(deriveJSON (jsonOpts 3) ''ImageVariationRequest)++------------------------+------ Embeddings API+------------------------++data EmbeddingCreate = EmbeddingCreate+ { embcModel :: ModelId,+ embcInput :: T.Text, -- TODO (2023.02.23): Extend to allow taking in array of strings or token arrays+ embcUser :: Maybe T.Text+ }+ deriving (Show, Eq)++data EmbeddingResponseData = EmbeddingResponseData+ { embdObject :: T.Text,+ embdEmbedding :: V.Vector Double,+ embdIndex :: Int+ }+ deriving (Show, Eq)++data EmbeddingUsage = EmbeddingUsage+ { embuPromptTokens :: Int,+ embuTotalTokens :: Int+ }+ deriving (Show, Eq)++data EmbeddingResponse = EmbeddingResponse+ { embrObject :: T.Text,+ embrData :: [EmbeddingResponseData],+ embrModel :: ModelId,+ embrUsage :: EmbeddingUsage+ }+ deriving (Show, Eq)++$(deriveJSON (jsonOpts 4) ''EmbeddingCreate)+$(deriveJSON (jsonOpts 4) ''EmbeddingResponseData)+$(deriveJSON (jsonOpts 4) ''EmbeddingUsage)+$(deriveJSON (jsonOpts 4) ''EmbeddingResponse)++------------------------+------ Audio API+------------------------++data AudioResponseData = AudioResponseData+ { audrdText :: T.Text+ }+ deriving (Show, Eq)++$(deriveJSON (jsonOpts 5) ''AudioResponseData)++-- | Audio create API+data AudioTranscriptionRequest = AudioTranscriptionRequest+ { audtsrFile :: FilePath,+ audtsrModel :: ModelId,+ audtsrPrompt :: Maybe T.Text,+ audtsrResponseFormat :: Maybe T.Text,+ audtsrTemperature :: Maybe Double,+ audtsrLanguage :: Maybe T.Text+ }+ deriving (Show, Eq)++instance ToMultipart Tmp AudioTranscriptionRequest where+ toMultipart atr =+ MultipartData+ ( catMaybes+ [ Input "model" . unModelId <$> Just (audtsrModel atr),+ Input "prompt" <$> audtsrPrompt atr,+ Input "response_format" <$> audtsrResponseFormat atr,+ Input "temperature" . T.pack . show <$> audtsrTemperature atr,+ Input "language" <$> audtsrLanguage atr+ ]+ )+ [ FileData "file" (T.pack . audtsrFile $ atr) (T.decodeUtf8 . defaultMimeLookup . T.pack $ audtsrFile atr) (audtsrFile atr)+ ]++$(deriveJSON (jsonOpts 6) ''AudioTranscriptionRequest)++-- | Audio translation API+data AudioTranslationRequest = AudioTranslationRequest+ { audtlrFile :: FilePath,+ audtlrModel :: ModelId,+ audtlrPrompt :: Maybe T.Text,+ audtlrResponseFormat :: Maybe T.Text,+ audtlrTemperature :: Maybe Double+ }+ deriving (Show, Eq)++instance ToMultipart Tmp AudioTranslationRequest where+ toMultipart atr =+ MultipartData+ ( catMaybes+ [ Input "model" . unModelId <$> Just (audtlrModel atr),+ Input "prompt" <$> audtlrPrompt atr,+ Input "response_format" <$> audtlrResponseFormat atr,+ Input "temperature" . T.pack . show <$> audtlrTemperature atr+ ]+ )+ [ FileData "file" (T.pack . audtlrFile $ atr) (T.decodeUtf8 . defaultMimeLookup . T.pack $ audtlrFile atr) (audtlrFile atr)+ ]++$(deriveJSON (jsonOpts 6) ''AudioTranslationRequest)++------------------------+------ Files API+------------------------++data FineTuneHunk = FineTuneHunk+ { fthPrompt :: T.Text,+ fthCompletion :: T.Text+ }+ deriving (Show, Eq)++data FileHunk+ = FhFineTune FineTuneHunk+ deriving (Show, Eq)++$(deriveJSON (jsonOpts 3) ''FineTuneHunk)++newtype FileId = FileId {unFileId :: T.Text}+ deriving (Show, Eq, ToJSON, FromJSON, ToHttpApiData)++data File = File+ { fId :: FileId,+ fObject :: T.Text,+ fBytes :: Int,+ fCreatedAt :: TimeStamp,+ fFilename :: T.Text,+ fPurpose :: T.Text+ }+ deriving (Show, Eq)++$(deriveJSON (jsonOpts 1) ''File)++-- | File upload API+data FileCreate = FileCreate+ { fcPurpose :: T.Text,+ fcDocuments :: [FileHunk]+ }+ deriving (Show, Eq)++packDocuments :: [FileHunk] -> BSL.ByteString+packDocuments docs =+ BSL.intercalate "\n" $+ map+ ( \t -> A.encode $+ case t of+ FhFineTune x -> A.toJSON x+ )+ docs++instance ToMultipart Mem FileCreate where+ toMultipart rfc =+ MultipartData+ [ Input "purpose" (fcPurpose rfc)+ ]+ [ FileData "file" "data.jsonl" "application/json" (packDocuments $ fcDocuments rfc)+ ]++-- | File delete API+data FileDeleteConfirmation = FileDeleteConfirmation+ { fdcId :: FileId+ }+ deriving (Show, Eq)++$(deriveJSON (jsonOpts 3) ''FileDeleteConfirmation)++-- | File retrieve API+-- TODO++-- | File retrieve content API+-- TODO++------------------------+------ Engine API (deprecated)+------------------------+ newtype EngineId = EngineId {unEngineId :: T.Text} deriving (Show, Eq, ToJSON, FromJSON, ToHttpApiData) @@ -102,6 +603,12 @@ } deriving (Show, Eq) +$(deriveJSON (jsonOpts 1) ''Engine)++------------------------+------ Engine completions API (deprecated)+------------------------+ newtype TextCompletionId = TextCompletionId {unTextCompletionId :: T.Text} deriving (Show, Eq, ToJSON, FromJSON, ToHttpApiData) @@ -137,8 +644,8 @@ deriving (Show, Eq) -- | Applies API defaults, only passing a prompt.-defaultTextCompletionCreate :: T.Text -> TextCompletionCreate-defaultTextCompletionCreate prompt =+defaultEngineTextCompletionCreate :: T.Text -> TextCompletionCreate+defaultEngineTextCompletionCreate prompt = TextCompletionCreate { tccrPrompt = prompt, tccrMaxTokens = Nothing,@@ -153,14 +660,30 @@ tccrBestOf = Nothing } -data EmbeddingCreate = EmbeddingCreate- {ecInput :: T.Text}+$(deriveJSON (jsonOpts 3) ''TextCompletionChoice)+$(deriveJSON (jsonOpts 2) ''TextCompletion)+$(deriveJSON (jsonOpts 4) ''TextCompletionCreate)++------------------------+------ EngineEmbeddings API (deprecated)+------------------------++data EngineEmbeddingCreate = EngineEmbeddingCreate+ {enecInput :: T.Text} deriving (Show, Eq) -data Embedding = Embedding- {eEmbedding :: V.Vector Double, eIndex :: Int}+data EngineEmbedding = EngineEmbedding+ {eneEmbedding :: V.Vector Double, eneIndex :: Int} deriving (Show, Eq) +$(deriveJSON (jsonOpts 4) ''EngineEmbeddingCreate)+$(deriveJSON (jsonOpts 3) ''EngineEmbedding)++------------------------+------ Old stuff; not touching+------ TODO 2023.03.22: Not touching this; unchanged since last year+------------------------+ newtype FineTuneId = FineTuneId {unFineTuneId :: T.Text} deriving (Show, Eq, ToJSON, FromJSON, ToHttpApiData) @@ -210,120 +733,6 @@ } deriving (Show, Eq) -data SearchResult = SearchResult- { srDocument :: Int,- srScore :: Double,- srMetadata :: Maybe T.Text- }- deriving (Show, Eq)--data SearchResultCreate = SearchResultCreate- { sccrFile :: Maybe FileId,- sccrDocuments :: Maybe (V.Vector T.Text),- sccrQuery :: T.Text,- sccrReturnMetadata :: Bool- }- deriving (Show, Eq)--data SearchHunk = SearchHunk- { shText :: T.Text,- shMetadata :: Maybe T.Text- }- deriving (Show, Eq)--data ClassificationHunk = ClassificationHunk- { chText :: T.Text,- chLabel :: T.Text- }- deriving (Show, Eq)--data FineTuneHunk = FineTuneHunk- { fthPrompt :: T.Text,- fthCompletion :: T.Text- }- deriving (Show, Eq)--data FileHunk- = FhSearch SearchHunk- | FhClassifications ClassificationHunk- | FhFineTune FineTuneHunk- deriving (Show, Eq)--data FileCreate = FileCreate- { fcPurpose :: T.Text,- fcDocuments :: [FileHunk]- }- deriving (Show, Eq)--newtype FileId = FileId {unFileId :: T.Text}- deriving (Show, Eq, ToJSON, FromJSON, ToHttpApiData)--data File = File- { fId :: FileId,- fCreatedAt :: TimeStamp,- fStatus :: T.Text,- fPurpose :: T.Text- }- deriving (Show, Eq)--data FileDeleteConfirmation = FileDeleteConfirmation- { fdcId :: FileId- }- deriving (Show, Eq)--data AnswerReq = AnswerReq- { arFile :: Maybe FileId,- arDocuments :: Maybe (V.Vector T.Text),- arQuestion :: T.Text,- arSearchModel :: EngineId,- arModel :: EngineId,- arExamplesContext :: T.Text,- arExamples :: [[T.Text]],- arReturnMetadata :: Bool- }- deriving (Show, Eq)--data AnswerResp = AnswerResp- { arsAnswers :: [T.Text]- }- deriving (Show, Eq)--$(deriveJSON (jsonOpts 2) ''OpenAIList)-$(deriveJSON (jsonOpts 1) ''Engine)-$(deriveJSON (jsonOpts 3) ''TextCompletionChoice)-$(deriveJSON (jsonOpts 2) ''TextCompletion)-$(deriveJSON (jsonOpts 4) ''TextCompletionCreate)-$(deriveJSON (jsonOpts 2) ''SearchResult)-$(deriveJSON (jsonOpts 4) ''SearchResultCreate)-$(deriveJSON (jsonOpts 1) ''File)-$(deriveJSON (jsonOpts 3) ''FileDeleteConfirmation)-$(deriveJSON (jsonOpts 2) ''AnswerReq)-$(deriveJSON (jsonOpts 3) ''AnswerResp)-$(deriveJSON (jsonOpts 2) ''EmbeddingCreate)-$(deriveJSON (jsonOpts 1) ''Embedding) $(deriveJSON (jsonOpts 3) ''FineTuneCreate) $(deriveJSON (jsonOpts 3) ''FineTuneEvent) $(deriveJSON (jsonOpts 2) ''FineTune)-$(deriveJSON (jsonOpts 2) ''SearchHunk)-$(deriveJSON (jsonOpts 2) ''ClassificationHunk)-$(deriveJSON (jsonOpts 3) ''FineTuneHunk)--packDocuments :: [FileHunk] -> BSL.ByteString-packDocuments docs =- BSL.intercalate "\n" $- map- ( \t -> A.encode $- case t of- FhSearch x -> A.toJSON x- FhClassifications x -> A.toJSON x- FhFineTune x -> A.toJSON x- )- docs--instance ToMultipart Mem FileCreate where- toMultipart rfc =- MultipartData- [ Input "purpose" (fcPurpose rfc)- ]- [ FileData "file" "data.jsonl" "application/json" (packDocuments $ fcDocuments rfc)- ]