48 lines
1.8 KiB
Go
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 // <--- 传递续传指令
|
|
}
|