models + refactor
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
@@ -11,10 +10,10 @@ class AssetResponse(BaseModel):
|
||||
name: str
|
||||
type: str # uploaded / generated
|
||||
content_type: str # image / prompt
|
||||
linked_char_id: Optional[str] = None
|
||||
linked_char_id: str | None = None
|
||||
created_at: datetime
|
||||
url: Optional[str] = None
|
||||
url: str | None = None
|
||||
|
||||
class AssetsResponse(BaseModel):
|
||||
assets: List[AssetResponse]
|
||||
assets: list[AssetResponse]
|
||||
total_count: int
|
||||
@@ -1,18 +1,17 @@
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel
|
||||
|
||||
class CharacterCreateRequest(BaseModel):
|
||||
name: str
|
||||
character_bio: str
|
||||
character_image_doc_tg_id: Optional[str] = None
|
||||
avatar_image: Optional[str] = None
|
||||
character_image_tg_id: Optional[str] = None
|
||||
project_id: Optional[str] = None
|
||||
character_image_doc_tg_id: str | None = None
|
||||
avatar_image: str | None = None
|
||||
character_image_tg_id: str | None = None
|
||||
project_id: str | None = None
|
||||
|
||||
class CharacterUpdateRequest(BaseModel):
|
||||
name: Optional[str] = None
|
||||
character_bio: Optional[str] = None
|
||||
character_image_doc_tg_id: Optional[str] = None
|
||||
avatar_image: Optional[str] = None
|
||||
character_image_tg_id: Optional[str] = None
|
||||
project_id: Optional[str] = None
|
||||
name: str | None = None
|
||||
character_bio: str | None = None
|
||||
character_image_doc_tg_id: str | None = None
|
||||
avatar_image: str | None = None
|
||||
character_image_tg_id: str | None = None
|
||||
project_id: str | None = None
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
from typing import Optional, List
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class EnvironmentCreate(BaseModel):
|
||||
character_id: str
|
||||
name: str = Field(..., min_length=1)
|
||||
description: Optional[str] = None
|
||||
asset_ids: Optional[List[str]] = []
|
||||
description: str | None = None
|
||||
asset_ids: list[str] | None = []
|
||||
|
||||
|
||||
class EnvironmentUpdate(BaseModel):
|
||||
name: Optional[str] = Field(None, min_length=1)
|
||||
description: Optional[str] = None
|
||||
asset_ids: Optional[List[str]] = None
|
||||
name: str | None = Field(None, min_length=1)
|
||||
description: str | None = None
|
||||
asset_ids: list[str] | None = None
|
||||
|
||||
|
||||
class AssetToEnvironment(BaseModel):
|
||||
@@ -20,4 +19,4 @@ class AssetToEnvironment(BaseModel):
|
||||
|
||||
|
||||
class AssetsToEnvironment(BaseModel):
|
||||
asset_ids: List[str]
|
||||
asset_ids: list[str]
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel, Field
|
||||
from models.enums import AspectRatios, Quality
|
||||
|
||||
@@ -7,29 +6,31 @@ class ExternalGenerationRequest(BaseModel):
|
||||
"""Request model for importing external generations."""
|
||||
|
||||
prompt: str
|
||||
tech_prompt: Optional[str] = None
|
||||
tech_prompt: str | None = None
|
||||
|
||||
# Image can be provided as base64 string OR URL (one must be provided)
|
||||
image_data: Optional[str] = Field(None, description="Base64-encoded image data")
|
||||
image_url: Optional[str] = Field(None, description="URL to download image from")
|
||||
image_data: str | None = Field(None, description="Base64-encoded image data")
|
||||
image_url: str | None = Field(None, description="URL to download image from")
|
||||
|
||||
nsfw: bool = False
|
||||
|
||||
# Generation metadata
|
||||
aspect_ratio: AspectRatios = AspectRatios.NINESIXTEEN # "1:1","2:3","3:2","3:4","4:3","4:5","5:4","9:16","16:9","21:9"
|
||||
quality: Quality = Quality.ONEK
|
||||
model: str | None = None
|
||||
seed: int | None = None
|
||||
|
||||
# Optional linking
|
||||
linked_character_id: Optional[str] = None
|
||||
linked_character_id: str | None = None
|
||||
created_by: str = Field(..., description="User ID from external system")
|
||||
project_id: Optional[str] = None
|
||||
project_id: str | None = None
|
||||
|
||||
# Performance metrics
|
||||
execution_time_seconds: Optional[float] = None
|
||||
api_execution_time_seconds: Optional[float] = None
|
||||
token_usage: Optional[int] = None
|
||||
input_token_usage: Optional[int] = None
|
||||
output_token_usage: Optional[int] = None
|
||||
execution_time_seconds: float | None = None
|
||||
api_execution_time_seconds: float | None = None
|
||||
token_usage: int | None = None
|
||||
input_token_usage: int | None = None
|
||||
output_token_usage: int | None = None
|
||||
|
||||
def validate_image_source(self):
|
||||
"""Ensure at least one image source is provided."""
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import List, Optional
|
||||
|
||||
class UsageStats(BaseModel):
|
||||
total_runs: int
|
||||
@@ -9,10 +8,10 @@ class UsageStats(BaseModel):
|
||||
total_cost: float
|
||||
|
||||
class UsageByEntity(BaseModel):
|
||||
entity_id: Optional[str] = None
|
||||
entity_id: str | None = None
|
||||
stats: UsageStats
|
||||
|
||||
class FinancialReport(BaseModel):
|
||||
summary: UsageStats
|
||||
by_user: Optional[List[UsageByEntity]] = None
|
||||
by_project: Optional[List[UsageByEntity]] = None
|
||||
by_user: list[UsageByEntity] | None = None
|
||||
by_project: list[UsageByEntity] | None = None
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
from datetime import datetime, UTC
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from models.Asset import Asset
|
||||
from models.Generation import GenerationStatus
|
||||
from models.enums import AspectRatios, Quality, GenType
|
||||
from models.enums import AspectRatios, Quality, GenType, ImageModel, TextModel
|
||||
|
||||
|
||||
class GenerationRequest(BaseModel):
|
||||
linked_character_id: Optional[str] = None
|
||||
linked_character_id: str | None = None
|
||||
aspect_ratio: AspectRatios = AspectRatios.NINESIXTEEN # "1:1","2:3","3:2","3:4","4:3","4:5","5:4","9:16","16:9","21:9"
|
||||
quality: Quality = Quality.ONEK
|
||||
prompt: str
|
||||
telegram_id: Optional[int] = None
|
||||
model: ImageModel = Field(default=ImageModel.GEMINI_3_PRO_IMAGE_PREVIEW)
|
||||
telegram_id: int | None = None
|
||||
use_profile_image: bool = True
|
||||
assets_list: List[str]
|
||||
environment_id: Optional[str] = None
|
||||
project_id: Optional[str] = None
|
||||
idea_id: Optional[str] = None
|
||||
assets_list: list[str]
|
||||
environment_id: str | None = None
|
||||
project_id: str | None = None
|
||||
idea_id: str | None = None
|
||||
nsfw: bool = False
|
||||
count: int = Field(default=1, ge=1, le=10)
|
||||
|
||||
@@ -28,33 +28,35 @@ class NsfwRequest(BaseModel):
|
||||
|
||||
|
||||
class GenerationsResponse(BaseModel):
|
||||
generations: List["GenerationResponse"]
|
||||
generations: list["GenerationResponse"]
|
||||
total_count: int
|
||||
|
||||
|
||||
class GenerationResponse(BaseModel):
|
||||
id: str
|
||||
status: GenerationStatus
|
||||
failed_reason: Optional[str] = None
|
||||
failed_reason: str | None = None
|
||||
project_id: str | None = None
|
||||
linked_character_id: Optional[str] = None
|
||||
linked_character_id: str | None = None
|
||||
aspect_ratio: AspectRatios
|
||||
quality: Quality
|
||||
prompt: str
|
||||
tech_prompt: Optional[str] = None
|
||||
assets_list: List[str]
|
||||
result_list: List[str] = []
|
||||
result: Optional[str] = None
|
||||
execution_time_seconds: Optional[float] = None
|
||||
api_execution_time_seconds: Optional[float] = None
|
||||
token_usage: Optional[int] = None
|
||||
input_token_usage: Optional[int] = None
|
||||
output_token_usage: Optional[int] = None
|
||||
model: ImageModel | None = None
|
||||
seed: int | None = None
|
||||
tech_prompt: str | None = None
|
||||
assets_list: list[str]
|
||||
result_list: list[str] = []
|
||||
result: str | None = None
|
||||
execution_time_seconds: float | None = None
|
||||
api_execution_time_seconds: float | None = None
|
||||
token_usage: int | None = None
|
||||
input_token_usage: int | None = None
|
||||
output_token_usage: int | None = None
|
||||
progress: int = 0
|
||||
cost: Optional[float] = None
|
||||
created_by: Optional[str] = None
|
||||
generation_group_id: Optional[str] = None
|
||||
idea_id: Optional[str] = None
|
||||
cost: float | None = None
|
||||
created_by: str | None = None
|
||||
generation_group_id: str | None = None
|
||||
idea_id: str | None = None
|
||||
likes_count: int = 0
|
||||
is_liked: bool = False
|
||||
nsfw: bool = False
|
||||
@@ -64,12 +66,13 @@ class GenerationResponse(BaseModel):
|
||||
|
||||
class GenerationGroupResponse(BaseModel):
|
||||
generation_group_id: str
|
||||
generations: List[GenerationResponse]
|
||||
generations: list[GenerationResponse]
|
||||
|
||||
|
||||
class PromptRequest(BaseModel):
|
||||
prompt: str
|
||||
linked_assets: List[str] = []
|
||||
model: TextModel = Field(default=TextModel.GEMINI_3_1_PRO_PREVIEW)
|
||||
linked_assets: list[str] = []
|
||||
|
||||
|
||||
class PromptResponse(BaseModel):
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel
|
||||
from models.Idea import Idea
|
||||
from api.models.GenerationRequest import GenerationResponse
|
||||
|
||||
class IdeaCreateRequest(BaseModel):
|
||||
name: str
|
||||
description: Optional[str] = None
|
||||
project_id: Optional[str] = None # Optional in body if passed via header/dependency
|
||||
inspiration_id: Optional[str] = None
|
||||
description: str | None = None
|
||||
project_id: str | None = None # Optional in body if passed via header/dependency
|
||||
inspiration_id: str | None = None
|
||||
|
||||
class IdeaUpdateRequest(BaseModel):
|
||||
name: Optional[str] = None
|
||||
description: Optional[str] = None
|
||||
inspiration_id: Optional[str] = None
|
||||
name: str | None = None
|
||||
description: str | None = None
|
||||
inspiration_id: str | None = None
|
||||
|
||||
class IdeaResponse(Idea):
|
||||
last_generation: Optional[GenerationResponse] = None
|
||||
last_generation: GenerationResponse | None = None
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
@@ -8,8 +7,8 @@ from models.Inspiration import Inspiration
|
||||
|
||||
class InspirationCreateRequest(BaseModel):
|
||||
source_url: str
|
||||
caption: Optional[str] = None
|
||||
project_id: Optional[str] = None
|
||||
caption: str | None = None
|
||||
project_id: str | None = None
|
||||
|
||||
|
||||
class InspirationResponse(BaseModel):
|
||||
@@ -25,5 +24,5 @@ class InspirationResponse(BaseModel):
|
||||
|
||||
|
||||
class InspirationListResponse(BaseModel):
|
||||
inspirations: List[InspirationResponse]
|
||||
inspirations: list[InspirationResponse]
|
||||
total_count: int
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
from datetime import datetime
|
||||
from typing import Optional, List
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class PostCreateRequest(BaseModel):
|
||||
date: datetime
|
||||
topic: str
|
||||
generation_ids: List[str] = []
|
||||
project_id: Optional[str] = None
|
||||
generation_ids: list[str] = []
|
||||
project_id: str | None = None
|
||||
|
||||
|
||||
class PostUpdateRequest(BaseModel):
|
||||
date: Optional[datetime] = None
|
||||
topic: Optional[str] = None
|
||||
date: datetime | None = None
|
||||
topic: str | None = None
|
||||
|
||||
|
||||
class AddGenerationsRequest(BaseModel):
|
||||
generation_ids: List[str]
|
||||
generation_ids: list[str]
|
||||
|
||||
Reference in New Issue
Block a user