fix: ensure hyper is the first provider in the list

Andrey Nering created

Change summary

internal/tui/components/dialogs/models/list.go |  6 ++----
internal/ui/dialog/models.go                   | 13 +++++++++++++
2 files changed, 15 insertions(+), 4 deletions(-)

Detailed changes

internal/tui/components/dialogs/models/list.go 🔗

@@ -186,9 +186,7 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
 
 	// Move "Charm Hyper" to first position
 	// (but still after recent models and custom providers).
-	sortedProviders := make([]catwalk.Provider, len(m.providers))
-	copy(sortedProviders, m.providers)
-	slices.SortStableFunc(sortedProviders, func(a, b catwalk.Provider) int {
+	slices.SortStableFunc(m.providers, func(a, b catwalk.Provider) int {
 		switch {
 		case a.ID == "hyper":
 			return -1
@@ -200,7 +198,7 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
 	})
 
 	// Then add the known providers from the predefined list
-	for _, provider := range sortedProviders {
+	for _, provider := range m.providers {
 		// Skip if we already added this provider as an unknown provider
 		if addedProviders[string(provider.ID)] {
 			continue

internal/ui/dialog/models.go 🔗

@@ -354,6 +354,19 @@ func (m *Models) setProviderItems() error {
 		}
 	}
 
+	// Move "Charm Hyper" to first position.
+	// (But still after recent models and custom providers).
+	slices.SortStableFunc(m.providers, func(a, b catwalk.Provider) int {
+		switch {
+		case a.ID == "hyper":
+			return -1
+		case b.ID == "hyper":
+			return 1
+		default:
+			return 0
+		}
+	})
+
 	// Now add known providers from the predefined list
 	for _, provider := range m.providers {
 		providerID := string(provider.ID)