__init__.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. """
  2. find_agent — 老年受众高潜视频发现 Agent
  3. 职责:按需求搜索抖音视频,结合内容、分享行为和双侧年龄画像进行筛选。
  4. """
  5. from __future__ import annotations
  6. import logging
  7. from concurrent.futures import ThreadPoolExecutor, TimeoutError as FuturesTimeoutError
  8. from agents.find_agent.agent import create_find_agent
  9. from agents.find_agent.async_runner import _run_coroutine, arun_find_agent
  10. from agents.find_agent.runtime import find_agent_timeout_seconds
  11. from supply_agent.config import Settings
  12. from supply_agent.types import AgentResult
  13. __all__ = ["create_find_agent", "run_find_agent"]
  14. logger = logging.getLogger(__name__)
  15. _PUBLISH_TIMEOUT_SECONDS = 120.0
  16. def run_find_agent(
  17. user_input: str,
  18. *,
  19. run_id: str,
  20. settings: Settings | None = None,
  21. model: str | None = None,
  22. ) -> AgentResult:
  23. """同步运行 find_agent。
  24. find_agent 的搜索/详情/画像等工具均为 async,不能直接用 agent.run();
  25. 此函数内部会走 agent.arun(),并在结束前关闭异步 HTTP 客户端。
  26. """
  27. agent = create_find_agent(settings=settings, model=model)
  28. result = _run_coroutine(
  29. arun_find_agent(
  30. agent,
  31. user_input,
  32. run_id=run_id,
  33. timeout_seconds=find_agent_timeout_seconds(),
  34. )
  35. )
  36. try:
  37. with ThreadPoolExecutor(max_workers=1) as publish_executor:
  38. publish_future = publish_executor.submit(agent._finish_run, result)
  39. publish_future.result(timeout=_PUBLISH_TIMEOUT_SECONDS)
  40. except FuturesTimeoutError:
  41. logger.error(
  42. "find_agent publish timed out after %.0fs; continuing without blocking worker",
  43. _PUBLISH_TIMEOUT_SECONDS,
  44. )
  45. except Exception:
  46. logger.exception("find_agent publish failed")
  47. return result