dashboard-nanobot/backend/schemas/platform.py

126 lines
3.0 KiB
Python

from typing import Any, Dict, List, Optional
from pydantic import BaseModel, Field
class PlatformSettingsPayload(BaseModel):
page_size: int = Field(default=10, ge=1, le=100)
chat_pull_page_size: int = Field(default=60, ge=10, le=500)
command_auto_unlock_seconds: int = Field(default=10, ge=1, le=600)
auth_token_ttl_hours: int = Field(default=24, ge=1, le=720)
auth_token_max_active: int = Field(default=2, ge=1, le=20)
upload_max_mb: int = Field(default=100, ge=1, le=2048)
allowed_attachment_extensions: List[str] = Field(default_factory=list)
workspace_download_extensions: List[str] = Field(default_factory=list)
speech_enabled: bool = True
class PlatformUsageItem(BaseModel):
id: int
bot_id: str
message_id: Optional[int] = None
request_id: str
channel: str
status: str
provider: Optional[str] = None
model: Optional[str] = None
token_source: str
content: Optional[str] = None
input_tokens: int
output_tokens: int
total_tokens: int
input_text_preview: Optional[str] = None
output_text_preview: Optional[str] = None
started_at: str
completed_at: Optional[str] = None
class PlatformUsageSummary(BaseModel):
request_count: int
input_tokens: int
output_tokens: int
total_tokens: int
class PlatformUsageAnalyticsSeries(BaseModel):
model: str
total_requests: int
daily_counts: List[int]
class PlatformUsageAnalytics(BaseModel):
window_days: int
days: List[str]
total_requests: int
series: List[PlatformUsageAnalyticsSeries]
class PlatformUsageResponse(BaseModel):
summary: PlatformUsageSummary
items: List[PlatformUsageItem]
total: int
limit: int
offset: int
has_more: bool
analytics: PlatformUsageAnalytics
class PlatformLoginLogItem(BaseModel):
id: int
auth_type: str
subject_id: str
bot_id: Optional[str] = None
auth_source: str
client_ip: Optional[str] = None
user_agent: Optional[str] = None
device_info: Optional[str] = None
created_at: str
last_seen_at: Optional[str] = None
expires_at: Optional[str] = None
revoked_at: Optional[str] = None
revoke_reason: Optional[str] = None
status: str
class PlatformLoginLogResponse(BaseModel):
items: List[PlatformLoginLogItem]
total: int
limit: int
offset: int
has_more: bool
class PlatformActivityItem(BaseModel):
id: int
bot_id: str
request_id: Optional[str] = None
event_type: str
channel: str
detail: Optional[str] = None
metadata: Dict[str, Any] = Field(default_factory=dict)
created_at: str
class SystemSettingPayload(BaseModel):
key: str
name: str = ""
category: str = "general"
description: str = ""
value_type: str = "json"
value: Any = None
is_public: bool = False
sort_order: int = 100
class SystemSettingItem(BaseModel):
key: str
name: str
category: str
description: str
value_type: str
value: Any = None
is_public: bool = False
sort_order: int = 100
created_at: str
updated_at: str