Skip to content
This repository has been archived by the owner on Feb 9, 2023. It is now read-only.

Commit

Permalink
Update to the Assistant API v1alpha2
Browse files Browse the repository at this point in the history
Also, fix some style issues from previous changes.
  • Loading branch information
drigz committed Jan 4, 2018
1 parent 75d3ceb commit 9d15b4e
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 25 deletions.
53 changes: 29 additions & 24 deletions src/aiy/_apis/_speech.py
Expand Up @@ -36,7 +36,7 @@
sys.exit(1)

from google.rpc import code_pb2 as error_code
from google.assistant.embedded.v1alpha1 import (
from google.assistant.embedded.v1alpha2 import (
embedded_assistant_pb2,
embedded_assistant_pb2_grpc,
)
Expand Down Expand Up @@ -98,6 +98,7 @@ class GenericSpeechRequest(object):

def __init__(self, api_host, credentials):
self.dialog_follow_on = False
self.language_code = aiy.i18n.get_language_code()
self._audio_queue = queue.Queue()
self._phrases = []
self._channel_factory = _ChannelFactory(api_host, credentials)
Expand Down Expand Up @@ -221,10 +222,6 @@ def _end_audio_request(self):

def _handle_response_stream(self, response_stream):
for resp in response_stream:
if resp.error.code != error_code.OK:
self._end_audio_request()
raise Error('Server error: ' + resp.error.message)

if self._stop_sending_audio(resp):
self._end_audio_request()

Expand Down Expand Up @@ -299,8 +296,6 @@ def __init__(self, credentials_file):

super().__init__('speech.googleapis.com', credentials)

self.language_code = aiy.i18n.get_language_code()

self._transcript = None

def reset(self):
Expand Down Expand Up @@ -344,7 +339,8 @@ def _stop_sending_audio(self, resp):
resp.speech_event_type)
logger.info('endpointer_type: %s', speech_event_type)

END_OF_SINGLE_UTTERANCE = types.StreamingRecognizeResponse.SpeechEventType.Value('END_OF_SINGLE_UTTERANCE')
END_OF_SINGLE_UTTERANCE = types.StreamingRecognizeResponse.SpeechEventType.Value(
'END_OF_SINGLE_UTTERANCE')
return resp.speech_event_type == END_OF_SINGLE_UTTERANCE

def _handle_response(self, resp):
Expand All @@ -363,10 +359,13 @@ class AssistantSpeechRequest(GenericSpeechRequest):

"""A request to the Assistant API, which returns audio and text."""

def __init__(self, credentials):
def __init__(self, credentials, model_id, device_id):

super().__init__('embeddedassistant.googleapis.com', credentials)

self.model_id = model_id
self.device_id = device_id

self._conversation_state = None
self._response_audio = b''
self._transcript = None
Expand All @@ -389,48 +388,54 @@ def _create_config_request(self):
sample_rate_hertz=AUDIO_SAMPLE_RATE_HZ,
volume_percentage=50,
)
converse_state = embedded_assistant_pb2.ConverseState(
device_config = embedded_assistant_pb2.DeviceConfig(
device_id=self.device_id,
device_model_id=self.model_id,
)
dialog_state_in = embedded_assistant_pb2.DialogStateIn(
conversation_state=self._conversation_state,
language_code=self.language_code,
)
converse_config = embedded_assistant_pb2.ConverseConfig(
assist_config = embedded_assistant_pb2.AssistConfig(
audio_in_config=audio_in_config,
audio_out_config=audio_out_config,
converse_state=converse_state,
device_config=device_config,
dialog_state_in=dialog_state_in,
)

return embedded_assistant_pb2.ConverseRequest(config=converse_config)
return embedded_assistant_pb2.AssistRequest(config=assist_config)

def _create_audio_request(self, data):
return embedded_assistant_pb2.ConverseRequest(audio_in=data)
return embedded_assistant_pb2.AssistRequest(audio_in=data)

def _create_response_stream(self, service, request_stream, deadline):
return service.Converse(request_stream, deadline)
return service.Assist(request_stream, deadline)

def _stop_sending_audio(self, resp):
if resp.event_type:
logger.info('event_type: %s', resp.event_type)

return (resp.event_type ==
embedded_assistant_pb2.ConverseResponse.END_OF_UTTERANCE)
embedded_assistant_pb2.AssistResponse.END_OF_UTTERANCE)

def _handle_response(self, resp):
"""Accumulate audio and text from the remote end. It will be handled
in _finish_request().
"""

if resp.result.spoken_request_text:
logger.info('transcript: %s', resp.result.spoken_request_text)
self._transcript = resp.result.spoken_request_text
if resp.speech_results:
self._transcript = ' '.join(r.transcript for r in resp.speech_results)
logger.info('transcript: %s', self._transcript)

self._response_audio += resp.audio_out.audio_data

if resp.result.conversation_state:
self._conversation_state = resp.result.conversation_state
if resp.dialog_state_out.conversation_state:
self._conversation_state = resp.dialog_state_out.conversation_state

if resp.result.microphone_mode:
if resp.dialog_state_out.microphone_mode:
self.dialog_follow_on = (
resp.result.microphone_mode ==
embedded_assistant_pb2.ConverseResult.DIALOG_FOLLOW_ON)
resp.dialog_state_out.microphone_mode ==
embedded_assistant_pb2.DialogStateOut.DIALOG_FOLLOW_ON)

def _finish_request(self):
super()._finish_request()
Expand Down
1 change: 1 addition & 0 deletions src/aiy/assistant/device_helpers.py
Expand Up @@ -43,6 +43,7 @@ def _get_api_url(*args):
return "/".join(
("https://embeddedassistant.googleapis.com/v1alpha2/projects",) + args)


def _load_ids(id_path):
with open(id_path, 'r') as f:
id_data = json.load(f)
Expand Down
4 changes: 3 additions & 1 deletion src/aiy/assistant/grpc.py
Expand Up @@ -16,6 +16,7 @@

import aiy._apis._speech
import aiy.assistant.auth_helpers
import aiy.assistant.device_helpers
import aiy.audio
import aiy.voicehat

Expand All @@ -27,7 +28,8 @@ class _AssistantRecognizer(object):
"""Your personal Google Assistant."""

def __init__(self, credentials):
self._request = aiy._apis._speech.AssistantSpeechRequest(credentials)
model_id, device_id = aiy.assistant.device_helpers.get_ids(credentials)
self._request = aiy._apis._speech.AssistantSpeechRequest(credentials, model_id, device_id)
self._recorder = aiy.audio.get_recorder()

def recognize(self):
Expand Down

0 comments on commit 9d15b4e

Please sign in to comment.