Spaces:
Sleeping
Sleeping
| 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() |