Source code for eclypse.builders.application.keyword_spotting.mpi_services.inference
"""MPI workflow for keyword inference."""
from eclypse.remote.communication import mpi
from eclypse.remote.service import Service
from eclypse.utils import format_log_kv
KEYWORD_THRESHOLD = 5
[docs]
class InferenceService(Service):
"""Infer a keyword from preprocessed features."""
[docs]
async def step(self):
"""Handle the next preprocessed audio feature vector."""
await self.preprocess_request() # pylint: disable=no-value-for-parameter
@mpi.exchange(receive=True, send=True)
def preprocess_request(self, _sender_id, body):
"""Infer the most likely keyword from the extracted features."""
self.logger.info("Received request | " + format_log_kv(request=body))
keyword = (
"eclypse" if sum(body["features"]) > KEYWORD_THRESHOLD else "background"
)
return "ActionService", {
"request_type": "dispatch_action",
"window_id": body["window_id"],
"keyword": keyword,
}