diff --git a/pkg/openai/manager.py b/pkg/openai/manager.py index 814ad0d1..fed9fd2c 100644 --- a/pkg/openai/manager.py +++ b/pkg/openai/manager.py @@ -1,5 +1,7 @@ import openai +import config + inst = None @@ -22,6 +24,7 @@ class OpenAIInteract: response = openai.Completion.create( prompt=prompt, stop=stop, + timeout=config.process_message_timeout, **self.api_params ) return response diff --git a/pkg/openai/session.py b/pkg/openai/session.py index 7a3e4ec4..aa0f6ba7 100644 --- a/pkg/openai/session.py +++ b/pkg/openai/session.py @@ -100,9 +100,10 @@ class Session: # 释放锁 def release_response_lock(self): - logging.debug('{},lock release,{}'.format(self.name, self.response_lock)) - self.response_lock.release() - logging.debug('{},lock release successfully,{}'.format(self.name, self.response_lock)) + if self.response_lock.locked(): + logging.debug('{},lock release,{}'.format(self.name, self.response_lock)) + self.response_lock.release() + logging.debug('{},lock release successfully,{}'.format(self.name, self.response_lock)) def __init__(self, name: str): self.name = name @@ -110,7 +111,7 @@ class Session: self.last_interact_timestamp = int(time.time()) self.schedule() - self.response_lock = threading.RLock() + self.response_lock = threading.Lock() # 设定检查session最后一次对话是否超过过期时间的计时器 def schedule(self): @@ -144,7 +145,8 @@ class Session: # 向API请求补全 response = pkg.openai.manager.get_inst().request_completion(self.cut_out(self.prompt + self.user_name + ':' + text + '\n' + self.bot_name + ':', - max_rounds, max_length), self.user_name + ':') + max_rounds, max_length), + self.user_name + ':') self.prompt += self.user_name + ':' + text + '\n' + self.bot_name + ':' # print(response) diff --git a/pkg/qqbot/manager.py b/pkg/qqbot/manager.py index 9cf6505d..2e20e316 100644 --- a/pkg/qqbot/manager.py +++ b/pkg/qqbot/manager.py @@ -225,10 +225,12 @@ class QQBotManager: reply = self.process_message('person', event.sender.id, str(event.message_chain)) break except FunctionTimedOut: + pkg.openai.session.get_session('person_{}'.format(event.sender.id)).release_response_lock() failed += 1 continue if failed == self.retry: + pkg.openai.session.get_session('person_{}'.format(event.sender.id)).release_response_lock() self.notify_admin("{} 请求超时".format("person_{}".format(event.sender.id))) reply = "[bot]err:请求超时"