Download plugins/platforms/telegram/telegram_context.py from SaylorTwift/hermes-agent: direct link, hf CLI and curl.
- Browser
- Download file 2.48 kB
-
https://huggingface.co/SaylorTwift/hermes-agent/resolve/main/plugins/platforms/telegram/telegram_context.py
- Command line
-
hf download hf://SaylorTwift/hermes-agent/plugins/platforms/telegram/telegram_context.py
-
curl -L -o telegram_context.py https://huggingface.co/SaylorTwift/hermes-agent/resolve/main/plugins/platforms/telegram/telegram_context.py
2.48 kB
| """Telegram group addressing helpers, kept out of the adapter facade. | |
| The identity line lives in ``channel_prompt`` and therefore in the cached-agent signature: it | |
| must be stable for the life of a session (username only — never a per-message fact). | |
| """ | |
| from typing import TYPE_CHECKING, Optional | |
| if TYPE_CHECKING: | |
| from telegram import Message | |
| from plugins.platforms.telegram.adapter import TelegramAdapter | |
| def mentions_other_participants(adapter: "TelegramAdapter", message: "Message") -> bool: | |
| """True when a ``mention``/``text_mention`` entity names someone other than this bot.""" | |
| own = adapter._current_bot_username() | |
| bot_id = getattr(adapter._bot, "id", None) if adapter._bot else None | |
| for source_text, entities in adapter._entity_sources(message): | |
| for entity in entities: | |
| entity_type = adapter._entity_type(entity) | |
| if entity_type == "mention": | |
| handle = (adapter._entity_span(source_text, entity) or "").strip().lstrip("@").lower() | |
| if handle and handle != own: | |
| return True | |
| elif entity_type == "text_mention": | |
| user = getattr(entity, "user", None) | |
| if user is not None and getattr(user, "id", None) != bot_id: | |
| return True | |
| return False | |
| def group_trigger_text(adapter: "TelegramAdapter", message: "Message", text: Optional[str]) -> Optional[str]: | |
| """Strip our own handle only when we are the sole addressee. With other participants named, | |
| ``@research_bot , @ops_bot are you both listening?`` must not reach us as ``, @ops_bot …``.""" | |
| if adapter._is_group_chat(message) and mentions_other_participants(adapter, message): | |
| return text | |
| return adapter._clean_bot_trigger_text(text) | |
| def group_identity_prompt( | |
| adapter: "TelegramAdapter", message: "Message", channel_prompt: Optional[str], | |
| ) -> Optional[str]: | |
| """Session-stable identity line so the model can read retained @mentions as itself or not.""" | |
| if not adapter._is_group_chat(message) or not getattr(adapter, "_bot", None): | |
| return channel_prompt | |
| username = adapter._current_bot_username() | |
| if not username: | |
| return channel_prompt | |
| identity = ( | |
| f"Your Telegram bot username in this group: @{username}. " | |
| "Mentions of other bots are not requests for you to relay the message." | |
| ) | |
| return f"{channel_prompt}\n\n{identity}" if channel_prompt else identity | |