Repository navigation
增加ttft和测速,以及自动重请求防止长任务中断机制
v1.2.0 — 增加 TTFT 与测速,以及自动重请求防止长任务中断机制
TTFT 与测速
- 每次请求输出一行
[ttft]日志:首字延迟、总耗时、输出 token 数、tok/s。这样能分清是"上游不出首字"还是"出字慢",两者处理方式完全不同。 - 新增只读接口
GET /stats:返回最近 200 条样本的整体与按模型统计(avg / p50 / p95 / min / max / errors)。p95 比平均值更能反映偶发卡死的真实频率。
自动重请求,防止长任务被上游拖死
上游迟迟不响应时,代理按下面的节奏兜底:
- 30 秒:先回
200+ SSE,之后每 10 秒发一个心跳,让客户端不要自己超时。 - 60 秒:另开一条连接把同一请求重发一次,谁先回数据用谁。
- 120 秒:一直静默的连接判定失败。
- 30 分钟:一直没有内容产出就主动终止,不再扣 token。
边界说明:重发只在还没向客户端吐过数据之前有效——流式过程中断了无法自动续上,否则会产生重复内容;且重发最多 1 次,不会无限重试。
其他调整
UPSTREAM_TIMEOUT改为可配置,默认 120 秒(原固定 600 秒)。- 超时改为立即返回
504并给出明确错误,不再干等;流式中断会下发 SSEerror事件,而不是静默截断。
环境变量
| 变量 | 默认 | 说明 |
|---|---|---|
UPSTREAM_TIMEOUT |
120 |
单条上游连接的静默上限(秒) |
HEARTBEAT_AFTER |
30 |
多久后开始发心跳(秒,仅流式请求) |
RETRY_AFTER |
60 |
多久后重发一次(秒) |
HEARTBEAT_INTERVAL |
10 |
心跳间隔(秒) |
CONTENT_IDLE_TIMEOUT |
1800 |
多久没有内容产出就终止(秒,0 关闭) |
STATS_WINDOW |
200 |
/stats 聚合的样本窗口 |
无需第三方依赖,Python 3.6+ 直接运行。升级后如遇长任务被兜底中断,调大 CONTENT_IDLE_TIMEOUT 或设为 0。完整变更见 CHANGELOG.md 。