human/nlp/nlp_base.py
2024-11-05 22:06:02 +08:00

60 lines
1.5 KiB
Python

#encoding = utf8
import logging
from asr import AsrObserver
from utils import AsyncTaskQueue
logger = logging.getLogger(__name__)
class NLPBase(AsrObserver):
def __init__(self, context, split, callback=None):
self._ask_queue = AsyncTaskQueue()
self._context = context
self._split_handle = split
self._callback = callback
self._is_running = False
@property
def callback(self):
return self._callback
@callback.setter
def callback(self, value):
self._callback = value
def _on_callback(self, txt: str):
if self._callback is not None and self._is_running:
self._callback.on_message(txt)
async def _request(self, question):
pass
async def _on_close(self):
pass
def process(self, message: str):
pass
def completed(self, message: str):
logger.info(f'complete:{message}')
# self._context.pause_talk()
self.ask(message)
def ask(self, question):
logger.info(f'ask:{question}')
self._is_running = True
self._ask_queue.add_task(self._request, question)
logger.info(f'ask:{question} completed')
def stop(self):
logger.info('NLPBase stop')
self._is_running = False
self._ask_queue.add_task(self._on_close)
self._ask_queue.stop()
def pause_talk(self):
logger.info('NLPBase pause_talk')
self._is_running = False
self._ask_queue.clear()