Spaces:
Sleeping
Sleeping
| 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) | |