import gradio as gr import time import asyncio from typing import Generator # Global state tracking service_info = { "status": "running", "model_loaded": False, "connections": 0, "version": "gradio-test" } def health_check() -> dict: """Health check function""" return { "status": "healthy", "timestamp": time.time(), "service": "STT GPU Service - Gradio Test", **service_info } def transcribe_audio(audio_file): """Placeholder transcription function""" if audio_file is None: return "No audio file provided" # Placeholder response return f"Audio file received: {type(audio_file)} - Model not loaded yet (placeholder)" def streaming_demo(audio_chunk): """Placeholder streaming function""" if audio_chunk is None: return "No audio chunk provided" return f"Streaming chunk received - Model not loaded yet (placeholder)" # Create Gradio interface with gr.Blocks(title="STT GPU Service - Gradio Test") as demo: gr.Markdown(""" # 🎙️ STT GPU Service - Gradio Test Version This is a test deployment to verify HuggingFace Spaces functionality. The actual STT model will be added after successful deployment. """) with gr.Tab("Health Check"): health_output = gr.JSON(label="Service Status") health_btn = gr.Button("Check Health") health_btn.click(health_check, outputs=health_output) with gr.Tab("File Transcription"): gr.Markdown("Upload an audio file for transcription (placeholder)") audio_input = gr.Audio(type="filepath", label="Upload Audio File") transcribe_btn = gr.Button("Transcribe") transcribe_output = gr.Textbox(label="Transcription Result") transcribe_btn.click(transcribe_audio, inputs=audio_input, outputs=transcribe_output) with gr.Tab("Streaming Test"): gr.Markdown("Test streaming functionality (placeholder)") stream_input = gr.Audio(type="numpy", label="Stream Audio") stream_output = gr.Textbox(label="Streaming Response") stream_input.change(streaming_demo, inputs=stream_input, outputs=stream_output) with gr.Tab("API Info"): gr.Markdown(""" ## API Endpoints (when deployed) - `GET /` - Service information - `GET /health` - Health check - `POST /transcribe` - File transcription - `WebSocket /ws/stream` - Real-time streaming ## Technical Details - **Model**: kyutai/stt-1b-en_fr (to be loaded) - **Framework**: Gradio + FastAPI backend - **GPU**: T4 Small - **Chunk Size**: 80ms - **Languages**: English, French """) if __name__ == "__main__": demo.launch( server_name="0.0.0.0", server_port=7860, show_api=True, show_error=True )