packages feed

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 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)-      ]