diff --git a/relay/channel/openai/adaptor.go b/relay/channel/openai/adaptor.go index 115b7b76..4d99a76c 100644 --- a/relay/channel/openai/adaptor.go +++ b/relay/channel/openai/adaptor.go @@ -35,6 +35,21 @@ type Adaptor struct { 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) { // 使用 service.GeminiToOpenAIRequest 转换请求格式 openaiRequest, err := service.GeminiToOpenAIRequest(request, info) @@ -197,16 +212,14 @@ func (a *Adaptor) ConvertOpenAIRequest(c *gin.Context, info *relaycommon.RelayIn request.MaxTokens = 0 } request.Temperature = nil - if strings.HasSuffix(request.Model, "-high") { - request.ReasoningEffort = "high" - request.Model = strings.TrimSuffix(request.Model, "-high") - } else if strings.HasSuffix(request.Model, "-low") { - request.ReasoningEffort = "low" - request.Model = strings.TrimSuffix(request.Model, "-low") - } else if strings.HasSuffix(request.Model, "-medium") { - request.ReasoningEffort = "medium" - request.Model = strings.TrimSuffix(request.Model, "-medium") + + // 转换模型推理力度后缀 + effort, originModel := parseReasoningEffortFromModelSuffix(request.Model) + if effort != "" { + request.ReasoningEffort = effort + request.Model = originModel } + info.ReasoningEffort = request.ReasoningEffort 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) { - // 模型后缀转换 reasoning effort - if strings.HasSuffix(request.Model, "-high") { - request.Reasoning.Effort = "high" - request.Model = strings.TrimSuffix(request.Model, "-high") - } else if strings.HasSuffix(request.Model, "-low") { - 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") + // 转换模型推理力度后缀 + effort, originModel := parseReasoningEffortFromModelSuffix(request.Model) + if effort != "" { + request.Reasoning.Effort = effort + request.Model = originModel } return request, nil } diff --git a/setting/ratio_setting/model_ratio.go b/setting/ratio_setting/model_ratio.go index c0cbe190..c9a9521f 100644 --- a/setting/ratio_setting/model_ratio.go +++ b/setting/ratio_setting/model_ratio.go @@ -450,6 +450,10 @@ func getHardcodedCompletionModelRatio(name string) (float64, bool) { } return 4, true } + // gpt-5 匹配 + if strings.HasPrefix(name, "gpt-5") { + return 8, true + } // gpt-4.5-preview匹配 if strings.HasPrefix(name, "gpt-4.5-preview") { return 2, true