Akshayram1 commited on
Commit
7aad967
·
verified ·
1 Parent(s): e185889

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -10
app.py CHANGED
@@ -1,35 +1,42 @@
1
  import os
 
2
  from dotenv import load_dotenv
 
 
 
3
  from langchain.document_loaders import PyPDFLoader
4
  from langchain.text_splitter import RecursiveCharacterTextSplitter
5
  from langchain.schema import Document
6
  from langchain.prompts import PromptTemplate
7
  from langchain.vectorstores import Neo4jVector
8
- from langchain.chat_models import ChatOpenAI
9
- from langchain.embeddings import OpenAIEmbeddings
10
  from langchain.graphs import Neo4jGraph
11
  from langchain_experimental.graph_transformers import LLMGraphTransformer
12
  from langchain.chains.graph_qa.cypher import GraphCypherQAChain
13
- import streamlit as st
14
- import tempfile
15
  from neo4j import GraphDatabase
16
 
17
  def main():
18
  st.set_page_config(
19
  layout="wide",
20
- page_title="Graphy v1",
21
  page_icon=":graph:"
22
  )
 
 
 
 
23
  st.sidebar.image('logo.png', use_column_width=True)
24
  with st.sidebar.expander("Expand Me"):
25
  st.markdown("""
26
  This application allows you to upload a PDF file, extract its content into a Neo4j graph database, and perform queries using natural language.
27
  It leverages LangChain and OpenAI's GPT models to generate Cypher queries that interact with the Neo4j database in real-time.
28
  """)
29
- st.title("Graphy: Realtime GraphRAG App")
30
 
31
  load_dotenv()
32
 
 
 
 
33
  # Set OpenAI API key
34
  if 'OPENAI_API_KEY' not in st.session_state:
35
  st.sidebar.subheader("OpenAI API Key")
@@ -42,7 +49,11 @@ def main():
42
  llm = ChatOpenAI(model_name="gpt-4o") # Use model that supports function calling
43
  st.session_state['embeddings'] = embeddings
44
  st.session_state['llm'] = llm
 
 
45
  else:
 
 
46
  embeddings = st.session_state['embeddings']
47
  llm = st.session_state['llm']
48
 
@@ -83,6 +94,8 @@ def main():
83
 
84
  # Ensure that the Neo4j connection is established before proceeding
85
  if graph is not None:
 
 
86
  # File uploader
87
  uploaded_file = st.file_uploader("Please select a PDF file.", type="pdf")
88
 
@@ -92,6 +105,8 @@ def main():
92
  with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_file:
93
  tmp_file.write(uploaded_file.read())
94
  tmp_file_path = tmp_file.name
 
 
95
 
96
  # Load and split the PDF
97
  loader = PyPDFLoader(tmp_file_path)
@@ -113,8 +128,8 @@ def main():
113
  graph.query(cypher)
114
 
115
  # Define allowed nodes and relationships
116
- allowed_nodes = ["Patient", "Disease", "Medication", "Test", "Symptom", "Doctor"]
117
- allowed_relationships = ["HAS_DISEASE", "TAKES_MEDICATION", "UNDERWENT_TEST", "HAS_SYMPTOM", "TREATED_BY"]
118
 
119
  # Transform documents into graph documents
120
  transformer = LLMGraphTransformer(
@@ -179,6 +194,8 @@ def main():
179
  )
180
  st.session_state['qa'] = qa
181
  else:
 
 
182
  st.warning("Please connect to the Neo4j database before you can upload a PDF.")
183
 
184
  if 'qa' in st.session_state:
@@ -194,5 +211,3 @@ def main():
194
 
195
  if __name__ == "__main__":
196
  main()
197
-
198
-
 
1
  import os
2
+ import tempfile
3
  from dotenv import load_dotenv
4
+ import streamlit as st
5
+ from openai.embeddings_utils import OpenAIEmbeddings
6
+ from openai.chat_models import ChatOpenAI
7
  from langchain.document_loaders import PyPDFLoader
8
  from langchain.text_splitter import RecursiveCharacterTextSplitter
9
  from langchain.schema import Document
10
  from langchain.prompts import PromptTemplate
11
  from langchain.vectorstores import Neo4jVector
 
 
12
  from langchain.graphs import Neo4jGraph
13
  from langchain_experimental.graph_transformers import LLMGraphTransformer
14
  from langchain.chains.graph_qa.cypher import GraphCypherQAChain
 
 
15
  from neo4j import GraphDatabase
16
 
17
  def main():
18
  st.set_page_config(
19
  layout="wide",
20
+ page_title="MayaJal",
21
  page_icon=":graph:"
22
  )
23
+
24
+ # Debug statement
25
+ st.write("Starting the app...")
26
+
27
  st.sidebar.image('logo.png', use_column_width=True)
28
  with st.sidebar.expander("Expand Me"):
29
  st.markdown("""
30
  This application allows you to upload a PDF file, extract its content into a Neo4j graph database, and perform queries using natural language.
31
  It leverages LangChain and OpenAI's GPT models to generate Cypher queries that interact with the Neo4j database in real-time.
32
  """)
33
+ st.title("Mayajal: Realtime GraphRAG App")
34
 
35
  load_dotenv()
36
 
37
+ # Debug statement
38
+ st.write("Loaded environment variables.")
39
+
40
  # Set OpenAI API key
41
  if 'OPENAI_API_KEY' not in st.session_state:
42
  st.sidebar.subheader("OpenAI API Key")
 
49
  llm = ChatOpenAI(model_name="gpt-4o") # Use model that supports function calling
50
  st.session_state['embeddings'] = embeddings
51
  st.session_state['llm'] = llm
52
+ # Debug statement
53
+ st.write("OpenAI API Key set and models initialized.")
54
  else:
55
+ # Debug statement
56
+ st.write("OpenAI API Key already set.")
57
  embeddings = st.session_state['embeddings']
58
  llm = st.session_state['llm']
59
 
 
94
 
95
  # Ensure that the Neo4j connection is established before proceeding
96
  if graph is not None:
97
+ # Debug statement
98
+ st.write("Neo4j connection established.")
99
  # File uploader
100
  uploaded_file = st.file_uploader("Please select a PDF file.", type="pdf")
101
 
 
105
  with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_file:
106
  tmp_file.write(uploaded_file.read())
107
  tmp_file_path = tmp_file.name
108
+ # Debug statement
109
+ st.write("PDF file uploaded and saved to temporary file.")
110
 
111
  # Load and split the PDF
112
  loader = PyPDFLoader(tmp_file_path)
 
128
  graph.query(cypher)
129
 
130
  # Define allowed nodes and relationships
131
+ allowed_nodes = None
132
+ allowed_relationships = None
133
 
134
  # Transform documents into graph documents
135
  transformer = LLMGraphTransformer(
 
194
  )
195
  st.session_state['qa'] = qa
196
  else:
197
+ # Debug statement
198
+ st.write("Neo4j connection not established.")
199
  st.warning("Please connect to the Neo4j database before you can upload a PDF.")
200
 
201
  if 'qa' in st.session_state:
 
211
 
212
  if __name__ == "__main__":
213
  main()