{-# 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