Skip to content

Commit 5e38d48

Browse files
committed
feat(tensorzero): 添加 NewAPI 配置支持并优化容器配置
- 新增 TENSORZERO_CONFIG_FILE 环境变量用于动态切换配置文件 - 添加 newapi.toml 配置文件作为 NewAPI 的替代配置选项 - 在 .env.example 和 .env.production.example 中添加 NEWAPI_API_KEY - 修改 compose.yaml 使容器能够通过环境变量动态加载配置文件 - 将配置文件挂载方式从单文件改为目录挂载以支持多配置 - 更新 tensorzero.md 文档说明 NewAPI 配置使用方法 - 为 NewAPI 配置添加基础的重试和超时保护机制
1 parent cbbe32c commit 5e38d48

5 files changed

Lines changed: 73 additions & 4 deletions

File tree

ai/gateway/tensorzero/.env.example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
TENSORZERO_CONFIG_FILE=tensorzero.toml
12
TENSORZERO_GATEWAY_IMAGE=tensorzero/gateway
23
TENSORZERO_UI_IMAGE=tensorzero/ui
34
TENSORZERO_CLICKHOUSE_IMAGE=clickhouse/clickhouse-server:lts
45
TENSORZERO_VALKEY_IMAGE=valkey/valkey:8-alpine
56
TENSORZERO_GATEWAY_PORT=34400
67
TENSORZERO_UI_PORT=34401
78
DASHSCOPE_API_KEY=sk-xxxx
9+
NEWAPI_API_KEY=sk-xxxx
810
TENSORZERO_CLICKHOUSE_DB=tensorzero
911
TENSORZERO_CLICKHOUSE_USER=tensorzero
1012
TENSORZERO_CLICKHOUSE_PASSWORD=change-me

ai/gateway/tensorzero/.env.production.example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
TENSORZERO_CONFIG_FILE=tensorzero.toml
12
# 生产环境建议固定镜像版本,替换 ClickHouse 凭据,并通过 HTTPS 反向代理暴露 gateway / UI。
23
TENSORZERO_GATEWAY_IMAGE=tensorzero/gateway
34
TENSORZERO_UI_IMAGE=tensorzero/ui
@@ -6,6 +7,7 @@ TENSORZERO_VALKEY_IMAGE=valkey/valkey:8-alpine
67
TENSORZERO_GATEWAY_PORT=34400
78
TENSORZERO_UI_PORT=34401
89
DASHSCOPE_API_KEY=sk-prod-xxxx
10+
NEWAPI_API_KEY=sk-prod-xxxx
911
TENSORZERO_CLICKHOUSE_DB=tensorzero
1012
TENSORZERO_CLICKHOUSE_USER=tensorzero
1113
TENSORZERO_CLICKHOUSE_PASSWORD=change-me-now

