@@ -7251,18 +7251,45 @@ async function handleBYOKValidate(request, env, ctx) {
72517251 } ) ;
72527252 }
72537253 const data = await res . json ( ) ;
7254+ // Only include models that work with the OpenAI-compatible chat endpoint
7255+ // Exclude: gemma (local models), embedding, AQA, imagen, preview/experimental builds
7256+ const GEMINI_CHAT_VERIFIED = [
7257+ "gemini-2.5-flash" , "gemini-2.5-pro" ,
7258+ "gemini-2.0-flash" , "gemini-2.0-flash-lite" ,
7259+ "gemini-1.5-flash" , "gemini-1.5-pro" ,
7260+ ] ;
72547261 models = ( data . models || [ ] )
7255- . filter ( m => m . supportedGenerationMethods && m . supportedGenerationMethods . includes ( "generateContent" ) )
7262+ . filter ( m => {
7263+ if ( ! m . supportedGenerationMethods || ! m . supportedGenerationMethods . includes ( "generateContent" ) ) return false ;
7264+ const mid = m . name ? m . name . replace ( "models/" , "" ) : "" ;
7265+ // Must start with "gemini-" (exclude gemma, embedding, imagen, etc.)
7266+ if ( ! mid . startsWith ( "gemini-" ) ) return false ;
7267+ // Exclude preview/experimental builds (contain "-preview-" or end with "-preview")
7268+ if ( mid . includes ( "-preview" ) ) return false ;
7269+ // Exclude numbered snapshot builds (e.g. gemini-2.0-flash-001)
7270+ if ( / \d { 3 } $ / . test ( mid ) ) return false ;
7271+ // Exclude "-latest" aliases (redundant with the base model)
7272+ if ( mid . endsWith ( "-latest" ) ) return false ;
7273+ return true ;
7274+ } )
72567275 . map ( m => {
72577276 const mid = m . name ? m . name . replace ( "models/" , "" ) : m . name ;
7277+ const isVerified = GEMINI_CHAT_VERIFIED . includes ( mid ) ;
72587278 return {
7259- id : mid , name : m . displayName || mid ,
7279+ id : mid ,
7280+ name : m . displayName || mid ,
72607281 context_window : m . inputTokenLimit || null ,
72617282 output_limit : m . outputTokenLimit || null ,
72627283 recommended : ( RECOMMENDED . gemini || [ ] ) . includes ( mid ) ,
7284+ verified : isVerified ,
72637285 } ;
72647286 } )
7265- . sort ( ( a , b ) => ( b . recommended ? 1 : 0 ) - ( a . recommended ? 1 : 0 ) ) ;
7287+ . sort ( ( a , b ) => {
7288+ // Sort: recommended first, then verified, then alphabetical
7289+ if ( a . recommended !== b . recommended ) return b . recommended ? 1 : - 1 ;
7290+ if ( a . verified !== b . verified ) return b . verified ? 1 : - 1 ;
7291+ return a . id . localeCompare ( b . id ) ;
7292+ } ) ;
72667293
72677294 } else if ( provider === "openai" ) {
72687295 const oaiUrl = ( base_url || "https://api.openai.com/v1" ) + "/models" ;
0 commit comments