Spaces:
Runtime error
Runtime error
# Imports & Config | |
import streamlit as st | |
from openai import OpenAI | |
from llama_index.core import VectorStoreIndex, download_loader, SimpleDirectoryReader | |
from llama_index.readers.web import BeautifulSoupWebReader | |
from bs4 import BeautifulSoup | |
import requests | |
import openai | |
# Title | |
st.title("βοΈ Airline Compensation Bot π¬") | |
# Introduction | |
st.markdown("**Flight delayed or cancelled yet again?**") | |
st.markdown("Donβt waste time digging through complicated airline policies! **Just tell us your airline, delay/cancellation reason, and any other relevant details** and our chatbot will instantly tell you what compensation you're entitled to - by law and by airline policy.") | |
st.divider() | |
#OpenAI API Key | |
with st.sidebar: | |
openai_api_key = st.text_input("Enter your OpenAI API Key", type="password") | |
"[Get an OpenAI API key](https://platform.openai.com/account/api-keys)" | |
"[View the source code](https://github.com/streamlit/llm-examples/blob/main/Chatbot.py)" | |
st.divider() | |
st.markdown( | |
""" | |
--- | |
Follow me on: | |
π β [@tonykipkemboi](https://twitter.com/tonykipkemboi) | |
LinkedIn β [Tony Kipkemboi](https://www.linkedin.com/in/tonykipkemboi) | |
""" | |
) | |
# Check if an API key is provided | |
if not openai_api_key: | |
st.warning("Please enter your OpenAI API to use this app π") | |
st.stop() # Stop the app until an API key is provided | |
# Initialize OpenAI API Client with user-provided API key | |
openai.api_key = openai_api_key | |
# Load data | |
loader = BeautifulSoupWebReader() | |
documents = loader.load_data(urls=[ | |
"https://content.spirit.com/Shared/en-us/Documents/Contract_of_Carriage.pdf", | |
"https://secure.dot.gov/air-travel-complaint", | |
"https://www.ecfr.gov/current/title-14/chapter-II/subchapter-A/part-259", | |
"https://www.ecfr.gov/current/title-14/chapter-II/subchapter-A/part-259#259.5", | |
"https://www.federalregister.gov/documents/2024/04/26/2024-07177/refunds-and-other-consumer-protections", | |
"https://www.federalregister.gov/documents/2024/08/12/2024-17602/refunds-and-other-consumer-protections-2024-faa-reauthorization", | |
"https://www.flyfrontier.com/legal/customer-service-plan?mobile=true", | |
"https://www.hawaiianairlines.com/about-us/customer-service-plan", | |
"https://www.jetblue.com/customer-assurance/customer-service-plan", | |
"https://www.jetblue.com/legal/customer-service-plan", | |
"https://www.reginfo.gov/public/do/eAgendaViewRule?pubId=201910&RIN=2105-AE57", | |
"https://www.reginfo.gov/public/do/eAgendaViewRule?pubId=202110&RIN=2105-AF04", | |
"https://www.southwest.com/assets/pdfs/corporate-commitments/customer-service-plan.pdf?clk=7396032", | |
"https://www.southwest.com/swa-resources/pdfs/corporate-commitments/contract-of-carriage.pdf?clk=CSP_Form", | |
"https://www.transportation.gov/airconsumer", | |
"https://www.transportation.gov/airconsumer/air-travel-tips#FAQ", | |
"https://www.transportation.gov/airconsumer/air-travelers-tell-it-judge", | |
"https://www.transportation.gov/airconsumer/airline-consumer-contacts", | |
"https://www.transportation.gov/airconsumer/fly-rights", | |
"https://www.transportation.gov/individuals/aviation-consumer-protection/bumping-oversales", | |
"https://www.transportation.gov/individuals/aviation-consumer-protection/refunds", | |
"https://www.transportation.gov/individuals/aviation-consumer-protection/tarmac-delays", | |
"https://www.transportation.gov/lost-delayed-or-damaged-baggage", | |
"https://www.transportation.gov/resources/individuals/aviation-consumer-protection/airline-cancellation-delay-dashboard-html", | |
]) | |
# RAG | |
index = VectorStoreIndex.from_documents(documents) | |
def response_generator(query): | |
try: | |
# Create an index from the documents | |
query_engine = index.as_query_engine() | |
response = query_engine.query(query) | |
except Exception as e: | |
# Log or handle the exception | |
response = f"An error occurred: {e}" | |
return response | |
# Initialize chat history | |
if "messages" not in st.session_state: | |
st.session_state.messages = [] | |
# Display chat messages from history on app rerun | |
for message in st.session_state.messages: | |
with st.chat_message(message["role"]): | |
st.markdown(message["content"]) | |
# Accept user input | |
if prompt := st.chat_input("How can I help you?"): | |
# Add user message to chat history | |
st.session_state.messages.append({"role": "user", "content": prompt}) | |
# Display user message in chat message container | |
with st.chat_message("user"): | |
st.markdown(prompt) | |
# Generate and display assistant response | |
# st.write('Before Response generator') | |
response = response_generator(prompt) | |
# Display assistant response in chat message container | |
with st.chat_message("assistant"): | |
st.markdown(response) | |
# Add assistant response to chat history | |
st.session_state.messages.append({"role": "assistant", "content": response}) |