alibaba/spring-ai-alibaba · warning

Provider不存在

Error message

Provider不存在: {}

What it means

convertToModelConfigDO fetches the provider's detail (including credentials) via providerManager.getProviderDetail; when the provider is unknown it logs this warning and returns null instead of a ModelConfigDO. It means the model entity references a provider that is not registered in the provider manager.

Solutions

  1. Register the provider (add its configuration/credential) so providerManager.getProviderDetail returns non-null
  2. Correct the ModelEntity.provider value to match an existing registered provider name
  3. Check provider configuration loading (Nacos/config source) at startup — the provider list may not have been refreshed
  4. Handle the null return from these bridge methods rather than assuming non-null

Example fix

// before
ProviderConfigInfo detail = providerManager.getProviderDetail(entity.getProvider(), false);
use(detail.getCredential());
// after
ProviderConfigInfo detail = providerManager.getProviderDetail(entity.getProvider(), false);
if (detail == null) { throw new IllegalStateException("Provider not registered: " + entity.getProvider()); }
Defensive patterns

Strategy: validation

Validate before calling

ProviderConfigInfo d = providerManager.getProviderDetail(provider, false); if (d == null) { registerProvider(provider); }

Try / catch

ModelConfigDO c = bridge.findById(id); if (c == null) { throw new IllegalStateException("Provider missing: " + provider); }

Prevention

When it happens

Trigger: findById or findByProviderAndModelId resolves a ModelEntity whose getProvider() value has no matching provider detail in providerManager (called with includeCredential=false).

Common situations: Provider was renamed or deleted after models were created under it; typo in provider name; provider plugin/config not loaded (e.g. Nacos config missing for that provider); using a custom provider never registered.

Understand the failure class

Background: "missing required config value" errors: why libraries refuse to start when a configuration key is empty, unset, or blank — this error's family across 48 libraries.

Related errors


AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09). Data as JSON: /api/errors/cb5ddcdff8de7e6c. Report an issue: GitHub.

Appendix: source

Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/ModelConfigBridgeServiceImpl.java:217

        } catch (Exception e) {
            log.error("根据provider和modelId查找模型配置失败: provider={}, modelId={}", provider, modelId, e);
            return null;
        }
    }

    /**
     * 将ModelEntity转换为ModelConfigDO
     */
    private ModelConfigDO convertToModelConfigDO(ModelEntity modelEntity) {
        if (modelEntity == null) {
            return null;
        }

        try {
            // 获取Provider的credential(包含apiKey和endpoint)
            ProviderConfigInfo providerDetail = providerManager.getProviderDetail(modelEntity.getProvider(), false);
            if (providerDetail == null) {
                log.warn("Provider不存在: {}", modelEntity.getProvider());
                return null;
            }

            ModelCredential credential = providerDetail.getCredential();
            if (credential == null) {
                log.warn("Provider的credential不存在: {}", modelEntity.getProvider());
                return null;
            }

            // 解密apiKey
            String apiKey = credential.getApiKey();
            if (StringUtils.isNotBlank(apiKey)) {
                try {
                    apiKey = RSACryptUtils.decrypt(apiKey);
                } catch (Exception e) {
                    log.warn("解密apiKey失败,使用原始值: {}", e.getMessage());
                }
            }

View on GitHub (pinned to f82da0b50f)