diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/G4fClient.hs | 31 | ||||
| -rw-r--r-- | lib/G4fClient/API.hs | 19 | ||||
| -rw-r--r-- | lib/G4fClient/API/ApiDefault.hs | 680 | ||||
| -rw-r--r-- | lib/G4fClient/Client.hs | 223 | ||||
| -rw-r--r-- | lib/G4fClient/Core.hs | 589 | ||||
| -rw-r--r-- | lib/G4fClient/Logging.hs | 33 | ||||
| -rw-r--r-- | lib/G4fClient/LoggingKatip.hs | 117 | ||||
| -rw-r--r-- | lib/G4fClient/LoggingMonadLogger.hs | 126 | ||||
| -rw-r--r-- | lib/G4fClient/MimeTypes.hs | 225 | ||||
| -rw-r--r-- | lib/G4fClient/Model.hs | 1513 | ||||
| -rw-r--r-- | lib/G4fClient/ModelLens.hs | 858 |
11 files changed, 4414 insertions, 0 deletions
diff --git a/lib/G4fClient.hs b/lib/G4fClient.hs new file mode 100644 index 0000000..711c375 --- /dev/null +++ b/lib/G4fClient.hs @@ -0,0 +1,31 @@ +{- + FastAPI + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + OpenAPI Version: 3.1.0 + FastAPI API version: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) +-} + +{-| +Module : G4fClient +-} + +module G4fClient + ( module G4fClient.API + , module G4fClient.Client + , module G4fClient.Core + , module G4fClient.Logging + , module G4fClient.MimeTypes + , module G4fClient.Model + , module G4fClient.ModelLens + ) where + +import G4fClient.API +import G4fClient.Client +import G4fClient.Core +import G4fClient.Logging +import G4fClient.MimeTypes +import G4fClient.Model +import G4fClient.ModelLens
\ No newline at end of file diff --git a/lib/G4fClient/API.hs b/lib/G4fClient/API.hs new file mode 100644 index 0000000..0ec10da --- /dev/null +++ b/lib/G4fClient/API.hs @@ -0,0 +1,19 @@ +{- + FastAPI + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + OpenAPI Version: 3.1.0 + FastAPI API version: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) +-} + +{-| +Module : G4fClient.API +-} + +module G4fClient.API + ( module G4fClient.API.ApiDefault + ) where + +import G4fClient.API.ApiDefault
\ No newline at end of file diff --git a/lib/G4fClient/API/ApiDefault.hs b/lib/G4fClient/API/ApiDefault.hs new file mode 100644 index 0000000..3991f71 --- /dev/null +++ b/lib/G4fClient/API/ApiDefault.hs @@ -0,0 +1,680 @@ +{- + FastAPI + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + OpenAPI Version: 3.1.0 + FastAPI API version: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) +-} + +{-| +Module : G4fClient.API.ApiDefault +-} + +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE MonoLocalBinds #-} +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE OverloadedStrings #-} +{-# OPTIONS_GHC -fno-warn-name-shadowing -fno-warn-unused-binds -fno-warn-unused-imports #-} + +module G4fClient.API.ApiDefault where + +import G4fClient.Core +import G4fClient.MimeTypes +import G4fClient.Model as M + +import qualified Data.Aeson as A +import qualified Data.ByteString as B +import qualified Data.ByteString.Lazy as BL +import qualified Data.Data as P (Typeable, TypeRep, typeOf, typeRep) +import qualified Data.Foldable as P +import qualified Data.Map as Map +import qualified Data.Maybe as P +import qualified Data.Proxy as P (Proxy(..)) +import qualified Data.Set as Set +import qualified Data.String as P +import qualified Data.Text as T +import qualified Data.Text.Encoding as T +import qualified Data.Text.Lazy as TL +import qualified Data.Text.Lazy.Encoding as TL +import qualified Data.Time as TI +import qualified Network.HTTP.Client.MultipartFormData as NH +import qualified Network.HTTP.Media as ME +import qualified Network.HTTP.Types as NH +import qualified Web.FormUrlEncoded as WH +import qualified Web.HttpApiData as WH + +import Data.Text (Text) +import GHC.Base ((<|>)) + +import Prelude ((==),(/=),($), (.),(<$>),(<*>),(>>=),Maybe(..),Bool(..),Char,Double,FilePath,Float,Int,Integer,String,fmap,undefined,mempty,maybe,pure,Monad,Applicative,Functor) +import qualified Prelude as P + +-- * Operations + + +-- ** Default + +-- *** chatCompletionsApiProviderChatCompletionsPost + +-- | @POST \/api\/{provider}\/chat\/completions@ +-- +-- Chat Completions +-- +-- AuthMethod: 'AuthBasicHTTPBearer' +-- +chatCompletionsApiProviderChatCompletionsPost + :: (Consumes ChatCompletionsApiProviderChatCompletionsPost MimeJSON, MimeRender MimeJSON ChatCompletionsConfig) + => ChatCompletionsConfig -- ^ "chatCompletionsConfig" + -> Provider -- ^ "provider" + -> G4fClientRequest ChatCompletionsApiProviderChatCompletionsPost MimeJSON ChatCompletion MimeJSON +chatCompletionsApiProviderChatCompletionsPost chatCompletionsConfig (Provider provider) = + _mkRequest "POST" ["/api/",toPath provider,"/chat/completions"] + `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicHTTPBearer) + `setBodyParam` chatCompletionsConfig + +data ChatCompletionsApiProviderChatCompletionsPost +instance HasBodyParam ChatCompletionsApiProviderChatCompletionsPost ChatCompletionsConfig +instance HasOptionalParam ChatCompletionsApiProviderChatCompletionsPost ConversationId where + applyOptionalParam req (ConversationId xs) = + req `addQuery` toQuery ("conversation_id", Just xs) +instance HasOptionalParam ChatCompletionsApiProviderChatCompletionsPost XUser where + applyOptionalParam req (XUser xs) = + req `addHeader` toHeader ("x-user", xs) + +-- | @application/json@ +instance Consumes ChatCompletionsApiProviderChatCompletionsPost MimeJSON + +-- | @application/json@ +instance Produces ChatCompletionsApiProviderChatCompletionsPost MimeJSON + + +-- *** chatCompletionsApiProviderConversationIdChatCompletionsPost + +-- | @POST \/api\/{provider}\/{conversation_id}\/chat\/completions@ +-- +-- Chat Completions +-- +-- AuthMethod: 'AuthBasicHTTPBearer' +-- +chatCompletionsApiProviderConversationIdChatCompletionsPost + :: (Consumes ChatCompletionsApiProviderConversationIdChatCompletionsPost MimeJSON, MimeRender MimeJSON ChatCompletionsConfig) + => ChatCompletionsConfig -- ^ "chatCompletionsConfig" + -> Provider -- ^ "provider" + -> ConversationId -- ^ "conversationId" + -> G4fClientRequest ChatCompletionsApiProviderConversationIdChatCompletionsPost MimeJSON ChatCompletion MimeJSON +chatCompletionsApiProviderConversationIdChatCompletionsPost chatCompletionsConfig (Provider provider) (ConversationId conversationId) = + _mkRequest "POST" ["/api/",toPath provider,"/",toPath conversationId,"/chat/completions"] + `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicHTTPBearer) + `setBodyParam` chatCompletionsConfig + +data ChatCompletionsApiProviderConversationIdChatCompletionsPost +instance HasBodyParam ChatCompletionsApiProviderConversationIdChatCompletionsPost ChatCompletionsConfig +instance HasOptionalParam ChatCompletionsApiProviderConversationIdChatCompletionsPost XUser where + applyOptionalParam req (XUser xs) = + req `addHeader` toHeader ("x-user", xs) + +-- | @application/json@ +instance Consumes ChatCompletionsApiProviderConversationIdChatCompletionsPost MimeJSON + +-- | @application/json@ +instance Produces ChatCompletionsApiProviderConversationIdChatCompletionsPost MimeJSON + + +-- *** chatCompletionsV1ChatCompletionsPost + +-- | @POST \/v1\/chat\/completions@ +-- +-- Chat Completions +-- +-- AuthMethod: 'AuthBasicHTTPBearer' +-- +chatCompletionsV1ChatCompletionsPost + :: (Consumes ChatCompletionsV1ChatCompletionsPost MimeJSON, MimeRender MimeJSON ChatCompletionsConfig) + => ChatCompletionsConfig -- ^ "chatCompletionsConfig" + -> G4fClientRequest ChatCompletionsV1ChatCompletionsPost MimeJSON ChatCompletion MimeJSON +chatCompletionsV1ChatCompletionsPost chatCompletionsConfig = + _mkRequest "POST" ["/v1/chat/completions"] + `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicHTTPBearer) + `setBodyParam` chatCompletionsConfig + +data ChatCompletionsV1ChatCompletionsPost +instance HasBodyParam ChatCompletionsV1ChatCompletionsPost ChatCompletionsConfig +instance HasOptionalParam ChatCompletionsV1ChatCompletionsPost Provider where + applyOptionalParam req (Provider xs) = + req `addQuery` toQuery ("provider", Just xs) +instance HasOptionalParam ChatCompletionsV1ChatCompletionsPost ConversationId where + applyOptionalParam req (ConversationId xs) = + req `addQuery` toQuery ("conversation_id", Just xs) +instance HasOptionalParam ChatCompletionsV1ChatCompletionsPost XUser where + applyOptionalParam req (XUser xs) = + req `addHeader` toHeader ("x-user", xs) + +-- | @application/json@ +instance Consumes ChatCompletionsV1ChatCompletionsPost MimeJSON + +-- | @application/json@ +instance Produces ChatCompletionsV1ChatCompletionsPost MimeJSON + + +-- *** convertApiMarkitdownPost + +-- | @POST \/api\/markitdown@ +-- +-- Convert +-- +convertApiMarkitdownPost + :: (Consumes ConvertApiMarkitdownPost MimeMultipartFormData) + => File -- ^ "file" + -> G4fClientRequest ConvertApiMarkitdownPost MimeMultipartFormData TranscriptionResponseModel MimeJSON +convertApiMarkitdownPost (File file) = + _mkRequest "POST" ["/api/markitdown"] + `_addMultiFormPart` NH.partFileSource "file" file + +data ConvertApiMarkitdownPost +instance HasOptionalParam ConvertApiMarkitdownPost Model where + applyOptionalParam req (Model xs) = + req `_addMultiFormPart` NH.partLBS "model" (mimeRender' MimeMultipartFormData xs) +instance HasOptionalParam ConvertApiMarkitdownPost Provider where + applyOptionalParam req (Provider xs) = + req `_addMultiFormPart` NH.partLBS "provider" (mimeRender' MimeMultipartFormData xs) +instance HasOptionalParam ConvertApiMarkitdownPost Prompt where + applyOptionalParam req (Prompt xs) = + req `_addMultiFormPart` NH.partLBS "prompt" (mimeRender' MimeMultipartFormData xs) +instance HasOptionalParam ConvertApiMarkitdownPost PathProvider where + applyOptionalParam req (PathProvider xs) = + req `addQuery` toQuery ("path_provider", Just xs) + +-- | @multipart/form-data@ +instance Consumes ConvertApiMarkitdownPost MimeMultipartFormData + +-- | @application/json@ +instance Produces ConvertApiMarkitdownPost MimeJSON + + +-- *** convertApiPathProviderAudioTranscriptionsPost + +-- | @POST \/api\/{path_provider}\/audio\/transcriptions@ +-- +-- Convert +-- +convertApiPathProviderAudioTranscriptionsPost + :: (Consumes ConvertApiPathProviderAudioTranscriptionsPost MimeMultipartFormData) + => File -- ^ "file" + -> PathProvider -- ^ "pathProvider" + -> G4fClientRequest ConvertApiPathProviderAudioTranscriptionsPost MimeMultipartFormData TranscriptionResponseModel MimeJSON +convertApiPathProviderAudioTranscriptionsPost (File file) (PathProvider pathProvider) = + _mkRequest "POST" ["/api/",toPath pathProvider,"/audio/transcriptions"] + `_addMultiFormPart` NH.partFileSource "file" file + +data ConvertApiPathProviderAudioTranscriptionsPost +instance HasOptionalParam ConvertApiPathProviderAudioTranscriptionsPost Model where + applyOptionalParam req (Model xs) = + req `_addMultiFormPart` NH.partLBS "model" (mimeRender' MimeMultipartFormData xs) +instance HasOptionalParam ConvertApiPathProviderAudioTranscriptionsPost Provider where + applyOptionalParam req (Provider xs) = + req `_addMultiFormPart` NH.partLBS "provider" (mimeRender' MimeMultipartFormData xs) +instance HasOptionalParam ConvertApiPathProviderAudioTranscriptionsPost Prompt where + applyOptionalParam req (Prompt xs) = + req `_addMultiFormPart` NH.partLBS "prompt" (mimeRender' MimeMultipartFormData xs) + +-- | @multipart/form-data@ +instance Consumes ConvertApiPathProviderAudioTranscriptionsPost MimeMultipartFormData + +-- | @application/json@ +instance Produces ConvertApiPathProviderAudioTranscriptionsPost MimeJSON + + +-- *** convertV1AudioTranscriptionsPost + +-- | @POST \/v1\/audio\/transcriptions@ +-- +-- Convert +-- +convertV1AudioTranscriptionsPost + :: (Consumes ConvertV1AudioTranscriptionsPost MimeMultipartFormData) + => File -- ^ "file" + -> G4fClientRequest ConvertV1AudioTranscriptionsPost MimeMultipartFormData TranscriptionResponseModel MimeJSON +convertV1AudioTranscriptionsPost (File file) = + _mkRequest "POST" ["/v1/audio/transcriptions"] + `_addMultiFormPart` NH.partFileSource "file" file + +data ConvertV1AudioTranscriptionsPost +instance HasOptionalParam ConvertV1AudioTranscriptionsPost Model where + applyOptionalParam req (Model xs) = + req `_addMultiFormPart` NH.partLBS "model" (mimeRender' MimeMultipartFormData xs) +instance HasOptionalParam ConvertV1AudioTranscriptionsPost Provider where + applyOptionalParam req (Provider xs) = + req `_addMultiFormPart` NH.partLBS "provider" (mimeRender' MimeMultipartFormData xs) +instance HasOptionalParam ConvertV1AudioTranscriptionsPost Prompt where + applyOptionalParam req (Prompt xs) = + req `_addMultiFormPart` NH.partLBS "prompt" (mimeRender' MimeMultipartFormData xs) +instance HasOptionalParam ConvertV1AudioTranscriptionsPost PathProvider where + applyOptionalParam req (PathProvider xs) = + req `addQuery` toQuery ("path_provider", Just xs) + +-- | @multipart/form-data@ +instance Consumes ConvertV1AudioTranscriptionsPost MimeMultipartFormData + +-- | @application/json@ +instance Produces ConvertV1AudioTranscriptionsPost MimeJSON + + +-- *** generateImageApiProviderImagesGenerationsPost + +-- | @POST \/api\/{provider}\/images\/generations@ +-- +-- Generate Image +-- +-- AuthMethod: 'AuthBasicHTTPBearer' +-- +generateImageApiProviderImagesGenerationsPost + :: (Consumes GenerateImageApiProviderImagesGenerationsPost MimeJSON, MimeRender MimeJSON ImageGenerationConfig) + => ImageGenerationConfig -- ^ "imageGenerationConfig" + -> Provider -- ^ "provider" + -> G4fClientRequest GenerateImageApiProviderImagesGenerationsPost MimeJSON ImagesResponse MimeJSON +generateImageApiProviderImagesGenerationsPost imageGenerationConfig (Provider provider) = + _mkRequest "POST" ["/api/",toPath provider,"/images/generations"] + `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicHTTPBearer) + `setBodyParam` imageGenerationConfig + +data GenerateImageApiProviderImagesGenerationsPost +instance HasBodyParam GenerateImageApiProviderImagesGenerationsPost ImageGenerationConfig + +-- | @application/json@ +instance Consumes GenerateImageApiProviderImagesGenerationsPost MimeJSON + +-- | @application/json@ +instance Produces GenerateImageApiProviderImagesGenerationsPost MimeJSON + + +-- *** generateImageV1ImagesGeneratePost + +-- | @POST \/v1\/images\/generate@ +-- +-- Generate Image +-- +-- AuthMethod: 'AuthBasicHTTPBearer' +-- +generateImageV1ImagesGeneratePost + :: (Consumes GenerateImageV1ImagesGeneratePost MimeJSON, MimeRender MimeJSON ImageGenerationConfig) + => ImageGenerationConfig -- ^ "imageGenerationConfig" + -> G4fClientRequest GenerateImageV1ImagesGeneratePost MimeJSON ImagesResponse MimeJSON +generateImageV1ImagesGeneratePost imageGenerationConfig = + _mkRequest "POST" ["/v1/images/generate"] + `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicHTTPBearer) + `setBodyParam` imageGenerationConfig + +data GenerateImageV1ImagesGeneratePost +instance HasBodyParam GenerateImageV1ImagesGeneratePost ImageGenerationConfig +instance HasOptionalParam GenerateImageV1ImagesGeneratePost Provider where + applyOptionalParam req (Provider xs) = + req `addQuery` toQuery ("provider", Just xs) + +-- | @application/json@ +instance Consumes GenerateImageV1ImagesGeneratePost MimeJSON + +-- | @application/json@ +instance Produces GenerateImageV1ImagesGeneratePost MimeJSON + + +-- *** generateImageV1ImagesGenerationsPost + +-- | @POST \/v1\/images\/generations@ +-- +-- Generate Image +-- +-- AuthMethod: 'AuthBasicHTTPBearer' +-- +generateImageV1ImagesGenerationsPost + :: (Consumes GenerateImageV1ImagesGenerationsPost MimeJSON, MimeRender MimeJSON ImageGenerationConfig) + => ImageGenerationConfig -- ^ "imageGenerationConfig" + -> G4fClientRequest GenerateImageV1ImagesGenerationsPost MimeJSON ImagesResponse MimeJSON +generateImageV1ImagesGenerationsPost imageGenerationConfig = + _mkRequest "POST" ["/v1/images/generations"] + `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicHTTPBearer) + `setBodyParam` imageGenerationConfig + +data GenerateImageV1ImagesGenerationsPost +instance HasBodyParam GenerateImageV1ImagesGenerationsPost ImageGenerationConfig +instance HasOptionalParam GenerateImageV1ImagesGenerationsPost Provider where + applyOptionalParam req (Provider xs) = + req `addQuery` toQuery ("provider", Just xs) + +-- | @application/json@ +instance Consumes GenerateImageV1ImagesGenerationsPost MimeJSON + +-- | @application/json@ +instance Produces GenerateImageV1ImagesGenerationsPost MimeJSON + + +-- *** generateImageV1MediaGeneratePost + +-- | @POST \/v1\/media\/generate@ +-- +-- Generate Image +-- +-- AuthMethod: 'AuthBasicHTTPBearer' +-- +generateImageV1MediaGeneratePost + :: (Consumes GenerateImageV1MediaGeneratePost MimeJSON, MimeRender MimeJSON ImageGenerationConfig) + => ImageGenerationConfig -- ^ "imageGenerationConfig" + -> G4fClientRequest GenerateImageV1MediaGeneratePost MimeJSON ImagesResponse MimeJSON +generateImageV1MediaGeneratePost imageGenerationConfig = + _mkRequest "POST" ["/v1/media/generate"] + `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicHTTPBearer) + `setBodyParam` imageGenerationConfig + +data GenerateImageV1MediaGeneratePost +instance HasBodyParam GenerateImageV1MediaGeneratePost ImageGenerationConfig +instance HasOptionalParam GenerateImageV1MediaGeneratePost Provider where + applyOptionalParam req (Provider xs) = + req `addQuery` toQuery ("provider", Just xs) + +-- | @application/json@ +instance Consumes GenerateImageV1MediaGeneratePost MimeJSON + +-- | @application/json@ +instance Produces GenerateImageV1MediaGeneratePost MimeJSON + + +-- *** generateSpeechApiProviderAudioSpeechPost + +-- | @POST \/api\/{provider}\/audio\/speech@ +-- +-- Generate Speech +-- +-- AuthMethod: 'AuthBasicHTTPBearer' +-- +generateSpeechApiProviderAudioSpeechPost + :: (Consumes GenerateSpeechApiProviderAudioSpeechPost MimeJSON, MimeRender MimeJSON AudioSpeechConfig) + => Accept accept -- ^ request accept ('MimeType') + -> AudioSpeechConfig -- ^ "audioSpeechConfig" + -> Provider -- ^ "provider" + -> G4fClientRequest GenerateSpeechApiProviderAudioSpeechPost MimeJSON AnyType accept +generateSpeechApiProviderAudioSpeechPost _ audioSpeechConfig (Provider provider) = + _mkRequest "POST" ["/api/",toPath provider,"/audio/speech"] + `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicHTTPBearer) + `setBodyParam` audioSpeechConfig + +data GenerateSpeechApiProviderAudioSpeechPost +instance HasBodyParam GenerateSpeechApiProviderAudioSpeechPost AudioSpeechConfig + +-- | @application/json@ +instance Consumes GenerateSpeechApiProviderAudioSpeechPost MimeJSON + +-- | @application/json@ +instance Produces GenerateSpeechApiProviderAudioSpeechPost MimeJSON +-- | @audio/*@ +instance Produces GenerateSpeechApiProviderAudioSpeechPost MimeAudio + + +-- *** generateSpeechV1AudioSpeechPost + +-- | @POST \/v1\/audio\/speech@ +-- +-- Generate Speech +-- +-- AuthMethod: 'AuthBasicHTTPBearer' +-- +generateSpeechV1AudioSpeechPost + :: (Consumes GenerateSpeechV1AudioSpeechPost MimeJSON, MimeRender MimeJSON AudioSpeechConfig) + => Accept accept -- ^ request accept ('MimeType') + -> AudioSpeechConfig -- ^ "audioSpeechConfig" + -> G4fClientRequest GenerateSpeechV1AudioSpeechPost MimeJSON AnyType accept +generateSpeechV1AudioSpeechPost _ audioSpeechConfig = + _mkRequest "POST" ["/v1/audio/speech"] + `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicHTTPBearer) + `setBodyParam` audioSpeechConfig + +data GenerateSpeechV1AudioSpeechPost +instance HasBodyParam GenerateSpeechV1AudioSpeechPost AudioSpeechConfig +instance HasOptionalParam GenerateSpeechV1AudioSpeechPost Provider where + applyOptionalParam req (Provider xs) = + req `addQuery` toQuery ("provider", Just xs) + +-- | @application/json@ +instance Consumes GenerateSpeechV1AudioSpeechPost MimeJSON + +-- | @application/json@ +instance Produces GenerateSpeechV1AudioSpeechPost MimeJSON +-- | @audio/*@ +instance Produces GenerateSpeechV1AudioSpeechPost MimeAudio + + +-- *** getMediaImagesFilenameGet + +-- | @GET \/images\/{filename}@ +-- +-- Get Media +-- +getMediaImagesFilenameGet + :: Accept accept -- ^ request accept ('MimeType') + -> Filename -- ^ "filename" + -> G4fClientRequest GetMediaImagesFilenameGet MimeNoContent AnyType accept +getMediaImagesFilenameGet _ (Filename filename) = + _mkRequest "GET" ["/images/",toPath filename] + +data GetMediaImagesFilenameGet +instance HasOptionalParam GetMediaImagesFilenameGet Thumbnail where + applyOptionalParam req (Thumbnail xs) = + req `addQuery` toQuery ("thumbnail", Just xs) +-- | @image/*@ +instance Produces GetMediaImagesFilenameGet MimeImage +-- | @application/json@ +instance Produces GetMediaImagesFilenameGet MimeJSON + + +-- *** getMediaMediaFilenameGet + +-- | @GET \/media\/{filename}@ +-- +-- Get Media +-- +getMediaMediaFilenameGet + :: Accept accept -- ^ request accept ('MimeType') + -> Filename -- ^ "filename" + -> G4fClientRequest GetMediaMediaFilenameGet MimeNoContent AnyType accept +getMediaMediaFilenameGet _ (Filename filename) = + _mkRequest "GET" ["/media/",toPath filename] + +data GetMediaMediaFilenameGet +instance HasOptionalParam GetMediaMediaFilenameGet Thumbnail where + applyOptionalParam req (Thumbnail xs) = + req `addQuery` toQuery ("thumbnail", Just xs) +-- | @image/*@ +instance Produces GetMediaMediaFilenameGet MimeImage +-- | @application/json@ +instance Produces GetMediaMediaFilenameGet MimeJSON +-- | @audio/*@ +instance Produces GetMediaMediaFilenameGet MimeAudio + + +-- *** getMediaThumbnailThumbnailFilenameGet + +-- | @GET \/thumbnail\/{filename}@ +-- +-- Get Media Thumbnail +-- +getMediaThumbnailThumbnailFilenameGet + :: Accept accept -- ^ request accept ('MimeType') + -> FilenameText -- ^ "filename" + -> G4fClientRequest GetMediaThumbnailThumbnailFilenameGet MimeNoContent AnyType accept +getMediaThumbnailThumbnailFilenameGet _ (FilenameText filename) = + _mkRequest "GET" ["/thumbnail/",toPath filename] + +data GetMediaThumbnailThumbnailFilenameGet +-- | @image/*@ +instance Produces GetMediaThumbnailThumbnailFilenameGet MimeImage +-- | @application/json@ +instance Produces GetMediaThumbnailThumbnailFilenameGet MimeJSON +-- | @audio/*@ +instance Produces GetMediaThumbnailThumbnailFilenameGet MimeAudio + + +-- *** modelInfoV1ModelsModelNameGet + +-- | @GET \/v1\/models\/{model_name}@ +-- +-- Model Info +-- +modelInfoV1ModelsModelNameGet + :: ModelName -- ^ "modelName" + -> G4fClientRequest ModelInfoV1ModelsModelNameGet MimeNoContent ModelResponseModel MimeJSON +modelInfoV1ModelsModelNameGet (ModelName modelName) = + _mkRequest "GET" ["/v1/models/",toPath modelName] + +data ModelInfoV1ModelsModelNameGet +-- | @application/json@ +instance Produces ModelInfoV1ModelsModelNameGet MimeJSON + + +-- *** modelInfoV1ModelsModelNamePost + +-- | @POST \/v1\/models\/{model_name}@ +-- +-- Model Info +-- +modelInfoV1ModelsModelNamePost + :: ModelName -- ^ "modelName" + -> G4fClientRequest ModelInfoV1ModelsModelNamePost MimeNoContent ModelResponseModel MimeJSON +modelInfoV1ModelsModelNamePost (ModelName modelName) = + _mkRequest "POST" ["/v1/models/",toPath modelName] + +data ModelInfoV1ModelsModelNamePost +-- | @application/json@ +instance Produces ModelInfoV1ModelsModelNamePost MimeJSON + + +-- *** modelsApiProviderModelsGet + +-- | @GET \/api\/{provider}\/models@ +-- +-- Models +-- +-- AuthMethod: 'AuthBasicHTTPBearer' +-- +modelsApiProviderModelsGet + :: Provider -- ^ "provider" + -> G4fClientRequest ModelsApiProviderModelsGet MimeNoContent [ModelResponseModel] MimeJSON +modelsApiProviderModelsGet (Provider provider) = + _mkRequest "GET" ["/api/",toPath provider,"/models"] + `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicHTTPBearer) + +data ModelsApiProviderModelsGet +-- | @application/json@ +instance Produces ModelsApiProviderModelsGet MimeJSON + + +-- *** modelsV1ModelsGet + +-- | @GET \/v1\/models@ +-- +-- Models +-- +modelsV1ModelsGet + :: G4fClientRequest ModelsV1ModelsGet MimeNoContent [ModelResponseModel] MimeJSON +modelsV1ModelsGet = + _mkRequest "GET" ["/v1/models"] + +data ModelsV1ModelsGet +-- | @application/json@ +instance Produces ModelsV1ModelsGet MimeJSON + + +-- *** providerQuotaApiProviderQuotaGet + +-- | @GET \/api\/{provider}\/quota@ +-- +-- Provider Quota +-- +-- AuthMethod: 'AuthBasicHTTPBearer' +-- +providerQuotaApiProviderQuotaGet + :: Provider -- ^ "provider" + -> G4fClientRequest ProviderQuotaApiProviderQuotaGet MimeNoContent AnyType MimeJSON +providerQuotaApiProviderQuotaGet (Provider provider) = + _mkRequest "GET" ["/api/",toPath provider,"/quota"] + `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicHTTPBearer) + +data ProviderQuotaApiProviderQuotaGet +-- | @application/json@ +instance Produces ProviderQuotaApiProviderQuotaGet MimeJSON + + +-- *** providersInfoV1ProvidersProviderGet + +-- | @GET \/v1\/providers\/{provider}@ +-- +-- Providers Info +-- +providersInfoV1ProvidersProviderGet + :: Provider -- ^ "provider" + -> G4fClientRequest ProvidersInfoV1ProvidersProviderGet MimeNoContent ProviderResponseDetailModel MimeJSON +providersInfoV1ProvidersProviderGet (Provider provider) = + _mkRequest "GET" ["/v1/providers/",toPath provider] + +data ProvidersInfoV1ProvidersProviderGet +-- | @application/json@ +instance Produces ProvidersInfoV1ProvidersProviderGet MimeJSON + + +-- *** providersV1ProvidersGet + +-- | @GET \/v1\/providers@ +-- +-- Providers +-- +providersV1ProvidersGet + :: G4fClientRequest ProvidersV1ProvidersGet MimeNoContent [ProviderResponseModel] MimeJSON +providersV1ProvidersGet = + _mkRequest "GET" ["/v1/providers"] + +data ProvidersV1ProvidersGet +-- | @application/json@ +instance Produces ProvidersV1ProvidersGet MimeJSON + + +-- *** readRootV1V1Get + +-- | @GET \/v1@ +-- +-- Read Root V1 +-- +readRootV1V1Get + :: G4fClientRequest ReadRootV1V1Get MimeNoContent AnyType MimeJSON +readRootV1V1Get = + _mkRequest "GET" ["/v1"] + +data ReadRootV1V1Get +-- | @application/json@ +instance Produces ReadRootV1V1Get MimeJSON + + +-- *** uploadCookiesV1UploadCookiesPost + +-- | @POST \/v1\/upload_cookies@ +-- +-- Upload Cookies +-- +-- AuthMethod: 'AuthBasicHTTPBearer' +-- +uploadCookiesV1UploadCookiesPost + :: (Consumes UploadCookiesV1UploadCookiesPost MimeMultipartFormData) + => Files -- ^ "files" + -> G4fClientRequest UploadCookiesV1UploadCookiesPost MimeMultipartFormData [FileResponseModel] MimeJSON +uploadCookiesV1UploadCookiesPost (Files files) = + _mkRequest "POST" ["/v1/upload_cookies"] + `_hasAuthType` (P.Proxy :: P.Proxy AuthBasicHTTPBearer) + `_addMultiFormPart` NH.partFileSource "files" files + +data UploadCookiesV1UploadCookiesPost + +-- | @multipart/form-data@ +instance Consumes UploadCookiesV1UploadCookiesPost MimeMultipartFormData + +-- | @application/json@ +instance Produces UploadCookiesV1UploadCookiesPost MimeJSON + diff --git a/lib/G4fClient/Client.hs b/lib/G4fClient/Client.hs new file mode 100644 index 0000000..0fed516 --- /dev/null +++ b/lib/G4fClient/Client.hs @@ -0,0 +1,223 @@ +{- + FastAPI + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + OpenAPI Version: 3.1.0 + FastAPI API version: 0.1.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) +-} + +{-| +Module : G4fClient.Client +-} + +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RankNTypes #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE DeriveFunctor #-} +{-# LANGUAGE DeriveFoldable #-} +{-# LANGUAGE DeriveTraversable #-} +{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-unused-imports #-} + +module G4fClient.Client where + +import G4fClient.Core +import G4fClient.Logging +import G4fClient.MimeTypes + +import qualified Control.Exception.Safe as E +import qualified Control.Monad.IO.Class as P +import qualified Control.Monad as P +import qualified Data.Aeson.Types as A +import qualified Data.ByteString as B +import qualified Data.ByteString.Char8 as BC +import qualified Data.ByteString.Lazy as BL +import qualified Data.ByteString.Lazy.Char8 as BCL +import qualified Data.Proxy as P (Proxy(..)) +import qualified Data.Text as T +import qualified Data.Text.Encoding as T +import qualified Network.HTTP.Client as NH +import qualified Network.HTTP.Client.MultipartFormData as NH +import qualified Network.HTTP.Types as NH +import qualified Web.FormUrlEncoded as WH +import qualified Web.HttpApiData as WH + +import Data.Function ((&)) +import Data.Monoid ((<>)) +import Data.Text (Text) +import GHC.Exts (IsString(..)) + +-- * Dispatch + +-- ** Lbs + +-- | send a request returning the raw http response +dispatchLbs + :: (Produces req accept, MimeType contentType) + => NH.Manager -- ^ http-client Connection manager + -> G4fClientConfig -- ^ config + -> G4fClientRequest req contentType res accept -- ^ request + -> IO (NH.Response BCL.ByteString) -- ^ response +dispatchLbs manager config request = do + initReq <- _toInitRequest config request + dispatchInitUnsafe manager config initReq + +-- ** Mime + +-- | pair of decoded http body and http response +data MimeResult res = + MimeResult { mimeResult :: Either MimeError res -- ^ decoded http body + , mimeResultResponse :: NH.Response BCL.ByteString -- ^ http response + } + deriving (Show, Functor, Foldable, Traversable) + +-- | pair of unrender/parser error and http response +data MimeError = + MimeError { + mimeError :: String -- ^ unrender/parser error + , mimeErrorResponse :: NH.Response BCL.ByteString -- ^ http response + } deriving (Show) + +-- | send a request returning the 'MimeResult' +dispatchMime + :: forall req contentType res accept. (Produces req accept, MimeUnrender accept res, MimeType contentType) + => NH.Manager -- ^ http-client Connection manager + -> G4fClientConfig -- ^ config + -> G4fClientRequest req contentType res accept -- ^ request + -> IO (MimeResult res) -- ^ response +dispatchMime manager config request = do + httpResponse <- dispatchLbs manager config request + let statusCode = NH.statusCode . NH.responseStatus $ httpResponse + parsedResult <- + runConfigLogWithExceptions "Client" config $ + do if (statusCode >= 400 && statusCode < 600) + then do + let s = "error statusCode: " ++ show statusCode + _log "Client" levelError (T.pack s) + pure (Left (MimeError s httpResponse)) + else case mimeUnrender (P.Proxy :: P.Proxy accept) (NH.responseBody httpResponse) of + Left s -> do + _log "Client" levelError (T.pack s) + pure (Left (MimeError s httpResponse)) + Right r -> pure (Right r) + return (MimeResult parsedResult httpResponse) + +-- | like 'dispatchMime', but only returns the decoded http body +dispatchMime' + :: (Produces req accept, MimeUnrender accept res, MimeType contentType) + => NH.Manager -- ^ http-client Connection manager + -> G4fClientConfig -- ^ config + -> G4fClientRequest req contentType res accept -- ^ request + -> IO (Either MimeError res) -- ^ response +dispatchMime' manager config request = do + MimeResult parsedResult _ <- dispatchMime manager config request + return parsedResult + +-- ** Unsafe + +-- | like 'dispatchReqLbs', but does not validate the operation is a 'Producer' of the "accept" 'MimeType'. (Useful if the server's response is undocumented) +dispatchLbsUnsafe + :: (MimeType accept, MimeType contentType) + => NH.Manager -- ^ http-client Connection manager + -> G4fClientConfig -- ^ config + -> G4fClientRequest req contentType res accept -- ^ request + -> IO (NH.Response BCL.ByteString) -- ^ response +dispatchLbsUnsafe manager config request = do + initReq <- _toInitRequest config request + dispatchInitUnsafe manager config initReq + +-- | dispatch an InitRequest +dispatchInitUnsafe + :: NH.Manager -- ^ http-client Connection manager + -> G4fClientConfig -- ^ config + -> InitRequest req contentType res accept -- ^ init request + -> IO (NH.Response BCL.ByteString) -- ^ response +dispatchInitUnsafe manager config (InitRequest req) = do + runConfigLogWithExceptions src config $ + do _log src levelInfo requestLogMsg + _log src levelDebug requestDbgLogMsg + res <- P.liftIO $ NH.httpLbs req manager + _log src levelInfo (responseLogMsg res) + _log src levelDebug ((T.pack . show) res) + return res + where + src = "Client" + endpoint = + T.pack $ + BC.unpack $ + NH.method req <> " " <> NH.host req <> NH.path req <> NH.queryString req + requestLogMsg = "REQ:" <> endpoint + requestDbgLogMsg = + "Headers=" <> (T.pack . show) (NH.requestHeaders req) <> " Body=" <> + (case NH.requestBody req of + NH.RequestBodyLBS xs -> T.decodeUtf8 (BL.toStrict xs) + _ -> "<RequestBody>") + responseStatusCode = (T.pack . show) . NH.statusCode . NH.responseStatus + responseLogMsg res = + "RES:statusCode=" <> responseStatusCode res <> " (" <> endpoint <> ")" + +-- * InitRequest + +-- | wraps an http-client 'Request' with request/response type parameters +newtype InitRequest req contentType res accept = InitRequest + { unInitRequest :: NH.Request + } deriving (Show) + +-- | Build an http-client 'Request' record from the supplied config and request +_toInitRequest + :: (MimeType accept, MimeType contentType) + => G4fClientConfig -- ^ config + -> G4fClientRequest req contentType res accept -- ^ request + -> IO (InitRequest req contentType res accept) -- ^ initialized request +_toInitRequest config req0 = + runConfigLogWithExceptions "Client" config $ do + parsedReq <- P.liftIO $ NH.parseRequest $ BCL.unpack $ BCL.append (configHost config) (BCL.concat (rUrlPath req0)) + req1 <- P.liftIO $ _applyAuthMethods req0 config + P.when + (configValidateAuthMethods config && (not . null . rAuthTypes) req1) + (E.throw $ AuthMethodException $ "AuthMethod not configured: " <> (show . head . rAuthTypes) req1) + let req2 = req1 & _setContentTypeHeader & _setAcceptHeader + params = rParams req2 + reqHeaders = ("User-Agent", WH.toHeader (configUserAgent config)) : paramsHeaders params + reqQuery = let query = paramsQuery params + queryExtraUnreserved = configQueryExtraUnreserved config + in if B.null queryExtraUnreserved + then NH.renderQuery True query + else NH.renderQueryPartialEscape True (toPartialEscapeQuery queryExtraUnreserved query) + pReq = parsedReq { NH.method = rMethod req2 + , NH.requestHeaders = reqHeaders + , NH.queryString = reqQuery + } + outReq <- case paramsBody params of + ParamBodyNone -> pure (pReq { NH.requestBody = mempty }) + ParamBodyB bs -> pure (pReq { NH.requestBody = NH.RequestBodyBS bs }) + ParamBodyBL bl -> pure (pReq { NH.requestBody = NH.RequestBodyLBS bl }) + ParamBodyFormUrlEncoded form -> pure (pReq { NH.requestBody = NH.RequestBodyLBS (WH.urlEncodeForm form) }) + ParamBodyMultipartFormData parts -> NH.formDataBody parts pReq + + pure (InitRequest outReq) + +-- | modify the underlying Request +modifyInitRequest :: InitRequest req contentType res accept -> (NH.Request -> NH.Request) -> InitRequest req contentType res accept +modifyInitRequest (InitRequest req) f = InitRequest (f req) |
