summaryrefslogtreecommitdiff
path: root/internal/hexaiaction
diff options
context:
space:
mode:
Diffstat (limited to 'internal/hexaiaction')
-rw-r--r--internal/hexaiaction/prompts.go31
-rw-r--r--internal/hexaiaction/prompts_more_test.go7
-rw-r--r--internal/hexaiaction/run.go6
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 {