| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package service
- import (
- "testing"
- "github.com/Wei-Shaw/sub2api/internal/pkg/xai"
- "github.com/stretchr/testify/require"
- )
- func TestNormalizeOpenAIMessagesDispatchModelConfig(t *testing.T) {
- t.Parallel()
- cfg := normalizeOpenAIMessagesDispatchModelConfig(OpenAIMessagesDispatchModelConfig{
- OpusMappedModel: " gpt-5.4-high ",
- SonnetMappedModel: "gpt-5.3-codex",
- HaikuMappedModel: " gpt-5.4-mini-medium ",
- ExactModelMappings: map[string]string{
- " claude-sonnet-4-5-20250929 ": " gpt-5.2-high ",
- "": "gpt-5.4",
- "claude-opus-4-6": " ",
- },
- })
- require.Equal(t, "gpt-5.4", cfg.OpusMappedModel)
- require.Equal(t, "gpt-5.3-codex", cfg.SonnetMappedModel)
- require.Equal(t, "gpt-5.4-mini", cfg.HaikuMappedModel)
- require.Equal(t, map[string]string{
- "claude-sonnet-4-5-20250929": "gpt-5.2",
- }, cfg.ExactModelMappings)
- }
- func TestGroupResolveMessagesDispatchModel_GrokRequiresCrossClientMapping(t *testing.T) {
- original := xai.RuntimeModelMappingOptions()
- t.Cleanup(func() { xai.SetRuntimeModelMappingOptions(original) })
- group := &Group{Platform: PlatformGrok}
- xai.SetRuntimeModelMappingOptions(xai.ModelMappingOptions{})
- require.Empty(t, group.ResolveMessagesDispatchModel("claude-sonnet-4-5"))
- xai.SetRuntimeModelMappingOptions(xai.ModelMappingOptions{
- DefaultText: "grok-build-0.1",
- EnableCrossClientMap: true,
- })
- require.Equal(t, "grok-build-0.1", group.ResolveMessagesDispatchModel("claude-sonnet-4-5"))
- require.Equal(t, "grok-build-0.1", group.ResolveMessagesDispatchModel("claude-opus-4-6"))
- require.Equal(t, "grok-build-0.1", group.ResolveMessagesDispatchModel("claude-haiku-4-5"))
- require.Empty(t, group.ResolveMessagesDispatchModel("grok"))
- require.Empty(t, group.ResolveMessagesDispatchModel("gpt-5.3-codex"))
- }
- func TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform(t *testing.T) {
- t.Parallel()
- group := &Group{
- Platform: PlatformAnthropic,
- AllowMessagesDispatch: true,
- DefaultMappedModel: "gpt-5.6-sol",
- MessagesDispatchModelConfig: OpenAIMessagesDispatchModelConfig{
- SonnetMappedModel: "gpt-5.3-codex",
- ExactModelMappings: map[string]string{
- "claude-fable-5": "gpt-5.6-sol",
- },
- },
- }
- sanitizeGroupMessagesDispatchFields(group)
- require.False(t, group.AllowMessagesDispatch)
- require.Empty(t, group.DefaultMappedModel)
- require.Equal(t, OpenAIMessagesDispatchModelConfig{}, group.MessagesDispatchModelConfig)
- }
- func TestSanitizeGroupMessagesDispatchFields_PreservesCompositeDispatchToggle(t *testing.T) {
- t.Parallel()
- group := &Group{
- Platform: PlatformComposite,
- AllowMessagesDispatch: true,
- DefaultMappedModel: "gpt-5.6-sol",
- MessagesDispatchModelConfig: OpenAIMessagesDispatchModelConfig{
- SonnetMappedModel: "gpt-5.3-codex",
- ExactModelMappings: map[string]string{
- "claude-fable-5": "gpt-5.6-sol",
- },
- },
- }
- sanitizeGroupMessagesDispatchFields(group)
- require.True(t, group.AllowMessagesDispatch)
- require.Empty(t, group.DefaultMappedModel)
- require.Equal(t, OpenAIMessagesDispatchModelConfig{}, group.MessagesDispatchModelConfig)
- }
|