feat(agent): relax provider http timeouts (#348)

This commit is contained in:
Fodesu
2026-04-15 00:07:41 +08:00
committed by GitHub
parent 38ac907361
commit 8e1ed3683f
10 changed files with 95 additions and 28 deletions
+39
View File
@@ -0,0 +1,39 @@
package models
import (
"net/http"
"time"
)
const (
DefaultProviderRequestTimeout = 2 * time.Minute
DefaultProviderProbeTimeout = 60 * time.Second
DefaultProviderTLSHandshakeTimeout = 30 * time.Second
)
var defaultProviderTransport = newDefaultProviderTransport()
// NewProviderHTTPClient returns an HTTP client for model/provider traffic.
// When timeout is zero or negative, the caller is expected to enforce limits
// via context deadlines, which keeps streaming responses unbounded by the
// client's global timeout while still using the relaxed TLS handshake window.
func NewProviderHTTPClient(timeout time.Duration) *http.Client {
client := &http.Client{Transport: defaultProviderTransport}
if timeout > 0 {
client.Timeout = timeout
}
return client
}
func newDefaultProviderTransport() *http.Transport {
base, ok := http.DefaultTransport.(*http.Transport)
if !ok {
return &http.Transport{TLSHandshakeTimeout: DefaultProviderTLSHandshakeTimeout}
}
transport := base.Clone()
if transport.TLSHandshakeTimeout < DefaultProviderTLSHandshakeTimeout {
transport.TLSHandshakeTimeout = DefaultProviderTLSHandshakeTimeout
}
return transport
}