123 lines
3.4 KiB
Python
123 lines
3.4 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 = "wiseclaw"
|
|
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="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 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
|