Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 13 additions & 5 deletions relay/channel/ali/text.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,19 @@ func requestOpenAI2Ali(request dto.GeneralOpenAIRequest, upstreamModelName strin
request.ThinkingBudget = nil
}

topP := lo.FromPtrOr(request.TopP, 0)
if topP >= 1 {
request.TopP = lo.ToPtr(0.999)
} else if topP <= 0 {
request.TopP = lo.ToPtr(0.001)
// DashScope rejects top_p at the 0 and 1 boundaries, so an explicit value is
// clamped into the open interval. The clamp stays at two decimals because
// some models on the platform reject a third decimal with
// "top_p参数非法:限制小数点[2]位".
//
// A request that omits top_p is left untouched: injecting a value would
// silently replace the model's own default with near-greedy decoding.
if request.TopP != nil {
if *request.TopP >= 1 {
request.TopP = lo.ToPtr(0.99)
} else if *request.TopP <= 0 {
request.TopP = lo.ToPtr(0.01)
}
}
return &request
}
59 changes: 59 additions & 0 deletions relay/channel/ali/text_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package ali

import (
"testing"

"github.com/QuantumNous/new-api/relaykit/dto"
"github.com/samber/lo"
"github.com/stretchr/testify/assert"
)

func TestRequestOpenAI2AliTopP(t *testing.T) {
tests := []struct {
name string
topP *float64
want *float64
}{
{
name: "omitted top_p is not injected",
topP: nil,
want: nil,
},
{
name: "in-range top_p is preserved",
topP: lo.ToPtr(0.8),
want: lo.ToPtr(0.8),
},
{
name: "top_p of 1 is clamped to two decimals",
topP: lo.ToPtr(1.0),
want: lo.ToPtr(0.99),
},
{
name: "top_p above 1 is clamped to two decimals",
topP: lo.ToPtr(1.5),
want: lo.ToPtr(0.99),
},
{
name: "top_p of 0 is clamped to two decimals",
topP: lo.ToPtr(0.0),
want: lo.ToPtr(0.01),
},
{
name: "negative top_p is clamped to two decimals",
topP: lo.ToPtr(-0.3),
want: lo.ToPtr(0.01),
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := requestOpenAI2Ali(dto.GeneralOpenAIRequest{
Model: "qwen-plus",
TopP: tt.topP,
}, "qwen-plus")

assert.Equal(t, tt.want, got.TopP)
})
}
}
Loading