Spaces:
Build error
Build error
''' | |
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'<pre><code class="{items[-1]}">' | |
else: | |
lines[i] = f'</code></pre>' | |
else: | |
if i>0: | |
lines[i] = '<br/>'+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(("<ORIGINAL PROMPT>", 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("""<h3><center>ChatGPT + Robotics</center></h3>""") | |
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("""<h4>Login to ChatGPT</h4>""") | |
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("""<h4>Initial Prompt (based on scenario)</h4>""") | |
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("""<h4>Conversation</h4>""") | |
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() |