{"record":{"id":"49e9b1a94a5af220","repo":"spring-projects/spring-ai","slug":"unknown-model-provider","errorCode":null,"errorMessage":"Unknown model provider: ","messagePattern":"Unknown model provider: ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"models/spring-ai-openai/src/main/java/org/springframework/ai/openai/setup/OpenAiSetup.java","lineNumber":334,"sourceCode":"\t\t\t}\n\t\t\tif (baseUrl.startsWith(GITHUB_MODELS_URL)) {\n\t\t\t\t// To support GitHub Models for specific orgs\n\t\t\t\treturn baseUrl;\n\t\t\t}\n\t\t\treturn GITHUB_MODELS_URL;\n\t\t}\n\t\telse if (modelProvider == ModelProvider.MICROSOFT_FOUNDRY) {\n\t\t\tif (baseUrl == null || baseUrl.isBlank()) {\n\t\t\t\tthrow new IllegalArgumentException(\"Base URL must be provided for Microsoft Foundry.\");\n\t\t\t}\n\t\t\tString tmpUrl = baseUrl;\n\t\t\tif (baseUrl.endsWith(\"/\") || baseUrl.endsWith(\"?\")) {\n\t\t\t\ttmpUrl = baseUrl.substring(0, baseUrl.length() - 1);\n\t\t\t}\n\t\t\treturn tmpUrl;\n\t\t}\n\t\telse {\n\t\t\tthrow new IllegalArgumentException(\"Unknown model provider: \" + modelProvider);\n\t\t}\n\t}\n\n\tstatic Credential azureAuthentication() {\n\t\ttry {\n\t\t\treturn AzureInternalOpenAiHelper.getAzureCredential();\n\t\t}\n\t\tcatch (NoClassDefFoundError e) {\n\t\t\tthrow new IllegalArgumentException(\"Microsoft Foundry was detected, but no credential was provided. \"\n\t\t\t\t\t+ \"If you want to use passwordless authentication, you need to add the Azure Identity library (groupId=`com.azure`, artifactId=`azure-identity`) to your classpath.\");\n\t\t}\n\t}\n\n\tstatic @Nullable String detectApiKey(ModelProvider modelProvider) {\n\t\tif (modelProvider == ModelProvider.OPEN_AI && System.getenv(OPENAI_API_KEY) != null) {\n\t\t\treturn System.getenv(OPENAI_API_KEY);\n\t\t}\n\t\telse if (modelProvider == ModelProvider.MICROSOFT_FOUNDRY && System.getenv(MICROSOFT_FOUNDRY_API_KEY) != null) {","sourceCodeStart":316,"sourceCodeEnd":352,"githubUrl":"https://github.com/spring-projects/spring-ai/blob/98a7beda4f29d80a71c5837eb4053b03a93a46f7/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/setup/OpenAiSetup.java#L316-L352","documentation":"calculateBaseUrl switches over the configured ModelProvider; if the value is not one of the handled providers (OpenAI, GitHub Models, Microsoft Foundry), it throws IllegalArgumentException(\"Unknown model provider: \" + modelProvider). This guards against an unrecognized or future/unknown enum value reaching the URL resolution logic.","triggerScenarios":"Passing a ModelProvider value not handled by calculateBaseUrl (e.g. a newly added enum constant used with an older library version, or a custom/null value) into OpenAiSetup.calculatedBaseUrl.","commonSituations":"Version mismatch where configuration supplies a provider enum value the library build does not know; programmatic construction of OpenAiApi with a wrong or partially initialized ModelProvider; binding a raw string config value into an unexpected enum state.","solutions":["Check which ModelProvider value is being configured and use one supported by your spring-ai-openai version (OPEN_AI, GITHUB_MODELS, MICROSOFT_FOUNDRY).","Upgrade spring-ai-openai if you intend to use a newer provider constant that your current version does not recognize.","Log or inspect the resolved ModelProvider at startup to catch bad property binding early."],"exampleFix":"// before\nOpenAiApi.builder().modelProvider(myProvider).build(); // myProvider = unknown value\n// after\nOpenAiApi.builder()\n    .modelProvider(ModelProvider.OPEN_AI) // or GITHUB_MODELS / MICROSOFT_FOUNDRY\n    .build();","handlingStrategy":"validation","validationCode":"EnumSet<ModelProvider> supported = EnumSet.of(ModelProvider.OPEN_AI, ModelProvider.GITHUB_MODELS, ModelProvider.MICROSOFT_FOUNDRY);\nif (!supported.contains(modelProvider)) {\n    throw new IllegalArgumentException(\"Unsupported provider: \" + modelProvider);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only use ModelProvider constants exported by your exact spring-ai-openai version.","Keep library version and documented provider values in sync.","Log the resolved provider at startup for early detection."],"tags":["configuration","enum","invalid-argument"],"backgroundTag":"invalid-enum-value","analyzedSha":"98a7beda4f29d80a71c5837eb4053b03a93a46f7","analyzedAt":"2026-09-11T14:15:49.441Z","contentChangedAt":"2026-09-11T14:15:49.441Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}