fix(cron): silent jobs return empty response for delivery skip (#2442)
Fixes #2234 The placeholder '(No response generated)' was overwriting the actual final_response, causing it to be delivered to Discord even when the agent completed work silently via tools. Changes: - Separate logged_response for output template display - Keep final_response clean (empty when agent has no text) - Delivery logic now correctly skips when final_response is empty Test added to verify empty response stays empty for delivery. Co-authored-by: Bartok9 <bartokmagic@proton.me>
This commit is contained in:
parent
43bca6d107
commit
c01cfe4f9a
2 changed files with 46 additions and 4 deletions
|
|
@ -412,9 +412,10 @@ def run_job(job: dict) -> tuple[bool, str, str, Optional[str]]:
|
||||||
|
|
||||||
result = agent.run_conversation(prompt)
|
result = agent.run_conversation(prompt)
|
||||||
|
|
||||||
final_response = result.get("final_response", "")
|
final_response = result.get("final_response", "") or ""
|
||||||
if not final_response:
|
# Use a separate variable for log display; keep final_response clean
|
||||||
final_response = "(No response generated)"
|
# for delivery logic (empty response = no delivery).
|
||||||
|
logged_response = final_response if final_response else "(No response generated)"
|
||||||
|
|
||||||
output = f"""# Cron Job: {job_name}
|
output = f"""# Cron Job: {job_name}
|
||||||
|
|
||||||
|
|
@ -428,7 +429,7 @@ def run_job(job: dict) -> tuple[bool, str, str, Optional[str]]:
|
||||||
|
|
||||||
## Response
|
## Response
|
||||||
|
|
||||||
{final_response}
|
{logged_response}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
logger.info("Job '%s' completed successfully", job_name)
|
logger.info("Job '%s' completed successfully", job_name)
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,47 @@ class TestRunJobSessionPersistence:
|
||||||
assert kwargs["session_id"].startswith("cron_test-job_")
|
assert kwargs["session_id"].startswith("cron_test-job_")
|
||||||
fake_db.close.assert_called_once()
|
fake_db.close.assert_called_once()
|
||||||
|
|
||||||
|
def test_run_job_empty_response_returns_empty_not_placeholder(self, tmp_path):
|
||||||
|
"""Empty final_response should stay empty for delivery logic (issue #2234).
|
||||||
|
|
||||||
|
The placeholder '(No response generated)' should only appear in the
|
||||||
|
output log, not in the returned final_response that's used for delivery.
|
||||||
|
"""
|
||||||
|
job = {
|
||||||
|
"id": "silent-job",
|
||||||
|
"name": "silent test",
|
||||||
|
"prompt": "do work via tools only",
|
||||||
|
}
|
||||||
|
fake_db = MagicMock()
|
||||||
|
|
||||||
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
||||||
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
||||||
|
patch("dotenv.load_dotenv"), \
|
||||||
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
||||||
|
patch(
|
||||||
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
||||||
|
return_value={
|
||||||
|
"api_key": "test-key",
|
||||||
|
"base_url": "https://example.invalid/v1",
|
||||||
|
"provider": "openrouter",
|
||||||
|
"api_mode": "chat_completions",
|
||||||
|
},
|
||||||
|
), \
|
||||||
|
patch("run_agent.AIAgent") as mock_agent_cls:
|
||||||
|
mock_agent = MagicMock()
|
||||||
|
# Agent did work via tools but returned no text
|
||||||
|
mock_agent.run_conversation.return_value = {"final_response": ""}
|
||||||
|
mock_agent_cls.return_value = mock_agent
|
||||||
|
|
||||||
|
success, output, final_response, error = run_job(job)
|
||||||
|
|
||||||
|
assert success is True
|
||||||
|
assert error is None
|
||||||
|
# final_response should be empty for delivery logic to skip
|
||||||
|
assert final_response == ""
|
||||||
|
# But the output log should show the placeholder
|
||||||
|
assert "(No response generated)" in output
|
||||||
|
|
||||||
def test_run_job_sets_auto_delivery_env_from_dotenv_home_channel(self, tmp_path, monkeypatch):
|
def test_run_job_sets_auto_delivery_env_from_dotenv_home_channel(self, tmp_path, monkeypatch):
|
||||||
job = {
|
job = {
|
||||||
"id": "test-job",
|
"id": "test-job",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue