spring-projects/spring-ai · warning

No moderation response returned for request: + mistralAiMode

Error message

No moderation response returned for request: + mistralAiModerationRequest

What it means

Warning logged by MistralAiModerationModel.convertResponse() when the moderation endpoint's ResponseEntity body is null. The model returns a ModerationResponse wrapping null results instead of throwing, so callers receive a moderation result with no flags/scores — dangerous if the application treats this as 'content is safe'.

Source

Thrown at models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/moderation/MistralAiModerationModel.java:89

	public ModerationResponse call(ModerationPrompt moderationPrompt) {
		return RetryUtils.execute(this.retryTemplate, () -> {
			var instructions = moderationPrompt.getInstructions().getText();
			var model = ModelOptionsUtils.mergeOption(moderationPrompt.getOptions().getModel(),
					this.options.getModel());
			var moderationRequest = new MistralAiModerationRequest(instructions, model);
			var moderationResponseEntity = this.mistralAiModerationApi.moderate(moderationRequest);

			return convertResponse(moderationResponseEntity, moderationRequest);
		});
	}

	private ModerationResponse convertResponse(ResponseEntity<MistralAiModerationResponse> moderationResponseEntity,
			MistralAiModerationRequest mistralAiModerationRequest) {
		var moderationApiResponse = moderationResponseEntity.getBody();

		if (moderationApiResponse == null) {
			if (logger.isWarnEnabled()) {
				logger.warn("No moderation response returned for request: " + mistralAiModerationRequest);
			}
			return new ModerationResponse(null);
		}

		var moderationResults = Stream.of(moderationApiResponse.results())
			.map(MistralAiModerationModel::convertModerationResult)
			.toList();

		var moderation = Moderation.builder()
			.id(moderationApiResponse.id())
			.model(moderationApiResponse.model())
			.results(moderationResults)
			.build();

		return new ModerationResponse(new Generation(moderation));
	}

	private static ModerationResult convertModerationResult(MistralAiModerationResult mistralAiModerationResult) {

View on GitHub (pinned to 98a7beda4f)

Solutions

  1. Verify your Mistral account/plan actually exposes the moderation endpoint and the model is available.
  2. Check API key validity and inspect the raw HTTP response with an interceptor.
  3. Treat ModerationResponse with null results as an indeterminate outcome, not as 'safe', in your content pipeline.
  4. Confirm spring-ai-mistral-ai version compatibility with the current Mistral moderation API.

Example fix

// before
ModerationResponse mr = moderationModel.call(new MistralAiModerationRequest(text));
boolean safe = mr.getResults().isEmpty(); // wrong: null-body means indeterminate
// after
boolean safe = mr.getResults() != null && !mr.getResults().isEmpty()
        && mr.getResults().get(0).isFlagged() == false;
Defensive patterns

Strategy: type-guard

Type guard

static boolean isIndeterminate(ModerationResponse r) {
    return r == null || r.getResults() == null || r.getResults().isEmpty();
}

Try / catch

ModerationResponse mr = moderationModel.call(req);
if (isIndeterminate(mr)) {
    throw new IllegalStateException("Moderation unavailable — do NOT treat as safe");
}

Prevention

When it happens

Trigger: convertResponse() receives moderationResponseEntity with getBody() == null — empty body from the Mistral moderation API after the request executed.

Common situations: Mistral moderation endpoint unavailable on the account/plan; API key or quota problems; incorrect baseUrl (moderation API not supported by the target endpoint); Mistral API changes breaking response shape.

Related errors


AI-assisted analysis of spring-projects/spring-ai@98a7beda4f (2026-09-11). Data as JSON: /api/errors/ab13da37eef17ebc. Report an issue: GitHub.