- Stop assistant playback only if there was a user request. This

prevents a PortAudio write on input-only stream error in the Assistant
SDK, see https://github.com/googlesamples/assistant-sdk-python/issues/185

- Make sure that user_request is always defined before returning it

- Use assistant.google.pushtotalk as a fallback if assistant.google is
not configured/available
This commit is contained in:
Fabio Manganiello 2018-03-21 23:21:41 +01:00
parent d5f73023ea
commit a14d6fe652
4 changed files with 47 additions and 3 deletions

View file

@ -159,6 +159,7 @@ class AssistantGooglePushtotalkBackend(Backend):
logging.info('Assistant conversation triggered') logging.info('Assistant conversation triggered')
continue_conversation = True continue_conversation = True
user_request = None
while continue_conversation: while continue_conversation:
(user_request, continue_conversation) = self.assistant.assist() (user_request, continue_conversation) = self.assistant.assist()
@ -243,6 +244,8 @@ class SampleAssistant(object):
yield c yield c
self.conversation_stream.start_playback() self.conversation_stream.start_playback()
user_request = None
# This generator yields AssistResponse proto messages # This generator yields AssistResponse proto messages
# received from the gRPC Google Assistant API. # received from the gRPC Google Assistant API.
for resp in self.assistant.Assist(iter_assist_requests(), for resp in self.assistant.Assist(iter_assist_requests(),
@ -285,6 +288,8 @@ class SampleAssistant(object):
concurrent.futures.wait(device_actions_futures) concurrent.futures.wait(device_actions_futures)
logging.info('Finished playing assistant response.') logging.info('Finished playing assistant response.')
if user_request:
self.conversation_stream.stop_playback() self.conversation_stream.stop_playback()
return (user_request, continue_conversation) return (user_request, continue_conversation)

View file

@ -11,6 +11,9 @@ class AssistantEvent(Event):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
try: try:
self._assistant = get_backend('assistant.google') self._assistant = get_backend('assistant.google')
except KeyError as e:
try:
self._assistant = get_backend('assistant.google.pushtotalk')
except KeyError as e: except KeyError as e:
logging.warning('google.assistant backend not configured/initialized') logging.warning('google.assistant backend not configured/initialized')
self._assistant = None self._assistant = None

View file

@ -0,0 +1,18 @@
from platypush.context import get_backend
from platypush.message.response import Response
from platypush.plugins import Plugin
class AssistantGooglePlugin(Plugin):
def start_conversation(self):
assistant = get_backend('assistant.google')
assistant.start_conversation()
return Response(output='', errors=[])
def stop_conversation(self):
assistant = get_backend('assistant.google')
assistant.stop_conversation()
return Response(output='', errors=[])
# vim:sw=4:ts=4:et:

View file

@ -0,0 +1,18 @@
from platypush.context import get_backend
from platypush.message.response import Response
from platypush.plugins import Plugin
class AssistantGooglePushtotalkPlugin(Plugin):
def start_conversation(self):
assistant = get_backend('assistant.google.pushtotalk')
assistant.start_conversation()
return Response(output='', errors=[])
def stop_conversation(self):
assistant = get_backend('assistant.google.pushtotalk')
assistant.stop_conversation()
return Response(output='', errors=[])
# vim:sw=4:ts=4:et: