@wangmingfa/model-gate 0.0.1-beta.1 → 0.0.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +97 -42
  2. package/model-gate.js +204 -8
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -4,56 +4,71 @@ LLM API 中转网关:在一个配置文件里配置多家运营商的模型(
4
4
 
5
5
  **解决什么问题**:你有很多 coding agent(Claude Code、Cursor、各种开源 agent),每个都要单独配置各家厂商的 base_url、api_key、模型名。有了 model-gate,agent 只认一个地址 + 一个 key + 一组**模型别名**;换上游、换模型、加厂商都只改网关的配置文件,热加载即生效,agent 侧零改动。
6
6
 
7
- ---
7
+ ## 安装
8
8
 
9
- ## 特性
9
+ model-gate 基于 [bun](https://bun.sh/) 运行时,推荐用 bun 全局安装(npm 亦可)。
10
10
 
11
- - **统一 OpenAI 兼容入口**:`POST /v1/chat/completions`(含流式 SSE)+ `GET /v1/models`
12
- - **模型别名**:agent 只认识别名(如 `fast`、`reason`),不感知背后的真实模型;响应与流式 chunk 中的 model 字段统一改写为别名
13
- - **有序 failover**:一个别名可绑多个 `provider:model`(数组,顺序即 failover 顺序);管理界面里每个别名当前从下拉选一个目标(数组格式仍允许配置多个作为 failover 备选)
14
- - **多下游密钥**:多个 agent 各用一个 key,为按 agent 记账/排查打基础
15
- - **配置热加载**:改 `config.json` 立即生效,无需重启
16
- - **请求日志**:控制台每请求一行摘要 + `access.log`(JSONL)逐请求记录 token 用量,可开关
17
- - **密钥支持环境变量**:`api_key` 可以写 `${ENV_VAR}` 引用环境变量
18
- - **Web 配置界面**:`/admin` 下的 SPA(Vite+Vue3+Naive UI),可视化编辑提供商(provider)/别名/密钥/默认模型,保存即校验并热加载;本机回环免登录,非本机访问需 `admin_password` 密码登录;`api_key` 以密码框遮挡显示
11
+ **方式一:bun(推荐)**
19
12
 
20
- ## 快速开始
13
+ ```bash
14
+ bun install -g @wangmingfa/model-gate
15
+ ```
21
16
 
22
- 前置:安装 [bun](https://bun.sh/)(运行时依赖,版本 >= 1.0.0):
17
+ **方式二:npm**
23
18
 
24
19
  ```bash
25
- curl -fsSL https://bun.sh/install | bash
20
+ npm install -g @wangmingfa/model-gate
26
21
  ```
27
22
 
23
+ > 安装后会得到一个全局命令 `model-gate`(无需 clone 源码、无需 `bun install` 依赖)。
24
+
25
+ ## 使用
26
+
28
27
  ```bash
29
- # 1. 安装依赖(会同时安装 admin 子项目依赖)
30
- bun install
28
+ # 1. 生成示例配置(在当前目录创建 config.json)
29
+ model-gate init
31
30
 
32
- # 2. 复制示例配置并编辑(填你的各家 key
33
- cp config.example.json config.json
31
+ # 2. 编辑配置,填入你的各家厂商 key(见下文「配置」章节)
34
32
  vim config.json
35
33
 
36
- # 3. 开发模式(api 热重载 + Vite 前端热更新,开箱即用)
37
- bun run dev
34
+ # 3. 启动网关(默认监听 127.0.0.1:8787,按 config.json 热加载)
35
+ model-gate
36
+ ```
38
37
 
39
- # 3'. 生产构建:内联前端资源并打包成单文件二进制 model-gate.js
40
- bun run build
41
- bun run model-gate.js # 运行构建产物(等同于 node 跑这个 bun 二进制)
38
+ 启动后:
42
39
 
43
- # 指定配置文件(开发/生产均可):
44
- bun run dev -- --config /path/to/config.json
45
- # 或设环境变量 MODEL_GATE_CONFIG=/path/to/config.json
40
+ - 网关地址:`http://127.0.0.1:8787`
41
+ - OpenAI 兼容接口:`POST http://127.0.0.1:8787/v1/chat/completions`、`GET http://127.0.0.1:8787/v1/models`
42
+ - Web 配置界面:`http://127.0.0.1:8787/admin`(本机回环免登录,非本机需 `admin_password`)
43
+
44
+ agent 侧只需配置一处即可接入:
45
+
46
+ ```jsonc
47
+ // 以任意 OpenAI 兼容 client 为例
48
+ {
49
+ "base_url": "http://127.0.0.1:8787/v1",
50
+ "api_key": "<你在 /admin 里生成的下游密钥>",
51
+ "model": "fast" // 模型别名,不暴露真实模型名
52
+ }
46
53
  ```
47
54
 
55
+ ---
56
+
57
+ ## 特性
58
+
59
+ - **统一 OpenAI 兼容入口**:`POST /v1/chat/completions`(含流式 SSE)+ `GET /v1/models`
60
+ - **模型别名**:agent 只认识别名(如 `fast`、`reason`),不感知背后的真实模型;响应与流式 chunk 中的 model 字段统一改写为别名
61
+ - **有序 failover**:一个别名可绑多个 `provider:model`(数组,顺序即 failover 顺序);管理界面里每个别名当前从下拉选一个目标(数组格式仍允许配置多个作为 failover 备选)
62
+ - **多下游密钥**:多个 agent 各用一个 key,为按 agent 记账/排查打基础
63
+ - **配置热加载**:改 `config.json` 立即生效,无需重启
64
+ - **请求日志**:控制台每请求一行摘要 + `access.log`(JSONL)逐请求记录 token 用量,可开关
65
+ - **密钥支持环境变量**:`api_key` 可以写 `${ENV_VAR}` 引用环境变量
66
+ - **Web 配置界面**:`/admin` 下的 SPA(Vite+Vue3+Naive UI),可视化编辑提供商(provider)/别名/密钥/默认模型,保存即校验并热加载;本机回环免登录,非本机访问需 `admin_password` 密码登录;`api_key` 以密码框遮挡显示
67
+
48
68
  ## Web 配置界面(/admin)
49
69
 
50
70
  不用手改 JSON,浏览器里可视化编辑配置:
51
71
 
52
- ```bash
53
- bun run build # 构建并内联前端资源(Vite 产物 admin/dist/ → src/admin-assets.generated.ts → 打包进二进制)
54
- bun run model-gate.js # 启动网关(或开发模式 bun run dev)
55
- ```
56
-
57
72
  打开浏览器:
58
73
 
59
74
  - **本机访问**:`http://127.0.0.1:8787/admin`(免登录直接进入)
@@ -64,7 +79,6 @@ bun run model-gate.js # 启动网关(或开发模式 bun run dev)
64
79
  - port / host / timeout 等启动参数只读展示(修改需编辑 config.json 后重启)
65
80
  - **访问控制**:本机回环(127.0.0.1/::1)免登录直接进入;**非本机访问需密码登录**——在 config.json 顶层配置 `admin_password`(支持 `${ENV_VAR}` 插值,留空 = 未配置);未配置时登录页会提示去实际配置文件设置。会话为内存态(24 小时过期,重启失效),登录页提供登出;连续 5 次密码错误锁定 60 秒
66
81
  - **安全**:`api_key` 返回真实值,前端以密码框(type=password)遮挡显示,明文不外露;编辑时留空 = 保持原值(不清空原密钥),填新值即覆盖;`admin_password` 不进界面编辑范围,只在配置文件改
67
- - 开发模式:`bun run dev` 会并行起 Vite dev server(端口 5173,代理 `/admin/api` 到网关)和网关 api,前端改动热更新
68
82
 
69
83
  启动后服务监听在配置的 `host:port`(默认 `http://127.0.0.1:8787`)。
70
84
 
@@ -333,9 +347,50 @@ model: <config.json 里 aliases 的任意键>
333
347
 
334
348
  ## 开发
335
349
 
350
+ ### 本地环境
351
+
352
+ 前置:安装 [bun](https://bun.sh/)(运行时依赖,版本 >= 1.0.0):
353
+
354
+ ```bash
355
+ curl -fsSL https://bun.sh/install | bash
356
+ ```
357
+
358
+ ```bash
359
+ # 1. 安装依赖(会同时安装 admin 子项目依赖)
360
+ bun install
361
+
362
+ # 2. 复制示例配置并编辑(填你的各家 key)
363
+ cp config.example.json config.json
364
+ vim config.json
365
+ ```
366
+
367
+ ### 开发模式
368
+
336
369
  ```bash
337
- bun test # 单元测试(config 校验 / failover / SSE 改写 / 鉴权路由;默认忽略 admin/ 前端测试)
338
- bun run typecheck # 见下
370
+ bun run dev # api 热重载 + Vite 前端热更新(并行起 Vite dev server 5173,代理 /admin/api 到网关),开箱即用
371
+ ```
372
+
373
+ ### 生产构建
374
+
375
+ ```bash
376
+ bun run build # 内联前端资源(Vite 产物 admin/dist/ → src/admin-assets.generated.ts)并打包成单文件二进制 model-gate.js
377
+ bun run model-gate.js # 运行构建产物(等同于 node 跑这个 bun 二进制)
378
+ ```
379
+
380
+ ### 指定配置文件
381
+
382
+ ```bash
383
+ # 任意模式下均可:
384
+ bun run dev -- --config /path/to/config.json
385
+ # 或设环境变量:
386
+ MODEL_GATE_CONFIG=/path/to/config.json bun run dev
387
+ ```
388
+
389
+ ### 测试与类型检查
390
+
391
+ ```bash
392
+ bun test # 单元测试(config 校验 / failover / SSE 改写 / 鉴权路由;默认忽略 admin/ 前端测试)
393
+ bun run typecheck # 后端 tsc + 前端 vue-tsc
339
394
  ```
340
395
 
341
396
  没有真实上游 key 时,可用仓库自带的本地 mock 做端到端自测:
@@ -345,29 +400,29 @@ bun scripts/mock-upstream.ts # 起一个 OpenAI 兼容 mock 上游(端口 99
345
400
  bun scripts/smoke.ts # 端到端冒烟:health/models/鉴权/chat 转发/流式/failover/热加载
346
401
  ```
347
402
 
348
- 目录结构:
403
+ ### 发布脚本
404
+
405
+ - `bun run release [版本号]`:交互式(或显式传版本号)选择 latest/beta 通道与升级方式,自动 build 并发布到 npm,发布成功后自动 commit 版本变更。更多用法见 `scripts/release.ts` 顶部注释。
406
+ - `bun run unpublish [版本号]`:撤销已发布的 npm 版本。不指定版本则列出最近 5 个用方向键选择;默认 `deprecate`(软撤销、安全),可加 `--hard` 真删除(仅发布 72h 内允许)。
407
+
408
+ ### 目录结构
349
409
 
350
410
  ```
351
411
  ├── config.example.json # 配置示例(复制为 config.json 使用)
352
412
  ├── src/
353
- │ ├── index.ts # 入口:加载配置、热加载、Bun.serve
413
+ │ ├── index.ts # 入口:加载配置、热加载、Bun.serve(含 init 子命令)
354
414
  │ ├── app.ts # Hono 路由:鉴权、日志中间件、/v1/* 端点
355
- │ ├── admin.ts # /admin 管理后端 API(配置读写、测试连接等)
415
+ │ ├── admin.ts # /admin 管理后端 API(配置读写、测试连接、用量统计等)
356
416
  │ ├── config.ts # 配置类型、校验、${ENV} 插值
357
417
  │ ├── providers.ts # 上游调用:转发、SSE 改写、failover、超时
358
418
  │ ├── logger.ts # 控制台摘要 + access.log
359
419
  │ └── *.test.ts # 测试
360
420
  ├── admin/ # Vue3 + Naive UI 管理前端(Vite 构建)
421
+ ├── scripts/ # release / unpublish / mock / smoke 等脚本
361
422
  ├── docs/adr/ # 架构决策记录
362
423
  └── CONTEXT.md # 领域词汇表
363
424
  ```
364
425
 
365
- 类型检查(可选):
366
-
367
- ```bash
368
- bun run typecheck
369
- ```
370
-
371
426
  ## 限制与路线图
372
427
 
373
428
  - 上游仅支持 OpenAI 兼容端点(DeepSeek、Kimi、通义、智谱、SiliconFlow 等均兼容);Anthropic / Gemini 原生协议待加适配层