Merge pull request #6839 from mason0510/fix/grok-external-web-access

fix(grok): 移除 Chat Completions 中不支持的 external_web_access 参数
This commit is contained in:
Wesley Liddick
2026-09-08 20:47:25 +08:00
committed by GitHub
2 changed files with 13 additions and 3 deletions
@@ -157,6 +157,10 @@ func (s *OpenAIGatewayService) forwardAsRawChatCompletions(
if err != nil {
return nil, fmt.Errorf("normalize Grok chat reasoning effort: %w", err)
}
upstreamBody, err = sanitizeGrokUnsupportedFields(upstreamBody)
if err != nil {
return nil, fmt.Errorf("sanitize Grok unsupported fields: %w", err)
}
}
upstreamBody = applyOllamaCloudRawChatCompletionsRequest(account, upstreamBody)
upstreamBody = clampOllamaCloudUpstreamMaxTokens(account, upstreamBody)
@@ -763,11 +763,14 @@ func grokSupportsReasoningEffort(model string) bool {
}
}
var grokResponsesUnsupportedRecursiveFields = map[string]struct{}{
// grokUnsupportedRecursiveFields 定义 Grok 平台(Responses 和 Chat Completions)不支持的字段
var grokUnsupportedRecursiveFields = map[string]struct{}{
"external_web_access": {},
}
func sanitizeGrokResponsesUnsupportedFields(body []byte) ([]byte, error) {
// sanitizeGrokUnsupportedFields 递归移除 Grok 平台不支持的字段
// 适用于 Responses API 和 Chat Completions API
func sanitizeGrokUnsupportedFields(body []byte) ([]byte, error) {
if !bytes.Contains(body, []byte(`"external_web_access"`)) {
return body, nil
}
@@ -776,12 +779,15 @@ func sanitizeGrokResponsesUnsupportedFields(body []byte) ([]byte, error) {
if err := decodeOpenAIJSONUseNumber(body, &payload); err != nil {
return nil, err
}
if !deleteJSONFields(payload, grokResponsesUnsupportedRecursiveFields) {
if !deleteJSONFields(payload, grokUnsupportedRecursiveFields) {
return body, nil
}
return marshalOpenAIUpstreamJSON(payload)
}
// sanitizeGrokResponsesUnsupportedFields 保留旧函数名作为别名,向后兼容
var sanitizeGrokResponsesUnsupportedFields = sanitizeGrokUnsupportedFields
func deleteJSONFields(value any, fields map[string]struct{}) bool {
switch typed := value.(type) {
case map[string]any: