From 7f2e9f88ea2285c212abfba4996f7e4db7a54d54 Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Fri, 6 Mar 2026 16:00:02 -0700 Subject: [PATCH] fix(ui): format xhigh as XHigh (not Xhigh) (#2369) --- internal/ui/common/elements.go | 10 ++++++++++ internal/ui/dialog/reasoning.go | 5 +---- internal/ui/model/sidebar.go | 5 +---- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/internal/ui/common/elements.go b/internal/ui/common/elements.go index 1477b2a5208e31831a1725042daa6190364ced46..9c60a305d6d0c601efe2c57c363784d46eeda9f3 100644 --- a/internal/ui/common/elements.go +++ b/internal/ui/common/elements.go @@ -10,6 +10,8 @@ import ( "github.com/charmbracelet/crush/internal/home" "github.com/charmbracelet/crush/internal/ui/styles" "github.com/charmbracelet/x/ansi" + "golang.org/x/text/cases" + "golang.org/x/text/language" ) // PrettyPath formats a file path with home directory shortening and applies @@ -19,6 +21,14 @@ func PrettyPath(t *styles.Styles, path string, width int) string { return t.Muted.Width(width).Render(formatted) } +// FormatReasoningEffort formats a reasoning effort level for display. +func FormatReasoningEffort(effort string) string { + if effort == "xhigh" { + return "X-High" + } + return cases.Title(language.English).String(effort) +} + // ModelContextInfo contains token usage and cost information for a model. type ModelContextInfo struct { ContextUsed int64 diff --git a/internal/ui/dialog/reasoning.go b/internal/ui/dialog/reasoning.go index cd8ba7d1e293fcb66d04c76f420463aa3a94770f..49a4711f9317fb69a84eefa4b1d5a216674a77ed 100644 --- a/internal/ui/dialog/reasoning.go +++ b/internal/ui/dialog/reasoning.go @@ -13,8 +13,6 @@ import ( "github.com/charmbracelet/crush/internal/ui/styles" uv "github.com/charmbracelet/ultraviolet" "github.com/sahilm/fuzzy" - "golang.org/x/text/cases" - "golang.org/x/text/language" ) const ( @@ -241,13 +239,12 @@ func (r *Reasoning) setReasoningItems() error { currentEffort = model.DefaultReasoningEffort } - caser := cases.Title(language.English) items := make([]list.FilterableItem, 0, len(model.ReasoningLevels)) selectedIndex := 0 for i, effort := range model.ReasoningLevels { item := &ReasoningItem{ effort: effort, - title: caser.String(effort), + title: common.FormatReasoningEffort(effort), isCurrent: effort == currentEffort, t: r.com.Styles, } diff --git a/internal/ui/model/sidebar.go b/internal/ui/model/sidebar.go index 221405a0a276a38c531223f7ed5adde1139c6ef8..88113a593034b09ed8d2859bc7628a103f5728b1 100644 --- a/internal/ui/model/sidebar.go +++ b/internal/ui/model/sidebar.go @@ -9,8 +9,6 @@ import ( "github.com/charmbracelet/crush/internal/ui/logo" uv "github.com/charmbracelet/ultraviolet" "github.com/charmbracelet/ultraviolet/layout" - "golang.org/x/text/cases" - "golang.org/x/text/language" ) // modelInfo renders the current model information including reasoning @@ -35,9 +33,8 @@ func (m *UI) modelInfo(width int) string { reasoningInfo = "Thinking Off" } } else { - formatter := cases.Title(language.English, cases.NoLower) reasoningEffort := cmp.Or(model.ModelCfg.ReasoningEffort, model.CatwalkCfg.DefaultReasoningEffort) - reasoningInfo = formatter.String(fmt.Sprintf("Reasoning %s", reasoningEffort)) + reasoningInfo = fmt.Sprintf("Reasoning %s", common.FormatReasoningEffort(reasoningEffort)) } } }