test_entry.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. """Local CLI for preparing or executing one database-backed v2 test run."""
  2. from __future__ import annotations
  3. import argparse
  4. import json
  5. from find_agent_v2.demand_context import prepare_v2_demand_run
  6. from find_agent_v2.runner import run_find_agent_v2, run_prepared_find_agent_v2
  7. from find_agent_v2.service import get_find_agent_v2_service
  8. def main() -> None:
  9. parser = argparse.ArgumentParser(description="准备或执行一条寻找 Agent v2 本地测试任务")
  10. parser.add_argument("--demand-grade-id", type=int, default=None)
  11. parser.add_argument("--index", type=int, default=0, help="未指定需求 ID 时选择最新 S 级上下文序号")
  12. parser.add_argument("--run-id", default=None)
  13. parser.add_argument("--existing-run-id", default=None, help="读取并执行已准备的 v2 run")
  14. parser.add_argument("--execute", action="store_true", help="准备后立即调用模型和外部搜索")
  15. parser.add_argument("--model", default=None)
  16. parser.add_argument("--resume", action="store_true", help="从 terminal run 的下一轮恢复")
  17. args = parser.parse_args()
  18. if args.existing_run_id:
  19. run = get_find_agent_v2_service().require_run(args.existing_run_id)
  20. prepared = None
  21. output: dict = {"prepared": {
  22. "run_id": run["run_id"],
  23. "demand_grade_id": run["demand_grade_id"],
  24. "demand_name": run["demand_word"],
  25. "status": run["status"],
  26. }, "executed": False}
  27. else:
  28. prepared = prepare_v2_demand_run(
  29. demand_grade_id=args.demand_grade_id,
  30. index=args.index,
  31. run_id=args.run_id,
  32. )
  33. output = {"prepared": prepared.summary(), "executed": False}
  34. if args.execute:
  35. result = (
  36. run_prepared_find_agent_v2(
  37. args.existing_run_id, model=args.model, resume=args.resume,
  38. )
  39. if args.existing_run_id
  40. else run_find_agent_v2(
  41. prepared.user_input,
  42. run_id=prepared.run_id,
  43. model=args.model,
  44. )
  45. )
  46. output.update({"executed": True, "result": {
  47. "status": result.status,
  48. "succeeded": result.succeeded,
  49. "valid_primary_count": result.valid_primary_count,
  50. "stop_reason": result.stop_reason,
  51. "final_output": result.final_output,
  52. }})
  53. print(json.dumps(output, ensure_ascii=False, default=str, indent=2))
  54. if __name__ == "__main__":
  55. main()