fix: 未经keymgr完整跟踪的key超额问题 #39

This commit is contained in:
Rock Chin 2022-12-15 23:48:51 +08:00
parent ba03173761
commit cf04d833f9
2 changed files with 17 additions and 2 deletions

View File

@ -91,6 +91,13 @@ class KeysManager:
self.alerted.append(key_name) self.alerted.append(key_name)
return False return False
# 设置当前使用的api-key使用量超限
# 这是在尝试调用api时发生超限异常时调用的
def set_current_exceeded(self):
md5 = hashlib.md5(self.using_key.encode('utf-8')).hexdigest()
self.usage[md5] = self.api_key_usage_threshold
self.dump_usage()
def dump_usage(self): def dump_usage(self):
pkg.database.manager.get_inst().dump_api_key_usage(api_keys=self.api_key, usage=self.usage) pkg.database.manager.get_inst().dump_api_key_usage(api_keys=self.api_key, usage=self.usage)

View File

@ -194,8 +194,16 @@ class QQBotManager:
self.notify_admin("{}会话调用API失败:{}".format(session_name, e)) self.notify_admin("{}会话调用API失败:{}".format(session_name, e))
reply = "[bot]err:调用API失败请重试或联系作者或等待修复" reply = "[bot]err:调用API失败请重试或联系作者或等待修复"
except openai.error.RateLimitError as e: except openai.error.RateLimitError as e:
self.notify_admin("API调用额度超限,请向OpenAI账户充值或在config.py中更换api_key") # 尝试切换api-key
reply = "[bot]err:API调用额度超额请联系作者或等待修复" pkg.openai.manager.get_inst().key_mgr.set_current_exceeded()
switched, name = pkg.openai.manager.get_inst().key_mgr.auto_switch()
if not switched:
self.notify_admin("API调用额度超限,请向OpenAI账户充值或在config.py中更换api_key")
reply = "[bot]err:API调用额度超额请联系作者或等待修复"
else:
self.notify_admin("API调用额度超限,已切换到{}".format(name))
reply = "[bot]err:API调用额度超额已自动切换请重新发送消息"
except openai.error.InvalidRequestError as e: except openai.error.InvalidRequestError as e:
self.notify_admin("{}API调用参数错误:{}\n\n这可能是由于config.py中的prompt_submit_length参数或" self.notify_admin("{}API调用参数错误:{}\n\n这可能是由于config.py中的prompt_submit_length参数或"
"completion_api_params中的max_tokens参数数值过大导致的请尝试将其降低".format( "completion_api_params中的max_tokens参数数值过大导致的请尝试将其降低".format(