graphDB_Neo4J / app.py
Prathamesh1420's picture
Update app.py
5c7d5dc verified
raw
history blame
2.03 kB
import os
import streamlit as st
from langchain_community.graphs import Neo4jGraph
from langchain_groq import ChatGroq
from langchain.chains import GraphCypherQAChain
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
# Set environment variables
NEO4J_URI = "neo4j+s://64beefae.databases.neo4j.io"
NEO4J_USERNAME = "neo4j"
NEO4J_PASSWORD = "OTj5yGnWLF59yx4UX1g3xABarVOvVKiM3CT9L4bNkF8"
GROQ_API_KEY = "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"
# Print environment variables for debugging
print("NEO4J_URI:", NEO4J_URI)
print("NEO4J_USERNAME:", NEO4J_USERNAME)
print("NEO4J_PASSWORD:", NEO4J_PASSWORD)
try:
# Initialize Neo4j graph
graph = Neo4jGraph(url=NEO4J_URI, username=NEO4J_USERNAME, password=NEO4J_PASSWORD)
# Load movie dataset into Neo4j
moview_query = """
LOAD CSV WITH HEADERS FROM
'https://raw.githubusercontent.com/Pk-Kolhapurkar/graphdb_neo4j/main/indian%20movies.csv' AS row
MERGE (m:Movie {id: row.ID})
SET m.year = toInteger(row.Year),
m.title = row['Movie Name'],
m.timing = toInteger(row['Timing(min)']),
m.rating = toFloat(row['Rating(10)']),
m.votes = toInteger(row.Votes),
m.language = row.Language
FOREACH (genre IN split(row.Genre, '|') |
MERGE (g:Genre {name: trim(genre)})
MERGE (m)-[:IN_GENRE]->(g))
"""
graph.query(moview_query)
graph.refresh_schema()
except Exception as e:
print("Error initializing Neo4jGraph:", str(e))
# Initialize LLM
llm = ChatGroq(groq_api_key=GROQ_API_KEY, model_name="Gemma2-9b-It")
# Create QA Chain
chain = GraphCypherQAChain.from_llm(graph=graph, llm=llm, verbose=True)
# Streamlit UI
st.title("Movie Director Finder")
query = st.text_input("Enter your query:", "Who was the director of the movie Casino")
if st.button("Find Director"):
response = chain.invoke({"query": query})
if response and response.get("result"):
st.write(response["result"])
else:
st.write("I don't know the answer.")