diff --git a/pkg/api/http/service/bot.py b/pkg/api/http/service/bot.py index 86308bd8..e5010007 100644 --- a/pkg/api/http/service/bot.py +++ b/pkg/api/http/service/bot.py @@ -93,6 +93,11 @@ class BotService: if runtime_bot.enable: await runtime_bot.run() + # update all conversation that use this bot + for session in self.ap.sess_mgr.session_list: + if session.using_conversation is not None and session.using_conversation.bot_uuid == bot_uuid: + session.using_conversation = None + async def delete_bot(self, bot_uuid: str) -> None: """删除机器人""" await self.ap.platform_mgr.remove_bot(bot_uuid) diff --git a/pkg/api/http/service/pipeline.py b/pkg/api/http/service/pipeline.py index 5a8d9f7d..f0f6c083 100644 --- a/pkg/api/http/service/pipeline.py +++ b/pkg/api/http/service/pipeline.py @@ -112,6 +112,11 @@ class PipelineService: await self.ap.pipeline_mgr.remove_pipeline(pipeline_uuid) await self.ap.pipeline_mgr.load_pipeline(pipeline) + # update all conversation that use this pipeline + for session in self.ap.sess_mgr.session_list: + if session.using_conversation is not None and session.using_conversation.pipeline_uuid == pipeline_uuid: + session.using_conversation = None + async def delete_pipeline(self, pipeline_uuid: str) -> None: await self.ap.persistence_mgr.execute_async( sqlalchemy.delete(persistence_pipeline.LegacyPipeline).where( diff --git a/pkg/core/entities.py b/pkg/core/entities.py index 5682949f..4caf18ed 100644 --- a/pkg/core/entities.py +++ b/pkg/core/entities.py @@ -137,6 +137,12 @@ class Conversation(pydantic.BaseModel): use_funcs: typing.Optional[list[tools_entities.LLMFunction]] + pipeline_uuid: str + """流水线UUID。""" + + bot_uuid: str + """机器人UUID。""" + uuid: typing.Optional[str] = None """该对话的 uuid,在创建时不会自动生成。而是当使用 Dify API 等由外部管理对话信息的服务时,用于绑定外部的会话。具体如何使用,取决于 Runner。""" diff --git a/pkg/pipeline/preproc/preproc.py b/pkg/pipeline/preproc/preproc.py index 65463385..19478200 100644 --- a/pkg/pipeline/preproc/preproc.py +++ b/pkg/pipeline/preproc/preproc.py @@ -45,6 +45,8 @@ class PreProcessor(stage.PipelineStage): query, session, query.pipeline_config['ai']['local-agent']['prompt'], + query.pipeline_uuid, + query.bot_uuid, ) conversation.use_llm_model = llm_model diff --git a/pkg/provider/session/sessionmgr.py b/pkg/provider/session/sessionmgr.py index 8966be79..f54b50e7 100644 --- a/pkg/provider/session/sessionmgr.py +++ b/pkg/provider/session/sessionmgr.py @@ -41,6 +41,8 @@ class SessionManager: query: core_entities.Query, session: core_entities.Session, prompt_config: list[dict], + pipeline_uuid: str, + bot_uuid: str, ) -> core_entities.Conversation: """获取对话或创建对话""" @@ -58,13 +60,15 @@ class SessionManager: messages=prompt_messages, ) - if session.using_conversation is None: + if session.using_conversation is None or session.using_conversation.pipeline_uuid != pipeline_uuid: conversation = core_entities.Conversation( prompt=prompt, messages=[], use_funcs=await self.ap.tool_mgr.get_all_functions( plugin_enabled=True, ), + pipeline_uuid=pipeline_uuid, + bot_uuid=bot_uuid, ) session.conversations.append(conversation) session.using_conversation = conversation