mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-08-14 06:30:57 +00:00
perf: skip broken models and bots in bootstrap
This commit is contained in:
@@ -0,0 +1,9 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|
||||||
|
class AdapterNotFoundError(Exception):
|
||||||
|
def __init__(self, adapter_name: str):
|
||||||
|
self.adapter_name = adapter_name
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f'Adapter {self.adapter_name} not found'
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
|
||||||
|
class RequesterNotFoundError(Exception):
|
||||||
|
def __init__(self, requester_name: str):
|
||||||
|
self.requester_name = requester_name
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f'Requester {self.requester_name} not found'
|
||||||
+11
-1
@@ -15,6 +15,8 @@ from ..discover import engine
|
|||||||
|
|
||||||
from ..entity.persistence import bot as persistence_bot
|
from ..entity.persistence import bot as persistence_bot
|
||||||
|
|
||||||
|
from ..entity.errors import platform as platform_errors
|
||||||
|
|
||||||
from .logger import EventLogger
|
from .logger import EventLogger
|
||||||
|
|
||||||
# 处理 3.4 移除了 YiriMirai 之后,插件的兼容性问题
|
# 处理 3.4 移除了 YiriMirai 之后,插件的兼容性问题
|
||||||
@@ -205,7 +207,12 @@ class PlatformManager:
|
|||||||
|
|
||||||
for bot in bots:
|
for bot in bots:
|
||||||
# load all bots here, enable or disable will be handled in runtime
|
# load all bots here, enable or disable will be handled in runtime
|
||||||
await self.load_bot(bot)
|
try:
|
||||||
|
await self.load_bot(bot)
|
||||||
|
except platform_errors.AdapterNotFoundError as e:
|
||||||
|
self.ap.logger.warning(f'Adapter {e.adapter_name} not found, skipping bot {bot.uuid}')
|
||||||
|
except Exception as e:
|
||||||
|
self.ap.logger.error(f'Failed to load bot {bot.uuid}: {e}\n{traceback.format_exc()}')
|
||||||
|
|
||||||
async def load_bot(
|
async def load_bot(
|
||||||
self,
|
self,
|
||||||
@@ -219,6 +226,9 @@ class PlatformManager:
|
|||||||
|
|
||||||
logger = EventLogger(name=f'platform-adapter-{bot_entity.name}', ap=self.ap)
|
logger = EventLogger(name=f'platform-adapter-{bot_entity.name}', ap=self.ap)
|
||||||
|
|
||||||
|
if bot_entity.adapter not in self.adapter_dict:
|
||||||
|
raise platform_errors.AdapterNotFoundError(bot_entity.adapter)
|
||||||
|
|
||||||
adapter_inst = self.adapter_dict[bot_entity.adapter](
|
adapter_inst = self.adapter_dict[bot_entity.adapter](
|
||||||
bot_entity.adapter_config,
|
bot_entity.adapter_config,
|
||||||
self.ap,
|
self.ap,
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
|
import traceback
|
||||||
|
|
||||||
from . import entities, requester
|
from . import entities, requester
|
||||||
from ...core import app
|
from ...core import app
|
||||||
from ...discover import engine
|
from ...discover import engine
|
||||||
from . import token
|
from . import token
|
||||||
from ...entity.persistence import model as persistence_model
|
from ...entity.persistence import model as persistence_model
|
||||||
|
from ...entity.errors import provider as provider_errors
|
||||||
|
|
||||||
FETCH_MODEL_LIST_URL = 'https://api.qchatgpt.rockchin.top/api/v2/fetch/model_list'
|
FETCH_MODEL_LIST_URL = 'https://api.qchatgpt.rockchin.top/api/v2/fetch/model_list'
|
||||||
|
|
||||||
@@ -64,7 +66,12 @@ class ModelManager:
|
|||||||
|
|
||||||
# load models
|
# load models
|
||||||
for llm_model in llm_models:
|
for llm_model in llm_models:
|
||||||
await self.load_llm_model(llm_model)
|
try:
|
||||||
|
await self.load_llm_model(llm_model)
|
||||||
|
except provider_errors.RequesterNotFoundError as e:
|
||||||
|
self.ap.logger.warning(f'Requester {e.requester_name} not found, skipping model {llm_model.uuid}')
|
||||||
|
except Exception as e:
|
||||||
|
self.ap.logger.error(f'Failed to load model {llm_model.uuid}: {e}\n{traceback.format_exc()}')
|
||||||
|
|
||||||
async def init_runtime_llm_model(
|
async def init_runtime_llm_model(
|
||||||
self,
|
self,
|
||||||
@@ -76,6 +83,9 @@ class ModelManager:
|
|||||||
elif isinstance(model_info, dict):
|
elif isinstance(model_info, dict):
|
||||||
model_info = persistence_model.LLMModel(**model_info)
|
model_info = persistence_model.LLMModel(**model_info)
|
||||||
|
|
||||||
|
if model_info.requester not in self.requester_dict:
|
||||||
|
raise provider_errors.RequesterNotFoundError(model_info.requester)
|
||||||
|
|
||||||
requester_inst = self.requester_dict[model_info.requester](ap=self.ap, config=model_info.requester_config)
|
requester_inst = self.requester_dict[model_info.requester](ap=self.ap, config=model_info.requester_config)
|
||||||
|
|
||||||
await requester_inst.initialize()
|
await requester_inst.initialize()
|
||||||
|
|||||||
Reference in New Issue
Block a user