Stream Events

Republic provides two streaming modes:

  • stream(...): text deltas only.
  • stream_events(...): full events including text, tools, usage, and final.

Text Stream

from republic import LLM

llm = LLM(model="openrouter:openai/gpt-4o-mini", api_key="<API_KEY>")
stream = llm.stream("Give me three words.")
text = "".join(chunk for chunk in stream)

print(text)
print(stream.error)
print(stream.usage)

Event Stream

events = llm.stream_events(
    "Plan deployment and call a tool if needed.",
    tools=[],
)

for event in events:
    if event.kind == "text":
        print(event.data["delta"], end="")
    elif event.kind == "tool_call":
        print("\ncall=", event.data)
    elif event.kind == "tool_result":
        print("\nresult=", event.data)
    elif event.kind == "usage":
        print("\nusage=", event.data)
    elif event.kind == "final":
        print("\nfinal=", event.data)

The final event contains text/tool_calls/tool_results/usage/ok, which is a good fit for final UI state or audit persistence.