245 lines
7.8 KiB
Markdown
245 lines
7.8 KiB
Markdown
|
|
# 📊 Configuration Sources Analysis
|
||
|
|
|
||
|
|
## 🎯 Configuration Sources Identified
|
||
|
|
|
||
|
|
### **Bot Web UI (bot/static/index.html)**
|
||
|
|
Settings that can be changed via the web UI:
|
||
|
|
|
||
|
|
| Setting | API Endpoint | Storage | Runtime Variable |
|
||
|
|
|----------|--------------|----------|------------------|
|
||
|
|
| **DM Mood** | `GET/POST /mood` | globals.DM_MOOD | Runtime only |
|
||
|
|
| **Language Mode** | `GET/POST /language/toggle` | globals.LANGUAGE_MODE | Runtime only |
|
||
|
|
| **Evil Mode** | `GET/POST /evil-mode` | globals.EVIL_MODE | Runtime only |
|
||
|
|
| **GPU Selection** | `GET/POST /gpu-select` | memory/gpu_state.json | JSON file |
|
||
|
|
| **Server Mood** | `GET/POST /servers/{guild_id}/mood` | server_manager.servers | servers_config.json |
|
||
|
|
| **Autonomous Channel** | `POST /servers/{guild_id}/autonomous-channel` | server_manager.servers | servers_config.json |
|
||
|
|
| **Bedtime Range** | `POST /servers/{guild_id}/bedtime-range` | server_manager.servers | servers_config.json |
|
||
|
|
| **Bipolar Mode** | `POST /bipolar-mode/toggle` | globals.BIPOLAR_MODE | Runtime only |
|
||
|
|
| **Log Configuration** | `GET/POST /api/log/config` | memory/log_config.json | JSON file |
|
||
|
|
|
||
|
|
### **config.yaml (Static Configuration)**
|
||
|
|
Settings that SHOULD be in config.yaml:
|
||
|
|
|
||
|
|
| Setting | Current Location | Should Be |
|
||
|
|
|----------|------------------|-----------|
|
||
|
|
| Service URLs | config.yaml ✓ | config.yaml ✓ |
|
||
|
|
| Model Names | config.yaml ✓ | config.yaml ✓ |
|
||
|
|
| Language Mode | config.yaml | **Both!** (config default, UI override) |
|
||
|
|
| GPU Preference | config.yaml | **Both!** (config default, UI override) |
|
||
|
|
| Debug Modes | config.yaml | config.yaml ✓ |
|
||
|
|
| Timeouts | config.yaml | config.yaml ✓ |
|
||
|
|
| Port Numbers | config.yaml | config.yaml ✓ |
|
||
|
|
|
||
|
|
### **Cheshire Cat UI (Port 1865)**
|
||
|
|
Settings managed via Cheshire Cat web interface:
|
||
|
|
|
||
|
|
- Personality prompts
|
||
|
|
- Plugin configurations
|
||
|
|
- Memory settings
|
||
|
|
- Tool settings
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔄 Priority Hierarchy
|
||
|
|
|
||
|
|
```
|
||
|
|
1. Web UI Changes (highest priority)
|
||
|
|
↓
|
||
|
|
2. Runtime State (globals.py)
|
||
|
|
↓
|
||
|
|
3. JSON Files (memory/*)
|
||
|
|
↓
|
||
|
|
4. config.yaml (default values)
|
||
|
|
↓
|
||
|
|
5. Hardcoded defaults (fallback)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ⚠️ Problem Identified
|
||
|
|
|
||
|
|
### **Current Issues:**
|
||
|
|
1. **Runtime-only changes** - Web UI changes don't persist across restarts (except GPU state)
|
||
|
|
2. **No sync between sources** - config.yaml and web UI are disconnected
|
||
|
|
3. **Inconsistent storage** - Some in JSON, some in memory, some hardcoded
|
||
|
|
4. **No configuration versioning** - Can't tell if config is out of sync
|
||
|
|
|
||
|
|
### **What We Need:**
|
||
|
|
1. **Unified config manager** - Single source of truth
|
||
|
|
2. **Persistence layer** - Web UI changes saved to config
|
||
|
|
3. **Priority system** - Web UI > config > defaults
|
||
|
|
4. **Sync mechanism** - Reload config when changed
|
||
|
|
5. **API for config management** - Read/write config from anywhere
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 Solution Design
|
||
|
|
|
||
|
|
### **Hybrid Configuration System**
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────────────────────────────────────┐
|
||
|
|
│ config.yaml (Defaults) │
|
||
|
|
│ - Static configuration values │
|
||
|
|
│ - Default settings │
|
||
|
|
│ - Safe to commit to git │
|
||
|
|
└──────────────┬──────────────────────────┘
|
||
|
|
│
|
||
|
|
│ Loaded at startup
|
||
|
|
↓
|
||
|
|
┌─────────────────────────────────────────────┐
|
||
|
|
│ Runtime Configuration (Active) │
|
||
|
|
│ - Can be modified via Web UI │
|
||
|
|
│ - Can be modified via API │
|
||
|
|
│ - Can be modified via CLI │
|
||
|
|
└──────┬────────────────────┬─────────────┘
|
||
|
|
│ │
|
||
|
|
│ │
|
||
|
|
↓ ↓
|
||
|
|
┌─────────────┐ ┌─────────────┐
|
||
|
|
│ Web UI │ │ CLI/API │
|
||
|
|
│ Changes │ │ Changes │
|
||
|
|
└──────┬──────┘ └──────┬──────┘
|
||
|
|
│ │
|
||
|
|
│ │
|
||
|
|
↓ ↓
|
||
|
|
┌─────────────────────────────────────────────┐
|
||
|
|
│ config_runtime.yaml (Optional) │
|
||
|
|
│ - Overrides config.yaml │
|
||
|
|
│ - Only contains changed values │
|
||
|
|
│ - Auto-generated │
|
||
|
|
│ - DO NOT commit to git │
|
||
|
|
└──────────────┬──────────────────────────┘
|
||
|
|
│
|
||
|
|
│ Optional persistence
|
||
|
|
↓
|
||
|
|
┌─────────────────────────────────────────────┐
|
||
|
|
│ Reverted to config.yaml │
|
||
|
|
│ (on next restart if no overrides) │
|
||
|
|
└─────────────────────────────────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📝 Implementation Plan
|
||
|
|
|
||
|
|
### **Phase 1: Create Config Manager**
|
||
|
|
- [ ] Create `bot/config_manager.py`
|
||
|
|
- [ ] Implement unified loading (config.yaml + overrides)
|
||
|
|
- [ ] Implement persistence (save runtime changes)
|
||
|
|
- [ ] Implement priority system
|
||
|
|
|
||
|
|
### **Phase 2: Update API Endpoints**
|
||
|
|
- [ ] Add GET/POST `/config` endpoint
|
||
|
|
- [ ] Update existing endpoints to use config_manager
|
||
|
|
- [ ] Save runtime changes to config_runtime.yaml
|
||
|
|
|
||
|
|
### **Phase 3: Update Web UI**
|
||
|
|
- [ ] Add "System Settings" tab
|
||
|
|
- [ ] Display current config values
|
||
|
|
- [ ] Allow editing of config.yaml values
|
||
|
|
- [ ] Add "Reset to Defaults" button
|
||
|
|
|
||
|
|
### **Phase 4: Testing**
|
||
|
|
- [ ] Test config loading
|
||
|
|
- [ ] Test Web UI changes
|
||
|
|
- [ ] Test persistence
|
||
|
|
- [ ] Test config reload
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔧 Configuration Categories
|
||
|
|
|
||
|
|
### **Static (config.yaml only)**
|
||
|
|
- Service URLs
|
||
|
|
- Port numbers
|
||
|
|
- Timeout values
|
||
|
|
- File paths
|
||
|
|
- GPU device IDs
|
||
|
|
|
||
|
|
### **Hybrid (config default + UI override)**
|
||
|
|
- Language mode
|
||
|
|
- GPU preference
|
||
|
|
- Debug modes
|
||
|
|
- Model names (some)
|
||
|
|
|
||
|
|
### **Dynamic (Web UI only)**
|
||
|
|
- Mood (DM and per-server)
|
||
|
|
- Evil mode
|
||
|
|
- Bipolar mode
|
||
|
|
- Server-specific settings (autonomous channel, bedtime)
|
||
|
|
- Autonomous features
|
||
|
|
|
||
|
|
### **External (Cheshire Cat UI)**
|
||
|
|
- Personality settings
|
||
|
|
- Plugin configurations
|
||
|
|
- Memory settings
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 Configuration File Structure
|
||
|
|
|
||
|
|
### **config.yaml** (Defaults, committed)
|
||
|
|
```yaml
|
||
|
|
discord:
|
||
|
|
language_mode: english # Default, can be overridden by UI
|
||
|
|
api_port: 3939
|
||
|
|
|
||
|
|
gpu:
|
||
|
|
prefer_amd: false # Default, can be overridden by UI
|
||
|
|
amd_models_enabled: true
|
||
|
|
|
||
|
|
models:
|
||
|
|
text: llama3.1
|
||
|
|
vision: vision
|
||
|
|
evil: darkidol
|
||
|
|
japanese: swallow
|
||
|
|
|
||
|
|
# ... etc
|
||
|
|
```
|
||
|
|
|
||
|
|
### **config_runtime.yaml** (Overrides, not committed)
|
||
|
|
```yaml
|
||
|
|
# Auto-generated file - do not edit manually
|
||
|
|
# Contains values changed via Web UI that should persist across restarts
|
||
|
|
|
||
|
|
discord:
|
||
|
|
language_mode: japanese # Overridden by Web UI
|
||
|
|
|
||
|
|
gpu:
|
||
|
|
prefer_amd: true # Overridden by Web UI
|
||
|
|
|
||
|
|
# ... only changed values
|
||
|
|
```
|
||
|
|
|
||
|
|
### **memory/gpu_state.json** (Current GPU)
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"current_gpu": "amd",
|
||
|
|
"last_updated": "2026-02-15T10:30:00"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### **memory/servers_config.json** (Per-server settings)
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"123456789": {
|
||
|
|
"mood": "bubbly",
|
||
|
|
"autonomous_channel_id": 987654321,
|
||
|
|
"bedtime_hour": 22,
|
||
|
|
"bedtime_minute": 0
|
||
|
|
}
|
||
|
|
// ... per-server settings
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 Next Steps
|
||
|
|
|
||
|
|
1. **Create `bot/config_manager.py`** - Unified configuration manager
|
||
|
|
2. **Update `bot/config.py`** - Integrate config_manager
|
||
|
|
3. **Add `/config` API endpoints** - Read/write config
|
||
|
|
4. **Update Web UI** - Add config management tab
|
||
|
|
5. **Test** - Verify all configuration paths work correctly
|