refactor: use emit_event from connector

This commit is contained in:
Junyan Qin
2025-07-02 12:46:30 +08:00
parent e2124054bf
commit 1a10b40b17
6 changed files with 59 additions and 92 deletions
+1 -10
View File
@@ -16,7 +16,6 @@ from ..utils import importutil
import langbot_plugin.api.entities.builtin.provider.session as provider_session import langbot_plugin.api.entities.builtin.provider.session as provider_session
import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query
import langbot_plugin.api.entities.context as event_context
from . import ( from . import (
resprule, resprule,
@@ -191,15 +190,7 @@ class RuntimePipeline:
message_chain=query.message_chain, message_chain=query.message_chain,
) )
event_ctx = event_context.EventContext( event_ctx = await self.ap.plugin_connector.emit_event(event_obj)
event=event_obj,
)
event_ctx_data = event_ctx.model_dump(serialize_as_any=True)
event_ctx_result = await self.ap.plugin_connector.handler.emit_event(event_ctx_data)
event_ctx = event_context.EventContext.parse_from_dict(event_ctx_result['event_context'])
if event_ctx.is_prevented_default(): if event_ctx.is_prevented_default():
return return
+6 -13
View File
@@ -7,7 +7,6 @@ from langbot_plugin.api.entities.builtin.provider import message as provider_mes
import langbot_plugin.api.entities.events as events import langbot_plugin.api.entities.events as events
import langbot_plugin.api.entities.builtin.platform.message as platform_message import langbot_plugin.api.entities.builtin.platform.message as platform_message
import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query
import langbot_plugin.api.entities.context as event_context
@stage.stage_class('PreProcessor') @stage.stage_class('PreProcessor')
@@ -109,20 +108,14 @@ class PreProcessor(stage.PipelineStage):
query.user_message = provider_message.Message(role='user', content=content_list) query.user_message = provider_message.Message(role='user', content=content_list)
# =========== 触发事件 PromptPreProcessing # =========== 触发事件 PromptPreProcessing
event_ctx = event_context.EventContext( event = events.PromptPreProcessing(
event=events.PromptPreProcessing( session_name=f'{query.session.launcher_type.value}_{query.session.launcher_id}',
session_name=f'{query.session.launcher_type.value}_{query.session.launcher_id}', default_prompt=query.prompt.messages,
default_prompt=query.prompt.messages, prompt=query.messages,
prompt=query.messages, query=query,
query=query,
)
) )
event_ctx_result = await self.ap.plugin_connector.handler.emit_event( event_ctx = await self.ap.plugin_connector.emit_event(event)
event_ctx.model_dump(serialize_as_any=True)
)
event_ctx = event_context.EventContext.parse_from_dict(event_ctx_result['event_context'])
query.prompt.messages = event_ctx.event.default_prompt query.prompt.messages = event_ctx.event.default_prompt
query.messages = event_ctx.event.prompt query.messages = event_ctx.event.prompt
+7 -14
View File
@@ -14,7 +14,6 @@ from ....utils import importutil
from ....provider import runners from ....provider import runners
import langbot_plugin.api.entities.builtin.provider.session as provider_session import langbot_plugin.api.entities.builtin.provider.session as provider_session
import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query
import langbot_plugin.api.entities.context as event_context
importutil.import_modules_in_pkg(runners) importutil.import_modules_in_pkg(runners)
@@ -36,21 +35,15 @@ class ChatMessageHandler(handler.MessageHandler):
else events.GroupNormalMessageReceived else events.GroupNormalMessageReceived
) )
event_ctx = event_context.EventContext( event = event_class(
event=event_class( launcher_type=query.launcher_type.value,
launcher_type=query.launcher_type.value, launcher_id=query.launcher_id,
launcher_id=query.launcher_id, sender_id=query.sender_id,
sender_id=query.sender_id, text_message=str(query.message_chain),
text_message=str(query.message_chain), query=query,
query=query,
)
) )
event_ctx_result = await self.ap.plugin_connector.handler.emit_event( event_ctx = await self.ap.plugin_connector.emit_event(event)
event_ctx.model_dump(serialize_as_any=True)
)
event_ctx = event_context.EventContext.parse_from_dict(event_ctx_result['event_context'])
if event_ctx.is_prevented_default(): if event_ctx.is_prevented_default():
if event_ctx.event.reply is not None: if event_ctx.event.reply is not None:
+10 -17
View File
@@ -8,7 +8,6 @@ import langbot_plugin.api.entities.builtin.provider.message as provider_message
import langbot_plugin.api.entities.builtin.platform.message as platform_message import langbot_plugin.api.entities.builtin.platform.message as platform_message
import langbot_plugin.api.entities.builtin.provider.session as provider_session import langbot_plugin.api.entities.builtin.provider.session as provider_session
import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query
import langbot_plugin.api.entities.context as event_context
import langbot_plugin.api.entities.events as events import langbot_plugin.api.entities.events as events
@@ -34,24 +33,18 @@ class CommandHandler(handler.MessageHandler):
else events.GroupCommandSent else events.GroupCommandSent
) )
event_ctx = event_context.EventContext( event = event_class(
event=event_class( launcher_type=query.launcher_type.value,
launcher_type=query.launcher_type.value, launcher_id=query.launcher_id,
launcher_id=query.launcher_id, sender_id=query.sender_id,
sender_id=query.sender_id, command=spt[0],
command=spt[0], params=spt[1:] if len(spt) > 1 else [],
params=spt[1:] if len(spt) > 1 else [], text_message=str(query.message_chain),
text_message=str(query.message_chain), is_admin=(privilege == 2),
is_admin=(privilege == 2), query=query,
query=query,
)
) )
event_ctx_result = await self.ap.plugin_connector.handler.emit_event( event_ctx = await self.ap.plugin_connector.emit_event(event)
event_ctx.model_dump(serialize_as_any=True)
)
event_ctx = event_context.EventContext.parse_from_dict(event_ctx_result['event_context'])
if event_ctx.is_prevented_default(): if event_ctx.is_prevented_default():
if event_ctx.event.reply is not None: if event_ctx.event.reply is not None:
+26 -37
View File
@@ -7,7 +7,6 @@ from .. import stage
import langbot_plugin.api.entities.builtin.platform.message as platform_message import langbot_plugin.api.entities.builtin.platform.message as platform_message
import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query
import langbot_plugin.api.entities.context as event_context
import langbot_plugin.api.entities.events as events import langbot_plugin.api.entities.events as events
@@ -59,27 +58,21 @@ class ResponseWrapper(stage.PipelineStage):
reply_text = str(result.get_content_platform_message_chain()) reply_text = str(result.get_content_platform_message_chain())
# ============= 触发插件事件 =============== # ============= 触发插件事件 ===============
event_ctx = event_context.EventContext( event = events.NormalMessageResponded(
event=events.NormalMessageResponded( launcher_type=query.launcher_type.value,
launcher_type=query.launcher_type.value, launcher_id=query.launcher_id,
launcher_id=query.launcher_id, sender_id=query.sender_id,
sender_id=query.sender_id, session=session,
session=session, prefix='',
prefix='', response_text=reply_text,
response_text=reply_text, finish_reason='stop',
finish_reason='stop', funcs_called=[fc.function.name for fc in result.tool_calls]
funcs_called=[fc.function.name for fc in result.tool_calls] if result.tool_calls is not None
if result.tool_calls is not None else [],
else [], query=query,
query=query,
)
) )
serialized_event_ctx = event_ctx.model_dump(serialize_as_any=True) event_ctx = await self.ap.plugin_connector.emit_event(event)
event_ctx_result = await self.ap.plugin_connector.handler.emit_event(serialized_event_ctx)
event_ctx = event_context.EventContext.parse_from_dict(event_ctx_result['event_context'])
if event_ctx.is_prevented_default(): if event_ctx.is_prevented_default():
yield entities.StageProcessResult( yield entities.StageProcessResult(
@@ -108,25 +101,21 @@ class ResponseWrapper(stage.PipelineStage):
) )
if query.pipeline_config['output']['misc']['track-function-calls']: if query.pipeline_config['output']['misc']['track-function-calls']:
event_ctx = event_context.EventContext( event = events.NormalMessageResponded(
event=events.NormalMessageResponded( launcher_type=query.launcher_type.value,
launcher_type=query.launcher_type.value, launcher_id=query.launcher_id,
launcher_id=query.launcher_id, sender_id=query.sender_id,
sender_id=query.sender_id, session=session,
session=session, prefix='',
prefix='', response_text=reply_text,
response_text=reply_text, finish_reason='stop',
finish_reason='stop', funcs_called=[fc.function.name for fc in result.tool_calls]
funcs_called=[fc.function.name for fc in result.tool_calls] if result.tool_calls is not None
if result.tool_calls is not None else [],
else [], query=query,
query=query,
)
) )
event_ctx_result = await self.ap.plugin_connector.handler.emit_event(serialized_event_ctx) event_ctx = await self.ap.plugin_connector.emit_event(event)
event_ctx = event_context.EventContext.parse_from_dict(event_ctx_result['event_context'])
if event_ctx.is_prevented_default(): if event_ctx.is_prevented_default():
yield entities.StageProcessResult( yield entities.StageProcessResult(
+9 -1
View File
@@ -66,4 +66,12 @@ class PluginRuntimeConnector:
self, self,
event: events.BaseEventModel, event: events.BaseEventModel,
) -> context.EventContext: ) -> context.EventContext:
pass event_ctx = context.EventContext(
event=event,
)
event_ctx_result = await self.handler.emit_event(event_ctx.model_dump(serialize_as_any=True))
event_ctx = context.EventContext.parse_from_dict(event_ctx_result['event_context'])
return event_ctx