Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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="
|
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("
|
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 =
|
117 |
-
allowed_relationships =
|
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()
|
|
|
|