#!/usr/bin/env python3 """ Simple Gradio Dropdown Test Test basic dropdown functionality with GPU detection """ import gradio as gr import torch import os def get_test_gpus(): """Simple GPU detection for testing""" gpus = [] if torch.cuda.is_available(): device_count = torch.cuda.device_count() print(f"CUDA devices found: {device_count}") for i in range(device_count): try: name = torch.cuda.get_device_name(i) memory = torch.cuda.get_device_properties(i).total_memory / (1024**3) gpu_option = f"GPU {i}: {name} ({memory:.1f}GB)" gpus.append(gpu_option) print(f"Added: {gpu_option}") except Exception as e: print(f"Error with GPU {i}: {e}") gpus.append(f"GPU {i}: Error") gpus.append("CPU Only") print(f"Final GPU list: {gpus}") return gpus def on_gpu_change(selected_gpu): """Handle GPU selection change""" print(f"Selected GPU: {selected_gpu}") return f"You selected: {selected_gpu}" def refresh_gpus(): """Refresh GPU list""" new_gpus = get_test_gpus() print(f"Refreshed GPUs: {new_gpus}") return gr.update(choices=new_gpus, value=new_gpus[0]) # Get initial GPU list gpu_list = get_test_gpus() # Create simple interface with gr.Blocks(title="GPU Dropdown Test") as demo: gr.Markdown("# GPU Dropdown Test") with gr.Row(): gpu_dropdown = gr.Dropdown( label="Select GPU", choices=gpu_list, value=gpu_list[0] if gpu_list else None, interactive=True, allow_custom_value=False, scale=4 ) refresh_btn = gr.Button("🔄 Refresh", scale=1) output_text = gr.Textbox( label="Selected", value=f"Current selection: {gpu_list[0] if gpu_list else 'None'}", interactive=False ) status_text = gr.Textbox( label="Status", value=f"Detected {len(gpu_list)} options: {', '.join(gpu_list)}", interactive=False, lines=2 ) # Event handlers gpu_dropdown.change(on_gpu_change, inputs=[gpu_dropdown], outputs=[output_text]) refresh_btn.click(refresh_gpus, outputs=[gpu_dropdown]) if __name__ == "__main__": demo.launch(debug=True)