DB - llm_provider_configs
abstract
Stores encrypted API keys for each LLM provider (Anthropic, OpenAI, Gemini, OpenRouter, Ollama) — one row per provider — with active status and a masked display hint.
Table Info
| Property | Value |
|---|---|
| Table Name | llm_provider_configs |
| SQLAlchemy Model | backend/db/models.py :: LLMProviderConfig |
| Pydantic Schema | backend/api/routes/settings.py :: ProviderStatus / SaveProviderRequest |
| Migration File | alembic/versions/ |
| TimescaleDB Hypertable | No |
| Partition Column | — |
Columns
| Column | SQLAlchemy Type | Nullable | Default | Description |
|---|---|---|---|---|
id | Integer | No | auto | Primary key |
provider | String(32) | No | — | Provider name: openai | gemini | anthropic | openrouter | ollama (UNIQUE) |
encrypted_api_key | Text | No | — | Fernet-encrypted API key |
key_hint | String(50) | Yes | null | Masked display hint (e.g., sk-...abcd) |
is_active | Boolean | No | True | Whether this provider is available for task assignment |
created_at | DateTime(timezone=True) | No | datetime.now(UTC) | Row creation timestamp |
updated_at | DateTime(timezone=True) | No | datetime.now(UTC) | Last updated timestamp |
Constraints & Indexes
| Name | Type | Columns | Purpose |
|---|---|---|---|
pk_llm_provider_configs | PRIMARY KEY | id | Row uniqueness |
uq_provider | UNIQUE | provider | One config per provider |
SQLAlchemy Model (reference snapshot)
class LLMProviderConfig(Base):
__tablename__ = "llm_provider_configs"
id: Mapped[int] = mapped_column(Integer, primary_key=True)
provider: Mapped[str] = mapped_column(String(32), unique=True, nullable=False)
encrypted_api_key: Mapped[str] = mapped_column(Text, nullable=False)
key_hint: Mapped[str | None] = mapped_column(String(50), nullable=True)
is_active: Mapped[bool] = mapped_column(Boolean, default=True)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=lambda: datetime.now(UTC))
updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
default=lambda: datetime.now(UTC),
onupdate=lambda: datetime.now(UTC),
)🗂️ Related
| Role | Link |
|---|---|
| API Endpoint | API-POST-v1-Settings |
| Frontend Page | Page - Settings |
| Related Table | DB - task_llm_assignments |