Merge pull request #1525 from HynoR/chore/gpt5

feat: sync gpt-5 model ratio and support new reasoning effort
This commit is contained in:
Calcium-Ion
2025-08-08 10:24:13 +08:00
committed by GitHub
2 changed files with 31 additions and 19 deletions

View File

@@ -35,6 +35,21 @@ type Adaptor struct {
ResponseFormat string ResponseFormat string
} }
// parseReasoningEffortFromModelSuffix 从模型名称中解析推理级别
// support OAI models: o1-mini/o3-mini/o4-mini/o1/o3 etc...
// minimal effort only available in gpt-5
func parseReasoningEffortFromModelSuffix(model string) (string, string) {
effortSuffixes := []string{"-high", "-minimal", "-low", "-medium"}
for _, suffix := range effortSuffixes {
if strings.HasSuffix(model, suffix) {
effort := strings.TrimPrefix(suffix, "-")
originModel := strings.TrimSuffix(model, suffix)
return effort, originModel
}
}
return "", model
}
func (a *Adaptor) ConvertGeminiRequest(c *gin.Context, info *relaycommon.RelayInfo, request *dto.GeminiChatRequest) (any, error) { func (a *Adaptor) ConvertGeminiRequest(c *gin.Context, info *relaycommon.RelayInfo, request *dto.GeminiChatRequest) (any, error) {
// 使用 service.GeminiToOpenAIRequest 转换请求格式 // 使用 service.GeminiToOpenAIRequest 转换请求格式
openaiRequest, err := service.GeminiToOpenAIRequest(request, info) openaiRequest, err := service.GeminiToOpenAIRequest(request, info)
@@ -197,16 +212,14 @@ func (a *Adaptor) ConvertOpenAIRequest(c *gin.Context, info *relaycommon.RelayIn
request.MaxTokens = 0 request.MaxTokens = 0
} }
request.Temperature = nil request.Temperature = nil
if strings.HasSuffix(request.Model, "-high") {
request.ReasoningEffort = "high" // 转换模型推理力度后缀
request.Model = strings.TrimSuffix(request.Model, "-high") effort, originModel := parseReasoningEffortFromModelSuffix(request.Model)
} else if strings.HasSuffix(request.Model, "-low") { if effort != "" {
request.ReasoningEffort = "low" request.ReasoningEffort = effort
request.Model = strings.TrimSuffix(request.Model, "-low") request.Model = originModel
} else if strings.HasSuffix(request.Model, "-medium") {
request.ReasoningEffort = "medium"
request.Model = strings.TrimSuffix(request.Model, "-medium")
} }
info.ReasoningEffort = request.ReasoningEffort info.ReasoningEffort = request.ReasoningEffort
info.UpstreamModelName = request.Model info.UpstreamModelName = request.Model
@@ -423,16 +436,11 @@ func detectImageMimeType(filename string) string {
} }
func (a *Adaptor) ConvertOpenAIResponsesRequest(c *gin.Context, info *relaycommon.RelayInfo, request dto.OpenAIResponsesRequest) (any, error) { func (a *Adaptor) ConvertOpenAIResponsesRequest(c *gin.Context, info *relaycommon.RelayInfo, request dto.OpenAIResponsesRequest) (any, error) {
// 模型后缀转换 reasoning effort // 转换模型推理力度后缀
if strings.HasSuffix(request.Model, "-high") { effort, originModel := parseReasoningEffortFromModelSuffix(request.Model)
request.Reasoning.Effort = "high" if effort != "" {
request.Model = strings.TrimSuffix(request.Model, "-high") request.Reasoning.Effort = effort
} else if strings.HasSuffix(request.Model, "-low") { request.Model = originModel
request.Reasoning.Effort = "low"
request.Model = strings.TrimSuffix(request.Model, "-low")
} else if strings.HasSuffix(request.Model, "-medium") {
request.Reasoning.Effort = "medium"
request.Model = strings.TrimSuffix(request.Model, "-medium")
} }
return request, nil return request, nil
} }

View File

@@ -450,6 +450,10 @@ func getHardcodedCompletionModelRatio(name string) (float64, bool) {
} }
return 4, true return 4, true
} }
// gpt-5 匹配
if strings.HasPrefix(name, "gpt-5") {
return 8, true
}
// gpt-4.5-preview匹配 // gpt-4.5-preview匹配
if strings.HasPrefix(name, "gpt-4.5-preview") { if strings.HasPrefix(name, "gpt-4.5-preview") {
return 2, true return 2, true