Spaces:
Sleeping
Sleeping
File size: 2,497 Bytes
1d39232 4137b5b 6d55f94 1d39232 fe9dcea 6d55f94 c5dfe2a 6d55f94 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
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()
# Load environment variables
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/tomasonjo/blog-datasets/main/movies/movies_small.csv' as row
MERGE(m:Movie{id:row.movieId})
SET m.released = date(row.released),
m.title = row.title,
m.imdbRating = toFloat(row.imdbRating)
FOREACH (director in split(row.director, '|') |
MERGE (p:Person {name:trim(director)})
MERGE (p)-[:DIRECTED]->(m))
FOREACH (actor in split(row.actors, '|') |
MERGE (p:Person {name:trim(actor)})
MERGE (p)-[:ACTED_IN]->(m))
FOREACH (genre in split(row.genres, '|') |
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})
# Debug: Print the raw response to check its structure
st.write("Raw Response:", response)
# Extract the director's name from the full context
if response and 'full_context' in response:
full_context = response['full_context']
if full_context and isinstance(full_context, list) and len(full_context) > 0:
director_info = full_context[0]
director_name = director_info.get('p.name', None)
if director_name:
st.write(f"The director of the movie is {director_name}.")
else:
st.write("Could not find the director's name in the response.")
else:
st.write("No full context found in the response.")
else:
st.write("I don't know the answer.")
|