| | """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 |
| |
|
| | |
| | ban_reason: Optional[str] = None |
| | banned_at: Optional[datetime] = None |
| |
|
| |
|
| | 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 CaptchaConfig(BaseModel): |
| | """Captcha configuration""" |
| | id: int = 1 |
| | captcha_method: str = "browser" |
| | yescaptcha_api_key: str = "" |
| | yescaptcha_base_url: str = "https://api.yescaptcha.com" |
| | website_key: str = "6LdsFiUsAAAAAIjVDZcuLhaHiDn5nnHVXVRQGeMV" |
| | page_action: str = "FLOW_GENERATION" |
| | browser_proxy_enabled: bool = False |
| | browser_proxy_url: Optional[str] = None |
| | created_at: Optional[datetime] = None |
| | updated_at: Optional[datetime] = None |
| |
|
| |
|
| | class PluginConfig(BaseModel): |
| | """Plugin connection configuration""" |
| | id: int = 1 |
| | connection_token: str = "" |
| | auto_enable_on_update: 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 |
| |
|