alias BeamWeaver.Core.Messages
alias BeamWeaver.Stream
alias BeamWeaver.Stream.Envelope
alias BeamWeaver.Stream.Events
alias BeamWeaver.Stream.Finalize
events = [
%Envelope{
event: %Events.MessageChunk{
chunk:
Messages.ai_chunk("",
id: "msg-1",
tool_call_chunks: [
Messages.tool_call_chunk(
id: "call_weather",
index: 0,
name: "get_weather",
args: ~s({"city")
)
]
)
},
run_id: "run-1",
node: "llm"
},
%Envelope{
event: %Events.MessageChunk{
chunk:
Messages.ai_chunk("",
id: "msg-1",
tool_call_chunks: [
Messages.tool_call_chunk(
id: "call_weather",
index: 0,
args: ~s(: "Nicosia"})
)
]
)
},
run_id: "run-1",
node: "llm"
}
]
for %Envelope{event: %Events.MessageChunk{chunk: chunk}} <- events,
tool_chunk <- chunk.tool_call_chunks do
IO.inspect(
%{id: tool_chunk.id, name: tool_chunk.name, args_delta: tool_chunk.args},
label: "streamed tool-call chunk"
)
end
final_message =
events
|> Enum.map(fn %Envelope{event: %Events.MessageChunk{chunk: chunk}} -> chunk end)
|> Finalize.finalize()
IO.inspect(final_message.tool_calls, label: "reconstructed tool calls")
IO.inspect(Stream.event_mode(hd(events).event), label: "native stream mode")