Skip to content

Commit

Permalink
Initial draft
Browse files Browse the repository at this point in the history
  • Loading branch information
kirillatrev committed Dec 13, 2023
1 parent 770c1df commit c6766f3
Show file tree
Hide file tree
Showing 10 changed files with 185 additions and 3 deletions.
4 changes: 4 additions & 0 deletions src/main/java/ai/rev/speechtotext/ApiClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/ai/rev/speechtotext/ApiInterface.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ public interface ApiInterface {
@GET("jobs/{id}/transcript")
Call<String> getTranscriptText(@Path("id") String jobID);

@Headers("Accept: " + REV_TEXT_CONTENT_TYPE)
@GET("jobs/{id}/transcript/summary")
Call<String> getTranscriptSummary(@Path("id") String jobID);

@POST("jobs")
Call<RevAiJob> submitJobUrl(@Body RevAiJobOptions options);

Expand Down
28 changes: 28 additions & 0 deletions src/main/java/ai/rev/speechtotext/models/NlpModel.java
Original file line number Diff line number Diff line change
@@ -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 + '\'' + '}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ public class RevAiJob {
@SerializedName("segments_to_transcribe")
private List<SegmentToTranscribe> segmentsToTranscribe;

@SerializedName("summarization")
private Summarization summarization;

/**
* Returns a String that contains the job ID.
*
Expand Down Expand Up @@ -517,6 +520,11 @@ public void setSegmentsToTranscribe(List<SegmentToTranscribe> segmentsToTranscri
this.segmentsToTranscribe = segmentsToTranscribe;
}

public Summarization getSummarization() { return summarization; }
public void setSummarization(Summarization summarization) {
this.summarization = summarization;
}

@Override
public String toString() {
return "{"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,9 @@ public class RevAiJobOptions {
@SerializedName("speaker_names")
private List<SpeakerName> speakerNames;

@SerializedName("summarization_config")
private SummarizationOptions summarizationOptions;

/**
* Returns the media url.
*
Expand Down Expand Up @@ -563,4 +566,18 @@ public List<SpeakerName> getSpeakerNames() {
public void setSpeakerNames(List<SpeakerName> 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; }
}
Original file line number Diff line number Diff line change
@@ -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;}
}
Original file line number Diff line number Diff line change
@@ -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
}
Original file line number Diff line number Diff line change
@@ -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 + '\'' + '}';
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
27 changes: 24 additions & 3 deletions src/test/java/ai/rev/speechtotext/integration/SubmitJobTest.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit c6766f3

Please sign in to comment.