v1 chat (ADR-027) uses a simple HTMX POST-and-render: the answer appears only
after the model call fully completes. The spec explicitly allowed "HTMX streaming
if clean" and we chose the simpler path for v1.
Problem
On a slow/cold model (e.g. the gemma fallback's ~37s cold-load, ADR-022), the
user stares at the "thinking…" indicator with no partial output. Streaming would
make the wait feel responsive.
Proposal
Stream tokens via SSE (or chunked HTMX) into the chat panel as they arrive.
Reuse the existing gateway client's streaming mode if available; otherwise this
needs an llm streaming method (the copied package — change tapir's copy per
ADR-004, do not lift upstream).
Keep the no-JS fallback: without JS the form still POSTs and renders the full
answer.
Scope
UX polish, not correctness. Deferred from v1. Reassess if chat sees real use and
the wait is a felt friction.
## Context
v1 chat (ADR-027) uses a simple HTMX POST-and-render: the answer appears only
after the model call fully completes. The spec explicitly allowed "HTMX streaming
if clean" and we chose the simpler path for v1.
## Problem
On a slow/cold model (e.g. the gemma fallback's ~37s cold-load, ADR-022), the
user stares at the "thinking…" indicator with no partial output. Streaming would
make the wait feel responsive.
## Proposal
- Stream tokens via SSE (or chunked HTMX) into the chat panel as they arrive.
- Reuse the existing gateway client's streaming mode if available; otherwise this
needs an `llm` streaming method (the copied package — change tapir's copy per
ADR-004, do not lift upstream).
- Keep the no-JS fallback: without JS the form still POSTs and renders the full
answer.
## Scope
UX polish, not correctness. Deferred from v1. Reassess if chat sees real use and
the wait is a felt friction.
Source: ADR-027 §2, `internal/web/chat.go`, `internal/adapters/llm`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Context
v1 chat (ADR-027) uses a simple HTMX POST-and-render: the answer appears only
after the model call fully completes. The spec explicitly allowed "HTMX streaming
if clean" and we chose the simpler path for v1.
Problem
On a slow/cold model (e.g. the gemma fallback's ~37s cold-load, ADR-022), the
user stares at the "thinking…" indicator with no partial output. Streaming would
make the wait feel responsive.
Proposal
needs an
llmstreaming method (the copied package — change tapir's copy perADR-004, do not lift upstream).
answer.
Scope
UX polish, not correctness. Deferred from v1. Reassess if chat sees real use and
the wait is a felt friction.
Source: ADR-027 §2,
internal/web/chat.go,internal/adapters/llm.