From 92301303561c2be62ea4877f7d278f089c92af29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ianar=C3=A9=20S=C3=A9vi?= Date: Tue, 24 Feb 2026 12:21:48 +0100 Subject: [PATCH 1/2] :sparkles: add job information to inference --- .../java/com/mindee/parsing/v2/Inference.java | 8 +++++ .../com/mindee/parsing/v2/InferenceJob.java | 32 +++++++++++++++++++ src/main/java/com/mindee/parsing/v2/Job.java | 11 +++++-- .../com/mindee/parsing/v2/InferenceTest.java | 3 ++ .../java/com/mindee/parsing/v2/JobTest.java | 27 ++++++++++++++-- src/test/resources | 2 +- 6 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/mindee/parsing/v2/InferenceJob.java diff --git a/src/main/java/com/mindee/parsing/v2/Inference.java b/src/main/java/com/mindee/parsing/v2/Inference.java index 763515faf..63aee3890 100644 --- a/src/main/java/com/mindee/parsing/v2/Inference.java +++ b/src/main/java/com/mindee/parsing/v2/Inference.java @@ -23,6 +23,12 @@ public class Inference { @JsonProperty("id") private String id; + /** + * Job the inference belongs to. + */ + @JsonProperty("job") + private InferenceJob job; + /** * Model info. */ @@ -53,6 +59,8 @@ public String toString() { joiner .add("Inference") .add("#########") + .add(job.toString()) + .add("") .add(model.toString()) .add("") .add(file.toString()) diff --git a/src/main/java/com/mindee/parsing/v2/InferenceJob.java b/src/main/java/com/mindee/parsing/v2/InferenceJob.java new file mode 100644 index 000000000..e5a60db44 --- /dev/null +++ b/src/main/java/com/mindee/parsing/v2/InferenceJob.java @@ -0,0 +1,32 @@ +package com.mindee.parsing.v2; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.StringJoiner; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; + +/** + * Information on the Job associated to a given Inference. + */ +@Getter +@EqualsAndHashCode +@JsonIgnoreProperties(ignoreUnknown = true) +@AllArgsConstructor +@NoArgsConstructor +public class InferenceJob { + /** + * UUID of the Job. + */ + @JsonProperty("id") + private String id; + + public String toString() { + + StringJoiner joiner = new StringJoiner("\n"); + joiner.add("Job").add("===").add(":ID: " + id); + return joiner.toString(); + } +} diff --git a/src/main/java/com/mindee/parsing/v2/Job.java b/src/main/java/com/mindee/parsing/v2/Job.java index db8ee360e..1080f5b6c 100644 --- a/src/main/java/com/mindee/parsing/v2/Job.java +++ b/src/main/java/com/mindee/parsing/v2/Job.java @@ -12,7 +12,7 @@ import lombok.NoArgsConstructor; /** - * Defines an enqueued Job. + * Information on the processing of a file sent to the Mindee API. */ @Getter @@ -22,12 +22,19 @@ @NoArgsConstructor public final class Job { /** - * Date and time the job was created at. + * Date and time of the Job creation. */ @JsonProperty("created_at") @JsonDeserialize(using = LocalDateTimeDeserializer.class) private LocalDateTime createdAt; + /** + * Date and time of the Job completion. Filled once processing is finished. + */ + @JsonProperty("completed_at") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + private LocalDateTime completedAt; + /** * ID of the job. */ diff --git a/src/test/java/com/mindee/parsing/v2/InferenceTest.java b/src/test/java/com/mindee/parsing/v2/InferenceTest.java index 580143327..7a877591a 100644 --- a/src/test/java/com/mindee/parsing/v2/InferenceTest.java +++ b/src/test/java/com/mindee/parsing/v2/InferenceTest.java @@ -107,6 +107,9 @@ void asyncPredict_whenComplete_mustExposeAllProperties() throws IOException { assertNotNull(inference); assertEquals("12345678-1234-1234-1234-123456789abc", inference.getId()); + InferenceJob job = inference.getJob(); + assertEquals("12345678-1234-1234-1234-jobid1234567", job.getId()); + InferenceModel model = inference.getModel(); assertNotNull(model, "Model must not be null"); assertEquals("12345678-1234-1234-1234-123456789abc", model.getId()); diff --git a/src/test/java/com/mindee/parsing/v2/JobTest.java b/src/test/java/com/mindee/parsing/v2/JobTest.java index cbfb915ff..7d905a752 100644 --- a/src/test/java/com/mindee/parsing/v2/JobTest.java +++ b/src/test/java/com/mindee/parsing/v2/JobTest.java @@ -19,8 +19,8 @@ private JobResponse loadJob(String filePath) throws IOException { } @Nested - @DisplayName("When the Job is OK") - class OkTest { + @DisplayName("When the Job is processing") + class ProcessingTest { @Test @DisplayName("properties must be valid") void whenProcessing_mustHaveValidProperties() throws IOException { @@ -28,6 +28,26 @@ void whenProcessing_mustHaveValidProperties() throws IOException { Job job = response.getJob(); assertNotNull(job); assertEquals("Processing", job.getStatus()); + assertNotNull(job.getCreatedAt()); + assertNull(job.getCompletedAt()); + assertNull(job.getResultUrl()); + assertNull(job.getError()); + } + } + + @Nested + @DisplayName("When the Job is processed") + class ProcessedTest { + @Test + @DisplayName("properties must be valid") + void whenProcessing_mustHaveValidProperties() throws IOException { + JobResponse response = loadJob("job/ok_processed_webhooks_ok.json"); + Job job = response.getJob(); + assertNotNull(job); + assertEquals("Processed", job.getStatus()); + assertNotNull(job.getCreatedAt()); + assertNotNull(job.getCompletedAt()); + assertNotNull(job.getResultUrl()); assertNull(job.getError()); } } @@ -41,6 +61,9 @@ void when422_mustHaveValidProperties() throws IOException { JobResponse response = loadJob("job/fail_422.json"); Job job = response.getJob(); assertNotNull(job); + assertNotNull(job.getCreatedAt()); + assertNotNull(job.getCompletedAt()); + assertNull(job.getResultUrl()); ErrorResponse jobError = job.getError(); assertNotNull(jobError); assertEquals(422, jobError.getStatus()); diff --git a/src/test/resources b/src/test/resources index 37f2e3de4..c2e36f5b6 160000 --- a/src/test/resources +++ b/src/test/resources @@ -1 +1 @@ -Subproject commit 37f2e3de48918e3b1a0e4604a9292aaeae05c637 +Subproject commit c2e36f5b635386cb9bb922b517c4e02039b0a122 From f36e49641d18335dd867409f6cb51e8b38b97048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ianar=C3=A9=20S=C3=A9vi?= Date: Tue, 24 Feb 2026 13:02:08 +0100 Subject: [PATCH 2/2] :recycle: update extraction routes --- src/main/java/com/mindee/http/MindeeHttpApiV2.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/mindee/http/MindeeHttpApiV2.java b/src/main/java/com/mindee/http/MindeeHttpApiV2.java index c8a4f832d..1ced1e42f 100644 --- a/src/main/java/com/mindee/http/MindeeHttpApiV2.java +++ b/src/main/java/com/mindee/http/MindeeHttpApiV2.java @@ -72,7 +72,7 @@ public JobResponse reqPostInferenceEnqueue( LocalInputSource inputSource, InferenceParameters options ) { - String url = this.mindeeSettings.getBaseUrl() + "/inferences/enqueue"; + String url = this.mindeeSettings.getBaseUrl() + "/products/extraction/enqueue"; HttpPost post = buildHttpPost(url); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); @@ -100,7 +100,7 @@ public JobResponse reqPostInferenceEnqueue( URLInputSource inputSource, InferenceParameters options ) { - String url = this.mindeeSettings.getBaseUrl() + "/inferences/enqueue"; + String url = this.mindeeSettings.getBaseUrl() + "/products/extraction/enqueue"; HttpPost post = buildHttpPost(url); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); @@ -175,7 +175,7 @@ public JobResponse reqGetJob(String jobId) { @Override public InferenceResponse reqGetInference(String inferenceId) { - String url = this.mindeeSettings.getBaseUrl() + "/inferences/" + inferenceId; + String url = this.mindeeSettings.getBaseUrl() + "/products/extraction/results/" + inferenceId; HttpGet get = new HttpGet(url); if (this.mindeeSettings.getApiKey().isPresent()) {