Menu

Cosmo Wiki

Database

SQLite database layer, repositories, logging, and persistence tables.

Database and Repository Layer

SQLite is the central persistence mechanism. Runtime repositories provide CRUD-style access for users, conversations, memories, events, logs, faces, system state, local commands, personality metadata, and database metrics.

# cosmo/data/database/database.py
db = Database()

# Connection parameters:
database_path = "cosmo/data/database/cosmo.db"
row_type = sqlite3.Row
foreign_keys = ON
journal_mode = WAL
synchronous = NORMAL

Schema Overview

erDiagram
    users ||--o{ memories : has
    users ||--o{ conversations : has
    users ||--o{ faces : has
    events {
        integer id PK
        text type
        text payload
        timestamp created_at
    }
    system_state {
        text key PK
        text value
    }
    local_commands {
        integer id PK
        text intent
        text phrase
        text language
        integer active
        timestamp created_at
    }
    logs {
        integer id PK
        text level
        text logger
        text message
        text module
        text function
        integer line
        text exception
        timestamp created_at
    }
    faces {
        integer id PK
        integer user_id FK
        text encoding_path
    }

Repository Types

RepositoryPathTablesKey methods
UserRepositoryrepositories/user_repository.pyusersget_or_create_user(), get_user_by_id(), update_last_seen(), save_face_id().
ConversationRepositoryrepositories/conversation_repository.pyconversationsadd_message(), get_recent_conversation_context(), clear_history().
MemoryRepositoryrepositories/memory_repository.pymemoriesadd_memory(), add_memory_if_new(), get_recent_memories(), memory_exists().
EventRepositoryrepositories/event_repository.pyeventsemit_event(), get_recent_events().
SystemRepositoryrepositories/system_repository.pysystem_stateset_state(), get_state(), delete_state().
FaceRepositoryrepositories/face_repository.pyfacescreate_face(), get_faces_by_user(), delete_face().
LocalCommandRepositoryrepositories/local_command_repository.pylocal_commandsget_active_commands(), add_command_phrase(), disable_command_phrase().
PersonalityCommandRepositoryrepositories/personality_command_repository.pypersonality aliases, number words, command wordsget_active_parameter_aliases(), get_active_number_words(), get_active_command_words().
MemoryFilterRepositoryrepositories/memory_filter_repository.pyblocked terms, noise markers, settingsget_blocked_terms(), get_noise_markers(), get_setting().
LogRepositoryrepositories/log_repository.pylogsadd_log(), get_recent_logs().
DatabaseMetricsRepositoryrepositories/database_metrics_repository.pyall core tablesget_metrics().

Logging System

Cosmo logs to console, file, and SQLite simultaneously through LoggerManager. SQLite log rows are richer than the older logger_name-only shape.

CREATE TABLE logs (
    id INTEGER PRIMARY KEY,
    level TEXT,
    logger TEXT,
    message TEXT,
    module TEXT,
    function TEXT,
    line INTEGER,
    exception TEXT,
    created_at TIMESTAMP
);
ColumnMeaning
idSQLite row id.
levelLog severity.
loggerLogger name; logger_name is accepted as an input alias by LogRepository.add_log().
messageRendered log message.
moduleSource module when available.
functionSource function when available.
lineSource line number when available.
exceptionException text/trace detail when available.
created_atTimestamp, defaulting to SQLite datetime('now').

Imported historical logs may infer module and function from message patterns and leave line as null.

Log Search

LogRepository.get_recent_logs() applies filters at SQL level before ORDER BY id DESC LIMIT ?. Search currently spans level, logger, message, module, function, line, exception, and created_at. Dedicated filters exist for level, logger_name, module, and function.

Database Metrics

The WebUI compact snapshot exposes database metrics through DatabaseMetricsRepository.get_metrics().

  • database_size_bytes and database_size_human.
  • users_count, memories_count, conversations_count, events_count, logs_count, and faces_count.
  • last_event_type and last_log_level.

Face Persistence

FaceRepository is present as a persistence layer for face records and encoding paths. It should be treated as groundwork for enrollment/recognition; the current vision pipeline detects faces but does not enroll users, generate identity embeddings, or match identities.

Async Event Bus Tracing

TraceMeaning
queued [uuid]Event accepted into queue.
queue_wait [uuid] [seconds]Time between creation and dispatch.
high_queue_latency [uuid]Queue wait exceeded 5 seconds.
no_listeners [uuid]No listeners were registered; event is still counted as completed.
listener_timeout [uuid] [listener_name]Listener exceeded 30s timeout.
event_partial_failure [uuid]Mixed success/failure.