import time
import requests
BASE = "https://nano-gpt.com/api"
def get_tts_status(run_id: str, model: str, api_key: str, *, cost=None, payment_source=None, is_api_request=True) -> dict:
params = {"runId": run_id, "model": model}
if isinstance(cost, (int, float)):
params["cost"] = str(cost)
if payment_source:
params["paymentSource"] = str(payment_source)
if isinstance(is_api_request, bool):
params["isApiRequest"] = str(is_api_request)
resp = requests.get(
f"{BASE}/tts/status",
headers={"x-api-key": api_key},
params=params,
timeout=30,
)
resp.raise_for_status()
return resp.json()
def wait_for_tts(run_id: str, model: str, api_key: str, *, cost=None, payment_source=None, is_api_request=True, max_attempts: int = 60, delay_s: int = 3) -> str:
for attempt in range(max_attempts):
data = get_tts_status(run_id, model, api_key, cost=cost, payment_source=payment_source, is_api_request=is_api_request)
status = data.get("status")
if status == "completed" and data.get("audioUrl"):
return data["audioUrl"]
if status == "error":
raise RuntimeError(data.get("error", "TTS generation failed"))
time.sleep(delay_s)
raise TimeoutError("Polling timeout")