| """Data models for Flow2API""" |
| from pydantic import BaseModel |
| from typing import Optional, List, Union, Any |
| from datetime import datetime |
|
|
|
|
| class Token(BaseModel): |
| """Token model for Flow2API""" |
| id: Optional[int] = None |
|
|
| |
| st: str |
| at: Optional[str] = None |
| at_expires: Optional[datetime] = None |
|
|
| |
| email: str |
| name: Optional[str] = "" |
| remark: Optional[str] = None |
| is_active: bool = True |
| created_at: Optional[datetime] = None |
| last_used_at: Optional[datetime] = None |
| use_count: int = 0 |
|
|
| |
| credits: int = 0 |
| user_paygate_tier: Optional[str] = None |
|
|
| |
| current_project_id: Optional[str] = None |
| current_project_name: Optional[str] = None |
|
|
| |
| image_enabled: bool = True |
| video_enabled: bool = True |
|
|
| |
| image_concurrency: int = -1 |
| video_concurrency: int = -1 |
|
|
|
|
| class Project(BaseModel): |
| """Project model for VideoFX""" |
| id: Optional[int] = None |
| project_id: str |
| token_id: int |
| project_name: str |
| tool_name: str = "PINHOLE" |
| is_active: bool = True |
| created_at: Optional[datetime] = None |
|
|
|
|
| class TokenStats(BaseModel): |
| """Token statistics""" |
| token_id: int |
| image_count: int = 0 |
| video_count: int = 0 |
| success_count: int = 0 |
| error_count: int = 0 |
| last_success_at: Optional[datetime] = None |
| last_error_at: Optional[datetime] = None |
| |
| today_image_count: int = 0 |
| today_video_count: int = 0 |
| today_error_count: int = 0 |
| today_date: Optional[str] = None |
| |
| consecutive_error_count: int = 0 |
|
|
|
|
| class Task(BaseModel): |
| """Generation task""" |
| id: Optional[int] = None |
| task_id: str |
| token_id: int |
| model: str |
| prompt: str |
| status: str |
| progress: int = 0 |
| result_urls: Optional[List[str]] = None |
| error_message: Optional[str] = None |
| scene_id: Optional[str] = None |
| created_at: Optional[datetime] = None |
| completed_at: Optional[datetime] = None |
|
|
|
|
| class RequestLog(BaseModel): |
| """API request log""" |
| 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 |
| username: str |
| password: str |
| api_key: str |
| error_ban_threshold: int = 3 |
|
|
|
|
| class ProxyConfig(BaseModel): |
| """Proxy configuration""" |
| id: int = 1 |
| enabled: bool = False |
| proxy_url: Optional[str] = None |
|
|
|
|
| class GenerationConfig(BaseModel): |
| """Generation timeout configuration""" |
| id: int = 1 |
| image_timeout: int = 300 |
| video_timeout: int = 1500 |
|
|
|
|
| class CacheConfig(BaseModel): |
| """Cache configuration""" |
| id: int = 1 |
| cache_enabled: bool = False |
| cache_timeout: int = 7200 |
| cache_base_url: Optional[str] = None |
| created_at: Optional[datetime] = None |
| updated_at: Optional[datetime] = None |
|
|
|
|
| class DebugConfig(BaseModel): |
| """Debug configuration""" |
| id: int = 1 |
| enabled: bool = False |
| log_requests: bool = True |
| log_responses: bool = True |
| mask_token: bool = True |
| created_at: Optional[datetime] = None |
| updated_at: Optional[datetime] = None |
|
|
|
|
| |
| class ChatMessage(BaseModel): |
| """Chat message""" |
| role: str |
| content: Union[str, List[dict]] |
|
|
|
|
| class ChatCompletionRequest(BaseModel): |
| """Chat completion request (OpenAI compatible)""" |
| model: str |
| messages: List[ChatMessage] |
| stream: bool = False |
| temperature: Optional[float] = None |
| max_tokens: Optional[int] = None |
| |
| image: Optional[str] = None |
| video: Optional[str] = None |
|
|