mirror of
https://github.com/RuoJi6/ARTEX.git
synced 2026-11-05 19:53:50 +08:00
36 lines
1.2 KiB
Go
36 lines
1.2 KiB
Go
// Package llmhttp contains the shared outbound HTTP client construction used by
|
|
// LLM endpoints. An empty proxy deliberately means direct and does not inherit
|
|
// HTTP_PROXY/HTTPS_PROXY from the process environment.
|
|
package llmhttp
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
// NewClient builds an HTTP client for an LLM endpoint. Supported proxies are
|
|
// http, https, and socks5, matching the profile configuration contract.
|
|
func NewClient(rawProxy string) (*http.Client, error) {
|
|
transport := http.DefaultTransport.(*http.Transport).Clone()
|
|
rawProxy = strings.TrimSpace(rawProxy)
|
|
if rawProxy == "" {
|
|
transport.Proxy = nil
|
|
} else {
|
|
proxyURL, err := url.Parse(rawProxy)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("llm: invalid proxy %q: %w", rawProxy, err)
|
|
}
|
|
switch proxyURL.Scheme {
|
|
case "http", "https", "socks5":
|
|
transport.Proxy = http.ProxyURL(proxyURL)
|
|
case "":
|
|
return nil, fmt.Errorf("llm: proxy %q missing scheme (use http://, https:// or socks5://)", rawProxy)
|
|
default:
|
|
return nil, fmt.Errorf("llm: unsupported proxy scheme %q (use http, https or socks5)", proxyURL.Scheme)
|
|
}
|
|
}
|
|
return &http.Client{Transport: transport}, nil
|
|
}
|