From 38b1ac933e3b5d5ac3c7d066360fee6b27c092d4 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Tue, 10 Feb 2026 21:32:02 -0500 Subject: [PATCH] Add settings page, model management, and chat UX improvements - Settings infrastructure: key-value settings table, GET/PUT API, Pinia store - Configurable assistant name (default "Fable") in settings and LLM system prompt - Model catalog with 18 models in 3 categories (General Purpose, Coding, Uncensored / Creative Writing) with download/select/remove functionality - Move Ollama status indicator from chat views to global nav bar - Chat bubble layout: user messages right-aligned, assistant left-aligned - Floating dark input bar with auto-focus and circular send button - Fix HTML entity rendering (' apostrophe issue in marked/DOMPurify pipeline) - Fix new chat button navigation (fetchConversation before router.push) - Recent chats section on home page with "New Chat" button - Update summary.md with Phase 4.5 changes Co-Authored-By: Claude Opus 4.6 --- alembic/versions/0006_add_settings_table.py | 28 + frontend/src/App.vue | 15 +- frontend/src/components/AppHeader.vue | 45 ++ frontend/src/components/ChatMessage.vue | 103 +++- frontend/src/components/ChatPanel.vue | 154 +++-- frontend/src/router/index.ts | 5 + frontend/src/stores/settings.ts | 69 +++ frontend/src/types/settings.ts | 13 + frontend/src/utils/markdown.ts | 19 +- frontend/src/views/ChatView.vue | 165 +++--- frontend/src/views/HomeView.vue | 77 +++ frontend/src/views/SettingsView.vue | 607 ++++++++++++++++++++ src/fabledassistant/app.py | 2 + src/fabledassistant/models/__init__.py | 1 + src/fabledassistant/models/setting.py | 14 + src/fabledassistant/routes/chat.py | 47 +- src/fabledassistant/routes/settings.py | 22 + src/fabledassistant/services/llm.py | 4 +- src/fabledassistant/services/settings.py | 28 + summary.md | 75 ++- 20 files changed, 1257 insertions(+), 236 deletions(-) create mode 100644 alembic/versions/0006_add_settings_table.py create mode 100644 frontend/src/stores/settings.ts create mode 100644 frontend/src/types/settings.ts create mode 100644 frontend/src/views/SettingsView.vue create mode 100644 src/fabledassistant/models/setting.py create mode 100644 src/fabledassistant/routes/settings.py create mode 100644 src/fabledassistant/services/settings.py diff --git a/alembic/versions/0006_add_settings_table.py b/alembic/versions/0006_add_settings_table.py new file mode 100644 index 0000000..430b87e --- /dev/null +++ b/alembic/versions/0006_add_settings_table.py @@ -0,0 +1,28 @@ +"""add settings table + +Revision ID: 0006 +Revises: 0005 +Create Date: 2025-01-01 00:00:00.000000 +""" + +from alembic import op +import sqlalchemy as sa + +revision = "0006" +down_revision = "0005" +branch_labels = None +depends_on = None + + +def upgrade() -> None: + conn = op.get_bind() + conn.execute(sa.text(""" + CREATE TABLE IF NOT EXISTS settings ( + key TEXT PRIMARY KEY, + value TEXT NOT NULL DEFAULT '' + ) + """)) + + +def downgrade() -> None: + op.execute("DROP TABLE IF EXISTS settings") diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 5c3602e..f0397ee 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,14 +1,18 @@