Skip to content

Commit d77cf2d

Browse files
fylornclaude
andcommitted
Release 3.10.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 3d42d54 commit d77cf2d

5 files changed

Lines changed: 58 additions & 23 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,23 @@ target.
1111

1212
## [Unreleased]
1313

14+
## [3.10.0] — 2026-10-25
15+
16+
Upstreams that fail for the moment before any of the answer reached the
17+
client are now tried again instead of the error going straight back, and
18+
a model can set the reasoning effort its requests carry, with the
19+
gateway adapting when an upstream refuses a level. The thinkwatch-core
20+
crates move from v0.81.0 to v0.83.0.
21+
22+
One new setting (`gateway.retry_wait_secs`), one new column
23+
(`models.reasoning_effort`, added on startup) and one new metric; no
24+
route or setting is removed.
25+
1426
### Read before upgrading
1527

28+
- **`models` gains a nullable column, `reasoning_effort`.** The schema
29+
applied at startup adds it (`ADD COLUMN IF NOT EXISTS`); existing
30+
models keep it empty and their requests go out unchanged.
1631
- **A request whose upstreams fail for the moment can take up to two
1732
minutes to fail.** When every route of a model failed with an overload
1833
or a server error, or could not be reached, before any of the answer
@@ -42,6 +57,24 @@ target.
4257

4358
### Added
4459

60+
- **A model can set its reasoning** (`models.reasoning_effort`, the
61+
Reasoning control in the model editor): `off` takes reasoning out of
62+
requests that have it on, and a level (`low`, `medium`, `high`,
63+
`xhigh`, `max`) changes the effort of requests whose reasoning is on.
64+
Requests without reasoning, such as title generation, go out
65+
unchanged. The setting is applied to the caller's request before
66+
routing, so a hop converted to another format carries it the way that
67+
format writes it, and the response cache keys on the changed body.
68+
- **An effort the upstream refuses is sent again once with one it
69+
accepts.** On a 400 about the reasoning level, the request goes once
70+
more to the same route with the level the error names, or without one.
71+
This does not count against the retry window. When that is answered,
72+
the choice is remembered in Redis per provider and upstream model for
73+
7 days, so later requests send what worked straight away; a provider's
74+
memory is cleared when its URL or credentials change, a route relearns
75+
its protocol, or the provider is deleted. A hop that sent a different
76+
effort than the caller asked records `"effort": {asked, sent, reason}`
77+
on its `gateway_logs` row.
4578
- **Transient upstream failures are retried.** When every candidate route
4679
has been tried and the last one failed for the moment — 500, 502, 503,
4780
504 or 529, a connection that could not be made or broke before the
@@ -2649,7 +2682,9 @@ unreleased builds should: stop the gateway, run `db/schema.sql`
26492682
against PostgreSQL, restart against this tag. The schema is
26502683
idempotent end-to-end, so the apply is safe to repeat.
26512684

2652-
[Unreleased]: https://github.com/ThinkWatchProject/ThinkWatch/compare/v3.9.0...HEAD
2685+
[Unreleased]: https://github.com/ThinkWatchProject/ThinkWatch/compare/v3.10.0...HEAD
2686+
[3.10.0]: https://github.com/ThinkWatchProject/ThinkWatch/releases/tag/v3.10.0
2687+
[3.9.1]: https://github.com/ThinkWatchProject/ThinkWatch/releases/tag/v3.9.1
26532688
[3.9.0]: https://github.com/ThinkWatchProject/ThinkWatch/releases/tag/v3.9.0
26542689
[3.8.3]: https://github.com/ThinkWatchProject/ThinkWatch/releases/tag/v3.8.3
26552690
[3.8.2]: https://github.com/ThinkWatchProject/ThinkWatch/releases/tag/v3.8.2

‎Cargo.lock‎

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

‎Cargo.toml‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ members = [
1010
]
1111

1212
[workspace.package]
13-
version = "3.9.1"
13+
version = "3.10.0"
1414
edition = "2024"
1515
# The MSRV: the newest `rust-version` among the locked dependencies
1616
# (sqlx 0.9 and the aws-smithy crates under aws-sigv4). Without it,
@@ -70,10 +70,10 @@ opt-level = 3
7070
# never re-exported through a local shim. And the reverse: something only
7171
# this side uses (the at-rest crypto, IMDSv2 credentials, the gateway error)
7272
# lives here, not in core.
73-
tw-bedrock = { git = "https://github.com/ThinkWatchProject/ThinkWatch-Core.git", rev = "14f52f25a434faf1e7336746b57c9ad8d8aebb96" }
74-
tw-breaker = { git = "https://github.com/ThinkWatchProject/ThinkWatch-Core.git", rev = "14f52f25a434faf1e7336746b57c9ad8d8aebb96" }
75-
tw-dialect = { git = "https://github.com/ThinkWatchProject/ThinkWatch-Core.git", rev = "14f52f25a434faf1e7336746b57c9ad8d8aebb96" }
76-
tw-guard = { git = "https://github.com/ThinkWatchProject/ThinkWatch-Core.git", rev = "14f52f25a434faf1e7336746b57c9ad8d8aebb96" }
73+
tw-bedrock = { git = "https://github.com/ThinkWatchProject/ThinkWatch-Core.git", tag = "v0.83.0" }
74+
tw-breaker = { git = "https://github.com/ThinkWatchProject/ThinkWatch-Core.git", tag = "v0.83.0" }
75+
tw-dialect = { git = "https://github.com/ThinkWatchProject/ThinkWatch-Core.git", tag = "v0.83.0" }
76+
tw-guard = { git = "https://github.com/ThinkWatchProject/ThinkWatch-Core.git", tag = "v0.83.0" }
7777

7878
# Web framework
7979
axum = { version = "0.8", features = ["macros", "ws"] }

‎deploy/helm/think-watch/Chart.yaml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ apiVersion: v2
22
name: think-watch
33
description: Enterprise AI API Gateway & MCP Management Platform
44
type: application
5-
version: 3.9.1
6-
appVersion: "3.9.1"
5+
version: 3.10.0
6+
appVersion: "3.10.0"
77
keywords:
88
- ai
99
- gateway

‎web/package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "web",
33
"private": true,
4-
"version": "3.9.1",
4+
"version": "3.10.0",
55
"type": "module",
66
"packageManager": "pnpm@12.14.0",
77
"scripts": {

0 commit comments

Comments
 (0)