devon / app.py
lordspline's picture
Upload folder using huggingface_hub
4410066 verified
import gradio as gr
import os
import time
from agent import DevOn
image_temp = "https://miro.medium.com/v2/resize:fit:1200/0*n-2bW82Z6m6U2bij.jpeg"
# devon = DevOn(
# editor_image=image_temp, browser_image=image_temp, scratchpad_image=image_temp
# )
devon = None
# multion_api_key = ""
# openai_api_key = ""
# replit_email = ""
# replit_password = ""
def add_message(history, message):
# for x in message["files"]:
# history.append(((x,), None))
if message["text"] is not None:
history.append((message["text"], None))
return history, gr.MultimodalTextbox(value=None, interactive=False)
# def multion_api_key_update(x):
# # global multion_api_key
# multion_api_key = x
# def openai_api_key_update(x):
# # global openai_api_key
# openai_api_key = x
# def replit_email_update(x):
# # global replit_email
# replit_email = x
# def replit_password_update(x):
# # global replit_password
# replit_password = x
def bot(
history,
multion_api_key_in,
openai_api_key_in,
replit_email_in,
replit_password_in,
local,
):
if len(multion_api_key_in) == 0:
raise gr.Error("MultiOn API Key is Required.")
if len(openai_api_key_in) == 0:
raise gr.Error("OpenAI API Key is Required.")
start_time = time.time()
devon = DevOn(
editor_image=image_temp,
browser_image=image_temp,
scratchpad_image=image_temp,
multion_api_key=multion_api_key_in,
openai_api_key=openai_api_key_in,
replit_email=replit_email_in,
replit_password=replit_password_in,
local=local,
)
for r in devon.run(history[-1][0]):
curr_time = time.time()
print(curr_time - start_time)
if curr_time - start_time >= 300:
break
text, editor_image, browser_image, scratchpad_image = r
if type(text) == str:
history.append((None, text))
if editor_image is None:
editor_image = devon.editor_image
browser_image = devon.browser_image
scratchpad_image = devon.scratchpad_image
yield history, editor_image, browser_image, scratchpad_image
with gr.Blocks(css="footer {visibility: hidden}") as demo:
md = gr.Markdown(
"""Notes:
- Use "Execute Locally" for better results.
- For local execution, you need to download the [MultiOn Browser Extension](https://chromewebstore.google.com/detail/multion/ddmjhdbknfidiopmbaceghhhbgbpenmm) and have "API Enabled" in the settings.
- The Huggingface Spaces demo will timeout after 5 minutes by default. To test with longer tasks, [clone the repo](https://github.com/lordspline/DevOn) and run DevOn locally."""
)
with gr.Row():
with gr.Column():
multion_api_key_in = gr.Textbox(label="MultiOn API Key")
openai_api_key_in = gr.Textbox(label="OpenAI API Key")
with gr.Column():
replit_email_in = gr.Textbox(label="Replit Email")
replit_password_in = gr.Textbox(label="Replit Password")
with gr.Row():
with gr.Column():
chatbot = gr.Chatbot(
[], elem_id="chatbot", bubble_full_width=False, height=300
)
chat_input = gr.MultimodalTextbox(
value={
"text": "benchmark the perplexity api's resposne time with the api key abcdef"
},
interactive=True,
file_types=["text"],
placeholder="Enter message or upload file...",
show_label=False,
)
with gr.Row():
local = gr.Checkbox(True, label="Execute Locally")
terminate = gr.Button("Terminate")
with gr.Column():
if devon:
editor_view = gr.Image(
devon.editor_image,
label="Editor",
)
else:
editor_view = gr.Image()
with gr.Row():
with gr.Column():
if devon:
browser_view = gr.Image(
devon.browser_image,
label="Browser",
)
else:
browser_view = gr.Image()
with gr.Column():
if devon:
scratchpad_view = gr.Image(
devon.scratchpad_image,
label="Scratchpad",
)
else:
scratchpad_view = gr.Image()
chat_msg = chat_input.submit(
add_message, [chatbot, chat_input], [chatbot, chat_input]
)
bot_msg = chat_msg.then(
bot,
[
chatbot,
multion_api_key_in,
openai_api_key_in,
replit_email_in,
replit_password_in,
local,
],
[chatbot, editor_view, browser_view, scratchpad_view],
api_name="bot_response",
)
bot_msg.then(lambda: gr.MultimodalTextbox(interactive=True), None, [chat_input])
# multion_api_key_in.change(multion_api_key_update, multion_api_key_in)
# openai_api_key_in.change(openai_api_key_update, openai_api_key_in)
# replit_email_in.change(replit_email_update, replit_email_in)
# replit_password_in.change(replit_password_update, replit_password_in)
terminate.click(fn=None, inputs=None, outputs=None, cancels=[bot_msg])
# chatbot.like(print_like_dislike, None, None)
if __name__ == "__main__":
demo.queue()
demo.launch(debug=True)