runner.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. """Public run creation and sync/async entry points."""
  2. from __future__ import annotations
  3. import asyncio
  4. from find_agent_v2.agent import FindAgentV2, create_find_agent_v2
  5. from find_agent_v2.service import get_find_agent_v2_service
  6. from find_agent_v2.state import FindAgentResult
  7. from supply_agent.config import Settings
  8. def create_find_agent_v2_run(
  9. *,
  10. user_input: str,
  11. demand_word: str,
  12. demand_grade_id: int | None = None,
  13. run_id: str | None = None,
  14. rule_config: dict | None = None,
  15. ) -> str:
  16. """Create a run in the new table namespace; old run IDs are never reused implicitly."""
  17. return get_find_agent_v2_service().create_run(
  18. user_input=user_input,
  19. demand_word=demand_word,
  20. demand_grade_id=demand_grade_id,
  21. run_id=run_id,
  22. rule_config=rule_config,
  23. )
  24. async def arun_find_agent_v2(
  25. user_input: str,
  26. *,
  27. run_id: str,
  28. agent: FindAgentV2 | None = None,
  29. settings: Settings | None = None,
  30. model: str | None = None,
  31. ) -> FindAgentResult:
  32. runner = agent or create_find_agent_v2(settings=settings, model=model)
  33. return await runner.arun(run_id=run_id, user_input=user_input)
  34. def run_find_agent_v2(
  35. user_input: str,
  36. *,
  37. run_id: str,
  38. agent: FindAgentV2 | None = None,
  39. settings: Settings | None = None,
  40. model: str | None = None,
  41. ) -> FindAgentResult:
  42. try:
  43. asyncio.get_running_loop()
  44. except RuntimeError:
  45. return asyncio.run(arun_find_agent_v2(
  46. user_input,
  47. run_id=run_id,
  48. agent=agent,
  49. settings=settings,
  50. model=model,
  51. ))
  52. raise RuntimeError("run_find_agent_v2 不能在已运行的事件循环内调用;请使用 arun_find_agent_v2")
  53. def run_prepared_find_agent_v2(
  54. run_id: str,
  55. *,
  56. agent: FindAgentV2 | None = None,
  57. settings: Settings | None = None,
  58. model: str | None = None,
  59. ) -> FindAgentResult:
  60. """Execute a prepared run using its database-persisted immutable user input."""
  61. user_input = get_find_agent_v2_service().get_run_user_input(run_id)
  62. return run_find_agent_v2(
  63. user_input,
  64. run_id=run_id,
  65. agent=agent,
  66. settings=settings,
  67. model=model,
  68. )