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 "."