{"repo":"NousResearch/hermes-agent","public_id":"66429","display_label":"Handling empty assistant messages and tool edge cases","summary":"These issues and PRs address problems with empty assistant messages being sent to the API and related edge cases involving tool call IDs and orphaned tool response loops in agent runs.","subsystem":"agent","counts":{"members":5,"open_issues":1,"open_issues_distinct":1,"open_prs":0,"closed_issues":0,"merged_prs":2,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":88324,"merged_at":"2026-08-17T10:25:08+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-08-17T10:25:08+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.4},"fix_edges":[{"issue_number":64335,"pr_number":88324,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-17T10:25:08+00:00"},{"issue_number":66429,"pr_number":73071,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-07-28T03:27:57+00:00"},{"issue_number":66429,"pr_number":88324,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-17T10:25:08+00:00"},{"issue_number":70724,"pr_number":88324,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-08-17T10:25:08+00:00"},{"issue_number":70745,"pr_number":88324,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-17T10:25:08+00:00"}],"members":[{"kind":"issue","number":66429,"title":"[Bug]: Hermes empty assistant messages","url":null,"state":"open"},{"kind":"pr","number":66434,"title":"fix: filter empty assistant messages before sending to API (#66429)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"725c7ba534","number":0},{"kind":"pr","value":"#73071","number":73071},{"kind":"pr","value":"#66429","number":66429}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":70734,"title":"fix(agent): keep tool results when a server reuses one tool_call_id","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"df68cc1c1ab6","number":0},{"kind":"pr","value":"#88324","number":88324}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":73071,"title":"refactor: single owner for empty-content wire repair (salvages #71439)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/agent_runtime_helpers.py","agent/chat_completion_helpers.py","agent/conversation_loop.py","agent/error_classifier.py","contributors/emails/[redacted:email]","tests/agent/test_error_classifier.py","tests/run_agent/test_message_sequence_repair.py","tests/run_agent/test_partial_stream_finish_reason.py","tests/run_agent/test_run_agent.py","tests/run_agent/test_streaming.py"]},{"kind":"pr","number":88324,"title":"fix(agent): keep tool results when a server reuses one tool_call_id (#70724)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/agent_runtime_helpers.py","tests/run_agent/test_message_sequence_repair.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}