Преглед изворни кода

feat: 支持 xAI 网络搜索

RedwindA пре 5 месеци
родитељ
комит
22a0ed0ee2
3 измењених фајлова са 12 додато и 0 уклоњено
  1. 1 0
      dto/openai_request.go
  2. 9 0
      relay/channel/xai/adaptor.go
  3. 2 0
      relay/channel/xai/constants.go

+ 1 - 0
dto/openai_request.go

@@ -55,6 +55,7 @@ type GeneralOpenAIRequest struct {
 	EnableThinking      any               `json:"enable_thinking,omitempty"` // ali
 	THINKING            json.RawMessage   `json:"thinking,omitempty"`        // doubao
 	ExtraBody           json.RawMessage   `json:"extra_body,omitempty"`
+	SearchParameters    any               `json:"search_parameters,omitempty"` //xai
 	WebSearchOptions    *WebSearchOptions `json:"web_search_options,omitempty"`
 	// OpenRouter Params
 	Usage     json.RawMessage `json:"usage,omitempty"`

+ 9 - 0
relay/channel/xai/adaptor.go

@@ -56,6 +56,15 @@ func (a *Adaptor) ConvertOpenAIRequest(c *gin.Context, info *relaycommon.RelayIn
 	if request == nil {
 		return nil, errors.New("request is nil")
 	}
+	if strings.HasSuffix(info.UpstreamModelName, "-search") {
+		info.UpstreamModelName = strings.TrimSuffix(info.UpstreamModelName, "-search")
+		request.Model = info.UpstreamModelName
+		toMap := request.ToMap()
+		toMap["search_parameters"] = map[string]any{
+			"mode": "on",
+		}
+		return toMap, nil
+	}
 	if strings.HasPrefix(request.Model, "grok-3-mini") {
 		if request.MaxCompletionTokens == 0 && request.MaxTokens != 0 {
 			request.MaxCompletionTokens = request.MaxTokens

+ 2 - 0
relay/channel/xai/constants.go

@@ -1,6 +1,8 @@
 package xai
 
 var ModelList = []string{
+	// grok-4
+	"grok-4", "grok-4-0709", "grok-4-0709-search",
 	// grok-3
 	"grok-3-beta", "grok-3-mini-beta",
 	// grok-3 mini