|
|
|
@ -43,6 +43,7 @@ class ImageGenerationRequest(BaseModel): |
|
|
|
model: str | None = Field(default=None, description="覆盖提供方默认模型") |
|
|
|
model: str | None = Field(default=None, description="覆盖提供方默认模型") |
|
|
|
size: str = Field(default="1024x1024", description="图片尺寸") |
|
|
|
size: str = Field(default="1024x1024", description="图片尺寸") |
|
|
|
n: int = Field(default=1, ge=1, le=10, description="生成数量") |
|
|
|
n: int = Field(default=1, ge=1, le=10, description="生成数量") |
|
|
|
|
|
|
|
profile_name: str = Field(pattern=r"^[\w-]+$", description="调用方标识(必填),图片会保存到 output/<profile_name>/ 下") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GeneratedImage(BaseModel): |
|
|
|
class GeneratedImage(BaseModel): |
|
|
|
@ -107,6 +108,8 @@ def generate_images(request: ImageGenerationRequest): |
|
|
|
raise HTTPException(status_code=500, detail=f"未配置环境变量 {config['api_key_env']}") |
|
|
|
raise HTTPException(status_code=500, detail=f"未配置环境变量 {config['api_key_env']}") |
|
|
|
|
|
|
|
|
|
|
|
model = request.model or config["model"] |
|
|
|
model = request.model or config["model"] |
|
|
|
|
|
|
|
profile_dir = OUTPUT_DIR / request.profile_name |
|
|
|
|
|
|
|
profile_dir.mkdir(parents=True, exist_ok=True) |
|
|
|
client = OpenAI(base_url=API_BASE_URL, api_key=api_key, timeout=120.0, max_retries=0) |
|
|
|
client = OpenAI(base_url=API_BASE_URL, api_key=api_key, timeout=120.0, max_retries=0) |
|
|
|
response = generate_with_retry( |
|
|
|
response = generate_with_retry( |
|
|
|
client, |
|
|
|
client, |
|
|
|
@ -129,8 +132,8 @@ def generate_images(request: ImageGenerationRequest): |
|
|
|
raise HTTPException(status_code=502, detail="上游 Base64 图片数据格式无效") from e |
|
|
|
raise HTTPException(status_code=502, detail="上游 Base64 图片数据格式无效") from e |
|
|
|
|
|
|
|
|
|
|
|
filename = f"{model}-{uuid4().hex}.png" |
|
|
|
filename = f"{model}-{uuid4().hex}.png" |
|
|
|
(OUTPUT_DIR / filename).write_bytes(raw) |
|
|
|
(profile_dir / filename).write_bytes(raw) |
|
|
|
images.append(GeneratedImage(filename=filename, url=f"/output/{filename}", bytes=len(raw))) |
|
|
|
images.append(GeneratedImage(filename=filename, url=f"/output/{request.profile_name}/{filename}", bytes=len(raw))) |
|
|
|
|
|
|
|
|
|
|
|
return ImageGenerationResponse(provider=request.provider, model=model, images=images) |
|
|
|
return ImageGenerationResponse(provider=request.provider, model=model, images=images) |
|
|
|
|
|
|
|
|
|
|
|
|