on main help sign in
fix(ui): format xhigh as XHigh (not Xhigh) (#2369)
7f2e9f8Christian Rocha
internal/ui/common/elements.go+10
@@ -10,6 +10,8 @@ import (
10 "github.com/charmbracelet/crush/internal/home"
10 "github.com/charmbracelet/crush/internal/home"
11 "github.com/charmbracelet/crush/internal/ui/styles"
11 "github.com/charmbracelet/crush/internal/ui/styles"
12 "github.com/charmbracelet/x/ansi"
12 "github.com/charmbracelet/x/ansi"
13+ "golang.org/x/text/cases"
14+ "golang.org/x/text/language"
13)
15)
14
16
15// PrettyPath formats a file path with home directory shortening and applies
17// 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 {
19 return t.Muted.Width(width).Render(formatted)
21 return t.Muted.Width(width).Render(formatted)
20}
22}
21
23
24+// FormatReasoningEffort formats a reasoning effort level for display.
25+func FormatReasoningEffort(effort string) string {
26+ if effort == "xhigh" {
27+ return "X-High"
28+ }
29+ return cases.Title(language.English).String(effort)
30+}
31+
22// ModelContextInfo contains token usage and cost information for a model.
32// ModelContextInfo contains token usage and cost information for a model.
23type ModelContextInfo struct {
33type ModelContextInfo struct {
24 ContextUsed int64
34 ContextUsed int64
internal/ui/dialog/reasoning.go+1−4
@@ -13,8 +13,6 @@ import (
13 "github.com/charmbracelet/crush/internal/ui/styles"
13 "github.com/charmbracelet/crush/internal/ui/styles"
14 uv "github.com/charmbracelet/ultraviolet"
14 uv "github.com/charmbracelet/ultraviolet"
15 "github.com/sahilm/fuzzy"
15 "github.com/sahilm/fuzzy"
16− "golang.org/x/text/cases"
17− "golang.org/x/text/language"
18)
16)
19
17
20const (
18const (
@@ -241,13 +239,12 @@ func (r *Reasoning) setReasoningItems() error {
241 currentEffort = model.DefaultReasoningEffort
239 currentEffort = model.DefaultReasoningEffort
242 }
240 }
243
241
244− caser := cases.Title(language.English)
245 items := make([]list.FilterableItem, 0, len(model.ReasoningLevels))
242 items := make([]list.FilterableItem, 0, len(model.ReasoningLevels))
246 selectedIndex := 0
243 selectedIndex := 0
247 for i, effort := range model.ReasoningLevels {
244 for i, effort := range model.ReasoningLevels {
248 item := &ReasoningItem{
245 item := &ReasoningItem{
249 effort: effort,
246 effort: effort,
250− title: caser.String(effort),
247+ title: common.FormatReasoningEffort(effort),
251 isCurrent: effort == currentEffort,
248 isCurrent: effort == currentEffort,
252 t: r.com.Styles,
249 t: r.com.Styles,
253 }
250 }
internal/ui/model/sidebar.go+1−4
@@ -9,8 +9,6 @@ import (
9 "github.com/charmbracelet/crush/internal/ui/logo"
9 "github.com/charmbracelet/crush/internal/ui/logo"
10 uv "github.com/charmbracelet/ultraviolet"
10 uv "github.com/charmbracelet/ultraviolet"
11 "github.com/charmbracelet/ultraviolet/layout"
11 "github.com/charmbracelet/ultraviolet/layout"
12− "golang.org/x/text/cases"
13− "golang.org/x/text/language"
14)
12)
15
13
16// modelInfo renders the current model information including reasoning
14// modelInfo renders the current model information including reasoning
@@ -35,9 +33,8 @@ func (m *UI) modelInfo(width int) string {
35 reasoningInfo = "Thinking Off"
33 reasoningInfo = "Thinking Off"
36 }
34 }
37 } else {
35 } else {
38− formatter := cases.Title(language.English, cases.NoLower)
39 reasoningEffort := cmp.Or(model.ModelCfg.ReasoningEffort, model.CatwalkCfg.DefaultReasoningEffort)
36 reasoningEffort := cmp.Or(model.ModelCfg.ReasoningEffort, model.CatwalkCfg.DefaultReasoningEffort)
40− reasoningInfo = formatter.String(fmt.Sprintf("Reasoning %s", reasoningEffort))
37+ reasoningInfo = fmt.Sprintf("Reasoning %s", common.FormatReasoningEffort(reasoningEffort))
41 }
38 }
42 }
39 }
43 }
40 }