sachin
fix
aefdced
import gradio as gr
import requests
import urllib.parse
import tempfile
import os
def text_to_speech(text):
# Validate input
if not text or not isinstance(text, str):
raise ValueError("Input text must be a non-empty string")
# Get the base URL from environment variable
base_url = os.getenv("DWANI_AI_API_BASE_URL")
if not base_url:
raise ValueError("DWANI_AI_API_BASE_URL environment variable is not set")
# Define the endpoint path
endpoint = "/v1/audio/speech"
# Construct query parameters
query_params = urllib.parse.urlencode({"input": text, "response_format": "mp3"})
url = f"{base_url.rstrip('/')}{endpoint}?{query_params}"
headers = {
"accept": "application/json",
"Content-Type": "application/json"
}
try:
response = requests.post(url, headers=headers, json={})
response.raise_for_status()
# Save the audio content to a temporary file
with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as temp_file:
temp_file.write(response.content)
temp_file_path = temp_file.name
return temp_file_path
except requests.exceptions.RequestException as e:
raise ValueError(f"API request failed: {str(e)}")
except IOError as e:
raise ValueError(f"Failed to save audio file: {str(e)}")
# Create Gradio interface
with gr.Blocks(title="Text to Speech API Interface") as demo:
gr.Markdown("# Text to Speech API Interface")
with gr.Row():
with gr.Column():
# Input components
text_input = gr.Textbox(
label="Text",
placeholder="Enter text to convert to speech",
value="ಕರ್ನಾಟಕದ ರಾಜಧಾನಿ ಬೆಂಗಳೂರು."
)
submit_btn = gr.Button("Generate Speech")
with gr.Column():
# Output component
audio_output = gr.Audio(
label="Generated Speech",
type="filepath",
interactive=False
)
# Connect the button click to the API function
submit_btn.click(
fn=text_to_speech,
inputs=[text_input],
outputs=audio_output
)
# Launch the interface
try:
demo.launch(server_name="0.0.0.0", server_port=7860)
except Exception as e:
print(f"Failed to launch Gradio interface: {str(e)}")