mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-06-28 17:34:17 -04:00
[ML][HLRC] adds put and delete trained model alias APIs to rest high-level client (#69214)
adds put (and reassign) and delete trained model alias APIs to the rest high-level client. This adds some serialization objects and request wrappers.
This commit is contained in:
parent
b13f77c35e
commit
2ee6dc37b6
10 changed files with 557 additions and 0 deletions
|
@ -28,6 +28,7 @@ import org.elasticsearch.client.ml.DeleteFilterRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteForecastRequest;
|
import org.elasticsearch.client.ml.DeleteForecastRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteJobRequest;
|
import org.elasticsearch.client.ml.DeleteJobRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteModelSnapshotRequest;
|
import org.elasticsearch.client.ml.DeleteModelSnapshotRequest;
|
||||||
|
import org.elasticsearch.client.ml.DeleteTrainedModelAliasRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteTrainedModelRequest;
|
import org.elasticsearch.client.ml.DeleteTrainedModelRequest;
|
||||||
import org.elasticsearch.client.ml.EstimateModelMemoryRequest;
|
import org.elasticsearch.client.ml.EstimateModelMemoryRequest;
|
||||||
import org.elasticsearch.client.ml.EvaluateDataFrameRequest;
|
import org.elasticsearch.client.ml.EvaluateDataFrameRequest;
|
||||||
|
@ -62,6 +63,7 @@ import org.elasticsearch.client.ml.PutDataFrameAnalyticsRequest;
|
||||||
import org.elasticsearch.client.ml.PutDatafeedRequest;
|
import org.elasticsearch.client.ml.PutDatafeedRequest;
|
||||||
import org.elasticsearch.client.ml.PutFilterRequest;
|
import org.elasticsearch.client.ml.PutFilterRequest;
|
||||||
import org.elasticsearch.client.ml.PutJobRequest;
|
import org.elasticsearch.client.ml.PutJobRequest;
|
||||||
|
import org.elasticsearch.client.ml.PutTrainedModelAliasRequest;
|
||||||
import org.elasticsearch.client.ml.PutTrainedModelRequest;
|
import org.elasticsearch.client.ml.PutTrainedModelRequest;
|
||||||
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
|
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
|
||||||
import org.elasticsearch.client.ml.SetUpgradeModeRequest;
|
import org.elasticsearch.client.ml.SetUpgradeModeRequest;
|
||||||
|
@ -857,6 +859,32 @@ final class MLRequestConverters {
|
||||||
return request;
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Request putTrainedModelAlias(PutTrainedModelAliasRequest putTrainedModelAliasRequest) throws IOException {
|
||||||
|
String endpoint = new EndpointBuilder()
|
||||||
|
.addPathPartAsIs("_ml", "trained_models")
|
||||||
|
.addPathPart(putTrainedModelAliasRequest.getModelId())
|
||||||
|
.addPathPartAsIs("model_aliases")
|
||||||
|
.addPathPart(putTrainedModelAliasRequest.getModelAlias())
|
||||||
|
.build();
|
||||||
|
Request request = new Request(HttpPut.METHOD_NAME, endpoint);
|
||||||
|
RequestConverters.Params params = new RequestConverters.Params();
|
||||||
|
if (putTrainedModelAliasRequest.getReassign() != null) {
|
||||||
|
params.putParam(PutTrainedModelAliasRequest.REASSIGN, Boolean.toString(putTrainedModelAliasRequest.getReassign()));
|
||||||
|
}
|
||||||
|
request.addParameters(params.asMap());
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Request deleteTrainedModelAlias(DeleteTrainedModelAliasRequest deleteTrainedModelAliasRequest) throws IOException {
|
||||||
|
String endpoint = new EndpointBuilder()
|
||||||
|
.addPathPartAsIs("_ml", "trained_models")
|
||||||
|
.addPathPart(deleteTrainedModelAliasRequest.getModelId())
|
||||||
|
.addPathPartAsIs("model_aliases")
|
||||||
|
.addPathPart(deleteTrainedModelAliasRequest.getModelAlias())
|
||||||
|
.build();
|
||||||
|
return new Request(HttpDelete.METHOD_NAME, endpoint);
|
||||||
|
}
|
||||||
|
|
||||||
static Request putFilter(PutFilterRequest putFilterRequest) throws IOException {
|
static Request putFilter(PutFilterRequest putFilterRequest) throws IOException {
|
||||||
String endpoint = new EndpointBuilder()
|
String endpoint = new EndpointBuilder()
|
||||||
.addPathPartAsIs("_ml")
|
.addPathPartAsIs("_ml")
|
||||||
|
|
|
@ -11,6 +11,7 @@ import org.elasticsearch.action.ActionListener;
|
||||||
import org.elasticsearch.action.support.master.AcknowledgedResponse;
|
import org.elasticsearch.action.support.master.AcknowledgedResponse;
|
||||||
import org.elasticsearch.client.ml.CloseJobRequest;
|
import org.elasticsearch.client.ml.CloseJobRequest;
|
||||||
import org.elasticsearch.client.ml.CloseJobResponse;
|
import org.elasticsearch.client.ml.CloseJobResponse;
|
||||||
|
import org.elasticsearch.client.ml.DeleteTrainedModelAliasRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteTrainedModelRequest;
|
import org.elasticsearch.client.ml.DeleteTrainedModelRequest;
|
||||||
import org.elasticsearch.client.ml.EstimateModelMemoryRequest;
|
import org.elasticsearch.client.ml.EstimateModelMemoryRequest;
|
||||||
import org.elasticsearch.client.ml.EstimateModelMemoryResponse;
|
import org.elasticsearch.client.ml.EstimateModelMemoryResponse;
|
||||||
|
@ -89,6 +90,7 @@ import org.elasticsearch.client.ml.PutFilterRequest;
|
||||||
import org.elasticsearch.client.ml.PutFilterResponse;
|
import org.elasticsearch.client.ml.PutFilterResponse;
|
||||||
import org.elasticsearch.client.ml.PutJobRequest;
|
import org.elasticsearch.client.ml.PutJobRequest;
|
||||||
import org.elasticsearch.client.ml.PutJobResponse;
|
import org.elasticsearch.client.ml.PutJobResponse;
|
||||||
|
import org.elasticsearch.client.ml.PutTrainedModelAliasRequest;
|
||||||
import org.elasticsearch.client.ml.PutTrainedModelRequest;
|
import org.elasticsearch.client.ml.PutTrainedModelRequest;
|
||||||
import org.elasticsearch.client.ml.PutTrainedModelResponse;
|
import org.elasticsearch.client.ml.PutTrainedModelResponse;
|
||||||
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
|
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
|
||||||
|
@ -2552,4 +2554,90 @@ public final class MachineLearningClient {
|
||||||
listener,
|
listener,
|
||||||
Collections.emptySet());
|
Collections.emptySet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates or reassigns a trained model alias
|
||||||
|
* <p>
|
||||||
|
* For additional info
|
||||||
|
* see <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/put-trained-models-aliases.html">
|
||||||
|
* Put Trained Model Aliases documentation</a>
|
||||||
|
*
|
||||||
|
* @param request The {@link PutTrainedModelAliasRequest}
|
||||||
|
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
|
||||||
|
* @return action acknowledgement
|
||||||
|
* @throws IOException when there is a serialization issue sending the request or receiving the response
|
||||||
|
*/
|
||||||
|
public AcknowledgedResponse putTrainedModelAlias(PutTrainedModelAliasRequest request, RequestOptions options) throws IOException {
|
||||||
|
return restHighLevelClient.performRequestAndParseEntity(request,
|
||||||
|
MLRequestConverters::putTrainedModelAlias,
|
||||||
|
options,
|
||||||
|
AcknowledgedResponse::fromXContent,
|
||||||
|
Collections.emptySet());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates or reassigns a trained model alias asynchronously and notifies listener upon completion
|
||||||
|
* <p>
|
||||||
|
* For additional info
|
||||||
|
* see <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/put-trained-models-aliases.html">
|
||||||
|
* Put Trained Model Aliases documentation</a>
|
||||||
|
*
|
||||||
|
* @param request The {@link PutTrainedModelAliasRequest}
|
||||||
|
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
|
||||||
|
* @param listener Listener to be notified upon request completion
|
||||||
|
* @return cancellable that may be used to cancel the request
|
||||||
|
*/
|
||||||
|
public Cancellable putTrainedModelAliasAsync(PutTrainedModelAliasRequest request,
|
||||||
|
RequestOptions options,
|
||||||
|
ActionListener<AcknowledgedResponse> listener) {
|
||||||
|
return restHighLevelClient.performRequestAsyncAndParseEntity(request,
|
||||||
|
MLRequestConverters::putTrainedModelAlias,
|
||||||
|
options,
|
||||||
|
AcknowledgedResponse::fromXContent,
|
||||||
|
listener,
|
||||||
|
Collections.emptySet());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes a trained model alias
|
||||||
|
* <p>
|
||||||
|
* For additional info
|
||||||
|
* see <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/delete-trained-models-aliases.html">
|
||||||
|
* Delete Trained Model Aliases documentation</a>
|
||||||
|
*
|
||||||
|
* @param request The {@link DeleteTrainedModelAliasRequest}
|
||||||
|
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
|
||||||
|
* @return action acknowledgement
|
||||||
|
* @throws IOException when there is a serialization issue sending the request or receiving the response
|
||||||
|
*/
|
||||||
|
public AcknowledgedResponse deleteTrainedModelAlias(DeleteTrainedModelAliasRequest request, RequestOptions options) throws IOException {
|
||||||
|
return restHighLevelClient.performRequestAndParseEntity(request,
|
||||||
|
MLRequestConverters::deleteTrainedModelAlias,
|
||||||
|
options,
|
||||||
|
AcknowledgedResponse::fromXContent,
|
||||||
|
Collections.emptySet());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes a trained model alias asynchronously and notifies listener upon completion
|
||||||
|
* <p>
|
||||||
|
* For additional info
|
||||||
|
* see <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/delete-trained-models-aliases.html">
|
||||||
|
* Delete Trained Model Aliases documentation</a>
|
||||||
|
*
|
||||||
|
* @param request The {@link DeleteTrainedModelAliasRequest}
|
||||||
|
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
|
||||||
|
* @param listener Listener to be notified upon request completion
|
||||||
|
* @return cancellable that may be used to cancel the request
|
||||||
|
*/
|
||||||
|
public Cancellable deleteTrainedModelAliasAsync(DeleteTrainedModelAliasRequest request,
|
||||||
|
RequestOptions options,
|
||||||
|
ActionListener<AcknowledgedResponse> listener) {
|
||||||
|
return restHighLevelClient.performRequestAsyncAndParseEntity(request,
|
||||||
|
MLRequestConverters::deleteTrainedModelAlias,
|
||||||
|
options,
|
||||||
|
AcknowledgedResponse::fromXContent,
|
||||||
|
listener,
|
||||||
|
Collections.emptySet());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||||
|
* or more contributor license agreements. Licensed under the Elastic License
|
||||||
|
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||||
|
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||||
|
* Side Public License, v 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.elasticsearch.client.ml;
|
||||||
|
|
||||||
|
import org.elasticsearch.client.Validatable;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class DeleteTrainedModelAliasRequest implements Validatable {
|
||||||
|
|
||||||
|
private final String modelAlias;
|
||||||
|
private final String modelId;
|
||||||
|
|
||||||
|
public DeleteTrainedModelAliasRequest(String modelAlias, String modelId) {
|
||||||
|
this.modelAlias = Objects.requireNonNull(modelAlias);
|
||||||
|
this.modelId = Objects.requireNonNull(modelId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getModelAlias() {
|
||||||
|
return modelAlias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getModelId() {
|
||||||
|
return modelId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
DeleteTrainedModelAliasRequest request = (DeleteTrainedModelAliasRequest) o;
|
||||||
|
return Objects.equals(modelAlias, request.modelAlias)
|
||||||
|
&& Objects.equals(modelId, request.modelId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(modelAlias, modelId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||||
|
* or more contributor license agreements. Licensed under the Elastic License
|
||||||
|
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||||
|
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||||
|
* Side Public License, v 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.elasticsearch.client.ml;
|
||||||
|
|
||||||
|
import org.elasticsearch.client.Validatable;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class PutTrainedModelAliasRequest implements Validatable {
|
||||||
|
|
||||||
|
public static final String REASSIGN = "reassign";
|
||||||
|
|
||||||
|
private final String modelAlias;
|
||||||
|
private final String modelId;
|
||||||
|
private final Boolean reassign;
|
||||||
|
|
||||||
|
public PutTrainedModelAliasRequest(String modelAlias, String modelId, Boolean reassign) {
|
||||||
|
this.modelAlias = Objects.requireNonNull(modelAlias);
|
||||||
|
this.modelId = Objects.requireNonNull(modelId);
|
||||||
|
this.reassign = reassign;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getModelAlias() {
|
||||||
|
return modelAlias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getModelId() {
|
||||||
|
return modelId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getReassign() {
|
||||||
|
return reassign;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
PutTrainedModelAliasRequest request = (PutTrainedModelAliasRequest) o;
|
||||||
|
return Objects.equals(modelAlias, request.modelAlias)
|
||||||
|
&& Objects.equals(modelId, request.modelId)
|
||||||
|
&& Objects.equals(reassign, request.reassign);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(modelAlias, modelId, reassign);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -24,6 +24,7 @@ import org.elasticsearch.client.ml.DeleteFilterRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteForecastRequest;
|
import org.elasticsearch.client.ml.DeleteForecastRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteJobRequest;
|
import org.elasticsearch.client.ml.DeleteJobRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteModelSnapshotRequest;
|
import org.elasticsearch.client.ml.DeleteModelSnapshotRequest;
|
||||||
|
import org.elasticsearch.client.ml.DeleteTrainedModelAliasRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteTrainedModelRequest;
|
import org.elasticsearch.client.ml.DeleteTrainedModelRequest;
|
||||||
import org.elasticsearch.client.ml.EstimateModelMemoryRequest;
|
import org.elasticsearch.client.ml.EstimateModelMemoryRequest;
|
||||||
import org.elasticsearch.client.ml.EvaluateDataFrameRequest;
|
import org.elasticsearch.client.ml.EvaluateDataFrameRequest;
|
||||||
|
@ -59,6 +60,7 @@ import org.elasticsearch.client.ml.PutDataFrameAnalyticsRequest;
|
||||||
import org.elasticsearch.client.ml.PutDatafeedRequest;
|
import org.elasticsearch.client.ml.PutDatafeedRequest;
|
||||||
import org.elasticsearch.client.ml.PutFilterRequest;
|
import org.elasticsearch.client.ml.PutFilterRequest;
|
||||||
import org.elasticsearch.client.ml.PutJobRequest;
|
import org.elasticsearch.client.ml.PutJobRequest;
|
||||||
|
import org.elasticsearch.client.ml.PutTrainedModelAliasRequest;
|
||||||
import org.elasticsearch.client.ml.PutTrainedModelRequest;
|
import org.elasticsearch.client.ml.PutTrainedModelRequest;
|
||||||
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
|
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
|
||||||
import org.elasticsearch.client.ml.SetUpgradeModeRequest;
|
import org.elasticsearch.client.ml.SetUpgradeModeRequest;
|
||||||
|
@ -119,7 +121,9 @@ import static org.elasticsearch.client.ml.dataframe.DataFrameAnalyticsConfigUpda
|
||||||
import static org.hamcrest.Matchers.allOf;
|
import static org.hamcrest.Matchers.allOf;
|
||||||
import static org.hamcrest.Matchers.equalTo;
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
import static org.hamcrest.Matchers.hasEntry;
|
import static org.hamcrest.Matchers.hasEntry;
|
||||||
|
import static org.hamcrest.Matchers.hasKey;
|
||||||
import static org.hamcrest.Matchers.is;
|
import static org.hamcrest.Matchers.is;
|
||||||
|
import static org.hamcrest.Matchers.not;
|
||||||
import static org.hamcrest.core.IsNull.nullValue;
|
import static org.hamcrest.core.IsNull.nullValue;
|
||||||
|
|
||||||
public class MLRequestConvertersTests extends ESTestCase {
|
public class MLRequestConvertersTests extends ESTestCase {
|
||||||
|
@ -965,6 +969,52 @@ public class MLRequestConvertersTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testPutTrainedModelAlias() throws IOException {
|
||||||
|
PutTrainedModelAliasRequest putTrainedModelAliasRequest = new PutTrainedModelAliasRequest(
|
||||||
|
randomAlphaOfLength(10),
|
||||||
|
randomAlphaOfLength(10),
|
||||||
|
randomBoolean() ? null : randomBoolean()
|
||||||
|
);
|
||||||
|
|
||||||
|
Request request = MLRequestConverters.putTrainedModelAlias(putTrainedModelAliasRequest);
|
||||||
|
|
||||||
|
assertEquals(HttpPut.METHOD_NAME, request.getMethod());
|
||||||
|
assertThat(
|
||||||
|
request.getEndpoint(),
|
||||||
|
equalTo(
|
||||||
|
"/_ml/trained_models/"
|
||||||
|
+ putTrainedModelAliasRequest.getModelId()
|
||||||
|
+ "/model_aliases/"
|
||||||
|
+ putTrainedModelAliasRequest.getModelAlias()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
if (putTrainedModelAliasRequest.getReassign() != null) {
|
||||||
|
assertThat(request.getParameters().get("reassign"), equalTo(putTrainedModelAliasRequest.getReassign().toString()));
|
||||||
|
} else {
|
||||||
|
assertThat(request.getParameters(), not(hasKey("reassign")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testDeleteTrainedModelAlias() throws IOException {
|
||||||
|
DeleteTrainedModelAliasRequest deleteTrainedModelAliasRequest = new DeleteTrainedModelAliasRequest(
|
||||||
|
randomAlphaOfLength(10),
|
||||||
|
randomAlphaOfLength(10)
|
||||||
|
);
|
||||||
|
|
||||||
|
Request request = MLRequestConverters.deleteTrainedModelAlias(deleteTrainedModelAliasRequest);
|
||||||
|
|
||||||
|
assertEquals(HttpDelete.METHOD_NAME, request.getMethod());
|
||||||
|
assertThat(
|
||||||
|
request.getEndpoint(),
|
||||||
|
equalTo(
|
||||||
|
"/_ml/trained_models/"
|
||||||
|
+ deleteTrainedModelAliasRequest.getModelId()
|
||||||
|
+ "/model_aliases/"
|
||||||
|
+ deleteTrainedModelAliasRequest.getModelAlias()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public void testPutFilter() throws IOException {
|
public void testPutFilter() throws IOException {
|
||||||
MlFilter filter = MlFilterTests.createRandomBuilder("foo").build();
|
MlFilter filter = MlFilterTests.createRandomBuilder("foo").build();
|
||||||
PutFilterRequest putFilterRequest = new PutFilterRequest(filter);
|
PutFilterRequest putFilterRequest = new PutFilterRequest(filter);
|
||||||
|
|
|
@ -36,6 +36,7 @@ import org.elasticsearch.client.ml.DeleteForecastRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteJobRequest;
|
import org.elasticsearch.client.ml.DeleteJobRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteJobResponse;
|
import org.elasticsearch.client.ml.DeleteJobResponse;
|
||||||
import org.elasticsearch.client.ml.DeleteModelSnapshotRequest;
|
import org.elasticsearch.client.ml.DeleteModelSnapshotRequest;
|
||||||
|
import org.elasticsearch.client.ml.DeleteTrainedModelAliasRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteTrainedModelRequest;
|
import org.elasticsearch.client.ml.DeleteTrainedModelRequest;
|
||||||
import org.elasticsearch.client.ml.EstimateModelMemoryRequest;
|
import org.elasticsearch.client.ml.EstimateModelMemoryRequest;
|
||||||
import org.elasticsearch.client.ml.EstimateModelMemoryResponse;
|
import org.elasticsearch.client.ml.EstimateModelMemoryResponse;
|
||||||
|
@ -92,6 +93,7 @@ import org.elasticsearch.client.ml.PutFilterRequest;
|
||||||
import org.elasticsearch.client.ml.PutFilterResponse;
|
import org.elasticsearch.client.ml.PutFilterResponse;
|
||||||
import org.elasticsearch.client.ml.PutJobRequest;
|
import org.elasticsearch.client.ml.PutJobRequest;
|
||||||
import org.elasticsearch.client.ml.PutJobResponse;
|
import org.elasticsearch.client.ml.PutJobResponse;
|
||||||
|
import org.elasticsearch.client.ml.PutTrainedModelAliasRequest;
|
||||||
import org.elasticsearch.client.ml.PutTrainedModelRequest;
|
import org.elasticsearch.client.ml.PutTrainedModelRequest;
|
||||||
import org.elasticsearch.client.ml.PutTrainedModelResponse;
|
import org.elasticsearch.client.ml.PutTrainedModelResponse;
|
||||||
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
|
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
|
||||||
|
@ -2389,6 +2391,83 @@ public class MachineLearningIT extends ESRestHighLevelClientTestCase {
|
||||||
assertThat(getTrainedModelsResponse.getTrainedModels().get(0).getModelId(), equalTo(modelIdCompressed));
|
assertThat(getTrainedModelsResponse.getTrainedModels().get(0).getModelId(), equalTo(modelIdCompressed));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testPutTrainedModelAlias() throws Exception {
|
||||||
|
MachineLearningClient machineLearningClient = highLevelClient().machineLearning();
|
||||||
|
String modelId = "model-with-an-alias";
|
||||||
|
putTrainedModel(modelId);
|
||||||
|
String modelId2 = "another-model-with-an-alias";
|
||||||
|
putTrainedModel(modelId2);
|
||||||
|
|
||||||
|
AcknowledgedResponse acknowledgedResponse = execute(
|
||||||
|
new PutTrainedModelAliasRequest("my-first-alias", modelId, null),
|
||||||
|
machineLearningClient::putTrainedModelAlias,
|
||||||
|
machineLearningClient::putTrainedModelAliasAsync
|
||||||
|
);
|
||||||
|
assertThat(acknowledgedResponse.isAcknowledged(), is(true));
|
||||||
|
|
||||||
|
GetTrainedModelsResponse getTrainedModelsResponse = execute(
|
||||||
|
new GetTrainedModelsRequest("my-first-alias"),
|
||||||
|
machineLearningClient::getTrainedModels,
|
||||||
|
machineLearningClient::getTrainedModelsAsync);
|
||||||
|
|
||||||
|
assertThat(getTrainedModelsResponse.getCount(), equalTo(1L));
|
||||||
|
assertThat(getTrainedModelsResponse.getTrainedModels(), hasSize(1));
|
||||||
|
assertThat(getTrainedModelsResponse.getTrainedModels().get(0).getModelId(), equalTo(modelId));
|
||||||
|
|
||||||
|
acknowledgedResponse = execute(
|
||||||
|
new PutTrainedModelAliasRequest("my-first-alias", modelId2, true),
|
||||||
|
machineLearningClient::putTrainedModelAlias,
|
||||||
|
machineLearningClient::putTrainedModelAliasAsync
|
||||||
|
);
|
||||||
|
assertThat(acknowledgedResponse.isAcknowledged(), is(true));
|
||||||
|
|
||||||
|
getTrainedModelsResponse = execute(
|
||||||
|
new GetTrainedModelsRequest("my-first-alias"),
|
||||||
|
machineLearningClient::getTrainedModels,
|
||||||
|
machineLearningClient::getTrainedModelsAsync
|
||||||
|
);
|
||||||
|
|
||||||
|
assertThat(getTrainedModelsResponse.getCount(), equalTo(1L));
|
||||||
|
assertThat(getTrainedModelsResponse.getTrainedModels(), hasSize(1));
|
||||||
|
assertThat(getTrainedModelsResponse.getTrainedModels().get(0).getModelId(), equalTo(modelId2));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testDeleteTrainedModelAlias() throws Exception {
|
||||||
|
MachineLearningClient machineLearningClient = highLevelClient().machineLearning();
|
||||||
|
String modelId = "model-with-an-deleted-alias";
|
||||||
|
putTrainedModel(modelId);
|
||||||
|
|
||||||
|
AcknowledgedResponse acknowledgedResponse = execute(
|
||||||
|
new PutTrainedModelAliasRequest("my-first-deleted-alias", modelId, null),
|
||||||
|
machineLearningClient::putTrainedModelAlias,
|
||||||
|
machineLearningClient::putTrainedModelAliasAsync
|
||||||
|
);
|
||||||
|
assertThat(acknowledgedResponse.isAcknowledged(), is(true));
|
||||||
|
|
||||||
|
GetTrainedModelsResponse getTrainedModelsResponse = execute(
|
||||||
|
new GetTrainedModelsRequest("my-first-deleted-alias"),
|
||||||
|
machineLearningClient::getTrainedModels,
|
||||||
|
machineLearningClient::getTrainedModelsAsync);
|
||||||
|
|
||||||
|
assertThat(getTrainedModelsResponse.getCount(), equalTo(1L));
|
||||||
|
assertThat(getTrainedModelsResponse.getTrainedModels(), hasSize(1));
|
||||||
|
assertThat(getTrainedModelsResponse.getTrainedModels().get(0).getModelId(), equalTo(modelId));
|
||||||
|
|
||||||
|
acknowledgedResponse = execute(
|
||||||
|
new DeleteTrainedModelAliasRequest("my-first-deleted-alias", modelId),
|
||||||
|
machineLearningClient::deleteTrainedModelAlias,
|
||||||
|
machineLearningClient::deleteTrainedModelAliasAsync
|
||||||
|
);
|
||||||
|
assertThat(acknowledgedResponse.isAcknowledged(), is(true));
|
||||||
|
ElasticsearchStatusException exception = expectThrows(ElasticsearchStatusException.class,
|
||||||
|
() -> execute(
|
||||||
|
new GetTrainedModelsRequest("my-first-deleted-alias"),
|
||||||
|
machineLearningClient::getTrainedModels,
|
||||||
|
machineLearningClient::getTrainedModelsAsync
|
||||||
|
));
|
||||||
|
assertThat(exception.status().getStatus(), equalTo(404));
|
||||||
|
}
|
||||||
|
|
||||||
public void testGetTrainedModelsStats() throws Exception {
|
public void testGetTrainedModelsStats() throws Exception {
|
||||||
MachineLearningClient machineLearningClient = highLevelClient().machineLearning();
|
MachineLearningClient machineLearningClient = highLevelClient().machineLearning();
|
||||||
String modelIdPrefix = "a-get-trained-model-stats-";
|
String modelIdPrefix = "a-get-trained-model-stats-";
|
||||||
|
|
|
@ -38,6 +38,7 @@ import org.elasticsearch.client.ml.DeleteForecastRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteJobRequest;
|
import org.elasticsearch.client.ml.DeleteJobRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteJobResponse;
|
import org.elasticsearch.client.ml.DeleteJobResponse;
|
||||||
import org.elasticsearch.client.ml.DeleteModelSnapshotRequest;
|
import org.elasticsearch.client.ml.DeleteModelSnapshotRequest;
|
||||||
|
import org.elasticsearch.client.ml.DeleteTrainedModelAliasRequest;
|
||||||
import org.elasticsearch.client.ml.DeleteTrainedModelRequest;
|
import org.elasticsearch.client.ml.DeleteTrainedModelRequest;
|
||||||
import org.elasticsearch.client.ml.EstimateModelMemoryRequest;
|
import org.elasticsearch.client.ml.EstimateModelMemoryRequest;
|
||||||
import org.elasticsearch.client.ml.EstimateModelMemoryResponse;
|
import org.elasticsearch.client.ml.EstimateModelMemoryResponse;
|
||||||
|
@ -104,6 +105,7 @@ import org.elasticsearch.client.ml.PutFilterRequest;
|
||||||
import org.elasticsearch.client.ml.PutFilterResponse;
|
import org.elasticsearch.client.ml.PutFilterResponse;
|
||||||
import org.elasticsearch.client.ml.PutJobRequest;
|
import org.elasticsearch.client.ml.PutJobRequest;
|
||||||
import org.elasticsearch.client.ml.PutJobResponse;
|
import org.elasticsearch.client.ml.PutJobResponse;
|
||||||
|
import org.elasticsearch.client.ml.PutTrainedModelAliasRequest;
|
||||||
import org.elasticsearch.client.ml.PutTrainedModelRequest;
|
import org.elasticsearch.client.ml.PutTrainedModelRequest;
|
||||||
import org.elasticsearch.client.ml.PutTrainedModelResponse;
|
import org.elasticsearch.client.ml.PutTrainedModelResponse;
|
||||||
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
|
import org.elasticsearch.client.ml.RevertModelSnapshotRequest;
|
||||||
|
@ -3891,6 +3893,129 @@ public class MlClientDocumentationIT extends ESRestHighLevelClientTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testPutTrainedModelAlias() throws Exception {
|
||||||
|
putTrainedModel("my-trained-model-with-alias");
|
||||||
|
RestHighLevelClient client = highLevelClient();
|
||||||
|
{
|
||||||
|
// tag::put-trained-model-alias-request
|
||||||
|
PutTrainedModelAliasRequest request = new PutTrainedModelAliasRequest(
|
||||||
|
"my-alias", // <1>
|
||||||
|
"my-trained-model-with-alias", // <2>
|
||||||
|
false // <3>
|
||||||
|
);
|
||||||
|
// end::put-trained-model-alias-request
|
||||||
|
|
||||||
|
// tag::put-trained-model-alias-execute
|
||||||
|
AcknowledgedResponse response =
|
||||||
|
client.machineLearning().putTrainedModelAlias(request, RequestOptions.DEFAULT);
|
||||||
|
// end::put-trained-model-alias-execute
|
||||||
|
|
||||||
|
// tag::put-trained-model-alias-response
|
||||||
|
boolean acknowledged = response.isAcknowledged();
|
||||||
|
// end::put-trained-model-alias-response
|
||||||
|
|
||||||
|
assertThat(acknowledged, is(true));
|
||||||
|
}
|
||||||
|
{
|
||||||
|
PutTrainedModelAliasRequest request = new PutTrainedModelAliasRequest(
|
||||||
|
"my-second-alias",
|
||||||
|
"my-trained-model-with-alias",
|
||||||
|
false
|
||||||
|
);
|
||||||
|
// tag::put-trained-model-alias-execute-listener
|
||||||
|
ActionListener<AcknowledgedResponse> listener = new ActionListener<>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(AcknowledgedResponse response) {
|
||||||
|
// <1>
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Exception e) {
|
||||||
|
// <2>
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// end::put-trained-model-alias-execute-listener
|
||||||
|
|
||||||
|
// Replace the empty listener by a blocking listener in test
|
||||||
|
CountDownLatch latch = new CountDownLatch(1);
|
||||||
|
listener = new LatchedActionListener<>(listener, latch);
|
||||||
|
|
||||||
|
// tag::put-trained-model-alias-execute-async
|
||||||
|
client.machineLearning()
|
||||||
|
.putTrainedModelAliasAsync(request, RequestOptions.DEFAULT, listener); // <1>
|
||||||
|
// end::put-trained-model-alias-execute-async
|
||||||
|
|
||||||
|
assertTrue(latch.await(30L, TimeUnit.SECONDS));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testDeleteTrainedModelAlias() throws Exception {
|
||||||
|
putTrainedModel("my-trained-model-with-delete-alias");
|
||||||
|
RestHighLevelClient client = highLevelClient();
|
||||||
|
{
|
||||||
|
client.machineLearning()
|
||||||
|
.putTrainedModelAlias(
|
||||||
|
new PutTrainedModelAliasRequest("my-alias-to-delete", "my-trained-model-with-delete-alias", false),
|
||||||
|
RequestOptions.DEFAULT
|
||||||
|
);
|
||||||
|
|
||||||
|
// tag::delete-trained-model-alias-request
|
||||||
|
DeleteTrainedModelAliasRequest request = new DeleteTrainedModelAliasRequest(
|
||||||
|
"my-alias-to-delete", // <1>
|
||||||
|
"my-trained-model-with-delete-alias" // <2>
|
||||||
|
);
|
||||||
|
// end::delete-trained-model-alias-request
|
||||||
|
|
||||||
|
// tag::delete-trained-model-alias-execute
|
||||||
|
AcknowledgedResponse response =
|
||||||
|
client.machineLearning().deleteTrainedModelAlias(request, RequestOptions.DEFAULT);
|
||||||
|
// end::delete-trained-model-alias-execute
|
||||||
|
|
||||||
|
// tag::delete-trained-model-alias-response
|
||||||
|
boolean acknowledged = response.isAcknowledged();
|
||||||
|
// end::delete-trained-model-alias-response
|
||||||
|
|
||||||
|
assertThat(acknowledged, is(true));
|
||||||
|
}
|
||||||
|
{
|
||||||
|
client.machineLearning()
|
||||||
|
.putTrainedModelAlias(
|
||||||
|
new PutTrainedModelAliasRequest("my-alias-to-delete", "my-trained-model-with-delete-alias", false),
|
||||||
|
RequestOptions.DEFAULT
|
||||||
|
);
|
||||||
|
|
||||||
|
DeleteTrainedModelAliasRequest request = new DeleteTrainedModelAliasRequest(
|
||||||
|
"my-alias-to-delete",
|
||||||
|
"my-trained-model-with-delete-alias"
|
||||||
|
);
|
||||||
|
// tag::delete-trained-model-alias-execute-listener
|
||||||
|
ActionListener<AcknowledgedResponse> listener = new ActionListener<>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(AcknowledgedResponse response) {
|
||||||
|
// <1>
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Exception e) {
|
||||||
|
// <2>
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// end::delete-trained-model-alias-execute-listener
|
||||||
|
|
||||||
|
// Replace the empty listener by a blocking listener in test
|
||||||
|
CountDownLatch latch = new CountDownLatch(1);
|
||||||
|
listener = new LatchedActionListener<>(listener, latch);
|
||||||
|
|
||||||
|
// tag::delete-trained-model-alias-execute-async
|
||||||
|
client.machineLearning()
|
||||||
|
.deleteTrainedModelAliasAsync(request, RequestOptions.DEFAULT, listener); // <1>
|
||||||
|
// end::delete-trained-model-alias-execute-async
|
||||||
|
|
||||||
|
assertTrue(latch.await(30L, TimeUnit.SECONDS));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void testGetTrainedModelsStats() throws Exception {
|
public void testGetTrainedModelsStats() throws Exception {
|
||||||
putTrainedModel("my-trained-model");
|
putTrainedModel("my-trained-model");
|
||||||
RestHighLevelClient client = highLevelClient();
|
RestHighLevelClient client = highLevelClient();
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
--
|
||||||
|
:api: delete-trained-model-alias
|
||||||
|
:request: DeleteTrainedModelAliasRequest
|
||||||
|
:response: AcknowledgedResponse
|
||||||
|
--
|
||||||
|
[role="xpack"]
|
||||||
|
[id="{upid}-{api}"]
|
||||||
|
=== Delete trained model alias API
|
||||||
|
|
||||||
|
beta::[]
|
||||||
|
|
||||||
|
Deletes a trained model alias.
|
||||||
|
The API accepts a +{request}+ object as a request and returns a +{response}+.
|
||||||
|
If the model alias is not assigned to the provided model id, or if the model
|
||||||
|
alias does not exist, this API will result in an error.
|
||||||
|
|
||||||
|
[id="{upid}-{api}-request"]
|
||||||
|
==== Delete trained model alias request
|
||||||
|
|
||||||
|
A +{request}+ requires the following arguments:
|
||||||
|
|
||||||
|
["source","java",subs="attributes,callouts,macros"]
|
||||||
|
--------------------------------------------------
|
||||||
|
include-tagged::{doc-tests-file}[{api}-request]
|
||||||
|
--------------------------------------------------
|
||||||
|
<1> The trained model alias to delete
|
||||||
|
<2> The trained model id to which model alias is assigned
|
||||||
|
|
||||||
|
include::../execution.asciidoc[]
|
||||||
|
|
||||||
|
[id="{upid}-{api}-response"]
|
||||||
|
==== Response
|
||||||
|
|
||||||
|
The returned +{response}+
|
||||||
|
|
||||||
|
["source","java",subs="attributes,callouts,macros"]
|
||||||
|
--------------------------------------------------
|
||||||
|
include-tagged::{doc-tests-file}[{api}-response]
|
||||||
|
--------------------------------------------------
|
|
@ -0,0 +1,41 @@
|
||||||
|
--
|
||||||
|
:api: put-trained-model-alias
|
||||||
|
:request: PutTrainedModelAliasRequest
|
||||||
|
:response: AcknowledgedResponse
|
||||||
|
--
|
||||||
|
[role="xpack"]
|
||||||
|
[id="{upid}-{api}"]
|
||||||
|
=== Put trained model alias API
|
||||||
|
|
||||||
|
beta::[]
|
||||||
|
|
||||||
|
Creates or reassigns a trained model alias.
|
||||||
|
The API accepts a +{request}+ object as a request and returns a +{response}+.
|
||||||
|
The created trained model alias can then be used for other APIs in the stack
|
||||||
|
instead of the referenced model id.
|
||||||
|
|
||||||
|
[id="{upid}-{api}-request"]
|
||||||
|
==== Put trained model alias request
|
||||||
|
|
||||||
|
A +{request}+ requires the following arguments:
|
||||||
|
|
||||||
|
["source","java",subs="attributes,callouts,macros"]
|
||||||
|
--------------------------------------------------
|
||||||
|
include-tagged::{doc-tests-file}[{api}-request]
|
||||||
|
--------------------------------------------------
|
||||||
|
<1> The trained model alias to create or reassign
|
||||||
|
<2> The trained model id to which to assign the alias
|
||||||
|
<3> (Optional) whether or not to reassign the model alias if it
|
||||||
|
is already pointing to a model. Defaults to false.
|
||||||
|
|
||||||
|
include::../execution.asciidoc[]
|
||||||
|
|
||||||
|
[id="{upid}-{api}-response"]
|
||||||
|
==== Response
|
||||||
|
|
||||||
|
The returned +{response}+
|
||||||
|
|
||||||
|
["source","java",subs="attributes,callouts,macros"]
|
||||||
|
--------------------------------------------------
|
||||||
|
include-tagged::{doc-tests-file}[{api}-response]
|
||||||
|
--------------------------------------------------
|
|
@ -298,6 +298,7 @@ The Java High Level REST Client supports the following {ml} APIs:
|
||||||
* <<{upid}-delete-forecast>>
|
* <<{upid}-delete-forecast>>
|
||||||
* <<{upid}-delete-model-snapshot>>
|
* <<{upid}-delete-model-snapshot>>
|
||||||
* <<{upid}-delete-trained-models>>
|
* <<{upid}-delete-trained-models>>
|
||||||
|
* <<{upid}-delete-trained-model-alias>>
|
||||||
* <<{upid}-estimate-model-memory>>
|
* <<{upid}-estimate-model-memory>>
|
||||||
* <<{upid}-evaluate-data-frame>>
|
* <<{upid}-evaluate-data-frame>>
|
||||||
* <<{upid}-explain-data-frame-analytics>>
|
* <<{upid}-explain-data-frame-analytics>>
|
||||||
|
@ -332,6 +333,7 @@ The Java High Level REST Client supports the following {ml} APIs:
|
||||||
* <<{upid}-put-datafeed>>
|
* <<{upid}-put-datafeed>>
|
||||||
* <<{upid}-put-filter>>
|
* <<{upid}-put-filter>>
|
||||||
* <<{upid}-put-trained-model>>
|
* <<{upid}-put-trained-model>>
|
||||||
|
* <<{upid}-put-trained-model-alias>>
|
||||||
* <<{upid}-revert-model-snapshot>>
|
* <<{upid}-revert-model-snapshot>>
|
||||||
* <<{upid}-set-upgrade-mode>>
|
* <<{upid}-set-upgrade-mode>>
|
||||||
* <<{upid}-start-data-frame-analytics>>
|
* <<{upid}-start-data-frame-analytics>>
|
||||||
|
@ -359,6 +361,7 @@ include::ml/delete-filter.asciidoc[]
|
||||||
include::ml/delete-forecast.asciidoc[]
|
include::ml/delete-forecast.asciidoc[]
|
||||||
include::ml/delete-model-snapshot.asciidoc[]
|
include::ml/delete-model-snapshot.asciidoc[]
|
||||||
include::ml/delete-trained-models.asciidoc[]
|
include::ml/delete-trained-models.asciidoc[]
|
||||||
|
include::ml/delete-trained-model-alias.asciidoc[]
|
||||||
// ESTIMATE
|
// ESTIMATE
|
||||||
include::ml/estimate-model-memory.asciidoc[]
|
include::ml/estimate-model-memory.asciidoc[]
|
||||||
// EVALUATE
|
// EVALUATE
|
||||||
|
@ -403,6 +406,7 @@ include::ml/put-data-frame-analytics.asciidoc[]
|
||||||
include::ml/put-datafeed.asciidoc[]
|
include::ml/put-datafeed.asciidoc[]
|
||||||
include::ml/put-filter.asciidoc[]
|
include::ml/put-filter.asciidoc[]
|
||||||
include::ml/put-trained-model.asciidoc[]
|
include::ml/put-trained-model.asciidoc[]
|
||||||
|
include::ml/put-trained-model-alias.asciidoc[]
|
||||||
// REVERT
|
// REVERT
|
||||||
include::ml/revert-model-snapshot.asciidoc[]
|
include::ml/revert-model-snapshot.asciidoc[]
|
||||||
// SET
|
// SET
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue