MLModel.java
package com.kapil.verbametrics.ml.domain;
import java.time.LocalDateTime;
import java.util.Map;
/**
* Domain record representing a machine learning model with metadata and configuration.
*
* @author Kapil Garg
*/
public record MLModel(
String modelId,
String modelType,
String name,
String description,
String version,
LocalDateTime createdAt,
LocalDateTime lastUsed,
Map<String, Object> parameters,
Map<String, Object> performanceMetrics,
String modelPath,
boolean isActive,
String createdBy,
int trainingDataSize,
double accuracy,
String status
) {
public MLModel {
BaseMLResult.validateModelId(modelId);
BaseMLResult.validateModelType(modelType);
BaseMLResult.validateStringField(name, "Model name");
BaseMLResult.validateStringField(version, "Model version");
BaseMLResult.validateScore(accuracy, "Accuracy");
BaseMLResult.validateStringField(status, "Model status");
}
/**
* Checks if the model is trained and ready for use.
*
* @return true if the model is trained and active
*/
public boolean isReadyForUse() {
return isActive && "TRAINED".equals(status);
}
/**
* Gets the model performance level based on accuracy.
*
* @return the performance level
*/
public String getPerformanceLevel() {
return new BaseMLResult() {
}.getPerformanceLevel(accuracy);
}
@Override
public String toString() {
return """
MLModel{
modelId='%s', modelType='%s', name='%s',
version='%s', accuracy=%.3f, status='%s',
isActive=%s, performanceLevel='%s'
}""".formatted(
modelId, modelType, name, version, accuracy, status,
isActive, getPerformanceLevel()
);
}
}