models_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package xai
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/require"
  5. )
  6. func TestDefaultModelMappingExcludesCrossClientWildcards(t *testing.T) {
  7. original := RuntimeModelMappingOptions()
  8. t.Cleanup(func() { SetRuntimeModelMappingOptions(original) })
  9. SetRuntimeModelMappingOptions(ModelMappingOptions{})
  10. mapping := DefaultModelMapping()
  11. require.Equal(t, "grok-4.6", mapping["grok"])
  12. require.Equal(t, "grok-4.6", mapping["grok-latest"])
  13. require.Equal(t, "grok-build-0.1", mapping["grok-build"])
  14. require.Equal(t, "grok-build-0.1", mapping["grok-build-latest"])
  15. require.Equal(t, DefaultImagineImageQualityModel, mapping["grok-imagine-edit"])
  16. require.Equal(t, DefaultImagineVideo15Model, mapping["grok-imagine-video-1.5"])
  17. require.Equal(t, DefaultImagineVideo15Model, mapping["grok-imagine-video-1.5-preview"])
  18. require.Equal(t, "grok-4.6", mapping["xai/grok"])
  19. // Cross-vendor wildcards must stay opt-in.
  20. _, hasGPT := mapping["gpt-*"]
  21. _, hasClaude := mapping["claude-*"]
  22. require.False(t, hasGPT)
  23. require.False(t, hasClaude)
  24. }
  25. func TestModelMappingWithOptionsCrossClient(t *testing.T) {
  26. t.Parallel()
  27. mapping := ModelMappingWithOptions(ModelMappingOptions{
  28. DefaultText: "grok-4.3",
  29. EnableCrossClientMap: true,
  30. })
  31. require.Equal(t, "grok-4.3", mapping["grok"])
  32. require.Equal(t, "grok-4.3", mapping["gpt-*"])
  33. require.Equal(t, "grok-4.3", mapping["claude-*"])
  34. require.Equal(t, "grok-4.3", mapping["codex-*"])
  35. }
  36. func TestCanonicalImagineVideoModel(t *testing.T) {
  37. t.Parallel()
  38. require.Equal(t, DefaultImagineVideoModel, CanonicalImagineVideoModel("grok-imagine-video"))
  39. require.Equal(t, DefaultImagineVideo15Model, CanonicalImagineVideoModel("grok-imagine-video-1.5"))
  40. require.Equal(t, DefaultImagineVideo15Model, CanonicalImagineVideoModel("grok-imagine-video-1.5-preview"))
  41. require.Equal(t, DefaultImagineVideo15Model, CanonicalImagineVideoModel("xai/grok-video-1.5"))
  42. require.Equal(t, "grok-imagine-video-2", CanonicalImagineVideoModel("grok-imagine-video-2"))
  43. }
  44. func TestIsGrokModelID(t *testing.T) {
  45. t.Parallel()
  46. require.True(t, IsGrokModelID("grok-4.5"))
  47. require.True(t, IsGrokModelID("grok-4.6"))
  48. require.True(t, IsGrokModelID("x-ai/grok-4.3"))
  49. require.False(t, IsGrokModelID("gpt-5"))
  50. require.False(t, IsGrokModelID("claude-sonnet-4"))
  51. }
  52. func TestIsGrokImagineModel(t *testing.T) {
  53. t.Parallel()
  54. require.True(t, IsGrokImagineModel("grok-imagine-image"))
  55. require.True(t, IsGrokImagineModel("grok-imagine-video-1.5-preview"))
  56. require.True(t, IsGrokImagineModel("xai/grok-imagine-image-quality"))
  57. require.True(t, IsGrokImagineModel("grok-video-1.5"))
  58. require.False(t, IsGrokImagineModel("grok-4.6"))
  59. require.False(t, IsGrokImagineModel("grok-build-0.1"))
  60. }
  61. func TestDefaultModelsIncludesGrok46(t *testing.T) {
  62. t.Parallel()
  63. ids := DefaultModelIDs()
  64. require.Contains(t, ids, "grok-4.6")
  65. require.Equal(t, "grok-4.6", ResolveGrokTextResponsesModelID("grok-4.6"))
  66. require.Equal(t, "grok-4.6", ResolveGrokTextResponsesModelID("grok-4.6-latest"))
  67. }
  68. func TestResolveGrokTextResponsesModelID(t *testing.T) {
  69. t.Parallel()
  70. require.Equal(t, "grok-4.6", ResolveGrokTextResponsesModelID(""))
  71. require.Equal(t, "grok-4.3", ResolveGrokTextResponsesModelID("grok", "grok-4.3"))
  72. require.Equal(t, "grok-4.20-multi-agent-0309", ResolveGrokTextResponsesModelID("grok-4.20-multi-agent"))
  73. }
  74. func TestExplicitGrok45DoesNotFollowRuntimeDefault(t *testing.T) {
  75. require.Equal(t, "grok-4.5", ResolveGrokTextResponsesModelID("grok-4.5", "grok-4.6"))
  76. require.Equal(t, "grok-4.5", ResolveGrokTextResponsesModelID("grok-4.5-latest", "grok-4.6"))
  77. require.Equal(t, "grok-4.6", ResolveGrokTextResponsesModelID("grok", "grok-4.6"))
  78. }
  79. func TestBareGrokAliasesFollowGrok46Default(t *testing.T) {
  80. require.Equal(t, "grok-4.6", ResolveGrokTextResponsesModelID("grok"))
  81. require.Equal(t, "grok-4.6", ResolveGrokTextResponsesModelID("grok-latest"))
  82. require.Equal(t, "grok-build-0.1", ResolveGrokTextResponsesModelID("grok-build-latest"))
  83. }