Skip to content

Commit d3c352d

Browse files
committed
update langchair rag app final
1 parent 9e15076 commit d3c352d

5 files changed

Lines changed: 45 additions & 21 deletions

File tree

langchain-rag-app/source_code_final/chatbot_api/pyproject.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ version = "0.1"
44
dependencies = [
55
"asyncio==3.4.3",
66
"fastapi==0.109.0",
7-
"langchain==0.1.0",
8-
"langchain-openai==0.0.2",
9-
"langchainhub==0.1.14",
7+
"langchain==0.2.17",
8+
"langchain-community==0.2.19",
9+
"langchain-openai==0.1.25",
10+
"langchainhub==0.1.21",
1011
"neo4j==5.14.1",
1112
"numpy==1.26.2",
12-
"openai==1.7.2",
1313
"opentelemetry-api==1.22.0",
1414
"pydantic==2.5.1",
1515
"uvicorn==0.25.0"

langchain-rag-app/source_code_final/chatbot_api/src/chains/hospital_cypher_chain.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,9 @@
1212
url=os.getenv("NEO4J_URI"),
1313
username=os.getenv("NEO4J_USERNAME"),
1414
password=os.getenv("NEO4J_PASSWORD"),
15+
database=os.getenv("NEO4J_DATABASE", "neo4j"),
1516
)
1617

17-
graph.refresh_schema()
18-
1918
cypher_generation_template = """
2019
Task:
2120
Generate Cypher query for a Neo4j graph database.
@@ -154,4 +153,5 @@
154153
cypher_prompt=cypher_generation_prompt,
155154
validate_cypher=True,
156155
top_k=100,
156+
allow_dangerous_requests=True,
157157
)

langchain-rag-app/source_code_final/chatbot_api/src/chains/hospital_review_chain.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,38 @@
77
PromptTemplate,
88
SystemMessagePromptTemplate,
99
)
10-
from langchain.vectorstores.neo4j_vector import Neo4jVector
10+
from langchain_community.vectorstores import Neo4jVector
1111
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
12+
from neo4j import GraphDatabase
1213

1314
HOSPITAL_QA_MODEL = os.getenv("HOSPITAL_QA_MODEL")
1415

16+
# langchain-community's create_new_index uses the deprecated
17+
# db.index.vector.createNodeIndex procedure removed in Neo4j 5.27.
18+
# Pre-create the index with the current syntax so from_existing_graph
19+
# detects it and skips create_new_index.
20+
_driver = GraphDatabase.driver(
21+
os.getenv("NEO4J_URI"),
22+
auth=(os.getenv("NEO4J_USERNAME"), os.getenv("NEO4J_PASSWORD")),
23+
)
24+
with _driver.session(
25+
database=os.getenv("NEO4J_DATABASE", "neo4j")
26+
) as _session:
27+
_session.run(
28+
"CREATE VECTOR INDEX reviews IF NOT EXISTS "
29+
"FOR (n:Review) ON (n.embedding) "
30+
"OPTIONS {indexConfig: {`vector.dimensions`: 1536, "
31+
"`vector.similarity_function`: 'cosine'}}"
32+
)
33+
_driver.close()
34+
del _driver
35+
1536
neo4j_vector_index = Neo4jVector.from_existing_graph(
1637
embedding=OpenAIEmbeddings(),
1738
url=os.getenv("NEO4J_URI"),
1839
username=os.getenv("NEO4J_USERNAME"),
1940
password=os.getenv("NEO4J_PASSWORD"),
41+
database=os.getenv("NEO4J_DATABASE", "neo4j"),
2042
index_name="reviews",
2143
node_label="Review",
2244
text_node_properties=[

langchain-rag-app/source_code_final/docker-compose.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ services:
1313
env_file:
1414
- .env
1515
depends_on:
16-
- hospital_neo4j_etl
16+
hospital_neo4j_etl:
17+
condition: service_completed_successfully
1718
ports:
1819
- "8000:8000"
1920

langchain-rag-app/source_code_final/hospital_neo4j_etl/src/hospital_bulk_csv_write.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,13 @@ def load_hospital_graph_from_csv() -> None:
4242
)
4343

4444
LOGGER.info("Setting uniqueness constraints on nodes")
45-
with driver.session(database="neo4j") as session:
45+
46+
with driver.session() as session:
4647
for node in NODES:
4748
session.execute_write(_set_uniqueness_constraints, node)
4849

4950
LOGGER.info("Loading hospital nodes")
50-
with driver.session(database="neo4j") as session:
51+
with driver.session() as session:
5152
query = f"""
5253
LOAD CSV WITH HEADERS
5354
FROM '{HOSPITALS_CSV_PATH}' AS hospitals
@@ -58,7 +59,7 @@ def load_hospital_graph_from_csv() -> None:
5859
_ = session.run(query, {})
5960

