Settings
System configuration, database connections, theme customization, and agent registry — all managed from a single page.
Why Use Settings?
The Settings page is your control center for connecting AXIS to your infrastructure. Instead of editing YAML files manually for every change, the Settings page gives you a live view of the current configuration and lets you verify connections at a glance.
Backend Connection
Verify the API server is reachable, check the version, and see the configured endpoint URL.
Theme & Branding
View the active color palette and branding loaded from backend config. White-label ready.
Data Management
Export your settings or clear local storage to reset cached evaluation data and UI state.
Config File Reference
Understand the YAML config files that power database connections, agents, and themes.
Quick Start
Here is the recommended workflow when setting up AXIS for the first time:
Run make setup
Copies all .yaml.example templates to active config files in backend/config/. This gives you a working baseline.
Edit YAML config files
Fill in database credentials, theme colors, and agent definitions in the YAML files. Environment variables can override any value.
Start the backend & frontend
Launch with uvicorn app.main:app --port 8500 and npm run dev. The backend reads config on startup.
Open the Settings page
Navigate to /settings to confirm the backend is connected, the theme loaded, and everything looks right.
backend/config/ are gitignored. Only .example templates are tracked, so your credentials never end up in version control.
Backend Connection
The first card on the Settings page shows the API endpoint URL and a live connection status indicator. AXIS checks the backend /health endpoint on page load.
Settings
System configuration and status
NEXT_PUBLIC_API_URL environment variable. Defaults to http://localhost:8500.Database Configuration
AXIS supports four independent database connections, each configured through a dedicated YAML file. All databases are optional — the platform works offline with CSV uploads alone.
| Database | Config File | Purpose | Default Port |
|---|---|---|---|
| Eval DB | eval_db.yaml | Evaluation datasets and results | 5432 |
| Monitoring DB | monitoring_db.yaml | Production observability metrics | 5432 |
| Human Signals DB | human_signals_db.yaml | Human-in-the-loop feedback data | 5432 |
| KPI DB | kpi_db.yaml | Agent business KPI time-series | 5432 |
Connection Fields
Each database config shares the same base connection fields:
| Field | Type | Default | Description |
|---|---|---|---|
url | string | none | Full PostgreSQL connection URL (overrides individual fields) |
host | string | none | Database hostname or IP address |
port | int | 5432 | Database port |
database | string | none | Database name |
username | string | none | Authentication username |
password | string | none | Authentication password |
ssl_mode | string | prefer | SSL mode: disable, prefer, require |
auto_load | bool | false | Auto-load data from this database on startup |
url is provided, it takes precedence over the individual host/port/database fields. Format: postgresql://user:pass@host:5432/dbname.
Example YAML
Here is a minimal eval_db.yaml configuration:
eval_db:
enabled: true
auto_load: false
host: db.example.com
port: 5432
database: evaluations
username: axis_reader
password: s3cret
ssl_mode: require
dataset_query: "SELECT * FROM evaluation_dataset"
results_query: "SELECT * FROM evaluation_results"
query_timeout: 60
row_limit: 10000
Sync Engine (DuckDB)
AXIS uses an embedded DuckDB store as a local analytics cache. The sync engine pulls data from configured PostgreSQL databases and stores it locally for fast querying.
| Setting | Default | Description |
|---|---|---|
enabled | true | Enable/disable the DuckDB store |
sync_mode | startup | startup = sync on boot; manual = sync only via API call |
path | data/local_store.duckdb | File path for the DuckDB database |
sync_chunk_size | 10,000 | Rows per batch during sync |
max_sync_rows | 2,000,000 | Safety limit — warns and stops if exceeded |
query_concurrency | 8 | Max concurrent DuckDB read queries |
To trigger a manual sync, call the API endpoint:
POST /api/store/sync
max_sync_rows safety limit prevents runaway syncs. If your dataset exceeds 2M rows, increase this value in duckdb.yaml and ensure you have sufficient disk space.
Thresholds
AXIS uses numeric thresholds to determine pass/fail status and color-code metrics across dashboards. These are defined in the backend config.py and the monitoring YAML config.
Global Thresholds
| Threshold | Default | Color | Meaning |
|---|---|---|---|
| GREEN | ≥ 0.7 | Green | Good — metric is performing well |
| PASSING | ≥ 0.5 | Yellow | Acceptable — metric passes but needs attention |
| RED | < 0.3 | Red | Failing — metric requires immediate action |
Monitoring Thresholds
The monitoring database config supports per-source threshold overrides:
monitoring_db:
thresholds:
default:
good: 0.7
pass: 0.5
per_source:
alpha_bot:
good: 0.8
pass: 0.6
beta_bot:
good: 0.75
pass: 0.55
Per-source thresholds let you set stricter standards for critical agents while keeping defaults for the rest.
Feature Flags
Feature flags control which capabilities are available in the frontend. They are served by the /api/config/features endpoint and configured in the backend YAML files.
| Flag | Config Location | Default | Effect |
|---|---|---|---|
eval_runner_enabled |
eval_db.yaml |
true | Shows the Runner step in the evaluation pipeline UI |
auto_load (eval) |
eval_db.yaml |
false | Auto-loads evaluation data from database on startup |
auto_load (monitoring) |
monitoring_db.yaml |
false | Auto-loads monitoring data from database on startup |
auto_load (kpi) |
kpi_db.yaml |
false | Auto-loads KPI data from database on startup |
sync_mode |
duckdb.yaml |
startup | Controls DuckDB sync: startup or manual |
auto_load: true for databases you always want connected. Keep it false during development to avoid slow startup times when the database is unavailable.
Theme & Branding
AXIS is white-label ready. All branding strings and colors are configured through theme.yaml or environment variables — never hardcoded in the frontend.
Color Palettes
Two built-in palettes are available, and you can define custom palettes in the YAML:
sage_greenprofessional_blueBranding Fields
These text fields appear throughout the application — in the sidebar, hero section, reports, and page headers:
| Field | Default Value | Used In |
|---|---|---|
app_name | AXIS | Sidebar logo, page titles, exports |
tagline | AI Evaluation Platform | Sidebar subtitle, hero section |
subtitle | The AI Evaluation Studio | Hero section secondary text |
description | Agent X-ray Interface & Statistics | Meta descriptions, about sections |
report_footer | Report generated by AXIS AI Evaluation Platform | PDF/export report footers |
# theme.yaml
theme:
active: professional_blue
branding:
app_name: "MyCompany AI"
tagline: "Internal Evaluation Platform"
subtitle: "Quality Assurance Suite"
description: "AI evaluation and monitoring for MyCompany"
report_footer: "Generated by MyCompany AI Platform"
/api/config/theme via the useBranding() hook. Environment variables (e.g., AXIS_THEME_PRIMARY=#3D5A80) can override any YAML value at runtime.
Agent Configuration
The agent registry tells AXIS about the AI agents in your system. Agents appear in the SourceSelector dropdown and production dashboards. Configured in agents.yaml.
| Field | Required | Type | Description |
|---|---|---|---|
name | Yes | string | Internal identifier (must match source_name in data) |
label | No | string | Display name in the UI (defaults to name) |
role | No | string | Agent role description (e.g., "Customer Support") |
avatar | No | string | Path to avatar image in /public/agents/ |
description | No | string | Short description shown in tooltips |
biography | No | string | Longer narrative shown in detail views |
active | No | bool | Whether the agent appears in selectors (default: true) |
# agents.yaml
agents:
- name: alpha_bot
label: Alpha Bot
role: Customer Support
avatar: /agents/alpha_bot.png
description: Handles inbound customer requests
active: true
- name: beta_bot
label: Beta Bot
role: Order Processing
avatar: /agents/beta_bot.png
description: Manages order workflows end to end
active: true
name field must exactly match the source_name values in your monitoring and KPI data. If they don't match, the agent won't appear in filtered views.
Config Files Reference
All configuration files live in backend/config/. Only .example templates are version-controlled. Run make setup to create your local copies.
| File | Root Key | Purpose | Load Order |
|---|---|---|---|
theme.yaml |
theme: |
Color palettes, branding text, hero image settings | YAML → env vars → defaults |
agents.yaml |
agents: |
Agent registry (name, label, role, avatar) | YAML → empty list |
eval_db.yaml |
eval_db: |
Evaluation database connection and queries | YAML → env vars → defaults |
monitoring_db.yaml |
monitoring_db: |
Monitoring database, thresholds, anomaly detection | YAML → env vars → defaults |
human_signals_db.yaml |
human_signals_db: |
Human signals database connection | YAML → env vars → defaults |
kpi_db.yaml |
kpi_db: |
Agent KPI database, display config, per-source overrides | YAML → env vars → defaults |
duckdb.yaml |
duckdb: |
Local analytics cache: sync mode, limits, concurrency | YAML → defaults |
signals_metrics.yaml |
signals_metrics: |
Human Signals display overrides (KPIs, charts, colors) | YAML → defaults |
Configuration Load Order
For most config files, AXIS follows this precedence (highest wins):
- YAML config file — if present in
backend/config/ - Environment variables — override specific YAML values
- Hardcoded defaults — in
config.pydataclasses