import os import gradio as gr import logging from gradio.components import Component from src.webui.webui_manager import WebuiManager from src.utils import config logger = logging.getLogger(__name__) async def close_browser(webui_manager: WebuiManager): """ Close browser """ if webui_manager.bu_current_task and not webui_manager.bu_current_task.done(): webui_manager.bu_current_task.cancel() webui_manager.bu_current_task = None if webui_manager.bu_browser_context: logger.info("⚠️ Closing browser context when changing browser config.") await webui_manager.bu_browser_context.close() webui_manager.bu_browser_context = None if webui_manager.bu_browser: logger.info("⚠️ Closing browser when changing browser config.") await webui_manager.bu_browser.close() webui_manager.bu_browser = None def create_browser_settings_tab(webui_manager: WebuiManager): """ Creates a browser settings tab. """ input_components = set(webui_manager.get_components()) tab_components = {} with gr.Group(): with gr.Row(): browser_binary_path = gr.Textbox( label="Browser Binary Path", lines=1, interactive=True, placeholder="e.g. '/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome'" ) browser_user_data_dir = gr.Textbox( label="Browser User Data Dir", lines=1, interactive=True, placeholder="Leave it empty if you use your default user data", ) with gr.Group(): with gr.Row(): use_own_browser = gr.Checkbox( label="Use Own Browser", value=False, info="Use your existing browser instance", interactive=True ) keep_browser_open = gr.Checkbox( label="Keep Browser Open", value=os.getenv("KEEP_BROWSER_OPEN", True), info="Keep Browser Open between Tasks", interactive=True ) headless = gr.Checkbox( label="Headless Mode", value=os.getenv("KEEP_BROWSER_HEADLESS", True), info="Run browser without GUI", interactive=True ) disable_security = gr.Checkbox( label="Disable Security", value=False, info="Disable browser security", interactive=True ) with gr.Group(): with gr.Row(): window_w = gr.Number( label="Window Width", value=1280, info="Browser window width", interactive=True ) window_h = gr.Number( label="Window Height", value=1100, info="Browser window height", interactive=True ) with gr.Group(): with gr.Row(): cdp_url = gr.Textbox( label="CDP URL", value=os.getenv("BROWSER_CDP", None), info="CDP URL for browser remote debugging", interactive=True, ) wss_url = gr.Textbox( label="WSS URL", info="WSS URL for browser remote debugging", interactive=True, ) with gr.Group(): with gr.Row(): save_recording_path = gr.Textbox( label="Recording Path", placeholder="e.g. ./tmp/record_videos", info="Path to save browser recordings", interactive=True, ) save_trace_path = gr.Textbox( label="Trace Path", placeholder="e.g. ./tmp/traces", info="Path to save Agent traces", interactive=True, ) with gr.Row(): save_agent_history_path = gr.Textbox( label="Agent History Save Path", value="./tmp/agent_history", info="Specify the directory where agent history should be saved.", interactive=True, ) save_download_path = gr.Textbox( label="Save Directory for browser downloads", value="./tmp/downloads", info="Specify the directory where downloaded files should be saved.", interactive=True, ) tab_components.update( dict( browser_binary_path=browser_binary_path, browser_user_data_dir=browser_user_data_dir, use_own_browser=use_own_browser, keep_browser_open=keep_browser_open, headless=headless, disable_security=disable_security, save_recording_path=save_recording_path, save_trace_path=save_trace_path, save_agent_history_path=save_agent_history_path, save_download_path=save_download_path, cdp_url=cdp_url, wss_url=wss_url, window_h=window_h, window_w=window_w, ) ) webui_manager.add_components("browser_settings", tab_components) async def close_wrapper(): """Wrapper for handle_clear.""" await close_browser(webui_manager) headless.change(close_wrapper) keep_browser_open.change(close_wrapper) disable_security.change(close_wrapper) use_own_browser.change(close_wrapper)