@@ -220,8 +220,8 @@ def _get_openrouter_models(provided_api_key=None):
220220 def _get_openai_models (provided_api_key = None , api_endpoint = None ):
221221 """Get available models from OpenAI-compatible API
222222
223- For local servers (llama.cpp, LM Studio, vLLM, etc.), fetches models dynamically .
224- For official OpenAI API, returns a static list of common models .
223+ Always tries to fetch models dynamically from any OpenAI-compatible endpoint .
224+ Falls back to static list if dynamic fetch fails .
225225 """
226226 api_key = _resolve_api_key (provided_api_key , 'OPENAI_API_KEY' , OPENAI_API_KEY )
227227
@@ -232,10 +232,7 @@ def _get_openai_models(provided_api_key=None, api_endpoint=None):
232232 else :
233233 base_url = 'https://api.openai.com/v1'
234234
235- # Check if this is a local server (llama.cpp, LM Studio, vLLM, etc.)
236- is_local = 'localhost' in base_url or '127.0.0.1' in base_url
237-
238- # Static list of OpenAI models (fallback for official API)
235+ # Static list of OpenAI models (fallback)
239236 openai_static_models = [
240237 {'id' : 'gpt-4o' , 'name' : 'GPT-4o (Latest)' },
241238 {'id' : 'gpt-4o-mini' , 'name' : 'GPT-4o Mini' },
@@ -251,7 +248,7 @@ def _get_openai_models(provided_api_key=None, api_endpoint=None):
251248 headers ['Authorization' ] = f'Bearer { api_key } '
252249
253250 if DEBUG_MODE :
254- logger .debug (f"📥 Fetching models from OpenAI-compatible server : { models_url } " )
251+ logger .debug (f"📥 Fetching models from OpenAI-compatible endpoint : { models_url } " )
255252
256253 response = requests .get (models_url , headers = headers , timeout = 10 )
257254
@@ -285,91 +282,32 @@ def _get_openai_models(provided_api_key=None, api_endpoint=None):
285282 "model_names" : model_ids ,
286283 "default" : default_model ,
287284 "status" : "openai_connected" ,
288- "count" : len (models ),
289- "is_local" : is_local
285+ "count" : len (models )
290286 })
291287
292288 # If we get here, either request failed or no models returned
293- # For local servers, return error; for OpenAI, return static list
294- if is_local :
295- error_msg = f"Could not connect to local server at { base_url } . Make sure your OpenAI-compatible server (llama.cpp, LM Studio, vLLM, etc.) is running."
296- return jsonify ({
297- "models" : [],
298- "model_names" : [],
299- "default" : "" ,
300- "status" : "openai_error" ,
301- "count" : 0 ,
302- "error" : error_msg ,
303- "is_local" : True
304- })
305- else :
306- # Return static OpenAI models
307- model_ids = [m ['id' ] for m in openai_static_models ]
308- return jsonify ({
309- "models" : openai_static_models ,
310- "model_names" : model_ids ,
311- "default" : "gpt-4o" ,
312- "status" : "openai_static" ,
313- "count" : len (openai_static_models ),
314- "is_local" : False
315- })
316-
317- except requests .exceptions .ConnectionError :
318- if is_local :
319- error_msg = f"Connection refused to { base_url } . Is your OpenAI-compatible server running?"
320- else :
321- error_msg = f"Connection error to OpenAI API"
322-
289+ # Fall back to static list
323290 if DEBUG_MODE :
324- logger .debug (f"❌ OpenAI-compatible server connection error: { error_msg } " )
291+ logger .debug (f"⚠️ No models returned from { base_url } , using fallback list " )
325292
326- # For official OpenAI, return static list even on error
327- if not is_local :
328- model_ids = [m ['id' ] for m in openai_static_models ]
329- return jsonify ({
330- "models" : openai_static_models ,
331- "model_names" : model_ids ,
332- "default" : "gpt-4o" ,
333- "status" : "openai_static" ,
334- "count" : len (openai_static_models ),
335- "is_local" : False
336- })
337-
338- return jsonify ({
339- "models" : [],
340- "model_names" : [],
341- "default" : "" ,
342- "status" : "openai_error" ,
343- "count" : 0 ,
344- "error" : error_msg ,
345- "is_local" : True
346- })
293+ except requests .exceptions .ConnectionError as e :
294+ error_msg = f"Connection error to { base_url } "
295+ if DEBUG_MODE :
296+ logger .debug (f"❌ OpenAI-compatible endpoint connection error: { error_msg } " )
347297
348298 except Exception as e :
349299 if DEBUG_MODE :
350- logger .debug (f"❌ OpenAI-compatible server error: { e } " )
351-
352- # For official OpenAI, return static list even on error
353- if not is_local :
354- model_ids = [m ['id' ] for m in openai_static_models ]
355- return jsonify ({
356- "models" : openai_static_models ,
357- "model_names" : model_ids ,
358- "default" : "gpt-4o" ,
359- "status" : "openai_static" ,
360- "count" : len (openai_static_models ),
361- "is_local" : False
362- })
300+ logger .debug (f"❌ OpenAI-compatible endpoint error: { e } " )
363301
364- return jsonify ({
365- "models" : [],
366- "model_names" : [],
367- "default " : "" ,
368- "status " : "openai_error" ,
369- "count " : 0 ,
370- "error " : str ( e ) ,
371- "is_local " : True
372- })
302+ # Fallback: return static OpenAI models
303+ model_ids = [ m [ 'id' ] for m in openai_static_models ]
304+ return jsonify ({
305+ "models " : openai_static_models ,
306+ "model_names " : model_ids ,
307+ "default " : "gpt-4o" ,
308+ "status " : "openai_static" ,
309+ "count " : len ( openai_static_models )
310+ })
373311
374312 def _get_gemini_models (provided_api_key = None ):
375313 """Get available models from Gemini API"""
0 commit comments