import gradio as gr from fastapi import FastAPI from shared import DEFAULT_CHANGE_THRESHOLD, DEFAULT_MAX_SPEAKERS, ABSOLUTE_MAX_SPEAKERS # Replace with your actual space URL when deployed API_WS = "wss://your-space.hf.space/ws_inference" def build_ui(): """Build Gradio UI for speaker diarization""" with gr.Blocks(title="Real-time Speaker Diarization", theme=gr.themes.Soft()) as demo: gr.Markdown("# ๐ŸŽค Live Speaker Diarization") gr.Markdown("Real-time speech recognition with automatic speaker identification") with gr.Row(): with gr.Column(scale=2): # Conversation display with embedded JavaScript output = gr.HTML( """
Click 'Start Listening' to beginโ€ฆ
""", label="Live Conversation" ) # Control buttons with gr.Row(): start_btn = gr.Button("โ–ถ๏ธ Start Listening", variant="primary", size="lg") stop_btn = gr.Button("โน๏ธ Stop", variant="stop", size="lg") clear_btn = gr.Button("๐Ÿ—‘๏ธ Clear", variant="secondary", size="lg") # Status display status_output = gr.Textbox( label="System Status", value="Click 'Start Listening' to begin...", lines=8, interactive=False ) with gr.Column(scale=1): # Settings gr.Markdown("## โš™๏ธ Settings") threshold_slider = gr.Slider( minimum=0.3, maximum=0.9, step=0.05, value=DEFAULT_CHANGE_THRESHOLD, label="Speaker Change Sensitivity", info="Lower = more sensitive" ) max_speakers_slider = gr.Slider( minimum=2, maximum=ABSOLUTE_MAX_SPEAKERS, step=1, value=DEFAULT_MAX_SPEAKERS, label="Maximum Speakers" ) update_btn = gr.Button("Update Settings", variant="secondary") # Instructions gr.Markdown(""" ## ๐Ÿ“‹ Instructions 1. **Start Listening** - allows browser to access microphone 2. **Speak** - system will recognize different speakers 3. **Stop** when finished ## ๐ŸŽจ Speaker Colors - ๐Ÿ”ด Speaker 1 (Red) - ๐ŸŸข Speaker 2 (Teal) - ๐Ÿ”ต Speaker 3 (Blue) - ๐ŸŸก Speaker 4 (Green) """) return demo # Create Gradio interface demo = build_ui() def mount_ui(app: FastAPI): """Mount Gradio app to FastAPI""" app.mount("/", demo.app) # For standalone testing if __name__ == "__main__": demo.launch()