package channel import ( "context" "gpt-load/internal/models" "net/http" "net/url" "github.com/gin-gonic/gin" ) // ChannelProxy defines the interface for different API channel proxies. type ChannelProxy interface { // BuildUpstreamURL constructs the target URL for the upstream service. BuildUpstreamURL(originalURL *url.URL, group *models.Group) (string, error) // IsConfigStale checks if the channel's configuration is stale compared to the provided group. IsConfigStale(group *models.Group) bool // GetHTTPClient returns the client for standard requests. GetHTTPClient() *http.Client // GetStreamClient returns the client for streaming requests. GetStreamClient() *http.Client // ModifyRequest allows the channel to add specific headers or modify the request ModifyRequest(req *http.Request, apiKey *models.APIKey, group *models.Group) // IsStreamRequest checks if the request is for a streaming response, IsStreamRequest(c *gin.Context, bodyBytes []byte) bool // ValidateKey checks if the given API key is valid. ValidateKey(ctx context.Context, key string) (bool, error) }