ai-css/library/modelprovider/providers/registry.go

56 lines
1.3 KiB
Go

package providers
import (
"ai-css/library/modelprovider"
"ai-css/library/modelprovider/config"
"ai-css/library/modelprovider/consts"
"ai-css/library/modelprovider/providers/openai"
"net"
"net/http"
"time"
)
var (
HttpClientTimeout = 5 * 60 * time.Second
)
type ProviderFactory func(conf *config.ProviderConfig) (modelprovider.Provider, error)
type Registry struct {
Providers map[consts.ProviderName]ProviderFactory // name -> Provider
}
func BuildRegistry() *Registry {
var providers = map[consts.ProviderName]ProviderFactory{
consts.ProviderOpenAI: func(providerConfig *config.ProviderConfig) (modelprovider.Provider, error) {
return openai.New(providerConfig, NewHttpClient()), nil
},
}
return &Registry{Providers: providers}
}
func NewHttpClient() *http.Client {
var proxyURL = GetRemoteProxy()
transport := &http.Transport{
DialContext: (&net.Dialer{
Timeout: 90 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
ForceAttemptHTTP2: true,
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 90 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}
if proxyURL != nil {
transport.Proxy = http.ProxyURL(proxyURL)
}
return &http.Client{
Transport: transport,
Timeout: HttpClientTimeout,
}
}