opencode-provider-switch/internal/cli/provider_model_ref.go

50 lines
1.2 KiB
Go

package cli
import (
"fmt"
"sort"
"strings"
)
func parseProviderModelRef(value string) (provider string, model string, ok bool) {
trimmed := strings.TrimSpace(value)
if trimmed == "" {
return "", "", false
}
provider, model, ok = strings.Cut(trimmed, "/")
if !ok {
return "", "", false
}
provider = strings.TrimSpace(provider)
model = strings.TrimSpace(model)
if provider == "" || model == "" || strings.Contains(provider, "/") {
return "", "", false
}
return provider, model, true
}
func availableProviderModelRefs(models []string, providerID string) []string {
if len(models) == 0 {
return nil
}
refs := make([]string, 0, len(models))
for _, model := range models {
refs = append(refs, providerID+"/"+model)
}
sort.Strings(refs)
return refs
}
func validateProviderModelKnown(providerID string, known []string, source string, model string) error {
if source != "discovered" || len(known) == 0 {
return nil
}
for _, item := range known {
if item == model {
return nil
}
}
choices := availableProviderModelRefs(known, providerID)
return fmt.Errorf("model %q is not in provider %q discovered models; available: %s", model, providerID, strings.Join(choices, ", "))
}