Spaces:
Runtime error
Runtime error
Upload app.py
Browse files
app.py
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import streamlit as st
|
3 |
+
from langchain_community.graphs import Neo4jGraph
|
4 |
+
from langchain_groq import ChatGroq
|
5 |
+
from langchain.chains import GraphCypherQAChain
|
6 |
+
from dotenv import load_dotenv
|
7 |
+
|
8 |
+
# Load environment variables
|
9 |
+
load_dotenv()
|
10 |
+
NEO4J_URI = os.getenv("NEO4J_URI")
|
11 |
+
NEO4J_USERNAME = os.getenv("NEO4J_USERNAME")
|
12 |
+
NEO4J_PASSWORD = os.getenv("NEO4J_PASSWORD")
|
13 |
+
GROQ_API_KEY = os.getenv("GROQ_API_KEY")
|
14 |
+
|
15 |
+
# Initialize Neo4j graph
|
16 |
+
graph = Neo4jGraph(url=NEO4J_URI, username=NEO4J_USERNAME, password=NEO4J_PASSWORD)
|
17 |
+
|
18 |
+
# Load movie dataset into Neo4j
|
19 |
+
moview_query = """
|
20 |
+
LOAD CSV WITH HEADERS FROM
|
21 |
+
'https://raw.githubusercontent.com/tomasonjo/blog-datasets/main/movies/movies_small.csv' as row
|
22 |
+
MERGE(m:Movie{id:row.movieId})
|
23 |
+
SET m.released = date(row.released),
|
24 |
+
m.title = row.title,
|
25 |
+
m.imdbRating = toFloat(row.imdbRating)
|
26 |
+
FOREACH (director in split(row.director, '|') |
|
27 |
+
MERGE (p:Person {name:trim(director)})
|
28 |
+
MERGE (p)-[:DIRECTED]->(m))
|
29 |
+
FOREACH (actor in split(row.actors, '|') |
|
30 |
+
MERGE (p:Person {name:trim(actor)})
|
31 |
+
MERGE (p)-[:ACTED_IN]->(m))
|
32 |
+
FOREACH (genre in split(row.genres, '|') |
|
33 |
+
MERGE (g:Genre {name:trim(genre)})
|
34 |
+
MERGE (m)-[:IN_GENRE]->(g))
|
35 |
+
"""
|
36 |
+
graph.query(moview_query)
|
37 |
+
graph.refresh_schema()
|
38 |
+
|
39 |
+
# Initialize LLM
|
40 |
+
llm = ChatGroq(groq_api_key=GROQ_API_KEY, model_name="Gemma2-9b-It")
|
41 |
+
|
42 |
+
# Create QA Chain
|
43 |
+
chain = GraphCypherQAChain.from_llm(graph=graph, llm=llm, verbose=True)
|
44 |
+
|
45 |
+
# Streamlit UI
|
46 |
+
st.title("Movie Director Finder")
|
47 |
+
|
48 |
+
query = st.text_input("Enter your query:", "Who was the director of the movie Casino")
|
49 |
+
if st.button("Find Director"):
|
50 |
+
response = chain.invoke({"query": query})
|
51 |
+
st.write(response)
|