''' ChatGPT + Robotics Gradio demo. Author: Sai Vemprala For details, please check out our blog post: https://aka.ms/ChatGPT-Robotics, and our paper: https://www.microsoft.com/en-us/research/uploads/prod/2023/02/ChatGPT___Robotics.pdf In this demo, we provide a quick way to interact with ChatGPT in robotics settings using some custom prompts. As seen in our paper, we provide prompts for several scenarios: robot manipulation, drone navigation (in a simulated setting (airsim) as well as real life), and embodied AI. embodied_agent_closed_loop is an experimental setting where observations from a scene can be described to ChatGPT as text. Parts of the code were inspired by https://huggingface.co./spaces/VladislavMotkov/chatgpt_webui/ ''' import gradio as gr from revChatGPT.V1 import Chatbot import glob, os access_token = None def parse_text(text): lines = text.split("\n") for i,line in enumerate(lines): if "```" in line: items = line.split('`') if items[-1]: lines[i] = f'
'
            else:
                lines[i] = f'
' else: if i>0: lines[i] = '
'+line.replace(" ", " ") return "".join(lines) def configure_chatgpt(info): access_token = info config = {} config.update({"access_token": access_token}) global chatgpt chatgpt = Chatbot(config=config) def ask(prompt): message = "" for data in chatgpt.ask(prompt): message = data["message"] return parse_text(message) def query_chatgpt(inputs, history, message): history = history or [] output = ask(inputs) history.append((inputs, output)) return history, history, '' def initialize_prompt(prompt_type, history): history = history or [] if prompt_type: prompt_file = './prompts/' + str(prompt_type) + '.txt' with open(prompt_file, "r") as f: prompt = f.read() output = ask(prompt) history.append(("", output)) return history, history def display_prompt(show, prompt_type): if not prompt_type: show = False return 'Error - prompt not selected' else: if show: prompt_file = './prompts/' + str(prompt_type) + '.txt' with open(prompt_file, "r") as f: prompt = f.read() return prompt else: return '' with gr.Blocks() as demo: gr.Markdown("""

ChatGPT + Robotics

""") gr.Markdown( "This is a companion app to the work [ChatGPT for Robotics: Design Principles and Model Abilities](https://aka.ms/ChatGPT-Robotics). See [README](https://huggingface.co./spaces/microsoft/ChatGPT-Robotics/blob/main/README.md) for instructions.") if not access_token: gr.Markdown("""

Login to ChatGPT

""") with gr.Row(): with gr.Group(): info = gr.Textbox(placeholder="Enter access token here (from https://chat.openai.com/api/auth/session)", label="ChatGPT Login") with gr.Row(): login = gr.Button("Login") login.click(configure_chatgpt, inputs=[info]) l=os.listdir('./prompts') li=[x.split('.')[0] for x in l] gr.Markdown("""

Initial Prompt (based on scenario)

""") prompt_type = gr.components.Dropdown(li, label="Select sample prompt", value=None) show_prompt = gr.Checkbox(label="Display prompt") prompt_display = gr.Textbox(interactive=False, label="Prompt") show_prompt.change(fn=display_prompt, inputs=[show_prompt, prompt_type], outputs=prompt_display) initialize = gr.Button(value="Initialize") gr.Markdown("""

Conversation

""") chatgpt_robot = gr.Chatbot() message = gr.Textbox(placeholder="Enter query", label="") state = gr.State() initialize.click(fn=initialize_prompt, inputs=[prompt_type, state], outputs=[chatgpt_robot, state]) message.submit(query_chatgpt, inputs=[message, state], outputs=[chatgpt_robot, state, message]) demo.launch()