50 lines
1.2 KiB
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, ", "))
|
|
}
|