__init__.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. settings: Settings | None = None,
  20. model: str | None = None,
  21. ) -> AgentResult:
  22. """同步运行 find_agent。
  23. find_agent 的搜索/详情/画像等工具均为 async,不能直接用 agent.run();
  24. 此函数内部会走 agent.arun(),并在结束前关闭异步 HTTP 客户端。
  25. """
  26. agent = create_find_agent(settings=settings, model=model)
  27. result = _run_coroutine(
  28. arun_find_agent(
  29. agent,
  30. user_input,
  31. timeout_seconds=find_agent_timeout_seconds(),
  32. )
  33. )
  34. try:
  35. with ThreadPoolExecutor(max_workers=1) as publish_executor:
  36. publish_future = publish_executor.submit(agent._finish_run, result)
  37. publish_future.result(timeout=_PUBLISH_TIMEOUT_SECONDS)
  38. except FuturesTimeoutError:
  39. logger.error(
  40. "find_agent publish timed out after %.0fs; continuing without blocking worker",
  41. _PUBLISH_TIMEOUT_SECONDS,
  42. )
  43. except Exception:
  44. logger.exception("find_agent publish failed")
  45. return result