WalisonCruz/function-gemma
0
1"""The Files page for the Trackio UI."""2 3import os4from pathlib import Path5 6import gradio as gr7 8try:9 import trackio.utils as utils10 from trackio.ui import fns11except ImportError:12 import utils13 from ui import fns14 15 16def get_files_path(project: str | None) -> str | None:17 """Get the files directory path for a project. If the directory does not exist, returns None."""18 if not project:19 return None20 files_dir = utils.MEDIA_DIR / project / "files"21 if not files_dir.exists():22 return None23 return str(files_dir)24 25 26def update_file_explorer(project: str | None):27 """Update the file explorer based on the selected project."""28 files_path = get_files_path(project)29 if files_path:30 return gr.FileExplorer(root_dir=files_path, visible=True)31 else:32 return gr.FileExplorer(visible=False)33 34 35def extract_files(project: str, files_or_diectories: list[str | Path]):36 """Extract files from a list of files or directories."""37 files = []38 root_dir = Path(get_files_path(project))39 for file_or_directory in files_or_diectories:40 if os.path.isfile(file_or_directory):41 files.append(str(root_dir / file_or_directory))42 return files43 44 45with gr.Blocks() as files_page:46 with gr.Sidebar() as sidebar:47 logo_urls = utils.get_logo_urls()48 logo = gr.Markdown(49 f"""50 <img src='{logo_urls["light"]}' width='80%' class='logo-light'>51 <img src='{logo_urls["dark"]}' width='80%' class='logo-dark'> 52 """53 )54 project_dd = gr.Dropdown(label="Project", allow_custom_value=True)55 56 navbar = gr.Navbar(57 value=[58 ("Metrics", ""),59 ("Media & Tables", "/media"),60 ("Runs", "/runs"),61 ("Files", "/files"),62 ],63 main_page_name=False,64 )65 timer = gr.Timer(value=1)66 67 gr.Markdown("## Files")68 file_explorer = gr.FileExplorer(label="Uploaded Files", visible=False)69 file_downloader = gr.Files(label="Download Selected Files")70 71 gr.on(72 [timer.tick],73 fn=lambda: gr.Dropdown(info=fns.get_project_info()),74 outputs=[project_dd],75 show_progress="hidden",76 api_visibility="private",77 )78 79 gr.on(80 [files_page.load],81 fn=fns.get_projects,82 outputs=project_dd,83 show_progress="hidden",84 queue=False,85 api_visibility="private",86 ).then(87 fn=update_file_explorer,88 inputs=[project_dd],89 outputs=[file_explorer],90 show_progress="hidden",91 api_visibility="private",92 queue=False,93 ).then(94 fns.update_navbar_value,95 inputs=[project_dd],96 outputs=[navbar],97 show_progress="hidden",98 api_visibility="private",99 queue=False,100 )101 102 gr.on(103 [project_dd.change],104 fn=update_file_explorer,105 inputs=[project_dd],106 outputs=[file_explorer],107 show_progress="hidden",108 api_visibility="private",109 queue=False,110 ).then(111 fns.update_navbar_value,112 inputs=[project_dd],113 outputs=[navbar],114 show_progress="hidden",115 api_visibility="private",116 queue=False,117 )118 119 gr.on(120 [file_explorer.change],121 fn=extract_files,122 inputs=[project_dd, file_explorer],123 outputs=[file_downloader],124 )125 