vp-app / app.py
umairahmad1789's picture
Upload 6 files
c71f981 verified
import os
from typing import List, Tuple
import gradio as gr
from assistant import OAIAssistant
import utils
from dotenv import load_dotenv
load_dotenv()
class VisaPolicyAgent:
def __init__(self) -> None:
assistant_id = os.environ.get("ASSISTANT_ID")
vector_store_id = os.environ.get("VECTORSTORE_ID")
self.assistant = OAIAssistant(
assistant_id=assistant_id, vectorstore_id=vector_store_id
)
self.thread_id = self.assistant.create_thread().id
def chat(self, message: str, history: List[str]):
response = self.assistant.chat(message, self.thread_id)
history.append((message, response["answer"]))
return (
"",
history,
)
def create_thread(self):
try:
self.assistant.delete_thread(self.thread_id)
self.thread_id = self.assistant.create_thread().id
gr.Info(message="New thread created. Start as New!")
except Exception as e:
gr.Error(message=f"Unable to create new thread. Error: {e}")
def clear_all(self):
# create new thread
# delete previous files
# create new chatbot
self.create_thread()
gr.Info(message="Created new thread")
try:
assistant_file_ids = self.assistant.get_files_list()
for file_id in assistant_file_ids:
self.assistant.remove_file(file_id=file_id)
gr.Info(message="Deleted files in assistant")
except Exception as e:
gr.Error(message=f"Unable to delete files. Error: {e}")
gr.Info("Chat is cleared.")
return [("Clear Chatbot", "Chatbot cleared.")]
def add_file(self, file: gr.File):
self.assistant.add_file(file)
def bot_response(self, message, history: List[Tuple]) -> List[Tuple]:
response = self.assistant.chat(message, self.thread_id)
history.append((message, response))
return "", history
def create_interface(self):
with gr.Blocks() as demo:
chatbot = gr.Chatbot(height=400)
message = gr.Textbox(
placeholder="Ask me anything",
scale=7,
label="Input message",
)
new_thread_button = gr.Button(value="Create New Thread")
clear_button = gr.Button(value="Clear All")
_ = gr.ClearButton([message, chatbot])
message.submit(
self.bot_response,
inputs=[message, chatbot],
outputs=[message, chatbot],
)
new_thread_button.click(self.create_thread)
clear_button.click(self.clear_all, outputs=chatbot)
return demo
if __name__ == "__main__":
vp_chatbot = VisaPolicyAgent()
interface = vp_chatbot.create_interface()
interface.launch()