packages feed

llm-simple-0.3.0.0: src/LLM/Agent/Events.hs

module LLM.Agent.Events
  ( emitEvent,
    noEventObserver,
  )
where

import Control.Monad (void)
import LLM.Agent.Types
  ( EventObserver,
    GenerateEvent (..),
    GenerateEventDetail,
    RuntimeArgs (..),
  )
import LLM.Core.Utils (trySync)

-- | Emit a lifecycle event, attaching 'rtGenerationId' from runtime.
-- Synchronous observer exceptions are swallowed so observers cannot abort
-- the loop; asynchronous ones (timeout, cancellation) propagate.
emitEvent :: RuntimeArgs -> GenerateEventDetail -> IO ()
emitEvent rt detail =
  void (trySync (rt.rtOnEvent (GenerateEvent rt.rtGenerationId detail)))

noEventObserver :: EventObserver
noEventObserver _ = pure ()