| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- """测试 ji_meng 任务工具 — 通过 Router API 调用(范本同 test_liblibai_tool.py)
- 用法:
- 1. 先启动 Router:uv run python -m tool_agent
- 2. 运行测试:python tests/test_jimeng.py
- 需已注册 ji_meng_add_task、ji_meng_query_task(或改下方常量);搜索关键词默认可匹配二者。
- """
- import sys
- import time
- if sys.platform == 'win32':
- sys.stdout.reconfigure(encoding='utf-8')
- import httpx
- ROUTER_URL = "http://127.0.0.1:8001"
- POLL_INTERVAL_S = 2
- POLL_MAX_WAIT_S = 300
- def _extract_task_id(data: dict):
- for key in ("task_id", "taskId", "id", "job_id", "jobId"):
- v = data.get(key)
- if v is not None and str(v).strip():
- return str(v).strip()
- inner = data.get("data")
- if isinstance(inner, dict):
- return _extract_task_id(inner)
- return None
- def _terminal_success(data: dict) -> bool:
- status = (
- data.get("status")
- or data.get("task_status")
- or data.get("taskStatus")
- or data.get("state")
- )
- if status is None and isinstance(data.get("data"), dict):
- status = data["data"].get("status") or data["data"].get("task_status")
- if status is None:
- return False
- s = str(status).lower()
- return s in ("completed", "success", "done", "finished", "succeed", "complete")
- def _terminal_failure(data: dict) -> bool:
- status = data.get("status") or data.get("task_status") or data.get("state")
- if status is None and isinstance(data.get("data"), dict):
- status = data["data"].get("status")
- if status is None:
- return False
- s = str(status).lower()
- return s in ("failed", "error", "cancelled", "canceled")
- def main():
- print("=" * 50)
- print("测试 ji_meng 任务工具")
- print("=" * 50)
- # 1. 检查 Router 是否在线
- try:
- resp = httpx.get(f"{ROUTER_URL}/health", timeout=3)
- print(f"Router 状态: {resp.json()}")
- except httpx.ConnectError:
- print(f"无法连接 Router ({ROUTER_URL})")
- print("请先启动: uv run python -m tool_agent")
- sys.exit(1)
- # 2. 搜索工具,确认已注册
- print("\n--- 搜索工具 ---")
- resp = httpx.post(f"{ROUTER_URL}/search_tools", json={"keyword": "ji_meng"})
- tools = resp.json()
- print(f"找到 {tools['total']} 个工具")
- for t in tools["tools"]:
- print(f" {t['tool_id']}: {t['name']} (state={t['state']})")
- # 3. 创建 ji_meng_add_task 工具
- print("\n--- 调用 ji_meng_add_task 工具创建任务 ---")
- print(f"提示词: simple white line art, cat, black background")
- print("提交中...")
- resp = httpx.post(
- f"{ROUTER_URL}/select_tool",
- json={
- "tool_id": "ji_meng_add_task",
- "params": {
- "task_type": "image",
- "prompt": "simple white line art, cat, black background",
- },
- },
- timeout=120,
- )
- result = resp.json()
- print(f"\n响应状态: {result.get('status')}")
- if result.get("code") != 0:
- print(f"错误: {result.get('msg')}")
- sys.exit(1)
- task_id = result.get("data", {}).get("task_id")
- if not task_id:
- print("错误: 无法从创建任务响应中解析 task_id")
- sys.exit(1)
- print(f"任务 ID: {task_id}")
- # 4. 轮询查询任务
- print("\n--- 调用 ji_meng_query_task 工具查询任务 ---")
- deadline = time.monotonic() + POLL_MAX_WAIT_S
- last = {}
- while time.monotonic() < deadline:
- resp = httpx.post(
- f"{ROUTER_URL}/select_tool",
- json={
- "tool_id": "ji_meng_query_task",
- "params": {"task_id": task_id},
- },
- timeout=60,
- )
- result = resp.json()
- print(f"\n响应状态: {result.get('status')}")
- if result.get("status") != "success":
- print(f"错误: {result.get('error')}")
- sys.exit(1)
- last = result.get("result", {})
- if not isinstance(last, dict):
- print(f"非 dict 结果: {last}")
- time.sleep(POLL_INTERVAL_S)
- continue
- if last.get("status") == "error":
- print(f"错误: {last.get('error')}")
- sys.exit(1)
- print(f"任务状态: {last.get('status')}")
- print(f"最终结果: {last}")
- print("\n测试通过!")
- return
- time.sleep(POLL_INTERVAL_S)
- print(f"\n等待超时 ({POLL_MAX_WAIT_S}s),最后一次响应: {last}")
- sys.exit(1)
- if __name__ == "__main__":
- main()
|