diff --git a/MultimodalQnA/ui/gradio/multimodalqna_ui_gradio.py b/MultimodalQnA/ui/gradio/multimodalqna_ui_gradio.py index 2f5ec2892f..52828bc7b4 100644 --- a/MultimodalQnA/ui/gradio/multimodalqna_ui_gradio.py +++ b/MultimodalQnA/ui/gradio/multimodalqna_ui_gradio.py @@ -39,6 +39,12 @@ text-align: center; display:block; } + +#cbg .wrap { + display: flex; + flex-direction: column; + align-items: start; +} """ tmp_upload_folder = "/tmp/gradio/" @@ -501,27 +507,40 @@ def get_files(): try: response = requests.post(dataprep_get_file_addr, headers=headers) logger.info(response.status_code) - files = response.json() - if files: - html_content = "" - yield (gr.HTML(html_content, visible=True, max_height=200)) + vector_store_files = response.json() + if vector_store_files: + yield ( + vector_store_files, + None, + gr.CheckboxGroup( + vector_store_files, label=f"Total files: {len(vector_store_files)}", elem_id="cbg", visible=True + ), + ) return else: - yield (gr.HTML("Vector store is empty.", visible=True)) + yield (None, gr.Markdown("**Vector store is empty**"), None) return except Exception as e: logger.info(f"Error getting files from vector store: {str(e)}") -def delete_files(): +def delete_files(options, selected): import json - data = {"file_path": "all"} + updated_options = [f for f in options if f not in selected] + + data = {"file_path": selected} try: response = requests.post(dataprep_delete_file_addr, headers=headers, data=json.dumps(data)) logger.info(response.status_code) - yield (gr.update(value="Deleted all files!")) - return + return ( + updated_options, + gr.Markdown(f"**Deleted {len(selected)} files**"), + gr.CheckboxGroup( + choices=updated_options, label=f"Total files: {len(updated_options)}", visible=True, elem_id="cbg" + ), + [], + ) except Exception as e: logger.info(f"Error deleting files from vector store: {str(e)}") @@ -713,14 +732,18 @@ def verify_audio_caption_type(file, request: gr.Request): with gr.Blocks() as vector_store: gr.Markdown("# Uploaded Files") + state = gr.State([]) + with gr.Row(): with gr.Column(scale=6): - files = gr.HTML(visible=False) + selection_text = gr.Markdown('**Hit "↻ Refresh" to show uploaded files**') + files_cbg = gr.CheckboxGroup(choices=[], visible=False, elem_id="cbg") with gr.Column(scale=3): refresh_btn = gr.Button(value="↻ Refresh", interactive=True, variant="primary") delete_btn = gr.Button(value="🗑️ Delete", interactive=True, variant="stop") - refresh_btn.click(get_files, None, [files]) - delete_btn.click(delete_files, None, [files]) + + refresh_btn.click(get_files, None, [state, selection_text, files_cbg]) + delete_btn.click(delete_files, [state, files_cbg], [state, selection_text, files_cbg, files_cbg]) with gr.Blocks(css=css) as demo: gr.Markdown("# MultimodalQnA")