picoclaw/pkg/providers/model_ref.go

46 lines
1.2 KiB
Go
Raw Normal View History

package providers
import "strings"
// ModelRef represents a parsed model reference with provider and model name.
type ModelRef struct {
Provider string
Model string
}
// ParseModelRef parses "anthropic/claude-opus" into {Provider: "anthropic", Model: "claude-opus"}.
// If no slash present, uses defaultProvider.
// Returns nil for empty input.
func ParseModelRef(raw string, defaultProvider string) *ModelRef {
raw = strings.TrimSpace(raw)
if raw == "" {
return nil
}
provider, model := SplitModelProviderAndID(raw, defaultProvider)
if model == "" {
return nil
}
return &ModelRef{
Provider: provider,
Model: model,
}
}
// NormalizeProvider normalizes provider identifiers to canonical form.
func NormalizeProvider(provider string) string {
normalized := strings.ToLower(strings.TrimSpace(provider))
if normalized == "" {
return ""
}
if canonical, ok := normalizedModelProviderAliasesByName[normalized]; ok {
return canonical
}
return normalized
}
// ModelKey returns a canonical "provider/model" key for deduplication.
func ModelKey(provider, model string) string {
return NormalizeProvider(provider) + "/" + strings.ToLower(strings.TrimSpace(model))
}