(account *model.AgentAccount, selectedModel string)
| 998 | } |
| 999 | |
| 1000 | func buildOpenclawModelsFromAccount(account *model.AgentAccount, selectedModel string) (string, map[string]map[string]interface{}, *modelsConfig, error) { |
| 1001 | accountModels, err := loadAgentAccountModels(account) |
| 1002 | if err != nil { |
| 1003 | return "", nil, nil, err |
| 1004 | } |
| 1005 | if len(accountModels) == 0 { |
| 1006 | return "", nil, nil, buserr.New("ErrAgentModelNotInAccount") |
| 1007 | } |
| 1008 | if selectedModel == "" { |
| 1009 | return "", nil, nil, buserr.New("ErrAgentModelNotInAccount") |
| 1010 | } |
| 1011 | selectedAccountModel, err := requireAgentAccountModelForProvider(account.Provider, accountModels, selectedModel) |
| 1012 | if err != nil { |
| 1013 | return "", nil, nil, err |
| 1014 | } |
| 1015 | selectedModel = selectedAccountModel.ID |
| 1016 | |
| 1017 | providerKey := "" |
| 1018 | providerCfg := modelProvider{} |
| 1019 | entries := make([]modelEntry, 0, len(accountModels)) |
| 1020 | primaryModel := "" |
| 1021 | defaultsModels := make(map[string]map[string]interface{}, len(accountModels)) |
| 1022 | for _, item := range accountModels { |
| 1023 | resolvedPrimary, entry, key, baseCfg, err := buildOpenclawAccountModelConfig(account, item) |
| 1024 | if err != nil { |
| 1025 | return "", nil, nil, err |
| 1026 | } |
| 1027 | if providerKey == "" { |
| 1028 | providerKey = key |
| 1029 | providerCfg.ApiKey = baseCfg.ApiKey |
| 1030 | providerCfg.BaseUrl = baseCfg.BaseUrl |
| 1031 | providerCfg.Api = baseCfg.Api |
| 1032 | providerCfg.AuthHeader = baseCfg.AuthHeader |
| 1033 | } |
| 1034 | entries = append(entries, entry) |
| 1035 | defaultsModels[resolvedPrimary] = map[string]interface{}{} |
| 1036 | if sameProviderModelID(account.Provider, item.ID, selectedModel) { |
| 1037 | primaryModel = resolvedPrimary |
| 1038 | } |
| 1039 | } |
| 1040 | if primaryModel == "" { |
| 1041 | return "", nil, nil, buserr.New("ErrAgentModelNotInAccount") |
| 1042 | } |
| 1043 | if !requiresOpenclawProviderModels(account.Provider) { |
| 1044 | return primaryModel, defaultsModels, nil, nil |
| 1045 | } |
| 1046 | providerCfg.Models = entries |
| 1047 | return primaryModel, defaultsModels, &modelsConfig{ |
| 1048 | Mode: "merge", |
| 1049 | Providers: map[string]modelProvider{ |
| 1050 | providerKey: providerCfg, |
| 1051 | }, |
| 1052 | }, nil |
| 1053 | } |
| 1054 | |
| 1055 | func buildOpenclawAccountModelConfig(account *model.AgentAccount, model dto.AgentAccountModel) (string, modelEntry, string, modelProvider, error) { |
| 1056 | providerPatch, err := providercatalog.BuildOpenClawProviderPatch(account.Provider, model.ID, account.APIType, account.BaseURL, account.APIKey) |
no test coverage detected