ji_meng_client.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. """即梦(或兼容的异步任务)上游 HTTP 客户端 — 与 liblibai_client 同类,无本地状态。"""
  2. from __future__ import annotations
  3. import os
  4. from typing import Any, Literal
  5. import requests
  6. from dotenv import load_dotenv
  7. load_dotenv()
  8. class JiMengClient:
  9. """通过环境变量配置上游 base URL 与路径,将请求原样转发并返回 JSON。"""
  10. def __init__(self) -> None:
  11. self.base = (os.getenv("JI_MENG_API_BASE") or "https://crawler.aiddit.com/crawler/ji_meng").rstrip("/")
  12. if not self.base:
  13. raise ValueError("缺少环境变量 JI_MENG_API_BASE(上游服务根 URL,如 https://api.example.com)")
  14. self.add_path = os.getenv("JI_MENG_ADD_TASK_PATH", "/add_task")
  15. self.query_path = os.getenv("JI_MENG_QUERY_TASK_PATH", "/query_task")
  16. self.api_key = os.getenv("JI_MENG_API_KEY", "").strip()
  17. def _headers(self) -> dict[str, str]:
  18. h = {"Content-Type": "application/json"}
  19. if self.api_key:
  20. h["Authorization"] = f"Bearer {self.api_key}"
  21. return h
  22. def submit_task(self, task_type: Literal['image', 'video'], prompt: str, image_url: str | None = None) -> dict[str, Any]:
  23. url = f"{self.base}{self.add_path if self.add_path.startswith('/') else '/' + self.add_path}"
  24. body: dict[str, Any] = {"task_type": task_type, "prompt": prompt}
  25. if image_url:
  26. body["image_url"] = image_url
  27. resp = requests.post(url, json=body, headers=self._headers(), timeout=120)
  28. resp.raise_for_status()
  29. return resp.json()
  30. def query_task(self, task_id: str) -> dict[str, Any]:
  31. url = f"{self.base}{self.query_path if self.query_path.startswith('/') else '/' + self.query_path}"
  32. resp = requests.post(
  33. url,
  34. json={"task_id": task_id},
  35. headers=self._headers(),
  36. timeout=60,
  37. )
  38. resp.raise_for_status()
  39. return resp.json()