mirror of
https://github.com/lukaszraczylo/traefik-llmgateway.git
synced 2026-10-16 05:37:28 +00:00
fix(registry): retry failed startup discovery once in the background
A provider whose discovery failed during the warm fill at pod start went without discovered models for a full discovery interval, which is 1 hour by default. It also stayed that way until a request arrived after the interval. Production logs showed this for openai-audio and anthropic when outbound calls were slow at startup. A provider that fails the warm fill now gets one background retry after 10s. The retry has its own timeout and uses the same refresh bookkeeping. It is skipped when a refresh is already in flight or has finished since the warm fill, and it is not scheduled when the parent context was canceled. A recovery logs one INFO line. If the retry also fails, the existing breaker behaviour applies unchanged. The retry delay and the warm-fill timeout can be set per registry for tests. yaegi-check probes the retry under the interpreter. Claude-Session: https://claude.ai/code/session_01V5jYJNxpDFdJkyyExpADrv
This commit is contained in:
@@ -1146,6 +1146,10 @@ func newGateway(ctx context.Context, next http.Handler, config *Config, name str
|
||||
// Routes the self-resolving conditions (a model id two providers both
|
||||
// serve) to WARN instead of ERROR — see the registry's warn field.
|
||||
registry.warn = g.warnf
|
||||
// Routes retryWarmFill's "recovered after retry" success line to INFO
|
||||
// instead of the constructor's default ERROR (g.errorf, passed to
|
||||
// newModelRegistry above) — see the registry's info field doc comment.
|
||||
registry.info = g.logf
|
||||
// ctx is passed through unwrapped, not re-bounded to warmFillTimeout here:
|
||||
// warmFill already gives each discovery-enabled provider its own fresh
|
||||
// warmFillTimeout budget per provider (registry.go). Wrapping ctx to a
|
||||
|
||||
Reference in New Issue
Block a user