Skip to content

Commit 7c8cdb4

Browse files
fylornclaude
andauthored
v0.76.0 (#347)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 9861aab commit 7c8cdb4

3 files changed

Lines changed: 36 additions & 20 deletions

File tree

‎Cargo.lock‎

Lines changed: 19 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎Cargo.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ categories = ["network-programming", "web-programming::http-server"]
5454

5555
# 二进制走 CalVer,crate 走 SemVer —— 两者是两回事,卖给不同的人。
5656
# 这里是 crate 的版本。
57-
version = "0.75.0"
57+
version = "0.76.0"
5858

5959
[workspace.dependencies]
6060
# ── 内部 crate ───────────────────────────────────────────

‎release-notes/0.76.0.md‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
This release makes `/live` report how fast running requests are generating right now, so a client can show a live speed during a long request, and names a broken answer body instead of reporting a decoding error.
2+
3+
**Upgrade notes**
4+
5+
- The control-plane protocol version is now 49. ThinkWatch Lite must be upgraded together with core: a Lite release with protocol 48 does not connect to 0.76.0, and the other way round.
6+
- The request store's schema and the configuration are unchanged; nothing is cleared.
7+
- For crates that embed the gateway: `Ending::streaming` takes the gateway's `pace` table, `AppState` has a `pace` field, `tw_observe::Meter` and `EventBus::meter` are new, and `tw_engine::TextTokens` is public. The public API of `tw_guard` is unchanged.
8+
9+
**Live generation speed.** `/live` used to give the speed of requests that finished in the last minute, so it had nothing to show while a long request ran.
10+
- The gateway keeps reading a successful stream after its first token and estimates the output as it arrives: text, reasoning text and tool arguments, with the same rule as the input estimate.
11+
- The estimate is multiplied by a ratio per upstream and model. Each streaming request that ends with reported usage updates that ratio (moving average, bounded between 0.5 and 2; skipped when reasoning was hidden). Gemini's cumulative usage in the stream is used when it is higher.
12+
- `LiveView.tokens_per_sec` is the total of the running requests over the last 3 seconds: null when nothing runs, 0 when requests run but none is generating yet.
13+
- `RunningView` has `tokens_per_sec` and `output_tokens` for each running request, null before the first token and for non-streaming requests.
14+
- The speed recorded for a finished request is unchanged and still uses the usage the upstream reports.
15+
16+
**Broken answer bodies.** An upstream that hung up in the middle of an answer was reported as "error decoding response body". Such failures now have their own code, `gw.upstream.body_broken`, with the causes spelled out, and `gw.upstream.forward_failed` carries every cause, with the URL reduced to its origin.

0 commit comments

Comments
 (0)