Skip to content

Commit 45df101

Browse files
dcramercodex
andcommitted
telegram: suppress post-image duplicate final replies
- treat direct image send_message results as terminal chat output - suppress final sync/stream text emission when image already sent Co-Authored-By: GPT-5 Codex <codex@openai.com>
1 parent 65af1fd commit 45df101

3 files changed

Lines changed: 16 additions & 8 deletions

File tree

src/ash/providers/telegram/handlers/streaming_handler.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,10 @@ async def get_steering_messages() -> list[IncomingMessage]:
192192
if (
193193
last_direct_send is not None
194194
and response_content.strip()
195-
and last_direct_send[0].strip() == response_content.strip()
195+
and (
196+
last_direct_send[2]
197+
or last_direct_send[0].strip() == response_content.strip()
198+
)
196199
):
197200
suppress_final_send = True
198201
sent_message_id = last_direct_send[1]

src/ash/providers/telegram/handlers/sync_handler.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,10 @@ async def get_steering_messages() -> list[IncomingMessage]:
157157
if (
158158
last_direct_send is not None
159159
and response_text.strip()
160-
and last_direct_send[0].strip() == response_text.strip()
160+
and (
161+
last_direct_send[2]
162+
or last_direct_send[0].strip() == response_text.strip()
163+
)
161164
):
162165
suppress_final_send = True
163166
sent_message_id = last_direct_send[1]

src/ash/providers/telegram/handlers/tool_tracker.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ async def execute(
8383
image_path=image_path,
8484
reply_to_message_id=reply_to,
8585
)
86-
self._tracker.record_direct_send(message, sent_id)
86+
self._tracker.record_direct_send(message, sent_id, has_image=True)
8787
return ToolResult.success(
8888
f"Message sent successfully (id: {sent_id})",
8989
sent_message_id=sent_id,
@@ -135,7 +135,7 @@ def __init__(
135135
self.thinking_msg_id: str | None = None
136136
self.tool_count: int = 0
137137
self.progress_messages: list[str] = []
138-
self._direct_sends: list[tuple[str, str]] = []
138+
self._direct_sends: list[tuple[str, str, bool]] = []
139139

140140
def _build_display_message(self, *, include_thinking: bool = True) -> str:
141141
"""Build the consolidated message with progress on top and status on bottom.
@@ -216,12 +216,14 @@ def add_progress_message(self, message: str) -> None:
216216
"""Add a progress message to be displayed."""
217217
self.progress_messages.append(message)
218218

219-
def record_direct_send(self, message: str, message_id: str) -> None:
219+
def record_direct_send(
220+
self, message: str, message_id: str, *, has_image: bool
221+
) -> None:
220222
"""Record a direct provider send performed by ProgressMessageTool."""
221-
self._direct_sends.append((message, message_id))
223+
self._direct_sends.append((message, message_id, has_image))
222224

223-
def last_direct_send(self) -> tuple[str, str] | None:
224-
"""Return last direct send as (message_text, external_message_id)."""
225+
def last_direct_send(self) -> tuple[str, str, bool] | None:
226+
"""Return last direct send as (message_text, external_message_id, has_image)."""
225227
if not self._direct_sends:
226228
return None
227229
return self._direct_sends[-1]

0 commit comments

Comments
 (0)