Spaces:
Running
Running
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 environment variables | |
load_dotenv() | |
NEO4J_URI = "neo4j+s://64beefae.databases.neo4j.io" | |
NEO4J_USERNAME = "neo4j" | |
NEO4J_PASSWORD = "OTj5yGnWLF59yx4UX1g3xABarVOvVKiM3CT9L4bNkF8" | |
GROQ_API_KEY = "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" | |
# 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() | |
# 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.") | |