| from openai import OpenAI |
| import decoder_output |
| import cut_text |
| import hotel_chatbot |
| import traversaal |
| import streamlit as st |
| from qdrant_client import QdrantClient |
| from neural_searcher import NeuralSearcher |
|
|
|
|
| def home_page(): |
| |
|
|
| st.markdown("<h1 style='text-align: center; color: white;'>TraverGo</h1>", unsafe_allow_html=True) |
| st.markdown("<h2 style='text-align: center; color: white;'>Find any type of Hotel you want !</h2>", unsafe_allow_html=True) |
| st.session_state["value"] = None |
|
|
| def search_hotels(): |
| query = st.text_input("Enter your hotel preferences:", placeholder ="clean and cheap hotel with good food and gym") |
|
|
| if "load_state" not in st.session_state: |
| st.session_state.load_state = False; |
|
|
| |
| if query or st.session_state.load_state: |
| st.session_state.load_state=True; |
| neural_searcher = NeuralSearcher(collection_name="hotel_descriptions") |
| results = sorted(neural_searcher.search(query), key=lambda d: d['sentiment_rate_average']) |
| st.subheader("Hotels") |
| for hotel in results: |
| explore_hotel(hotel, query) |
|
|
| def explore_hotel(hotel, query): |
| if "decoder" not in st.session_state: |
| st.session_state['decoder'] = [0]; |
|
|
| button = st.checkbox(hotel['hotel_name']) |
|
|
|
|
| if not button: |
| if st.session_state.decoder == [0]: |
| x = (decoder_output.decode(hotel['hotel_description'][:1000], query)) |
| st.session_state['value_1'] = x |
| st.session_state.decoder = [st.session_state.decoder[0] + 1] |
| st.write(x) |
|
|
| elif (st.session_state.decoder == [1]): |
| x = (decoder_output.decode(hotel['hotel_description'][:1000], query)) |
| st.session_state['value_2'] = x |
|
|
| st.session_state.decoder = [st.session_state.decoder[0] + 1]; |
| st.write(x); |
|
|
| elif st.session_state.decoder == [2]: |
| x = (decoder_output.decode(hotel['hotel_description'][:1000], query)) |
| st.session_state['value_3'] = x; |
| st.session_state.decoder = [st.session_state.decoder[0] + 1]; |
| st.write(x); |
|
|
|
|
| if (st.session_state.decoder[0] >= 3): |
| i = st.session_state.decoder[0] % 3 |
| l = ['value_1', 'value_2', 'value_3'] |
| st.session_state[l[i - 1]]; |
| st.session_state.decoder = [st.session_state.decoder[0] + 1]; |
|
|
| if button: |
| st.session_state["value"] = hotel |
|
|
|
|
| |
| |
| |
| |
|
|
| question = st.text_input(f"Enter a question about {hotel['hotel_name']}:"); |
| |
| if question: |
| st.write(ares_api(question + "for" + hotel['hotel_name'] + "located in" + hotel['country'])) |
| |
| |
| |
| |
|
|
|
|
|
|
|
|
|
|
|
|
| search_hotels() |
| chat_page() |
|
|
|
|
| def ares_api(query): |
| response_json = traversaal.getResponse(query); |
| |
| |
| return (response_json['data']['response_text']) |
| def chat_page(): |
| hotel = st.session_state["value"] |
| st.session_state.value = None |
| if (hotel == None): |
| return; |
|
|
| st.write(hotel['hotel_name']); |
| st.title("Conversation") |
|
|
| |
| client = OpenAI(api_key=st.secrets["OPENAI_API_KEY"]) |
|
|
| |
| |
| if "openai_model" not in st.session_state: |
| st.session_state["openai_model"] = "gpt-3.5-turbo" |
|
|
| prompt = f"{hotel['hotel_description'][:2000]}\n\n you are a hotel advisor now, you should give the best response based on the above text. i will now ask you some questions get ready" |
| |
| if "messages" not in st.session_state: |
| st.session_state.messages = [{"role": "user", "content": prompt}] |
|
|
| |
| |
| |
|
|
|
|
|
|
| for message in st.session_state.messages[1:]: |
| with st.chat_message(message["role"]): |
| st.markdown(message["content"]) |
|
|
| |
| if prompt := st.chat_input("What is up?"): |
| x = ares_api(prompt) |
| |
| st.session_state.messages[0]['content'] += "\n" + x; |
| st.session_state.messages.append({"role": "assistant", "content": prompt}) |
| |
| with st.chat_message("user"): |
| st.markdown(prompt) |
|
|
|
|
|
|
| |
| with st.chat_message("assistant"): |
| stream = client.chat.completions.create( |
| model=st.session_state["openai_model"], |
| messages=[ |
| {"role": m["role"], "content": m["content"]} |
| for m in st.session_state.messages |
| ], |
| stream=True, |
| ) |
| response = st.write_stream(stream) |
| st.session_state.messages.append({"role": "assistant", "content": response}) |
|
|
|
|
| |
|
|
| home_page() |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|