on main help sign in
chore: change reasoning effort
commitb3d23191a0d0a879916a9137bc755967c7bccb8a authorkujtimiihoxha <kujtimii.h@gmail.com> dateFri 10 Oct 2025, 13:34 (1 year ago) parente2e3920
8 files changed+17−28
go.mod+2−3 go.sum+2−2 internal/config/config.go+1−1 internal/config/load.go−6 internal/tui/components/dialogs/commands/commands.go+1−1 internal/tui/components/dialogs/models/list.go+1−1 internal/tui/components/dialogs/reasoning/reasoning.go+9−13 internal/tui/page/chat/chat.go+1−1
go.mod+2−3
@@ -13,8 +13,9 @@ require (
1313 github.com/charlievieth/fastwalk v1.0.14
1414 github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1.0.20250820203609-601216f68ee2
1515 github.com/charmbracelet/bubbletea/v2 v2.0.0-beta.4.0.20250910155747-997384b0b35e
16− github.com/charmbracelet/catwalk v0.6.4-0.20251002104711-f8c6c1e5b4a5
16+ github.com/charmbracelet/catwalk v0.6.5-0.20251010111259-a1bafd2530bb
1717 github.com/charmbracelet/fang v0.4.2
18+ github.com/charmbracelet/fantasy v0.0.0-20251003071236-5d39f0348e5d
1819 github.com/charmbracelet/glamour/v2 v2.0.0-20250811143442-a27abb32f018
1920 github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3.0.20250917201909-41ff0bf215ea
2021 github.com/charmbracelet/log/v2 v2.0.0-20250226163916-c379e29ff706
@@ -46,8 +47,6 @@ require (
4647 mvdan.cc/sh/v3 v3.12.1-0.20250902163504-3cf4fd5717a5
4748)
4849
49−require github.com/charmbracelet/fantasy v0.0.0-20251003071236-5d39f0348e5d
50−
5150require (
5251 cloud.google.com/go v0.116.0 // indirect
5352 cloud.google.com/go/auth v0.9.3 // indirect
go.sum+2−2
@@ -45,8 +45,8 @@ github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1.0.20250820203609-601216f68ee2
4545github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1.0.20250820203609-601216f68ee2/go.mod h1:6HamsBKWqEC/FVHuQMHgQL+knPyvHH55HwJDHl/adMw=
4646github.com/charmbracelet/bubbletea/v2 v2.0.0-beta.4.0.20250910155747-997384b0b35e h1:4BBnKWFwJ5FLyhw/ijFxKE04i9rubr8WIPR1kjO57iA=
4747github.com/charmbracelet/bubbletea/v2 v2.0.0-beta.4.0.20250910155747-997384b0b35e/go.mod h1:F7AfLKYQqpM3NNBVs7ctW417tavhvoh9SBjsgtwpzbY=
48−github.com/charmbracelet/catwalk v0.6.4-0.20251002104711-f8c6c1e5b4a5 h1:d/Gs0/fQoe4fJ7wnu7C1oA72C5KkTmacbXLN86EeqqE=
49−github.com/charmbracelet/catwalk v0.6.4-0.20251002104711-f8c6c1e5b4a5/go.mod h1:ReU4SdrLfe63jkEjWMdX2wlZMV3k9r11oQAmzN0m+KY=
48+github.com/charmbracelet/catwalk v0.6.5-0.20251010111259-a1bafd2530bb h1:1dANrQJF+y+irksWTqd4dvN91JP7e/gdYZscef3PxkY=
49+github.com/charmbracelet/catwalk v0.6.5-0.20251010111259-a1bafd2530bb/go.mod h1:ReU4SdrLfe63jkEjWMdX2wlZMV3k9r11oQAmzN0m+KY=
5050github.com/charmbracelet/colorprofile v0.3.2 h1:9J27WdztfJQVAQKX2WOlSSRB+5gaKqqITmrvb1uTIiI=
5151github.com/charmbracelet/colorprofile v0.3.2/go.mod h1:mTD5XzNeWHj8oqHb+S1bssQb7vIHbepiebQ2kPKVKbI=
5252github.com/charmbracelet/fang v0.4.2 h1:nWr7Tb82/TTNNGMGG35aTZ1X68loAOQmpb0qxkKXjas=
internal/config/config.go+1−1
@@ -563,7 +563,7 @@ func (c *ProviderConfig) TestConnection(resolver VariableResolver) error {
563563 testURL = baseURL + "/models"
564564 headers["x-api-key"] = apiKey
565565 headers["anthropic-version"] = "2023-06-01"
566− case catwalk.TypeGemini:
566+ case catwalk.TypeGoogle:
567567 baseURL, _ := resolver.ResolveValue(c.BaseURL)
568568 if baseURL == "" {
569569 baseURL = "https://generativelanguage.googleapis.com"
internal/config/load.go−6
@@ -282,12 +282,6 @@ func (c *Config) configureProviders(env env.Env, resolver VariableResolver, know
282282 c.Providers.Del(id)
283283 continue
284284 }
285− if providerConfig.Type != catwalk.TypeOpenAI && providerConfig.Type != catwalk.TypeAnthropic && providerConfig.Type != catwalk.TypeGemini {
286− slog.Warn("Skipping custom provider because the provider type is not supported", "provider", id, "type", providerConfig.Type)
287− c.Providers.Del(id)
288− continue
289− }
290−
291285 apiKey, err := resolver.ResolveValue(providerConfig.APIKey)
292286 if apiKey == "" || err != nil {
293287 slog.Warn("Provider is missing API key, this might be OK for local providers", "provider", id)
internal/tui/components/dialogs/commands/commands.go+1−1
@@ -326,7 +326,7 @@ func (c *commandDialogCmp) defaultCommands() []Command {
326326 }
327327
328328 // OpenAI models: reasoning effort dialog
329− if model.HasReasoningEffort {
329+ if len(model.ReasoningLevels) > 0 {
330330 commands = append(commands, Command{
331331 ID: "select_reasoning_effort",
332332 Title: "Select Reasoning Effort",
internal/tui/components/dialogs/models/list.go+1−1
@@ -151,7 +151,7 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
151151 ContextWindow: model.ContextWindow,
152152 DefaultMaxTokens: model.DefaultMaxTokens,
153153 CanReason: model.CanReason,
154− HasReasoningEffort: model.HasReasoningEffort,
154+ ReasoningLevels: model.ReasoningLevels,
155155 DefaultReasoningEffort: model.DefaultReasoningEffort,
156156 SupportsImages: model.SupportsImages,
157157 }
internal/tui/components/dialogs/reasoning/reasoning.go+9−13
@@ -5,6 +5,8 @@ import (
55 "github.com/charmbracelet/bubbles/v2/key"
66 tea "github.com/charmbracelet/bubbletea/v2"
77 "github.com/charmbracelet/lipgloss/v2"
8+ "golang.org/x/text/cases"
9+ "golang.org/x/text/language"
810
911 "github.com/charmbracelet/crush/internal/config"
1012 "github.com/charmbracelet/crush/internal/tui/components/core"
@@ -130,19 +132,13 @@ func (r *reasoningDialogCmp) populateEffortOptions() tea.Cmd {
130132 currentEffort = model.DefaultReasoningEffort
131133 }
132134
133− efforts := []EffortOption{
134− {
135− Title: "Low",
136− Effort: "low",
137− },
138− {
139− Title: "Medium",
140− Effort: "medium",
141− },
142− {
143− Title: "High",
144− Effort: "high",
145− },
135+ efforts := []EffortOption{}
136+ caser := cases.Title(language.Und)
137+ for _, level := range model.ReasoningLevels {
138+ efforts = append(efforts, EffortOption{
139+ Title: caser.String(level),
140+ Effort: level,
141+ })
146142 }
147143
148144 effortItems := []list.CompletionItem[EffortOption]{}
internal/tui/page/chat/chat.go+1−1
@@ -563,7 +563,7 @@ func (p *chatPage) openReasoningDialog() tea.Cmd {
563563 model := cfg.GetModelByType(agentCfg.Model)
564564 providerCfg := cfg.GetProviderForModel(agentCfg.Model)
565565
566− if providerCfg != nil && model != nil && model.HasReasoningEffort {
566+ if providerCfg != nil && model != nil && len(model.ReasoningLevels) > 0 {
567567 // Return the OpenDialogMsg directly so it bubbles up to the main TUI
568568 return dialogs.OpenDialogMsg{
569569 Model: reasoning.NewReasoningDialog(),