Allow /model to switch between multiple models, including BYOK/local providers, in one session
- Dominant language
- Shell
- Stars
- 11.2k
- Forks
- 1.9k
- Avg merge
- 14h 16m
- Merged PRs (30d)
- 6
Description
### Describe the feature or problem you'd like to solve
BYOK mode pins a session to a single model through `COPILOT_MODEL`, and the `/model` picker only lists GitHub-hosted models. It does not list the models served by a configured local BYOK provider. As a result, I cannot select a local model from `/model`, and I cannot switch models without quitting the CLI and re-exporting `COPILOT_MODEL`. I would like the CLI to know about models from both sources, GitHub-hosted and local, and let me switch between all of them in-session through `/model`.
### Proposed solution
Make the CLI aware of multiple models across sources and selectable at runtime through `/model`. Today BYOK and offline mode (#1219) pin a session to one model, so there is no way to switch in-session or to mix a fast local model with a remote one in the same conversation. A suggested approach:
1. **Enumerate BYOK models** from the provider's `/v1/models` endpoint (OpenAI-compatible) and merge them into the `/model` picker alongside GitHub-hosted models, with a source label:
```
/model
gpt-5.1 (github)
claude-opus-4.8 (github)
google/gemma-4-12b (local)
qwen3-coder-30b (local)
```
2. **Allow an explicit list or opt-out** for users who do not want auto-enumeration, for example a `models` array in `~/.github/copilot-cli.json` or `COPILOT_MODELS="github/gpt-5.1,local/google/gemma-4-12b"`.
3. **In-session switching** through `/model ` re-points subsequent requests to the chosen model and provider, with no restart and no loss of conversation context.
4. **Coexistence of remote and local**: when not in `COPILOT_OFFLINE=true`, list both GitHub-hosted and local BYOK models together; in strict offline mode, list only the local provider's models.
Benefit: users get the same model-switching experience they already have with GitHub-hosted models, extended to local endpoints, so they can pick the right model for cost, speed, or privacy per task without restarting or re-exporting environment variables.
### Example prompts or workflows
```bash
export COPILOT_PROVIDER_BASE_URL="http://127.0.0.1:1234/v1"
export COPILOT_PROVIDER_API_KEY="local"
# not setting COPILOT_OFFLINE so remote and local are both available
export COPILOT_MODELS="github/gpt-5.1,local/google/gemma-4-12b"
copilot
```
```
/model # lists github models and local models
/model google/gemma-4-12b # switch to a local model, no restart
/model gpt-5.1 # switch back to a remote model mid-session
```
- Quick refactor on a local model, then switch to a remote model for a complex design discussion in the same session with the same context.
- Keep sensitive code on a local model while still being able to reach for a remote model when needed.
### Additional context
Related issues: #1219 (offline mode, which gave us environment-variable BYOK but a single model), #3624 (BYOM registration for local endpoints, which was closed but the picker gap remains), and #3682 (BYOK credential refresh, which is complementary and a different problem).
Contributor guide
Assessment
This issue has not been assessed yet.