diff --git a/src/main/java/com/modzy/sdk/JobClient.java b/src/main/java/com/modzy/sdk/JobClient.java index c477386..d7241f9 100644 --- a/src/main/java/com/modzy/sdk/JobClient.java +++ b/src/main/java/com/modzy/sdk/JobClient.java @@ -205,10 +205,11 @@ private Job closeJob(Job job) throws ApiException{ * @param model The model instance in which the model will run * @param modelVersion The specific version of the model * @param jobInput The inputs of the model to pass to Modzy + * @param explain If the model supports explainability, flag this job to return an explanation of the predictions * @return the updated instance of the Job returned by Modzy API * @throws ApiException if there is something wrong with the service or the call */ - public Job submitJob(Model model, ModelVersion modelVersion, JobInput<?> jobInput) throws ApiException{ + public Job submitJob(Model model, ModelVersion modelVersion, JobInput<?> jobInput, Boolean explain) throws ApiException{ return this.submitJob( new Job(model, modelVersion, jobInput) ); } @@ -219,15 +220,16 @@ public Job submitJob(Model model, ModelVersion modelVersion, JobInput<?> jobInpu * @param modelId identifier of the model * @param modelVersionId identifier of the model version * @param jobInput the inputs of the model to pass to Modzy + * @param explain If the model supports explainability, flag this job to return an explanation of the predictions * @return the updated instance of the Job returned by Modzy API * @throws ApiException if there is something wrong with the service or the call */ - public Job submitJob(String modelId, String modelVersionId, JobInput<?> jobInput) throws ApiException{ + public Job submitJob(String modelId, String modelVersionId, JobInput<?> jobInput, Boolean explain) throws ApiException{ Model model = new Model(); model.setIdentifier(modelId); ModelVersion modelVersion = new ModelVersion(); modelVersion.setVersion(modelVersionId); - return this.submitJob( new Job(model, modelVersion, jobInput) ); + return this.submitJob( new Job(model, modelVersion, jobInput, explain) ); } /** diff --git a/src/main/java/com/modzy/sdk/ModzyClient.java b/src/main/java/com/modzy/sdk/ModzyClient.java index 3385c54..e192f76 100644 --- a/src/main/java/com/modzy/sdk/ModzyClient.java +++ b/src/main/java/com/modzy/sdk/ModzyClient.java @@ -1,5 +1,6 @@ package com.modzy.sdk; +import java.io.InputStream; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -19,6 +20,7 @@ import com.modzy.sdk.model.JobInputEmbedded; import com.modzy.sdk.model.JobInputJDBC; import com.modzy.sdk.model.JobInputS3; +import com.modzy.sdk.model.JobInputStream; import com.modzy.sdk.model.JobInputText; import com.modzy.sdk.model.JobOutput; import com.modzy.sdk.model.JobStatus; @@ -178,10 +180,10 @@ public TagWrapper getTagsAndModels(String ...tagsId) throws ApiException{ } /** - * @see JobClient#submitJob(Model, ModelVersion, JobInput) + * @see JobClient#submitJob(Model, ModelVersion, JobInput, explain) */ - public Job submitJob(Model model, ModelVersion modelVersion, JobInput<?> jobInput) throws ApiException{ - return this.jobClient.submitJob(model, modelVersion, jobInput); + public Job submitJob(Model model, ModelVersion modelVersion, JobInput<?> jobInput, Boolean explain) throws ApiException{ + return this.jobClient.submitJob(model, modelVersion, jobInput, explain); } @@ -202,7 +204,7 @@ public Job submitJobText(String modelId, List<String> textSource) throws ApiExce ModelVersion modelVersion = this.modelClient.getModelVersion(modelId, model.getLatestVersion()); JobInput<String> jobInput = new JobInputText(modelVersion); jobInput.addSource(textSource); - return this.submitJob(model, modelVersion, jobInput); + return this.submitJob(model, modelVersion, jobInput, false); } /** @@ -222,7 +224,7 @@ public Job submitJobText(String modelId, String versionId, List<String> textSour ModelVersion modelVersion = this.modelClient.getModelVersion(modelId, versionId); JobInput<String> jobInput = new JobInputText(modelVersion); jobInput.addSource(textSource); - return this.submitJob(model, modelVersion, jobInput); + return this.submitJob(model, modelVersion, jobInput, false); } /** @@ -241,7 +243,7 @@ public Job submitJobEmbedded(String modelId, List<EmbeddedData> embeddedSource) ModelVersion modelVersion = this.modelClient.getModelVersion(modelId, model.getLatestVersion()); JobInput<EmbeddedData> jobInput = new JobInputEmbedded(modelVersion); jobInput.addSource(embeddedSource); - return this.submitJob(model, modelVersion, jobInput); + return this.submitJob(model, modelVersion, jobInput, false); } /** @@ -261,7 +263,46 @@ public Job submitJobEmbedded(String modelId, String versionId, List<EmbeddedData ModelVersion modelVersion = this.modelClient.getModelVersion(modelId, versionId); JobInput<EmbeddedData> jobInput = new JobInputEmbedded(modelVersion); jobInput.addSource(embeddedSource); - return this.submitJob(model, modelVersion, jobInput); + return this.submitJob(model, modelVersion, jobInput, false); + } + + /** + * + * Create a new job for the model at the last version with the input streams provided, + * this method try to match the streamSource values with the inputs of the specific version + * of the model. + * + * @param modelId the model id string + * @param streamSource the source(s) of the model + * @return the updated instance of the Job returned by Modzy API + * @throws ApiException if there is something wrong with the service or the call + */ + public Job submitJobFile(String modelId, List<InputStream> streamSource) throws ApiException{ + Model model = this.modelClient.getModel(modelId); + ModelVersion modelVersion = this.modelClient.getModelVersion(modelId, model.getLatestVersion()); + JobInput<InputStream> jobInput = new JobInputStream(modelVersion); + jobInput.addSource(streamSource); + return this.submitJob(model, modelVersion, jobInput, false); + } + + /** + * + * Create a new job for the model at the specific version with the input streams provided, + * this method try to match the streamSource values with the inputs of the specific version + * of the model. + * + * @param modelId the model id string + * @param versionId version id string + * @param streamSource the source(s) of the model + * @return the updated instance of the Job returned by Modzy API + * @throws ApiException if there is something wrong with the service or the call + */ + public Job submitJobFile(String modelId, String versionId, List<InputStream> streamSource) throws ApiException{ + Model model = this.modelClient.getModel(modelId); + ModelVersion modelVersion = this.modelClient.getModelVersion(modelId, versionId); + JobInput<InputStream> jobInput = new JobInputStream(modelVersion); + jobInput.addSource(streamSource); + return this.submitJob(model, modelVersion, jobInput, false); } /** @@ -283,7 +324,7 @@ public Job submitJobAWSS3(String modelId, String accessKeyID, String secretAcces ModelVersion modelVersion = this.modelClient.getModelVersion(modelId, model.getLatestVersion()); JobInput<S3FileRef> jobInput = new JobInputS3(modelVersion, accessKeyID, secretAccessKey, region); jobInput.addSource( s3FileRefSource ); - return this.submitJob(model, modelVersion, jobInput); + return this.submitJob(model, modelVersion, jobInput, false); } /** @@ -306,7 +347,7 @@ public Job submitJobAWSS3(String modelId, String versionId, String accessKeyID, ModelVersion modelVersion = this.modelClient.getModelVersion(modelId, versionId); JobInput<S3FileRef> jobInput = new JobInputS3(modelVersion, accessKeyID, secretAccessKey, region); jobInput.addSource( s3FileRefSource ); - return this.submitJob(model, modelVersion, jobInput); + return this.submitJob(model, modelVersion, jobInput, false); } /** @@ -326,11 +367,11 @@ public Job submitJobAWSS3(String modelId, String versionId, String accessKeyID, * @return the updated instance of the Job returned by Modzy API * @throws ApiException if there is something wrong with the service or the call */ - public Job submitJobJDBC(String modelId, String url, String username, String password, String driver, String query ) throws ApiException{ + public Job submitJobJDBC(String modelId, String url, String username, String password, String driver, String query) throws ApiException{ Model model = this.modelClient.getModel(modelId); ModelVersion modelVersion = this.modelClient.getModelVersion(modelId, model.getLatestVersion()); JobInput<String> jobInput = new JobInputJDBC(url, username, password, driver, query); - return this.submitJob(model, modelVersion, jobInput); + return this.submitJob(model, modelVersion, jobInput, false); } /** @@ -355,7 +396,7 @@ public Job submitJobJDBC(String modelId, String versionId, String url, String us Model model = this.modelClient.getModel(modelId); ModelVersion modelVersion = this.modelClient.getModelVersion(modelId, versionId); JobInput<String> jobInput = new JobInputJDBC(url, username, password, driver, query); - return this.submitJob(model, modelVersion, jobInput); + return this.submitJob(model, modelVersion, jobInput, false); } /** @@ -440,7 +481,7 @@ public <T extends JobOutput<?>> T getResult(Job job, Class<T> outputClass) throw * @throws ApiException if there is something wrong with the services or the call */ public JobOutput<JsonNode> submitJobBlockUntilComplete(String modelId, String modelVersionId, JobInput<?> jobInput ) throws ApiException{ - Job job = this.jobClient.submitJob(modelId, modelVersionId, jobInput); + Job job = this.jobClient.submitJob(modelId, modelVersionId, jobInput, false); job = this.blockUntilNotInJobStatus(job, 20000, JobStatus.SUBMITTED); job = this.blockUntilNotInJobStatus(job, 30000, JobStatus.IN_PROGRESS); if( !job.getStatus().equals(JobStatus.COMPLETED) ) { @@ -462,7 +503,7 @@ public JobOutput<JsonNode> submitJobBlockUntilComplete(String modelId, String mo * @throws ApiException if there is something wrong with the services or the call */ public JobOutput<JsonNode> submitJobBlockUntilComplete(Model model, ModelVersion modelVersion, JobInput<?> jobInput ) throws ApiException{ - Job job = this.jobClient.submitJob(model, modelVersion, jobInput); + Job job = this.jobClient.submitJob(model, modelVersion, jobInput, false); this.logger.info("["+job.getJobIdentifier()+"] "+model.getName()+" :: "+modelVersion.getVersion()+" :: waiting "); job = this.blockUntilNotInJobStatus(job, modelVersion.getTimeout().getStatus(), JobStatus.SUBMITTED); job = this.blockUntilNotInJobStatus(job, modelVersion.getTimeout().getRun(), JobStatus.IN_PROGRESS); diff --git a/src/main/java/com/modzy/sdk/model/Job.java b/src/main/java/com/modzy/sdk/model/Job.java index 28cb890..27a25eb 100644 --- a/src/main/java/com/modzy/sdk/model/Job.java +++ b/src/main/java/com/modzy/sdk/model/Job.java @@ -22,6 +22,8 @@ public class Job { @ToString.Include private Model model; + private Boolean explain; + @ToString.Include private JobStatus status; @@ -63,5 +65,10 @@ public Job(Model model, ModelVersion modelVersion, JobInput<?> input) { this(model, modelVersion); this.input = input; } + + public Job(Model model, ModelVersion modelVersion, JobInput<?> input, Boolean explain) { + this(model, modelVersion, input); + this.explain = explain; + } } diff --git a/src/main/java/com/modzy/sdk/samples/JobAwsInputSample.java b/src/main/java/com/modzy/sdk/samples/JobAwsInputSample.java index d10b525..b618fd8 100644 --- a/src/main/java/com/modzy/sdk/samples/JobAwsInputSample.java +++ b/src/main/java/com/modzy/sdk/samples/JobAwsInputSample.java @@ -109,7 +109,7 @@ public static void main(String[] args) throws ApiException { jobInput.addSource("wrong-value", mapSource); // When you have all your inputs ready, you can use our helper method to submit the job as follows: - Job job = modzyClient.submitJob(model, modelVersion, jobInput); + Job job = modzyClient.submitJob(model, modelVersion, jobInput, false); // Modzy creates the job and queue for processing. The job object contains all the info that you need to keep track // of the process, the most important being the job_identifier and the job status. System.out.println(String.format("job: %s", job)); diff --git a/src/main/java/com/modzy/sdk/samples/JobEmbeddedInputSample.java b/src/main/java/com/modzy/sdk/samples/JobEmbeddedInputSample.java index 49677b0..8d1927d 100644 --- a/src/main/java/com/modzy/sdk/samples/JobEmbeddedInputSample.java +++ b/src/main/java/com/modzy/sdk/samples/JobEmbeddedInputSample.java @@ -113,7 +113,7 @@ public static void main(String[] args) throws ApiException, IOException { jobInput.addSource("wrong-values", mapSource); // When you have all your inputs ready, you can use our helper method to submit the job as follows: - Job job = modzyClient.submitJob(model, modelVersion, jobInput); + Job job = modzyClient.submitJob(model, modelVersion, jobInput, false); // Modzy creates the job and queue for processing. The job object contains all the info that you need to keep track // of the process, the most important being the job_identifier and the job status. System.out.println(String.format("job: %s", job)); diff --git a/src/main/java/com/modzy/sdk/samples/JobFileInputSample.java b/src/main/java/com/modzy/sdk/samples/JobFileInputSample.java index df719b8..4efb950 100644 --- a/src/main/java/com/modzy/sdk/samples/JobFileInputSample.java +++ b/src/main/java/com/modzy/sdk/samples/JobFileInputSample.java @@ -123,7 +123,7 @@ public static void main(String[] args) throws ApiException, IOException { jobInput.addSource("wrong-values", mapSource); // When you have all your inputs ready, you can use our helper method to submit the job as follows: - Job job = modzyClient.submitJob(model, modelVersion, jobInput); + Job job = modzyClient.submitJob(model, modelVersion, jobInput, false); // Modzy creates the job and queue for processing. The job object contains all the info that you need to keep track // of the process, the most important being the job_identifier and the job status. System.out.println(String.format("job: %s", job)); diff --git a/src/main/java/com/modzy/sdk/samples/JobTextInputSample.java b/src/main/java/com/modzy/sdk/samples/JobTextInputSample.java index 072308b..6bacf5a 100644 --- a/src/main/java/com/modzy/sdk/samples/JobTextInputSample.java +++ b/src/main/java/com/modzy/sdk/samples/JobTextInputSample.java @@ -90,7 +90,7 @@ public static void main(String[] args) throws ApiException { mapSource.put("a.wrong.key", "This input is wrong!"); jobInput.addSource("wrong-key", mapSource); // When you have all your inputs ready, you can use our helper method to submit the job as follows: - Job job = modzyClient.submitJob(model, modelVersion, jobInput); + Job job = modzyClient.submitJob(model, modelVersion, jobInput, false); // Modzy creates the job and queue for processing. The job object contains all the info that you need to keep track // of the process, the most important being the job_identifier and the job status. System.out.println(String.format("job: %s", job)); diff --git a/src/test/java/com/modzy/sdk/TestJobClient.java b/src/test/java/com/modzy/sdk/TestJobClient.java index cfa1424..92a3048 100644 --- a/src/test/java/com/modzy/sdk/TestJobClient.java +++ b/src/test/java/com/modzy/sdk/TestJobClient.java @@ -81,7 +81,7 @@ public void testSubmitJob(){ jobInput.addSource(sourceMap); Job job = null; try { - job = this.jobClient.submitJob(model, modelVersion, jobInput); + job = this.jobClient.submitJob(model, modelVersion, jobInput, false); this.logger.info( job.toString() ); } catch (ApiException e) { fail(e.getMessage()); @@ -118,7 +118,7 @@ public void testGetJob() { jobInput.addSource(sourceMap); Job job = null; try { - job = this.jobClient.submitJob(model, modelVersion, jobInput); + job = this.jobClient.submitJob(model, modelVersion, jobInput, false); this.logger.info( job.toString() ); } catch (ApiException e) { fail(e.getMessage()); @@ -171,7 +171,7 @@ public void testCancelJob() { jobInput.addSource(sourceMap); Job job = null; try { - job = this.jobClient.submitJob(model, modelVersion, jobInput); + job = this.jobClient.submitJob(model, modelVersion, jobInput, false); this.logger.info( job.toString() ); } catch (ApiException e) { fail(e.getMessage()); diff --git a/src/test/java/com/modzy/sdk/TestResultClient.java b/src/test/java/com/modzy/sdk/TestResultClient.java index dcb745d..3d29b0e 100644 --- a/src/test/java/com/modzy/sdk/TestResultClient.java +++ b/src/test/java/com/modzy/sdk/TestResultClient.java @@ -74,7 +74,7 @@ public void testGetResult(){ jobInput.addSource(sourceMap); Job job = null; try { - job = this.jobClient.submitJob(model, modelVersion, jobInput); + job = this.jobClient.submitJob(model, modelVersion, jobInput, false); this.logger.info( job.toString() ); } catch (ApiException e) { fail(e.getMessage());