100 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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": ["base64_encoded_image_1", "base64_encoded_image_2"],
"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文件信息列表")
fabricJsons: Optional[List[Dict[str, Any]]] = Field(None, description="生成的Fabric.js JSON列表")
decorativeImages: Optional[Dict[str, Any]] = Field(None, description="装饰性图像base64数据供Java端上传到S3")
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]