Spaces:
Running
Running
# model_handler.py | |
from gradio_client import Client, handle_file | |
import threading | |
import requests | |
client = Client("ai4bharat/IndicF5") | |
def call_model_with_timeout(text, ref_audio_path, ref_text="", timeout=120): | |
result = {"status": None, "audio_url": None} | |
def run(): | |
try: | |
audio_url = client.predict( | |
text, | |
handle_file(ref_audio_path), | |
ref_text, | |
api_name="/synthesize_speech" | |
) | |
result["status"] = "success" | |
result["audio_url"] = audio_url | |
except Exception as e: | |
result["status"] = f"error: {e}" | |
thread = threading.Thread(target=run) | |
thread.start() | |
thread.join(timeout) | |
if thread.is_alive(): | |
return "β Timed out!", None | |
if result["status"] == "success": | |
audio_url = result["audio_url"] | |
try: | |
output_path = "output.wav" | |
audio_response = requests.get(audio_url) | |
with open(output_path, "wb") as f: | |
f.write(audio_response.content) | |
return "β Success", output_path | |
except Exception as e: | |
return f"β Download error: {e}", None | |
else: | |
return result["status"], None | |