@@ -298,6 +298,11 @@ def run_gradio(results_dir: Path):
298298 action_info = gr .Markdown (label = "Action Info" , elem_classes = "my-markdown" )
299299 state_error = gr .Markdown (label = "Next Step Error" , elem_classes = "my-markdown" )
300300
301+ with gr .Row (variant = "panel" ):
302+ prev_btn = gr .Button ("◀ Previous" , size = "md" , scale = 0 )
303+ next_btn = gr .Button ("Next ▶" , size = "md" , scale = 0 )
304+ step_indicator = gr .Markdown ("**Step 0/0**" )
305+
301306 profiling_gr = gr .Image (
302307 label = "Profiling" , show_label = False , interactive = False , show_download_button = False
303308 )
@@ -533,13 +538,38 @@ def run_gradio(results_dir: Path):
533538 outputs = [hidden_key_input , step_id ],
534539 )
535540
541+ # Simple navigation button events - reuse keyboard logic
542+ prev_btn .click (
543+ lambda step_id : handle_key_event ("Cmd+Left" , step_id )[1 ],
544+ inputs = [step_id ],
545+ outputs = [step_id ],
546+ )
547+ next_btn .click (
548+ lambda step_id : handle_key_event ("Cmd+Right" , step_id )[1 ],
549+ inputs = [step_id ],
550+ outputs = [step_id ],
551+ )
552+
553+ # Update step indicator display
554+ def format_step_indicator (step_id ):
555+ global info
556+ if not step_id or not info .exp_result or not info .exp_result .steps_info :
557+ return "Step 0/0"
558+ # 1-based for user, total steps is len-1 (last is terminal)
559+ current = (step_id .step + 1 ) if step_id .step is not None else 0
560+ total = max (len (info .exp_result .steps_info ) - 1 , 0 )
561+ return f"Step { current } /{ total } "
562+
563+ step_id .change (format_step_indicator , inputs = [step_id ], outputs = [step_indicator ])
564+
536565 demo .queue ()
537566
538567 do_share = os .getenv ("AGENTXRAY_SHARE_GRADIO" , "false" ).lower () == "true"
539568 port = os .getenv ("AGENTXRAY_APP_PORT" , None )
569+ server_name = "0.0.0.0" if os .getenv ("AGENTXRAY_PUBLIC" , "false" ) == "true" else "127.0.0.1"
540570 if isinstance (port , str ):
541571 port = int (port )
542- demo .launch (server_port = port , share = do_share )
572+ demo .launch (server_name = server_name , server_port = port , share = do_share )
543573
544574
545575def handle_key_event (key_event , step_id : StepId ):
@@ -941,7 +971,7 @@ def get_episode_info(info: Info):
941971
942972 info = f"""\
943973 ### { env_args .task_name } (seed: { env_args .task_seed } )
944- ### Step { info . step } / { len ( steps_info ) - 1 } (Reward: { cum_reward :.1f} )
974+ ### (Reward: { cum_reward :.1f} )
945975
946976**Goal:**
947977
0 commit comments