返回 DeepSeek-Reasonix
chat_model_test.go
根目录 / internal / config / chat_model_test.go
1 package config
2
3 import (
4 "reflect"
5 "testing"
6 )
7
8 // ── IsLikelyChatModel ──────────────────────────────────────────────────────────
9
10 func TestIsLikelyChatModel_RejectsEmptyInput(t *testing.T) {
11 for _, model := range []string{"", " ", "\t"} {
12 if IsLikelyChatModel(model) {
13 t.Errorf("IsLikelyChatModel(%q) = true, want false", model)
14 }
15 }
16 }
17
18 func TestIsLikelyChatModel_AllowsKnownChatModels(t *testing.T) {
19 for _, model := range []string{
20 "mimo-v2.5", "mimo-v2.5-pro", "mimo-v2-pro", "mimo-v2-omni",
21 "deepseek-v4-flash", "deepseek-v4-pro",
22 "gpt-4o", "gpt-4o-mini",
23 "claude-3.5-sonnet", "qwen-max",
24 } {
25 if !IsLikelyChatModel(model) {
26 t.Errorf("IsLikelyChatModel(%q) = false, want true", model)
27 }
28 }
29 }
30
31 func TestIsLikelyChatModel_FiltersAudioModels(t *testing.T) {
32 // Real-world samples from #3483.
33 for _, model := range []string{
34 "mimo-v2.5-asr", "mimo-v2.5-tts", "mimo-v2.5-tts-voice",
35 "mimo-v2-tts-voiceclone", "mimo-v2-tts-voicedesign",
36 "tts-1",
37 } {
38 if IsLikelyChatModel(model) {
39 t.Errorf("IsLikelyChatModel(%q) = true, want false", model)
40 }
41 }
42 }
43
44 func TestIsLikelyChatModel_FiltersNonChatKeywords(t *testing.T) {
45 for _, model := range []string{
46 "whisper-1",
47 "text-embedding-3-small", "text-embedding-ada-002",
48 "text-moderation-stable",
49 "rerank-v1",
50 "dall-e-3",
51 "text-to-speech-v1", "speech-to-text-v2",
52 } {
53 if IsLikelyChatModel(model) {
54 t.Errorf("IsLikelyChatModel(%q) = true, want false", model)
55 }
56 }
57 }
58
59 func TestIsLikelyChatModel_DoesNotFilterVoiceAlone(t *testing.T) {
60 for _, model := range []string{
61 "voice-chat-model", "gpt-4o-voice",
62 } {
63 if !IsLikelyChatModel(model) {
64 t.Errorf("IsLikelyChatModel(%q) = false, want true", model)
65 }
66 }
67 }
68
69 func TestIsLikelyVisionModel(t *testing.T) {
70 for _, model := range []string{
71 "mimo-v2.5", "mimo-v2-omni", "gpt-4o", "gpt-4o-mini",
72 "qwen2.5-vl-72b-instruct", "custom-vision-chat",
73 } {
74 if !IsLikelyVisionModel(model) {
75 t.Errorf("IsLikelyVisionModel(%q) = false, want true", model)
76 }
77 }
78 for _, model := range []string{
79 "", "mimo-v2.5-pro", "deepseek-v4-pro", "mimo-v2.5-asr", "text-embedding-3-small",
80 "gpt-4o-audio-preview", "gpt-4o-mini-audio-preview",
81 } {
82 if IsLikelyVisionModel(model) {
83 t.Errorf("IsLikelyVisionModel(%q) = true, want false", model)
84 }
85 }
86 }
87
88 func TestInferVisionModels(t *testing.T) {
89 got := InferVisionModels([]string{
90 "mimo-v2.5-pro",
91 "mimo-v2.5",
92 "mimo-v2.5",
93 "mimo-v2-omni",
94 "qwen-vl-plus",
95 "mimo-v2.5-asr",
96 "audio-omni-tts",
97 "gpt-4o-audio-preview",
98 "gpt-4o-mini-audio-preview",
99 })
100 want := []string{"mimo-v2.5", "mimo-v2-omni", "qwen-vl-plus"}
101 if !reflect.DeepEqual(got, want) {
102 t.Errorf("InferVisionModels() = %v, want %v", got, want)
103 }
104 }
105
106 // ── ModelList / ChatModelList ──────────────────────────────────────────────────
107
108 func TestModelList_ReturnsRawList(t *testing.T) {
109 p := ProviderEntry{
110 Models: []string{
111 "mimo-v2.5", "mimo-v2.5-pro",
112 "mimo-v2.5-asr", "mimo-v2.5-tts", "mimo-v2.5-tts-voice",
113 },
114 }
115 got := p.ModelList()
116 want := []string{
117 "mimo-v2.5", "mimo-v2.5-pro",
118 "mimo-v2.5-asr", "mimo-v2.5-tts", "mimo-v2.5-tts-voice",
119 }
120 if !reflect.DeepEqual(got, want) {
121 t.Errorf("ModelList() = %v, want %v", got, want)
122 }
123 }
124
125 func TestChatModelList_FiltersNonChatModels(t *testing.T) {
126 p := ProviderEntry{
127 Models: []string{
128 "mimo-v2.5", "mimo-v2.5-pro",
129 "mimo-v2.5-asr", "mimo-v2.5-tts", "mimo-v2.5-tts-voice",
130 "mimo-v2-tts-voiceclone", "mimo-v2-tts-voicedesign",
131 },
132 }
133 got := p.ChatModelList()
134 want := []string{"mimo-v2.5", "mimo-v2.5-pro"}
135 if !reflect.DeepEqual(got, want) {
136 t.Errorf("ChatModelList() = %v, want %v", got, want)
137 }
138 }
139
140 func TestChatModelList_AllNonChat(t *testing.T) {
141 p := ProviderEntry{
142 Models: []string{"mimo-v2.5-tts", "mimo-v2.5-asr"},
143 }
144 got := p.ChatModelList()
145 if len(got) != 0 {
146 t.Errorf("ChatModelList() = %v, want empty", got)
147 }
148 }
149
150 func TestChatModelList_AllChat(t *testing.T) {
151 p := ProviderEntry{
152 Models: []string{"gpt-4o", "gpt-4o-mini"},
153 }
154 got := p.ChatModelList()
155 want := []string{"gpt-4o", "gpt-4o-mini"}
156 if !reflect.DeepEqual(got, want) {
157 t.Errorf("ChatModelList() = %v, want %v", got, want)
158 }
159 }
160
161 func TestChatModelList_EmptyModels(t *testing.T) {
162 p := ProviderEntry{}
163 if got := p.ChatModelList(); got != nil {
164 t.Errorf("ChatModelList() = %v, want nil", got)
165 }
166 }
167
167 lines GO