Files
gemini-banlancer/internal/channel/channel.go
2025-11-20 12:24:05 +08:00

48 lines
1.8 KiB
Go

// Filename: internal/channel/channel.go
package channel
import (
"context"
"gemini-balancer/internal/errors"
"gemini-balancer/internal/models"
"net/http"
"time"
"github.com/gin-gonic/gin"
)
// ChannelProxy 是所有协议通道必须实现的统一接口
type ChannelProxy interface {
// RewritePath 路径重写的核心接口,负责将客户端路径转换为上游期望的路径
RewritePath(basePath, originalPath string) string
TransformRequest(c *gin.Context, requestBody []byte) (newBody []byte, modelName string, err error)
// IsStreamRequest 检查请求是否为流式
IsStreamRequest(c *gin.Context, bodyBytes []byte) bool
// IsOpenAICompatibleRequest 检查请求是否使用了OpenAI兼容路径
IsOpenAICompatibleRequest(c *gin.Context) bool
// ExtractModel 从请求中提取模型名称
ExtractModel(c *gin.Context, bodyBytes []byte) string
// ValidateKey 验证API Key的有效性
ValidateKey(ctx context.Context, apiKey *models.APIKey, targetURL string, timeout time.Duration) *errors.APIError
// ModifyRequest 在将请求发往上游前对其进行修改(如添加认证)
ModifyRequest(req *http.Request, apiKey *models.APIKey)
// ProcessSmartStreamRequest 处理核心的流式代理请求
ProcessSmartStreamRequest(c *gin.Context, params SmartRequestParams)
// 其他非流式处理方法等...
}
// SmartRequestParams 是一个参数容器,用于将所有高层依赖,一次性、干净地传递到底层。
type SmartRequestParams struct {
CorrelationID string
APIKey *models.APIKey
UpstreamURL string
RequestBody []byte
OriginalRequest models.GeminiRequest
EventLogger *models.RequestFinishedEvent
MaxRetries int
RetryDelay time.Duration
LogTruncationLimit int
StreamingRetryPrompt string // <--- 传递续传指令
}