From 216326f36fbf3514c67dae1464ea1bf233d27435 Mon Sep 17 00:00:00 2001 From: Mike Date: Fri, 14 Aug 2026 14:27:00 -0500 Subject: [PATCH] Add expect_response to TtsReponseData for klat.response neon_audio PR #198 forwards `listen` on klat.response so remote clients (e.g. hana Node WebSocket) know to re-open the mic after playback; this model needs the matching field to validate/support that payload. --- neon_data_models/models/api/messagebus/__init__.py | 5 +++++ tests/models/api/test_messagebus.py | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/neon_data_models/models/api/messagebus/__init__.py b/neon_data_models/models/api/messagebus/__init__.py index 14b4e5a..711c3f4 100644 --- a/neon_data_models/models/api/messagebus/__init__.py +++ b/neon_data_models/models/api/messagebus/__init__.py @@ -117,6 +117,11 @@ class TtsReponseData(BaseModel): speaker: Optional[TtsSpeaker] = Field( default=None, description="Optional speaker metadata" ) + expect_response: bool = Field( + default=False, + description="True if a response is expected after this TTS is " + "played, signaling the client to re-open the mic/listen", + ) class GetSttData(BaseModel): diff --git a/tests/models/api/test_messagebus.py b/tests/models/api/test_messagebus.py index e49dd56..fe85f73 100644 --- a/tests/models/api/test_messagebus.py +++ b/tests/models/api/test_messagebus.py @@ -331,12 +331,20 @@ def test_neon_tts_response(self): self.assertEqual(valid_message.data.responses["en-us"].genders, ["female", "male"]) self.assertEqual(valid_message.data.responses["en-us"].audio["female"], "base64audio1") self.assertEqual(valid_message.msg_type, "neon.get_tts.response") + self.assertFalse(valid_message.data.expect_response) # Test alternate msg_type - alt_message = NeonTtsResponse(data=data, message_id=message_id, context={}, + alt_message = NeonTtsResponse(data=data, message_id=message_id, context={}, msg_type="klat.response") self.assertEqual(alt_message.msg_type, "klat.response") + # Test `expect_response` flag is forwarded to signal clients to listen + listen_data = TtsReponseData(responses={"en-us": response}, + expect_response=True) + listen_message = NeonTtsResponse(data=listen_data, context={}, + msg_type="klat.response") + self.assertTrue(listen_message.data.expect_response) + # Test missing required fields with self.assertRaises(ValidationError): NeonTtsResponse(message_id=message_id, context={}) # Missing data