auto-model-key-router 1.1.1__tar.gz

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 (23) hide show
  1. auto_model_key_router-1.1.1/PKG-INFO +250 -0
  2. auto_model_key_router-1.1.1/README.md +233 -0
  3. auto_model_key_router-1.1.1/auto_model_key_router/__init__.py +16 -0
  4. auto_model_key_router-1.1.1/auto_model_key_router/app.py +591 -0
  5. auto_model_key_router-1.1.1/auto_model_key_router/config.py +191 -0
  6. auto_model_key_router-1.1.1/auto_model_key_router/config_editor.py +349 -0
  7. auto_model_key_router-1.1.1/auto_model_key_router/dashboard.py +129 -0
  8. auto_model_key_router-1.1.1/auto_model_key_router/formatting.py +38 -0
  9. auto_model_key_router-1.1.1/auto_model_key_router/key_pool.py +156 -0
  10. auto_model_key_router-1.1.1/auto_model_key_router/logs_tui.py +180 -0
  11. auto_model_key_router-1.1.1/auto_model_key_router/main.py +77 -0
  12. auto_model_key_router-1.1.1/auto_model_key_router/metrics.py +309 -0
  13. auto_model_key_router-1.1.1/auto_model_key_router/service.py +275 -0
  14. auto_model_key_router-1.1.1/auto_model_key_router/tui.py +200 -0
  15. auto_model_key_router-1.1.1/auto_model_key_router.egg-info/PKG-INFO +250 -0
  16. auto_model_key_router-1.1.1/auto_model_key_router.egg-info/SOURCES.txt +21 -0
  17. auto_model_key_router-1.1.1/auto_model_key_router.egg-info/dependency_links.txt +1 -0
  18. auto_model_key_router-1.1.1/auto_model_key_router.egg-info/entry_points.txt +3 -0
  19. auto_model_key_router-1.1.1/auto_model_key_router.egg-info/requires.txt +14 -0
  20. auto_model_key_router-1.1.1/auto_model_key_router.egg-info/top_level.txt +1 -0
  21. auto_model_key_router-1.1.1/pyproject.toml +35 -0
  22. auto_model_key_router-1.1.1/setup.cfg +4 -0
  23. auto_model_key_router-1.1.1/tests/test_app.py +204 -0
