""" 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).
This space allows you to work with ChatGPT to get it to generate code for robotics tasks, such as get a robot arm to manipulate objects, or have a drone fly around in a 3D world.
See [README](https://huggingface.co/spaces/microsoft/ChatGPT-Robotics/blob/main/README.md) for detailed 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 for ChatGPT

""") prompt_type = gr.components.Dropdown( li, label="Select sample prompt", value=None, info="Choose a prompt based on the robot/scenario you're interested in (e.g. pick airsim or real_drone to start a drone scenario)", ) 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="", info='Talk to ChatGPT and ask it to help with specific tasks! For example, "take off and reach an altitude of five meters"', ) 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()