From e71d873ff2d0b777ec1eedde23d864220d9cd187 Mon Sep 17 00:00:00 2001 From: Bartok9 Date: Sat, 25 Jul 2026 01:53:13 -0400 Subject: [PATCH] fix(hri): pass base64_audios for AI multimodal to_langchain AI branch incorrectly re-used base64_images for the audios kwargs, so image-only AI HRI messages raised MultimodalMessage's audio-not-supported error. Mirror the human branch and cover images-only vs image+audio. Signed-off-by: Bartok9 --- .../rai/communication/hri_connector.py | 2 +- tests/communication/test_hri_message.py | 32 +++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/rai_core/rai/communication/hri_connector.py b/src/rai_core/rai/communication/hri_connector.py index 28763766c..f6e352465 100644 --- a/src/rai_core/rai/communication/hri_connector.py +++ b/src/rai_core/rai/communication/hri_connector.py @@ -92,7 +92,7 @@ def to_langchain(self) -> LangchainBaseMessage: if self.images == [] and self.audios == []: return AIMessage(content=self.text) return AIMultimodalMessage( - content=self.text, images=base64_images, audios=base64_images + content=self.text, images=base64_images, audios=base64_audios ) case _: raise ValueError( diff --git a/tests/communication/test_hri_message.py b/tests/communication/test_hri_message.py index 8ec939dc1..52abb4482 100644 --- a/tests/communication/test_hri_message.py +++ b/tests/communication/test_hri_message.py @@ -82,26 +82,40 @@ def test_to_langchain_human(): assert langchain_message.content == "Hi there" -def test_to_langchain_ai_multimodal(image, audio): +def test_to_langchain_ai_images_only(image): + """AI messages with images (no audio) must map audios correctly and succeed.""" + from rai.messages.multimodal import AIMultimodalMessage + message = HRIMessage( text="Response", images=[image], - audios=[audio], + audios=[], message_author="ai", communication_id=HRIMessage.generate_communication_id(), seq_no=0, seq_end=True, ) + langchain_message = message.to_langchain() + assert isinstance(langchain_message, AIMultimodalMessage) + assert langchain_message.images is not None + assert len(langchain_message.images) == 1 + - with pytest.raises( - ValueError - ): # NOTE: update when https://github.com/RobotecAI/rai/issues/370 is resolved +def test_to_langchain_ai_with_audio_still_unsupported(image, audio): + """Audio on MultimodalMessage remains unsupported until issue #370.""" + message = HRIMessage( + text="Response", + images=[image], + audios=[audio], + message_author="ai", + communication_id=HRIMessage.generate_communication_id(), + seq_no=0, + seq_end=True, + ) + with pytest.raises(ValueError, match="Audio is not yet supported"): _ = message.to_langchain() - # assert isinstance(langchain_message, AIMultimodalMessage) - # assert langchain_message.content == "Response" - # assert langchain_message.images == ["img"] - # assert langchain_message.audios == ["audio"] + def test_from_langchain_human():