diff options
| author | Paul Buetow <paul@buetow.org> | 2025-09-26 20:19:41 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-09-26 20:19:41 +0300 |
| commit | 1731126b52e406a300270c8fc8ac1061a4422b27 (patch) | |
| tree | c74768df49994aa9676cbc69ebfb461ed0422e01 /internal/hexaicli/run.go | |
| parent | 0583b360ceb606b8e58f12a17f588bd27feeb117 (diff) | |
Refactor surface config to support multi-provider arrays
Diffstat (limited to 'internal/hexaicli/run.go')
| -rw-r--r-- | internal/hexaicli/run.go | 56 |
1 files changed, 31 insertions, 25 deletions
diff --git a/internal/hexaicli/run.go b/internal/hexaicli/run.go index b965261..5f6284c 100644 --- a/internal/hexaicli/run.go +++ b/internal/hexaicli/run.go @@ -27,44 +27,49 @@ type requestArgs struct { func buildCLIRequestArgs(cfg appconfig.App, client llm.Client) requestArgs { provider := canonicalProvider(cfg.Provider) - if strings.TrimSpace(cfg.CLIProvider) != "" { - provider = canonicalProvider(cfg.CLIProvider) + entries := cfg.CLIConfigs + if len(entries) == 0 { + entries = []appconfig.SurfaceConfig{{Provider: cfg.Provider, Model: strings.TrimSpace(defaultModelForProvider(cfg, provider))}} } - if client != nil { - provider = strings.ToLower(strings.TrimSpace(client.Name())) + primary := entries[0] + if strings.TrimSpace(primary.Provider) != "" { + provider = canonicalProvider(primary.Provider) } - override := strings.TrimSpace(cfg.CLIModel) - fallback := strings.TrimSpace(defaultModelForProvider(cfg, provider)) + model := strings.TrimSpace(primary.Model) if client != nil { - if dm := strings.TrimSpace(client.DefaultModel()); dm != "" { - fallback = dm + provider = strings.ToLower(strings.TrimSpace(client.Name())) + if model == "" { + model = strings.TrimSpace(client.DefaultModel()) } } - effective := override - if effective == "" { - effective = fallback + if model == "" { + model = strings.TrimSpace(defaultModelForProvider(cfg, provider)) } opts := make([]llm.RequestOption, 0, 2) - if override != "" { - opts = append(opts, llm.WithModel(override)) + if strings.TrimSpace(primary.Model) != "" { + opts = append(opts, llm.WithModel(strings.TrimSpace(primary.Model))) } - if temp, ok := cliTemperature(cfg, provider, effective); ok { + if temp, ok := cliTemperatureFromEntry(cfg, provider, primary, model); ok { opts = append(opts, llm.WithTemperature(temp)) } - return requestArgs{model: effective, options: opts} + return requestArgs{model: model, options: opts} } func defaultRequestArgs(cfg appconfig.App, client llm.Client) requestArgs { - model := strings.TrimSpace(cfg.CLIModel) - if model == "" && client != nil { - model = strings.TrimSpace(client.DefaultModel()) + if len(cfg.CLIConfigs) > 0 { + if m := strings.TrimSpace(cfg.CLIConfigs[0].Model); m != "" { + return requestArgs{model: m} + } + } + if client != nil { + return requestArgs{model: strings.TrimSpace(client.DefaultModel())} } - return requestArgs{model: model} + return requestArgs{} } -func cliTemperature(cfg appconfig.App, provider, model string) (float64, bool) { - if cfg.CLITemperature != nil { - return *cfg.CLITemperature, true +func cliTemperatureFromEntry(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 @@ -107,9 +112,10 @@ func Run(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io. if cfg.StatsWindowMinutes > 0 { stats.SetWindow(time.Duration(cfg.StatsWindowMinutes) * time.Minute) } - providerOverride := strings.TrimSpace(cfg.CLIProvider) - if providerOverride != "" { - cfg.Provider = providerOverride + if len(cfg.CLIConfigs) > 0 { + if provider := strings.TrimSpace(cfg.CLIConfigs[0].Provider); provider != "" { + cfg.Provider = provider + } } client, err := newClientFromApp(cfg) if err != nil { |
