vLLM-CopilotYour vLLM-served models inside GitHub Copilot and the VS Code Agents window. Built for teams and production. GitHub Copilot provides the familiar chat, tools, and model picker; you provide the model. Requests to your models (prompts, code, context) are never sent to Copilot! Multi-server, multi-user. Full vLLM request control, live observability, strict data residency. Also works with OpenRouter (400+ cloud models, no local infrastructure, many free options), llama.cpp, LM Studio, and Ollama. For teams running AI on their own vLLM servers for many users, this gives you the professional Copilot integration:
For full view expand the details-arrow:
|
|
Let Copilot write your model config for you
|
Your AI can build a valid
No workspace files are created; the schema is served from the extension itself. |
Add OpenRouter Model (full provider support, cost tracking and auto selection)
|
Remote (SSH/WSL/Containers): This extension runs on the remote host (
extensionKind: workspace). Install it while connected to the remote window and VS Code places it on the remote extension host automatically. If you installed it locally first, the remote won't pick it up on its own. Install it on the remote explicitly (Extensions view → Install in SSH: … / WSL: … / Dev Container: …).
What makes this different from BYOK?
VS Code's built-in Custom Endpoint (BYOK) handles chat, tools, vision, streaming, and a
thinking-effort picker. It also supports a subset of basic inference parameters, such as
temperature and top_p, configured for a model.
vLLM-Copilot is for users who want the full vLLM request surface and a richer workflow around it. It lets you define model modes: named configurations you switch between from the model picker. One model can have separate configurations for reasoning, precise coding, and creative work, including their sampling and vLLM-specific request settings.
| Feature | BYOK | vLLM-Copilot |
|---|---|---|
| Chat, tools, vision | ✅ | ✅ |
| Multiple servers (per-model endpoint) | ✅ | ✅ |
| Custom request headers (auth tokens) | ✅ | ✅ |
| Thinking-effort picker (enum only) | ✅ | ✅ (as model mode) |
| Output Length picker (predefined response caps) | ❌ | ✅ (second picker dropdown) |
Arbitrary chat_template_kwargs (including enable_thinking) |
❌ | ✅ (switchable per model mode) |
Sampling params (basic: temperature, top_p) |
✅ (fixed per model) | ✅ (configurable per model and per model mode) |
Advanced sampling parameters (top_k, min_p, repetition_penalty, length_penalty, etc.) |
❌ | ✅ (switchable per model mode) |
| Named model configurations (model modes) | ❌ | ✅ |
| Full per-model configuration (endpoint, headers, capabilities, token budgets, sampling, and modes) | ✅ (partial) | ✅ |
| Personality presets | ❌ | ✅ |
| Hidden System Instructions (capture & replace) | ❌ | ✅ |
| Auto-continue on empty responses | ❌ | ✅ |
| Chat session cleanup across workspaces | ❌ | ✅ |
| Token usage & throughput stats per request | ❌ | ✅ |
Enterprise & team deployment
vLLM-Copilot gives companies (and individuals) controlled access to GitHub Copilot through their own inference infrastructure. Operations get live serving metrics, per-model usage and cost tracking. Broken model output is repaired automatically before it reaches your team.
No subscription. No third party receives work content beyond the configured inference server. No affiliation. No central service. No telemetry. GitHub Copilot supplies the familiar chat, tools, model picker, and other interaction features. Prompts, code, and company data go only to the configured inference server, never to GitHub Copilot or GitHub. Other extension traffic carries no work content; it is limited to model metadata, configuration, metrics, and service status.
- Multi-server at scale: add any number of vLLM servers and use their models interchangeably. Each server and model keeps its own endpoint, auth, sampling, and token budget, giving you isolation across teams, environments, or credentials.
- Per-model credentials: every model entry carries its own
requestHeaders/ auth, so different scopes and keys are managed independently rather than sharing one global key. - Cost tracking per model: cumulative token and USD spend (Today / Overall), with OpenRouter models preferring their actual reported cost (
usage.cost). - Reliability for daily use: models misbehave, and this extension repairs it (see Robustness below), alongside bounded
Retry-Afterhandling, TLS/proxy/cert diagnostics, and chat session cleanup.
Server Dashboard
Open it with the V icon in the activity bar (left sidebar).
|
The live observability that makes it worthwhile for teams. A native sidebar (no webviews, no extra ports) shows live metrics per server, showing only the rows each backend actually reports:
|
Live server metrics with Last Request details: token counts with context/budget percentages, TTFT (reported vs. measured), generation throughput, and queue time. |
Robustness
Models misbehave. Instead of letting a bad response reach your team, the extension repairs the stream so they see working output. This is the difference between a demo and a daily driver.
- Auto-continue on empty or truncated responses. Some models (notably Qwen) occasionally return zero tokens or stop mid-sentence. The extension retries with an assistant prefill, so you never see a blank or cut-off answer. Configurable per model (
autoContinueRetries, default 1). - Tool-call repair. When a model truncates a tool call mid-JSON (
finish_reason: 'length'), the extension recovers the partial call withjsonrepair+best-effort-json-parser. These are the same libraries Copilot's BYOK uses, so the call is not dropped to empty{}. - Bounded retries. Transient server errors are retried once, honoring
Retry-After(capped at 10 s), and never after partial output has already been streamed. - Connection diagnostics. Corporate proxy? TLS-inspecting gateway? Missing intermediate certs? Test & Refresh Models verifies servers are reachable, lists loaded models, and corrects ID mismatches. Diagnose Connection runs a deep report comparing SChannel vs. OpenSSL, DNS/TCP reachability, cert-chain inspection, proxy detection, and a settings dump, with a one-line failure classification.
Features
Model Settings
Open it with the V icon in the activity bar (left sidebar); it sits below the Dashboard.
|
A visual editor for per-model configuration, no
|
Edit model configuration in a visual editor. No |
|
Model modes are named parameter presets you switch between from the Copilot model picker, like profiles for different tasks: deep reasoning, precise coding, creative work. Each mode merges its parameters into the vLLM request on top of the model defaults.
Output length is its own control. Models and presets whose Add vLLM Server & Model auto-generates modes from bundled presets (or OpenRouter reasoning metadata). An example config and the full syntax are in the Manual → Model modes. |
Switch between model modes directly from the Copilot model picker: Think, No Think, Precise, etc.
Dropdown not showing right after an update? Open the model list and click the Output Length chip (arrow). One click heals VS Code's stale picker snapshot. |
Hidden System Instructions (capture & replace). Copilot injects ~21KB of hidden safety and identity rules into every request. Capture them, then replace them:
- Set
vllm-copilot.systemMessageCapture: true - Unique system messages are written to
.vllm/system-messages.json - Write a JSON file of find/replace rules
- Point
systemMessageReplacementsFileat it on the model entry
Replacements are exact substring matches, applied sequentially to every system message before it reaches vLLM.
Workspace custom instructions. .github/copilot-instructions.md, AGENTS.md, and CLAUDE.md are merged into the system message, the same way VS Code handles workspace-level custom instructions.
Personalities & System Prompts
This uses the System-Instructions-Replacement of above with pre-made instructions. Two ways to control what the model sees as its system prompt.
Personality presets replace Copilot's ~21KB of system-prompt boilerplate with something useful. Pick one per model (Model Settings → General, or Set Model Personality); Default restores the original. The choice follows you across workspaces.
| Preset | What it does |
|---|---|
| Default (no personality) | No replacements; Copilot's original system prompt |
| Raw (Model Natural) | Strips Microsoft's safety, identity, and behavioral boilerplate. No persona injected. |
| Supportive Mentor | Patient mentor who builds better engineers. High standards, honest feedback, explains the why. |
| Critical Senior Dev | Cold architectural judgment. Evaluates code and trade-offs with zero sentiment. |
| Sarcastic Robot | Brilliant, condescending, politically incorrect. Fixes your code anyway. |
| Spartan | Minimalist replies: short, little to read, to the point. Saves tokens. |
Bundled presets are extension-owned and re-synced on every apply; custom behavior belongs in your own replacement file (below) or a user-created personality.
Chat Session Cleanup
Copilot accumulates session data across workspaces. Clean Copilot Sessions lets you pick which workspaces to wipe when sessions grow stale. Access via Ctrl+Shift+P → Clean Copilot Sessions (under Utilities).
Servers & backends
vLLM request controls
Beyond the basics, vLLM request-body parameters give you full request control: structured_outputs (JSON / regex / grammar constraints), bad_words, repetition_detection, chat_template_kwargs (enable_thinking, preserve_thinking), thinking_token_budget, stop-token control, min_tokens, allowed_token_ids, and more. Configure them in defaultParams (model-wide) or modelModes (switchable from the picker). The BYOK Custom Endpoint exposes none of these. Every parameter, its range and backend support: configuration reference.
Supported servers
vLLM is the primary target and gets the full feature set. llama.cpp, LM Studio, Ollama, and OpenRouter are supported alongside it with the core features.
| Backend | Status | Notes |
|---|---|---|
| vLLM | ✅ Primary | Full feature set: vLLM request parameters, per-request server metrics, all dashboard rows |
| llama.cpp | ✅ Core | OpenAI-compatible /v1/chat/completions; context window from /v1/models |
| LM Studio | ✅ Core | Same as llama.cpp |
| Ollama | ✅ Core | Same as llama.cpp; tool_choice values are dropped (the parameter isn't supported by Ollama's API), tool calling itself works |
| OpenRouter | ✅ Managed remote | Fixed endpoint https://openrouter.ai/api; host-only detection; model picked from the ~415-model catalog |
The backend is auto-detected on Add Server and in Model Settings; set it explicitly per model via serverType.
Every backend gets: native Copilot integration (chat, tools, vision, streaming), model modes, output length picker, personality presets, hidden-system-prompt capture & replace, per-server auth/sampling/token budget, auto-continue on empty responses, token usage & cost tracking, and Test & Refresh / Connection Diagnostics.
vLLM-only: vLLM-specific request parameters, per-request server metrics (TTFT/TPOT, KV cache, speculative decoding), and the Deep-Dive webview. Other backends show client-measured throughput instead; the dashboard shows only the rows each backend actually reports and resolves the model's context window per backend.
Using OpenRouter
OpenRouter is a managed remote: no server to run, nothing to install. Add one fixed endpoint and pick from ~415 cloud models. Setup is covered in Quick Start above. A :free suffix is a routing variant and always stays on the free model. Full guide, manual config, and attribution headers: OpenRouter guide.
Server Deep-Dive (vLLM)
|
Right-click a vLLM server node → vLLM Deep-Dive opens a per-server webview with the full metric set: histogram breakdowns (TTFT/TPOT/token counts) as hoverable bars and the raw metric dump. vLLM-only, since non-vLLM backends don't expose |
Full per-server metrics with live polling, histogram breakdowns, and raw metric dump. |
Commands
| Command | What it does |
|---|---|
| Add vLLM Server & Model | Guided flow: enter server URL → discover models → auto-configure → save. An openrouter.ai server URL routes into the OpenRouter flow (server → key → model pick) |
| Test & Refresh Models | Verify servers, list models, correct ID mismatches, check network settings |
| Set Model Personality | Pick a model, pick a personality preset (or Default to clear), apply instantly |
| vLLM Deep-Dive | Open per-server webview with full metrics and histograms (right-click a vLLM server node) |
| Diagnose Connection | Deep TLS/proxy/DNS/cert diagnostic report |
The full command list, including auth rotation, model/server removal, log tools, and session cleanup: Manual → Commands.
Development
Dev setup, project rules, and the dependency license policy (permissive-only allowlist enforced by npm run license:check in the build, THIRD-PARTY-NOTICES.txt regenerated with npm run license:notices): CONTRIBUTING.md.
Support
If vLLM-Copilot saves you time, money, or your sanity, consider fueling the caffeine habit behind it:
- PayPal: paypal.me/DieterSchwarzmann
- Ko-fi: ko-fi.com/fuzzifikation
- GitHub Sponsors: github.com/sponsors/fuzzifikation
Every donation is appreciated, even a coffee. It keeps local AI development free and open source.
More details
This page covers the essentials. Every setting, parameter, and backend detail is in the vLLM-Copilot Manual.
Your vLLM servers are not limited to VS Code: the GitHub Copilot CLI terminal agent runs on them too, via three environment variables. And since v1.35.0 your models work in the VS Code Agents window ("Open in Agents"), enabled automatically with nothing to configure.
License
MIT License
Copyright (c) 2026 Systemwissenschaften TGU, TTI GmbH
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
