diff options
author | Malik Talha <talhamalik727x@gmail.com> | 2023-11-12 03:50:42 +0500 |
---|---|---|
committer | Malik Talha <talhamalik727x@gmail.com> | 2023-11-12 03:50:42 +0500 |
commit | 9629533242da050b0d30173d6becea20191c0b2b (patch) | |
tree | 137db0e12094773f364aa3a5ca8ba0810cd7e1aa /agl_service_voiceagent/client.py | |
parent | a644c90d7409f48c49fbd5ddca7ecfe35de15953 (diff) |
Add grpc support and improvements to voice agent
Add grpc support, enhance logging functionality, re-write the
client side code, add new rpc end point to handle text-based
commands. and minor bug fixes.
Bug-AGL: SPEC-4906
Signed-off-by: Malik Talha <talhamalik727x@gmail.com>
Change-Id: If65c5940a78c5496110ff596fa744e3c93c78033
Diffstat (limited to 'agl_service_voiceagent/client.py')
-rw-r--r-- | agl_service_voiceagent/client.py | 93 |
1 files changed, 67 insertions, 26 deletions
diff --git a/agl_service_voiceagent/client.py b/agl_service_voiceagent/client.py index 12804e1..88ef785 100644 --- a/agl_service_voiceagent/client.py +++ b/agl_service_voiceagent/client.py @@ -19,7 +19,7 @@ import grpc from agl_service_voiceagent.generated import voice_agent_pb2 from agl_service_voiceagent.generated import voice_agent_pb2_grpc -def run_client(server_address, server_port, mode, nlu_engine, recording_time): +def run_client(server_address, server_port, action, mode, nlu_engine, recording_time): SERVER_URL = server_address + ":" + server_port nlu_engine = voice_agent_pb2.RASA if nlu_engine == "rasa" else voice_agent_pb2.SNIPS print("Starting Voice Agent Client...") @@ -27,7 +27,16 @@ def run_client(server_address, server_port, mode, nlu_engine, recording_time): with grpc.insecure_channel(SERVER_URL) as channel: print("Press Ctrl+C to stop the client.") print("Voice Agent Client started!") - if mode == 'wake-word': + if action == 'GetStatus': + stub = voice_agent_pb2_grpc.VoiceAgentServiceStub(channel) + print("[+] Checking status...") + status_request = voice_agent_pb2.Empty() + status_result = stub.CheckServiceStatus(status_request) + print("Version:", status_result.version) + print("Status:", status_result.status) + print("Wake Word:", status_result.wake_word) + + elif action == 'DetectWakeWord': stub = voice_agent_pb2_grpc.VoiceAgentServiceStub(channel) print("[+] Listening for wake word...") wake_request = voice_agent_pb2.Empty() @@ -39,43 +48,75 @@ def run_client(server_address, server_port, mode, nlu_engine, recording_time): print("Wake word status: ", wake_result.status) wake_word_detected = True break + + elif action == 'ExecuteVoiceCommand': + if mode == 'auto': + raise ValueError("[-] Auto mode is not implemented yet.") - elif mode == 'auto': - raise ValueError("[-] Auto mode is not implemented yet.") + elif mode == 'manual': + stub = voice_agent_pb2_grpc.VoiceAgentServiceStub(channel) + print("[+] Recording voice command in manual mode...") + record_start_request = voice_agent_pb2.RecognizeVoiceControl(action=voice_agent_pb2.START, nlu_model=nlu_engine, record_mode=voice_agent_pb2.MANUAL) + response = stub.RecognizeVoiceCommand(iter([record_start_request])) + stream_id = response.stream_id - elif mode == 'manual': - stub = voice_agent_pb2_grpc.VoiceAgentServiceStub(channel) - print("[+] Recording voice command in manual mode...") - record_start_request = voice_agent_pb2.RecognizeControl(action=voice_agent_pb2.START, nlu_model=nlu_engine, record_mode=voice_agent_pb2.MANUAL) - response = stub.RecognizeVoiceCommand(iter([record_start_request])) - stream_id = response.stream_id + time.sleep(recording_time) # pause here for the number of seconds passed by user or default 5 seconds + + record_stop_request = voice_agent_pb2.RecognizeVoiceControl(action=voice_agent_pb2.STOP, nlu_model=nlu_engine, record_mode=voice_agent_pb2.MANUAL, stream_id=stream_id) + record_result = stub.RecognizeVoiceCommand(iter([record_stop_request])) + print("[+] Voice command recording ended!") + + status = "Uh oh! Status is unknown." + if record_result.status == voice_agent_pb2.REC_SUCCESS: + status = "Yay! Status is success." + elif record_result.status == voice_agent_pb2.VOICE_NOT_RECOGNIZED: + status = "Voice not recognized." + elif record_result.status == voice_agent_pb2.INTENT_NOT_RECOGNIZED: + status = "Intent not recognized." - time.sleep(recording_time) # pause here for the number of seconds passed by user or default 5 seconds + # Process the response + print("Status:", status) + print("Command:", record_result.command) + print("Intent:", record_result.intent) + intent_slots = [] + for slot in record_result.intent_slots: + print("Slot Name:", slot.name) + print("Slot Value:", slot.value) + i_slot = voice_agent_pb2.IntentSlot(name=slot.name, value=slot.value) + intent_slots.append(i_slot) + + if record_result.status == voice_agent_pb2.REC_SUCCESS: + print("[+] Executing voice command...") + exec_voice_command_request = voice_agent_pb2.ExecuteInput(intent=record_result.intent, intent_slots=intent_slots) + response = stub.ExecuteCommand(exec_voice_command_request) - record_stop_request = voice_agent_pb2.RecognizeControl(action=voice_agent_pb2.STOP, nlu_model=nlu_engine, record_mode=voice_agent_pb2.MANUAL, stream_id=stream_id) - record_result = stub.RecognizeVoiceCommand(iter([record_stop_request])) - print("[+] Voice command recording ended!") + elif action == 'ExecuteTextCommand': + text_input = input("[+] Enter text command: ") + stub = voice_agent_pb2_grpc.VoiceAgentServiceStub(channel) + recognize_text_request = voice_agent_pb2.RecognizeTextControl(text_command=text_input, nlu_model=nlu_engine) + response = stub.RecognizeTextCommand(recognize_text_request) + status = "Uh oh! Status is unknown." - if record_result.status == voice_agent_pb2.REC_SUCCESS: + if response.status == voice_agent_pb2.REC_SUCCESS: status = "Yay! Status is success." - elif record_result.status == voice_agent_pb2.VOICE_NOT_RECOGNIZED: - status = "Voice not recognized." - elif record_result.status == voice_agent_pb2.INTENT_NOT_RECOGNIZED: + elif response.status == voice_agent_pb2.NLU_MODEL_NOT_SUPPORTED: + status = "NLU model not supported." + elif response.status == voice_agent_pb2.INTENT_NOT_RECOGNIZED: status = "Intent not recognized." # Process the response print("Status:", status) - print("Command:", record_result.command) - print("Intent:", record_result.intent) + print("Command:", response.command) + print("Intent:", response.intent) intent_slots = [] - for slot in record_result.intent_slots: + for slot in response.intent_slots: print("Slot Name:", slot.name) print("Slot Value:", slot.value) i_slot = voice_agent_pb2.IntentSlot(name=slot.name, value=slot.value) intent_slots.append(i_slot) - - if record_result.status == voice_agent_pb2.REC_SUCCESS: - print("[+] Executing voice command...") - exec_voice_command_request = voice_agent_pb2.ExecuteInput(intent=record_result.intent, intent_slots=intent_slots) - response = stub.ExecuteVoiceCommand(exec_voice_command_request)
\ No newline at end of file + + if response.status == voice_agent_pb2.REC_SUCCESS: + print("[+] Executing voice command...") + exec_text_command_request = voice_agent_pb2.ExecuteInput(intent=response.intent, intent_slots=intent_slots) + response = stub.ExecuteCommand(exec_text_command_request)
\ No newline at end of file |