@@ -389,24 +389,25 @@ export async function handler(
389389 if ( provider ) return provider
390390 }
391391
392- if ( retry . retryCount === MAX_FAILOVER_RETRIES ) {
393- const provider = modelInfo . providers . find ( ( provider ) => provider . id === modelInfo . fallbackProvider )
392+ if ( retry . retryCount !== MAX_FAILOVER_RETRIES ) {
393+ const providers = modelInfo . providers
394+ . filter ( ( provider ) => ! provider . disabled )
395+ . filter ( ( provider ) => ! retry . excludeProviders . includes ( provider . id ) )
396+ . flatMap ( ( provider ) => Array < typeof provider > ( provider . weight ?? 1 ) . fill ( provider ) )
397+
398+ // Use the last 4 characters of session ID to select a provider
399+ let h = 0
400+ const l = sessionId . length
401+ for ( let i = l - 4 ; i < l ; i ++ ) {
402+ h = ( h * 31 + sessionId . charCodeAt ( i ) ) | 0 // 32-bit int
403+ }
404+ const index = ( h >>> 0 ) % providers . length // make unsigned + range 0..length-1
405+ const provider = providers [ index || 0 ]
394406 if ( provider ) return provider
395407 }
396408
397- const providers = modelInfo . providers
398- . filter ( ( provider ) => ! provider . disabled )
399- . filter ( ( provider ) => ! retry . excludeProviders . includes ( provider . id ) )
400- . flatMap ( ( provider ) => Array < typeof provider > ( provider . weight ?? 1 ) . fill ( provider ) )
401-
402- // Use the last 4 characters of session ID to select a provider
403- let h = 0
404- const l = sessionId . length
405- for ( let i = l - 4 ; i < l ; i ++ ) {
406- h = ( h * 31 + sessionId . charCodeAt ( i ) ) | 0 // 32-bit int
407- }
408- const index = ( h >>> 0 ) % providers . length // make unsigned + range 0..length-1
409- return providers [ index || 0 ]
409+ // fallback provider
410+ return modelInfo . providers . find ( ( provider ) => provider . id === modelInfo . fallbackProvider )
410411 } ) ( )
411412
412413 if ( ! modelProvider ) throw new ModelError ( "No provider available" )
0 commit comments