Files
wiseclaw/backend/app/models.py

140 lines
3.8 KiB
Python

from datetime import datetime
from typing import Literal
from pydantic import BaseModel, Field
TerminalMode = Literal[1, 2, 3]
SearchProvider = Literal["brave", "searxng"]
ModelProvider = Literal["local", "zai"]
AutomationScheduleType = Literal["daily", "weekdays", "weekly", "hourly"]
AutomationStatus = Literal["active", "paused"]
class HealthStatus(BaseModel):
service: str = "wiseclaw"
status: str = "ok"
timestamp: datetime = Field(default_factory=datetime.utcnow)
class SettingRecord(BaseModel):
key: str
value: str
updated_at: datetime = Field(default_factory=datetime.utcnow)
class ToolToggle(BaseModel):
name: str
enabled: bool
class UserRecord(BaseModel):
telegram_user_id: int
username: str | None = None
display_name: str | None = None
is_active: bool = True
class UserProfileRecord(BaseModel):
telegram_user_id: int
display_name: str | None = None
bio: str | None = None
occupation: str | None = None
primary_use_cases: list[str] = Field(default_factory=list)
answer_priorities: list[str] = Field(default_factory=list)
tone_preference: str | None = None
response_length: str | None = None
language_preference: str | None = None
workflow_preference: str | None = None
interests: list[str] = Field(default_factory=list)
approval_preferences: list[str] = Field(default_factory=list)
avoid_preferences: str | None = None
onboarding_completed: bool = False
last_onboarding_step: int = 0
class RuntimeSettings(BaseModel):
terminal_mode: TerminalMode = 3
search_provider: SearchProvider = "brave"
model_provider: ModelProvider = "local"
local_base_url: str = "http://127.0.0.1:1234"
local_model: str = "qwen3-vl-8b-instruct-mlx@5bit"
zai_model: Literal["glm-4.7", "glm-5"] = "glm-5"
anythingllm_base_url: str = "http://127.0.0.1:3001"
anythingllm_workspace_slug: str = "benim-calisma-alanim"
tools: list[ToolToggle] = Field(
default_factory=lambda: [
ToolToggle(name="brave_search", enabled=True),
ToolToggle(name="second_brain", enabled=True),
ToolToggle(name="browser_use", enabled=True),
ToolToggle(name="gmail", enabled=True),
ToolToggle(name="google_drive", enabled=True),
ToolToggle(name="searxng_search", enabled=False),
ToolToggle(name="web_fetch", enabled=True),
ToolToggle(name="apple_notes", enabled=True),
ToolToggle(name="files", enabled=True),
ToolToggle(name="terminal", enabled=True),
]
)
class DashboardSnapshot(BaseModel):
settings: RuntimeSettings
whitelist_count: int
memory_items: int
recent_logs: list[str]
class MemoryRecord(BaseModel):
id: int
content: str
kind: str
created_at: datetime
class OllamaStatus(BaseModel):
reachable: bool
provider: ModelProvider = "local"
base_url: str
model: str
installed_models: list[str] = Field(default_factory=list)
message: str
class TelegramStatus(BaseModel):
configured: bool
polling_active: bool
message: str
class GoogleIntegrationStatus(BaseModel):
client_configured: bool
connected: bool
connect_url: str
message: str
class AnythingLLMStatus(BaseModel):
reachable: bool
workspace_found: bool
base_url: str
workspace_slug: str
message: str
class AutomationRecord(BaseModel):
id: int
telegram_user_id: int
name: str
prompt: str
schedule_type: AutomationScheduleType
interval_hours: int | None = None
time_of_day: str | None = None
days_of_week: list[str] = Field(default_factory=list)
status: AutomationStatus = "active"
last_run_at: datetime | None = None
next_run_at: datetime | None = None
last_result: str | None = None
created_at: datetime
updated_at: datetime