Spaces:
Sleeping
Sleeping
import os | |
import gradio as gr | |
from utils import * | |
with gr.Blocks(title='LEO Demo') as demo: | |
gr.HTML(value="<h1 align='center'>An Embodied Generalist Agent in 3D World</h1>") | |
gr.HTML(value="<div align='center' style='margin-top:-1em; margin-bottom:-1em;'><img src='/file=assets/leo.svg' width='4%'></div>") | |
# gr.HTML(value="<img src='/file=assets/teaser.png' alt='Teaser' width='760px' style='display: block; margin: auto;'>") | |
gr.HTML(value="<p align='center' style='font-size: 1.2em; color: #485fc7;'><a href='https://arxiv.org/abs/2311.12871' target='_blank'>arXiv</a> | <a href='https://embodied-generalist.github.io/' target='_blank'>Project Page</a> | <a href='https://github.com/embodied-generalist/embodied-generalist' target='_blank'>Code</a></p>") | |
gr.HTML(value="<p align='center' style='font-size: 1.15em;'><i>LEO: an embodied generalist agent capable of perceiving, grounding, reasoning, planning, and acting in 3D world.</i></p>") | |
with gr.Row(): | |
with gr.Column(scale=5): | |
dropdown_scene = gr.Dropdown( | |
choices=MESH_NAMES, | |
value='3RScan-Office', | |
interactive=True, | |
label='Select a 3D scene', | |
) | |
model_3d = gr.Model3D( | |
value=os.path.join(MESH_DIR, f'3RScan-Office.glb'), | |
clear_color=[0.0, 0.0, 0.0, 0.0], | |
label='3D Scene', | |
camera_position=(90, 30, 10), | |
height=659, | |
) | |
gr.HTML( | |
"""<center><strong> | |
π SCROLL and DRAG on the 3D Scene | |
to zoom in/out and rotate. Press CTRL and DRAG to pan. | |
</strong></center> | |
""" | |
) | |
with gr.Column(scale=5): | |
dropdown_conversation_mode = gr.Dropdown( | |
choices=['Single-round mode', 'Multi-round mode'], | |
value='Single-round mode', | |
interactive=True, | |
label='Select conversation mode', | |
) | |
chatbot = gr.Chatbot(label='Chat with LEO') | |
with gr.Row(): | |
with gr.Column(scale=8): | |
user_chat_input = gr.Textbox( | |
placeholder="Enter text here to chat with LEO", | |
show_label=False, | |
autofocus=True, | |
) | |
with gr.Column(scale=2, min_width=0): | |
send_button = gr.Button('Send', variant='primary', scale=2) | |
with gr.Row(): | |
upvote_button = gr.Button(value='π Upvote', interactive=False) | |
downvote_button = gr.Button(value='π Downvote', interactive=False) | |
flag_button = gr.Button(value='β οΈ Flag', interactive=False) | |
clear_button = gr.Button(value='ποΈ Clear', interactive=False) | |
with gr.Row(): | |
with gr.Accordion(label="Examples for user instruction:", open=True): | |
gr.Examples( | |
examples=[ | |
["What color is the floor?"], | |
["Is there a blackboard in the room?"], | |
["How many chairs are there in this room?"], | |
["Describe this scene."], | |
["What is this room used for?"], | |
["Plan for the task: tidy up and arrange this room."], | |
], | |
inputs=user_chat_input, | |
) | |
# generation_config | |
with gr.Accordion('Parameters', open=False): | |
repetition_penalty = gr.Slider( | |
minimum=0.0, | |
maximum=10.0, | |
value=3.0, | |
step=1.0, | |
interactive=True, | |
label='Repetition penalty', | |
) | |
length_penalty = gr.Slider( | |
minimum=0.0, | |
maximum=10.0, | |
value=1.0, | |
step=1.0, | |
interactive=True, | |
label="Length penalty", | |
) | |
gr.Markdown("### Terms of Service") | |
gr.HTML( | |
"""By using this service, users are required to agree to the following terms: | |
the service is a research preview intended for non-commercial use only | |
and may collect user dialogue data for future research.""" | |
) | |
gr.Markdown("### Acknowledgment") | |
gr.HTML( | |
"""Template adapted from <a href="https://llava.hliu.cc/">LLaVA</a> and | |
<a href="http://sled-whistler.eecs.umich.edu:7777/">LLM-Grounder</a>.""" | |
) | |
# Event handling | |
button_list = [upvote_button, downvote_button, flag_button, clear_button] | |
dropdown_scene.change( | |
fn=change_scene, | |
inputs=[dropdown_scene], | |
outputs=[model_3d, chatbot], | |
queue=False, | |
) | |
dropdown_conversation_mode.change( | |
fn=clear_history, | |
inputs=[], | |
outputs=[chatbot, user_chat_input] + button_list, | |
queue=False, | |
) | |
user_chat_input.submit( | |
fn=receive_instruction, | |
inputs=[chatbot, user_chat_input], | |
outputs=[chatbot, user_chat_input, send_button] + button_list, | |
queue=False, | |
).then( | |
fn=generate_response, | |
inputs=[ | |
chatbot, | |
dropdown_scene, | |
dropdown_conversation_mode, | |
repetition_penalty, | |
length_penalty, | |
], | |
outputs=[chatbot, send_button] + button_list, | |
scroll_to_output=True, | |
) | |
send_button.click( | |
fn=receive_instruction, | |
inputs=[chatbot, user_chat_input], | |
outputs=[chatbot, user_chat_input, send_button] + button_list, | |
queue=False, | |
).then( | |
fn=generate_response, | |
inputs=[ | |
chatbot, | |
dropdown_scene, | |
dropdown_conversation_mode, | |
repetition_penalty, | |
length_penalty, | |
], | |
outputs=[chatbot, send_button] + button_list, | |
scroll_to_output=True, | |
) | |
upvote_button.click( | |
upvote_response, | |
[chatbot, dropdown_scene, dropdown_conversation_mode], | |
[user_chat_input, upvote_button, downvote_button, flag_button], | |
queue=False, | |
) | |
downvote_button.click( | |
downvote_response, | |
[chatbot, dropdown_scene, dropdown_conversation_mode], | |
[user_chat_input, upvote_button, downvote_button, flag_button], | |
queue=False, | |
) | |
flag_button.click( | |
flag_response, | |
[chatbot, dropdown_scene, dropdown_conversation_mode], | |
[user_chat_input, upvote_button, downvote_button, flag_button], | |
queue=False, | |
) | |
clear_button.click( | |
fn=clear_history, | |
inputs=[], | |
outputs=[chatbot, user_chat_input] + button_list, | |
queue=False, | |
) | |
demo.queue().launch(share=True, allowed_paths=['assets']) | |