private TrainingModelRequest createTransportRequest()

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;
    }