44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
"""OpenAI 兼容网关适配器。
|
|
|
|
模型发现: GET {base_url}/models
|
|
出图: POST {base_url}/images/generations
|
|
返回: data[0].b64_json 或 data[0].url
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from .base import Capabilities, ImageResult, ProviderAdapter
|
|
|
|
|
|
class OpenAICompatAdapter(ProviderAdapter):
|
|
name = "openai_compat"
|
|
capabilities = Capabilities(
|
|
supports_image_input=False,
|
|
size_hint="WxH",
|
|
kind="image",
|
|
)
|
|
|
|
def generate(
|
|
self,
|
|
model: str,
|
|
prompt: str,
|
|
size: str,
|
|
ratio: str,
|
|
n: int,
|
|
images: list[str],
|
|
) -> list[ImageResult]:
|
|
body: dict = {"model": model, "prompt": prompt, "n": n}
|
|
if size:
|
|
if size in ("1K", "2K", "3K", "4K"):
|
|
side = int(size[0]) * 1024
|
|
size = f"{side}x{side}"
|
|
body["size"] = size
|
|
resp = self._request("POST", "/images/generations", json_body=body, timeout=600.0)
|
|
payload = self._json(resp)
|
|
results = self.collect_results(payload)
|
|
# URL 形态需要二次下载
|
|
out: list[ImageResult] = []
|
|
for r in results:
|
|
out.append(self.download(r.url) if r.url else r)
|
|
return out
|