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)