packages feed

openai-2.2.0: examples/responses-example/Main.hs

{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns        #-}
{-# LANGUAGE OverloadedLists       #-}
{-# LANGUAGE OverloadedStrings     #-}

module Main where

import Data.Foldable (toList)
import System.Environment (getEnv)

import qualified Data.Text as Text
import qualified Data.Text.IO as TextIO
import qualified OpenAI.V1 as V1
import qualified OpenAI.V1.Responses as Responses

main :: IO ()
main = do
    key <- Text.pack <$> getEnv "OPENAI_KEY"
    env <- V1.getClientEnv "https://api.openai.com"

    let V1.Methods{ createResponse } = V1.makeMethods env key Nothing Nothing

    let req = Responses._CreateResponse
            { Responses.model = "gpt-5"
            , Responses.input = Just (Responses.Input
                [ Responses.Item_Input_Message
                    { Responses.role = Responses.User
                    , Responses.content = [ Responses.Input_Text{ Responses.text = "Tell me a three sentence bedtime story about a unicorn." } ]
                    , Responses.status = Nothing
                    }
                ])
            , Responses.reasoning = Just Responses._Reasoning
                { Responses.effort = Just Responses.ReasoningEffort_Minimal }
            }

    resp <- createResponse req

    let texts = collectText resp
    mapM_ TextIO.putStrLn texts

collectText :: Responses.ResponseObject -> [Text.Text]
collectText Responses.ResponseObject{ Responses.output } = do
    Responses.Item_OutputMessage{ Responses.message_content } <- toList output
    Responses.Output_Text{ Responses.text } <- toList message_content
    return text