From 13d36412dddfef56135fb2e804a0fff9a6802904 Mon Sep 17 00:00:00 2001 From: "Junyan Qin (Chin)" Date: Mon, 12 May 2025 14:16:17 +0800 Subject: [PATCH] fix: llm model wrongly required when runner is not `local-agent` (#1386) --- pkg/core/entities.py | 2 +- pkg/pipeline/preproc/preproc.py | 25 ++++++++++++++++++------- pkg/provider/modelmgr/modelmgr.py | 2 +- pkg/provider/session/sessionmgr.py | 6 +++--- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/pkg/core/entities.py b/pkg/core/entities.py index e2ea3d45..5682949f 100644 --- a/pkg/core/entities.py +++ b/pkg/core/entities.py @@ -133,7 +133,7 @@ class Conversation(pydantic.BaseModel): update_time: typing.Optional[datetime.datetime] = pydantic.Field(default_factory=datetime.datetime.now) - use_llm_model: requester.RuntimeLLMModel + use_llm_model: typing.Optional[requester.RuntimeLLMModel] = None use_funcs: typing.Optional[list[tools_entities.LLMFunction]] diff --git a/pkg/pipeline/preproc/preproc.py b/pkg/pipeline/preproc/preproc.py index 29371adc..2190a12d 100644 --- a/pkg/pipeline/preproc/preproc.py +++ b/pkg/pipeline/preproc/preproc.py @@ -32,8 +32,18 @@ class PreProcessor(stage.PipelineStage): """处理""" session = await self.ap.sess_mgr.get_session(query) + # 非 local-agent 时,llm_model 为 None + llm_model = ( + await self.ap.model_mgr.get_model_by_uuid(query.pipeline_config['ai']['local-agent']['model']) + if query.pipeline_config['ai']['runner'] == 'local-agent' + else None + ) + conversation = await self.ap.sess_mgr.get_conversation( - query, session, query.pipeline_config['ai']['local-agent']['prompt'] + query, + session, + query.pipeline_config['ai']['local-agent']['prompt'], + llm_model, ) # 设置query @@ -43,16 +53,17 @@ class PreProcessor(stage.PipelineStage): query.use_llm_model = conversation.use_llm_model - query.use_funcs = ( - conversation.use_funcs if query.use_llm_model.model_entity.abilities.__contains__('tool_call') else None - ) + if query.pipeline_config['ai']['runner'] == 'local-agent': + query.use_funcs = ( + conversation.use_funcs if query.use_llm_model.model_entity.abilities.__contains__('tool_call') else None + ) query.variables = { 'session_id': f'{query.session.launcher_type.value}_{query.session.launcher_id}', 'conversation_id': conversation.uuid, - 'msg_create_time': int(query.message_event.time) - if query.message_event.time - else int(datetime.datetime.now().timestamp()), + 'msg_create_time': ( + int(query.message_event.time) if query.message_event.time else int(datetime.datetime.now().timestamp()) + ), } # Check if this model supports vision, if not, remove all images diff --git a/pkg/provider/modelmgr/modelmgr.py b/pkg/provider/modelmgr/modelmgr.py index e37e21cb..6e50fc37 100644 --- a/pkg/provider/modelmgr/modelmgr.py +++ b/pkg/provider/modelmgr/modelmgr.py @@ -99,7 +99,7 @@ class ModelManager: for model in self.model_list: if model.name == name: return model - raise ValueError(f'无法确定模型 {name} 的信息,请在元数据中配置') + raise ValueError(f'无法确定模型 {name} 的信息') async def get_model_by_uuid(self, uuid: str) -> entities.LLMModelInfo: """通过uuid获取模型""" diff --git a/pkg/provider/session/sessionmgr.py b/pkg/provider/session/sessionmgr.py index 91bec826..e467bdac 100644 --- a/pkg/provider/session/sessionmgr.py +++ b/pkg/provider/session/sessionmgr.py @@ -4,6 +4,7 @@ import asyncio from ...core import app, entities as core_entities from ...provider import entities as provider_entities +from ...provider.modelmgr import entities as model_entities class SessionManager: @@ -41,6 +42,7 @@ class SessionManager: query: core_entities.Query, session: core_entities.Session, prompt_config: list[dict], + llm_model: model_entities.LLMModelInfo, ) -> core_entities.Conversation: """获取对话或创建对话""" @@ -62,9 +64,7 @@ class SessionManager: conversation = core_entities.Conversation( prompt=prompt, messages=[], - use_llm_model=await self.ap.model_mgr.get_model_by_uuid( - query.pipeline_config['ai']['local-agent']['model'] - ), + use_llm_model=llm_model, use_funcs=await self.ap.tool_mgr.get_all_functions( plugin_enabled=True, ),