Spaces:
Sleeping
Sleeping
| import os | |
| import logging | |
| import gradio as gr | |
| from huggingface_hub import InferenceClient | |
| # Configure logging | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| format="%(asctime)s | %(levelname)s | %(message)s", | |
| datefmt="%Y-%m-%d %H:%M:%S", | |
| ) | |
| logger = logging.getLogger(__name__) | |
| # Environment variables for configuration | |
| HF_TOKEN = os.environ.get("HF_TOKEN", "") | |
| MODEL_ID = os.environ.get("MODEL_ID", "openai/whisper-large-v3-turbo") | |
| logger.info(f"HF_TOKEN configured: {bool(HF_TOKEN)}") | |
| logger.info(f"MODEL_ID: {MODEL_ID}") | |
| client = InferenceClient(token=HF_TOKEN) if HF_TOKEN else InferenceClient() | |
| logger.info("InferenceClient initialized") | |
| def transcribe(audio) -> str: | |
| """Transcribe audio file or recording.""" | |
| logger.info(f"transcribe() called | audio={audio}") | |
| if audio is None: | |
| logger.warning("No audio provided") | |
| return "π€ Record or upload audio first!" | |
| try: | |
| logger.info(f"Calling automatic_speech_recognition | model={MODEL_ID}") | |
| result = client.automatic_speech_recognition(audio, model=MODEL_ID) | |
| logger.info(f"Transcription: {len(result.text)} chars") | |
| return result.text | |
| except Exception as e: | |
| logger.error(f"API error: {e}") | |
| return f"β Error: {e}" | |
| logger.info("Building Gradio interface...") | |
| with gr.Blocks(title="Whisper Transcriber") as demo: | |
| gr.Markdown("# ποΈ Whisper Transcriber\nRecord your voice or upload an audio file to get a transcription.") | |
| with gr.Row(equal_height=True): | |
| with gr.Column(): | |
| mic = gr.Audio(sources=["microphone"], type="filepath", label="π€ Record") | |
| with gr.Column(): | |
| upload = gr.Audio(sources=["upload"], type="filepath", label="π Upload") | |
| output = gr.Textbox(label="Transcription", lines=4, interactive=False) | |
| with gr.Row(): | |
| btn_mic = gr.Button("Transcribe Recording", variant="primary") | |
| btn_upload = gr.Button("Transcribe Upload", variant="secondary") | |
| btn_mic.click(transcribe, inputs=mic, outputs=output) | |
| btn_upload.click(transcribe, inputs=upload, outputs=output) | |
| demo.queue() | |
| logger.info("Starting Gradio server...") | |
| demo.launch() | |