mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-18 04:41:56 +00:00
fix(gateway): preserve queued follow-up transcript history
Keep the outer history_offset when _run_agent drains queued follow-ups recursively so transcript persistence includes every queued turn in the chain instead of only the last one.
This commit is contained in:
parent
08671d8771
commit
9a815b6c8c
2 changed files with 89 additions and 1 deletions
|
|
@ -1139,6 +1139,38 @@ def _should_clear_resume_pending_after_turn(agent_result: dict) -> bool:
|
|||
return True
|
||||
|
||||
|
||||
def _preserve_queued_followup_history_offset(
|
||||
current_result: dict,
|
||||
followup_result: dict,
|
||||
) -> dict:
|
||||
"""Carry the outer history offset through queued follow-up drains.
|
||||
|
||||
``_process_message_background()`` persists transcript rows only once, after the
|
||||
entire in-band queued-follow-up chain returns. Each recursive ``_run_agent()``
|
||||
call advances ``history_offset`` to the history it received, so without
|
||||
correction the outermost persistence step sees only the *last* queued turn as
|
||||
"new" and silently drops earlier turns from the same drain chain.
|
||||
|
||||
Preserve the earliest (outermost) history offset so the final transcript slice
|
||||
still includes every queued turn that ran during the chain.
|
||||
"""
|
||||
if not isinstance(followup_result, dict):
|
||||
return followup_result
|
||||
if not isinstance(current_result, dict):
|
||||
return followup_result
|
||||
|
||||
current_offset = current_result.get("history_offset")
|
||||
followup_offset = followup_result.get("history_offset")
|
||||
if not isinstance(current_offset, int):
|
||||
return followup_result
|
||||
if isinstance(followup_offset, int) and followup_offset <= current_offset:
|
||||
return followup_result
|
||||
|
||||
merged = dict(followup_result)
|
||||
merged["history_offset"] = current_offset
|
||||
return merged
|
||||
|
||||
|
||||
class GatewayRunner:
|
||||
"""
|
||||
Main gateway controller.
|
||||
|
|
@ -16042,7 +16074,7 @@ class GatewayRunner:
|
|||
except Exception:
|
||||
pass
|
||||
|
||||
return await self._run_agent(
|
||||
followup_result = await self._run_agent(
|
||||
message=next_message,
|
||||
context_prompt=context_prompt,
|
||||
history=updated_history,
|
||||
|
|
@ -16054,6 +16086,7 @@ class GatewayRunner:
|
|||
event_message_id=next_message_id,
|
||||
channel_prompt=next_channel_prompt,
|
||||
)
|
||||
return _preserve_queued_followup_history_offset(result, followup_result)
|
||||
finally:
|
||||
# Stop progress sender, interrupt monitor, and notification task
|
||||
if progress_task:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue