copilot-agent-deepseek-custom
English |
简体中文
Run GitHub Copilot's agent mode on DeepSeek V4 — official API or Bailian-hosted — with per-model endpoint overrides and full configuration freedom.
A customized fork of the open-source DeepSeek V4 for Copilot Chat extension, rebuilt for the most efficient agent-driven development. Keep GitHub Copilot's mature agent mode, tool calling, and polished UI — then run it on DeepSeek V4 Flash, Pro, Flash Vision Exp, or Bailian-hosted DeepSeek V4 Pro. Mix the official DeepSeek endpoint with Bailian (Qwen ecosystem) endpoints per model, with native vision or Vision Proxy, thinking mode, per-model endpoint overrides, and your own API key.
Why this extension?
- The most efficient agent stack. GitHub Copilot's agent loop — file edits, terminal, search, Git, tests — driven by DeepSeek's price-performance. Agent development without sacrificing anything.
- Official DeepSeek or Bailian-hosted — both, side by side. Use DeepSeek's official API for one model and a Bailian-hosted DeepSeek (Qwen ecosystem) endpoint for another, all in the same picker.
- Don't replace Copilot — power it up. No new sidebar, no new chat UI to learn. Just a new model in the picker you already use.
- Agent mode, tool calling, instructions, MCP, skills — all of it still works. Copilot's entire stack, now running on DeepSeek.
- Two ways to work with images. Flash Vision Exp receives image attachments natively. Flash and Pro keep their existing text context while a configurable Vision Proxy turns images into descriptions.
- BYOK, pay DeepSeek directly. Your API key, your bill, your rate limits. Stored in the OS keychain, never on disk.
- Per-model endpoint overrides. Point each model at its own baseUrl and API key — mix the official DeepSeek endpoint with Bailian-hosted models in one picker.
Features
Four DeepSeek V4 models in the model picker
Flash, Pro, the experimental Flash Vision Exp, and Bailian-hosted DeepSeek V4 Pro appear alongside other models in Copilot Chat's model selector — official DeepSeek and Bailian-hosted models coexist in one picker. All support long context, tool calling, and configurable thinking effort.
Per-model endpoint overrides
Each entry in deepseek-v4-custom.modelIdOverrides maps a VS Code model ID (vscodeModelId) to an API model ID (apiModelId) and can carry its own baseUrl, apiKey, temperature, topP, and maxTokens. Leave a value empty to fall back to the global baseUrl and API key.
Any non-empty vscodeModelId registers a new model in the picker — even one that isn't one of the four built-ins. One underlying model can therefore appear several times with different temperatures, endpoints, or keys. Manage the list visually with DeepSeek V4 Custom: Configure Model Overrides from the Command Palette, or edit deepseek-v4-custom.modelIdOverrides directly.
An override entry that cannot be resolved (empty vscodeModelId, or an apiModelId matching no registered model) is a user-fixable configuration error: the extension shows an error popup and the DeepSeek models stay hidden from the picker until the entry is fixed.
Custom: high-freedom configuration
"Custom" means every layer is configurable — no hidden hard-coding:
- Endpoints & keys — one global
baseUrl + API key, or per-model baseUrl/apiKey in deepseek-v4-custom.modelIdOverrides.
- Sampling parameters — per-model
temperature (0–2), topP (0–1), maxTokens.
- Vision — native vision model or a configurable Vision Proxy (any VS Code model or OpenAI/Anthropic-compatible endpoint) with a custom prompt.
- Thinking — per-model reasoning effort, adjustable right from the model picker.
- Model registry — bring your own model by adding a
modelIdOverrides entry with its API model ID. A new vscodeModelId shows up as its own entry in the picker, so you can expose the same underlying model at multiple temperatures or endpoints side by side.
Native Vision and Vision Proxy
Choose the image path that fits the conversation:
- DeepSeek V4 Flash Vision Exp handles image attachments as native multimodal input, without Vision Proxy. It is exposed as a separate experimental model and does not silently fall back when the configured API endpoint does not support its model ID.
- DeepSeek V4 Flash and Pro use Vision Proxy: an image-capable model first describes each attachment, then the main DeepSeek model receives the description with the conversation. Auto mode selects Flash Vision Exp when available, while an explicitly configured VS Code model or API endpoint remains supported.
Avoid switching models mid-chat just to inspect an image if DeepSeek prefix-cache reuse matters. Start the conversation with Flash Vision Exp for native vision, or stay on Flash/Pro and let Vision Proxy preserve the main model choice.
Thinking Mode with Reasoning Effort Control
Full support for DeepSeek V4's reasoning_content. Flash, Pro, and Flash Vision Exp offer none (off), low (light reasoning), high (balanced, default), and max (deep reasoning for hard agent tasks), matching the effort levels implemented by the official API.
Inherits Every Copilot Capability
Because this plugs into Copilot's native provider API, you get the full stack for free:
- Agent mode — autonomous multi-step tasks
- Tool calling — file edits, terminal, workspace search, Git, tests
- Instructions & skills — all your
.instructions.md, AGENTS.md, and skills just work
- Prompt caching stats — DeepSeek's cache hit rate logged in the output channel so you can see the savings
Prompt Hub: Share and Search Prompts
Search, download, and share prompts with the VEAP prompt service without leaving Copilot Chat:
- Select Prompt —
$(book) buttons in the Chat view title bar and (VS Code 1.123+) the input status toolbar. A searchable QuickPick over public prompts (/prompt/searchPrompt, 300 ms debounce, paged). Picking one prefills the chat input with the identity instruction + content without auto-sending; press Enter when ready.
- Share Prompt —
$(cloud-upload) buttons in the same locations. A panel prefilled with your clipboard; edit the title / identity instruction / content, toggle public visibility, and submit (/prompt/sharePrompt). On success the panel closes silently; only failures show a message.
Secure by Default
The global API key lives in VS Code's SecretStorage (OS keychain on macOS / Windows / Linux). Never in settings.json, never in your Git history. Per-model override entries may optionally carry a plain-text apiKey in deepseek-v4-custom.modelIdOverrides when a model needs its own credential; leave it empty to fall back to the stored global key.
Zero Runtime Dependencies
Pure VS Code API + Node.js built-ins. No Python, no Docker, no local proxy server to babysit.
Getting Started
Prerequisites
- VS Code 1.116 or later. This extension relies on non-public Copilot Chat APIs that may break on newer VS Code versions — report an issue if you hit one.
- GitHub Copilot subscription (Free / Pro / Enterprise — the free tier works)
- DeepSeek API key from platform.deepseek.com, or a compatible provider token when using a custom
deepseek-v4-custom.baseUrl
Installation
Install from the registry used by your editor:
- Microsoft VS Code — install from VS Code Marketplace.
- Editors that use Open VSX — install from Open VSX.
Usage
- Run DeepSeek V4 Custom: Set API Key from the Command Palette (
Cmd+Shift+P)
- Paste your key or compatible provider token (official DeepSeek keys usually start with
sk-)
- Open Copilot Chat, click the model picker, and choose DeepSeek V4 Flash, DeepSeek V4 Pro, DeepSeek V4 Flash Vision Exp, or DeepSeek V4 Pro (Bailian)
- That's it — chat away
Optional: run DeepSeek V4 Custom: Configure Model Overrides to add, edit, or remove per-model override entries visually.
Models
| Model |
Image Handling |
Thinking Effort |
Best For |
| DeepSeek V4 Flash |
Vision Proxy |
none / low / high / max |
Fast everyday coding, quick edits, cheap iteration |
| DeepSeek V4 Pro |
Vision Proxy |
none / low / high / max |
Complex refactors, agent tasks, deep reasoning |
| DeepSeek V4 Flash Vision Exp |
Native image input |
none / low / high / max |
Direct, experimental image understanding with fast reasoning |
| DeepSeek V4 Pro (Bailian) |
Vision Proxy |
none / low / high / max |
Bailian-hosted DeepSeek V4 Pro; configure its baseUrl and API key per model |
All four support optional thinking mode, tool calling, and 1M token context. Flash Vision Exp is experimental; custom API endpoints and compatible providers must expose its configured model ID to use it directly.
Settings
| Setting |
Default |
Description |
deepseek-v4-custom.baseUrl |
https://api.deepseek.com |
Global API endpoint — change for self-hosted / proxied deployments |
deepseek-v4-custom.promptHub.baseUrl |
http://localhost:8087 |
Base URL of the prompt share/search service used by DeepSeek V4 Custom: Select Prompt and DeepSeek V4 Custom: Share Prompt |
deepseek-v4-custom.promptHub.machineCode |
(empty) |
Machine code sent with prompt share/search requests; omitted from the request body when empty |
deepseek-v4-custom.apiKey |
(empty) |
Global fallback API key stored in plain text (CI/automation). Prefer the SecretStorage key set via DeepSeek V4 Custom: Set API Key |
deepseek-v4-custom.maxTokens |
0 |
Global max output tokens (0 = no limit). Useful for cost control |
deepseek-v4-custom.modelIdOverrides |
prefilled model list |
Per-model overrides. Each entry maps a VS Code model ID (vscodeModelId) to an API model ID (apiModelId) and can optionally set its own baseUrl, apiKey (plain text in settings), temperature (0–2), topP (0–1), and maxTokens. Any non-empty vscodeModelId registers a new picker entry. Empty values use the global settings; per-model maxTokens: 0 means no limit. Manage with DeepSeek V4 Custom: Configure Model Overrides |
deepseek-v4-custom.debugMode |
minimal |
Diagnostic mode: minimal for token usage only, metadata for privacy-preserving logs, or verbose for full request dumps and pipeline snapshots under extension global storage. Full dumps may include sensitive prompt text, tool schemas, file snippets, and image descriptions. Use DeepSeek V4 Custom: Open Request Dumps Folder to open the dump location |
deepseek-v4-custom.visionModel |
(auto) |
Vision Proxy used by Flash and Pro. Auto mode selects Flash Vision Exp when available; configure another VS Code model or API endpoint with DeepSeek V4 Custom: Configure Vision Proxy |
deepseek-v4-custom.visionPrompt |
(built-in) |
Prompt used by Flash/Pro's Vision Proxy to describe image attachments. It does not affect native Flash Vision Exp requests |
deepseek-v4-custom.experimental.stabilizeToolList |
false |
Experimental. Tries to pre-activate VS Code/Copilot virtual tools so the DeepSeek API tools parameter is more complete and stable across turns. May improve context-cache hit rate when enabled tools change between turns. Can increase input tokens because more function definitions may be included; cache-hit input tokens are cheaper but still count toward usage. Usually leave it off with 64 or fewer enabled tools unless the tool list still changes across turns; do not enable it with more than 128 enabled tools |
Thinking Effort is configured from Copilot Chat's model picker for each DeepSeek model.
Example settings.json override for a Bailian-hosted model:
{
"deepseek-v4-custom.modelIdOverrides": [
{
"vscodeModelId": "deepseek-v4-pro-bailian",
"apiModelId": "vanchin/deepseek-v4-pro-0813",
"baseUrl": "https://ws-hjupuk4sp6qrwi05.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
"apiKey": "sk-ws-...",
"temperature": 0.7,
"topP": null,
"maxTokens": 4096
}
]
}
The same underlying model can be registered under multiple custom IDs, each with its own sampling parameters:
{
"deepseek-v4-custom.modelIdOverrides": [
{
"vscodeModelId": "deepseek-v4-pro-self-0.2",
"apiModelId": "deepseek-v4-pro",
"temperature": 0.2
},
{
"vscodeModelId": "deepseek-v4-pro-self-0.8",
"apiModelId": "deepseek-v4-pro",
"temperature": 0.8
}
]
}
Both entries map to the deepseek-v4-pro API model and appear as two separate picks with different temperatures.
Audit Boundaries
The only places the extension catches errors are these documented boundaries. Inside each boundary the extension may log to the output channel or show a popup, and the original error is always rethrown:
- Command execution boundary —
workbench.action.chat.open used to prefill the chat input.
- Network boundary — every fetch to the DeepSeek API and to the Prompt Hub service.
- Prompt Hub QuickPick boundary — typing-triggered searches report failures as an in-picker status item (no popup); explicit actions (initial open, next page, pick) show a popup. Failures are also written to the output channel.
- Best-effort boundary — reading the clipboard to prefill the share panel: on failure a warning is shown and the panel opens with an empty form.
Everything else throws directly: user-fixable errors show a readable popup and rethrow; low-level technical errors are written to console.error and rethrow.
Manual Testing
The Prompt Hub feature ships without automated tests; verify these flows by hand:
- Buttons appear in the Chat view title bar, and on VS Code 1.123+ also at the right end of the input status toolbar (same row as Set Permissions; may collapse into the overflow menu when space is tight).
- Search: typing debounces 300 ms; "Next page…" loads the next page until
hasNext=false.
- Pick: the prompt prefills the chat input and is not sent automatically.
- Share: the clipboard prefills the panel; success closes the panel silently; failure keeps the panel open, re-enables the submit button, and shows a popup.
- Errors: explicit search actions and share failures show a popup; typing-triggered search failures show only an in-picker status item.
- Compatibility: on VS Code < 1.123 the input-status-toolbar buttons are absent and nothing errors.
Compared to alternatives
|
This extension |
Local proxy (e.g. LiteLLM) |
Standalone DeepSeek extensions |
| Works inside Copilot Chat |
✅ |
✅ |
❌ separate UI |
| Agent mode, tools, skills |
✅ |
✅ |
⚠️ reimplemented |
| Vision support |
✅ native + proxied |
❌ |
❌ |
| No extra process to run |
✅ |
❌ |
✅ |
| One-click install |
✅ |
❌ |
✅ |
| API key in OS keychain |
✅ |
❌ |
⚠️ varies |
Credits
This extension is a fork of the open-source project DeepSeek V4 for Copilot Chat by Vizards. Sincere thanks to the original authors for their excellent work. The upstream project is released under the MIT license.
License
MIT