{ "cells": [ { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "import os\n", "from langchain_experimental.graph_transformers import LLMGraphTransformer\n", "from langchain_google_genai import GoogleGenerativeAI \n", "import networkx as nx\n", "from langchain.chains import GraphQAChain\n", "from langchain_core.documents import Document\n", "from langchain_community.graphs.networkx_graph import NetworkxEntityGraph\n", "import google.generativeai as genai" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "google_api = 'AIzaSyD8ZU-SLgfY27DHqPjLryddBxwk5ZItuIo'\n", "genai.configure(api_key=google_api)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "llm = GoogleGenerativeAI(model='gemini-pro',google_api_key=google_api)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "text = 'Folic acid will be added to non-wholemeal flour from the end of 2026 to prevent birth defects, the Government has announced. Ministers said the UK-wide legislation would prevent around 200 cases of neural tube defects every year and improve health of pregnant women. It has been estimated that the move to include folic acid in flour will reduce neural tube defects by 20% in the saving the NHS £20 million over 10 years and boosting the economy by more than £90 million. NHS recommendations that women who are trying for a baby take folic acid supplements for around three months before getting pregnant and for at least 12 weeks after will remain in place. But with around half of all pregnancies in the UK are unplanned, it is hoped the new regulations will help provide women with a higher baseline intake of folic acid. '" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "documents = [Document(page_content=text)]" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "llm_transformer = LLMGraphTransformer(llm=llm)\n", "graph_documents = llm_transformer.convert_to_graph_documents(documents)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[GraphDocument(nodes=[Node(id='new regulations', type='Regulation', properties={}), Node(id='folic acid supplements', type='Medical_Treatment', properties={}), Node(id='economy', type='Economy', properties={}), Node(id='unplanned', type='State', properties={}), Node(id='Ministers', type='Person', properties={}), Node(id='health', type='Medical_Condition', properties={}), Node(id='around three months', type='Time', properties={}), Node(id='NHS', type='Organization', properties={}), Node(id='pregnant women', type='Person', properties={}), Node(id='flour', type='Product', properties={}), Node(id='UK-wide legislation', type='Regulation', properties={}), Node(id='at least 12 weeks', type='Time', properties={}), Node(id='UK', type='Location', properties={}), Node(id='women who are trying for a baby', type='Person', properties={}), Node(id='a higher baseline intake of folic acid', type='Medical_Treatment', properties={}), Node(id='pregnancies', type='Medical_Condition', properties={}), Node(id='folic acid', type='Substance', properties={}), Node(id='£20 million', type='Money', properties={}), Node(id='around 200 cases of neural tube defects', type='Medical_Condition', properties={}), Node(id='neural tube defects', type='Medical_Condition', properties={}), Node(id='women', type='Person', properties={}), Node(id='move', type='Action', properties={}), Node(id='non-wholemeal flour', type='Product', properties={}), Node(id='Folic acid', type='Substance', properties={}), Node(id='Government', type='Organization', properties={})], relationships=[Relationship(source=Node(id='Folic acid', type='Substance', properties={}), target=Node(id='non-wholemeal flour', type='Product', properties={}), type='ADDED_TO', properties={}), Relationship(source=Node(id='Government', type='Organization', properties={}), target=Node(id='non-wholemeal flour', type='Product', properties={}), type='ANNOUNCED', properties={}), Relationship(source=Node(id='Ministers', type='Person', properties={}), target=Node(id='UK-wide legislation', type='Regulation', properties={}), type='SAID', properties={}), Relationship(source=Node(id='UK-wide legislation', type='Regulation', properties={}), target=Node(id='around 200 cases of neural tube defects', type='Medical_Condition', properties={}), type='PREVENT', properties={}), Relationship(source=Node(id='UK-wide legislation', type='Regulation', properties={}), target=Node(id='health', type='Medical_Condition', properties={}), type='IMPROVE', properties={}), Relationship(source=Node(id='health', type='Medical_Condition', properties={}), target=Node(id='pregnant women', type='Person', properties={}), type='OF', properties={}), Relationship(source=Node(id='move', type='Action', properties={}), target=Node(id='folic acid', type='Substance', properties={}), type='INCLUDE', properties={}), Relationship(source=Node(id='move', type='Action', properties={}), target=Node(id='flour', type='Product', properties={}), type='IN', properties={}), Relationship(source=Node(id='move', type='Action', properties={}), target=Node(id='neural tube defects', type='Medical_Condition', properties={}), type='REDUCE', properties={}), Relationship(source=Node(id='NHS', type='Organization', properties={}), target=Node(id='£20 million', type='Money', properties={}), type='SAVING', properties={}), Relationship(source=Node(id='NHS', type='Organization', properties={}), target=Node(id='economy', type='Economy', properties={}), type='BOOSTING', properties={}), Relationship(source=Node(id='NHS', type='Organization', properties={}), target=Node(id='women who are trying for a baby', type='Person', properties={}), type='RECOMMENDATIONS', properties={}), Relationship(source=Node(id='women who are trying for a baby', type='Person', properties={}), target=Node(id='folic acid supplements', type='Medical_Treatment', properties={}), type='TAKE', properties={}), Relationship(source=Node(id='women who are trying for a baby', type='Person', properties={}), target=Node(id='around three months', type='Time', properties={}), type='FOR', properties={}), Relationship(source=Node(id='women who are trying for a baby', type='Person', properties={}), target=Node(id='at least 12 weeks', type='Time', properties={}), type='FOR', properties={}), Relationship(source=Node(id='pregnancies', type='Medical_Condition', properties={}), target=Node(id='UK', type='Location', properties={}), type='IN', properties={}), Relationship(source=Node(id='pregnancies', type='Medical_Condition', properties={}), target=Node(id='unplanned', type='State', properties={}), type='ARE', properties={}), Relationship(source=Node(id='new regulations', type='Regulation', properties={}), target=Node(id='women', type='Person', properties={}), type='HELP', properties={}), Relationship(source=Node(id='new regulations', type='Regulation', properties={}), target=Node(id='women', type='Person', properties={}), type='PROVIDE', properties={}), Relationship(source=Node(id='women', type='Person', properties={}), target=Node(id='a higher baseline intake of folic acid', type='Medical_Treatment', properties={}), type='WITH', properties={})], source=Document(metadata={}, page_content='Folic acid will be added to non-wholemeal flour from the end of 2026 to prevent birth defects, the Government has announced. Ministers said the UK-wide legislation would prevent around 200 cases of neural tube defects every year and improve health of pregnant women. It has been estimated that the move to include folic acid in flour will reduce neural tube defects by 20% in the saving the NHS £20 million over 10 years and boosting the economy by more than £90 million. NHS recommendations that women who are trying for a baby take folic acid supplements for around three months before getting pregnant and for at least 12 weeks after will remain in place. But with around half of all pregnancies in the UK are unplanned, it is hoped the new regulations will help provide women with a higher baseline intake of folic acid. '))]" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "graph_documents" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "llm_transformer_filtered = LLMGraphTransformer(llm=llm)\n", "graph_documents_filtered = llm_transformer_filtered.convert_to_graph_documents(documents)" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "graph = NetworkxEntityGraph()\n", "for node in graph_documents_filtered[0].nodes:\n", " graph.add_node(node.id)\n", "\n", "for edge in graph_documents_filtered[0].relationships:\n", " graph._graph.add_edge(edge.source.id, edge.target.id, relation=edge.type)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "chain = GraphQAChain.from_llm(llm=llm, graph=graph, verbose=True)\n" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "OutEdgeDataView([('NHS', '£20 million', {'relation': 'SAVE'}), ('NHS', 'economy', {'relation': 'BOOST'}), ('NHS', 'women who are trying for a baby take folic acid supplements', {'relation': 'RECOMMEND'}), ('Pregnancies', 'unplanned', {'relation': 'ARE'}), ('Legislation', 'neural tube defects', {'relation': 'PREVENT'}), ('UK', 'to prevent neural tube defects', {'relation': 'HAS_LEGISLATION'}), ('Folic acid', 'non-wholemeal flour', {'relation': 'ADDED_TO'}), ('Regulations', 'women with a higher baseline intake of folic acid', {'relation': 'HELP'}), ('Neural tube defects', 'folic acid', {'relation': 'REDUCED_BY'}), ('Government', 'addition of folic acid to non-wholemeal flour', {'relation': 'ANNOUNCED'})])" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "graph._graph.edges(data=True)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\u001b[1m> Entering new GraphQAChain chain...\u001b[0m\n", "Entities Extracted:\n", "\u001b[32;1m\u001b[1;3mNHS\u001b[0m\n", "Full Context:\n", "\u001b[32;1m\u001b[1;3mNHS SAVE £20 million\n", "NHS BOOST economy\n", "NHS RECOMMEND women who are trying for a baby take folic acid supplements\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] }, { "data": { "text/plain": [ "'NHS BOOST economy'" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "question = 'What is the impact on NHS economy?'\n", "\n", "chain.run(question)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "NEO4J_URI = 'neo4j+s://f34533c1.databases.neo4j.io'\n", "NEO4J_USERNAME = 'neo4j'\n", "NEO4J_PASSWORD = 'kciu_yIXPZPH77EmnrB3H93GCNxgu30Hd5VmzIlVmrc'\n", "OPENAI_API_KEY = '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'\n" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Unable to retrieve routing information\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Connection failed: Unable to retrieve routing information\n" ] } ], "source": [ "try:\n", " \n", "\n", " driver = GraphDatabase.driver(\n", " NEO4J_URI,\n", " auth=(NEO4J_USERNAME, NEO4J_PASSWORD),\n", " \n", " )\n", "\n", " driver.verify_connectivity()\n", " print(\"Connection successful!\")\n", "except Exception as e:\n", " print(f\"Connection failed: {e}\")\n", "finally:\n", " driver.close()" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "import os\n", "os.environ[\"NEO4J_URI\"] = NEO4J_URI\n", "os.environ[\"NEO4J_USERNAME\"] = 'neo4j'\n", "os.environ[\"NEO4J_PASSWORD\"] = NEO4J_PASSWORD\n", "os.environ[\"OPENAI_API_KEY\"] = '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'\n" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Unable to retrieve routing information\n" ] }, { "ename": "ServiceUnavailable", "evalue": "Unable to retrieve routing information", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mServiceUnavailable\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[35], line 8\u001b[0m\n\u001b[1;32m 5\u001b[0m password \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39mgetenv(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNEO4J_PASSWORD\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 7\u001b[0m driver \u001b[38;5;241m=\u001b[39m GraphDatabase\u001b[38;5;241m.\u001b[39mdriver(uri, auth\u001b[38;5;241m=\u001b[39m(username, password))\n\u001b[0;32m----> 8\u001b[0m \u001b[43mdriver\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mverify_connectivity\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnection successful!\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 10\u001b[0m driver\u001b[38;5;241m.\u001b[39mclose()\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/driver.py:1083\u001b[0m, in \u001b[0;36mDriver.verify_connectivity\u001b[0;34m(self, **config)\u001b[0m\n\u001b[1;32m 1076\u001b[0m experimental_warn(\n\u001b[1;32m 1077\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAll configuration key-word arguments to \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1078\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mverify_connectivity() are experimental. They might be \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1079\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mchanged or removed in any future version without prior \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1080\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnotice.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1081\u001b[0m )\n\u001b[1;32m 1082\u001b[0m session_config \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_read_session_config(config)\n\u001b[0;32m-> 1083\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_server_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43msession_config\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/driver.py:1298\u001b[0m, in \u001b[0;36mDriver._get_server_info\u001b[0;34m(self, session_config)\u001b[0m\n\u001b[1;32m 1296\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_get_server_info\u001b[39m(\u001b[38;5;28mself\u001b[39m, session_config) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m ServerInfo:\n\u001b[1;32m 1297\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_session(session_config) \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m-> 1298\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_server_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/session.py:183\u001b[0m, in \u001b[0;36mSession._get_server_info\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 181\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_get_server_info\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 182\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connection\n\u001b[0;32m--> 183\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_connect\u001b[49m\u001b[43m(\u001b[49m\u001b[43mREAD_ACCESS\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mliveness_check_timeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 184\u001b[0m server_info \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connection\u001b[38;5;241m.\u001b[39mserver_info\n\u001b[1;32m 185\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_disconnect()\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/session.py:136\u001b[0m, in \u001b[0;36mSession._connect\u001b[0;34m(self, access_mode, **acquire_kwargs)\u001b[0m\n\u001b[1;32m 134\u001b[0m access_mode \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_config\u001b[38;5;241m.\u001b[39mdefault_access_mode\n\u001b[1;32m 135\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 136\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_connect\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 137\u001b[0m \u001b[43m \u001b[49m\u001b[43maccess_mode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mauth\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mauth\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43macquire_kwargs\u001b[49m\n\u001b[1;32m 138\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 139\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39mCancelledError:\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_handle_cancellation(message\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_connect\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/workspace.py:167\u001b[0m, in \u001b[0;36mWorkspace._connect\u001b[0;34m(self, access_mode, auth, **acquire_kwargs)\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 160\u001b[0m \u001b[38;5;66;03m# This is the first time we open a connection to a server in a\u001b[39;00m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;66;03m# cluster environment for this session without explicitly\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 164\u001b[0m \u001b[38;5;66;03m# we shall use this database explicitly for all subsequent\u001b[39;00m\n\u001b[1;32m 165\u001b[0m \u001b[38;5;66;03m# actions within this session.\u001b[39;00m\n\u001b[1;32m 166\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m[#0000] _: resolve home database\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 167\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate_routing_table\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[43mdatabase\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdatabase\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m \u001b[49m\u001b[43mimp_user\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mimpersonated_user\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 170\u001b[0m \u001b[43m \u001b[49m\u001b[43mbookmarks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_bookmarks\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 171\u001b[0m \u001b[43m \u001b[49m\u001b[43mauth\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mauth\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 172\u001b[0m \u001b[43m \u001b[49m\u001b[43macquisition_timeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43macquisition_timeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 173\u001b[0m \u001b[43m \u001b[49m\u001b[43mdatabase_callback\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_set_cached_database\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 174\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 175\u001b[0m acquire_kwargs_ \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 176\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124maccess_mode\u001b[39m\u001b[38;5;124m\"\u001b[39m: access_mode,\n\u001b[1;32m 177\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: acquisition_timeout,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 181\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mliveness_check_timeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 182\u001b[0m }\n\u001b[1;32m 183\u001b[0m acquire_kwargs_\u001b[38;5;241m.\u001b[39mupdate(acquire_kwargs)\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/io/_pool.py:940\u001b[0m, in \u001b[0;36mNeo4jPool.update_routing_table\u001b[0;34m(self, database, imp_user, bookmarks, auth, acquisition_timeout, database_callback)\u001b[0m\n\u001b[1;32m 938\u001b[0m \u001b[38;5;66;03m# None of the routers have been successful, so just fail\u001b[39;00m\n\u001b[1;32m 939\u001b[0m log\u001b[38;5;241m.\u001b[39merror(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to retrieve routing information\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 940\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ServiceUnavailable(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to retrieve routing information\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", "\u001b[0;31mServiceUnavailable\u001b[0m: Unable to retrieve routing information" ] } ], "source": [ "from neo4j import GraphDatabase\n", "\n", "uri = os.getenv(\"NEO4J_URI\")\n", "username = os.getenv(\"NEO4J_USERNAME\")\n", "password = os.getenv(\"NEO4J_PASSWORD\")\n", "\n", "driver = GraphDatabase.driver(uri, auth=(username, password))\n", "driver.verify_connectivity()\n", "print(\"Connection successful!\")\n", "driver.close()\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Unable to retrieve routing information\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Error: Unable to retrieve routing information\n" ] } ], "source": [ "from neo4j import GraphDatabase\n", "\n", "data = [\n", " {\"text\": \"Quantum computing is fascinating.\", \"embedding\": [0.1, 0.2, 0.3]},\n", " {\"text\": \"AI will revolutionize healthcare.\", \"embedding\": [0.3, 0.5, 0.7]},\n", "]\n", "\n", "uri = NEO4J_URI\n", "username = NEO4J_USERNAME\n", "password = NEO4J_PASSWORD\n", "\n", "driver = GraphDatabase.driver(uri, auth=(username, password))\n", "\n", "try:\n", " with driver.session() as session:\n", " result = session.run(\"RETURN 1 AS test\")\n", " for record in result:\n", " print(record[\"test\"]) # Should print \"1\"\n", "except Exception as e:\n", " print(f\"Error: {e}\")\n", "finally:\n", " driver.close()\n" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Unable to retrieve routing information\n" ] }, { "ename": "ConnectionError", "evalue": "Failed to connect to Neo4j database", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mServiceUnavailable\u001b[0m Traceback (most recent call last)", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/dspy/retrieve/neo4j_rm.py:132\u001b[0m, in \u001b[0;36mNeo4jRM.__init__\u001b[0;34m(self, index_name, text_node_property, k, retrieval_query, embedding_provider, embedding_model, embedding_function)\u001b[0m\n\u001b[1;32m 131\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdriver \u001b[38;5;241m=\u001b[39m GraphDatabase\u001b[38;5;241m.\u001b[39mdriver(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39muri, auth\u001b[38;5;241m=\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39musername, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpassword))\n\u001b[0;32m--> 132\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdriver\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mverify_connectivity\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 134\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\n\u001b[1;32m 135\u001b[0m ServiceUnavailable,\n\u001b[1;32m 136\u001b[0m AuthError,\n\u001b[1;32m 137\u001b[0m ) \u001b[38;5;28;01mas\u001b[39;00m e:\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/driver.py:1083\u001b[0m, in \u001b[0;36mDriver.verify_connectivity\u001b[0;34m(self, **config)\u001b[0m\n\u001b[1;32m 1082\u001b[0m session_config \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_read_session_config(config)\n\u001b[0;32m-> 1083\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_server_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43msession_config\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/driver.py:1298\u001b[0m, in \u001b[0;36mDriver._get_server_info\u001b[0;34m(self, session_config)\u001b[0m\n\u001b[1;32m 1297\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_session(session_config) \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m-> 1298\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_server_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/session.py:183\u001b[0m, in \u001b[0;36mSession._get_server_info\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 182\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connection\n\u001b[0;32m--> 183\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_connect\u001b[49m\u001b[43m(\u001b[49m\u001b[43mREAD_ACCESS\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mliveness_check_timeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 184\u001b[0m server_info \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connection\u001b[38;5;241m.\u001b[39mserver_info\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/session.py:136\u001b[0m, in \u001b[0;36mSession._connect\u001b[0;34m(self, access_mode, **acquire_kwargs)\u001b[0m\n\u001b[1;32m 135\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 136\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_connect\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 137\u001b[0m \u001b[43m \u001b[49m\u001b[43maccess_mode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mauth\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mauth\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43macquire_kwargs\u001b[49m\n\u001b[1;32m 138\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 139\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39mCancelledError:\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/workspace.py:167\u001b[0m, in \u001b[0;36mWorkspace._connect\u001b[0;34m(self, access_mode, auth, **acquire_kwargs)\u001b[0m\n\u001b[1;32m 166\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m[#0000] _: resolve home database\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 167\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate_routing_table\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[43mdatabase\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdatabase\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m \u001b[49m\u001b[43mimp_user\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mimpersonated_user\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 170\u001b[0m \u001b[43m \u001b[49m\u001b[43mbookmarks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_bookmarks\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 171\u001b[0m \u001b[43m \u001b[49m\u001b[43mauth\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mauth\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 172\u001b[0m \u001b[43m \u001b[49m\u001b[43macquisition_timeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43macquisition_timeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 173\u001b[0m \u001b[43m \u001b[49m\u001b[43mdatabase_callback\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_set_cached_database\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 174\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 175\u001b[0m acquire_kwargs_ \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 176\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124maccess_mode\u001b[39m\u001b[38;5;124m\"\u001b[39m: access_mode,\n\u001b[1;32m 177\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: acquisition_timeout,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 181\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mliveness_check_timeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 182\u001b[0m }\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/io/_pool.py:940\u001b[0m, in \u001b[0;36mNeo4jPool.update_routing_table\u001b[0;34m(self, database, imp_user, bookmarks, auth, acquisition_timeout, database_callback)\u001b[0m\n\u001b[1;32m 939\u001b[0m log\u001b[38;5;241m.\u001b[39merror(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to retrieve routing information\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 940\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ServiceUnavailable(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to retrieve routing information\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", "\u001b[0;31mServiceUnavailable\u001b[0m: Unable to retrieve routing information", "\nThe above exception was the direct cause of the following exception:\n", "\u001b[0;31mConnectionError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[90], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m retriever_model \u001b[38;5;241m=\u001b[39m \u001b[43mNeo4jRM\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 2\u001b[0m \u001b[43m \u001b[49m\u001b[43mindex_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mvector\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[43mtext_node_property\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtext\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\n\u001b[1;32m 4\u001b[0m \u001b[43m)\u001b[49m\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/dspy/retrieve/neo4j_rm.py:138\u001b[0m, in \u001b[0;36mNeo4jRM.__init__\u001b[0;34m(self, index_name, text_node_property, k, retrieval_query, embedding_provider, embedding_model, embedding_function)\u001b[0m\n\u001b[1;32m 132\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdriver\u001b[38;5;241m.\u001b[39mverify_connectivity()\n\u001b[1;32m 134\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\n\u001b[1;32m 135\u001b[0m ServiceUnavailable,\n\u001b[1;32m 136\u001b[0m AuthError,\n\u001b[1;32m 137\u001b[0m ) \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 138\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFailed to connect to Neo4j database\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39membedder \u001b[38;5;241m=\u001b[39m embedding_function \u001b[38;5;129;01mor\u001b[39;00m Embedder(provider\u001b[38;5;241m=\u001b[39membedding_provider, model\u001b[38;5;241m=\u001b[39membedding_model)\n", "\u001b[0;31mConnectionError\u001b[0m: Failed to connect to Neo4j database" ] } ], "source": [ "retriever_model = Neo4jRM(\n", " index_name=\"vector\",\n", " text_node_property=\"text\"\n", ")\n" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Unable to retrieve routing information\n" ] }, { "ename": "ServiceUnavailable", "evalue": "Unable to retrieve routing information", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mServiceUnavailable\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[19], line 5\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mneo4j\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m GraphDatabase\n\u001b[1;32m 2\u001b[0m driver \u001b[38;5;241m=\u001b[39m GraphDatabase\u001b[38;5;241m.\u001b[39mdriver(\n\u001b[1;32m 3\u001b[0m NEO4J_URI, auth\u001b[38;5;241m=\u001b[39m(NEO4J_USERNAME, NEO4J_PASSWORD)\n\u001b[1;32m 4\u001b[0m )\n\u001b[0;32m----> 5\u001b[0m \u001b[43mdriver\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mverify_connectivity\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/driver.py:1083\u001b[0m, in \u001b[0;36mDriver.verify_connectivity\u001b[0;34m(self, **config)\u001b[0m\n\u001b[1;32m 1076\u001b[0m experimental_warn(\n\u001b[1;32m 1077\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAll configuration key-word arguments to \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1078\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mverify_connectivity() are experimental. They might be \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1079\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mchanged or removed in any future version without prior \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1080\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnotice.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1081\u001b[0m )\n\u001b[1;32m 1082\u001b[0m session_config \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_read_session_config(config)\n\u001b[0;32m-> 1083\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_server_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43msession_config\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/driver.py:1298\u001b[0m, in \u001b[0;36mDriver._get_server_info\u001b[0;34m(self, session_config)\u001b[0m\n\u001b[1;32m 1296\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_get_server_info\u001b[39m(\u001b[38;5;28mself\u001b[39m, session_config) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m ServerInfo:\n\u001b[1;32m 1297\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_session(session_config) \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m-> 1298\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_server_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/session.py:183\u001b[0m, in \u001b[0;36mSession._get_server_info\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 181\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_get_server_info\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 182\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connection\n\u001b[0;32m--> 183\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_connect\u001b[49m\u001b[43m(\u001b[49m\u001b[43mREAD_ACCESS\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mliveness_check_timeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 184\u001b[0m server_info \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connection\u001b[38;5;241m.\u001b[39mserver_info\n\u001b[1;32m 185\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_disconnect()\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/session.py:136\u001b[0m, in \u001b[0;36mSession._connect\u001b[0;34m(self, access_mode, **acquire_kwargs)\u001b[0m\n\u001b[1;32m 134\u001b[0m access_mode \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_config\u001b[38;5;241m.\u001b[39mdefault_access_mode\n\u001b[1;32m 135\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 136\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_connect\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 137\u001b[0m \u001b[43m \u001b[49m\u001b[43maccess_mode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mauth\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mauth\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43macquire_kwargs\u001b[49m\n\u001b[1;32m 138\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 139\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39mCancelledError:\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_handle_cancellation(message\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_connect\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/workspace.py:167\u001b[0m, in \u001b[0;36mWorkspace._connect\u001b[0;34m(self, access_mode, auth, **acquire_kwargs)\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 160\u001b[0m \u001b[38;5;66;03m# This is the first time we open a connection to a server in a\u001b[39;00m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;66;03m# cluster environment for this session without explicitly\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 164\u001b[0m \u001b[38;5;66;03m# we shall use this database explicitly for all subsequent\u001b[39;00m\n\u001b[1;32m 165\u001b[0m \u001b[38;5;66;03m# actions within this session.\u001b[39;00m\n\u001b[1;32m 166\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m[#0000] _: resolve home database\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 167\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate_routing_table\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[43mdatabase\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdatabase\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m \u001b[49m\u001b[43mimp_user\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mimpersonated_user\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 170\u001b[0m \u001b[43m \u001b[49m\u001b[43mbookmarks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_bookmarks\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 171\u001b[0m \u001b[43m \u001b[49m\u001b[43mauth\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mauth\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 172\u001b[0m \u001b[43m \u001b[49m\u001b[43macquisition_timeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43macquisition_timeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 173\u001b[0m \u001b[43m \u001b[49m\u001b[43mdatabase_callback\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_set_cached_database\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 174\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 175\u001b[0m acquire_kwargs_ \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 176\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124maccess_mode\u001b[39m\u001b[38;5;124m\"\u001b[39m: access_mode,\n\u001b[1;32m 177\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: acquisition_timeout,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 181\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mliveness_check_timeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 182\u001b[0m }\n\u001b[1;32m 183\u001b[0m acquire_kwargs_\u001b[38;5;241m.\u001b[39mupdate(acquire_kwargs)\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/io/_pool.py:940\u001b[0m, in \u001b[0;36mNeo4jPool.update_routing_table\u001b[0;34m(self, database, imp_user, bookmarks, auth, acquisition_timeout, database_callback)\u001b[0m\n\u001b[1;32m 938\u001b[0m \u001b[38;5;66;03m# None of the routers have been successful, so just fail\u001b[39;00m\n\u001b[1;32m 939\u001b[0m log\u001b[38;5;241m.\u001b[39merror(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to retrieve routing information\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 940\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ServiceUnavailable(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to retrieve routing information\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", "\u001b[0;31mServiceUnavailable\u001b[0m: Unable to retrieve routing information" ] } ], "source": [ "from neo4j import GraphDatabase\n", "driver = GraphDatabase.driver(\n", " NEO4J_URI, auth=(NEO4J_USERNAME, NEO4J_PASSWORD)\n", ")\n", "driver.verify_connectivity()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Unable to retrieve routing information\n" ] }, { "ename": "ServiceUnavailable", "evalue": "Unable to retrieve routing information", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mServiceUnavailable\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[16], line 8\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;66;03m# Create a driver session\u001b[39;00m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m driver\u001b[38;5;241m.\u001b[39msession() \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m----> 8\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mRETURN 1 AS test\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m record \u001b[38;5;129;01min\u001b[39;00m result:\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28mprint\u001b[39m(record[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtest\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/session.py:313\u001b[0m, in \u001b[0;36mSession.run\u001b[0;34m(self, query, parameters, **kwargs)\u001b[0m\n\u001b[1;32m 310\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_auto_result\u001b[38;5;241m.\u001b[39m_buffer_all()\n\u001b[1;32m 312\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connection:\n\u001b[0;32m--> 313\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_connect\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdefault_access_mode\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 314\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connection \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 315\u001b[0m cx \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connection\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/session.py:136\u001b[0m, in \u001b[0;36mSession._connect\u001b[0;34m(self, access_mode, **acquire_kwargs)\u001b[0m\n\u001b[1;32m 134\u001b[0m access_mode \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_config\u001b[38;5;241m.\u001b[39mdefault_access_mode\n\u001b[1;32m 135\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 136\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_connect\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 137\u001b[0m \u001b[43m \u001b[49m\u001b[43maccess_mode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mauth\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mauth\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43macquire_kwargs\u001b[49m\n\u001b[1;32m 138\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 139\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39mCancelledError:\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_handle_cancellation(message\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_connect\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/workspace.py:167\u001b[0m, in \u001b[0;36mWorkspace._connect\u001b[0;34m(self, access_mode, auth, **acquire_kwargs)\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 160\u001b[0m \u001b[38;5;66;03m# This is the first time we open a connection to a server in a\u001b[39;00m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;66;03m# cluster environment for this session without explicitly\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 164\u001b[0m \u001b[38;5;66;03m# we shall use this database explicitly for all subsequent\u001b[39;00m\n\u001b[1;32m 165\u001b[0m \u001b[38;5;66;03m# actions within this session.\u001b[39;00m\n\u001b[1;32m 166\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m[#0000] _: resolve home database\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 167\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate_routing_table\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[43mdatabase\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdatabase\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m \u001b[49m\u001b[43mimp_user\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mimpersonated_user\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 170\u001b[0m \u001b[43m \u001b[49m\u001b[43mbookmarks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_bookmarks\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 171\u001b[0m \u001b[43m \u001b[49m\u001b[43mauth\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mauth\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 172\u001b[0m \u001b[43m \u001b[49m\u001b[43macquisition_timeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43macquisition_timeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 173\u001b[0m \u001b[43m \u001b[49m\u001b[43mdatabase_callback\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_set_cached_database\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 174\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 175\u001b[0m acquire_kwargs_ \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 176\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124maccess_mode\u001b[39m\u001b[38;5;124m\"\u001b[39m: access_mode,\n\u001b[1;32m 177\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: acquisition_timeout,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 181\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mliveness_check_timeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 182\u001b[0m }\n\u001b[1;32m 183\u001b[0m acquire_kwargs_\u001b[38;5;241m.\u001b[39mupdate(acquire_kwargs)\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/io/_pool.py:940\u001b[0m, in \u001b[0;36mNeo4jPool.update_routing_table\u001b[0;34m(self, database, imp_user, bookmarks, auth, acquisition_timeout, database_callback)\u001b[0m\n\u001b[1;32m 938\u001b[0m \u001b[38;5;66;03m# None of the routers have been successful, so just fail\u001b[39;00m\n\u001b[1;32m 939\u001b[0m log\u001b[38;5;241m.\u001b[39merror(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to retrieve routing information\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 940\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ServiceUnavailable(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to retrieve routing information\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", "\u001b[0;31mServiceUnavailable\u001b[0m: Unable to retrieve routing information" ] } ], "source": [ "# Cypher query\n", "gds_version_query = \"\"\"\n", " RETURN gds.version() AS version\n", "\"\"\"\n", "\n", "# Create a driver session\n", "with driver.session() as session:\n", " result = session.run(\"RETURN 1 AS test\")\n", " for record in result:\n", " print(record[\"test\"])" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Name: neo4j\n", "Version: 5.26.0\n", "Summary: Neo4j Bolt driver for Python\n", "Home-page: https://neo4j.com/\n", "Author: \n", "Author-email: \"Neo4j, Inc.\" \n", "License: Apache License, Version 2.0\n", "Location: /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages\n", "Requires: pytz\n", "Required-by: \n", "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "pip show neo4j" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Unable to retrieve routing information\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "neo4j+s://f34533c1.databases.neo4j.io ('neo4j', 'kciu_yIXPZPH77EmnrB3H93GCNxgu30Hd5VmzIlVmrc')\n" ] }, { "ename": "ServiceUnavailable", "evalue": "Unable to retrieve routing information", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mServiceUnavailable\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[1], line 13\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28mprint\u001b[39m(URI, AUTH)\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m GraphDatabase\u001b[38;5;241m.\u001b[39mdriver(URI, auth\u001b[38;5;241m=\u001b[39mAUTH) \u001b[38;5;28;01mas\u001b[39;00m driver:\n\u001b[0;32m---> 13\u001b[0m \u001b[43mdriver\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mverify_connectivity\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnection established.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/driver.py:1083\u001b[0m, in \u001b[0;36mDriver.verify_connectivity\u001b[0;34m(self, **config)\u001b[0m\n\u001b[1;32m 1076\u001b[0m experimental_warn(\n\u001b[1;32m 1077\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAll configuration key-word arguments to \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1078\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mverify_connectivity() are experimental. They might be \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1079\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mchanged or removed in any future version without prior \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1080\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnotice.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1081\u001b[0m )\n\u001b[1;32m 1082\u001b[0m session_config \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_read_session_config(config)\n\u001b[0;32m-> 1083\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_server_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43msession_config\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/driver.py:1298\u001b[0m, in \u001b[0;36mDriver._get_server_info\u001b[0;34m(self, session_config)\u001b[0m\n\u001b[1;32m 1296\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_get_server_info\u001b[39m(\u001b[38;5;28mself\u001b[39m, session_config) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m ServerInfo:\n\u001b[1;32m 1297\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_session(session_config) \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m-> 1298\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_server_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/session.py:183\u001b[0m, in \u001b[0;36mSession._get_server_info\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 181\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_get_server_info\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 182\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connection\n\u001b[0;32m--> 183\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_connect\u001b[49m\u001b[43m(\u001b[49m\u001b[43mREAD_ACCESS\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mliveness_check_timeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 184\u001b[0m server_info \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connection\u001b[38;5;241m.\u001b[39mserver_info\n\u001b[1;32m 185\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_disconnect()\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/session.py:136\u001b[0m, in \u001b[0;36mSession._connect\u001b[0;34m(self, access_mode, **acquire_kwargs)\u001b[0m\n\u001b[1;32m 134\u001b[0m access_mode \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_config\u001b[38;5;241m.\u001b[39mdefault_access_mode\n\u001b[1;32m 135\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 136\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_connect\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 137\u001b[0m \u001b[43m \u001b[49m\u001b[43maccess_mode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mauth\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mauth\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43macquire_kwargs\u001b[49m\n\u001b[1;32m 138\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 139\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39mCancelledError:\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_handle_cancellation(message\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_connect\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/work/workspace.py:167\u001b[0m, in \u001b[0;36mWorkspace._connect\u001b[0;34m(self, access_mode, auth, **acquire_kwargs)\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 160\u001b[0m \u001b[38;5;66;03m# This is the first time we open a connection to a server in a\u001b[39;00m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;66;03m# cluster environment for this session without explicitly\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 164\u001b[0m \u001b[38;5;66;03m# we shall use this database explicitly for all subsequent\u001b[39;00m\n\u001b[1;32m 165\u001b[0m \u001b[38;5;66;03m# actions within this session.\u001b[39;00m\n\u001b[1;32m 166\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m[#0000] _: resolve home database\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 167\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate_routing_table\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[43mdatabase\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdatabase\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m \u001b[49m\u001b[43mimp_user\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mimpersonated_user\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 170\u001b[0m \u001b[43m \u001b[49m\u001b[43mbookmarks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_bookmarks\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 171\u001b[0m \u001b[43m \u001b[49m\u001b[43mauth\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mauth\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 172\u001b[0m \u001b[43m \u001b[49m\u001b[43macquisition_timeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43macquisition_timeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 173\u001b[0m \u001b[43m \u001b[49m\u001b[43mdatabase_callback\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_set_cached_database\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 174\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 175\u001b[0m acquire_kwargs_ \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 176\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124maccess_mode\u001b[39m\u001b[38;5;124m\"\u001b[39m: access_mode,\n\u001b[1;32m 177\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: acquisition_timeout,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 181\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mliveness_check_timeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 182\u001b[0m }\n\u001b[1;32m 183\u001b[0m acquire_kwargs_\u001b[38;5;241m.\u001b[39mupdate(acquire_kwargs)\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/neo4j/_sync/io/_pool.py:940\u001b[0m, in \u001b[0;36mNeo4jPool.update_routing_table\u001b[0;34m(self, database, imp_user, bookmarks, auth, acquisition_timeout, database_callback)\u001b[0m\n\u001b[1;32m 938\u001b[0m \u001b[38;5;66;03m# None of the routers have been successful, so just fail\u001b[39;00m\n\u001b[1;32m 939\u001b[0m log\u001b[38;5;241m.\u001b[39merror(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to retrieve routing information\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 940\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ServiceUnavailable(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnable to retrieve routing information\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", "\u001b[0;31mServiceUnavailable\u001b[0m: Unable to retrieve routing information" ] } ], "source": [ "import dotenv\n", "import os\n", "from neo4j import GraphDatabase\n", "\n", "load_status = dotenv.load_dotenv(\"Neo4j-f34533c1-Created-2024-11-18.txt\")\n", "if load_status is False:\n", " raise RuntimeError('Environment variables not loaded.')\n", "\n", "URI = os.getenv(\"NEO4J_URI\")\n", "AUTH = (os.getenv(\"NEO4J_USERNAME\"), os.getenv(\"NEO4J_PASSWORD\"))\n", "print(URI, AUTH)\n", "with GraphDatabase.driver(URI, auth=AUTH) as driver:\n", " driver.verify_connectivity()\n", " print(\"Connection established.\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'hzgz. hrhrhr'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "line = '1.hzgz. hrhrhr '\n", "line.split('.',1)[1].strip()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.6" } }, "nbformat": 4, "nbformat_minor": 2 }