ai/gateway/tensorzero/compose.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,9 @@ services:
4545
valkey:
4646
condition: service_healthy
4747
command:
48+
# 通过环境变量切换 tensorzero.toml / newapi.toml,避免每次切换都改 compose。
4849
- "--config-file"
49-
- "/app/config/tensorzero.toml"
50+
- "/app/config/${TENSORZERO_CONFIG_FILE:-tensorzero.toml}"
5051
environment:
5152
# TensorZero 通过 OpenAI 兼容提供方接入百炼,这里直接注入百炼 API Key。
5253
DASHSCOPE_API_KEY: ${DASHSCOPE_API_KEY:-}
@@ -55,7 +56,7 @@ services:
5556
# Valkey URL 负责自定义限流状态存储。
5657
TENSORZERO_VALKEY_URL: ${TENSORZERO_VALKEY_URL:-redis://valkey:6379/0}
5758
volumes:
58-
- ./tensorzero.toml:/app/config/tensorzero.toml:ro
59+
- ./:/app/config:ro
5960
ports:
6061
- "${TENSORZERO_GATEWAY_PORT:-34400}:3000"
6162
extra_hosts:
@@ -78,7 +79,7 @@ services:
7879
TENSORZERO_GATEWAY_URL: ${TENSORZERO_GATEWAY_URL:-http://tensorzero-gateway:3000}
7980
TENSORZERO_CLICKHOUSE_URL: ${TENSORZERO_CLICKHOUSE_URL:-http://tensorzero:change-me@clickhouse:8123/tensorzero}
8081
volumes:
81-
- ./tensorzero.toml:/app/config/tensorzero.toml:ro
82+
- ./:/app/config:ro
8283
ports:
8384
- "${TENSORZERO_UI_PORT:-34401}:4000"
8485

ai/gateway/tensorzero/newapi.toml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
[gateway]
2+
# 关闭匿名使用分析,并限制全局出站超时,避免上游 NewAPI 抖动时长期占住连接。
3+
disable_pseudonymous_usage_analytics = true
4+
global_outbound_http_timeout_ms = 30_000
5+
6+
# TensorZero 对 OpenAI-compatible provider 需要显式配置 `model_name`,
7+
# 不能像 LiteLLM 那样通过一个 TOML 真正做 `*` 模型透传。
8+
# 这里保留一个最小模板:把下面的 `api_base` 和 `model_name` 改成你要走的 NewAPI 地址与模型。
9+
[models.newapi_chat]
10+
routing = ["newapi"]
11+
12+
[models.newapi_chat.providers.newapi]
13+
type = "openai"
14+
api_base = "https://newapi.example.com/v1"
15+
model_name = "qwen-plus"
16+
api_key_location = "env::NEWAPI_API_KEY"
17+
# 保留一层轻量重试与超时,避免偶发 429 / 5xx 直接透传给上层调用方。
18+
retries = { num_retries = 1, max_delay_s = 4 }
19+
timeouts = { non_streaming.total_ms = 15_000, streaming.ttft_ms = 3_000 }
20+
21+
[functions.chat_simple]
22+
# 最小聊天函数,不做降级与复杂路由,适合作为 NewAPI 的简洁接入模板。
23+
type = "chat"
24+
25+
[functions.chat_simple.variants.newapi]
26+
type = "chat_completion"
27+
model = "newapi_chat"

ai/gateway/tensorzero/tensorzero.md

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,23 @@
1414
- `.env.example`:开发环境变量示例。
1515
- `.env.production.example`:生产环境变量示例。
1616
- `tensorzero.toml`:生产级网关配置示例,包含百炼接入、降级、重试和限流规则。
17+
- `newapi.toml`:面向 NewAPI 的替代配置,沿用同样的降级、重试和限流思路。
1718
- `.env.local`:本地私有环境变量覆盖文件,可选。
1819

1920
## 环境变量
2021

2122
建议先在 `ai/gateway/tensorzero/.env.local` 中配置以下值:
2223

2324
```dotenv
25+
TENSORZERO_CONFIG_FILE=tensorzero.toml
2426
TENSORZERO_GATEWAY_IMAGE=tensorzero/gateway
2527
TENSORZERO_UI_IMAGE=tensorzero/ui
2628
TENSORZERO_CLICKHOUSE_IMAGE=clickhouse/clickhouse-server:lts
2729
TENSORZERO_VALKEY_IMAGE=valkey/valkey:8-alpine
2830
TENSORZERO_GATEWAY_PORT=34400
2931
TENSORZERO_UI_PORT=34401
3032
DASHSCOPE_API_KEY=sk-xxxx
33+
NEWAPI_API_KEY=sk-xxxx
3134
TENSORZERO_CLICKHOUSE_DB=tensorzero
3235
TENSORZERO_CLICKHOUSE_USER=tensorzero
3336
TENSORZERO_CLICKHOUSE_PASSWORD=change-me
@@ -38,7 +41,9 @@ TENSORZERO_VALKEY_URL=redis://valkey:6379/0
3841

3942
其中:
4043

44+
- `TENSORZERO_CONFIG_FILE`:要加载的配置文件名,默认 `tensorzero.toml`;如果要切到 NewAPI 版,改成 `newapi.toml`
4145
- `DASHSCOPE_API_KEY`:阿里百炼 API Key,供 `tensorzero.toml` 里的 OpenAI 兼容提供方配置使用。
46+
- `NEWAPI_API_KEY`:供 `newapi.toml` 使用的 NewAPI 密钥。
4247
- `TENSORZERO_GATEWAY_PORT`:宿主机访问 TensorZero Gateway 的端口,默认 `34400`
4348
- `TENSORZERO_UI_PORT`:宿主机访问 TensorZero UI 的端口,默认 `34401`
4449
- `TENSORZERO_CLICKHOUSE_*`:ClickHouse 初始化账号、密码和数据库。
@@ -47,6 +52,27 @@ TENSORZERO_VALKEY_URL=redis://valkey:6379/0
4752

4853
如果你要准备生产环境,可以复制 `./.env.production.example` 再按实际环境改值。
4954

55+
如果你想切到 NewAPI 版配置,只需要把 `.env.local` 里的:
56+
57+
```dotenv
58+
TENSORZERO_CONFIG_FILE=newapi.toml
59+
```
60+
61+
然后补好:
62+
63+
```dotenv
64+
NEWAPI_API_KEY=sk-xxxx
65+
```
66+
67+
同时直接编辑 `newapi.toml` 里的:
68+
69+
```toml
70+
api_base = "https://newapi.example.com/v1"
71+
model_name = "qwen-plus"
72+
```
73+
74+
把它改成你的 NewAPI 地址和默认模型。
75+
5076
## 启动方式
5177

5278
推荐直接使用:
@@ -94,14 +120,25 @@ curl http://127.0.0.1:34400/inference `
94120

95121
## 配置说明
96122

97-
`tensorzero.toml` 当前提供的是一套生产向示例
123+
`tensorzero.toml` 当前提供的是一套面向阿里百炼的生产向示例
98124

99125
- `qwen_plus_prod`:主模型,直连阿里百炼 `qwen-plus`
100126
- `qwen_flash_fallback`:降级模型,直连阿里百炼 `qwen-flash`
101127
- `chat_prod`:默认生产聊天函数,优先主模型,失败后顺序降级
102128
- `retries` + `timeouts`:在 provider 和 variant 两层分别约束重试和超时
103129
- `rate_limiting.rules`:示例化地展示全局总量保护与按 `tenant_id` 的细粒度限流
104130

131+
`newapi.toml` 则是一个更简洁的 NewAPI 版本:
132+
133+
- `newapi_chat`:单模型模板,通过 `api_base` 指向你的 NewAPI
134+
- `chat_simple`:最小聊天函数,不带降级和复杂实验路由
135+
- `retries` + `timeouts`:只保留一层轻量保护,避免配置过重
136+
137+
注意:
138+
139+
- TensorZero 的 OpenAI-compatible provider 需要显式配置 `model_name`,所以 `newapi.toml` 不能像 LiteLLM 一样用单个配置文件真正做任意模型 `*` 透传。
140+
- 如果你要切到另一个 NewAPI 模型,最简单的做法是直接改 `newapi.toml``model_name`;如果你要同时支持多个模型,就复制一份 `models.*``functions.*` 配置块。
141+
105142
注意:
106143

107144
- `tokens_per_hour` 规则要求请求中显式传 `max_tokens`,否则无法对 token 做保守预估。

0 commit comments

Comments
 (0)