Fix writing assist: disable thinking mode, drop stuck-buffer 409

- stream_chat: add think=False parameter passed through to Ollama payload.
  qwen3 models have thinking enabled by default; without this flag the model
  spends minutes generating internal thinking tokens that stream_chat silently
  discards, leaving the frontend spinner blank until the SSE connection times
  out and the widget disappears.

- create_assist_buffer: orphan (overwrite) a still-running buffer instead of
  raising. The old asyncio task holds a direct reference and completes
  harmlessly against the stale buffer. New requests always win.

- assist_route: remove the 409 guard that blocked new requests when a previous
  generation got stuck. create_assist_buffer now handles this transparently.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-05 13:28:59 -05:00
parent 9bf047ec45
commit b11a92f32d
3 changed files with 11 additions and 8 deletions
+8 -2
View File
@@ -108,12 +108,18 @@ async def stream_chat(
messages: list[dict],
model: str,
options: dict | None = None,
think: bool = False,
) -> AsyncGenerator[str, None]:
"""Stream chat completion from Ollama, yielding content chunks."""
"""Stream chat completion from Ollama, yielding content chunks.
Set think=False (default) to disable chain-of-thought on qwen3+ models.
Thinking tokens are silently discarded anyway, but disabling avoids the
multi-minute delay before the first content token arrives.
"""
merged_options = {"num_ctx": Config.OLLAMA_NUM_CTX}
if options:
merged_options.update(options)
payload: dict = {"model": model, "messages": messages, "stream": True, "options": merged_options}
payload: dict = {"model": model, "messages": messages, "stream": True, "options": merged_options, "think": think}
# read=None: no per-chunk timeout — Ollama may pause for any duration while
# processing a large input context before the first token arrives.
async with httpx.AsyncClient(timeout=httpx.Timeout(connect=30.0, read=None, write=None, pool=30.0)) as client: