From bbed304536a68830d9fe2f8f5b760be33bcaac96 Mon Sep 17 00:00:00 2001 From: salch-cred Date: Sun, 30 Aug 2026 12:27:43 +0530 Subject: [PATCH] fix(agent): exempt :cloud GLM models from stop->length truncation rewrite Ollama cloud models (model name contains ':cloud') run generation on Ollama's hosted server; the local 11434 endpoint is only a transparent proxy that forwards finish_reason faithfully. _is_ollama_glm_backend() was matching these models because the proxy listens on the same port as local Ollama, causing _should_treat_stop_as_truncated() to rewrite a correct finish_reason='stop' into 'length'. The 4-attempt continuation loop then injects a synthetic user nudge that reasoning-capable GLM models spend their output budget deliberating over, producing unpunctuated tails that re-trigger _has_natural_response_ending() rejection -- a self-reinforcing loop that always exhausts retries. Fix: add an early return in _is_ollama_glm_backend when the model name contains ':cloud'. Local GLM inference (no ':cloud') is still caught by the existing port/URL/provider checks. Fixes #98406 --- run_agent.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/run_agent.py b/run_agent.py index dd2641e782..8d8789657e 100644 --- a/run_agent.py +++ b/run_agent.py @@ -1886,17 +1886,23 @@ class AIAgent: report finish_reason correctly and were the source of #13971's false-positive truncation continuations. - Also excludes Ollama Cloud (ollama.com) — the hosted service - correctly reports finish_reason and is not affected by the local - Ollama stop-reason bug (GH-72316). + Also excludes Ollama Cloud — the hosted service correctly reports + finish_reason and is not affected by the local Ollama stop-reason + bug (GH-72316). Two signatures identify it: the ``ollama.com`` host + (provider ``ollama-cloud``) and the ``:cloud`` model suffix (cloud + generation proxied through a local 11434 endpoint, #98406). Applying + the stop→length rewrite to them manufactures false truncations and + causes the continuation nudge to consume the model's output budget + on the next retry, making further false-positives more likely. """ model_lower = (self.model or "").lower() provider_lower = (self.provider or "").lower() if "glm" not in model_lower and provider_lower != "zai": return False base = self._base_url_lower - # Exclude Ollama Cloud (ollama.com) — hosted service, not local Ollama - if "ollama.com" in base: + # Ollama Cloud (hosted service or :cloud proxy) forwards finish_reason + # faithfully — do not rewrite. + if "ollama.com" in base or ":cloud" in model_lower: return False if "ollama" in base or ":11434" in base: return True