prpankajsingh's picture
Update app.py
e86e251 verified
Raw
History Blame Contribute Delete
2.18 kB
#pip install gradio==4.43.0
#pip install gradio-client==1.3.0
#pip install huggingface_hub>=0.24.0
import os
import gradio as gr
from gradio_client import Client, handle_file
import zipfile
import time
BACKEND_URL = os.getenv("BACKEND_URL")
HF_TOKEN = os.environ["HF_TOKEN"] # set in Space Secrets
# Client is created on the server; token never goes to the browser.
client = Client(BACKEND_URL, hf_token=HF_TOKEN)
def proxy_transcribe(audio_path):
if not audio_path:
return "No audio provided.", None, None
try:
# Send file server-side to the private backend
out = client.predict(audio_path=handle_file(audio_path), api_name="/transcribe")
transcript = out[0] if isinstance(out, (list, tuple)) else out
# Create zip
timestamp = int(time.time())
zip_path = f"/tmp/results_{timestamp}.zip"
with zipfile.ZipFile(zip_path, "w") as zf:
zf.write(audio_path, arcname=os.path.basename(audio_path))
transcript_path = audio_path.rsplit(".", 1)[0] + ".txt"
with open(transcript_path, "w", encoding="utf-8") as f:
f.write(transcript)
zf.write(transcript_path, arcname=os.path.basename(transcript_path))
return transcript, audio_path, zip_path
except Exception as e:
# Never echo secrets; keep errors generic
return f"Backend error: {type(e).__name__}",None ,audio_path
with gr.Blocks() as demo:
gr.Markdown("## ASR Demo (frontend proxy)")
a = gr.Audio(sources=["upload", "microphone"], type="filepath", label="Audio")
t = gr.Textbox(label="Transcription",lines=7, interactive=False) #,elem_classes="auto-height")
audio_file_output = gr.File(label="Download Audio")
zip_output = gr.File(label="Download ZIP")
a.change(proxy_transcribe, inputs=a, outputs=[t,audio_file_output, zip_output])
# demo.css = """
# .auto-height textarea {
# height: auto !important;
# min-height: 40px;
# max-height: 150px;
# overflow-y: auto;
# }
# """
# demo.queue(concurrency_count=2, max_size=8)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860, share=True)