[WIP] AWS Nova Sonic service - support multi-line system prompt

This commit is contained in:
Paul Kompfner
2025-05-06 09:48:50 -04:00
parent 2b02d08f4c
commit 467233be04
3 changed files with 7 additions and 3 deletions

View File

@@ -175,6 +175,10 @@ async def run_bot(webrtc_connection: SmallWebRTCConnection):
),
)
# Specify initial system instruction.
# HACK: note that, for now, we need to inject a special bit of text into this instruction to
# allow the first assistant response to be programmatically triggered (which happens in the
# on_client_connected handler, below)
system_instruction = (
"You are a friendly assistant. The user and you will engage in a spoken dialog exchanging "
"the transcripts of a natural real-time conversation. Keep your responses short, generally "

View File

@@ -87,7 +87,6 @@ async def run_bot(webrtc_connection: SmallWebRTCConnection):
# HACK: note that, for now, we need to inject a special bit of text into this instruction to
# allow the first assistant response to be programmatically triggered (which happens in the
# on_client_connected handler, below)
# TODO: looks like Nova Sonic can't handle new lines?
system_instruction = (
"You are a friendly assistant. The user and you will engage in a spoken dialog exchanging "
"the transcripts of a natural real-time conversation. Keep your responses short, generally "

View File

@@ -498,7 +498,7 @@ class AWSNovaSonicLLMService(LLMService):
await self._send_client_event(audio_content_start)
async def _send_text_event(self, text: str, role: Role):
if not self._stream:
if not self._stream or not text:
return
content_name = str(uuid.uuid4())
@@ -521,13 +521,14 @@ class AWSNovaSonicLLMService(LLMService):
'''
await self._send_client_event(text_content_start)
escaped_text = json.dumps(text) # includes quotes
text_input = f'''
{{
"event": {{
"textInput": {{
"promptName": "{self._prompt_name}",
"contentName": "{content_name}",
"content": "{text}"
"content": {escaped_text}
}}
}}
}}