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.
 
 
 

36 line
1.7 KiB

  1. package service
  2. import (
  3. "testing"
  4. "github.com/QuantumNous/new-api/dto"
  5. "github.com/QuantumNous/new-api/setting/operation_setting"
  6. "github.com/QuantumNous/new-api/types"
  7. "github.com/stretchr/testify/require"
  8. )
  9. func TestChannelAffinityMatchersIgnoreInvalidPatternsAndMatchCaseInsensitively(t *testing.T) {
  10. require.True(t, matchAnyRegexCached([]string{"[", `^gpt-[0-9]+$`}, "gpt-5"))
  11. require.False(t, matchAnyRegexCached([]string{"["}, "gpt-5"))
  12. require.True(t, matchAnyIncludeFold([]string{" Codex ", "other"}, "Mozilla CodexClient"))
  13. require.False(t, matchAnyIncludeFold([]string{""}, "CodexClient"))
  14. }
  15. func TestChannelAffinityKeyHelpersProduceStableSafeValues(t *testing.T) {
  16. rule := operation_setting.ChannelAffinityRule{Name: "rule", IncludeRuleName: true, IncludeUsingGroup: true}
  17. require.Equal(t, "rule:vip:key", buildChannelAffinityCacheKeySuffix(rule, "vip", "key"))
  18. require.Equal(t, "abcd...wxyz", buildChannelAffinityKeyHint("abcdefghijklmnopqrstuvwxwxyz"))
  19. require.Len(t, affinityFingerprint("tenant-123"), 8)
  20. require.Equal(t, "", channelAffinityUsageCacheEntryKey("", "vip", "fingerprint"))
  21. require.Equal(t, "rule\n\nfingerprint", channelAffinityUsageCacheEntryKey("rule", "", "fingerprint"))
  22. }
  23. func TestChannelAffinityUsageHelpersUseFallbackFields(t *testing.T) {
  24. usage := &dto.Usage{InputTokens: 3, OutputTokens: 5}
  25. require.Equal(t, 3, usagePromptTokens(usage))
  26. require.Equal(t, 5, usageCompletionTokens(usage))
  27. require.Equal(t, 8, usageTotalTokens(usage))
  28. require.Equal(t, cacheTokenRateModeCachedOverPrompt, cachedTokenRateModeByRelayFormat(types.RelayFormatOpenAI))
  29. require.Equal(t, cacheTokenRateModeCachedOverPromptPlusCached, cachedTokenRateModeByRelayFormat(types.RelayFormatClaude))
  30. }