diff --git a/src/main/java/ai/rev/speechtotext/ApiClient.java b/src/main/java/ai/rev/speechtotext/ApiClient.java index 0233294..05b9cbe 100755 --- a/src/main/java/ai/rev/speechtotext/ApiClient.java +++ b/src/main/java/ai/rev/speechtotext/ApiClient.java @@ -181,6 +181,10 @@ public String getTranscriptText(String id) throws IOException { return apiInterface.getTranscriptText(id).execute().body(); } + public String getTranscriptSummary(String id) throws IOException { + return apiInterface.getTranscriptSummary(id).execute().body(); + } + /** * Sends a POST request to the /jobs endpoint, starts an asynchronous job to transcribe * the media file located at the url provided and returns a {@link RevAiJob} object. diff --git a/src/main/java/ai/rev/speechtotext/ApiInterface.java b/src/main/java/ai/rev/speechtotext/ApiInterface.java index b248bdb..e0cf034 100644 --- a/src/main/java/ai/rev/speechtotext/ApiInterface.java +++ b/src/main/java/ai/rev/speechtotext/ApiInterface.java @@ -46,6 +46,10 @@ public interface ApiInterface { @GET("jobs/{id}/transcript") Call getTranscriptText(@Path("id") String jobID); + @Headers("Accept: " + REV_TEXT_CONTENT_TYPE) + @GET("jobs/{id}/transcript/summary") + Call getTranscriptSummary(@Path("id") String jobID); + @POST("jobs") Call submitJobUrl(@Body RevAiJobOptions options); diff --git a/src/main/java/ai/rev/speechtotext/models/NlpModel.java b/src/main/java/ai/rev/speechtotext/models/NlpModel.java new file mode 100644 index 0000000..855434e --- /dev/null +++ b/src/main/java/ai/rev/speechtotext/models/NlpModel.java @@ -0,0 +1,28 @@ +package ai.rev.speechtotext.models; + +import com.google.gson.annotations.SerializedName; + +/** Model type. */ +public enum NlpModel { + + /** gpt 3.5. This is the default value. */ + @SerializedName("standard") + STANDARD("standard"), + + /** gpt 4. */ + @SerializedName("premium") + PREMIUM("premium"); + + private final String model; + + NlpModel(String model) { + this.model = model; + } + + public String getModel() { return model; } + + @Override + public String toString() { + return "{" + "model='" + model + '\'' + '}'; + } +} diff --git a/src/main/java/ai/rev/speechtotext/models/asynchronous/RevAiJob.java b/src/main/java/ai/rev/speechtotext/models/asynchronous/RevAiJob.java index b01929d..d7860c0 100644 --- a/src/main/java/ai/rev/speechtotext/models/asynchronous/RevAiJob.java +++ b/src/main/java/ai/rev/speechtotext/models/asynchronous/RevAiJob.java @@ -79,6 +79,9 @@ public class RevAiJob { @SerializedName("segments_to_transcribe") private List segmentsToTranscribe; + @SerializedName("summarization") + private Summarization summarization; + /** * Returns a String that contains the job ID. * @@ -517,6 +520,11 @@ public void setSegmentsToTranscribe(List segmentsToTranscri this.segmentsToTranscribe = segmentsToTranscribe; } + public Summarization getSummarization() { return summarization; } + public void setSummarization(Summarization summarization) { + this.summarization = summarization; + } + @Override public String toString() { return "{" diff --git a/src/main/java/ai/rev/speechtotext/models/asynchronous/RevAiJobOptions.java b/src/main/java/ai/rev/speechtotext/models/asynchronous/RevAiJobOptions.java index fc35983..8a79baf 100644 --- a/src/main/java/ai/rev/speechtotext/models/asynchronous/RevAiJobOptions.java +++ b/src/main/java/ai/rev/speechtotext/models/asynchronous/RevAiJobOptions.java @@ -136,6 +136,9 @@ public class RevAiJobOptions { @SerializedName("speaker_names") private List speakerNames; + @SerializedName("summarization_config") + private SummarizationOptions summarizationOptions; + /** * Returns the media url. * @@ -563,4 +566,18 @@ public List getSpeakerNames() { public void setSpeakerNames(List speakerNames) { this.speakerNames = speakerNames; } + + /** + * Returns summarization options + * + * @return Summarization options + */ + public SummarizationOptions getSummarizationOptions() { return summarizationOptions; } + + /** + * Specifies summarization options. + * + * @param summarizationOptions Summarization options + */ + public void setSummarizationOptions(SummarizationOptions summarizationOptions) { this.summarizationOptions = summarizationOptions; } } diff --git a/src/main/java/ai/rev/speechtotext/models/asynchronous/Summarization.java b/src/main/java/ai/rev/speechtotext/models/asynchronous/Summarization.java new file mode 100644 index 0000000..b586fca --- /dev/null +++ b/src/main/java/ai/rev/speechtotext/models/asynchronous/Summarization.java @@ -0,0 +1,29 @@ +package ai.rev.speechtotext.models.asynchronous; + +import ai.rev.speechtotext.models.NlpModel; +import com.google.gson.annotations.SerializedName; + +public class Summarization { + /** User defined prompt. **/ + @SerializedName("prompt") + private String prompt; + + /** Standard or Premium AI backend. **/ + @SerializedName("model") + private NlpModel model; + + /** Formatting options. Default is Paragraph. **/ + @SerializedName("type") + private SummarizationFormattingOptions type; + + @SerializedName("status") + private SummarizationJobStatus jobStatus; + + @SerializedName("completed_on") + private String completedOn; + + @SerializedName("failure") + private String failure; + + public SummarizationJobStatus getJobStatus() { return jobStatus;} +} diff --git a/src/main/java/ai/rev/speechtotext/models/asynchronous/SummarizationFormattingOptions.java b/src/main/java/ai/rev/speechtotext/models/asynchronous/SummarizationFormattingOptions.java new file mode 100644 index 0000000..3217ee5 --- /dev/null +++ b/src/main/java/ai/rev/speechtotext/models/asynchronous/SummarizationFormattingOptions.java @@ -0,0 +1,15 @@ +package ai.rev.speechtotext.models.asynchronous; + +import com.google.gson.annotations.SerializedName; + +/** Summarization formatting options. **/ +public enum SummarizationFormattingOptions { + + /** Paragraph formatting **/ + @SerializedName("paragraph") + Paragraph, + + /** Bullet points formatting **/ + @SerializedName("bullets") + Bullets +} diff --git a/src/main/java/ai/rev/speechtotext/models/asynchronous/SummarizationJobStatus.java b/src/main/java/ai/rev/speechtotext/models/asynchronous/SummarizationJobStatus.java new file mode 100644 index 0000000..0b18298 --- /dev/null +++ b/src/main/java/ai/rev/speechtotext/models/asynchronous/SummarizationJobStatus.java @@ -0,0 +1,37 @@ +package ai.rev.speechtotext.models.asynchronous; + +import com.google.gson.annotations.SerializedName; + +public enum SummarizationJobStatus { + /** The status when transcription has failed. */ + @SerializedName("failed") + FAILED("failed"), + + /** The status when transcription of the file is in progress. */ + @SerializedName("in_progress") + IN_PROGRESS("in_progress"), + + /** The status when the file has been transcribed. */ + @SerializedName("completed") + COMPLETED("completed"); + + private String status; + + SummarizationJobStatus(String status) { + this.status = status; + } + + /** + * Returns the String value of the enumeration. + * + * @return The String value of the enumeration. + */ + public String getStatus() { + return status; + } + + @Override + public String toString() { + return "{" + "status='" + status + '\'' + '}'; + } +} diff --git a/src/main/java/ai/rev/speechtotext/models/asynchronous/SummarizationOptions.java b/src/main/java/ai/rev/speechtotext/models/asynchronous/SummarizationOptions.java new file mode 100644 index 0000000..2348cd4 --- /dev/null +++ b/src/main/java/ai/rev/speechtotext/models/asynchronous/SummarizationOptions.java @@ -0,0 +1,19 @@ +package ai.rev.speechtotext.models.asynchronous; + +import ai.rev.speechtotext.models.NlpModel; +import com.google.gson.annotations.SerializedName; + +public class SummarizationOptions { + + /** User defined prompt. **/ + @SerializedName("prompt") + private String prompt; + + /** Standard or Premium AI backend. **/ + @SerializedName("model") + private NlpModel model; + + /** Formatting options. Default is Paragraph. **/ + @SerializedName("type") + private SummarizationFormattingOptions type; +} diff --git a/src/test/java/ai/rev/speechtotext/integration/SubmitJobTest.java b/src/test/java/ai/rev/speechtotext/integration/SubmitJobTest.java index 3917a8d..de941a2 100644 --- a/src/test/java/ai/rev/speechtotext/integration/SubmitJobTest.java +++ b/src/test/java/ai/rev/speechtotext/integration/SubmitJobTest.java @@ -1,9 +1,7 @@ package ai.rev.speechtotext.integration; import ai.rev.speechtotext.ApiClient; -import ai.rev.speechtotext.models.asynchronous.RevAiJob; -import ai.rev.speechtotext.models.asynchronous.RevAiJobOptions; -import ai.rev.speechtotext.models.asynchronous.RevAiJobStatus; +import ai.rev.speechtotext.models.asynchronous.*; import ai.rev.testutils.EnvHelper; import org.junit.Before; import org.junit.Rule; @@ -158,7 +156,30 @@ public void SubmitJobUrl_OnlyUrlIsSpecified_ReturnsRevAiJobInProgress() throws I assertRevAiJob(revAiJob); } + @Test + public void SubmitJobLocalFile_SummarizationOptionsSpecified_ReturnsRevAiJobInProgress() + throws IOException, InterruptedException { + + RevAiJobOptions revAiJobOptions = new RevAiJobOptions(); + revAiJobOptions.setMetadata(testName.getMethodName()); + //revAiJobOptions.setDeleteAfterSeconds(0); + revAiJobOptions.setLanguage("en"); + revAiJobOptions.setSummarizationOptions(new SummarizationOptions()); + + RevAiJob revAiJob = apiClient.submitJobLocalFile(LOCAL_FILE, revAiJobOptions); + + assertRevAiJob(revAiJob); + assertThat(revAiJob.getSummarization()).isNotNull(); + while(revAiJob != null && revAiJob.getSummarization().getJobStatus() == SummarizationJobStatus.IN_PROGRESS) + { + Thread.sleep(5000); + revAiJob = apiClient.getJobDetails(revAiJob.getJobId()); + } + + String summary = apiClient.getTranscriptSummary(revAiJob.getJobId()); + assertThat(summary).isNotNull(); + } public void assertRevAiJob(RevAiJob revAiJob) { assertThat(revAiJob.getJobId()).as("Job Id").isNotNull(); assertThat(revAiJob.getJobStatus()).as("Job status").isEqualTo(RevAiJobStatus.IN_PROGRESS);