Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
new-api
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
1dfffcf1
authored
Feb 19, 2026
by
Seefs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: skip field filtering when request passthrough is enabled
parent
4746b2bf
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
50 additions
and
6 deletions
+50
-6
relay/chat_completions_via_responses.go
+2
-2
relay/claude_handler.go
+1
-1
relay/common/override_test.go
+40
-0
relay/common/relay_info.go
+5
-1
relay/compatible_handler.go
+1
-1
relay/responses_handler.go
+1
-1
No files found.
relay/chat_completions_via_responses.go
View file @
1dfffcf1
...
@@ -76,7 +76,7 @@ func chatCompletionsViaResponses(c *gin.Context, info *relaycommon.RelayInfo, ad
...
@@ -76,7 +76,7 @@ func chatCompletionsViaResponses(c *gin.Context, info *relaycommon.RelayInfo, ad
return
nil
,
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
return
nil
,
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
}
}
chatJSON
,
err
=
relaycommon
.
RemoveDisabledFields
(
chatJSON
,
info
.
ChannelOtherSettings
)
chatJSON
,
err
=
relaycommon
.
RemoveDisabledFields
(
chatJSON
,
info
.
ChannelOtherSettings
,
info
.
ChannelSetting
.
PassThroughBodyEnabled
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
return
nil
,
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
}
}
...
@@ -120,7 +120,7 @@ func chatCompletionsViaResponses(c *gin.Context, info *relaycommon.RelayInfo, ad
...
@@ -120,7 +120,7 @@ func chatCompletionsViaResponses(c *gin.Context, info *relaycommon.RelayInfo, ad
return
nil
,
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
return
nil
,
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
}
}
jsonData
,
err
=
relaycommon
.
RemoveDisabledFields
(
jsonData
,
info
.
ChannelOtherSettings
)
jsonData
,
err
=
relaycommon
.
RemoveDisabledFields
(
jsonData
,
info
.
ChannelOtherSettings
,
info
.
ChannelSetting
.
PassThroughBodyEnabled
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
return
nil
,
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
}
}
...
...
relay/claude_handler.go
View file @
1dfffcf1
...
@@ -146,7 +146,7 @@ func ClaudeHelper(c *gin.Context, info *relaycommon.RelayInfo) (newAPIError *typ
...
@@ -146,7 +146,7 @@ func ClaudeHelper(c *gin.Context, info *relaycommon.RelayInfo) (newAPIError *typ
}
}
// remove disabled fields for Claude API
// remove disabled fields for Claude API
jsonData
,
err
=
relaycommon
.
RemoveDisabledFields
(
jsonData
,
info
.
ChannelOtherSettings
)
jsonData
,
err
=
relaycommon
.
RemoveDisabledFields
(
jsonData
,
info
.
ChannelOtherSettings
,
info
.
ChannelSetting
.
PassThroughBodyEnabled
)
if
err
!=
nil
{
if
err
!=
nil
{
return
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
return
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
}
}
...
...
relay/common/override_test.go
View file @
1dfffcf1
...
@@ -4,6 +4,9 @@ import (
...
@@ -4,6 +4,9 @@ import (
"encoding/json"
"encoding/json"
"reflect"
"reflect"
"testing"
"testing"
"github.com/QuantumNous/new-api/dto"
"github.com/QuantumNous/new-api/setting/model_setting"
)
)
func
TestApplyParamOverrideTrimPrefix
(
t
*
testing
.
T
)
{
func
TestApplyParamOverrideTrimPrefix
(
t
*
testing
.
T
)
{
...
@@ -772,6 +775,43 @@ func TestApplyParamOverrideToUpper(t *testing.T) {
...
@@ -772,6 +775,43 @@ func TestApplyParamOverrideToUpper(t *testing.T) {
assertJSONEqual
(
t
,
`{"model":"GPT-4"}`
,
string
(
out
))
assertJSONEqual
(
t
,
`{"model":"GPT-4"}`
,
string
(
out
))
}
}
func
TestRemoveDisabledFieldsSkipWhenChannelPassThroughEnabled
(
t
*
testing
.
T
)
{
input
:=
`{
"service_tier":"flex",
"safety_identifier":"user-123",
"store":true,
"stream_options":{"include_obfuscation":false}
}`
settings
:=
dto
.
ChannelOtherSettings
{}
out
,
err
:=
RemoveDisabledFields
([]
byte
(
input
),
settings
,
true
)
if
err
!=
nil
{
t
.
Fatalf
(
"RemoveDisabledFields returned error: %v"
,
err
)
}
assertJSONEqual
(
t
,
input
,
string
(
out
))
}
func
TestRemoveDisabledFieldsSkipWhenGlobalPassThroughEnabled
(
t
*
testing
.
T
)
{
original
:=
model_setting
.
GetGlobalSettings
()
.
PassThroughRequestEnabled
model_setting
.
GetGlobalSettings
()
.
PassThroughRequestEnabled
=
true
t
.
Cleanup
(
func
()
{
model_setting
.
GetGlobalSettings
()
.
PassThroughRequestEnabled
=
original
})
input
:=
`{
"service_tier":"flex",
"safety_identifier":"user-123",
"stream_options":{"include_obfuscation":false}
}`
settings
:=
dto
.
ChannelOtherSettings
{}
out
,
err
:=
RemoveDisabledFields
([]
byte
(
input
),
settings
,
false
)
if
err
!=
nil
{
t
.
Fatalf
(
"RemoveDisabledFields returned error: %v"
,
err
)
}
assertJSONEqual
(
t
,
input
,
string
(
out
))
}
func
assertJSONEqual
(
t
*
testing
.
T
,
want
,
got
string
)
{
func
assertJSONEqual
(
t
*
testing
.
T
,
want
,
got
string
)
{
t
.
Helper
()
t
.
Helper
()
...
...
relay/common/relay_info.go
View file @
1dfffcf1
...
@@ -703,7 +703,11 @@ func FailTaskInfo(reason string) *TaskInfo {
...
@@ -703,7 +703,11 @@ func FailTaskInfo(reason string) *TaskInfo {
// store: 数据存储授权字段,涉及用户隐私(仅 OpenAI、Responses API 支持,默认允许透传,禁用后可能导致 Codex 无法使用)
// store: 数据存储授权字段,涉及用户隐私(仅 OpenAI、Responses API 支持,默认允许透传,禁用后可能导致 Codex 无法使用)
// safety_identifier: 安全标识符,用于向 OpenAI 报告违规用户(仅 OpenAI 支持,涉及用户隐私)
// safety_identifier: 安全标识符,用于向 OpenAI 报告违规用户(仅 OpenAI 支持,涉及用户隐私)
// stream_options.include_obfuscation: 响应流混淆控制字段(仅 OpenAI Responses API 支持)
// stream_options.include_obfuscation: 响应流混淆控制字段(仅 OpenAI Responses API 支持)
func
RemoveDisabledFields
(
jsonData
[]
byte
,
channelOtherSettings
dto
.
ChannelOtherSettings
)
([]
byte
,
error
)
{
func
RemoveDisabledFields
(
jsonData
[]
byte
,
channelOtherSettings
dto
.
ChannelOtherSettings
,
channelPassThroughEnabled
bool
)
([]
byte
,
error
)
{
if
model_setting
.
GetGlobalSettings
()
.
PassThroughRequestEnabled
||
channelPassThroughEnabled
{
return
jsonData
,
nil
}
var
data
map
[
string
]
interface
{}
var
data
map
[
string
]
interface
{}
if
err
:=
common
.
Unmarshal
(
jsonData
,
&
data
);
err
!=
nil
{
if
err
:=
common
.
Unmarshal
(
jsonData
,
&
data
);
err
!=
nil
{
common
.
SysError
(
"RemoveDisabledFields Unmarshal error :"
+
err
.
Error
())
common
.
SysError
(
"RemoveDisabledFields Unmarshal error :"
+
err
.
Error
())
...
...
relay/compatible_handler.go
View file @
1dfffcf1
...
@@ -165,7 +165,7 @@ func TextHelper(c *gin.Context, info *relaycommon.RelayInfo) (newAPIError *types
...
@@ -165,7 +165,7 @@ func TextHelper(c *gin.Context, info *relaycommon.RelayInfo) (newAPIError *types
}
}
// remove disabled fields for OpenAI API
// remove disabled fields for OpenAI API
jsonData
,
err
=
relaycommon
.
RemoveDisabledFields
(
jsonData
,
info
.
ChannelOtherSettings
)
jsonData
,
err
=
relaycommon
.
RemoveDisabledFields
(
jsonData
,
info
.
ChannelOtherSettings
,
info
.
ChannelSetting
.
PassThroughBodyEnabled
)
if
err
!=
nil
{
if
err
!=
nil
{
return
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
return
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
}
}
...
...
relay/responses_handler.go
View file @
1dfffcf1
...
@@ -89,7 +89,7 @@ func ResponsesHelper(c *gin.Context, info *relaycommon.RelayInfo) (newAPIError *
...
@@ -89,7 +89,7 @@ func ResponsesHelper(c *gin.Context, info *relaycommon.RelayInfo) (newAPIError *
}
}
// remove disabled fields for OpenAI Responses API
// remove disabled fields for OpenAI Responses API
jsonData
,
err
=
relaycommon
.
RemoveDisabledFields
(
jsonData
,
info
.
ChannelOtherSettings
)
jsonData
,
err
=
relaycommon
.
RemoveDisabledFields
(
jsonData
,
info
.
ChannelOtherSettings
,
info
.
ChannelSetting
.
PassThroughBodyEnabled
)
if
err
!=
nil
{
if
err
!=
nil
{
return
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
return
types
.
NewError
(
err
,
types
.
ErrorCodeConvertRequestFailed
,
types
.
ErrOptionWithSkipRetry
())
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment