# Backend Switch Command Design **Date:** 2026-02-05 **Status:** Approved ## Overview Add `/backend` slash command to switch between local LLM providers (ollama, llamacpp) at runtime with lazy instantiation. ## Config Schema Extension Extend `models` with optional `local_providers` object: ```yaml models: local: provider: ollama model: qwen2.5:14b endpoint: http://localhost:11434 local_providers: llamacpp: endpoint: http://localhost:8080 # auth_token: optional ``` - `local` - Active local provider (backwards compatible) - `local_providers` - Additional provider configs keyed by name ## Command ``` /backend Show current local provider /backend ollama Switch to ollama /backend llamacpp Switch to llamacpp ``` ### Command Type ```typescript | { type: 'backend'; provider?: string } ``` ## ModelRouter Changes ```typescript // Swap local client at runtime setLocalClient(client: ModelClient, providerName: string): void // Get current local provider name for display getLocalProviderName(): string | undefined ``` ## Flow 1. User runs `/backend llamacpp` 2. Command parsed, handler receives `{ type: 'backend', provider: 'llamacpp' }` 3. Handler looks up `config.models.local_providers.llamacpp` 4. If not found → error "Backend 'llamacpp' not configured" 5. Instantiate `LlamaCppClient` with config 6. Call `router.setLocalClient(client, 'llamacpp')` 7. Report "Switched to llamacpp" ## Error Handling | Scenario | Response | |----------|----------| | `/backend` (no arg) | "Local backend: ollama" | | Unknown provider | "Unknown backend 'foo'. Available: ollama, llamacpp" | | Not configured | "Backend 'llamacpp' not configured in local_providers" | | Server down | Fail on first chat (existing error handling) | ## Files Changed | File | Change | |------|--------| | `src/config/schema.ts` | Add `local_providers` to modelsSchema | | `src/models/router.ts` | Add `setLocalClient()`, `getLocalProviderName()` | | `src/frontends/tui/commands.ts` | Add backend command parsing | | `src/frontends/tui/minimal.ts` | Handle backend command | | `src/daemon/index.ts` | Store config, add client factory function |