86 lines
2.6 KiB
Go
86 lines
2.6 KiB
Go
package models
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
ProviderTypeOpenAI = "openai"
|
|
ProviderTypeOpenAICompatible = "openai-compatible"
|
|
ProviderTypeAnthropic = "anthropic"
|
|
ProviderTypeGoogle = "google"
|
|
ProviderTypeAzureOpenAI = "azure-openai"
|
|
ProviderTypeLocal = "local"
|
|
|
|
ProtocolTypeOpenAI = "openai"
|
|
ProtocolTypeOpenAICompatible = "openai-compatible"
|
|
ProtocolTypeAnthropic = "anthropic"
|
|
ProtocolTypeGoogle = "google"
|
|
ProtocolTypeAzureOpenAI = "azure-openai"
|
|
)
|
|
|
|
func normalizeLLMType(value string) string {
|
|
return strings.TrimSpace(strings.ToLower(value))
|
|
}
|
|
|
|
// ResolveLLMProtocolType validates and normalizes the effective transport protocol for a model.
|
|
func ResolveLLMProtocolType(providerType, protocolType string) (string, error) {
|
|
normalizedProviderType := normalizeLLMType(providerType)
|
|
normalizedProtocolType := normalizeLLMType(protocolType)
|
|
|
|
switch normalizedProviderType {
|
|
case "":
|
|
return "", fmt.Errorf("provider type is required")
|
|
case ProviderTypeLocal:
|
|
switch normalizedProtocolType {
|
|
case "", ProtocolTypeOpenAI, ProtocolTypeOpenAICompatible:
|
|
return ProtocolTypeOpenAICompatible, nil
|
|
case ProtocolTypeAnthropic:
|
|
return ProtocolTypeAnthropic, nil
|
|
default:
|
|
return "", fmt.Errorf("protocol type %s is not supported for local provider", normalizedProtocolType)
|
|
}
|
|
case ProviderTypeOpenAI:
|
|
return ProtocolTypeOpenAI, nil
|
|
case ProviderTypeOpenAICompatible:
|
|
return ProtocolTypeOpenAICompatible, nil
|
|
case ProviderTypeAnthropic:
|
|
return ProtocolTypeAnthropic, nil
|
|
case ProviderTypeGoogle:
|
|
return ProtocolTypeGoogle, nil
|
|
case ProviderTypeAzureOpenAI:
|
|
return ProtocolTypeAzureOpenAI, nil
|
|
default:
|
|
if normalizedProtocolType != "" {
|
|
return normalizedProtocolType, nil
|
|
}
|
|
return normalizedProviderType, nil
|
|
}
|
|
}
|
|
|
|
// ResolveLLMProtocolTypeOrDefault returns a normalized protocol type and falls back to a sensible default.
|
|
func ResolveLLMProtocolTypeOrDefault(providerType, protocolType string) string {
|
|
resolved, err := ResolveLLMProtocolType(providerType, protocolType)
|
|
if err == nil {
|
|
return resolved
|
|
}
|
|
|
|
switch normalizeLLMType(providerType) {
|
|
case ProviderTypeLocal:
|
|
return ProtocolTypeOpenAICompatible
|
|
case ProviderTypeOpenAI:
|
|
return ProtocolTypeOpenAI
|
|
case ProviderTypeAnthropic:
|
|
return ProtocolTypeAnthropic
|
|
case ProviderTypeGoogle:
|
|
return ProtocolTypeGoogle
|
|
case ProviderTypeAzureOpenAI:
|
|
return ProtocolTypeAzureOpenAI
|
|
case ProviderTypeOpenAICompatible:
|
|
return ProtocolTypeOpenAICompatible
|
|
default:
|
|
return normalizeLLMType(providerType)
|
|
}
|
|
}
|