Repository navigation
Releases: fuzzifikation/vLLM-Copilot
Release list
v1.37.0
Code restructuring that prepares the extension for dsh integration: the model request machinery (config resolution, request assembly, transport, personalities, usage accounting) now lives in a host-neutral core other tools can reuse without the editor. Nothing user-facing changed; behavior, features and defaults match v1.36.16.
1.36.16
A new status bar chip shows the last reply's model, cost and speed. Idea from @quanghona on GitHub.
Also: Clean Copilot Sessions improved.
Added
- Last request in the status bar. A chip shows the last served model's glyph (OpenRouter or vLLM) and its generation speed; hovering reports that reply's cost, token split, timings and session maxima, clicking opens the Dashboard (
vllm-copilot.statusBar.enabledto hide). Speed maxima count only runs that decoded for at least 3 s; shorter replies cannot be timed reliably. Idea from @quanghona in #10, thanks! - Orphaned conversations get their own cleanup entry. Clean Copilot Sessions gains an entry for conversations belonging to no readable workspace folder; selecting it removes only those.
- Catalog maintenance can be retried. Maintain Copilot catalog rebuilds the search index and retries compaction without deleting conversations, and stays available even when no sessions remain.
- Whole-catalog wipe misses nothing. A confirmed wipe also removes conversations whose session file is already gone; scoped cleanup warns about those instead of guessing where they belong.
- Memory cleanup stays available. Copilot memory options remain selectable after the session history is gone, and the summary says what was deleted, absent or failed.
Changed
- The extension is workspace-only. In a remote window (SSH, WSL, containers) it now runs on the remote machine, so
localhost:8000keeps meaning your server instead of your laptop. - The model picker shows what a model costs. Hovering a model reports its configured price per 1M tokens, such as
$0.30 in · $1.20 out. Models without configured rates show nothing new. - Cost is USD only. Set Cost no longer offers a second currency, and a stored
AI Creditsvalue now renders as that literal label rather than a wrong$.
Fixed
- Clean Copilot Sessions now actually deletes your conversations. Before, it removed only the session list and every prompt and reply stayed readable in Copilot's database. It now deletes the text and folders too, and compacts the database; memory is kept unless you opt in.
- First-model setup reaches Agents. Models added after startup now enable Agent Host access automatically.
- Model Settings survives a hand-edited value. A quote character in a numeric field broke the settings form; such values now display correctly.
- The Dashboard no longer prints a dollar sign on a non-dollar rate. A model priced in another currency showed
$in the Pricing row while the totals beneath it showed the real unit.
v1.36.16-rc2
Release candidate 2 of v1.36.16, feature build for issue #10 testing.
New in this build: last-request status bar chip. Shows the served model's glyph (OpenRouter or vLLM) and its generation speed. Hover for that reply's cost, token split, prompt-processing estimate, timings and session maxima; click focuses the Dashboard. Toggle: vllm-copilot.statusBar.enabled.
Install: download the .vsix below, then in VS Code: Extensions view, "..." menu, "Install from VSIX".
All stats are in memory only, nothing is persisted, no endpoint is polled.
v1.36.13 - Video Guides
One thousand downloads. Thank you for riding with us.
Added
- Video guides. Four short walkthroughs (Getting Started 7:43, Server Dashboard 1:35, System Prompt Replacement and Personalities 8:49, OpenRouter Integration 6:22) are linked at the top of the README as a clickable grid.
v1.36.11
v1.36.11
The Model Selector becomes a complete model list that only plots the benchmark-scored ones.
- Model Selector lists every OpenRouter model. Everything is searchable; a model without benchmark data shows one row at catalog price with quality
-. Selecting it loads its provider rows as before. - Searching highlights instead of deleting. The chart keeps all its dots while you type; matches get a ring, Enter picks the best one.
- One search in both Webviews. Model Selector and the Model Settings dropdown now share the same typo-tolerant matcher:
dskv4findsdeepseek/...-v4. - Tool-calling and image-input filters. Two checkboxes narrow list and plot. Tool-calling is on by default, image input off.
- Sortable columns. Click a header to order models by name, price, context, latency, throughput or quality; click again to reverse.
- OpenRouter no longer goes red on one slow probe. Health now uses a small key check instead of the ~1 MB catalog download; a failing catalog is only a yellow warning. Any transient probe failure keeps the last good reading for three polls.
- OpenRouter models stay in the Model Picker when the catalog download fails. The last good catalog carries the picker until the next success.
- A model OpenRouter removed is marked on the Dashboard. Red marker, "not on OpenRouter anymore", tooltip points to the Model Selector for a replacement.
- The custom headers box masks its input like the API key box. Format errors still show live under the box, and a rejected paste is called out as possibly truncated.
- Big-output models no longer squeeze the prompt. Any newly added model with an output budget over 16k gets an Output Length menu (halving steps down to 16384) with a default near 10% of the window, so a 131k output cap on a 262k model no longer reserves all the space for replies. This includes preset budgets from
model-configs/, which are now re-fitted to the context window the server actually reports.
v1.36.6
v1.36.6
Fixed
- Your personality stays recognized after an update. The goal: the Model Settings dropdown always tells you the truth about which personality a model uses. Since 1.36.4 some models showed their applied preset as "(user file)" after updating, even though the personality itself still worked. That mislabel is gone: your presets are recognized again, and "(user file)" now appears only for files you attached yourself.
v1.36.5
v1.36.5
UI/UX Improvements
- Draft positions under Spec Decode. The goal: see how deep speculation actually pays off. The Spec Decode server row expands to a Draft positions row showing how acceptance probability decays across a draft's depth, straight from vLLM's per-position counter. A steep early drop means the draft length runs past what the target model keeps.
- OpenRouter rows open their web page. The goal: jump from the dashboard to whatever that row is on the web. Right-click an OpenRouter server row → Open opens openrouter.ai, a model row opens that model's page, the Account row opens your OpenRouter profile settings. Model and Account rows carry the button inline too.
Fixed
- The MTP row is now Spec Decode. The metrics behind it are method-agnostic, so an EAGLE, Medusa, or n-gram server was labeled after the wrong method, and the tooltip claimed MTP and speculative decoding were the same thing.
v1.36.0 — The server registry
Everything since v1.35.1 in one release: servers are now their own registry (vllm-copilot.servers, self-migrating), each credential identity is its own server with its own Dashboard node, backend type and name — plus Add Server (no model), per-project workspace overrides, and a searchable model picker in Model Settings.
Install: download the .vsix below, then in VS Code: Extensions ⋯ Deploy Extension from VSIX Package. A full VS Code restart after updating is recommended.
v1.36.0 - The server registry
The goal of this release: with server facts stored inside every model entry, any server-level feature had to be built, stored and edited once per model copy, and none of the server-level UX and UI improvements we want could land. Servers becoming one registry entry each is the backbone for them. This release lays that foundation; the features built on it come later.
Added
- Searchable model picker in Model Settings. OpenRouter's ~400-model catalog is now navigable: click the model dropdown, type to narrow - any part of the id matches - arrow keys move through the matches, Enter or a click selects. Same behavior on every backend.
- Servers without a model. A new vLLM-Copilot: Add Server (no model) command registers a server on its own, and Remove Server sits in the Dashboard's server context menu. Model list and registry never drift apart.
Changed
-
Breaking: servers are now a registry. Connection settings (URL, headers, backend type, label) move out of each model entry into a new
vllm-copilot.serverssetting; every model references its server's entry id. This is the one breaking change of the release, and it migrates itself: on first start, models sharing URL + credentials become one entry each, differing credentials stay separate servers. The migration never deletes a settings value; hand-edited leftovers are kept and reported in the Output channel. Rolling back means restoringsettings.jsonby hand or an older VSIX. -
Every entry is its own server. Two entries on one URL (two OpenRouter keys, two tenants on one gateway) get their own Dashboard node, Deep-Dive panel, backend type, and name. Rename Server renames exactly the entry you right-click, OpenRouter entries included. Remove Server deletes exactly that entry, and still refuses while any model references it.
http://EXAMPLE.com,http://example.com, andhttp://example.com:80are one server. New model ids read<model> on <server entry id>, so two models on one host can never collide. -
Workspace settings override per-project - on purpose. A
vllm-copilot.models/vllm-copilot.serverscopy in a workspace.vscode/settings.jsonreplaces your global config for that folder: different projects, different servers and model sets. Command and Dashboard edits then write to the layer that is actually in effect (the workspace copy when one exists), so edits never vanish into an invisible layer. Only override in folders you trust - a repo's settings file decides which servers receive your requests and headers.
Fixed
- Various bug fixes: Deep Dive no longer revives old credentials after you rotate a server's auth, and the OpenRouter provider list refreshes after a key swap.
- Test & Refresh is faster and gentler on your servers. Each server's model list is fetched once per pass, regardless of how many models it hosts. Ten models on one vLLM box used to mean ten identical requests, and OpenRouter's ~500 KB catalog was downloaded per model per pass.
- Model Settings lists real models for LM Studio and Ollama. Each backend is now asked on its own documented endpoint, so Ollama's loaded models and LM Studio's downloads show up, and Test & Refresh matches only models that can actually serve you.
v1.35.2
Added
- Personalities now work in the Agents window. Presets previously matched only the classic chat prompt; the Agents window ships different text. Your configured personality now applies there too: persona voice, the
prohibited_actionsblock replaced by a user-owned security protocol (the model surfaces concrete risks, you decide, no silent refusals), and no self-assigned "Co-authored-by: Copilot" commit trailer. Raw (Model Natural) strips the assigned assistant identity on both surfaces instead, classic opener included: no identity, model as trained. Default leaves prompts untouched. - Personality presets got slimmer. The boilerplate stripping (safety rules, "your name is GitHub Copilot" identity) now lives in one shared file instead of a copy inside each preset, applied automatically to every personality, custom replacement files included. Behavior is unchanged; Default stays vanilla. When Microsoft edits its boilerplate, one fix now covers every personality.
Changed
- The model picker now shows only what actually works. An unreachable server, or a model the server does not currently serve (swap, unload), drops the model from the picker entirely instead of leaving a dead entry: settings remain your configured inventory, the picker is the live one. When the server comes back or starts serving the model again, it reappears on its own, no reload, no manual refresh. Budgets are still never fabricated.
Fixed
- Personality updates now reach models that already have one. Applying a personality copies the preset into extension storage, and that copy was only refreshed by re-selecting the personality. After an update that changed a preset (like the Agents-window rules above), existing models kept applying the stale rules until you re-picked it. Bundled presets are now re-synced on extension startup; user-created personalities are never touched.
- Consistent "Output Length" label: the config-schema tool's AI guide and the Model Settings hint still quoted the old lowercase picker label; both now match the actual dropdown.
v1.35.1 — Output Length menu, the Agents window & remote presets
v1.35.1 — Output Length menu, the Agents window & remote presets
Everything since v1.32.2 in one release: an Output Length dropdown in the model picker, first-class support for the new VS Code Agents window ("Open in Agents"), remote model presets that update without a VSIX release, plus new model presets (DeepSeek-V4-Pro, Kimi K3, MiniMax M3, Qwen3.8-Flash-Next, GLM-5.3) and server renaming.
1.35.1 changes only the Marketplace listing text (the Agents window pitch is baked into the VSIX description, and the Marketplace rejects duplicate versions). No code changes since 1.35.0.
Install: download the .vsix below, then in VS Code: Extensions ⋯ Deploy Extension from VSIX Package. A full VS Code restart after updating is recommended.
v1.35.0 — Output Length, picker banners & the Agents window
Added
- Works in the new Agents window ("Open in Agents") — your vLLM models now show up in Agent Host sessions; the required VS Code settings are enabled automatically (values you set yourself are never overwritten). Fully restart VS Code once after updating.
- Output-length picker — models whose
maxOutputTokensis an array of response lengths get a second model-picker dropdown ("Output Length"), independent of Model Mode. First entry = default; your pick overrides per-mode /defaultParamsmax_tokens. Picking a shorter length hands the freed tokens back to your prompt; a longer pick applies once the context re-resolves (one request later). All 14 bundled presets now ship a length ladder. VS Code remembers your choice per model. - Model-picker banners — models whose output budget is clamped by the context window or a provider cap now say so, with the reason, right in the model picker.
- One-time menu update for existing models — offered on startup, built from the matching preset or your own configured
max_tokensvalues; previewable; nothing changes unless you accept.
Changed
-
Minimum VS Code raised to 1.128 — required by the model-picker APIs the new dropdown and banners use.
-
GLM-5.3 preset split — the full model is not Flash. Full GLM-5.3 reuses the GLM-5.2 base (text-only); GLM-5.3-Flash is a separate multimodal model with its own preset. Served live via remote preset lookup — no update needed.
v1.34.0 — Remote model presets
Added
- Live preset lookup — when you Add Server / Auto-Configure, the extension checks a tiny preset index on the vLLM-Copilot GitHub repo and, if your model matches, downloads that one preset file. New presets pushed to
mainnow reach every user the same day — no VSIX release needed. The lookup runs parallel to the normal discovery, is bounded by a 2-second timeout, and any failure (offline, firewalled, bad data) silently falls back to bundled presets. Remote files pass the same schema guard as bundled ones: only client request-shaping fields are allowed — a preset can never touch your server URL, headers or backend type; a single unknown field rejects the whole file. - Provenance in the preset confirm dialog — the dialog now shows what a preset configures (
notes), its source and its verification date. Shown for bundled and remote presets alike. A View Preset File button opens the exact preset file on GitHub, so you can read the real JSON yourself. - One dialog, not two — choosing Use Preset now saves the model immediately; a toast confirms and repeats the link to the preset file. The preset dialog already asked an informed question, so the old second "Save to Settings" confirm was a rubber stamp. HuggingFace auto-discovered configs still get the full review-before-save dialog.
Changed
- Preset format v2 — all bundled presets use a versioned envelope (
presetVersion/match/meta/config). Matching and merge behavior are byte-for-byte unchanged.model-configs/index.jsonis generated from the presets (GitHub Action on push,npm run gen:presetsmanually) and a drift test fails the build on a stale list.
v1.33.2 — New model presets: DeepSeek-V4-Pro, Kimi K3 & MiniMax M3
Added
- DeepSeek-V4-Pro preset — 1M-context text flagship (1.6T/49B). Think (Max) and Think (High) drive its custom template via
chat_template_kwargs(thinking+reasoning_effort), No Think sends a plain request. Official sampling (temp 1.0; top_p 0.95 thinking / 1.0 plain), budgets 64K/32K/16K. Matches-0813, preview and quantized served ids by substring. - Kimi K3 preset — first open 3T-class MoE (2.8T/104B), 1M context, native vision. Thinking is always on; modes are Think (Max / High / Low) via top-level
reasoning_effort. Sampling is fixed per Moonshot's API (temp 1.0, top_p 0.95, no penalties). Budgets 64K/32K/16K. - MiniMax M3 preset — 428B-A23B, 1M context, multimodal. Modes Think (Always) / Think (Adaptive) / No Think via
chat_template_kwargs.thinking_mode; official sampling (temp 1.0, top_p 0.95, top_k 40). Budgets 64K/32K/16K.
Changed
- GLM-5.3-Flash preset renamed to GLM-5.3 — the generic id covers GLM-5.3 and GLM-5.3-Flash alike via substring matching; a dedicated Flash preset will only return if the full model turns out to need a different config.
- Preset headers are client config only — hosting tips (serve flags, hardware, docker recipes) removed from all presets; headers keep mode mechanics, sampling rationale and wire caveats, plus bare vLLM recipe links.
Removed
DeepSeek-V4-Flash-0731preset — identical to the generic DeepSeek-V4-Flash preset, which already matches that id by substring.
v1.33.1 — New model presets: Qwen3.8-Flash-Next & GLM-5.3-Flash
Added
- Qwen3.8-Flash-Next preset — new
qwen4_expfamily (125B-A6B MoE, multimodal, 262K native context). Three modes: Think (Deep) (reasoning_effort: xhigh), Think (Balanced) (medium) and No Think, each with the official sampling recipe and its own output budget (32K/32K/16K) so large-codebase input is never starved. YaRN context extension is deliberately not assumed — static YaRN can degrade short-context quality, so the preset budgets for native context. - GLM-5.3-Flash preset — new
glm5_nextfamily (320B-A18B, natively multimodal, 1M native context). Thinking is always on, so modes are Think (Max / High / Low) viareasoning_effort(no No-Think mode, unlike GLM-5.2). Output budgets 64K/32K/16K. - Both presets match any quantization variant (FP8/NVFP4/GGUF) via substring matching.
v1.33.0 — Rename servers & V symbol in the model picker
Added
- Rename Server — right-click any server in the Dashboard and give it a friendly name (e.g.
IT Server for GLM5.2) instead of the bare host. The name is used everywhere the server is shown — Dashboard tree, Deep-Dive panel title, and the Model Settings server dropdown. Clear it any time to show the URL again. - Rename applies to the whole server — the name is written to every model sharing that server URL, so all its entries stay in sync.
- Not for OpenRouter — the fixed
openrouter.airelay endpoint can't be renamed (menu hidden there). - Your V in the model picker — every model (vLLM, LM Studio, llama.cpp, Ollama, and OpenRouter) now shows the project's own V icon instead of a generic fallback. The glyph is derived from
resources/vllm-icon.svgwith the left arm as a hollow outline, and is built from the trackedscripts/build-vllm-icon-font.py.
Fixed
- Server names survive reconfigure — re-running Auto-Configure or applying a preset no longer wipes a custom server name.
- Deep-Dive panels retitle live — renaming while a Deep-Dive panel is open updates its title immediately, instead of showing the old name until reopen.
Changed
- Whitespace-safe names — a hand-edited whitespace-only name is treated as unset and falls back to the URL.