Skip to main content

examples/supervised_agent.exs

Code.require_file("support.exs", __DIR__)

alias BeamWeaver.Core.ChatModel
alias BeamWeaver.Core.Message
alias BeamWeaver.Examples.Support
alias BeamWeaver.Runtime.Agent
alias BeamWeaver.Tracing

Tracing.reset()

model = Support.model()

{:ok, agent} = Agent.start_child(id: "supervised_agent_example")
:ok = Agent.subscribe(agent)
{:ok, _run} = Tracing.start_run("supervised agent example")

{:ok, work} =
  Agent.start_model_call(
    agent,
    [Message.user("Say hello in one short sentence.")],
    fn messages -> ChatModel.invoke(model, messages) end,
    timeout: 30_000
  )

receive do
  {:beam_weaver_agent, _agent_id, {:completed, work_id, response}} when work_id == work.id ->
    IO.puts(Message.text(response))

  {:beam_weaver_agent, _agent_id, {:failed, work_id, error}} when work_id == work.id ->
    raise "model call failed: #{inspect(error)}"
after
  35_000 ->
    raise "model call timed out"
end