main.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. """即梦任务工具 — FastAPI 调用层(范本同 liblibai_controlnet)。
  2. 无本地缓存:/add_task、/query_task 直接转发到上游 HTTP(见 ji_meng_client.py)。
  3. 环境变量:
  4. JI_MENG_API_BASE 必填,上游根 URL
  5. JI_MENG_ADD_TASK_PATH 可选,默认 /add_task
  6. JI_MENG_QUERY_TASK_PATH 可选,默认 /query_task
  7. JI_MENG_API_KEY 可选,Bearer Token
  8. 注册(由 Agent 写入 registry + sources):
  9. tool_id=ji_meng_add_task / ji_meng_query_task,host_dir=tools/local/ji_meng,
  10. endpoint_path 分别为 /add_task、/query_task。
  11. """
  12. from __future__ import annotations
  13. import argparse
  14. from typing import Literal
  15. import uvicorn
  16. from fastapi import FastAPI, HTTPException
  17. from pydantic import BaseModel, Field
  18. from ji_meng_client import JiMengClient
  19. app = FastAPI(title="Ji Meng Task API")
  20. class AddTaskRequest(BaseModel):
  21. task_type: Literal['image', 'video'] = Field(default=..., description="任务类型")
  22. prompt: str = Field(..., description="任务描述 / 提示词")
  23. image_url: str | None = Field(default=None, description="图片 URL")
  24. class QueryTaskRequest(BaseModel):
  25. task_id: str = Field(..., description="创建任务接口返回的任务 ID")
  26. @app.get("/health")
  27. def health() -> dict:
  28. return {"status": "ok"}
  29. @app.post("/add_task")
  30. def add_task(req: AddTaskRequest) -> dict:
  31. try:
  32. client = JiMengClient()
  33. return client.submit_task(task_type=req.task_type, prompt=req.prompt, image_url=req.image_url)
  34. except ValueError as e:
  35. raise HTTPException(status_code=503, detail=str(e)) from e
  36. except Exception as e:
  37. raise HTTPException(status_code=502, detail=str(e)) from e
  38. @app.post("/query_task")
  39. def query_task(req: QueryTaskRequest) -> dict:
  40. try:
  41. client = JiMengClient()
  42. return client.query_task(req.task_id)
  43. except ValueError as e:
  44. raise HTTPException(status_code=503, detail=str(e)) from e
  45. except Exception as e:
  46. raise HTTPException(status_code=502, detail=str(e)) from e
  47. if __name__ == "__main__":
  48. parser = argparse.ArgumentParser()
  49. parser.add_argument("--port", type=int, default=8001)
  50. args = parser.parse_args()
  51. uvicorn.run(app, host="0.0.0.0", port=args.port)