Skip to main content

Data Models

All models are defined in models.py, using SQLAlchemy 2.x declarative syntax, inheriting from DeclarativeBase. Database is SQLite with WAL mode enabled.

Entity Relationship Diagram


Photo (Screenshots)

Table name: photos

Unique constraint: (device_id, local_media_store_id) -- same device's same screenshot won't be duplicated.

Relationship: analysis -- one-to-one with Analysis, cascade delete-orphan, selectin loading strategy.


Analysis (Analysis Results)

Table name: analyses

AnalysisStatus Enum Values:

class AnalysisStatus(str, enum.Enum):
PENDING = "pending" # Waiting to be processed
PROCESSING = "processing" # Currently analyzing
DONE = "done" # Analysis complete
ERROR = "error" # Analysis failed

Conversation (Chat Conversations)

Table name: conversations

Relationship: messages -- one-to-many with ChatMessage, ordered by created_at, cascade delete-orphan.


ChatMessage (Chat Messages)

Table name: chat_messages

Properties:

  • display_content -- Returns decrypted content if encrypted_content exists, otherwise returns content

Dynamic (Dynamic Notes)

Table name: dynamics

Articles/notes generated by the background intent reasoner.


Memory (Memories)

Table name: memories

Agent memory system, divided into short-term (48h expiry) and long-term (permanent).

Unique constraint: (device_id, content_hash) -- same device won't store duplicate memories.


DeviceToken (Push Devices)

Table name: device_tokens


DeviceSyncState (Device Sync State)

Table name: device_sync_state


Skill (Skills)

Table name: skills

Default Skills:

IDNameIconDescription
summarizeSummarize Screenshots📝Analyze recent screenshots, generate summary notes
remindersExtract RemindersExtract all reminders from screenshots
researchDeep Research🔬Deep research on screenshot topics
stockStock Analysis📈Organize financial information from screenshots

MCPServer (MCP Servers)

Table name: mcp_servers


LLMConfig (LLM Configuration)

Table name: llm_config

Single-row config table (fixed id=1), stores LLM provider configuration.

:::warning Security Note api_key is stored in plaintext in the database. API responses do not return the actual value, only api_key_set: true/false. Production environments should use the EVATAR_ENCRYPTION_KEY environment variable with Fernet encryption. :::