@ -405,6 +405,22 @@ export function ModelSearchDialog({
}
}
} ;
} ;
// Compute which providers are available based on API keys
const availableProviders = useMemo ( ( ) = > {
const providers = new Set < ProviderType > ( [ "gemini" , "fal" ] ) ; // Always available
if ( replicateApiKey ) providers . add ( "replicate" ) ;
if ( kieApiKey ) providers . add ( "kie" ) ;
if ( wavespeedApiKey ) providers . add ( "wavespeed" ) ;
return providers ;
} , [ replicateApiKey , kieApiKey , wavespeedApiKey ] ) ;
// Reset provider filter if current selection becomes unavailable
useEffect ( ( ) = > {
if ( providerFilter !== "all" && ! availableProviders . has ( providerFilter as ProviderType ) ) {
setProviderFilter ( "all" ) ;
}
} , [ providerFilter , availableProviders ] ) ;
// Filter recent models by capability
// Filter recent models by capability
const filteredRecentModels = useMemo ( ( ) = > {
const filteredRecentModels = useMemo ( ( ) = > {
return recentModels
return recentModels
@ -585,7 +601,7 @@ export function ModelSearchDialog({
/ >
/ >
< / div >
< / div >
{ /* Provider Filter - Icon Buttons */ }
{ /* Provider Filter - Icon Buttons (only show available providers) */ }
< div className = "flex items-center gap-0.5 bg-neutral-700/50 rounded p-0.5" >
< div className = "flex items-center gap-0.5 bg-neutral-700/50 rounded p-0.5" >
< button
< button
onClick = { ( ) = > setProviderFilter ( "all" ) }
onClick = { ( ) = > setProviderFilter ( "all" ) }
@ -598,61 +614,71 @@ export function ModelSearchDialog({
>
>
All
All
< / button >
< / button >
< button
{ availableProviders . has ( "gemini" ) && (
onClick = { ( ) = > setProviderFilter ( "gemini" ) }
< button
title = "Gemini"
onClick = { ( ) = > setProviderFilter ( "gemini" ) }
className = { ` p-2 rounded transition-colors ${
title = "Gemini"
providerFilter === "gemini"
className = { ` p-2 rounded transition-colors ${
? "bg-green-500/20 text-green-300"
providerFilter === "gemini"
: "text-neutral-400 hover:text-green-300 hover:bg-neutral-700"
? "bg-green-500/20 text-green-300"
} ` }
: "text-neutral-400 hover:text-green-300 hover:bg-neutral-700"
>
} ` }
< GeminiIcon / >
>
< / button >
< GeminiIcon / >
< button
< / button >
onClick = { ( ) = > setProviderFilter ( "replicate" ) }
) }
title = "Replicate"
{ availableProviders . has ( "replicate" ) && (
className = { ` p-2 rounded transition-colors ${
< button
providerFilter === "replicate"
onClick = { ( ) = > setProviderFilter ( "replicate" ) }
? "bg-blue-500/20 text-blue-300"
title = "Replicate"
: "text-neutral-400 hover:text-blue-300 hover:bg-neutral-700"
className = { ` p-2 rounded transition-colors ${
} ` }
providerFilter === "replicate"
>
? "bg-blue-500/20 text-blue-300"
< ReplicateIcon / >
: "text-neutral-400 hover:text-blue-300 hover:bg-neutral-700"
< / button >
} ` }
< button
>
onClick = { ( ) = > setProviderFilter ( "fal" ) }
< ReplicateIcon / >
title = "fal.ai"
< / button >
className = { ` p-2 rounded transition-colors ${
) }
providerFilter === "fal"
{ availableProviders . has ( "fal" ) && (
? "bg-yellow-500/20 text-yellow-300"
< button
: "text-neutral-400 hover:text-yellow-300 hover:bg-neutral-700"
onClick = { ( ) = > setProviderFilter ( "fal" ) }
} ` }
title = "fal.ai"
>
className = { ` p-2 rounded transition-colors ${
< FalIcon / >
providerFilter === "fal"
< / button >
? "bg-yellow-500/20 text-yellow-300"
< button
: "text-neutral-400 hover:text-yellow-300 hover:bg-neutral-700"
onClick = { ( ) = > setProviderFilter ( "kie" ) }
} ` }
title = "Kie.ai"
>
className = { ` p-2 rounded transition-colors ${
< FalIcon / >
providerFilter === "kie"
< / button >
? "bg-orange-500/20 text-orange-300"
) }
: "text-neutral-400 hover:text-orange-300 hover:bg-neutral-700"
{ availableProviders . has ( "kie" ) && (
} ` }
< button
>
onClick = { ( ) = > setProviderFilter ( "kie" ) }
< KieIcon / >
title = "Kie.ai"
< / button >
className = { ` p-2 rounded transition-colors ${
< button
providerFilter === "kie"
onClick = { ( ) = > setProviderFilter ( "wavespeed" ) }
? "bg-orange-500/20 text-orange-300"
title = "WaveSpeed"
: "text-neutral-400 hover:text-orange-300 hover:bg-neutral-700"
className = { ` p-2 rounded transition-colors ${
} ` }
providerFilter === "wavespeed"
>
? "bg-orange-500/20 text-orange-300"
< KieIcon / >
: "text-neutral-400 hover:text-orange-300 hover:bg-neutral-700"
< / button >
} ` }
) }
>
{ availableProviders . has ( "wavespeed" ) && (
< WaveSpeedIcon / >
< button
< / button >
onClick = { ( ) = > setProviderFilter ( "wavespeed" ) }
title = "WaveSpeed"
className = { ` p-2 rounded transition-colors ${
providerFilter === "wavespeed"
? "bg-purple-500/20 text-purple-300"
: "text-neutral-400 hover:text-purple-300 hover:bg-neutral-700"
} ` }
>
< WaveSpeedIcon / >
< / button >
) }
< / div >
< / div >
{ /* Capability Filter */ }
{ /* Capability Filter */ }