Skip to content

Commit 0f6a54c

Browse files
committed
change interface; todo: update changelog
1 parent a4979d4 commit 0f6a54c

10 files changed

+171
-3
lines changed

examples/pipeline.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from slashml import SpeechToText, TextSummarization, TextToSpeech
2+
3+
# Replace `API_KEY` with your SlasML API token. This example still runs without
4+
# the API token but usage will be limited
5+
API_KEY = "a7011983a0f3d64ee113317b1e36f8e5bf56c14a"
6+
7+
service_provider_speech_to_text = SpeechToText.ServiceProvider.ASSEMBLY
8+
service_provider_summarize = TextSummarization.ServiceProvider.OPENAI
9+
service_provider_text_to_speech = TextToSpeech.ServiceProvider.AWS
10+
11+
# 10 minute audio file already uploaded
12+
uploaded_url = (
13+
"https://slashml.s3.ca-central-1.amazonaws.com/fda70f6a-6057-4541-adf1-2cf4f4182929"
14+
)
15+
16+
transcribe = SpeechToText(api_key=API_KEY)
17+
summarize = TextSummarization(api_key=API_KEY)
18+
speechify = TextToSpeech(api_key=API_KEY)
19+
20+
21+
response = transcribe.execute(
22+
upload_url=uploaded_url, service_provider=service_provider_speech_to_text
23+
)
24+
25+
transcribed_text = response.transcription_data.transcription
26+
print (f"Transcribed Text = {transcribed_text}")
27+
28+
response_summarize = summarize.execute(transcribed_text, service_provider_summarize)
29+
30+
summary = response_summarize.summarization_data
31+
32+
print (f"Summarized Text = {summary}")
33+
34+
response = speechify.execute(summary, service_provider_text_to_speech)
35+
36+
print (f"\n\n\n You can access the audio file here: {response.audio_url}")
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from slashml import SpeechToText
22
import time
33

4+
# update the examples using execute from the SpeechToText class
45

56
def speech_to_text(audio_filepath, service_provider, api_key):
67
# Initialize model

examples/speech_to_text_sync.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from slashml import SpeechToText
2+
3+
# Replace `API_KEY` with your SlasML API token. This example still runs without
4+
# the API token but usage will be limited
5+
API_KEY = None
6+
service_provider = SpeechToText.ServiceProvider.AWS
7+
audio_filepath = "test.mp3"
8+
9+
# Find all the service providers that we support by running the choices() method
10+
print(f"Available providers: {SpeechToText.ServiceProvider.choices()}")
11+
print(f"Selected provider: {service_provider}")
12+
13+
14+
model = SpeechToText(api_key=API_KEY)
15+
16+
# Upload audio
17+
uploaded_file = model.upload_audio(audio_filepath)
18+
print(f"file uploaded: {uploaded_file}")
19+
20+
response = model.execute(
21+
upload_url=uploaded_file["upload_url"], service_provider=service_provider
22+
)
23+
24+
print(f"\n\n\n\nTranscription = {response.transcription_data.transcription}")

examples/summarize_sync.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from slashml import TextSummarization
2+
3+
4+
# Replace `API_KEY` with your SlasML API token. This example still runs without
5+
# the API token but usage will be limited
6+
API_KEY = "a7011983a0f3d64ee113317b1e36f8e5bf56c14a"
7+
service_provider = TextSummarization.ServiceProvider.OPENAI
8+
9+
input_text = """A good writer doesn't just think, and then write down what he thought, as a sort of transcript. A good writer will almost always discover new things in the process of writing. And there is, as far as I know, no substitute for this kind of discovery. Talking about your ideas with other people is a good way to develop them. But even after doing this, you'll find you still discover new things when you sit down to write. There is a kind of thinking that can only be done by writing."""
10+
11+
model = TextSummarization(api_key=API_KEY)
12+
13+
# Find all the service providers that we support by running the choices() method
14+
print(f"Available providers: {TextSummarization.ServiceProvider.choices()}")
15+
print(f"Selected provider: {service_provider}")
16+
17+
response = model.execute(text=input_text, service_provider=service_provider)
18+
19+
print(f"Summary = {response.summarization_data}")

examples/text_to_speech_sync.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from slashml import TextToSpeech
2+
3+
# Replace `API_KEY` with your SlasML API token. This example still runs without
4+
# the API token but usage will be limited
5+
API_KEY = None
6+
service_provider = TextToSpeech.ServiceProvider.AWS
7+
input_text = "To be or not to be, that is the question!"
8+
9+
# Find all the service providers that we support by running the choices() method
10+
print(f"Available providers: {TextToSpeech.ServiceProvider.choices()}")
11+
print(f"Selected provider: {service_provider}")
12+
13+
model = TextToSpeech(api_key=API_KEY)
14+
15+
# Submit request
16+
job = model.execute(text=input_text, service_provider=service_provider)
17+
18+
print (f"\n\n\n You can access the audio file here: {job.audio_url}")

slashml/speech_to_text.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import requests
2+
import time
23
from enum import Enum
34
from .utils import generateURL, baseUrl, generateHeaders, formatResponse, getTaskStatus
45

