Code.require_file("support.exs", __DIR__)
alias BeamWeaver.Core.Message
alias BeamWeaver.Core.Tool
alias BeamWeaver.Examples.Support
defmodule BeamWeaver.Examples.ReactAgent do
use BeamWeaver.Agent
name("react_agent")
description("Answer questions, calling tools when useful.")
model(Support.model())
system_prompt("You are a helpful assistant. Use the weather tool when asked about the weather.")
tools do
tool(
Tool.from_function!(
name: "weather",
description: "Get the current weather for a city.",
input_schema: %{
"type" => "object",
"properties" => %{"city" => %{"type" => "string"}},
"required" => ["city"]
},
handler: fn %{"city" => city}, _opts -> "Sunny, 25°C in #{city}." end
)
)
end
end
{:ok, %{messages: messages}} =
BeamWeaver.Examples.ReactAgent.invoke(%{messages: [Message.user("What is the weather in Nicosia?")]})
messages |> List.last() |> Message.text() |> IO.puts()