AiStatusResponse.java
package com.taxonomy.dto;
import java.util.List;
/**
* Response payload for {@code GET /api/ai-status}.
*
* <p>The {@code level} field is the primary indicator of AI capability:
* <ul>
* <li>{@link AiAvailabilityLevel#FULL} – cloud LLM with API key active</li>
* <li>{@link AiAvailabilityLevel#LIMITED} – only local ONNX embedding available</li>
* <li>{@link AiAvailabilityLevel#UNAVAILABLE} – no AI capabilities</li>
* </ul>
*
* <p>The {@code available} boolean is kept for backward compatibility
* ({@code true} for FULL and LIMITED, {@code false} for UNAVAILABLE).
* The {@code limited} boolean is a convenience flag for the LIMITED state.
*/
public class AiStatusResponse {
private final AiAvailabilityLevel level;
private final boolean available;
private final boolean limited;
private final String provider;
private final List<String> availableProviders;
public AiStatusResponse(AiAvailabilityLevel level, String provider, List<String> availableProviders) {
this.level = level;
this.available = level != AiAvailabilityLevel.UNAVAILABLE;
this.limited = level == AiAvailabilityLevel.LIMITED;
this.provider = provider;
this.availableProviders = availableProviders;
}
public AiAvailabilityLevel getLevel() {
return level;
}
public boolean isAvailable() {
return available;
}
public boolean isLimited() {
return limited;
}
public String getProvider() {
return provider;
}
public List<String> getAvailableProviders() {
return availableProviders;
}
}