🐛 fix: 修复某些情况下导致插件报错 AttributeError 的问题 #549

This commit is contained in:
Soulter
2025-02-21 00:38:02 +08:00
parent a2d5e9f40f
commit 466a1c1c41
4 changed files with 6 additions and 13 deletions
@@ -69,9 +69,7 @@ class LLMRequestSubStage(Stage):
handlers = star_handlers_registry.get_handlers_by_event_type(EventType.OnLLMRequestEvent)
for handler in handlers:
try:
wrapper = self._call_handler(self.ctx, event, handler.handler, req)
async for ret in wrapper:
yield ret
await handler.handler(event, req)
except BaseException:
logger.error(traceback.format_exc())
@@ -88,9 +86,7 @@ class LLMRequestSubStage(Stage):
handlers = star_handlers_registry.get_handlers_by_event_type(EventType.OnLLMResponseEvent)
for handler in handlers:
try:
wrapper = self._call_handler(self.ctx, event, handler.handler, llm_response)
async for ret in wrapper:
yield ret
await handler.handler(event, llm_response)
except BaseException:
logger.error(traceback.format_exc())
+1 -3
View File
@@ -90,9 +90,7 @@ class RespondStage(Stage):
handlers = star_handlers_registry.get_handlers_by_event_type(EventType.OnAfterMessageSentEvent)
for handler in handlers:
try:
wrapper = self._call_handler(self.ctx, event, handler.handler)
async for ret in wrapper:
yield ret
await handler.handler(event)
except BaseException:
logger.error(traceback.format_exc())
@@ -63,13 +63,10 @@ class ResultDecorateStage(Stage):
handlers = star_handlers_registry.get_handlers_by_event_type(EventType.OnDecoratingResultEvent)
for handler in handlers:
try:
wrapper = self._call_handler(self.ctx, event, handler.handler)
async for ret in wrapper:
yield ret
await handler.handler(event)
except BaseException:
logger.error(traceback.format_exc())
# 需要再获取一次。插件可能直接对 chain 进行了替换。
result = event.get_result()
if result is None:
+2
View File
@@ -1,6 +1,7 @@
from __future__ import annotations
import abc
import inspect
from astrbot.api import logger
from typing import List, AsyncGenerator, Union, Awaitable
from astrbot.core.platform.astr_message_event import AstrMessageEvent
from .context import PipelineContext
@@ -46,6 +47,7 @@ class Stage(abc.ABC):
ready_to_call = handler(event, *args, **kwargs)
except TypeError as e:
# 向下兼容
logger.debug(str(e))
ready_to_call = handler(event, ctx.plugin_manager.context, *args, **kwargs)
if isinstance(ready_to_call, AsyncGenerator):