|
| 1 | +# Model Management: Beyond the Dropdown |
| 2 | + |
| 3 | +*January 2026* |
| 4 | + |
| 5 | +When you have access to 300+ LLM models, choosing one becomes a UX problem. Our model dropdown was a flat list sorted alphabetically—useful for finding a specific model, but terrible for daily use. You'd scroll past dozens of models you'd never use to find the three you actually care about. |
| 6 | + |
| 7 | +We built a proper model management system to solve this. Here's how it works. |
| 8 | + |
| 9 | +## The Problem with Flat Lists |
| 10 | + |
| 11 | +OpenRouter gives you access to models from OpenAI, Anthropic, Google, Meta, Mistral, and dozens of other providers. That's powerful, but it means your model selector looks like this: |
| 12 | + |
| 13 | +- AI21: Jamba Large 1.7 |
| 14 | +- AI21: Jamba Mini 1.7 |
| 15 | +- AionLabs: Aion-1.0 |
| 16 | +- ... (300 more) |
| 17 | +- OpenAI: GPT-4o |
| 18 | +- ... (50 more) |
| 19 | + |
| 20 | +Every time you want to switch to Claude or GPT-4, you're hunting through an alphabetical list. Most users settle on 3-5 models they actually use. The rest is noise. |
| 21 | + |
| 22 | +## Favorites First |
| 23 | + |
| 24 | +The solution is simple: **put your favorite models at the top**. |
| 25 | + |
| 26 | + |
| 27 | + |
| 28 | +The dropdown now shows three sections: |
| 29 | + |
| 30 | +1. **Favorites** — Models you've starred |
| 31 | +2. **Recent** — Models you've used recently (excluding favorites) |
| 32 | +3. **All Models** — Everything else |
| 33 | + |
| 34 | +Your most-used models are always one click away. No scrolling, no searching. |
| 35 | + |
| 36 | +## The Model Management Modal |
| 37 | + |
| 38 | +To manage favorites and browse available models, we added a dedicated modal: |
| 39 | + |
| 40 | + |
| 41 | + |
| 42 | +The left sidebar shows providers: |
| 43 | + |
| 44 | +- **Favorites** — A pseudo-provider showing all starred models |
| 45 | +- **OpenAI, Anthropic, Google** — Direct provider access |
| 46 | +- **OpenRouter** — The aggregator with 300+ models |
| 47 | + |
| 48 | +Each provider shows a count of available models and a status indicator (green = configured with API key). |
| 49 | + |
| 50 | +## Multi-Provider Architecture |
| 51 | + |
| 52 | +Under the hood, we rebuilt the model system to support multiple providers natively: |
| 53 | + |
| 54 | +``` |
| 55 | +┌─────────────────────────────────────────────────┐ |
| 56 | +│ Provider Registry │ |
| 57 | +├─────────────┬─────────────┬─────────────────────┤ |
| 58 | +│ OpenAI │ Anthropic │ Google │ |
| 59 | +│ (has API) │ (manual) │ (manual) │ |
| 60 | +├─────────────┴─────────────┴─────────────────────┤ |
| 61 | +│ OpenRouter │ |
| 62 | +│ (has API - 300+ models) │ |
| 63 | +└─────────────────────────────────────────────────┘ |
| 64 | +``` |
| 65 | + |
| 66 | +**Providers with APIs** (OpenAI, OpenRouter) can fetch their model lists automatically. Click "Fetch" and the system pulls the latest models, detects capabilities (tools, vision, reasoning), and saves them to your config. |
| 67 | + |
| 68 | +**Manual providers** (Anthropic, Google) don't expose public model listing APIs, so we provide suggestion chips for common models. You can also add any model ID manually. |
| 69 | + |
| 70 | +## Capability Detection |
| 71 | + |
| 72 | +Each model shows capability badges: |
| 73 | + |
| 74 | +| Badge | Meaning | |
| 75 | +|-------|---------| |
| 76 | +| 🔧 | Supports tool/function calling | |
| 77 | +| 👁 | Supports vision (image input) | |
| 78 | +| 💡 | Reasoning model (extended thinking) | |
| 79 | + |
| 80 | +For API-fetched models, we detect these automatically from the provider's metadata. For manual models, you set them when adding. |
| 81 | + |
| 82 | + |
| 83 | + |
| 84 | +## Persistent Storage |
| 85 | + |
| 86 | +Your favorites, recent models, and provider settings persist in `~/.forge/models_config.json`: |
| 87 | + |
| 88 | +```json |
| 89 | +{ |
| 90 | + "version": "1.0", |
| 91 | + "providers": { |
| 92 | + "anthropic": { |
| 93 | + "enabled": true, |
| 94 | + "models": { |
| 95 | + "claude-sonnet-4": { |
| 96 | + "display_name": "Claude Sonnet 4", |
| 97 | + "favorited": true, |
| 98 | + "capabilities": { "tools": true, "vision": true } |
| 99 | + } |
| 100 | + } |
| 101 | + } |
| 102 | + }, |
| 103 | + "recent_models": [ |
| 104 | + { "provider": "openai", "model_id": "gpt-4o" } |
| 105 | + ] |
| 106 | +} |
| 107 | +``` |
| 108 | + |
| 109 | +This means your preferences survive restarts and can be shared across machines. |
| 110 | + |
| 111 | +## REST API |
| 112 | + |
| 113 | +The model management system exposes a full REST API: |
| 114 | + |
| 115 | +```bash |
| 116 | +# List providers and their status |
| 117 | +GET /providers |
| 118 | + |
| 119 | +# Get all models grouped by provider |
| 120 | +GET /models/grouped |
| 121 | + |
| 122 | +# Fetch models from a provider's API |
| 123 | +POST /models/fetch |
| 124 | +{"provider": "openrouter"} |
| 125 | + |
| 126 | +# Add a model manually |
| 127 | +POST /models |
| 128 | +{"provider": "anthropic", "model_id": "claude-opus-4"} |
| 129 | + |
| 130 | +# Toggle favorite |
| 131 | +PUT /models/{provider}/{model_id} |
| 132 | +{"favorited": true} |
| 133 | + |
| 134 | +# Get suggestions for manual providers |
| 135 | +GET /models/suggestions/anthropic |
| 136 | +``` |
| 137 | + |
| 138 | +This enables building custom UIs or scripts that manage your model configuration. |
| 139 | + |
| 140 | +## Migration from Legacy |
| 141 | + |
| 142 | +If you were using the previous OpenRouter-only model cache, the system automatically migrates your data on first launch. Models are imported with a `legacy` source tag so you can distinguish them from freshly-fetched models. |
| 143 | + |
| 144 | +## What's Next |
| 145 | + |
| 146 | +The model management system is live now. Future improvements we're considering: |
| 147 | + |
| 148 | +- **Model search** — Filter by name, provider, or capability |
| 149 | +- **Usage stats** — Track which models you use most |
| 150 | +- **Cost estimates** — Show pricing in the dropdown |
| 151 | +- **Model groups** — Create custom collections (e.g., "Fast models", "Coding models") |
| 152 | + |
| 153 | +Try it out: click the gear icon next to the model selector, or check the [getting started guide](/docs/getting-started). |
| 154 | + |
| 155 | +--- |
| 156 | + |
| 157 | +*This is part of a series on building Agentic Forge. See also: [Multi-Provider Orchestrator](/blog/multi-provider-orchestrator), [Streaming Tool Calls](/blog/streaming-tool-calls).* |
0 commit comments