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)) }