diff --git a/crates/goose-cli/src/commands/configure.rs b/crates/goose-cli/src/commands/configure.rs index f1824d935708..bd87628f75d2 100644 --- a/crates/goose-cli/src/commands/configure.rs +++ b/crates/goose-cli/src/commands/configure.rs @@ -420,7 +420,10 @@ pub async fn configure_provider_dialog() -> Result> { let config = Config::global(); // Get all available providers and their metadata - let available_providers = providers().await; + let mut available_providers = providers().await; + + // Sort providers alphabetically by display name + available_providers.sort_by(|a, b| a.display_name.cmp(&b.display_name)); // Create selection items from provider metadata let provider_items: Vec<(&String, &str, &str)> = available_providers diff --git a/ui/desktop/src/components/settings/providers/ProviderGrid.tsx b/ui/desktop/src/components/settings/providers/ProviderGrid.tsx index 661342782ae9..eb1a071f76af 100644 --- a/ui/desktop/src/components/settings/providers/ProviderGrid.tsx +++ b/ui/desktop/src/components/settings/providers/ProviderGrid.tsx @@ -114,7 +114,9 @@ const ProviderCards = memo(function ProviderCards({ const providerCards = useMemo(() => { // providers needs to be an array const providersArray = Array.isArray(providers) ? providers : []; - const cards = providersArray.map((provider) => ( + // Sort providers alphabetically by name + const sortedProviders = [...providersArray].sort((a, b) => a.name.localeCompare(b.name)); + const cards = sortedProviders.map((provider) => (