修复重构Page类后智能体事件触发无效的问题

This commit is contained in:
jingrow 2025-10-31 19:31:25 +08:00
parent c73bacff48
commit 6644227dd8

View File

@ -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),