mirror of
https://github.com/langbot-app/LangBot.git
synced 2025-11-26 03:44:58 +08:00
63 lines
1.5 KiB
Python
63 lines
1.5 KiB
Python
# 定义不同接口请求的模型
|
|
import threading
|
|
import asyncio
|
|
import logging
|
|
|
|
import openai
|
|
|
|
|
|
class RequestBase:
|
|
|
|
req_func: callable
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
raise NotImplementedError
|
|
|
|
def _next_key(self):
|
|
import pkg.utils.context as context
|
|
switched, name = context.get_openai_manager().key_mgr.auto_switch()
|
|
logging.debug("切换api-key: switched={}, name={}".format(switched, name))
|
|
openai.api_key = context.get_openai_manager().key_mgr.get_using_key()
|
|
|
|
def _req(self, **kwargs):
|
|
"""处理代理问题"""
|
|
import config
|
|
|
|
ret: dict = {}
|
|
exception: Exception = None
|
|
|
|
async def awrapper(**kwargs):
|
|
nonlocal ret, exception
|
|
|
|
try:
|
|
ret = await self.req_func(**kwargs)
|
|
logging.debug("接口请求返回:%s", str(ret))
|
|
|
|
if config.switch_strategy == 'active':
|
|
self._next_key()
|
|
|
|
return ret
|
|
except Exception as e:
|
|
exception = e
|
|
|
|
loop = asyncio.new_event_loop()
|
|
|
|
thr = threading.Thread(
|
|
target=loop.run_until_complete,
|
|
args=(awrapper(**kwargs),)
|
|
)
|
|
|
|
thr.start()
|
|
thr.join()
|
|
|
|
if exception is not None:
|
|
raise exception
|
|
|
|
return ret
|
|
|
|
def __iter__(self):
|
|
raise self
|
|
|
|
def __next__(self):
|
|
raise NotImplementedError
|