in src/main/java/org/opensearch/knn/plugin/rest/RestTrainModelHandler.java [80:145]
private TrainingModelRequest createTransportRequest(RestRequest restRequest) throws IOException {
// Parse query params
String modelId = restRequest.param(MODEL_ID);
String preferredNodeId = restRequest.param(PREFERENCE_PARAMETER);
// Parse request body
XContentParser parser = restRequest.contentParser();
ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.nextToken(), parser);
KNNMethodContext knnMethodContext = (KNNMethodContext) DEFAULT_NOT_SET_OBJECT_VALUE;
String trainingIndex = (String) DEFAULT_NOT_SET_OBJECT_VALUE;
String trainingField = (String) DEFAULT_NOT_SET_OBJECT_VALUE;
String description = (String) DEFAULT_NOT_SET_OBJECT_VALUE;
int dimension = DEFAULT_NOT_SET_INT_VALUE;
int maximumVectorCount = DEFAULT_NOT_SET_INT_VALUE;
int searchSize = DEFAULT_NOT_SET_INT_VALUE;
while (parser.nextToken() != XContentParser.Token.END_OBJECT) {
String fieldName = parser.currentName();
parser.nextToken();
if (TRAIN_INDEX_PARAMETER.equals(fieldName) && ensureNotSet(fieldName, trainingIndex)) {
trainingIndex = parser.textOrNull();
} else if (TRAIN_FIELD_PARAMETER.equals(fieldName) && ensureNotSet(fieldName, trainingField)) {
trainingField = parser.textOrNull();
} else if (KNN_METHOD.equals(fieldName) && ensureNotSet(fieldName, knnMethodContext)) {
knnMethodContext = KNNMethodContext.parse(parser.map());
} else if (DIMENSION.equals(fieldName) && ensureNotSet(fieldName, dimension)) {
dimension = (Integer) NumberFieldMapper.NumberType.INTEGER.parse(parser.objectBytes(), false);
} else if (MAX_VECTOR_COUNT_PARAMETER.equals(fieldName) && ensureNotSet(fieldName, maximumVectorCount)) {
maximumVectorCount = (Integer) NumberFieldMapper.NumberType.INTEGER.parse(parser.objectBytes(), false);
} else if (SEARCH_SIZE_PARAMETER.equals(fieldName) && ensureNotSet(fieldName, searchSize)) {
searchSize = (Integer) NumberFieldMapper.NumberType.INTEGER.parse(parser.objectBytes(), false);
} else if (MODEL_DESCRIPTION.equals(fieldName) && ensureNotSet(fieldName, description)) {
description = parser.textOrNull();
} else {
throw new IllegalArgumentException("Unable to parse token. \"" + fieldName + "\" is not a valid " +
"parameter.");
}
}
// Check that these parameters get set
ensureSet(KNN_METHOD, knnMethodContext);
ensureSet(DIMENSION, dimension);
ensureSet(TRAIN_INDEX_PARAMETER, trainingIndex);
ensureSet(TRAIN_FIELD_PARAMETER, trainingField);
// Convert null description to empty string.
if (description == DEFAULT_NOT_SET_OBJECT_VALUE) {
description = "";
}
TrainingModelRequest trainingModelRequest = new TrainingModelRequest(modelId, knnMethodContext, dimension,
trainingIndex, trainingField, preferredNodeId, description);
if (maximumVectorCount != DEFAULT_NOT_SET_INT_VALUE) {
trainingModelRequest.setMaximumVectorCount(maximumVectorCount);
}
if (searchSize != DEFAULT_NOT_SET_INT_VALUE) {
trainingModelRequest.setSearchSize(searchSize);
}
return trainingModelRequest;
}