@@ -61,9 +61,11 @@ import FinalSetupStep from './steps/FinalSetupStep.vue'
6161import OpenAI from ' openai'
6262import {
6363 MINIMAX_OPENAI_BASE_URL ,
64+ ZAI_CODING_MODELS ,
6465 ZAI_CODING_BASE_URL ,
6566 type AIProviderKey ,
6667} from ' ../../services/llmProviders/providerCatalog'
68+ import { listMiniMaxModelsForConfig } from ' ../../services/llmProviders/minimax'
6769
6870const step = ref (1 )
6971const settingsStore = useSettingsStore ()
@@ -91,6 +93,10 @@ const formData = reactive({
9193 localSttLanguage: ' auto' ,
9294})
9395
96+ function isAuthError(error : any ): boolean {
97+ return error ?.status === 401 || error ?.status === 403
98+ }
99+
94100const isTesting = reactive ({
95101 openai: false ,
96102 openrouter: false ,
@@ -215,13 +221,25 @@ const fetchAvailableModels = async () => {
215221 return
216222 }
217223
224+ if (formData .aiProvider === ' minimax' ) {
225+ const models = await listMiniMaxModelsForConfig (
226+ formData .VITE_MINIMAX_API_KEY ,
227+ baseURL
228+ )
229+ formData .availableModels = models .map (model => model .id )
230+
231+ if (formData .availableModels .length > 0 ) {
232+ formData .assistantModel = formData .availableModels [0 ]
233+ formData .summarizationModel = formData .availableModels [0 ]
234+ }
235+ return
236+ }
237+
218238 const tempClient = new OpenAI ({
219239 apiKey:
220240 formData .aiProvider === ' zai'
221241 ? formData .VITE_ZAI_API_KEY
222- : formData .aiProvider === ' minimax'
223- ? formData .VITE_MINIMAX_API_KEY
224- : formData .aiProvider ,
242+ : formData .aiProvider ,
225243 baseURL ,
226244 dangerouslyAllowBrowser: true ,
227245 })
@@ -234,8 +252,15 @@ const fetchAvailableModels = async () => {
234252 formData .summarizationModel = formData .availableModels [0 ]
235253 }
236254 } catch (error ) {
255+ if (formData .aiProvider === ' zai' && ! isAuthError (error )) {
256+ formData .availableModels = ZAI_CODING_MODELS .map (model => model .id )
257+ formData .assistantModel = formData .availableModels [0 ] || ' glm-5.1'
258+ formData .summarizationModel = formData .availableModels [0 ] || ' glm-5.1'
259+ return
260+ }
237261 console .error (' Failed to fetch models:' , error )
238262 formData .availableModels = []
263+ throw error
239264 }
240265}
241266
@@ -320,17 +345,8 @@ const testZAIKey = async () => {
320345 testResult .zai .success = false
321346
322347 try {
323- const tempClient = new OpenAI ({
324- apiKey: formData .VITE_ZAI_API_KEY ,
325- baseURL: formData .zaiBaseUrl ,
326- dangerouslyAllowBrowser: true ,
327- timeout: 10 * 1000 ,
328- maxRetries: 1 ,
329- })
330-
331- await tempClient .models .list ()
332- testResult .zai .success = true
333348 await fetchAvailableModels ()
349+ testResult .zai .success = true
334350 } catch (e : any ) {
335351 testResult .zai .error =
336352 ' API key or Coding Plan endpoint is invalid or has no permissions.'
@@ -361,17 +377,8 @@ const testMiniMaxKey = async () => {
361377 testResult .minimax .success = false
362378
363379 try {
364- const tempClient = new OpenAI ({
365- apiKey: formData .VITE_MINIMAX_API_KEY ,
366- baseURL: formData .minimaxBaseUrl ,
367- dangerouslyAllowBrowser: true ,
368- timeout: 10 * 1000 ,
369- maxRetries: 1 ,
370- })
371-
372- await tempClient .models .list ()
373- testResult .minimax .success = true
374380 await fetchAvailableModels ()
381+ testResult .minimax .success = true
375382 } catch (e : any ) {
376383 testResult .minimax .error =
377384 ' API key or OpenAI-compatible endpoint is invalid or has no permissions.'
0 commit comments