| | """Data models""" |
| | from datetime import datetime |
| | from typing import Optional, List, Union |
| | from pydantic import BaseModel |
| |
|
| | class Token(BaseModel): |
| | """Token model""" |
| | id: Optional[int] = None |
| | token: str |
| | email: str |
| | name: Optional[str] = "" |
| | st: Optional[str] = None |
| | rt: Optional[str] = None |
| | remark: Optional[str] = None |
| | expiry_time: Optional[datetime] = None |
| | is_active: bool = True |
| | cooled_until: Optional[datetime] = None |
| | created_at: Optional[datetime] = None |
| | last_used_at: Optional[datetime] = None |
| | use_count: int = 0 |
| | |
| | plan_type: Optional[str] = None |
| | plan_title: Optional[str] = None |
| | subscription_end: Optional[datetime] = None |
| | |
| | sora2_supported: Optional[bool] = None |
| | sora2_invite_code: Optional[str] = None |
| | sora2_redeemed_count: int = 0 |
| | sora2_total_count: int = 0 |
| | |
| | sora2_remaining_count: int = 0 |
| | sora2_cooldown_until: Optional[datetime] = None |
| | |
| | image_enabled: bool = True |
| | video_enabled: bool = True |
| |
|
| | class TokenStats(BaseModel): |
| | """Token statistics""" |
| | id: Optional[int] = None |
| | token_id: int |
| | image_count: int = 0 |
| | video_count: int = 0 |
| | error_count: int = 0 |
| | last_error_at: Optional[datetime] = None |
| |
|
| | class Task(BaseModel): |
| | """Task model""" |
| | id: Optional[int] = None |
| | task_id: str |
| | token_id: int |
| | model: str |
| | prompt: str |
| | status: str = "processing" |
| | progress: float = 0.0 |
| | result_urls: Optional[str] = None |
| | error_message: Optional[str] = None |
| | created_at: Optional[datetime] = None |
| | completed_at: Optional[datetime] = None |
| |
|
| | class RequestLog(BaseModel): |
| | """Request log model""" |
| | id: Optional[int] = None |
| | token_id: Optional[int] = None |
| | operation: str |
| | request_body: Optional[str] = None |
| | response_body: Optional[str] = None |
| | status_code: int |
| | duration: float |
| | created_at: Optional[datetime] = None |
| |
|
| | class AdminConfig(BaseModel): |
| | """Admin configuration""" |
| | id: int = 1 |
| | admin_username: str |
| | admin_password: str |
| | error_ban_threshold: int = 3 |
| | updated_at: Optional[datetime] = None |
| |
|
| | class ProxyConfig(BaseModel): |
| | """Proxy configuration""" |
| | id: int = 1 |
| | proxy_enabled: bool |
| | proxy_url: Optional[str] = None |
| | created_at: Optional[datetime] = None |
| | updated_at: Optional[datetime] = None |
| |
|
| | class WatermarkFreeConfig(BaseModel): |
| | """Watermark-free mode configuration""" |
| | id: int = 1 |
| | watermark_free_enabled: bool |
| | parse_method: str |
| | custom_parse_url: Optional[str] = None |
| | custom_parse_token: Optional[str] = None |
| | created_at: Optional[datetime] = None |
| | updated_at: Optional[datetime] = None |
| |
|
| | class CacheConfig(BaseModel): |
| | """Cache configuration""" |
| | id: int = 1 |
| | cache_enabled: bool |
| | cache_timeout: int |
| | cache_base_url: Optional[str] = None |
| | created_at: Optional[datetime] = None |
| | updated_at: Optional[datetime] = None |
| |
|
| | class GenerationConfig(BaseModel): |
| | """Generation timeout configuration""" |
| | id: int = 1 |
| | image_timeout: int |
| | video_timeout: int |
| | created_at: Optional[datetime] = None |
| | updated_at: Optional[datetime] = None |
| |
|
| | class TokenRefreshConfig(BaseModel): |
| | """Token refresh configuration""" |
| | id: int = 1 |
| | at_auto_refresh_enabled: bool |
| | created_at: Optional[datetime] = None |
| | updated_at: Optional[datetime] = None |
| |
|
| | |
| | class ChatMessage(BaseModel): |
| | role: str |
| | content: Union[str, List[dict]] |
| |
|
| | class ChatCompletionRequest(BaseModel): |
| | model: str |
| | messages: List[ChatMessage] |
| | image: Optional[str] = None |
| | video: Optional[str] = None |
| | remix_target_id: Optional[str] = None |
| | stream: bool = False |
| | max_tokens: Optional[int] = None |
| |
|
| | class ChatCompletionChoice(BaseModel): |
| | index: int |
| | message: Optional[dict] = None |
| | delta: Optional[dict] = None |
| | finish_reason: Optional[str] = None |
| |
|
| | class ChatCompletionResponse(BaseModel): |
| | id: str |
| | object: str = "chat.completion" |
| | created: int |
| | model: str |
| | choices: List[ChatCompletionChoice] |
| |
|