test_jimeng_ai.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. """测试即梦AI工具
  2. 用法:
  3. uv run python tests/test_jimeng_ai.py # Health check
  4. uv run python tests/test_jimeng_ai.py --text2image # 测试文生图
  5. uv run python tests/test_jimeng_ai.py --image2video # 测试图生视频
  6. uv run python tests/test_jimeng_ai.py --query # 测试查询任务状态
  7. """
  8. import argparse
  9. import json
  10. import sys
  11. import httpx
  12. BASE_URL = "http://127.0.0.1:8001"
  13. def check_connection():
  14. try:
  15. httpx.get(f"{BASE_URL}/health", timeout=3)
  16. except httpx.ConnectError:
  17. print(f"ERROR: Cannot connect to {BASE_URL}")
  18. print("Please start the service first:")
  19. print(" uv run python -m tool_agent")
  20. sys.exit(1)
  21. def test_health():
  22. print("=== Health Check ===")
  23. resp = httpx.get(f"{BASE_URL}/health")
  24. print(f" Status : {resp.status_code}")
  25. print(f" Body : {json.dumps(resp.json(), ensure_ascii=False, indent=4)}")
  26. assert resp.status_code == 200
  27. print(" [PASS]")
  28. def test_text2image():
  29. print("=== Test Text to Image (Seendance 2.0) ===")
  30. print(" Calling jimeng_ai...")
  31. try:
  32. resp = httpx.post(f"{BASE_URL}/select_tool", json={
  33. "tool_id": "jimeng_ai",
  34. "params": {
  35. "action": "text2image",
  36. "prompt": "beautiful sunset over mountains, high quality",
  37. "model": "seendance_2.0",
  38. "aspect_ratio": "16:9",
  39. "image_count": 1,
  40. "cfg_scale": 7.0,
  41. "steps": 20
  42. }
  43. }, timeout=120)
  44. print(f" Status : {resp.status_code}")
  45. data = resp.json()
  46. if data["status"] == "success":
  47. result = data["result"]
  48. print(f" task_id: {result.get('task_id')}")
  49. print(f" status : {result.get('status')}")
  50. if result.get("result", {}).get("images"):
  51. print(f" images : {len(result['result']['images'])} generated")
  52. print(" [PASS]")
  53. else:
  54. print(f" ERROR : {data.get('error')}")
  55. print(" [FAIL]")
  56. except Exception as e:
  57. print(f" ERROR : {e}")
  58. print(" [FAIL]")
  59. def test_image2video():
  60. print("=== Test Image to Video (Seedream Lite 5.0) ===")
  61. print(" Calling jimeng_ai...")
  62. try:
  63. resp = httpx.post(f"{BASE_URL}/select_tool", json={
  64. "tool_id": "jimeng_ai",
  65. "params": {
  66. "action": "image2video",
  67. "image_url": "https://example.com/sample.jpg",
  68. "prompt": "camera slowly zooming in",
  69. "model": "seedream_lite_5.0",
  70. "video_duration": 5,
  71. "motion_strength": 0.5
  72. }
  73. }, timeout=300)
  74. print(f" Status : {resp.status_code}")
  75. data = resp.json()
  76. if data["status"] == "success":
  77. result = data["result"]
  78. print(f" task_id: {result.get('task_id')}")
  79. print(f" status : {result.get('status')}")
  80. if result.get("result", {}).get("videos"):
  81. print(f" videos : {len(result['result']['videos'])} generated")
  82. print(" [PASS]")
  83. else:
  84. print(f" ERROR : {data.get('error')}")
  85. print(" [FAIL]")
  86. except Exception as e:
  87. print(f" ERROR : {e}")
  88. print(" [FAIL]")
  89. def test_query_status():
  90. print("=== Test Query Task Status ===")
  91. print(" NOTE: Requires a valid task_id from previous generation")
  92. print(" [SKIP - Manual test required]")
  93. def main():
  94. parser = argparse.ArgumentParser(description="Jimeng AI Tool Test")
  95. parser.add_argument("--text2image", action="store_true", help="test text to image")
  96. parser.add_argument("--image2video", action="store_true", help="test image to video")
  97. parser.add_argument("--query", action="store_true", help="test query status")
  98. args = parser.parse_args()
  99. print(f"Target: {BASE_URL}\n")
  100. check_connection()
  101. test_health()
  102. ran_any = False
  103. if args.text2image:
  104. print()
  105. test_text2image()
  106. ran_any = True
  107. if args.image2video:
  108. print()
  109. test_image2video()
  110. ran_any = True
  111. if args.query:
  112. print()
  113. test_query_status()
  114. ran_any = True
  115. if not ran_any:
  116. print()
  117. print("No test specified. Available options:")
  118. parser.print_help()
  119. print("\n=== DONE ===")
  120. if __name__ == "__main__":
  121. main()