summaryrefslogtreecommitdiffstats
path: root/agl_service_voiceagent/client.py
diff options
context:
space:
mode:
authorMalik Talha <talhamalik727x@gmail.com>2023-11-12 03:50:42 +0500
committerMalik Talha <talhamalik727x@gmail.com>2023-11-12 03:50:42 +0500
commit9629533242da050b0d30173d6becea20191c0b2b (patch)
tree137db0e12094773f364aa3a5ca8ba0810cd7e1aa /agl_service_voiceagent/client.py
parenta644c90d7409f48c49fbd5ddca7ecfe35de15953 (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.py93
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