import re import os os.system(f"pip install open-interpreter") os.system(f"pip install matplotlib") import json import gradio as gr from interpreter import interpreter import time import matplotlib matplotlib.use('Agg') #get openaiapikey from environment variable openaiapikey = os.environ.get('OPENAI_API_KEY') #install open-interpreter package os.system(f"pip install open-interpreter") interpreter.auto_run = True interpreter.llm.model = "gpt-4-turbo" interpreter.custom_instructions = "First ask the user what they want to do. Based on the input, describe the next steps. If user agrees, proceed; if not, ask what they want next.If it is anything to display , always at the end open up the file." def update_bot(text, chatbot): response_json = interpreter.chat(text, stream=True, display=False) formatted_response, images = json_to_markdown(response_json) message = " ".join(formatted_response) if message: chatbot.append(("Assistant", message)) for img_path in images: chatbot.append(("Assistant", img_path)) # Append image paths directly return chatbot, "" def new_chat(): interpreter.messages = [] return [], "" def create_chat_widget(): with gr.Blocks() as chatblock: chatbot = gr.Chatbot( [], elem_id="chatbot", elem_classes="chatbot", layout="llm", bubble_full_width=False, height=600, ) txt = gr.Textbox( scale=4, show_label=False, placeholder="Enter text and press enter to chat with the bot.", container=False, ) new_chat_button = gr.Button( "New Chat", scale=3, interactive=True, ) new_chat_button.click(new_chat, [], [chatbot, txt]) txt.submit(update_bot, [txt, chatbot], [chatbot, txt]) return chatblock def json_to_markdown(json_data): full_message = [] images = [] # Regex to detect URLs; this is a simple version and might need to be adapted url_pattern = r'(http[s]?://\S+|sandbox:/\S+)' for item in json_data: if item['role'] == 'assistant' and item['type'] == 'message': content = item.get('content', " ") # Find all URLs in the content urls = re.findall(url_pattern, content) # Append any detected URLs to the images list images.extend(urls) # Remove URLs from the content content = re.sub(url_pattern, "", content).strip() if content: full_message.append(content) return full_message, images with gr.Blocks() as demo: with gr.Tab("HEXON Chatbot Assignment"): chat_interface = create_chat_widget() demo.launch()