Files
ai-char-bot/models/Generation.py

49 lines
1.8 KiB
Python

from datetime import datetime, UTC
from enum import Enum
from typing import List, Optional
from pydantic import BaseModel, Field, computed_field
from models.Asset import Asset
from models.enums import AspectRatios, Quality, GenType
class GenerationStatus(str, Enum):
RUNNING = "running"
DONE = "done"
FAILED = "failed"
class Generation(BaseModel):
id: Optional[str] = None
status: GenerationStatus = GenerationStatus.RUNNING
failed_reason: Optional[str] = None
linked_character_id: Optional[str] = None
telegram_id: Optional[int] = None
use_profile_image: bool = True
aspect_ratio: AspectRatios
quality: Quality
prompt: str
tech_prompt: Optional[str] = None
assets_list: List[str] = Field(default_factory=list)
result_list: List[str] = Field(default_factory=list)
result: Optional[str] = None
progress: int = 0
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
is_deleted: bool = False
album_id: Optional[str] = None
created_by: Optional[str] = None # Stores User ID (Telegram ID or Web User ObjectId)
project_id: Optional[str] = None
created_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
@computed_field
def cost(self) -> float:
if self.status == GenerationStatus.DONE and self.input_token_usage and self.output_token_usage:
cost_input = self.input_token_usage * 0.000002
cost_output = self.output_token_usage * 0.00012
return round(cost_input + cost_output, 3)
return 0.0