From f9714161f06ffcecc453c9194beecd55dc4980d1 Mon Sep 17 00:00:00 2001 From: "Mil Wang (from Dev Box)" Date: Tue, 14 Apr 2026 09:17:52 +0800 Subject: [PATCH] fix: stop leaking '(No response generated)' placeholder to users and cron targets When the LLM returns an empty completion, gateway/run.py replaced final_response with the literal string '(No response generated)'. This defeated cron/scheduler.py's empty-response skip guard, causing the placeholder to be delivered to home channels. Changes: - gateway/run.py: return empty string instead of placeholder when there is no error and no response content - cron/scheduler.py: defensively strip the placeholder text in case any upstream path still produces it Fixes NousResearch/hermes-agent#9270 --- cron/scheduler.py | 3 +++ gateway/run.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/cron/scheduler.py b/cron/scheduler.py index 78a20cf7..4bd5724a 100644 --- a/cron/scheduler.py +++ b/cron/scheduler.py @@ -837,6 +837,9 @@ def run_job(job: dict) -> tuple[bool, str, str, Optional[str]]: ) final_response = result.get("final_response", "") or "" + # Strip leaked placeholder text that upstream may inject on empty completions. + if final_response.strip() == "(No response generated)": + final_response = "" # Use a separate variable for log display; keep final_response clean # for delivery logic (empty response = no delivery). logged_response = final_response if final_response else "(No response generated)" diff --git a/gateway/run.py b/gateway/run.py index 5682d003..b7e44d91 100644 --- a/gateway/run.py +++ b/gateway/run.py @@ -8886,7 +8886,7 @@ class GatewayRunner: _resolved_model = getattr(_agent, "model", None) if _agent else None if not final_response: - error_msg = f"⚠️ {result['error']}" if result.get("error") else "(No response generated)" + error_msg = f"⚠️ {result['error']}" if result.get("error") else "" return { "final_response": error_msg, "messages": result.get("messages", []),