98 lines
3.4 KiB
Python
98 lines
3.4 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
|
||
"""
|
||
海报API模型定义 - 使用 camelCase 命名约定
|
||
"""
|
||
|
||
from re import T
|
||
from typing import List, Dict, Any, Optional
|
||
from datetime import datetime
|
||
from pydantic import BaseModel, Field
|
||
|
||
|
||
class PosterGenerateRequest(BaseModel):
|
||
"""海报生成请求模型"""
|
||
templateId: str = Field("vibrant", description="模板ID")
|
||
imagesBase64: Optional[List[str]] = Field(None, description="图像base64编码列表")
|
||
posterContent: Optional[Dict[str, Any]] = Field(None, description="海报内容,如果提供则直接使用此内容")
|
||
contentId: Optional[str] = Field(None, description="内容ID,用于AI生成内容")
|
||
productId: Optional[str] = Field(None, description="产品ID,用于AI生成内容")
|
||
scenicSpotId: Optional[str] = Field(None, description="景区ID,用于AI生成内容")
|
||
numVariations: int = Field(3, description="要生成的海报变体数量, 默认为3", ge=1, le=5)
|
||
forceLlmGeneration: bool = Field(False, description="是否强制使用LLM重新生成内容")
|
||
generatePsd: bool = Field(False, description="是否生成PSD分层文件")
|
||
psdOutputPath: Optional[str] = Field(None, description="PSD文件输出路径(可选,默认自动生成)")
|
||
|
||
class Config:
|
||
json_schema_extra = {
|
||
"example": {
|
||
"templateId": "vibrant",
|
||
"imagesBase64": "",
|
||
"numVariations": 1,
|
||
"forceLlmGeneration":False,
|
||
"generatePsd": True,
|
||
"psdOutputPath": "custom_poster.psd",
|
||
"contentId":"1",
|
||
"productId":"1",
|
||
"scenicSpotId":"1",
|
||
"posterContent":{
|
||
"title":"天津冒险湾",
|
||
"slogan":"天津冒险湾,让你体验不一样的冒险之旅"
|
||
}
|
||
}
|
||
}
|
||
|
||
class TemplateInfo(BaseModel):
|
||
"""模板信息模型"""
|
||
id: str
|
||
name: str
|
||
description: str
|
||
handler_path: str = Field(alias="handlerPath")
|
||
class_name: str = Field(alias="className")
|
||
system_prompt: Optional[str] = None
|
||
user_prompt_template: Optional[str] = None
|
||
required_fields: Optional[List[str]] = None
|
||
optional_fields: Optional[List[str]] = None
|
||
size: Optional[List[int]] = None
|
||
is_active: bool = Field(alias="isActive")
|
||
|
||
class Config:
|
||
allow_population_by_field_name = True
|
||
|
||
class TemplateListResponse(BaseModel):
|
||
"""模板列表响应模型"""
|
||
templates: List[TemplateInfo]
|
||
totalCount: int
|
||
|
||
class ImageUsageInfo(BaseModel):
|
||
"""图像使用信息模型"""
|
||
imageId: int
|
||
usageCount: int
|
||
firstUsedAt: str
|
||
lastUsedAt: str
|
||
usageContext: List[str]
|
||
|
||
class PosterGenerateResponse(BaseModel):
|
||
"""海报生成响应模型"""
|
||
requestId: str
|
||
templateId: str
|
||
resultImagesBase64: List[Dict[str, Any]] = Field(description="生成的海报图像(base64编码)列表")
|
||
psdFiles: Optional[List[Dict[str, Any]]] = Field(None, description="生成的PSD文件信息列表")
|
||
metadata: Dict[str, Any] = Field(default_factory=dict)
|
||
|
||
class Config:
|
||
json_encoders = {
|
||
datetime: lambda v: v.isoformat()
|
||
}
|
||
|
||
class ImageUsageRequest(BaseModel):
|
||
"""图像使用查询请求模型"""
|
||
imageIds: List[int]
|
||
|
||
class ImageUsageResponse(BaseModel):
|
||
"""图像使用情况响应模型"""
|
||
requestId: str
|
||
imageUsageInfo: List[ImageUsageInfo]
|
||
summary: Dict[str, Any]
|
||
|