DB - appsetting

abstract

Key-value store for all application-level settings: LLM provider selection, API keys, RAG parameters (top-k, score threshold), Ollama base URL, and any user preference that must survive restarts.


Table Info

PropertyValue
Table Nameappsetting
SQLAlchemy Modelbackend/app/models/settings.py :: AppSetting
Service Layerbackend/app/services/settings_service.py
MigrationSQLModel.metadata.create_all(engine) in backend/app/core/database.py :: init_db()
TimescaleDB HypertableNo

Columns

ColumnTypeNullableDefaultNotes
keyVARCHARNoPrimary key; human-readable string (e.g. "openai_api_key", "rag_top_k")
valueVARCHARYesnullStored as plain string; API keys are returned masked via GET /api/v1/settings
updated_atTIMESTAMPNodatetime.utcnow()Set at Python layer on each write via settings_service.set()

Constraints & Indexes

TypeColumnsNotes
PRIMARY KEYkeyString; upsert by key via settings_service.set()

Known Settings Keys

KeyTypeDescription
openai_api_keysensitiveOpenAI API key — returned masked
anthropic_api_keysensitiveAnthropic API key — returned masked
gemini_api_keysensitiveGoogle Gemini API key — returned masked
openrouter_api_keysensitiveOpenRouter API key — returned masked
moonshot_api_keysensitiveMoonshot API key — returned masked
minimax_api_keysensitiveMiniMax API key — returned masked
zai_api_keysensitiveZai API key — returned masked
ollama_base_urlconfigOllama server URL; falls back to LLM.OLLAMA_BASE_URL env if unset
rag_top_kconfigNumber of chunks to retrieve per query; read by GET /chat/ask-stream
rag_score_thresholdconfigMinimum similarity score for Qdrant retrieval

SQLAlchemy Model (reference snapshot)

class AppSetting(SQLModel, table=True):
    key: str = Field(primary_key=True)
    value: Optional[str] = Field(default=None)
    updated_at: datetime = Field(default_factory=datetime.utcnow)

Service Layer

OperationFileNotes
get(key, db)backend/app/services/settings_service.pyReturns value or None
get_all(db)sameReturns dict[str, str] of all rows
set(key, value, db)sameUpsert by primary key; updates updated_at

RoleLink
Settings API (read)API-GET-v1-settings
Settings API (write)API-PUT-v1-settings
Streaming chat (reads rag_top_k)API-GET-v1-chat-ask-stream
DevOpsDevOps - DocRAG