Spaces:
Sleeping
Sleeping
| import os | |
| import requests | |
| import tempfile | |
| def audio_transcribe(audio_url: str) -> str: | |
| """ | |
| Transcribe an audio file from a URL to text using HuggingFace Whisper API. | |
| Uses HF_TOKEN for authentication when downloading the file. | |
| """ | |
| try: | |
| headers = {"Authorization": f"Bearer {os.getenv('HF_TOKEN')}"} | |
| response = requests.get(audio_url, headers=headers, timeout=15) | |
| response.raise_for_status() | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp: | |
| tmp.write(response.content) | |
| tmp_path = tmp.name | |
| api_url = "https://api-inference.huggingface.co/models/openai/whisper-base" | |
| api_headers = {"Authorization": f"Bearer {os.getenv('HF_TOKEN')}"} | |
| with open(tmp_path, "rb") as f: | |
| api_response = requests.post(api_url, headers=api_headers, data=f, timeout=30) | |
| os.unlink(tmp_path) | |
| if api_response.status_code == 200: | |
| result = api_response.json() | |
| transcript = result.get("text", "").strip() | |
| return transcript if transcript else "No speech detected." | |
| else: | |
| return f"Transcription API error (HTTP {api_response.status_code}): {api_response.text}" | |
| except requests.exceptions.RequestException as e: | |
| return f"Failed to download audio file: {str(e)}" | |
| except Exception as e: | |
| return f"Transcription failed: {str(e)}" |