Switch to use EU LAW GPT in .env
Browse files- .env.local +11 -0
- .gitignore +3 -0
- app.py +21 -27
- htmlTemplates.py +5 -2
- requirements.txt +2 -3
.env.local
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# This file is used to store the environment variables that are used in the application
|
| 2 |
+
# Please make sure to create a .env file in the root directory of the project and add the following variables
|
| 3 |
+
|
| 4 |
+
# OPEN AI API KEY
|
| 5 |
+
OPENAI_API_KEY=
|
| 6 |
+
|
| 7 |
+
# LAW GPT MODEL URL, please look at https://huggingface.co/codimind for the model url
|
| 8 |
+
LAW_GPT_MODEL_URL=
|
| 9 |
+
|
| 10 |
+
# Huggingface hub api token
|
| 11 |
+
HUGGINGFACEHUB_API_TOKEN=
|
.gitignore
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
.env
|
| 2 |
+
__pycache__/
|
| 3 |
+
.DS_Store
|
app.py
CHANGED
|
@@ -48,11 +48,15 @@ def get_vector_store(text_chunks):
|
|
| 48 |
return vectorstore
|
| 49 |
|
| 50 |
def get_conversation_chain(vectorstore):
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
# llm = HuggingFaceHub(repo_id="meta-llama/Meta-Llama-3.1-8B-Instruct", model_kwargs={"temperature":0.5, "max_length":512})
|
| 54 |
-
# llm = HuggingFaceHub(repo_id="meta-llama/Meta-Llama-3.1-8B-Instruct")
|
| 55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
memory = ConversationBufferMemory(memory_key='chat_history', return_messages=True)
|
| 57 |
conversation_chain = ConversationalRetrievalChain.from_llm(
|
| 58 |
llm=llm,
|
|
@@ -76,12 +80,12 @@ def handle_user_input(user_question):
|
|
| 76 |
st.write(bot_template.replace(
|
| 77 |
"{{MSG}}", message.content), unsafe_allow_html=True)
|
| 78 |
else:
|
| 79 |
-
st.write("Please upload PDFs
|
| 80 |
|
| 81 |
def main():
|
| 82 |
load_dotenv()
|
| 83 |
|
| 84 |
-
st.set_page_config(page_title="
|
| 85 |
st.write(css, unsafe_allow_html=True)
|
| 86 |
|
| 87 |
#load knowledge data PDF
|
|
@@ -97,31 +101,21 @@ def main():
|
|
| 97 |
if "chat_history" not in st.session_state:
|
| 98 |
st.session_state.chat_history = None
|
| 99 |
|
| 100 |
-
st.
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
if user_question:
|
| 104 |
-
handle_user_input(user_question)
|
| 105 |
-
|
| 106 |
-
with st.sidebar:
|
| 107 |
-
|
| 108 |
-
st.subheader("Your documents")
|
| 109 |
-
pdf_docs = st.file_uploader("Upload your PDFs here and click on 'Process'", accept_multiple_files=True)
|
| 110 |
-
if st.button("Process"):
|
| 111 |
-
with st.spinner("Processing"):
|
| 112 |
-
# get pdf text
|
| 113 |
-
raw_text = get_pdf_text(pdf_docs)
|
| 114 |
|
| 115 |
-
|
| 116 |
-
|
|
|
|
| 117 |
|
| 118 |
-
|
| 119 |
-
|
| 120 |
|
| 121 |
-
|
|
|
|
| 122 |
|
| 123 |
-
|
| 124 |
-
|
| 125 |
|
| 126 |
if __name__ == '__main__':
|
| 127 |
main()
|
|
|
|
| 48 |
return vectorstore
|
| 49 |
|
| 50 |
def get_conversation_chain(vectorstore):
|
| 51 |
+
if not os.getenv('OPENAI_API_KEY') and not os.getenv('LAW_GPT_MODEL_URL'):
|
| 52 |
+
raise ValueError("Please provide either OPENAI_API_KEY or LAW_GPT_MODEL_URL in the .env file")
|
|
|
|
|
|
|
| 53 |
|
| 54 |
+
# Use LAW GPT model if LAW_GPT_MODEL_URL is provided
|
| 55 |
+
if os.getenv('LAW_GPT_MODEL_URL'):
|
| 56 |
+
llm = HuggingFaceHub(repo_id=os.getenv('LAW_GPT_MODEL_URL'))
|
| 57 |
+
else:
|
| 58 |
+
llm = ChatOpenAI(openai_api_key=os.getenv('OPENAI_API_KEY'))
|
| 59 |
+
|
| 60 |
memory = ConversationBufferMemory(memory_key='chat_history', return_messages=True)
|
| 61 |
conversation_chain = ConversationalRetrievalChain.from_llm(
|
| 62 |
llm=llm,
|
|
|
|
| 80 |
st.write(bot_template.replace(
|
| 81 |
"{{MSG}}", message.content), unsafe_allow_html=True)
|
| 82 |
else:
|
| 83 |
+
st.write("No data is loaded for RAG. Please upload a PDFs files to the data/ directory.")
|
| 84 |
|
| 85 |
def main():
|
| 86 |
load_dotenv()
|
| 87 |
|
| 88 |
+
st.set_page_config(page_title="EULawGPT - LLM model that can understand and reason about EU public domain data", page_icon=":books:")
|
| 89 |
st.write(css, unsafe_allow_html=True)
|
| 90 |
|
| 91 |
#load knowledge data PDF
|
|
|
|
| 101 |
if "chat_history" not in st.session_state:
|
| 102 |
st.session_state.chat_history = None
|
| 103 |
|
| 104 |
+
st.title("EU Law GPT")
|
| 105 |
+
st.write("EU Law GPT is a LLM model that can understand and reason about EU public domain data")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 106 |
|
| 107 |
+
st.subheader('Popular questions:')
|
| 108 |
+
if st.button("What is happening in Equador?"):
|
| 109 |
+
handle_user_input("What is happening in Equador?")
|
| 110 |
|
| 111 |
+
if st.button("What EU will do with Ecuador crisis?"):
|
| 112 |
+
handle_user_input("What EU will do with Ecuador crisis?")
|
| 113 |
|
| 114 |
+
st.subheader('Ask anything:')
|
| 115 |
+
user_question = st.text_input("Ask a question about EU Law and Parlament work")
|
| 116 |
|
| 117 |
+
if user_question:
|
| 118 |
+
handle_user_input(user_question)
|
| 119 |
|
| 120 |
if __name__ == '__main__':
|
| 121 |
main()
|
htmlTemplates.py
CHANGED
|
@@ -28,7 +28,8 @@ css = '''
|
|
| 28 |
bot_template = '''
|
| 29 |
<div class="chat-message bot">
|
| 30 |
<div class="avatar">
|
| 31 |
-
|
|
|
|
| 32 |
</div>
|
| 33 |
<div class="message">{{MSG}}</div>
|
| 34 |
</div>
|
|
@@ -37,8 +38,10 @@ bot_template = '''
|
|
| 37 |
user_template = '''
|
| 38 |
<div class="chat-message user">
|
| 39 |
<div class="avatar">
|
| 40 |
-
<img
|
|
|
|
| 41 |
</div>
|
| 42 |
<div class="message">{{MSG}}</div>
|
| 43 |
</div>
|
|
|
|
| 44 |
'''
|
|
|
|
| 28 |
bot_template = '''
|
| 29 |
<div class="chat-message bot">
|
| 30 |
<div class="avatar">
|
| 31 |
+
<img style='display:block; width:100px;height:100px;' id='base64imageBot'
|
| 32 |
+
src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8IS0tIEJhY2tncm91bmQgQ2lyY2xlIC0tPgogIDxjaXJjbGUgY3g9IjEwMCIgY3k9IjEwMCIgcj0iMTAwIiBmaWxsPSIjRkZENzAwIi8+CiAgCiAgPCEtLSBIZWFkIC0tPgogIDxjaXJjbGUgY3g9IjEwMCIgY3k9IjgwIiByPSI1MCIgZmlsbD0iI0ZGRTBCRCIvPgogIAogIDwhLS0gRXllcyAtLT4KICA8Y2lyY2xlIGN4PSI4MCIgY3k9IjcwIiByPSI4IiBmaWxsPSIjMDAwMDAwIi8+CiAgPGNpcmNsZSBjeD0iMTIwIiBjeT0iNzAiIHI9IjgiIGZpbGw9IiMwMDAwMDAiLz4KICAKICA8IS0tIE1vdXRoIC0tPgogIDxwYXRoIGQ9Ik0gNzAgOTAgUSAxMDAgMTIwIDEzMCA5MCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjUiIGZpbGw9Im5vbmUiLz4KICAKICA8IS0tIEJvZHkgLS0+CiAgPHJlY3QgeD0iNTAiIHk9IjEzMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCIgZmlsbD0iIzQ2ODJCNCIvPgogIAogIDwhLS0gQXJtcyAtLT4KICA8cmVjdCB4PSIyMCIgeT0iMTMwIiB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIGZpbGw9IiNGRkUwQkQiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEzMCIgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiBmaWxsPSIjRkZFMEJEIi8+Cjwvc3ZnPg==' />
|
| 33 |
</div>
|
| 34 |
<div class="message">{{MSG}}</div>
|
| 35 |
</div>
|
|
|
|
| 38 |
user_template = '''
|
| 39 |
<div class="chat-message user">
|
| 40 |
<div class="avatar">
|
| 41 |
+
<img style="display: block; width: 100px; height: 100px;" id="base64imageUser"
|
| 42 |
+
src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSIxMDAiIHI9IjEwMCIgZmlsbD0iI0ZGNjM0NyIvPgogIDxjaXJjbGUgY3g9IjEwMCIgY3k9IjgwIiByPSI1MCIgZmlsbD0iI0ZFRTRCNCIvPgogIAogIDxjaXJjbGUgY3g9IjgwIiBjeT0iNzAiIHI9IjEwIiBmaWxsPSIjRkZGRkZGIi8+CiAgPGNpcmNsZSBjeD0iMTIwIiBjeT0iNzAiIHI9IjEwIiBmaWxsPSIjRkZGRkZGIi8+CiAgPGNpcmxlIGN4PSI4MCIgY3k9IjcwIiByPSI1IiBmaWxsPSIjMDAwMDAwIi8+CiAgPGNpcmxlIGN4PSIxMjAiIGN5PSI3MCIgcj0iNSIgZmlsbD0iIzAwMDAwMCIvPgoKICA8cGF0aCBkPSJNIDcwIDkwIFEgMTAwIDExMCAxMzAgOTAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSI0IiBmaWxsPSJub25lIi8+CiAKICA8bGluZSB4MT0iMTAwIiB5MT0iMzAiIHgyPSIxMDAiIHkyPSI1MCIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjQiLz4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSIyNSIgcj0iNSIgZmlsbD0iIzAwMDAwMCIvPgoKICA8cmVjdCB4PSI2MCIgeT0iMTMwIiB3aWR0aD0iODAiIGhlaWdodD0iNjAiIGZpbGw9IiM0NjgyQjQiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSI0Ii8+CiAgPHJlY3QgeD0iMzAiIHk9IjE0MCIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBmaWxsPSIjRkZFNEM1IiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMyIvPgogIDxyZWN0IHg9IjE0MCIgeT0iMTQwIiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGZpbGw9IiNGRkU0QzUiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIzIi8+Cjwvc3ZnPg==" />
|
| 43 |
</div>
|
| 44 |
<div class="message">{{MSG}}</div>
|
| 45 |
</div>
|
| 46 |
+
|
| 47 |
'''
|
requirements.txt
CHANGED
|
@@ -1,9 +1,8 @@
|
|
| 1 |
-
#unstructured[pdf]
|
| 2 |
-
#python-magic
|
| 3 |
streamlit
|
| 4 |
python-dotenv
|
| 5 |
PyPDF2
|
| 6 |
langchain
|
| 7 |
langchain_openai
|
| 8 |
langchain_community
|
| 9 |
-
faiss-cpu
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
streamlit
|
| 2 |
python-dotenv
|
| 3 |
PyPDF2
|
| 4 |
langchain
|
| 5 |
langchain_openai
|
| 6 |
langchain_community
|
| 7 |
+
faiss-cpu
|
| 8 |
+
huggingface_hub
|