open-asr-leaderboard-apis / providers /smallest_provider.py
bezzam's picture
bezzam HF Staff
Upload 10 files
51419fe verified
Raw
History Blame Contribute Delete
1.91 kB
import os
import requests
from typing import Optional
from . import APIProvider, PermanentError, register
@register("smallestai")
class SmallestAIProvider(APIProvider):
def transcribe(
self,
model_variant: str,
audio_file_path: Optional[str],
sample: dict,
use_url: bool = False,
language: str = "en",
) -> str:
api_key = os.getenv("SMALLESTAI_API_KEY")
if not api_key or api_key == "your_api_key":
raise ValueError(
"SMALLESTAI_API_KEY environment variable not set, get your key at https://console.smallest.ai"
)
endpoint = "https://api.smallest.ai/waves/v1/pulse/get_text"
if use_url:
audio_url = sample["row"]["audio"][0]["src"]
response = requests.post(
endpoint,
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
},
json={"url": audio_url},
params={"language": language},
timeout=300,
)
else:
with open(audio_file_path, "rb") as audio_file:
audio_data = audio_file.read()
response = requests.post(
endpoint,
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/octet-stream",
},
data=audio_data,
params={"language": language},
timeout=300,
)
if response.status_code != 429 and 400 <= response.status_code < 500:
raise PermanentError(
f"Smallest AI API returned {response.status_code}: {response.text}"
)
response.raise_for_status()
return response.json().get("transcription", "") or "."