mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-05-25 16:00:35 +00:00
548dc15acd
* feat(models): unify provider metadata around backend catalog - Move shared provider metadata and alias normalization into backend-owned provider catalog - Expose display, fetch, auth, and default model metadata through /api/models provider_options - Replace frontend static provider registry with catalog-driven selection, validation, grouping, and fallback rendering - Treat provider default api_base as placeholder and effective fetch/test base while keep submitted api_base separate from derived defaults - Add model page retry handling, touched locale updates, and provider metadata assertions in backend tests * fix(models): canonicalize backend provider aliases and common models * fix(models): restore deepseek common model recommendations
46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
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))
|
|
}
|