Merge PR #1522: feat(telegram): implement draft/progress streaming messages
This commit is contained in:
@@ -202,9 +202,18 @@ class AgentLoop:
|
|||||||
|
|
||||||
if response.has_tool_calls:
|
if response.has_tool_calls:
|
||||||
if on_progress:
|
if on_progress:
|
||||||
clean = self._strip_think(response.content)
|
thoughts = [
|
||||||
if clean:
|
self._strip_think(response.content),
|
||||||
await on_progress(clean)
|
response.reasoning_content,
|
||||||
|
*(
|
||||||
|
f"Thinking [{b.get('signature', '...')}]:\n{b.get('thought', '...')}"
|
||||||
|
for b in (response.thinking_blocks or [])
|
||||||
|
if isinstance(b, dict) and "signature" in b
|
||||||
|
),
|
||||||
|
]
|
||||||
|
combined_thoughts = "\n\n".join(filter(None, thoughts))
|
||||||
|
if combined_thoughts:
|
||||||
|
await on_progress(combined_thoughts)
|
||||||
await on_progress(self._tool_hint(response.tool_calls), tool_hint=True)
|
await on_progress(self._tool_hint(response.tool_calls), tool_hint=True)
|
||||||
|
|
||||||
tool_call_dicts = [
|
tool_call_dicts = [
|
||||||
|
|||||||
@@ -225,7 +225,9 @@ class TelegramChannel(BaseChannel):
|
|||||||
logger.warning("Telegram bot not running")
|
logger.warning("Telegram bot not running")
|
||||||
return
|
return
|
||||||
|
|
||||||
self._stop_typing(msg.chat_id)
|
# Only stop typing indicator for final responses
|
||||||
|
if not msg.metadata.get("_progress", False):
|
||||||
|
self._stop_typing(msg.chat_id)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
chat_id = int(msg.chat_id)
|
chat_id = int(msg.chat_id)
|
||||||
@@ -269,23 +271,41 @@ class TelegramChannel(BaseChannel):
|
|||||||
|
|
||||||
# Send text content
|
# Send text content
|
||||||
if msg.content and msg.content != "[empty message]":
|
if msg.content and msg.content != "[empty message]":
|
||||||
|
is_progress = msg.metadata.get("_progress", False)
|
||||||
|
draft_id = msg.metadata.get("message_id")
|
||||||
|
|
||||||
for chunk in _split_message(msg.content):
|
for chunk in _split_message(msg.content):
|
||||||
try:
|
try:
|
||||||
html = _markdown_to_telegram_html(chunk)
|
html = _markdown_to_telegram_html(chunk)
|
||||||
await self._app.bot.send_message(
|
if is_progress and draft_id:
|
||||||
chat_id=chat_id,
|
await self._app.bot.send_message_draft(
|
||||||
text=html,
|
chat_id=chat_id,
|
||||||
parse_mode="HTML",
|
draft_id=draft_id,
|
||||||
reply_parameters=reply_params
|
text=html,
|
||||||
)
|
parse_mode="HTML"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
await self._app.bot.send_message(
|
||||||
|
chat_id=chat_id,
|
||||||
|
text=html,
|
||||||
|
parse_mode="HTML",
|
||||||
|
reply_parameters=reply_params
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning("HTML parse failed, falling back to plain text: {}", e)
|
logger.warning("HTML parse failed, falling back to plain text: {}", e)
|
||||||
try:
|
try:
|
||||||
await self._app.bot.send_message(
|
if is_progress and draft_id:
|
||||||
chat_id=chat_id,
|
await self._app.bot.send_message_draft(
|
||||||
text=chunk,
|
chat_id=chat_id,
|
||||||
reply_parameters=reply_params
|
draft_id=draft_id,
|
||||||
)
|
text=chunk
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
await self._app.bot.send_message(
|
||||||
|
chat_id=chat_id,
|
||||||
|
text=chunk,
|
||||||
|
reply_parameters=reply_params
|
||||||
|
)
|
||||||
except Exception as e2:
|
except Exception as e2:
|
||||||
logger.error("Error sending Telegram message: {}", e2)
|
logger.error("Error sending Telegram message: {}", e2)
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ dependencies = [
|
|||||||
"rich>=14.0.0,<15.0.0",
|
"rich>=14.0.0,<15.0.0",
|
||||||
"croniter>=6.0.0,<7.0.0",
|
"croniter>=6.0.0,<7.0.0",
|
||||||
"dingtalk-stream>=0.24.0,<1.0.0",
|
"dingtalk-stream>=0.24.0,<1.0.0",
|
||||||
"python-telegram-bot[socks]>=22.0,<23.0",
|
"python-telegram-bot[socks]>=22.6,<23.0",
|
||||||
"lark-oapi>=1.5.0,<2.0.0",
|
"lark-oapi>=1.5.0,<2.0.0",
|
||||||
"socksio>=1.0.0,<2.0.0",
|
"socksio>=1.0.0,<2.0.0",
|
||||||
"python-socketio>=5.16.0,<6.0.0",
|
"python-socketio>=5.16.0,<6.0.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user