@@ -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`
26492682against PostgreSQL, restart against this tag. The schema is
26502683idempotent 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
0 commit comments