fix: avoid replaying older long turns
Treat the current live user message as the replay boundary for normal user turns, while keeping user-turn extension for history and consolidation paths that need it. Add regression coverage for the user-triggered long tool-turn case.
This commit is contained in:
@@ -1168,14 +1168,14 @@ class AgentLoop:
|
||||
channel, chat_id, msg.metadata.get("message_id"),
|
||||
msg.metadata, session_key=key,
|
||||
)
|
||||
current_role = "assistant" if is_subagent else "user"
|
||||
_hist_kwargs: dict[str, Any] = {
|
||||
"max_messages": self._max_messages,
|
||||
"max_tokens": self._replay_token_budget(),
|
||||
"include_timestamps": True,
|
||||
"extend_to_user": True,
|
||||
"extend_to_user": is_subagent,
|
||||
}
|
||||
history = session.get_history(**_hist_kwargs)
|
||||
current_role = "assistant" if is_subagent else "user"
|
||||
workspace_scope = self.workspace_scopes.for_message(msg, session.metadata)
|
||||
|
||||
messages = self.context.build_messages(
|
||||
@@ -1448,7 +1448,7 @@ class AgentLoop:
|
||||
"max_messages": self._max_messages,
|
||||
"max_tokens": self._replay_token_budget(),
|
||||
"include_timestamps": True,
|
||||
"extend_to_user": True,
|
||||
"extend_to_user": False,
|
||||
}
|
||||
ctx.history = ctx.session.get_history(**_hist_kwargs)
|
||||
self._runtime_events().record_turn_runtime(
|
||||
|
||||
@@ -282,9 +282,11 @@ def recent_message_start_index(
|
||||
start_idx = max(0, len(messages) - max_messages)
|
||||
if not extend_to_user or len(messages) <= max_messages:
|
||||
return start_idx
|
||||
if any(messages[i].get("role") == "user" for i in range(start_idx, len(messages))):
|
||||
return start_idx
|
||||
|
||||
recovered_user = next(
|
||||
(i for i in range(start_idx, -1, -1) if messages[i].get("role") == "user"),
|
||||
(i for i in range(start_idx - 1, -1, -1) if messages[i].get("role") == "user"),
|
||||
None,
|
||||
)
|
||||
if recovered_user is None:
|
||||
|
||||
Reference in New Issue
Block a user