In this livestream we walk through a working Forge LLMs app that rewrites a full blog draft in your own voice and streams the result into the UI while it is still being written: a concrete pattern for running long LLM jobs on Forge without hitting the invocation timeout wall.
We will go through its components: an async queue passing work to a long-running consumer, stream() plus Forge Realtime pushing tokens to the frontend and dynamic model resolution via list() instead of a hard-coded model name.
You'll learn how to:
Wire up a queue, a consumer (also known as Async Events) and Forge Realtime so a long LLM job streams live into the UI instead of timing out.
Resolve the model at runtime with list() and a preference order (defaulting to claude-opus-5), cache it and fail open, so a model deprecation never breaks your app
Classify LLM failures into rate_limit, moderation, transient, validation and unknown, retry only what is retryable with bounded backoff, and keep the raw detail in Forge logs
Record tokens, model as custom metrics and in Forge SQL, then display per-model usage details and running totals in the UI
Who it is for: developers building on Forge who want to use the LLMs API for real work, not just a demo. As always, everyone is welcome.
Atlassian
Senior Developer Advocate
Atlassian
Principal Developer Advocate