94 lines
3.0 KiB
Go
94 lines
3.0 KiB
Go
package moonshot
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/QuantumNous/new-api/common"
|
|
relaycommon "github.com/QuantumNous/new-api/relay/common"
|
|
relayconstant "github.com/QuantumNous/new-api/relay/constant"
|
|
"github.com/QuantumNous/new-api/relaykit/dto"
|
|
"github.com/QuantumNous/new-api/relaykit/types"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestConvertOpenAIRequestKimiK26UsesOnlyAllowedTemperature(t *testing.T) {
|
|
request := &dto.GeneralOpenAIRequest{
|
|
Model: "kimi-k2.6",
|
|
Temperature: common.GetPointer[float64](0.7),
|
|
}
|
|
info := &relaycommon.RelayInfo{
|
|
ChannelMeta: &relaycommon.ChannelMeta{
|
|
UpstreamModelName: "kimi-k2.6",
|
|
},
|
|
}
|
|
|
|
converted, err := (&Adaptor{}).ConvertOpenAIRequest(nil, info, request)
|
|
|
|
require.NoError(t, err)
|
|
convertedRequest, ok := converted.(*dto.GeneralOpenAIRequest)
|
|
require.True(t, ok)
|
|
require.NotNil(t, convertedRequest.Temperature)
|
|
require.Equal(t, 1.0, *convertedRequest.Temperature)
|
|
}
|
|
|
|
func TestConvertOpenAIRequestKimiK26KeepsOmittedTemperatureOmitted(t *testing.T) {
|
|
request := &dto.GeneralOpenAIRequest{
|
|
Model: "kimi-k2.6",
|
|
}
|
|
info := &relaycommon.RelayInfo{
|
|
ChannelMeta: &relaycommon.ChannelMeta{
|
|
UpstreamModelName: "kimi-k2.6",
|
|
},
|
|
}
|
|
|
|
converted, err := (&Adaptor{}).ConvertOpenAIRequest(nil, info, request)
|
|
|
|
require.NoError(t, err)
|
|
convertedRequest, ok := converted.(*dto.GeneralOpenAIRequest)
|
|
require.True(t, ok)
|
|
require.Nil(t, convertedRequest.Temperature)
|
|
}
|
|
|
|
func TestConvertOpenAIRequestOtherMoonshotModelKeepsTemperature(t *testing.T) {
|
|
request := &dto.GeneralOpenAIRequest{
|
|
Model: "kimi-k2.5",
|
|
Temperature: common.GetPointer[float64](0.7),
|
|
}
|
|
info := &relaycommon.RelayInfo{
|
|
ChannelMeta: &relaycommon.ChannelMeta{
|
|
UpstreamModelName: "kimi-k2.5",
|
|
},
|
|
}
|
|
|
|
converted, err := (&Adaptor{}).ConvertOpenAIRequest(nil, info, request)
|
|
|
|
require.NoError(t, err)
|
|
convertedRequest, ok := converted.(*dto.GeneralOpenAIRequest)
|
|
require.True(t, ok)
|
|
require.NotNil(t, convertedRequest.Temperature)
|
|
require.Equal(t, 0.7, *convertedRequest.Temperature)
|
|
}
|
|
|
|
// Kimi serves OpenAI Responses natively (kimi-k3); the body is forwarded
|
|
// unchanged and other models are rejected by the upstream.
|
|
func TestResponsesRequestPassesThroughToV1Responses(t *testing.T) {
|
|
const body = `{"model":"kimi-k3","input":"Latest Go release?","tools":[{"type":"web_search"}],"stream":false}`
|
|
info := &relaycommon.RelayInfo{
|
|
RelayMode: relayconstant.RelayModeResponses,
|
|
RelayFormat: types.RelayFormatOpenAIResponses,
|
|
ChannelMeta: &relaycommon.ChannelMeta{ChannelBaseUrl: "https://api.moonshot.invalid", UpstreamModelName: "kimi-k3"},
|
|
}
|
|
url, err := (&Adaptor{}).GetRequestURL(info)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "https://api.moonshot.invalid/v1/responses", url)
|
|
|
|
var request dto.OpenAIResponsesRequest
|
|
require.NoError(t, common.UnmarshalJsonStr(body, &request))
|
|
converted, err := (&Adaptor{}).ConvertOpenAIResponsesRequest(nil, info, request)
|
|
require.NoError(t, err)
|
|
wire, err := common.Marshal(converted)
|
|
require.NoError(t, err)
|
|
assert.JSONEq(t, body, string(wire))
|
|
}
|