human/nlp/nlp_base.py

72 lines
1.8 KiB
Python
Raw Normal View History

#encoding = utf8
import logging
2024-10-09 12:19:00 +00:00
from asr import AsrObserver
2024-11-06 03:11:53 +00:00
from eventbus import EventBus
from utils import AsyncTaskQueue
logger = logging.getLogger(__name__)
2024-10-09 12:19:00 +00:00
class NLPBase(AsrObserver):
2024-10-23 11:58:41 +00:00
def __init__(self, context, split, callback=None):
2024-11-07 00:26:03 +00:00
self._ask_queue = AsyncTaskQueue('NLPBaseQueue')
2024-10-23 11:58:41 +00:00
self._context = context
2024-10-09 12:19:00 +00:00
self._split_handle = split
2024-10-10 11:01:13 +00:00
self._callback = callback
2024-11-05 14:06:02 +00:00
self._is_running = False
2024-10-10 11:01:13 +00:00
2024-11-07 00:26:03 +00:00
EventBus().register('stop', self.on_stop)
2024-11-06 03:11:53 +00:00
def __del__(self):
2024-11-07 00:26:03 +00:00
EventBus().unregister('stop', self.on_stop)
2024-11-06 03:11:53 +00:00
2024-11-07 00:26:03 +00:00
def on_stop(self, *args, **kwargs):
2024-11-06 03:11:53 +00:00
self.stop()
2024-10-10 11:01:13 +00:00
@property
def callback(self):
return self._callback
@callback.setter
def callback(self, value):
self._callback = value
def _on_callback(self, txt: str):
2024-11-05 14:06:02 +00:00
if self._callback is not None and self._is_running:
2024-10-10 11:01:13 +00:00
self._callback.on_message(txt)
async def _request(self, question):
pass
2024-10-14 10:20:55 +00:00
async def _on_close(self):
pass
2024-10-09 12:19:00 +00:00
def process(self, message: str):
pass
def completed(self, message: str):
2024-10-10 11:01:13 +00:00
logger.info(f'complete:{message}')
2024-10-31 13:38:35 +00:00
# self._context.pause_talk()
2024-10-09 12:19:00 +00:00
self.ask(message)
def ask(self, question):
2024-10-10 11:01:13 +00:00
logger.info(f'ask:{question}')
2024-11-05 14:06:02 +00:00
self._is_running = True
2024-11-06 12:31:23 +00:00
task = self._ask_queue.add_task(self._request, question)
2024-11-04 13:44:51 +00:00
logger.info(f'ask:{question} completed')
def stop(self):
2024-11-04 13:44:51 +00:00
logger.info('NLPBase stop')
2024-11-05 14:06:02 +00:00
self._is_running = False
2024-11-06 03:11:53 +00:00
self._ask_queue.clear()
2024-10-14 10:20:55 +00:00
self._ask_queue.add_task(self._on_close)
2024-11-05 23:43:03 +00:00
logger.info('NLPBase add close')
self._ask_queue.stop()
2024-11-05 23:43:03 +00:00
logger.info('NLPBase _ask_queue stop')
2024-10-19 10:47:34 +00:00
def pause_talk(self):
2024-11-05 14:06:02 +00:00
logger.info('NLPBase pause_talk')
self._is_running = False
2024-10-19 10:47:34 +00:00
self._ask_queue.clear()