{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedLists #-} {-# LANGUAGE OverloadedRecordDot #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} module IntelliMonad.Tools.TextToSpeech where import Control.Monad.IO.Class import qualified Data.Aeson as A import qualified Data.ByteString as BS import qualified Data.Text as T import GHC.Generics import GHC.IO.Exception import IntelliMonad.Types import Network.HTTP.Client (newManager) import Network.HTTP.Client.TLS (tlsManagerSettings) import qualified OpenAI.API as API import qualified OpenAI.Types as API import Servant.Client import System.Environment (getEnv) import System.Process data TextToSpeech = TextToSpeech { TextToSpeech -> Text script :: T.Text } deriving (TextToSpeech -> TextToSpeech -> Bool (TextToSpeech -> TextToSpeech -> Bool) -> (TextToSpeech -> TextToSpeech -> Bool) -> Eq TextToSpeech forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: TextToSpeech -> TextToSpeech -> Bool == :: TextToSpeech -> TextToSpeech -> Bool $c/= :: TextToSpeech -> TextToSpeech -> Bool /= :: TextToSpeech -> TextToSpeech -> Bool Eq, Int -> TextToSpeech -> ShowS [TextToSpeech] -> ShowS TextToSpeech -> String (Int -> TextToSpeech -> ShowS) -> (TextToSpeech -> String) -> ([TextToSpeech] -> ShowS) -> Show TextToSpeech forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> TextToSpeech -> ShowS showsPrec :: Int -> TextToSpeech -> ShowS $cshow :: TextToSpeech -> String show :: TextToSpeech -> String $cshowList :: [TextToSpeech] -> ShowS showList :: [TextToSpeech] -> ShowS Show, (forall x. TextToSpeech -> Rep TextToSpeech x) -> (forall x. Rep TextToSpeech x -> TextToSpeech) -> Generic TextToSpeech forall x. Rep TextToSpeech x -> TextToSpeech forall x. TextToSpeech -> Rep TextToSpeech x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. TextToSpeech -> Rep TextToSpeech x from :: forall x. TextToSpeech -> Rep TextToSpeech x $cto :: forall x. Rep TextToSpeech x -> TextToSpeech to :: forall x. Rep TextToSpeech x -> TextToSpeech Generic, Schema Schema -> JSONSchema TextToSpeech forall r. Schema -> JSONSchema r $cschema :: Schema schema :: Schema JSONSchema, Maybe TextToSpeech Value -> Parser [TextToSpeech] Value -> Parser TextToSpeech (Value -> Parser TextToSpeech) -> (Value -> Parser [TextToSpeech]) -> Maybe TextToSpeech -> FromJSON TextToSpeech forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> Maybe a -> FromJSON a $cparseJSON :: Value -> Parser TextToSpeech parseJSON :: Value -> Parser TextToSpeech $cparseJSONList :: Value -> Parser [TextToSpeech] parseJSONList :: Value -> Parser [TextToSpeech] $comittedField :: Maybe TextToSpeech omittedField :: Maybe TextToSpeech A.FromJSON, [TextToSpeech] -> Value [TextToSpeech] -> Encoding TextToSpeech -> Bool TextToSpeech -> Value TextToSpeech -> Encoding (TextToSpeech -> Value) -> (TextToSpeech -> Encoding) -> ([TextToSpeech] -> Value) -> ([TextToSpeech] -> Encoding) -> (TextToSpeech -> Bool) -> ToJSON TextToSpeech forall a. (a -> Value) -> (a -> Encoding) -> ([a] -> Value) -> ([a] -> Encoding) -> (a -> Bool) -> ToJSON a $ctoJSON :: TextToSpeech -> Value toJSON :: TextToSpeech -> Value $ctoEncoding :: TextToSpeech -> Encoding toEncoding :: TextToSpeech -> Encoding $ctoJSONList :: [TextToSpeech] -> Value toJSONList :: [TextToSpeech] -> Value $ctoEncodingList :: [TextToSpeech] -> Encoding toEncodingList :: [TextToSpeech] -> Encoding $comitField :: TextToSpeech -> Bool omitField :: TextToSpeech -> Bool A.ToJSON) instance HasFunctionObject TextToSpeech where getFunctionName :: String getFunctionName = String "text_to_speech" getFunctionDescription :: String getFunctionDescription = String "Speak text" getFieldDescription :: ShowS getFieldDescription String "script" = String "A script for speech" instance Tool TextToSpeech where data Output TextToSpeech = TextToSpeechOutput { Output TextToSpeech -> Int code :: Int, Output TextToSpeech -> String stdout :: String, Output TextToSpeech -> String stderr :: String } deriving (Output TextToSpeech -> Output TextToSpeech -> Bool (Output TextToSpeech -> Output TextToSpeech -> Bool) -> (Output TextToSpeech -> Output TextToSpeech -> Bool) -> Eq (Output TextToSpeech) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Output TextToSpeech -> Output TextToSpeech -> Bool == :: Output TextToSpeech -> Output TextToSpeech -> Bool $c/= :: Output TextToSpeech -> Output TextToSpeech -> Bool /= :: Output TextToSpeech -> Output TextToSpeech -> Bool Eq, Int -> Output TextToSpeech -> ShowS [Output TextToSpeech] -> ShowS Output TextToSpeech -> String (Int -> Output TextToSpeech -> ShowS) -> (Output TextToSpeech -> String) -> ([Output TextToSpeech] -> ShowS) -> Show (Output TextToSpeech) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> Output TextToSpeech -> ShowS showsPrec :: Int -> Output TextToSpeech -> ShowS $cshow :: Output TextToSpeech -> String show :: Output TextToSpeech -> String $cshowList :: [Output TextToSpeech] -> ShowS showList :: [Output TextToSpeech] -> ShowS Show, (forall x. Output TextToSpeech -> Rep (Output TextToSpeech) x) -> (forall x. Rep (Output TextToSpeech) x -> Output TextToSpeech) -> Generic (Output TextToSpeech) forall x. Rep (Output TextToSpeech) x -> Output TextToSpeech forall x. Output TextToSpeech -> Rep (Output TextToSpeech) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. Output TextToSpeech -> Rep (Output TextToSpeech) x from :: forall x. Output TextToSpeech -> Rep (Output TextToSpeech) x $cto :: forall x. Rep (Output TextToSpeech) x -> Output TextToSpeech to :: forall x. Rep (Output TextToSpeech) x -> Output TextToSpeech Generic, Maybe (Output TextToSpeech) Value -> Parser [Output TextToSpeech] Value -> Parser (Output TextToSpeech) (Value -> Parser (Output TextToSpeech)) -> (Value -> Parser [Output TextToSpeech]) -> Maybe (Output TextToSpeech) -> FromJSON (Output TextToSpeech) forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> Maybe a -> FromJSON a $cparseJSON :: Value -> Parser (Output TextToSpeech) parseJSON :: Value -> Parser (Output TextToSpeech) $cparseJSONList :: Value -> Parser [Output TextToSpeech] parseJSONList :: Value -> Parser [Output TextToSpeech] $comittedField :: Maybe (Output TextToSpeech) omittedField :: Maybe (Output TextToSpeech) A.FromJSON, [Output TextToSpeech] -> Value [Output TextToSpeech] -> Encoding Output TextToSpeech -> Bool Output TextToSpeech -> Value Output TextToSpeech -> Encoding (Output TextToSpeech -> Value) -> (Output TextToSpeech -> Encoding) -> ([Output TextToSpeech] -> Value) -> ([Output TextToSpeech] -> Encoding) -> (Output TextToSpeech -> Bool) -> ToJSON (Output TextToSpeech) forall a. (a -> Value) -> (a -> Encoding) -> ([a] -> Value) -> ([a] -> Encoding) -> (a -> Bool) -> ToJSON a $ctoJSON :: Output TextToSpeech -> Value toJSON :: Output TextToSpeech -> Value $ctoEncoding :: Output TextToSpeech -> Encoding toEncoding :: Output TextToSpeech -> Encoding $ctoJSONList :: [Output TextToSpeech] -> Value toJSONList :: [Output TextToSpeech] -> Value $ctoEncodingList :: [Output TextToSpeech] -> Encoding toEncodingList :: [Output TextToSpeech] -> Encoding $comitField :: Output TextToSpeech -> Bool omitField :: Output TextToSpeech -> Bool A.ToJSON) toolExec :: forall p (m :: * -> *). (MonadIO m, MonadFail m, PersistentBackend p) => TextToSpeech -> Prompt m (Output TextToSpeech) toolExec TextToSpeech args = IO (Output TextToSpeech) -> StateT PromptEnv m (Output TextToSpeech) forall a. IO a -> StateT PromptEnv m a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO (Output TextToSpeech) -> StateT PromptEnv m (Output TextToSpeech)) -> IO (Output TextToSpeech) -> StateT PromptEnv m (Output TextToSpeech) forall a b. (a -> b) -> a -> b $ do AuthClient api_key <- (Text -> AuthClient API.clientAuth (Text -> AuthClient) -> (String -> Text) -> String -> AuthClient forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> Text T.pack) (String -> AuthClient) -> IO String -> IO AuthClient forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (String -> IO String getEnv String "OPENAI_API_KEY") BaseUrl url <- String -> IO BaseUrl forall (m :: * -> *). MonadThrow m => String -> m BaseUrl parseBaseUrl String "https://api.openai.com/v1/" Manager manager <- ManagerSettings -> IO Manager newManager ManagerSettings tlsManagerSettings let API.OpenAIBackend {AuthClient -> OpenAIClient ListModelsResponse AuthClient -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> OpenAIClient ListAssistantsResponse AuthClient -> Maybe Text -> OpenAIClient ListFilesResponse AuthClient -> Maybe Text -> Maybe Int -> OpenAIClient ListPaginatedFineTuningJobsResponse AuthClient -> Text -> OpenAIClient Text AuthClient -> Text -> OpenAIClient ThreadObject AuthClient -> Text -> OpenAIClient OpenAIFile AuthClient -> Text -> OpenAIClient Model AuthClient -> Text -> OpenAIClient FineTuningJob AuthClient -> Text -> OpenAIClient DeleteThreadResponse AuthClient -> Text -> OpenAIClient DeleteModelResponse AuthClient -> Text -> OpenAIClient DeleteFileResponse AuthClient -> Text -> OpenAIClient DeleteAssistantResponse AuthClient -> Text -> OpenAIClient AssistantObject AuthClient -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> OpenAIClient ListRunsResponse AuthClient -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> OpenAIClient ListMessagesResponse AuthClient -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> OpenAIClient ListAssistantFilesResponse AuthClient -> Text -> Maybe Text -> Maybe Int -> OpenAIClient ListFineTuningJobEventsResponse AuthClient -> Text -> Text -> OpenAIClient RunObject AuthClient -> Text -> Text -> OpenAIClient MessageObject AuthClient -> Text -> Text -> OpenAIClient DeleteAssistantFileResponse AuthClient -> Text -> Text -> OpenAIClient AssistantFileObject AuthClient -> Text -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> OpenAIClient ListRunStepsResponse AuthClient -> Text -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> OpenAIClient ListMessageFilesResponse AuthClient -> Text -> Text -> Text -> OpenAIClient RunStepObject AuthClient -> Text -> Text -> Text -> OpenAIClient MessageFileObject AuthClient -> Text -> Text -> SubmitToolOutputsRunRequest -> OpenAIClient RunObject AuthClient -> Text -> Text -> ModifyRunRequest -> OpenAIClient RunObject AuthClient -> Text -> Text -> ModifyMessageRequest -> OpenAIClient MessageObject AuthClient -> Text -> ModifyThreadRequest -> OpenAIClient ThreadObject AuthClient -> Text -> ModifyAssistantRequest -> OpenAIClient AssistantObject AuthClient -> Text -> CreateRunRequest -> OpenAIClient RunObject AuthClient -> Text -> CreateMessageRequest -> OpenAIClient MessageObject AuthClient -> Text -> CreateAssistantFileRequest -> OpenAIClient AssistantFileObject AuthClient -> CreateThreadRequest -> OpenAIClient ThreadObject AuthClient -> CreateThreadAndRunRequest -> OpenAIClient RunObject AuthClient -> CreateSpeechRequest -> OpenAIClient ByteString AuthClient -> CreateModerationRequest -> OpenAIClient CreateModerationResponse AuthClient -> CreateImageRequest -> OpenAIClient ImagesResponse AuthClient -> CreateFineTuningJobRequest -> OpenAIClient FineTuningJob AuthClient -> CreateEmbeddingRequest -> OpenAIClient CreateEmbeddingResponse AuthClient -> CreateCompletionRequest -> OpenAIClient CreateCompletionResponse AuthClient -> CreateChatCompletionRequest -> OpenAIClient CreateChatCompletionResponse AuthClient -> CreateAssistantRequest -> OpenAIClient AssistantObject AuthClient -> FormCreateFile -> OpenAIClient OpenAIFile AuthClient -> FormCreateImageEdit -> OpenAIClient ImagesResponse AuthClient -> FormCreateImageVariation -> OpenAIClient ImagesResponse AuthClient -> FormCreateTranscription -> OpenAIClient CreateTranscription200Response AuthClient -> FormCreateTranslation -> OpenAIClient CreateTranslation200Response cancelRun :: AuthClient -> Text -> Text -> OpenAIClient RunObject createAssistant :: AuthClient -> CreateAssistantRequest -> OpenAIClient AssistantObject createAssistantFile :: AuthClient -> Text -> CreateAssistantFileRequest -> OpenAIClient AssistantFileObject createMessage :: AuthClient -> Text -> CreateMessageRequest -> OpenAIClient MessageObject createRun :: AuthClient -> Text -> CreateRunRequest -> OpenAIClient RunObject createThread :: AuthClient -> CreateThreadRequest -> OpenAIClient ThreadObject createThreadAndRun :: AuthClient -> CreateThreadAndRunRequest -> OpenAIClient RunObject deleteAssistant :: AuthClient -> Text -> OpenAIClient DeleteAssistantResponse deleteAssistantFile :: AuthClient -> Text -> Text -> OpenAIClient DeleteAssistantFileResponse deleteThread :: AuthClient -> Text -> OpenAIClient DeleteThreadResponse getAssistant :: AuthClient -> Text -> OpenAIClient AssistantObject getAssistantFile :: AuthClient -> Text -> Text -> OpenAIClient AssistantFileObject getMessage :: AuthClient -> Text -> Text -> OpenAIClient MessageObject getMessageFile :: AuthClient -> Text -> Text -> Text -> OpenAIClient MessageFileObject getRun :: AuthClient -> Text -> Text -> OpenAIClient RunObject getRunStep :: AuthClient -> Text -> Text -> Text -> OpenAIClient RunStepObject getThread :: AuthClient -> Text -> OpenAIClient ThreadObject listAssistantFiles :: AuthClient -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> OpenAIClient ListAssistantFilesResponse listAssistants :: AuthClient -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> OpenAIClient ListAssistantsResponse listMessageFiles :: AuthClient -> Text -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> OpenAIClient ListMessageFilesResponse listMessages :: AuthClient -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> OpenAIClient ListMessagesResponse listRunSteps :: AuthClient -> Text -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> OpenAIClient ListRunStepsResponse listRuns :: AuthClient -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> OpenAIClient ListRunsResponse modifyAssistant :: AuthClient -> Text -> ModifyAssistantRequest -> OpenAIClient AssistantObject modifyMessage :: AuthClient -> Text -> Text -> ModifyMessageRequest -> OpenAIClient MessageObject modifyRun :: AuthClient -> Text -> Text -> ModifyRunRequest -> OpenAIClient RunObject modifyThread :: AuthClient -> Text -> ModifyThreadRequest -> OpenAIClient ThreadObject submitToolOuputsToRun :: AuthClient -> Text -> Text -> SubmitToolOutputsRunRequest -> OpenAIClient RunObject createSpeech :: AuthClient -> CreateSpeechRequest -> OpenAIClient ByteString createTranscription :: AuthClient -> FormCreateTranscription -> OpenAIClient CreateTranscription200Response createTranslation :: AuthClient -> FormCreateTranslation -> OpenAIClient CreateTranslation200Response createChatCompletion :: AuthClient -> CreateChatCompletionRequest -> OpenAIClient CreateChatCompletionResponse createCompletion :: AuthClient -> CreateCompletionRequest -> OpenAIClient CreateCompletionResponse createEmbedding :: AuthClient -> CreateEmbeddingRequest -> OpenAIClient CreateEmbeddingResponse createFile :: AuthClient -> FormCreateFile -> OpenAIClient OpenAIFile deleteFile :: AuthClient -> Text -> OpenAIClient DeleteFileResponse downloadFile :: AuthClient -> Text -> OpenAIClient Text listFiles :: AuthClient -> Maybe Text -> OpenAIClient ListFilesResponse retrieveFile :: AuthClient -> Text -> OpenAIClient OpenAIFile cancelFineTuningJob :: AuthClient -> Text -> OpenAIClient FineTuningJob createFineTuningJob :: AuthClient -> CreateFineTuningJobRequest -> OpenAIClient FineTuningJob listFineTuningEvents :: AuthClient -> Text -> Maybe Text -> Maybe Int -> OpenAIClient ListFineTuningJobEventsResponse listPaginatedFineTuningJobs :: AuthClient -> Maybe Text -> Maybe Int -> OpenAIClient ListPaginatedFineTuningJobsResponse retrieveFineTuningJob :: AuthClient -> Text -> OpenAIClient FineTuningJob createImage :: AuthClient -> CreateImageRequest -> OpenAIClient ImagesResponse createImageEdit :: AuthClient -> FormCreateImageEdit -> OpenAIClient ImagesResponse createImageVariation :: AuthClient -> FormCreateImageVariation -> OpenAIClient ImagesResponse deleteModel :: AuthClient -> Text -> OpenAIClient DeleteModelResponse listModels :: AuthClient -> OpenAIClient ListModelsResponse retrieveModel :: AuthClient -> Text -> OpenAIClient Model createModeration :: AuthClient -> CreateModerationRequest -> OpenAIClient CreateModerationResponse $sel:cancelRun:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Text -> m RunObject $sel:createAssistant:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> CreateAssistantRequest -> m AssistantObject $sel:createAssistantFile:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> CreateAssistantFileRequest -> m AssistantFileObject $sel:createMessage:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> CreateMessageRequest -> m MessageObject $sel:createRun:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> CreateRunRequest -> m RunObject $sel:createThread:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> CreateThreadRequest -> m ThreadObject $sel:createThreadAndRun:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> CreateThreadAndRunRequest -> m RunObject $sel:deleteAssistant:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> m DeleteAssistantResponse $sel:deleteAssistantFile:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Text -> m DeleteAssistantFileResponse $sel:deleteThread:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> m DeleteThreadResponse $sel:getAssistant:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> m AssistantObject $sel:getAssistantFile:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Text -> m AssistantFileObject $sel:getMessage:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Text -> m MessageObject $sel:getMessageFile:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Text -> Text -> m MessageFileObject $sel:getRun:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Text -> m RunObject $sel:getRunStep:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Text -> Text -> m RunStepObject $sel:getThread:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> m ThreadObject $sel:listAssistantFiles:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> m ListAssistantFilesResponse $sel:listAssistants:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> m ListAssistantsResponse $sel:listMessageFiles:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> m ListMessageFilesResponse $sel:listMessages:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> m ListMessagesResponse $sel:listRunSteps:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> m ListRunStepsResponse $sel:listRuns:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Maybe Int -> Maybe Text -> Maybe Text -> Maybe Text -> m ListRunsResponse $sel:modifyAssistant:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> ModifyAssistantRequest -> m AssistantObject $sel:modifyMessage:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Text -> ModifyMessageRequest -> m MessageObject $sel:modifyRun:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Text -> ModifyRunRequest -> m RunObject $sel:modifyThread:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> ModifyThreadRequest -> m ThreadObject $sel:submitToolOuputsToRun:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Text -> SubmitToolOutputsRunRequest -> m RunObject $sel:createSpeech:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> CreateSpeechRequest -> m ByteString $sel:createTranscription:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> FormCreateTranscription -> m CreateTranscription200Response $sel:createTranslation:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> FormCreateTranslation -> m CreateTranslation200Response $sel:createChatCompletion:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> CreateChatCompletionRequest -> m CreateChatCompletionResponse $sel:createCompletion:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> CreateCompletionRequest -> m CreateCompletionResponse $sel:createEmbedding:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> CreateEmbeddingRequest -> m CreateEmbeddingResponse $sel:createFile:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> FormCreateFile -> m OpenAIFile $sel:deleteFile:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> m DeleteFileResponse $sel:downloadFile:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> m Text $sel:listFiles:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Maybe Text -> m ListFilesResponse $sel:retrieveFile:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> m OpenAIFile $sel:cancelFineTuningJob:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> m FineTuningJob $sel:createFineTuningJob:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> CreateFineTuningJobRequest -> m FineTuningJob $sel:listFineTuningEvents:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> Maybe Text -> Maybe Int -> m ListFineTuningJobEventsResponse $sel:listPaginatedFineTuningJobs:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Maybe Text -> Maybe Int -> m ListPaginatedFineTuningJobsResponse $sel:retrieveFineTuningJob:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> m FineTuningJob $sel:createImage:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> CreateImageRequest -> m ImagesResponse $sel:createImageEdit:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> FormCreateImageEdit -> m ImagesResponse $sel:createImageVariation:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> FormCreateImageVariation -> m ImagesResponse $sel:deleteModel:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> m DeleteModelResponse $sel:listModels:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> m ListModelsResponse $sel:retrieveModel:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> Text -> m Model $sel:createModeration:OpenAIBackend :: forall a (m :: * -> *). OpenAIBackend a m -> a -> CreateModerationRequest -> m CreateModerationResponse ..} = OpenAIBackend AuthClient OpenAIClient API.createOpenAIClient let request :: CreateSpeechRequest request = API.CreateSpeechRequest { createSpeechRequestModel :: CreateSpeechRequestModel API.createSpeechRequestModel = Text -> CreateSpeechRequestModel API.CreateSpeechRequestModel Text "tts-1", createSpeechRequestInput :: Text API.createSpeechRequestInput = (TextToSpeech -> Text script TextToSpeech args :: T.Text), createSpeechRequestVoice :: Text API.createSpeechRequestVoice = Text "alloy", createSpeechRequestResponseUnderscoreformat :: Maybe Text API.createSpeechRequestResponseUnderscoreformat = Text -> Maybe Text forall a. a -> Maybe a Just Text "mp3", createSpeechRequestSpeed :: Maybe Double API.createSpeechRequestSpeed = Maybe Double forall a. Maybe a Nothing } ByteString res <- ClientEnv -> OpenAIClient ByteString -> IO ByteString forall (m :: * -> *) a. (MonadIO m, MonadThrow m) => ClientEnv -> OpenAIClient a -> m a API.callOpenAI (Manager -> BaseUrl -> ClientEnv mkClientEnv Manager manager BaseUrl url) (OpenAIClient ByteString -> IO ByteString) -> OpenAIClient ByteString -> IO ByteString forall a b. (a -> b) -> a -> b $ AuthClient -> CreateSpeechRequest -> OpenAIClient ByteString createSpeech AuthClient api_key CreateSpeechRequest request String -> ByteString -> IO () BS.writeFile String "out.mp3" ByteString res (ExitCode code, String stdout, String stderr) <- CreateProcess -> String -> IO (ExitCode, String, String) readCreateProcessWithExitCode (String -> CreateProcess shell (String -> CreateProcess) -> String -> CreateProcess forall a b. (a -> b) -> a -> b $ String "afplay " String -> ShowS forall a. Semigroup a => a -> a -> a <> String "out.mp3") String "" let code' :: Int code' = case ExitCode code of ExitCode ExitSuccess -> Int 0 ExitFailure Int v -> Int v Output TextToSpeech -> IO (Output TextToSpeech) forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return (Output TextToSpeech -> IO (Output TextToSpeech)) -> Output TextToSpeech -> IO (Output TextToSpeech) forall a b. (a -> b) -> a -> b $ Int -> String -> String -> Output TextToSpeech TextToSpeechOutput Int code' String stdout String stderr