Appearance
Cron 任务崩溃:'int' object has no attribute 'get'
问题
运行 cron job 时,如果底层 LLM 调用超时(例如 GPU 满载导致请求超时),cron 调度器会崩溃并报错:
ERROR cron.scheduler: Error processing job xxx: 'int' object has no attribute 'get'错误发生在 cron/scheduler.py 第 830 行:
python
result = _cron_future.result()
final_response = result.get("final_response", "") or "" # <-- 崩溃点agent.run_conversation() 返回类型标注为 Dict[str, Any],但在所有 API 重试耗尽后,实际返回值变为 int,导致 .get() 调用崩溃。
复现前置条件:
- 在 GPU 高负载时触发 cron job
session_search辅助调用因超时反复失败- session 摘要在 3 次重试后失败
run_conversation返回非 dict 值
相关日志:
INFO Auxiliary session_search: connection error on auto — falling back to local/custom
WARNING Session summarization failed after 3 attempts: Request timed out.
ERROR cron.scheduler: Error processing job ...: 'int' object has no attribute 'get'解决方案
在 cron/scheduler.py 的 result.get() 调用前添加类型守卫:
python
result = _cron_future.result()
# 防御 run_conversation 在错误条件下返回非 dict
if not isinstance(result, dict):
raise RuntimeError(
f"agent.run_conversation returned {type(result).__name__} instead of dict: {result!r}"
)
final_response = result.get("final_response", "") or ""这样可以将原本不明显的 AttributeError 转为清晰的错误信息,让外层 except Exception 能正确标记 job 为失败并发送错误通知。
更根本的修复:追查 run_conversation 为何在重试耗尽后返回 int——这可能是错误处理路径中的更深层 bug。
影响版本:hermes-agent v0.9.0+
Issue:#9433