package openaicompat import ( "github.com/QuantumNous/new-api/common" "testing" "github.com/QuantumNous/new-api/dto" "github.com/QuantumNous/new-api/setting/model_setting" "github.com/stretchr/testify/require" ) func TestShouldChatCompletionsUseResponsesPolicyRequiresEnabledChannelAndMatchingModel(t *testing.T) { policy := model_setting.ChatCompletionsToResponsesPolicy{ Enabled: true, ChannelIDs: []int{42}, ModelPatterns: []string{`^gpt-5(?:-mini)?$`, `[`}, } require.True(t, ShouldChatCompletionsUseResponsesPolicy(policy, 42, 0, "gpt-5-mini")) require.False(t, ShouldChatCompletionsUseResponsesPolicy(policy, 42, 0, "gpt-4o")) require.False(t, ShouldChatCompletionsUseResponsesPolicy(policy, 7, 0, "gpt-5")) } func TestNormalizeChatImageURLToStringSupportsSDKAndDecodedForms(t *testing.T) { require.Equal(t, "https://example.com/image.png", normalizeChatImageURLToString("https://example.com/image.png")) require.Equal(t, "https://example.com/image.png", normalizeChatImageURLToString(map[string]any{"url": "https://example.com/image.png"})) require.Equal(t, "https://example.com/image.png", normalizeChatImageURLToString(&dto.MessageImageUrl{Url: "https://example.com/image.png"})) unknown := map[string]any{"other": "value"} require.Equal(t, unknown, normalizeChatImageURLToString(unknown)) } func TestConvertChatResponseFormatToResponsesTextFlattensJSONSchema(t *testing.T) { input := &dto.ResponseFormat{Type: "json_schema", JsonSchema: []byte(`{"name":"answer","json_schema":{"schema":{"type":"object"},"strict":true}}`)} raw := convertChatResponseFormatToResponsesText(input) var payload map[string]map[string]any require.NoError(t, common.Unmarshal(raw, &payload)) format := payload["format"] require.Equal(t, "json_schema", format["type"]) require.Equal(t, "answer", format["name"]) require.Equal(t, true, format["strict"]) require.Equal(t, map[string]any{"type": "object"}, format["schema"]) } func TestShouldChatCompletionsUseResponsesPolicyAllowsConfiguredChannelType(t *testing.T) { policy := model_setting.ChatCompletionsToResponsesPolicy{ Enabled: true, ChannelTypes: []int{9}, ModelPatterns: []string{`^o[0-9]+$`}, } require.True(t, ShouldChatCompletionsUseResponsesPolicy(policy, 0, 9, "o3")) }