__init__.py 1.7 KB

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