packages feed

baikai-openai-0.7.0.0: src/Baikai/Provider/OpenAI/Responses.hs

-- | Native OpenAI Responses provider. Register explicitly alongside the
-- Chat Completions provider for a registry supporting both protocols.
module Baikai.Provider.OpenAI.Responses
  ( register,
    openaiResponsesProvider,
    openaiResponsesStream,
  )
where

import Baikai.Api (Api (OpenAIResponses))
import Baikai.Context (Context)
import Baikai.Evidence qualified as Ev
import Baikai.Model (Model)
import Baikai.Options (Options)
import Baikai.Provider (ApiProvider, apiProvider)
import Baikai.Provider.OpenAI.Responses.Request (describeThinking)
import Baikai.Provider.OpenAI.Responses.Stream (liveResponsesDriver, openaiResponsesStreamWith)
import Baikai.Provider.Registry (registerApiProvider)
import Baikai.Stream.Event (AssistantMessageEvent)
import Control.Lens ((&), (.~))
import Data.Generics.Labels ()
import Streamly.Data.Stream (Stream)

register :: IO ()
register = registerApiProvider openaiResponsesProvider

-- | Completion folds the same event stream, as for other API providers.
openaiResponsesProvider :: ApiProvider
openaiResponsesProvider =
  apiProvider OpenAIResponses openaiResponsesStream
    & #describeThinking .~ describeThinking
    & #strengthCeiling .~ Ev.declaredStrength OpenAIResponses

openaiResponsesStream :: Model -> Context -> Options -> Stream IO AssistantMessageEvent
openaiResponsesStream = openaiResponsesStreamWith liveResponsesDriver