mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-03 02:11:48 +00:00
feat(gateway): centralize audio routing + FLAC support + Telegram doc fallback (#17833)
Extracted from PR #17211 (@versun) so it can land independently of the local_command TTS provider redesign. - Add should_send_media_as_audio(platform, ext, is_voice) in gateway/platforms/base.py; single source of truth for audio routing. - Add .flac to recognized audio extensions (MEDIA regex, weixin audio set, send_message audio set). - Telegram send_voice() now falls back to send_document for formats Telegram's Bot API can't play natively (.wav, .flac, ...) instead of raising; MP3/M4A still go to sendAudio, Opus/OGG still go to sendVoice. - Route _send_telegram() in send_message_tool through a narrower _TELEGRAM_SEND_AUDIO_EXTS = {.mp3, .m4a} set. - cron.scheduler._send_media_via_adapter now delegates the audio decision to should_send_media_as_audio so it matches the gateway. - Update the cron live-adapter ogg test to flag [[audio_as_voice]] so it still routes to sendVoice under the new Telegram-specific policy. - Tests: unit coverage for should_send_media_as_audio across platforms, end-to-end MEDIA routing via _process_message_background and GatewayRunner._deliver_media_from_response, TelegramAdapter.send_voice fallback for FLAC/WAV. Co-authored-by: Versun <me+github7604@versun.org>
This commit is contained in:
parent
26787ce638
commit
aa7bf329bc
10 changed files with 417 additions and 19 deletions
|
|
@ -323,6 +323,55 @@ class TestExtractMedia:
|
|||
assert "Here" in cleaned
|
||||
assert "After" in cleaned
|
||||
|
||||
def test_media_tag_supports_unquoted_flac_paths_with_spaces(self):
|
||||
content = "MEDIA:/tmp/Jane Doe/speech.flac"
|
||||
media, cleaned = BasePlatformAdapter.extract_media(content)
|
||||
assert media == [("/tmp/Jane Doe/speech.flac", False)]
|
||||
assert cleaned == ""
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# should_send_media_as_audio
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
class TestShouldSendMediaAsAudio:
|
||||
"""Audio-routing policy shared by gateway + scheduler + send_message."""
|
||||
|
||||
def test_unknown_extension_returns_false(self):
|
||||
from gateway.platforms.base import should_send_media_as_audio
|
||||
assert should_send_media_as_audio(None, ".png") is False
|
||||
assert should_send_media_as_audio("telegram", ".pdf") is False
|
||||
|
||||
def test_non_telegram_platforms_route_all_audio(self):
|
||||
from gateway.platforms.base import should_send_media_as_audio
|
||||
for ext in (".mp3", ".m4a", ".wav", ".flac", ".ogg", ".opus"):
|
||||
assert should_send_media_as_audio("discord", ext) is True
|
||||
assert should_send_media_as_audio("slack", ext) is True
|
||||
|
||||
def test_telegram_mp3_and_m4a_route_to_audio(self):
|
||||
from gateway.platforms.base import should_send_media_as_audio
|
||||
assert should_send_media_as_audio("telegram", ".mp3") is True
|
||||
assert should_send_media_as_audio("telegram", ".m4a") is True
|
||||
|
||||
def test_telegram_wav_and_flac_fall_through_to_document(self):
|
||||
from gateway.platforms.base import should_send_media_as_audio
|
||||
assert should_send_media_as_audio("telegram", ".wav") is False
|
||||
assert should_send_media_as_audio("telegram", ".flac") is False
|
||||
|
||||
def test_telegram_ogg_opus_only_when_voice_flagged(self):
|
||||
from gateway.platforms.base import should_send_media_as_audio
|
||||
assert should_send_media_as_audio("telegram", ".ogg", is_voice=True) is True
|
||||
assert should_send_media_as_audio("telegram", ".opus", is_voice=True) is True
|
||||
assert should_send_media_as_audio("telegram", ".ogg") is False
|
||||
assert should_send_media_as_audio("telegram", ".opus") is False
|
||||
|
||||
def test_accepts_platform_enum(self):
|
||||
from gateway.config import Platform
|
||||
from gateway.platforms.base import should_send_media_as_audio
|
||||
assert should_send_media_as_audio(Platform.TELEGRAM, ".mp3") is True
|
||||
assert should_send_media_as_audio(Platform.TELEGRAM, ".flac") is False
|
||||
assert should_send_media_as_audio(Platform.DISCORD, ".flac") is True
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# truncate_message
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue