diff --git a/Lib/baseplaybook.py b/Lib/baseplaybook.py index 3b7d0e8..86811d6 100644 --- a/Lib/baseplaybook.py +++ b/Lib/baseplaybook.py @@ -44,12 +44,11 @@ class BasePlaybook(BaseAPI): return self._playbook_model.user_input def update_playbook_status(self, job_status: PlaybookJobStatus, remark: str): - playbook_model_tmp = PlaybookModel() - playbook_model_tmp.rowid = self._playbook_model.rowid - playbook_model_tmp.job_status = job_status - playbook_model_tmp.remark = remark - - rowid = Playbook.update_or_create(playbook_model_tmp) + model_tmp = PlaybookModel() + model_tmp.rowid = self._playbook_model.rowid + model_tmp.job_status = job_status + model_tmp.remark = remark + rowid = Playbook.update_or_create(model_tmp) return rowid def send_notice(self, title: str, body: str) -> bool: diff --git a/Lib/montior.py b/Lib/montior.py index 910685e..ed0b3e6 100644 --- a/Lib/montior.py +++ b/Lib/montior.py @@ -17,8 +17,8 @@ from Lib.xcache import Xcache from PLUGINS.Embeddings.embeddings_qdrant import embedding_api_singleton_qdrant, SIRP_KNOWLEDGE_COLLECTION from PLUGINS.Mem0.CONFIG import USE as MEM_ZERO_USE from PLUGINS.Redis.redis_stream_api import RedisStreamAPI -from PLUGINS.SIRP.sirpapi import Playbook as SIRPPlaybook, Knowledge -from PLUGINS.SIRP.sirpmodel import PlaybookJobStatus, KnowledgeAction +from PLUGINS.SIRP.sirpapi import Playbook, Knowledge +from PLUGINS.SIRP.sirpmodel import PlaybookJobStatus, KnowledgeAction, PlaybookModel if MEM_ZERO_USE: from PLUGINS.Mem0.mem_zero import mem_zero_singleton @@ -106,18 +106,19 @@ class MainMonitor(object): @staticmethod def subscribe_pending_playbook(): - models = SIRPPlaybook.list_pending_playbooks() + models = Playbook.list_pending_playbooks() for model in models: module_config = Xcache.get_module_config_by_name_and_type(model.type, model.name) + model_tmp = PlaybookModel(rowid=model.rowid) if module_config is None: PlaybookLoader.load_all_playbook_config() # try again module_config = Xcache.get_module_config_by_name_and_type(model.type, model.name) if module_config is None: logger.error(f"PlaybookLoader module config not found: {model.type} - {model.name}") - model.job_status = PlaybookJobStatus.FAILED - model.remark = f"PlaybookLoader module config not found: {model.type} - {model.name}" - SIRPPlaybook.update_or_create(model) + model_tmp.job_status = PlaybookJobStatus.FAILED + model_tmp.remark = f"PlaybookLoader module config not found: {model.type} - {model.name}" + Playbook.update_or_create(model_tmp) continue load_path = module_config.get("load_path") @@ -128,22 +129,22 @@ class MainMonitor(object): playbook_intent._playbook_model = model except Exception as E: logger.exception(E) - model.job_status = PlaybookJobStatus.FAILED - model.remark = str(E) - SIRPPlaybook.update_or_create(model) + model_tmp.job_status = PlaybookJobStatus.FAILED + model_tmp.remark = str(E) + Playbook.update_or_create(model_tmp) continue job_id = thread_module_manager.start_task(playbook_intent) if not job_id: - model.job_status = PlaybookJobStatus.FAILED - model.remark = "Failed to create playbook job." - SIRPPlaybook.update_or_create(model) + model_tmp.job_status = PlaybookJobStatus.FAILED + model_tmp.remark = "Failed to create playbook job." + Playbook.update_or_create(model_tmp) continue else: logger.info(f"Create playbook job success: {job_id}") - model.job_status = PlaybookJobStatus.RUNNING - model.job_id = job_id - SIRPPlaybook.update_or_create(model) + model_tmp.job_status = PlaybookJobStatus.RUNNING + model_tmp.job_id = job_id + Playbook.update_or_create(model_tmp) @staticmethod def subscribe_knowledge_action(): diff --git a/PLUGINS/SIRP/sirpapi.py b/PLUGINS/SIRP/sirpapi.py index 3acd10b..b6b9055 100644 --- a/PLUGINS/SIRP/sirpapi.py +++ b/PLUGINS/SIRP/sirpapi.py @@ -154,6 +154,26 @@ class Playbook(BaseWorksheetEntity[PlaybookModel]): return cls.list(filter_model, lazy_load=True) + @classmethod + def update_job_status_and_remark(cls, rowid: str, job_status: PlaybookJobStatus, remark: str) -> str: + """更新 playbook 的 job_status 和 remark 字段 + + Args: + rowid: playbook 记录ID + job_status: 新的作业状态 + remark: 备注信息 + + Returns: + 更新后的记录ID + """ + playbook_model_tmp = PlaybookModel() + playbook_model_tmp.rowid = rowid + playbook_model_tmp.job_status = job_status + playbook_model_tmp.remark = remark + + rowid = Playbook.update_or_create(playbook_model_tmp) + return rowid + class Knowledge(BaseWorksheetEntity[KnowledgeModel]): """PlaybookLoader 实体类""" diff --git a/PLUGINS/SIRP/sirpmodel.py b/PLUGINS/SIRP/sirpmodel.py index 4fb150d..f51fc3d 100644 --- a/PLUGINS/SIRP/sirpmodel.py +++ b/PLUGINS/SIRP/sirpmodel.py @@ -83,7 +83,7 @@ class PlaybookModel(BaseSystemModel): name: Optional[str] = Field(default="", description="执行的Playbook的名称") user_input: Optional[str] = Field(default="", description="用户对Playbook的初始输入或后续指令") - user: Optional[Union[List[AccountModel], AccountModel]] = Field(default=None, description="发起Playbook的用户") + user: Optional[List[AccountModel]] = Field(default=None, description="发起Playbook的用户") # 关联表 messages: Optional[List[Union[MessageModel, str]]] = Field(default=None, description="Playbook执行过程中的所有消息记录,构成对话历史")