from typing import Any import requests from django.conf import settings from .openai_compatible import openai_image_size from .volcano import VolcanoArkProvider class YunqiProvider(VolcanoArkProvider): """YunQi AI(New API 网关)适配器:OpenAI 兼容 images/generations。 与火山 ARK 的差异:不接受 watermark/sequential_image_generation/response_format 私有参数; size 用 OpenAI 枚举(1024x1024/1024x1536/1536x1024);gpt-image-2 固定返回 b64_json, 下游 extract_first_media_url / media_to_bytes 已兼容 base64,无需改动。 """ def __post_init__(self) -> None: self.api_key = self.api_key or settings.YUNQI.get("api_key") self.base_url = self.base_url or settings.YUNQI.get("base_url") def image_generation( self, *, model: str, prompt: str, endpoint: str = "images/generations", image: str | list[str] | None = None, size: str = "1024x1536", timeout: float = 300, ) -> dict[str, Any]: if not self.api_key: raise ValueError("YUNQI_API_KEY is not configured") if image: raise ValueError("gpt-image-2 via YunQi only supports text-to-image; reference image is not supported") body: dict[str, Any] = {"model": model, "prompt": prompt, "size": openai_image_size(size), "n": 1} # 实测该网关生图平均延迟 75s+,超时须显著高于火山的 180s response = requests.post( f"{self.base_url.rstrip('/')}/{endpoint.lstrip('/')}", headers={"Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json"}, json=body, timeout=timeout, ) response.raise_for_status() return response.json()