6061
LOGGER.info("Loading payer nodes")
61-
with driver.session(database="neo4j") as session:
62+
with driver.session() as session:
6263
query = f"""
6364
LOAD CSV WITH HEADERS
6465
FROM '{PAYERS_CSV_PATH}' AS payers
@@ -68,7 +69,7 @@ def load_hospital_graph_from_csv() -> None:
6869
_ = session.run(query, {})
6970

7071
LOGGER.info("Loading physician nodes")
71-
with driver.session(database="neo4j") as session:
72+
with driver.session() as session:
7273
query = f"""
7374
LOAD CSV WITH HEADERS
7475
FROM '{PHYSICIANS_CSV_PATH}' AS physicians
@@ -83,7 +84,7 @@ def load_hospital_graph_from_csv() -> None:
8384
_ = session.run(query, {})
8485

8586
LOGGER.info("Loading visit nodes")
86-
with driver.session(database="neo4j") as session:
87+
with driver.session() as session:
8788
query = f"""
8889
LOAD CSV WITH HEADERS FROM '{VISITS_CSV_PATH}' AS visits
8990
MERGE (v:Visit {{id: toInteger(visits.visit_id),
@@ -106,7 +107,7 @@ def load_hospital_graph_from_csv() -> None:
106107
_ = session.run(query, {})
107108

108109
LOGGER.info("Loading patient nodes")
109-
with driver.session(database="neo4j") as session:
110+
with driver.session() as session:
110111
query = f"""
111112
LOAD CSV WITH HEADERS
112113
FROM '{PATIENTS_CSV_PATH}' AS patients
@@ -120,7 +121,7 @@ def load_hospital_graph_from_csv() -> None:
120121
_ = session.run(query, {})
121122

122123
LOGGER.info("Loading review nodes")
123-
with driver.session(database="neo4j") as session:
124+
with driver.session() as session:
124125
query = f"""
125126
LOAD CSV WITH HEADERS
126127
FROM '{REVIEWS_CSV_PATH}' AS reviews
@@ -134,7 +135,7 @@ def load_hospital_graph_from_csv() -> None:
134135
_ = session.run(query, {})
135136

136137
LOGGER.info("Loading 'AT' relationships")
137-
with driver.session(database="neo4j") as session:
138+
with driver.session() as session:
138139
query = f"""
139140
LOAD CSV WITH HEADERS FROM '{VISITS_CSV_PATH}' AS row
140141
MATCH (source: `Visit` {{ `id`: toInteger(trim(row.`visit_id`)) }})
@@ -145,7 +146,7 @@ def load_hospital_graph_from_csv() -> None:
145146
_ = session.run(query, {})
146147

147148
LOGGER.info("Loading 'WRITES' relationships")
148-
with driver.session(database="neo4j") as session:
149+
with driver.session() as session:
149150
query = f"""
150151
LOAD CSV WITH HEADERS FROM '{REVIEWS_CSV_PATH}' AS reviews
151152
MATCH (v:Visit {{id: toInteger(reviews.visit_id)}})
@@ -155,7 +156,7 @@ def load_hospital_graph_from_csv() -> None:
155156
_ = session.run(query, {})
156157

157158
LOGGER.info("Loading 'TREATS' relationships")
158-
with driver.session(database="neo4j") as session:
159+
with driver.session() as session:
159160
query = f"""
160161
LOAD CSV WITH HEADERS FROM '{VISITS_CSV_PATH}' AS visits
161162
MATCH (p:Physician {{id: toInteger(visits.physician_id)}})
@@ -165,7 +166,7 @@ def load_hospital_graph_from_csv() -> None:
165166
_ = session.run(query, {})
166167

167168
LOGGER.info("Loading 'COVERED_BY' relationships")
168-
with driver.session(database="neo4j") as session:
169+
with driver.session() as session:
169170
query = f"""
170171
LOAD CSV WITH HEADERS FROM '{VISITS_CSV_PATH}' AS visits
171172
MATCH (v:Visit {{id: toInteger(visits.visit_id)}})
@@ -178,7 +179,7 @@ def load_hospital_graph_from_csv() -> None:
178179
_ = session.run(query, {})
179180

180181
LOGGER.info("Loading 'HAS' relationships")
181-
with driver.session(database="neo4j") as session:
182+
with driver.session() as session:
182183
query = f"""
183184
LOAD CSV WITH HEADERS FROM '{VISITS_CSV_PATH}' AS visits
184185
MATCH (p:Patient {{id: toInteger(visits.patient_id)}})
@@ -188,7 +189,7 @@ def load_hospital_graph_from_csv() -> None:
188189
_ = session.run(query, {})
189190

190191
LOGGER.info("Loading 'EMPLOYS' relationships")
191-
with driver.session(database="neo4j") as session:
192+
with driver.session() as session:
192193
query = f"""
193194
LOAD CSV WITH HEADERS FROM '{VISITS_CSV_PATH}' AS visits
194195
MATCH (h:Hospital {{id: toInteger(visits.hospital_id)}})

0 commit comments

Comments
 (0)