You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

55 lines
2.2 KiB

  1. package openaicompat
  2. import (
  3. "github.com/QuantumNous/new-api/common"
  4. "testing"
  5. "github.com/QuantumNous/new-api/dto"
  6. "github.com/QuantumNous/new-api/setting/model_setting"
  7. "github.com/stretchr/testify/require"
  8. )
  9. func TestShouldChatCompletionsUseResponsesPolicyRequiresEnabledChannelAndMatchingModel(t *testing.T) {
  10. policy := model_setting.ChatCompletionsToResponsesPolicy{
  11. Enabled: true,
  12. ChannelIDs: []int{42},
  13. ModelPatterns: []string{`^gpt-5(?:-mini)?$`, `[`},
  14. }
  15. require.True(t, ShouldChatCompletionsUseResponsesPolicy(policy, 42, 0, "gpt-5-mini"))
  16. require.False(t, ShouldChatCompletionsUseResponsesPolicy(policy, 42, 0, "gpt-4o"))
  17. require.False(t, ShouldChatCompletionsUseResponsesPolicy(policy, 7, 0, "gpt-5"))
  18. }
  19. func TestNormalizeChatImageURLToStringSupportsSDKAndDecodedForms(t *testing.T) {
  20. require.Equal(t, "https://example.com/image.png", normalizeChatImageURLToString("https://example.com/image.png"))
  21. require.Equal(t, "https://example.com/image.png", normalizeChatImageURLToString(map[string]any{"url": "https://example.com/image.png"}))
  22. require.Equal(t, "https://example.com/image.png", normalizeChatImageURLToString(&dto.MessageImageUrl{Url: "https://example.com/image.png"}))
  23. unknown := map[string]any{"other": "value"}
  24. require.Equal(t, unknown, normalizeChatImageURLToString(unknown))
  25. }
  26. func TestConvertChatResponseFormatToResponsesTextFlattensJSONSchema(t *testing.T) {
  27. input := &dto.ResponseFormat{Type: "json_schema", JsonSchema: []byte(`{"name":"answer","json_schema":{"schema":{"type":"object"},"strict":true}}`)}
  28. raw := convertChatResponseFormatToResponsesText(input)
  29. var payload map[string]map[string]any
  30. require.NoError(t, common.Unmarshal(raw, &payload))
  31. format := payload["format"]
  32. require.Equal(t, "json_schema", format["type"])
  33. require.Equal(t, "answer", format["name"])
  34. require.Equal(t, true, format["strict"])
  35. require.Equal(t, map[string]any{"type": "object"}, format["schema"])
  36. }
  37. func TestShouldChatCompletionsUseResponsesPolicyAllowsConfiguredChannelType(t *testing.T) {
  38. policy := model_setting.ChatCompletionsToResponsesPolicy{
  39. Enabled: true,
  40. ChannelTypes: []int{9},
  41. ModelPatterns: []string{`^o[0-9]+$`},
  42. }
  43. require.True(t, ShouldChatCompletionsUseResponsesPolicy(policy, 0, 9, "o3"))
  44. }