|
|
"""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 |
|
|
|