@@ -25,7 +26,7 @@ def upload_audio(self, file_location: str):
2526
response = requests.post(url, headers=self._headers, files=files)
2627
return formatResponse(response)
2728

28-
def transcribe(self, upload_url: str, service_provider: ServiceProvider):
29+
def submit_job(self, upload_url: str, service_provider: ServiceProvider):
2930
url = generateURL(self._base_url, "jobs")
3031
payload = {
3132
"uploaded_audio_url": upload_url,
@@ -36,3 +37,30 @@ def transcribe(self, upload_url: str, service_provider: ServiceProvider):
3637

3738
def status(self, job_id: str, service_provider: ServiceProvider):
3839
return getTaskStatus(self._base_url, self._headers, job_id, service_provider)
40+
41+
def execute(self, upload_url: str, service_provider: ServiceProvider):
42+
url = generateURL(self._base_url, "jobs")
43+
44+
payload = {
45+
"uploaded_audio_url": upload_url,
46+
"service_provider": service_provider.value,
47+
}
48+
49+
response = requests.post(url, headers=self._headers, data=payload)
50+
job = formatResponse(response)
51+
52+
assert job.status != "ERROR", f"{job}"
53+
print(f"Got Job ID: {job.id}")
54+
55+
# check job status
56+
response = getTaskStatus(self._base_url, self._headers, job.id, service_provider)
57+
58+
import pdb
59+
pdb.set_trace()
60+
while response.status == "IN_PROGRESS":
61+
time.sleep(5)
62+
response = getTaskStatus(self._base_url, self._headers, job.id, service_provider)
63+
print(f"Response = {response}. Retrying in 5 seconds")
64+
65+
return response
66+

slashml/text_summarization.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import requests
2+
import time
23
from enum import Enum
34
from .utils import generateURL, baseUrl, generateHeaders, formatResponse, getTaskStatus
45

@@ -17,11 +18,31 @@ def choices(cls):
1718
def __init__(self, api_key: str = None):
1819
self._headers = generateHeaders(api_key)
1920

20-
def summarize(self, text: str, service_provider: ServiceProvider):
21+
def submit_job(self, text: str, service_provider: ServiceProvider):
2122
url = generateURL(self._base_url, "jobs")
2223
payload = {"text": [text], "service_provider": service_provider.value}
2324
response = requests.post(url, headers=self._headers, data=payload)
2425
return formatResponse(response)
2526

2627
def status(self, job_id: str, service_provider: ServiceProvider):
2728
return getTaskStatus(self._base_url, self._headers, job_id, service_provider)
29+
30+
def execute(self, text: str, service_provider: ServiceProvider):
31+
url = generateURL(self._base_url, "jobs")
32+
payload = {"text": [text], "service_provider": service_provider.value}
33+
response = requests.post(url, headers=self._headers, data=payload)
34+
job = formatResponse(response)
35+
36+
assert job.status != "ERROR", f"{job}"
37+
print(f"Got Job ID: {job.id}")
38+
39+
# check job status
40+
response = getTaskStatus(self._base_url, self._headers, job.id, service_provider)
41+
42+
while response.status == "IN_PROGRESS":
43+
time.sleep(5)
44+
response = getTaskStatus(self._base_url, self._headers, job.id, service_provider)
45+
print(f"Response = {response}. Retrying in 5 seconds")
46+
47+
return response
48+

slashml/text_to_speech.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import requests
2+
import time
3+
24
from enum import Enum
35
from .utils import generateURL, baseUrl, generateHeaders, formatResponse, getTaskStatus
46

@@ -18,11 +20,30 @@ def choices(cls):
1820
def __init__(self, api_key: str = None):
1921
self._headers = generateHeaders(api_key)
2022

21-
def speechify(self, text: str, service_provider: ServiceProvider):
23+
def submit_job(self, text: str, service_provider: ServiceProvider):
2224
url = generateURL(self._base_url, "jobs")
2325
payload = {"text": text, "service_provider": service_provider.value}
2426
response = requests.post(url, headers=self._headers, data=payload)
2527
return formatResponse(response)
2628

2729
def status(self, job_id: str, service_provider: ServiceProvider):
2830
return getTaskStatus(self._base_url, self._headers, job_id, service_provider)
31+
32+
def execute(self, text: str, service_provider: ServiceProvider):
33+
url = generateURL(self._base_url, "jobs")
34+
payload = {"text": text, "service_provider": service_provider.value}
35+
response = requests.post(url, headers=self._headers, data=payload)
36+
job = formatResponse(response)
37+
38+
assert job.status != "ERROR", f"{job}"
39+
print(f"Got Job ID: {job.id}")
40+
41+
# check job status
42+
response = getTaskStatus(self._base_url, self._headers, job.id, service_provider)
43+
44+
while response.status == "IN_PROGRESS":
45+
time.sleep(5)
46+
response = getTaskStatus(self._base_url, self._headers, job.id, service_provider)
47+
print(f"Response = {response}. Retrying in 5 seconds")
48+
49+
return response

0 commit comments

Comments
 (0)