Hyper Model Provider
Bring a self-hosted model gateway into GitHub Copilot Chat.
A gateway that exposes an OpenAI-compatible model catalog and a streaming messages API
can be used as a
BYOK model
provider: configure one or more gateways, paste each gateway's token once, and the models
from every gateway show up (merged) in the Copilot Chat model picker — including reasoning
(thinking) toggles, tool calls and token usage.
setting: providers[].baseUrl ──► hyper-model-provider ──► Copilot Chat model picker
SecretStorage: provider[].token │
└── gateway: GET /v1/config + POST /v1/messages
工作方式
- 读取设置
hyper-model-provider(provider 数组,可为空时不会暴露任何模型),每个 provider 有自己的 name 和 baseUrl。
- 读取 VS Code SecretStorage 里每个 provider 独立的访问令牌(首次由
Hyper: Set API Key 弹框写入,按 provider 名区分)。不读任何本地配置文件,也不调用外部 CLI。
- 对每个配置的 provider
GET /v1/config 拉取模型目录(上下文窗口、最大输出、思考模式、图像输入),把所有 provider 的模型合并注册给 Copilot。模型在选择器里以 <provider名>/<模型名> 展示,避免不同 provider 同名模型混淆;内部 id 用 <providerName>::<modelId> 命名空间保证跨 provider 唯一。
- 对话时按模型所属的 provider 路由,把 VS Code 的消息与工具声明转换成网关协议,请求
POST /v1/messages,再把 SSE 事件转成 Copilot 的文本 / thinking / tool call / usage。
前置条件
- 一个在跑的、支持上述两个端点的模型网关,以及它的访问令牌。
- Copilot Chat 已启用 BYOK 模型提供程序(本扩展通过
vscode.lm.registerLanguageModelChatProvider 注册)。
- 扩展宿主(本机 / Remote-SSH 的远端 / 容器)能直连该网关地址。
一次安装,处处可用:本扩展只贡献语言模型(LanguageModelChatProvider),不依赖工作区文件,因此作为 UI 扩展在本地扩展宿主运行——装上一次后,Dev Container / Remote-SSH 等所有远程窗口都会复用本地的这份安装,无需在每个容器里重装。
快速开始
安装扩展并重载 VS Code。
若 hyper-model-provider 为空,扩展会在激活时弹框引导依次输入 name(自定义)和 baseUrl 添加第一个 provider,然后可选设置 API key。也可以手动在 settings.json 里填写,或用 Hyper: Add Provider / Hyper: Open Settings:
"hyper-model-provider": [
{
"name": "my-gateway",
"baseUrl": "http://127.0.0.1:8099",
"maxTokens": 0,
"requestTimeoutSeconds": 900,
"requestHeaders": {}
}
]
命令面板执行 Hyper: Set API Key,选择 provider 并粘贴其访问令牌回车(扩展会先向网关校验一次)。每个 provider 的令牌相互独立。
打开 Copilot Chat 的模型选择器,选 Hyper 分组下的任意模型;思考开关在模型配置里(On / Off)。
命令
| 命令 |
作用 |
Hyper: Add Provider |
弹框输入 provider 的 name 和 baseUrl 并写入配置 |
Hyper: Remove Provider |
删除一个已配置的 provider(连同其 API key) |
Hyper: Set API Key |
弹框选择 provider,输入访问令牌,校验通过后存入 SecretStorage |
Hyper: Clear API Key |
删除已保存的令牌(确认后该 provider 的模型会从选择器里消失) |
Hyper: Refresh Models |
丢弃缓存并重新拉取所有 provider 的模型目录 |
Hyper: Show Status |
逐个显示各 provider 的地址、令牌指纹、模型数量 / 失败原因 |
Hyper: Manage Provider |
汇总入口:增删 provider、设置 / 清除令牌、刷新模型、查看状态、打开设置、查看日志 |
Hyper: Open Settings |
打开本扩展的设置 |
Hyper: Show Logs |
打开输出面板 |
设置
hyper-model-provider 是一个 provider 数组。每个元素:
| 字段 |
默认值 |
说明 |
name |
(必填) |
自定义、唯一的 provider 名字,用于区分 API key 与模型 |
baseUrl |
(必填) |
网关地址;结尾的 / 或 /v1 会被忽略 |
maxTokens |
0 |
该 provider 单次请求的最大输出 token;0 表示用目录里该模型自己的 maxTokens |
requestTimeoutSeconds |
900 |
该 provider 流式请求的整体超时;思考模型首个 token 可能很慢 |
requestHeaders |
{} |
追加到该网关请求上的 HTTP 头,供反向代理使用 |
访问令牌不在设置里,存在 VS Code SecretStorage(Settings Sync 不会同步它),并按 provider 名分别存储。
排错
- 模型列表为空:跑
Hyper: Show Status。常见原因是没配置任何 provider、某 provider 没设 API key、网关不通,或令牌被网关拒绝。
invalid or expired access token:令牌不对或已在网关侧被换掉,重新 Hyper: Set API Key。
Hyper: Set API Key 提示网关不可达:令牌仍会保存,但需要确认 baseUrl 和网关实际监听地址/端口一致(远程场景不能填 127.0.0.1)。
- Remote-SSH / WSL / 容器:扩展跑在远端,
baseUrl 必须从远端可达。
- 思考开不掉 / 开不出来:网关侧模型目录里的思考方言与该模型不匹配,需要在网关侧修正。
目录结构
src/
├── extension.ts # 激活、命令、Copilot Chat 激活后刷新
├── provider.ts # LanguageModelChatProvider:目录缓存、流式响应、usage
├── apiKey.ts # SecretStorage 中的访问令牌(弹框、校验、清除)
├── gateway.ts # /v1/config 与 /v1/messages 的 HTTP + SSE 客户端
├── convert.ts # VS Code 消息 → 网关 context
├── models.ts # 目录模型 → LanguageModelChatInformation(含思考开关 schema)
├── tokens.ts # token 估算(按 usage 自校准)
├── providerConfig.ts # provider 数组的解析 / 序列化
├── errors.ts # 错误归一化
├── logger.ts # 输出通道
└── consts.ts
不依赖运行时 npm 包,只用 Node 内置模块 + VS Code API。
开发
npm install
npm run compile # tsc → out/
npm run package # dist/hyper-model-provider-<version>.vsix
按 F5(Run Extension)用 --extensionDevelopmentPath 启动调试实例。