-
Notifications
You must be signed in to change notification settings - Fork 2k
Description
Description
When configuring the OpenAI Moderation model in application.yml, the property:
spring:
ai:
openai:
moderation:
options:
model: omni-moderation
is silently ignored — the model always defaults to text-moderation-latest.
Root cause
In OpenAiModerationProperties, the options field is initialized via a builder call that immediately constructs an immutable OpenAiModerationOptions instance:
@NestedConfigurationProperty
private final OpenAiModerationOptions options = OpenAiModerationOptions.builder().build();
Because:
the field is final,
the instance is pre-built, and
there is no setter,
Spring Boot’s @ConfigurationProperties binder cannot modify or replace this object.
Thus, the YAML values under spring.ai.openai.moderation.options.* are never applied.
Expected behavior
The YAML configuration should override the model, e.g.:
spring:
ai:
openai:
moderation:
options:
model: omni-moderation
should cause OpenAiModerationOptions.getModel() to return "omni-moderation".
Proposed fix
In OpenAiModerationProperties, replace the current initialization with a mutable, bindable instance:
@NestedConfigurationProperty
private final OpenAiModerationOptions options = new OpenAiModerationOptions();
or, ideally, make it non-final and add a setter:
@NestedConfigurationProperty
private OpenAiModerationOptions options = new OpenAiModerationOptions();
public void setOptions(OpenAiModerationOptions options) {
this.options = options;
}
This allows Spring Boot’s configuration binder to correctly populate nested properties.