diff --git a/dashboard/routes/plugin.py b/dashboard/routes/plugin.py index c7733df9b..e7fda7f69 100644 --- a/dashboard/routes/plugin.py +++ b/dashboard/routes/plugin.py @@ -48,14 +48,15 @@ class PluginRoute(Route): async def install_plugin_upload(self): try: - file = request.files['file'] - print(file.filename) + file = await request.files + file = file['file'] logger.info(f"正在安装用户上传的插件 {file.filename}") file_path = f"data/temp/{uuid.uuid4()}.zip" - file.save(file_path) + await file.save(file_path) self.plugin_manager.install_plugin_from_file(file_path) logger.info(f"安装插件 {file.filename} 成功") - return Response().ok(None, "安装成功!!").__dict__ + threading.Thread(target=self.astrbot_updator._reboot, args=(2, self.context)).start() + return Response().ok(None, "安装成功,程序将在 2 秒内重启。").__dict__ except Exception as e: logger.error(traceback.format_exc()) return Response().error(str(e)).__dict__ diff --git a/model/command/openai_official_handler.py b/model/command/openai_official_handler.py index 318c0527e..11ca1dd98 100644 --- a/model/command/openai_official_handler.py +++ b/model/command/openai_official_handler.py @@ -5,7 +5,6 @@ from type.types import Context from util.log import LogManager from logging import Logger from nakuru.entities.components import Image -from model.provider.openai_official import ProviderOpenAIOfficial, MODELS from util.personality import personalities from util.io import download_image_by_url @@ -96,8 +95,6 @@ class OpenAIOfficialCommandHandler(): conf = self.provider.get_configs() ret += "\n当前模型: " + conf['model'] - if conf['model'] in MODELS: - ret += "\n最大上下文窗口: " + str(MODELS[conf['model']]) + " tokens" if message.session_id in self.provider.session_memory and len(self.provider.session_memory[message.session_id]): ret += "\n你的会话上下文: " + str(self.provider.session_memory[message.session_id][-1]['usage_tokens']) + " tokens" diff --git a/model/plugin/manager.py b/model/plugin/manager.py index 1407e6f45..626ad2b06 100644 --- a/model/plugin/manager.py +++ b/model/plugin/manager.py @@ -198,7 +198,6 @@ class PluginManager(): root_dir_name + "." + p, fromlist=[p]) except (ModuleNotFoundError, ImportError) as e: # 尝试安装插件依赖 - logger.error(f"尝试安装插件依赖。") self.check_plugin_dept_update(target_plugin=root_dir_name) module = __import__("data.plugins." + root_dir_name + "." + p, fromlist=[p]) diff --git a/model/provider/openai_official.py b/model/provider/openai_official.py index f0af22a18..708ef55e7 100644 --- a/model/provider/openai_official.py +++ b/model/provider/openai_official.py @@ -23,29 +23,6 @@ from dataclasses import asdict logger: Logger = LogManager.GetLogger(log_name='astrbot') -MODELS = { - "gpt-4o": 128000, - "gpt-4o-2024-05-13": 128000, - "gpt-4-turbo": 128000, - "gpt-4-turbo-2024-04-09": 128000, - "gpt-4-turbo-preview": 128000, - "gpt-4-0125-preview": 128000, - "gpt-4-1106-preview": 128000, - "gpt-4-vision-preview": 128000, - "gpt-4-1106-vision-preview": 128000, - "gpt-4": 8192, - "gpt-4-0613": 8192, - "gpt-4-32k": 32768, - "gpt-4-32k-0613": 32768, - "gpt-3.5-turbo-0125": 16385, - "gpt-3.5-turbo": 16385, - "gpt-3.5-turbo-1106": 16385, - "gpt-3.5-turbo-instruct": 4096, - "gpt-3.5-turbo-16k": 16385, - "gpt-3.5-turbo-0613": 16385, - "gpt-3.5-turbo-16k-0613": 16385, -} - class ProviderOpenAIOfficial(Provider): def __init__(self, llm_config: LLMConfig, db_helper: BaseDatabase) -> None: super().__init__() @@ -120,8 +97,6 @@ class ProviderOpenAIOfficial(Provider): encoded_prompt = self.tokenizer.encode(default_personality['prompt']) tokens_num = len(encoded_prompt) model = self.get_curr_model() - if model in MODELS and tokens_num > MODELS[model] - 500: - default_personality['prompt'] = self.tokenizer.decode(encoded_prompt[:MODELS[model] - 500]) new_record = { "user": { @@ -222,28 +197,6 @@ class ProviderOpenAIOfficial(Provider): message["user"] = user_content self.session_memory[session_id].append(message) - # 根据 模型的上下文窗口 淘汰掉多余的记录 - curr_model = self.get_curr_model() - if curr_model in MODELS: - maxium_tokens_num = MODELS[curr_model] - 300 # 至少预留 300 给 completion - # if message['usage_tokens'] > maxium_tokens_num: - # 淘汰多余的记录,使得最终的 usage_tokens 不超过 maxium_tokens_num - 300 - # contexts = self.session_memory[session_id] - # need_to_remove_idx = 0 - # freed_tokens_num = contexts[0]['single-tokens'] - # while freed_tokens_num < message['usage_tokens'] - maxium_tokens_num: - # need_to_remove_idx += 1 - # freed_tokens_num += contexts[need_to_remove_idx]['single-tokens'] - # # 更新之后的所有记录的 usage_tokens - # for i in range(len(contexts)): - # if i > need_to_remove_idx: - # contexts[i]['usage_tokens'] -= freed_tokens_num - # logger.debug(f"淘汰上下文记录 {need_to_remove_idx+1} 条,释放 {freed_tokens_num} 个 token。当前上下文总 token 为 {contexts[-1]['usage_tokens']}。") - # self.session_memory[session_id] = contexts[need_to_remove_idx+1:] - while len(self.session_memory[session_id]) and self.session_memory[session_id][-1]['usage_tokens'] > maxium_tokens_num: - self.pop_record(session_id) - - async def pop_record(self, session_id: str, pop_system_prompt: bool = False): ''' 弹出第一条记录 @@ -298,15 +251,6 @@ class ProviderOpenAIOfficial(Provider): self.personality_set(self.curr_personality, session_id) self.session_personality[session_id] = True - # 如果 prompt 超过了最大窗口,截断。 - # 1. 可以保证之后 pop 的时候不会出现问题 - # 2. 可以保证不会超过最大 token 数 - _encoded_prompt = self.tokenizer.encode(prompt) - curr_model = self.get_curr_model() - if curr_model in MODELS and len(_encoded_prompt) > MODELS[curr_model] - 300: - _encoded_prompt = _encoded_prompt[:MODELS[curr_model] - 300] - prompt = self.tokenizer.decode(_encoded_prompt) - # 组装上下文,并且根据当前上下文窗口大小截断 await self.assemble_context(session_id, prompt, image_url) @@ -458,17 +402,6 @@ class ProviderOpenAIOfficial(Provider): ''' 获取缓存的会话 ''' - # contexts_str = "" - # for i, key in enumerate(self.session_memory): - # if i < (page-1)*size or i >= page*size: - # continue - # contexts_str += f"Session ID: {key}\n" - # for record in self.session_memory[key]: - # if "user" in record: - # contexts_str += f"User: {record['user']['content']}\n" - # if "AI" in record: - # contexts_str += f"AI: {record['AI']['content']}\n" - # contexts_str += "---\n" contexts_str = "" if session_id in self.session_memory: for record in self.session_memory[session_id]: