testbot_v4 / app.py
soyleyicicem's picture
Update app.py
4f47415 verified
raw
history blame
7.44 kB
import uuid
from wrappers import *
from embedding_loader import *
from initialize_db import QdrantClientInitializer
from pdf_loader import PDFLoader
from IPython.display import display, Markdown
import gradio as gr
from langchain_core.messages import HumanMessage, AIMessage
from langchain.memory import ConversationBufferMemory
from langchain_core.chat_history import InMemoryChatMessageHistory
embeddings = import_embedding()
AZURE_OPENAI_KEY = os.getenv('azure_api')
os.environ['AZURE_OPENAI_KEY'] = AZURE_OPENAI_KEY
openai.api_version = "2024-02-15-preview" # change it with your own version
openai.azure_endpoint = os.getenv('azure_endpoint')
model = "gpt35turbo" # deployment name on Azure OPENAI Studio
myLLM = AzureChatOpenAI(azure_endpoint = openai.azure_endpoint,
api_key=AZURE_OPENAI_KEY,
api_version=openai.api_version,
temperature=0,
streaming=True,
model = model,)
obj_qdrant = QdrantClientInitializer()
client = obj_qdrant.initialize_db()
obj_loader = PDFLoader()
# def print_result(question, result):
# output_text = f"""### Question:
# {question}
# ### Answer:
# {result}
# """
# return(output_text)
# def format_chat_prompt(chat_history):
# prompt = []
# for turn in chat_history:
# user_message, ai_message = turn
# prompt.append(HumanMessage(user_message))
# prompt.append(AIMessage(ai_message))
# chat_history = InMemoryChatMessageHistory(messages=prompt)
# memory = ConversationBufferMemory(chat_memory=chat_history, memory_key="history", input_key="question")
# return memory
# def chat(question, manual, history):
# history = history or []
# memory = format_chat_prompt(history)
# manual_list = {"Toyota_Corolla_2024_TR": -8580416610875007536,
# "Renault_Clio_2024_TR":-5514489544983735006,
# "Fiat_Egea_2024_TR":-2026113796962100812}
# collection_list = {"Toyota_Corolla_2024_TR": "TOYOTA_MANUAL_COLLECTION_EMBED3",
# "Renault_Clio_2024_TR": "RENAULT_MANUAL_COLLECTION_EMBED3",
# "Fiat_Egea_2024_TR": "FIAT_MANUAL_COLLECTION_EMBED3"}
# collection_name = collection_list[f"{manual}"]
# db = obj_loader.load_from_database(embeddings=embeddings, collection_name=collection_name)
# CAR_ID = manual_list[f"{manual}"]
# wrapper = Wrappers(collection_name, client, embeddings, myLLM, db, CAR_ID, memory)
# inputs = {"question": question, "iter_halucination": 0}
# app = wrapper.lagchain_graph()
# for output in app.stream(inputs):
# for key, value in output.items():
# pprint(f"Finished running: {key}:")
# # display(Markdown(print_result(question, value["generation"]['text'])))
# response = value["generation"]['text']
# history.append((question, response))
# point_id = uuid.uuid4().hex
# DatabaseOperations.save_user_history_demo(client, "USER_COLLECTION_EMBED3", question, response, embeddings, point_id, manual)
# return '', history
# def vote(data: gr.LikeData):
# if data.liked:
# print("You upvoted this response: ")
# return "OK"
# else:
# print("You downvoted this response: " )
# return "NOK"
# manual_list = ["Toyota_Corolla_2024_TR", "Renault_Clio_2024_TR", "Fiat_Egea_2024_TR"]
# with gr.Blocks() as demo:
# chatbot = gr.Chatbot(height=600)
# manual = gr.Dropdown(label="Kullanım Kılavuzları", value="Toyota_Corolla_2024_TR", choices=manual_list)
# textbox = gr.Textbox()
# clear = gr.ClearButton(components=[textbox, chatbot], value='Clear console')
# textbox.submit(chat, [textbox, manual, chatbot], [textbox, chatbot])
# chatbot.like(vote, None, None) # Adding this line causes the like/dislike icons to appear in your chatbot
# # gr.close_all()
# demo.launch(share=True)
def print_result(question, result):
output_text = f"""### Question:
{question}
### Answer:
{result}
"""
return(output_text)
def format_chat_prompt(chat_history):
prompt = []
print(chat_history)
for turn in chat_history:
user_message, ai_message = turn
prompt.append(HumanMessage(user_message))
prompt.append(AIMessage(ai_message))
chat_history = InMemoryChatMessageHistory(messages=prompt)
memory = ConversationBufferMemory(chat_memory=chat_history, memory_key="history", input_key="question")
return memory
liked_state = gr.State(None)
last_interaction = gr.State(None)
def chat(question, manual, history, liked):
history = history or []
memory = format_chat_prompt(history)
manual_list = {"Toyota_Corolla_2024_TR": -8580416610875007536,
"Renault_Clio_2024_TR":-5514489544983735006,
"Fiat_Egea_2024_TR":-2026113796962100812}
collection_list = {"Toyota_Corolla_2024_TR": "TOYOTA_MANUAL_COLLECTION_EMBED3",
"Renault_Clio_2024_TR": "RENAULT_MANUAL_COLLECTION_EMBED3",
"Fiat_Egea_2024_TR": "FIAT_MANUAL_COLLECTION_EMBED3"}
collection_name = collection_list[manual]
db = obj_loader.load_from_database(embeddings=embeddings, collection_name=collection_name)
CAR_ID = manual_list[manual]
wrapper = Wrappers(collection_name, client, embeddings, myLLM, db, CAR_ID, memory)
inputs = {"question": question, "iter_halucination": 0}
app = wrapper.lagchain_graph()
for output in app.stream(inputs):
for key, value in output.items():
pprint(f"Finished running: {key}:")
response = value["generation"]['text']
history.append((question, response))
# Store the last interaction without saving to the database yet
last_interaction.value = {
"question": question,
"response": response,
"manual": manual,
"point_id": uuid.uuid4().hex
}
return '', history
def save_last_interaction(feedback):
if last_interaction.value:
DatabaseOperations.save_user_history_demo(
client,
"USER_COLLECTION_EMBED3",
last_interaction.value["question"],
last_interaction.value["response"],
embeddings,
last_interaction.value["point_id"],
last_interaction.value["manual"],
feedback
)
last_interaction.value = None
manual_list = ["Toyota_Corolla_2024_TR", "Renault_Clio_2024_TR", "Fiat_Egea_2024_TR"]
with gr.Blocks() as demo:
chatbot = gr.Chatbot(height=600)
manual = gr.Dropdown(label="Kullanım Kılavuzları", value="Toyota_Corolla_2024_TR", choices=manual_list)
textbox = gr.Textbox()
clear = gr.ClearButton(components=[textbox, chatbot], value='Clear console')
def handle_like(data: gr.LikeData):
liked_state.value = data.liked
if liked_state.value is not None:
feedback = "LIKE" if liked_state.value else "DISLIKE"
save_last_interaction(feedback)
def gradio_chat(question, manual, history):
save_last_interaction("N/A") # Save previous interaction before starting a new one
return chat(question, manual, history, liked_state.value)
textbox.submit(gradio_chat, [textbox, manual, chatbot], [textbox, chatbot])
chatbot.like(handle_like, None, None)
demo.launch()