🐛 fix: 修复某些情况下导致插件报错 AttributeError 的问题 #549
This commit is contained in:
@@ -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())
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user