| """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" |
| capmonster_api_key: str = "" |
| capmonster_base_url: str = "https://api.capmonster.cloud" |
| ezcaptcha_api_key: str = "" |
| ezcaptcha_base_url: str = "https://api.ez-captcha.com" |
| capsolver_api_key: str = "" |
| capsolver_base_url: str = "https://api.capsolver.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 |
|
|