diff --git a/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/__init__.py b/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/__init__.py index f9f40f1..ad6ca7a 100644 --- a/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/__init__.py +++ b/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/__init__.py @@ -54,13 +54,22 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs): ai_agents = _get_all_local_ai_agents() # pagetype 分组 - agents_by_pagetype = ai_agents.get(pg.pagetype, []) or [] + # 兼容 dict 或对象:统一读取 pagetype + def _get_pg_field(obj, key): + if isinstance(obj, dict): + return obj.get(key) + return getattr(obj, key, None) + + pg_pagetype = _get_pg_field(pg, "pagetype") + pg_name = _get_pg_field(pg, "name") + + agents_by_pagetype = ai_agents.get(pg_pagetype, []) or [] # module 分组 # 获取 pagetype 所属 module(通过 API 获取 module/app) module_name = None try: - ma = get_pagetype_module_app(pg.pagetype) + ma = get_pagetype_module_app(pg_pagetype) if ma.get("success"): module_name = ma.get("module") except Exception: @@ -102,9 +111,13 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs): # 使用统一的 render_template 进行 Jinja2 条件渲染 cond_tpl = str(agent.get("condition") or "").strip() # 统一从触发记录的 pagetype/name 拉取完整记录,构建渲染上下文 - base_ctx = pg.as_dict() if hasattr(pg, "as_dict") else getattr(pg, "__dict__", {}) - _pt = base_ctx.get("pagetype") or getattr(pg, "pagetype", None) - _nm = base_ctx.get("name") or getattr(pg, "name", None) + # 统一基上下文(兼容 dict/object) + if isinstance(pg, dict): + base_ctx = pg + else: + base_ctx = pg.as_dict() if hasattr(pg, "as_dict") else getattr(pg, "__dict__", {}) + _pt = base_ctx.get("pagetype") or _get_pg_field(pg, "pagetype") + _nm = base_ctx.get("name") or _get_pg_field(pg, "name") pg_ctx = base_ctx or {} if _pt and _nm: api_res = get_record(str(_pt), str(_nm)) @@ -118,7 +131,7 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs): trigger = False if trigger: - logger.info(f"Run Local Ai Agent: agent={agent.get('name')}, event={event}, page={pg.pagetype}:{pg.name}") + logger.info(f"Run Local Ai Agent: agent={agent.get('name')}, event={event}, page={pg_pagetype}:{pg_name}") enqueue_local_ai_agent(pg, agent.get('name')) else: logger.debug(f"Condition not met, skip agent: agent={agent.get('name')}, event={event}") @@ -148,7 +161,10 @@ def enqueue_local_ai_agent(pg, agent_name): from .local_ai_agent import create_agent_job # 将触发上下文透传为执行参数的一部分(由下游路由读取) - event_inputs = {"pagetype": getattr(pg, 'pagetype', None), "name": getattr(pg, 'name', None)} if (hasattr(pg, 'pagetype') and hasattr(pg, 'name')) else {} + if isinstance(pg, dict): + event_inputs = {"pagetype": pg.get("pagetype"), "name": pg.get("name")} + else: + event_inputs = {"pagetype": getattr(pg, 'pagetype', None), "name": getattr(pg, 'name', None)} if (hasattr(pg, 'pagetype') and hasattr(pg, 'name')) else {} _ = create_agent_job( agent_id=str(agent_id),