@@ -0,0 +1,250 @@
1
+ Metadata-Version: 2.4
2
+ Name: auto-model-key-router
3
+ Version: 1.1.1
4
+ Summary: A lightweight local OpenAI-compatible model API key router
5
+ Requires-Python: >=3.12
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: fastapi>=0.115.0
8
+ Requires-Dist: httpx>=0.27.0
9
+ Requires-Dist: rich>=13.7.0
10
+ Requires-Dist: tzdata>=2025.2; platform_system == "Windows"
11
+ Requires-Dist: uvicorn>=0.30.0
12
+ Provides-Extra: test
13
+ Requires-Dist: pytest>=8.0.0; extra == "test"
14
+ Provides-Extra: release
15
+ Requires-Dist: build>=1.2.0; extra == "release"
16
+ Requires-Dist: twine>=5.0.0; extra == "release"
17
+
18
+ Auto Model Key Router 是一个轻量的本地 API key 路由服务。它支持为同一个模型 ID 配置多个 API key,并以轮询/优先级的方式把请求自动分配到可用 key;当上游返回认证、限流或服务错误时,会依次切换到已配置的其他 key,只有单 key 配置才会按重试次数重复尝试同一个 key。
19
+
20
+ ## 功能
21
+
22
+ - 支持 OpenAI-compatible `/v1/*` 请求转发
23
+ - 支持同一模型 ID 配置多个 key
24
+ - 支持按模型维度选择“分流”或“优先级”路由模式
25
+ - 支持 key 失败后自动尝试下一个 key
26
+ - 支持请求量、成功/失败、重试、状态码、Token 使用量和缓存命中统计
27
+ - 支持 Rich CLI 展示配置摘要、交互式添加配置和日志板块
28
+ - 支持 `/health`、`/metrics` 和 `/v1/models` 本地接口
29
+
30
+ ## 安装
31
+
32
+ ```bash
33
+ pip install -e .
34
+ ```
35
+
36
+ ## 配置
37
+
38
+ 首次运行时,如果 `router-config.json` 不存在,程序会自动生成一个空配置文件。你也可以复制示例配置:
39
+
40
+ ```bash
41
+ copy router-config.example.json router-config.json
42
+ ```
43
+
44
+ 编辑 `router-config.json`:
45
+
46
+ ```json
47
+ {
48
+ "host": "127.0.0.1",
49
+ "port": 8000,
50
+ "default_base_url": "https://api.openai.com",
51
+ "request_timeout": 60,
52
+ "max_retries": 2,
53
+ "metrics_db_path": "",
54
+ "log_file_path": "",
55
+ "local_api_key": "amkr-generated-local-api-key",
56
+ "models": [
57
+ {
58
+ "id": "gpt-4o-mini",
59
+ "aliases": ["gpt-4o-mini-display", "fast-mini"],
60
+ "routing_mode": "round_robin",
61
+ "keys": [
62
+ { "name": "key-1", "api_key": "sk-your-first-key" },
63
+ { "name": "key-2", "api_key": "sk-your-second-key" }
64
+ ]
65
+ }
66
+ ]
67
+ }
68
+ ```
69
+
70
+ 也可以为某个 key 单独配置 `base_url`,用于接入其他 OpenAI-compatible 上游。
71
+
72
+ 每个模型配置中的 `id` 是统一路由用的真实模型 ID;`aliases` 是额外显示名称或别名。客户端请求中使用 `id` 或任意 `aliases` 都会映射到同一个模型配置和同一组 key。
73
+
74
+ `routing_mode` 支持两种模式:
75
+
76
+ - `round_robin`:分流模式,按配置顺序轮询多个 key,把请求均匀分配到不同 key,这是默认模式。
77
+ - `priority`:优先级模式,每次请求优先使用配置中排在最前面的 key;只有当前 key 请求失败且状态码可重试,才会按顺序尝试后面的 key。
78
+
79
+ 默认配置文件也会保存在同一个系统应用缓存目录中,文件名为 `router-config.json`。如果当前目录存在旧的 `router-config.json`,首次未指定 `--config` 启动时会自动复制到默认缓存目录。
80
+
81
+ `metrics_db_path` 和 `log_file_path` 为空时会使用系统默认应用缓存目录:
82
+
83
+ - Windows:`%LOCALAPPDATA%\\AutoModelKeyRouter\\`
84
+ - macOS:`~/Library/Caches/AutoModelKeyRouter/`
85
+ - Linux:`${XDG_CACHE_HOME:-~/.cache}/auto-model-key-router/`
86
+
87
+ 默认文件名为:
88
+
89
+ - 配置文件:`router-config.json`
90
+ - SQLite 计量存档:`metrics.sqlite3`
91
+ - 服务运行日志:`server.log`
92
+ - 后台服务 PID:`server.pid`,与日志文件同目录
93
+
94
+ 如果需要,也可以把 `metrics_db_path` 和 `log_file_path` 配成绝对路径。
95
+
96
+ ## 运行
97
+
98
+ 启动默认进入 Terminal UI:
99
+
100
+ ```bash
101
+ amkr --config router-config.json
102
+ ```
103
+
104
+ 也可以使用完整命令名:
105
+
106
+ ```bash
107
+ auto-model-key-router --config router-config.json
108
+ ```
109
+
110
+ 主菜单包含:
111
+
112
+ - 管理系统服务 / 开机自启动
113
+ - 交互式添加模型 / API key
114
+ - 生成 / 重置本地 API key
115
+ - 配置监听地址与端口
116
+ - 查看日志板块
117
+ - 退出
118
+
119
+ Terminal UI 只负责配置与服务管理,不直接承载一次性的启动逻辑。需要直接启动本地服务时使用命令行入口:
120
+
121
+ ```bash
122
+ auto-model-key-router --config router-config.json --serve
123
+ ```
124
+
125
+ 查看后台服务状态:
126
+
127
+ ```bash
128
+ auto-model-key-router --config router-config.json --status
129
+ ```
130
+
131
+ 停止后台服务:
132
+
133
+ ```bash
134
+ auto-model-key-router --config router-config.json --stop
135
+ ```
136
+
137
+ 后台服务会写入 PID 文件,默认与运行日志同目录,例如系统缓存目录下的 `server.pid`。
138
+
139
+ 注册为系统服务并启用开机自启动:
140
+
141
+ ```bash
142
+ auto-model-key-router --config router-config.json --install-service
143
+ ```
144
+
145
+ Windows 下会注册为用户登录时启动的计划任务 `AutoModelKeyRouter` 并立即启动。Linux 下会注册为 systemd user service:`auto-model-key-router.service` 并立即启动,同时尝试启用 linger 以支持用户未登录时启动。
146
+
147
+ 也可以使用统一服务管理命令:
148
+
149
+ ```bash
150
+ auto-model-key-router --config router-config.json --service install
151
+ auto-model-key-router --config router-config.json --service status
152
+ auto-model-key-router --config router-config.json --service start
153
+ auto-model-key-router --config router-config.json --service stop
154
+ auto-model-key-router --config router-config.json --service restart
155
+ auto-model-key-router --config router-config.json --service uninstall
156
+ ```
157
+
158
+ Terminal UI 中的“管理系统服务 / 开机自启动”会进入服务管理子菜单,可直接安装、卸载、启动、停止、重启和查看状态。
159
+
160
+ 只查看配置摘要:
161
+
162
+ ```bash
163
+ auto-model-key-router --config router-config.json --show-config
164
+ ```
165
+
166
+ 覆盖监听地址:
167
+
168
+ ```bash
169
+ auto-model-key-router --config router-config.json --host 0.0.0.0 --port 8000
170
+ ```
171
+
172
+ 也可以在 Terminal UI 中配置监听地址。默认只监听 `127.0.0.1`,配置为 `0.0.0.0` 时会接受所有可达网络的连接;如果机器暴露在公网或未受信任网络中,请务必启用本地鉴权、限制防火墙访问,并避免泄露上游 API Key。Terminal UI 首页会在检测到 `0.0.0.0` 时显示显眼风险提示。
173
+
174
+ 如果配置文件没有模型,直接启动服务时会自动进入交互式配置,依次输入模型 ID、Key 名称、上游 `base_url` 和 API key。
175
+
176
+ 也可以通过命令直接查看日志板块,默认显示最近 20 行运行日志和最近 20 条请求记录:
177
+
178
+ ```bash
179
+ auto-model-key-router --config router-config.json --show-logs
180
+ ```
181
+
182
+ 指定日志行数和请求记录条数:
183
+
184
+ ```bash
185
+ auto-model-key-router --config router-config.json --show-logs 50
186
+ ```
187
+
188
+ ## 请求示例
189
+
190
+ ```bash
191
+ curl http://127.0.0.1:8000/v1/chat/completions \
192
+ -H "Content-Type: application/json" \
193
+ -H "Authorization: Bearer your-local-api-key" \
194
+ -d "{\"model\":\"gpt-4o-mini\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}]}"
195
+ ```
196
+
197
+ 本地服务会根据请求体中的 `model` 字段选择对应 key,并把请求转发到该 key 配置的上游 `/v1/chat/completions`。
198
+
199
+ 也兼容 Anthropic Messages 和 OpenAI Responses 风格的消息输入:
200
+
201
+ - 请求 `/v1/messages` 时会把 Anthropic 顶层 `system` 转为 system message,并把 `content` 中的 `text`、base64 `image` 块转为 OpenAI-compatible 消息块后转发到上游 `/v1/chat/completions`。
202
+ - 请求 `/v1/responses` 时会把 `instructions` 转为 system message,把 `input` 字符串或消息数组转为 `messages` 后转发到上游 `/v1/chat/completions`。
203
+ - 请求 `/v1/chat/completions` 时也会兼容 Anthropic 风格的顶层 `system` 和 Responses 风格的 content part 类型。
204
+
205
+ ## 本地鉴权
206
+
207
+ 首次生成配置文件时会自动生成 `local_api_key`。如果旧配置中该字段为空,程序加载配置时也会自动补齐。也可以在 Terminal UI 中选择“生成 / 重置本地 API key”重新生成。
208
+
209
+ 设置后,客户端访问本地 `/v1/*` 接口时需要传入:
210
+
211
+ ```bash
212
+ Authorization: Bearer your-local-api-key
213
+ ```
214
+
215
+ 也支持使用:
216
+
217
+ ```bash
218
+ x-api-key: your-local-api-key
219
+ ```
220
+
221
+ 如果 `local_api_key` 为空,则不启用本地鉴权。
222
+
223
+ ## 计量统计
224
+
225
+ 服务会把计量数据写入 SQLite 存档。`metrics_db_path` 为空时默认写入系统应用缓存目录下的 `metrics.sqlite3`,也可以通过配置项 `metrics_db_path` 修改存档路径,并通过 `/metrics` 查看聚合统计:
226
+
227
+ ```bash
228
+ curl http://127.0.0.1:8000/metrics
229
+ ```
230
+
231
+ 返回数据包含:
232
+
233
+ - `total`:全局累计统计
234
+ - `models`:按真实模型 ID 汇总的统计
235
+ - `requested_models`:按客户端请求使用的模型名/别名汇总的统计
236
+ - `model_requested_models`:在真实模型 ID 下按请求模型名/别名拆分的统计
237
+ - `keys`:按真实模型 ID 和 key 名称拆分的统计
238
+ - `requests`:实际尝试上游 key 的次数
239
+ - `successes` / `failures`:成功与失败次数
240
+ - `retries`:因上游错误或请求异常触发切换 key 的次数
241
+ - `prompt_tokens` / `completion_tokens` / `total_tokens`:从上游响应 `usage` 字段提取的 Token 用量
242
+ - `cached_tokens`:OpenAI-compatible `prompt_tokens_details.cached_tokens` 或顶层 `cached_tokens` 的缓存 Token 数
243
+ - `cache_creation_input_tokens` / `cache_read_input_tokens`:Anthropic-compatible 缓存写入与读取 Token 数
244
+ - `cache_hits` / `cache_misses` / `cache_hit_rate`:按请求维度统计缓存命中、未命中和命中率
245
+ - `cached_token_rate`:缓存 Token 占输入 Token 的比例
246
+ - `total_duration_ms` / `avg_duration_ms` / `min_duration_ms` / `max_duration_ms`:上游响应耗时统计,单位毫秒
247
+ - `status_codes`:上游响应状态码分布
248
+ - `database_path`:当前 SQLite 存档路径
249
+
250
+ 统计记录会持久化保存,服务重启后 `/metrics` 会继续基于同一个 SQLite 文件聚合历史数据。
@@ -0,0 +1,233 @@
1
+ Auto Model Key Router 是一个轻量的本地 API key 路由服务。它支持为同一个模型 ID 配置多个 API key,并以轮询/优先级的方式把请求自动分配到可用 key;当上游返回认证、限流或服务错误时,会依次切换到已配置的其他 key,只有单 key 配置才会按重试次数重复尝试同一个 key。
2
+
3
+ ## 功能
4
+
5
+ - 支持 OpenAI-compatible `/v1/*` 请求转发
6
+ - 支持同一模型 ID 配置多个 key
7
+ - 支持按模型维度选择“分流”或“优先级”路由模式
8
+ - 支持 key 失败后自动尝试下一个 key
9
+ - 支持请求量、成功/失败、重试、状态码、Token 使用量和缓存命中统计
10
+ - 支持 Rich CLI 展示配置摘要、交互式添加配置和日志板块
11
+ - 支持 `/health`、`/metrics` 和 `/v1/models` 本地接口
12
+
13
+ ## 安装
14
+
15
+ ```bash
16
+ pip install -e .
17
+ ```
18
+
19
+ ## 配置
20
+
21
+ 首次运行时,如果 `router-config.json` 不存在,程序会自动生成一个空配置文件。你也可以复制示例配置:
22
+
23
+ ```bash
24
+ copy router-config.example.json router-config.json
25
+ ```
26
+
27
+ 编辑 `router-config.json`:
28
+
29
+ ```json
30
+ {
31
+ "host": "127.0.0.1",
32
+ "port": 8000,
33
+ "default_base_url": "https://api.openai.com",
34
+ "request_timeout": 60,
35
+ "max_retries": 2,
36
+ "metrics_db_path": "",
37
+ "log_file_path": "",
38
+ "local_api_key": "amkr-generated-local-api-key",
39
+ "models": [
40
+ {
41
+ "id": "gpt-4o-mini",
42
+ "aliases": ["gpt-4o-mini-display", "fast-mini"],
43
+ "routing_mode": "round_robin",
44
+ "keys": [
45
+ { "name": "key-1", "api_key": "sk-your-first-key" },
46
+ { "name": "key-2", "api_key": "sk-your-second-key" }
47
+ ]
48
+ }
49
+ ]
50
+ }
51
+ ```
52
+
53
+ 也可以为某个 key 单独配置 `base_url`,用于接入其他 OpenAI-compatible 上游。
54
+
55
+ 每个模型配置中的 `id` 是统一路由用的真实模型 ID;`aliases` 是额外显示名称或别名。客户端请求中使用 `id` 或任意 `aliases` 都会映射到同一个模型配置和同一组 key。
56
+
57
+ `routing_mode` 支持两种模式:
58
+
59
+ - `round_robin`:分流模式,按配置顺序轮询多个 key,把请求均匀分配到不同 key,这是默认模式。
60
+ - `priority`:优先级模式,每次请求优先使用配置中排在最前面的 key;只有当前 key 请求失败且状态码可重试,才会按顺序尝试后面的 key。
61
+
62
+ 默认配置文件也会保存在同一个系统应用缓存目录中,文件名为 `router-config.json`。如果当前目录存在旧的 `router-config.json`,首次未指定 `--config` 启动时会自动复制到默认缓存目录。
63
+
64
+ `metrics_db_path` 和 `log_file_path` 为空时会使用系统默认应用缓存目录:
65
+
66
+ - Windows:`%LOCALAPPDATA%\\AutoModelKeyRouter\\`
67
+ - macOS:`~/Library/Caches/AutoModelKeyRouter/`
68
+ - Linux:`${XDG_CACHE_HOME:-~/.cache}/auto-model-key-router/`
69
+
70
+ 默认文件名为:
71
+
72
+ - 配置文件:`router-config.json`
73
+ - SQLite 计量存档:`metrics.sqlite3`
74
+ - 服务运行日志:`server.log`
75
+ - 后台服务 PID:`server.pid`,与日志文件同目录
76
+
77
+ 如果需要,也可以把 `metrics_db_path` 和 `log_file_path` 配成绝对路径。
78
+
79
+ ## 运行
80
+
81
+ 启动默认进入 Terminal UI:
82
+
83
+ ```bash
84
+ amkr --config router-config.json
85
+ ```
86
+
87
+ 也可以使用完整命令名:
88
+
89
+ ```bash
90
+ auto-model-key-router --config router-config.json
91
+ ```
92
+
93
+ 主菜单包含:
94
+
95
+ - 管理系统服务 / 开机自启动
96
+ - 交互式添加模型 / API key
97
+ - 生成 / 重置本地 API key
98
+ - 配置监听地址与端口
99
+ - 查看日志板块
100
+ - 退出
101
+
102
+ Terminal UI 只负责配置与服务管理,不直接承载一次性的启动逻辑。需要直接启动本地服务时使用命令行入口:
103
+
104
+ ```bash
105
+ auto-model-key-router --config router-config.json --serve
106
+ ```
107
+
108
+ 查看后台服务状态:
109
+
110
+ ```bash
111
+ auto-model-key-router --config router-config.json --status
112
+ ```
113
+
114
+ 停止后台服务:
115
+
116
+ ```bash
117
+ auto-model-key-router --config router-config.json --stop
118
+ ```
119
+
120
+ 后台服务会写入 PID 文件,默认与运行日志同目录,例如系统缓存目录下的 `server.pid`。
121
+
122
+ 注册为系统服务并启用开机自启动:
123
+
124
+ ```bash
125
+ auto-model-key-router --config router-config.json --install-service
126
+ ```
127
+
128
+ Windows 下会注册为用户登录时启动的计划任务 `AutoModelKeyRouter` 并立即启动。Linux 下会注册为 systemd user service:`auto-model-key-router.service` 并立即启动,同时尝试启用 linger 以支持用户未登录时启动。
129
+
130
+ 也可以使用统一服务管理命令:
131
+
132
+ ```bash
133
+ auto-model-key-router --config router-config.json --service install
134
+ auto-model-key-router --config router-config.json --service status
135
+ auto-model-key-router --config router-config.json --service start
136
+ auto-model-key-router --config router-config.json --service stop
137
+ auto-model-key-router --config router-config.json --service restart
138
+ auto-model-key-router --config router-config.json --service uninstall
139
+ ```
140
+
141
+ Terminal UI 中的“管理系统服务 / 开机自启动”会进入服务管理子菜单,可直接安装、卸载、启动、停止、重启和查看状态。
142
+
143
+ 只查看配置摘要:
144
+
145
+ ```bash
146
+ auto-model-key-router --config router-config.json --show-config
147
+ ```
148
+
149
+ 覆盖监听地址:
150
+
151
+ ```bash
152
+ auto-model-key-router --config router-config.json --host 0.0.0.0 --port 8000
153
+ ```
154
+
155
+ 也可以在 Terminal UI 中配置监听地址。默认只监听 `127.0.0.1`,配置为 `0.0.0.0` 时会接受所有可达网络的连接;如果机器暴露在公网或未受信任网络中,请务必启用本地鉴权、限制防火墙访问,并避免泄露上游 API Key。Terminal UI 首页会在检测到 `0.0.0.0` 时显示显眼风险提示。
156
+
157
+ 如果配置文件没有模型,直接启动服务时会自动进入交互式配置,依次输入模型 ID、Key 名称、上游 `base_url` 和 API key。
158
+
159
+ 也可以通过命令直接查看日志板块,默认显示最近 20 行运行日志和最近 20 条请求记录:
160
+
161
+ ```bash
162
+ auto-model-key-router --config router-config.json --show-logs
163
+ ```
164
+
165
+ 指定日志行数和请求记录条数:
166
+
167
+ ```bash
168
+ auto-model-key-router --config router-config.json --show-logs 50
169
+ ```
170
+
171
+ ## 请求示例
172
+
173
+ ```bash
174
+ curl http://127.0.0.1:8000/v1/chat/completions \
175
+ -H "Content-Type: application/json" \
176
+ -H "Authorization: Bearer your-local-api-key" \
177
+ -d "{\"model\":\"gpt-4o-mini\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}]}"
178
+ ```
179
+
180
+ 本地服务会根据请求体中的 `model` 字段选择对应 key,并把请求转发到该 key 配置的上游 `/v1/chat/completions`。
181
+
182
+ 也兼容 Anthropic Messages 和 OpenAI Responses 风格的消息输入:
183
+
184
+ - 请求 `/v1/messages` 时会把 Anthropic 顶层 `system` 转为 system message,并把 `content` 中的 `text`、base64 `image` 块转为 OpenAI-compatible 消息块后转发到上游 `/v1/chat/completions`。
185
+ - 请求 `/v1/responses` 时会把 `instructions` 转为 system message,把 `input` 字符串或消息数组转为 `messages` 后转发到上游 `/v1/chat/completions`。
186
+ - 请求 `/v1/chat/completions` 时也会兼容 Anthropic 风格的顶层 `system` 和 Responses 风格的 content part 类型。
187
+
188
+ ## 本地鉴权
189
+
190
+ 首次生成配置文件时会自动生成 `local_api_key`。如果旧配置中该字段为空,程序加载配置时也会自动补齐。也可以在 Terminal UI 中选择“生成 / 重置本地 API key”重新生成。
191
+
192
+ 设置后,客户端访问本地 `/v1/*` 接口时需要传入:
193
+
194
+ ```bash
195
+ Authorization: Bearer your-local-api-key
196
+ ```
197
+
198
+ 也支持使用:
199
+
200
+ ```bash
201
+ x-api-key: your-local-api-key
202
+ ```
203
+
204
+ 如果 `local_api_key` 为空,则不启用本地鉴权。
205
+
206
+ ## 计量统计
207
+
208
+ 服务会把计量数据写入 SQLite 存档。`metrics_db_path` 为空时默认写入系统应用缓存目录下的 `metrics.sqlite3`,也可以通过配置项 `metrics_db_path` 修改存档路径,并通过 `/metrics` 查看聚合统计:
209
+
210
+ ```bash
211
+ curl http://127.0.0.1:8000/metrics
212
+ ```
213
+
214
+ 返回数据包含:
215
+
216
+ - `total`:全局累计统计
217
+ - `models`:按真实模型 ID 汇总的统计
218
+ - `requested_models`:按客户端请求使用的模型名/别名汇总的统计
219
+ - `model_requested_models`:在真实模型 ID 下按请求模型名/别名拆分的统计
220
+ - `keys`:按真实模型 ID 和 key 名称拆分的统计
221
+ - `requests`:实际尝试上游 key 的次数
222
+ - `successes` / `failures`:成功与失败次数
223
+ - `retries`:因上游错误或请求异常触发切换 key 的次数
224
+ - `prompt_tokens` / `completion_tokens` / `total_tokens`:从上游响应 `usage` 字段提取的 Token 用量
225
+ - `cached_tokens`:OpenAI-compatible `prompt_tokens_details.cached_tokens` 或顶层 `cached_tokens` 的缓存 Token 数
226
+ - `cache_creation_input_tokens` / `cache_read_input_tokens`:Anthropic-compatible 缓存写入与读取 Token 数
227
+ - `cache_hits` / `cache_misses` / `cache_hit_rate`:按请求维度统计缓存命中、未命中和命中率
228
+ - `cached_token_rate`:缓存 Token 占输入 Token 的比例
229
+ - `total_duration_ms` / `avg_duration_ms` / `min_duration_ms` / `max_duration_ms`:上游响应耗时统计,单位毫秒
230
+ - `status_codes`:上游响应状态码分布
231
+ - `database_path`:当前 SQLite 存档路径
232
+
233
+ 统计记录会持久化保存,服务重启后 `/metrics` 会继续基于同一个 SQLite 文件聚合历史数据。
@@ -0,0 +1,16 @@
1
+ from __future__ import annotations
2
+
3
+ from importlib.metadata import PackageNotFoundError, version
4
+ from pathlib import Path
5
+
6
+
7
+ pyproject = Path(__file__).resolve().parents[1] / "pyproject.toml"
8
+ if pyproject.exists():
9
+ import tomllib
10
+
11
+ __version__ = tomllib.loads(pyproject.read_text(encoding="utf-8"))["project"]["version"]
12
+ else:
13
+ try:
14
+ __version__ = version("auto-model-key-router")
15
+ except PackageNotFoundError:
16
+ __version__ = "0.0.0"