diff options
Diffstat (limited to 'internal/hexaiaction')
| -rw-r--r-- | internal/hexaiaction/prompts.go | 31 | ||||
| -rw-r--r-- | internal/hexaiaction/prompts_more_test.go | 7 | ||||
| -rw-r--r-- | internal/hexaiaction/run.go | 6 |
3 files changed, 27 insertions, 17 deletions
diff --git a/internal/hexaiaction/prompts.go b/internal/hexaiaction/prompts.go index 47dadbf..a113391 100644 --- a/internal/hexaiaction/prompts.go +++ b/internal/hexaiaction/prompts.go @@ -56,9 +56,9 @@ func defaultModelForProvider(cfg appconfig.App, provider string) string { } } -func selectActionTemperature(cfg appconfig.App, provider, model string) (float64, bool) { - if cfg.CodeActionTemperature != nil { - return *cfg.CodeActionTemperature, true +func selectActionTemperature(cfg appconfig.App, provider string, entry appconfig.SurfaceConfig, model string) (float64, bool) { + if entry.Temperature != nil { + return *entry.Temperature, true } if cfg.CodingTemperature != nil { temp := *cfg.CodingTemperature @@ -201,22 +201,25 @@ func reqOptsFrom(cfg appconfig.App) requestArgs { opts = append(opts, llm.WithMaxTokens(cfg.MaxTokens)) } provider := canonicalProvider(cfg.Provider) - if strings.TrimSpace(cfg.CodeActionProvider) != "" { - provider = canonicalProvider(cfg.CodeActionProvider) + entries := cfg.CodeActionConfigs + if len(entries) == 0 { + entries = []appconfig.SurfaceConfig{{Provider: cfg.Provider, Model: strings.TrimSpace(defaultModelForProvider(cfg, provider))}} } - override := strings.TrimSpace(cfg.CodeActionModel) - fallback := strings.TrimSpace(defaultModelForProvider(cfg, provider)) - effective := override - if effective == "" { - effective = fallback + primary := entries[0] + if strings.TrimSpace(primary.Provider) != "" { + provider = canonicalProvider(primary.Provider) } - if override != "" { - opts = append(opts, llm.WithModel(override)) + model := strings.TrimSpace(primary.Model) + if model == "" { + model = strings.TrimSpace(defaultModelForProvider(cfg, provider)) + } + if strings.TrimSpace(primary.Model) != "" { + opts = append(opts, llm.WithModel(strings.TrimSpace(primary.Model))) } - if temp, ok := selectActionTemperature(cfg, provider, effective); ok { + if temp, ok := selectActionTemperature(cfg, provider, primary, model); ok { opts = append(opts, llm.WithTemperature(temp)) } - return requestArgs{model: effective, options: opts} + return requestArgs{model: model, options: opts} } // Timeout helpers to mirror LSP behavior. diff --git a/internal/hexaiaction/prompts_more_test.go b/internal/hexaiaction/prompts_more_test.go index 97d3979..cfccd0c 100644 --- a/internal/hexaiaction/prompts_more_test.go +++ b/internal/hexaiaction/prompts_more_test.go @@ -32,7 +32,12 @@ func TestRunOnce_StripsFences(t *testing.T) { } func TestReqOptsFrom_Override(t *testing.T) { - cfg := appconfig.App{MaxTokens: 123, CodeActionModel: "override", CodeActionTemperature: ptrFloat(0.6), Provider: "openai", CodeActionProvider: "copilot", CopilotModel: "gpt-4o"} + cfg := appconfig.App{ + MaxTokens: 123, + Provider: "openai", + CopilotModel: "gpt-4o", + CodeActionConfigs: []appconfig.SurfaceConfig{{Provider: "copilot", Model: "override", Temperature: ptrFloat(0.6)}}, + } req := reqOptsFrom(cfg) if req.model != "override" { t.Fatalf("expected override model, got %q", req.model) diff --git a/internal/hexaiaction/run.go b/internal/hexaiaction/run.go index 953da80..a5f47cf 100644 --- a/internal/hexaiaction/run.go +++ b/internal/hexaiaction/run.go @@ -41,8 +41,10 @@ func Run(ctx context.Context, stdin io.Reader, stdout, stderr io.Writer) error { if len(cfg.CustomActions) > 0 { chooseActionFn = func() (ActionKind, error) { return RunTUIWithCustom(cfg.CustomActions, cfg.TmuxCustomMenuHotkey) } } - if providerOverride := strings.TrimSpace(cfg.CodeActionProvider); providerOverride != "" { - cfg.Provider = providerOverride + if len(cfg.CodeActionConfigs) > 0 { + if provider := strings.TrimSpace(cfg.CodeActionConfigs[0].Provider); provider != "" { + cfg.Provider = provider + } } cli, err := newClientFromApp(cfg) if err != nil { |
