优化jingrow/ai/pagetype/local_ai_agent/__init__.py
This commit is contained in:
parent
475a6dfab3
commit
f94cee7b54
@ -2,7 +2,6 @@
|
||||
# License: MIT. See LICENSE
|
||||
|
||||
import jingrow
|
||||
import logging
|
||||
from jingrow.utils.jinja import render_template
|
||||
|
||||
|
||||
@ -41,13 +40,9 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs):
|
||||
- condition 支持 Jinja2 表达式
|
||||
- 使用本地任务队列,避免链式重复触发
|
||||
"""
|
||||
logger = logging.getLogger(__name__)
|
||||
# 兼容多种调用方式:
|
||||
pg = pg or page
|
||||
method = event or method or kwargs.get("event")
|
||||
logger.debug(f"LocalAIAgent.run_agent called: pagetype={getattr(pg,'pagetype',None)}, name={getattr(pg,'name',None)}, method={method}")
|
||||
|
||||
# 简化实现:不使用 flags,始终尝试匹配
|
||||
|
||||
ai_agents = _get_all_local_ai_agents()
|
||||
|
||||
@ -70,7 +65,8 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs):
|
||||
ma = jingrow.get_module_app(pg_pagetype)
|
||||
if isinstance(ma, dict) and ma.get("success"):
|
||||
module_name = ma.get("module")
|
||||
except Exception:
|
||||
except Exception as _e:
|
||||
jingrow.log_error("get_module_app failed", f"pagetype={pg_pagetype}", exc=_e)
|
||||
module_name = None
|
||||
agents_by_module = []
|
||||
if module_name:
|
||||
@ -78,15 +74,13 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs):
|
||||
agents_by_module = ai_agents.get(key, []) or []
|
||||
|
||||
# 合并去重
|
||||
agents_for_pg = {a.get("name"): a for a in agents_by_pagetype + agents_by_module}.values()
|
||||
logger.debug(
|
||||
f"LocalAIAgent groups: pagetype_count={len(agents_by_pagetype)}, module_count={len(agents_by_module)}, merged={len(list(agents_for_pg))}"
|
||||
)
|
||||
if not agents_for_pg:
|
||||
logger.debug("No Local Ai Agents matched for this page")
|
||||
merged_agents = list({a.get("name"): a for a in agents_by_pagetype + agents_by_module}.values())
|
||||
|
||||
if not merged_agents:
|
||||
jingrow.log_error("LocalAIAgent", "No Local Ai Agents matched for this page")
|
||||
return
|
||||
|
||||
# 支持的事件(不依赖 flags)
|
||||
# 支持的事件
|
||||
event_list = [
|
||||
"on_update",
|
||||
"after_insert",
|
||||
@ -97,7 +91,7 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs):
|
||||
"before_update_after_submit",
|
||||
]
|
||||
|
||||
for agent in agents_for_pg:
|
||||
for agent in merged_agents:
|
||||
event = method if method in event_list else None
|
||||
if event and (agent.get("event_type") == event):
|
||||
|
||||
@ -106,10 +100,8 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs):
|
||||
trigger = True
|
||||
else:
|
||||
try:
|
||||
# 使用统一的 render_template 进行 Jinja2 条件渲染
|
||||
cond_tpl = str(agent.get("condition") or "").strip()
|
||||
# 统一从触发记录的 pagetype/name 拉取完整记录,构建渲染上下文
|
||||
# 统一基上下文(兼容 dict/object)
|
||||
if isinstance(pg, dict):
|
||||
base_ctx = pg
|
||||
else:
|
||||
@ -124,35 +116,22 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs):
|
||||
result = render_template(cond_tpl, {"pg": pg_ctx})
|
||||
if str(result).strip().lower() in ("true", "1", "yes"):
|
||||
trigger = True
|
||||
except Exception:
|
||||
logger.warning(f"Condition render error, skip agent: agent={agent.get('name')}")
|
||||
except Exception as _e:
|
||||
jingrow.log_error("Condition render error, skip agent", f"agent={agent.get('name')}", exc=_e)
|
||||
trigger = False
|
||||
|
||||
if trigger:
|
||||
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}")
|
||||
|
||||
|
||||
def _add_agent_to_queue(agent, pg):
|
||||
"""向后兼容:直接调用入队函数(无本地事务队列)。"""
|
||||
enqueue_local_ai_agent(pg, agent.get('name'))
|
||||
|
||||
|
||||
def enqueue_local_ai_agent(pg, agent_name):
|
||||
"""后台实际入队执行 Local Ai Agent。
|
||||
|
||||
此函数会读取本地智能体配置,调用本地任务创建函数以执行远端/本地智能体。
|
||||
"""
|
||||
"""后台实际入队执行 Local Ai Agent。"""
|
||||
try:
|
||||
# 通过统一 CRUD 获取 Local Ai Agent 详情
|
||||
items = jingrow.get_list("Local Ai Agent", filters=[["name", "=", agent_name]], fields=["name", "agent_name"], limit=1)
|
||||
agent = (items or [None])[0]
|
||||
agent = jingrow.get_pg("Local Ai Agent", agent_name)
|
||||
if not agent:
|
||||
return
|
||||
if not agent:
|
||||
return
|
||||
|
||||
# 无 agent_id 字段,统一使用 name 作为标识
|
||||
agent_id = agent.get("name")
|
||||
agent_name_value = agent.get("agent_name")
|
||||
|
||||
@ -168,15 +147,10 @@ def enqueue_local_ai_agent(pg, agent_name):
|
||||
agent_id=str(agent_id),
|
||||
agent_name=agent_name_value,
|
||||
inputs=event_inputs,
|
||||
# 使用统一的执行路由;会在本地队列处理器里转发
|
||||
route="jingrow/agents/execute",
|
||||
)
|
||||
except Exception as e:
|
||||
jingrow.log_error("Local Ai Agent执行失败", f"agent={agent_name}, error={str(e)}")
|
||||
|
||||
|
||||
def clear_local_ai_agent_cache():
|
||||
"""清空本地智能体缓存(简化实现:无缓存,函数保留占位)。"""
|
||||
return None
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user