codeinterpreter / app.py
aghoraguru's picture
Update app.py
77a601c verified
raw
history blame
2.78 kB
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()