[WIP] AWS Nova Sonic service - support multi-line system prompt
This commit is contained in:
@@ -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 = (
|
system_instruction = (
|
||||||
"You are a friendly assistant. The user and you will engage in a spoken dialog exchanging "
|
"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 "
|
"the transcripts of a natural real-time conversation. Keep your responses short, generally "
|
||||||
|
|||||||
@@ -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
|
# 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
|
# allow the first assistant response to be programmatically triggered (which happens in the
|
||||||
# on_client_connected handler, below)
|
# on_client_connected handler, below)
|
||||||
# TODO: looks like Nova Sonic can't handle new lines?
|
|
||||||
system_instruction = (
|
system_instruction = (
|
||||||
"You are a friendly assistant. The user and you will engage in a spoken dialog exchanging "
|
"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 "
|
"the transcripts of a natural real-time conversation. Keep your responses short, generally "
|
||||||
|
|||||||
@@ -498,7 +498,7 @@ class AWSNovaSonicLLMService(LLMService):
|
|||||||
await self._send_client_event(audio_content_start)
|
await self._send_client_event(audio_content_start)
|
||||||
|
|
||||||
async def _send_text_event(self, text: str, role: Role):
|
async def _send_text_event(self, text: str, role: Role):
|
||||||
if not self._stream:
|
if not self._stream or not text:
|
||||||
return
|
return
|
||||||
|
|
||||||
content_name = str(uuid.uuid4())
|
content_name = str(uuid.uuid4())
|
||||||
@@ -521,13 +521,14 @@ class AWSNovaSonicLLMService(LLMService):
|
|||||||
'''
|
'''
|
||||||
await self._send_client_event(text_content_start)
|
await self._send_client_event(text_content_start)
|
||||||
|
|
||||||
|
escaped_text = json.dumps(text) # includes quotes
|
||||||
text_input = f'''
|
text_input = f'''
|
||||||
{{
|
{{
|
||||||
"event": {{
|
"event": {{
|
||||||
"textInput": {{
|
"textInput": {{
|
||||||
"promptName": "{self._prompt_name}",
|
"promptName": "{self._prompt_name}",
|
||||||
"contentName": "{content_name}",
|
"contentName": "{content_name}",
|
||||||
"content": "{text}"
|
"content": {escaped_text}
|
||||||
}}
|
}}
|
||||||
}}
|
}}
|
||||||
}}
|
}}
|
||||||
|
|||||||
Reference in New Issue
Block a user