83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
from pydantic import BaseModel, Field
|
|
|
|
from app.enums.generation_status import (
|
|
GenerationStatus,
|
|
GenerationType,
|
|
DURATIONS,
|
|
ASPECT_RATIOS,
|
|
RESOLUTIONS,
|
|
IMAGE_SIZES,
|
|
)
|
|
from app.schemas.common import NaiveDatetime, NaiveDatetimeOptional
|
|
from app.services.operation_log import log_operation
|
|
|
|
|
|
class OptimizeParams(BaseModel):
|
|
project_id: str
|
|
prompt: str = Field(..., max_length=500)
|
|
gen_type: GenerationType = Field(GenerationType.video, description="生成类型:video-视频,image-图片")
|
|
duration: int | None = Field(None, description="视频时长(秒),视频生成必填")
|
|
image_size: str | None = Field(None, description="画面分辨率,图片生成使用")
|
|
image_proportion: str | None = Field(None, description="图片比例,图片生成使用")
|
|
image_px: str | None = Field(None, description="图片像素大小,图片生成使用")
|
|
references: list[dict] | None = None
|
|
idempotency_key: str | None = Field(None, max_length=64, description="幂等键,防止重复请求")
|
|
|
|
|
|
class GenerateParams(BaseModel):
|
|
aspect_ratio: str | None = None
|
|
resolution: str | None = None
|
|
image_size: str | None = None
|
|
|
|
|
|
class OptimizeResult(BaseModel):
|
|
optimized_prompt: str
|
|
text_credits_cost: float
|
|
# text_tokens_used: int
|
|
record: "GenerationRecordOut"
|
|
|
|
class GenerationRecordOut(BaseModel):
|
|
id: str
|
|
project_id: str
|
|
project_name: str
|
|
original_prompt: str
|
|
optimized_prompt: str | None = None
|
|
gen_type: str = "video"
|
|
duration: int | None = None
|
|
aspect_ratio: str | None = None
|
|
resolution: str | None = None
|
|
image_size: str | None = None
|
|
image_proportion: str | None = None
|
|
image_px: str | None = None
|
|
status: str
|
|
pipeline_stage: str | None = None
|
|
video_upscale_enabled: bool = False
|
|
video_url: str | None = None
|
|
video_cover_url: str | None = None
|
|
image_url: str | None = None
|
|
references: list[dict] | None = None
|
|
text_credits_cost: float = 0.0
|
|
# text_tokens_used: int = 0
|
|
credits_cost: float = 0.0
|
|
# video_tokens_used: int = 0
|
|
# image_tokens_used: int = 0
|
|
error_message: str | None = None
|
|
created_at: NaiveDatetime
|
|
generated_at: NaiveDatetimeOptional = None
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class GenerationRecordPageListOut(BaseModel):
|
|
"""生成记录分页返回API。"""
|
|
page: int = Field(..., description="当前日期分组分页页码")
|
|
page_size: int = Field(..., description="当前每页返回的日期分组数量")
|
|
total: int = Field(..., description="当前生成日期下的生成成功记录总数")
|
|
items: list[GenerationRecordOut] = Field(default_factory=list,)
|
|
|
|
class UpdatePromptRequest(BaseModel):
|
|
optimized_prompt: str = Field(..., max_length=2000)
|
|
|
|
|
|
OptimizeResult.model_rebuild()
|