Siddartha10's picture
Update app.py
ae37ea4 verified
from dotenv import load_dotenv
from langchain_openai import AzureChatOpenAI
import os
load_dotenv()
import streamlit as st
import pandas as pd
from langchain_community.document_loaders import JSONLoader
import requests
from langchain_openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
llm = AzureChatOpenAI(openai_api_version=os.environ.get("AZURE_OPENAI_VERSION", "2023-07-01-preview"),
azure_deployment=os.environ.get("AZURE_OPENAI_DEPLOYMENT", "gpt4chat"),
azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT", "https://gpt-4-trails.openai.azure.com/"),
api_key=os.environ.get("AZURE_OPENAI_KEY"))
def metadata_func(record: str, metadata: dict) -> dict:
lines = record.split('\n')
locality_line = lines[10]
price_range_line = lines[12]
locality = locality_line.split(': ')[1]
price_range = price_range_line.split(': ')[1]
metadata["location"] = locality
metadata["price_range"] = price_range
return metadata
# Instantiate the JSONLoader with the metadata_func
jq_schema = '.parser[] | to_entries | map("\(.key): \(.value)") | join("\n")'
loader = JSONLoader(
jq_schema=jq_schema,
file_path='data.json',
metadata_func=metadata_func,
)
# Load the JSON file and extract metadata
documents = loader.load()
def get_vectorstore(text_chunks):
embeddings = OpenAIEmbeddings()
# Check if the FAISS index file already exists
if os.path.exists("faiss_index"):
# Load the existing FAISS index
vectorstore = FAISS.load_local("faiss_index", embeddings=embeddings)
print("Loaded existing FAISS index.")
else:
# Create a new FAISS index
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(documents=text_chunks, embedding=embeddings)
# Save the new FAISS index locally
vectorstore.save_local("faiss_index")
print("Created and saved new FAISS index.")
return vectorstore
#docs = new_db.similarity_search(query)
vector = get_vectorstore(documents)
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
from langchain.memory import ConversationSummaryMemory
template = """
context:- I have low budget what is the best hotel in Instanbul?
anser:- The other hotels in instanbul are costly and are not in your budget. so the best hotel in instanbul for you is hotel is xyz."
Don’t give information not mentioned in the CONTEXT INFORMATION.
The system should take into account various factors such as location, amenities, user reviews, and other relevant criteria to
generate informative and personalized explanations.
{context}
Question: {question}
Answer:"""
prompt = PromptTemplate(template=template, input_variables=["context","question"])
chain_type_kwargs = {"prompt": prompt}
chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vector.as_retriever(),
chain_type_kwargs=chain_type_kwargs,
)
def main():
st.title("Hotel Assistant Chatbot")
st.write("Welcome to the Hotel Assistant Chatbot!")
user_input = st.text_input("User Input:")
if st.button("Submit"):
response = chain.run(user_input)
st.text_area("Chatbot Response:", value=response)
if st.button("Exit"):
st.stop()
if __name__ == "__main__":
main()