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.")