Files
1Panel/agent/app/provider/openclaw.go
CityFun d402f67fc3 feat: Optimize application upgrade logic (#13549)
* feat: Optimize application upgrade logic

* feat: Optimize application upgrade logic

* feat: Optimize application upgrade logic
2026-08-13 18:28:59 +08:00

67 lines
1.7 KiB
Go

package provider
import (
"fmt"
"strings"
)
type OpenClawProviderPatch struct {
PrimaryModel string
ProviderKey string
ModelID string
APIKey string
BaseURL string
APIType string
AuthHeader bool
}
func BuildOpenClawProviderPatch(provider, modelName, apiType, authMode, baseURL, apiKey string) (*OpenClawProviderPatch, error) {
if modelName == "" {
return nil, fmt.Errorf("model is required")
}
resolvedAPIType := apiType
if _, ok := FindAPIConfig(provider, resolvedAPIType); !ok {
resolvedAPIType = DefaultAPIType(provider)
}
if IsImageAPIType(resolvedAPIType) || IsEmbeddingAPIType(resolvedAPIType) {
return nil, fmt.Errorf("api type %s does not support text generation", resolvedAPIType)
}
resolvedAuthMode, err := ResolveAuthMode(provider, resolvedAPIType, authMode)
if err != nil {
return nil, err
}
usesBearer := resolvedAuthMode == AuthModeBearer
modelID := NormalizeModelID(provider, modelName)
providerKey := provider
preserveQualifiedModel := false
switch provider {
case "gemini":
providerKey = "google"
resolvedAPIType = "google-generative-ai"
usesBearer = false
case "moonshot", "kimi":
providerKey = "moonshot"
resolvedAPIType = "openai-completions"
usesBearer = false
case "ollama":
apiKey = "ollama"
usesBearer = false
case "openai", "openrouter", "anthropic":
preserveQualifiedModel = strings.Contains(modelName, "/")
}
primaryModel := providerKey + "/" + modelID
if preserveQualifiedModel {
primaryModel = modelName
}
return &OpenClawProviderPatch{
PrimaryModel: primaryModel,
ProviderKey: providerKey,
ModelID: modelID,
APIKey: apiKey,
BaseURL: baseURL,
APIType: resolvedAPIType,
AuthHeader: usesBearer,
}, nil
}