run_existing_execution_mysql.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. """Cloud MySQL entrypoint for an existing PG Pattern V2 execution.
  2. This entrypoint intentionally writes only content-deconstruction-supply.demand_content.
  3. It never runs prepare/mining and does not write demand_task, Hive, PG Pattern, or
  4. legacy MySQL Pattern tables.
  5. """
  6. from __future__ import annotations
  7. import argparse
  8. import asyncio
  9. import json
  10. import os
  11. import sys
  12. from pathlib import Path
  13. sys.path.insert(0, str(Path(__file__).parent.parent.parent))
  14. def _configure_mysql_env(run_label: str | None) -> None:
  15. os.environ["DEMAND_OUTPUT_MODE"] = "mysql_demand_content"
  16. os.environ["DEMAND_MYSQL_ENTRYPOINT"] = "run_existing_execution_mysql"
  17. if run_label:
  18. os.environ["DEMAND_RUN_LABEL"] = run_label
  19. def _validate_execution_success(execution_id: int) -> None:
  20. from examples.demand.db_manager import query_execution_for_evidence
  21. execution = query_execution_for_evidence(execution_id)
  22. if not execution:
  23. raise ValueError(f"execution_id={execution_id} 不存在,MySQL 写入入口只允许跑已有 execution")
  24. if str(execution.get("status") or "").strip().lower() != "success":
  25. raise ValueError(
  26. f"execution_id={execution_id} status={execution.get('status')},不是 success,拒绝生成需求"
  27. )
  28. def parse_args() -> argparse.Namespace:
  29. parser = argparse.ArgumentParser(
  30. description="Run DemandAgent against an existing PG Pattern V2 execution_id and write only MySQL demand_content."
  31. )
  32. parser.add_argument("--execution-id", type=int, required=True, help="Existing PG pattern_mining_execution.id")
  33. parser.add_argument("--merge-level2", required=True, help="Current merge_leve2 / cluster name")
  34. parser.add_argument("--platform-type", default="piaoquan", help="Platform label")
  35. parser.add_argument("--count", type=int, default=5, help="Approximate demand count requested from the prompt")
  36. parser.add_argument("--run-label", default=None, help="Label stored at ext_data.run_label for verification")
  37. return parser.parse_args()
  38. async def async_main() -> dict:
  39. args = parse_args()
  40. _configure_mysql_env(args.run_label)
  41. _validate_execution_success(args.execution_id)
  42. from examples.demand.run import main
  43. result = await main(
  44. cluster_name=args.merge_level2,
  45. platform_type=args.platform_type,
  46. count=args.count,
  47. execution_id=args.execution_id,
  48. task_id=None,
  49. )
  50. result["run_label"] = args.run_label
  51. return result
  52. def main() -> None:
  53. result = asyncio.run(async_main())
  54. print(json.dumps(result, ensure_ascii=False, indent=2))
  55. if __name__ == "__main__":
  56. main()