Merge pull request #1098 from NousResearch/hermes/hermes-465f3702
fix: eliminate execute_code progress spam on gateway platforms
This commit is contained in:
commit
def7b84a12
2 changed files with 44 additions and 11 deletions
|
|
@ -3034,6 +3034,8 @@ class GatewayRunner:
|
|||
# Queue for progress messages (thread-safe)
|
||||
progress_queue = queue.Queue() if tool_progress_enabled else None
|
||||
last_tool = [None] # Mutable container for tracking in closure
|
||||
last_progress_msg = [None] # Track last message for dedup
|
||||
repeat_count = [0] # How many times the same message repeated
|
||||
|
||||
def progress_callback(tool_name: str, preview: str = None, args: dict = None):
|
||||
"""Callback invoked by agent when a tool is called."""
|
||||
|
|
@ -3106,6 +3108,18 @@ class GatewayRunner:
|
|||
else:
|
||||
msg = f"{emoji} {tool_name}..."
|
||||
|
||||
# Dedup: collapse consecutive identical progress messages.
|
||||
# Common with execute_code where models iterate with the same
|
||||
# code (same boilerplate imports → identical previews).
|
||||
if msg == last_progress_msg[0]:
|
||||
repeat_count[0] += 1
|
||||
# Update the last line in progress_lines with a counter
|
||||
# via a special "dedup" queue message.
|
||||
progress_queue.put(("__dedup__", msg, repeat_count[0]))
|
||||
return
|
||||
last_progress_msg[0] = msg
|
||||
repeat_count[0] = 0
|
||||
|
||||
progress_queue.put(msg)
|
||||
|
||||
# Background task to send progress messages
|
||||
|
|
@ -3126,8 +3140,17 @@ class GatewayRunner:
|
|||
|
||||
while True:
|
||||
try:
|
||||
msg = progress_queue.get_nowait()
|
||||
progress_lines.append(msg)
|
||||
raw = progress_queue.get_nowait()
|
||||
|
||||
# Handle dedup messages: update last line with repeat counter
|
||||
if isinstance(raw, tuple) and len(raw) == 3 and raw[0] == "__dedup__":
|
||||
_, base_msg, count = raw
|
||||
if progress_lines:
|
||||
progress_lines[-1] = f"{base_msg} (×{count + 1})"
|
||||
msg = progress_lines[-1] if progress_lines else base_msg
|
||||
else:
|
||||
msg = raw
|
||||
progress_lines.append(msg)
|
||||
|
||||
if can_edit and progress_msg_id is not None:
|
||||
# Try to edit the existing progress message
|
||||
|
|
@ -3163,8 +3186,13 @@ class GatewayRunner:
|
|||
# Drain remaining queued messages
|
||||
while not progress_queue.empty():
|
||||
try:
|
||||
msg = progress_queue.get_nowait()
|
||||
progress_lines.append(msg)
|
||||
raw = progress_queue.get_nowait()
|
||||
if isinstance(raw, tuple) and len(raw) == 3 and raw[0] == "__dedup__":
|
||||
_, base_msg, count = raw
|
||||
if progress_lines:
|
||||
progress_lines[-1] = f"{base_msg} (×{count + 1})"
|
||||
else:
|
||||
progress_lines.append(raw)
|
||||
except Exception:
|
||||
break
|
||||
# Final edit with all remaining tools (only if editing works)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue