diff --git a/docs/docs/how_to/graph_constructing.ipynb b/docs/docs/how_to/graph_constructing.ipynb index 5ca45d73645..d36ca54c8cf 100644 --- a/docs/docs/how_to/graph_constructing.ipynb +++ b/docs/docs/how_to/graph_constructing.ipynb @@ -52,7 +52,7 @@ } ], "source": [ - "%pip install --upgrade --quiet langchain langchain-community langchain-openai langchain-experimental neo4j" + "%pip install --upgrade --quiet langchain langchain-neo4j langchain-openai langchain-experimental neo4j" ] }, { @@ -102,7 +102,7 @@ "source": [ "import os\n", "\n", - "from langchain_community.graphs import Neo4jGraph\n", + "from langchain_neo4j import Neo4jGraph\n", "\n", "os.environ[\"NEO4J_URI\"] = \"bolt://localhost:7687\"\n", "os.environ[\"NEO4J_USERNAME\"] = \"neo4j\"\n", diff --git a/docs/docs/how_to/graph_mapping.ipynb b/docs/docs/how_to/graph_mapping.ipynb index cd98ca00b67..146f479e27d 100644 --- a/docs/docs/how_to/graph_mapping.ipynb +++ b/docs/docs/how_to/graph_mapping.ipynb @@ -33,7 +33,7 @@ "metadata": {}, "outputs": [], "source": [ - "%pip install --upgrade --quiet langchain langchain-community langchain-openai neo4j" + "%pip install --upgrade --quiet langchain langchain-neo4j langchain-openai neo4j" ] }, { @@ -116,7 +116,7 @@ } ], "source": [ - "from langchain_community.graphs import Neo4jGraph\n", + "from langchain_neo4j import Neo4jGraph\n", "\n", "graph = Neo4jGraph()\n", "\n", @@ -364,11 +364,12 @@ "metadata": {}, "outputs": [], "source": [ - "from langchain_community.chains.graph_qa.cypher_utils import (\n", + "from langchain_neo4j.chains.graph_qa.cypher_utils import (\n", " CypherQueryCorrector,\n", " Schema,\n", ")\n", "\n", + "graph.refresh_schema()\n", "# Cypher validation tool for relationship directions\n", "corrector_schema = [\n", " Schema(el[\"start\"], el[\"type\"], el[\"end\"])\n", diff --git a/docs/docs/how_to/graph_prompting.ipynb b/docs/docs/how_to/graph_prompting.ipynb index 0b83559e7e1..db4922fb3a2 100644 --- a/docs/docs/how_to/graph_prompting.ipynb +++ b/docs/docs/how_to/graph_prompting.ipynb @@ -36,7 +36,7 @@ } ], "source": [ - "%pip install --upgrade --quiet langchain langchain-community langchain-openai neo4j" + "%pip install --upgrade --quiet langchain langchain-neo4j langchain-openai neo4j" ] }, { @@ -113,7 +113,7 @@ } ], "source": [ - "from langchain_community.graphs import Neo4jGraph\n", + "from langchain_neo4j import Neo4jGraph\n", "\n", "graph = Neo4jGraph()\n", "\n", @@ -188,12 +188,16 @@ "metadata": {}, "outputs": [], "source": [ - "from langchain.chains import GraphCypherQAChain\n", + "from langchain_neo4j import GraphCypherQAChain\n", "from langchain_openai import ChatOpenAI\n", "\n", "llm = ChatOpenAI(model=\"gpt-3.5-turbo\", temperature=0)\n", "chain = GraphCypherQAChain.from_llm(\n", - " graph=graph, llm=llm, exclude_types=[\"Genre\"], verbose=True\n", + " graph=graph,\n", + " llm=llm,\n", + " exclude_types=[\"Genre\"],\n", + " verbose=True,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -356,8 +360,8 @@ "metadata": {}, "outputs": [], "source": [ - "from langchain_community.vectorstores import Neo4jVector\n", "from langchain_core.example_selectors import SemanticSimilarityExampleSelector\n", + "from langchain_neo4j import Neo4jVector\n", "from langchain_openai import OpenAIEmbeddings\n", "\n", "example_selector = SemanticSimilarityExampleSelector.from_examples(\n", @@ -468,7 +472,11 @@ "source": [ "llm = ChatOpenAI(model=\"gpt-3.5-turbo\", temperature=0)\n", "chain = GraphCypherQAChain.from_llm(\n", - " graph=graph, llm=llm, cypher_prompt=prompt, verbose=True\n", + " graph=graph,\n", + " llm=llm,\n", + " cypher_prompt=prompt,\n", + " verbose=True,\n", + " allow_dangerous_requests=True,\n", ")" ] }, diff --git a/docs/docs/how_to/graph_semantic.ipynb b/docs/docs/how_to/graph_semantic.ipynb index 94578939d7b..4cd717d8612 100644 --- a/docs/docs/how_to/graph_semantic.ipynb +++ b/docs/docs/how_to/graph_semantic.ipynb @@ -44,7 +44,7 @@ } ], "source": [ - "%pip install --upgrade --quiet langchain langchain-community langchain-openai neo4j" + "%pip install --upgrade --quiet langchain langchain-neo4j langchain-openai neo4j" ] }, { @@ -127,7 +127,7 @@ } ], "source": [ - "from langchain_community.graphs import Neo4jGraph\n", + "from langchain_neo4j import Neo4jGraph\n", "\n", "graph = Neo4jGraph()\n", "\n", @@ -242,8 +242,8 @@ "\n", "\n", "class InformationTool(BaseTool):\n", - " name = \"Information\"\n", - " description = (\n", + " name: str = \"Information\"\n", + " description: str = (\n", " \"useful for when you need to answer questions about various actors or movies\"\n", " )\n", " args_schema: Type[BaseModel] = InformationInput\n", diff --git a/docs/docs/integrations/graphs/apache_age.ipynb b/docs/docs/integrations/graphs/apache_age.ipynb index b3c39e974ab..588567c018c 100644 --- a/docs/docs/integrations/graphs/apache_age.ipynb +++ b/docs/docs/integrations/graphs/apache_age.ipynb @@ -45,8 +45,8 @@ "metadata": {}, "outputs": [], "source": [ - "from langchain.chains import GraphCypherQAChain\n", "from langchain_community.graphs.age_graph import AGEGraph\n", + "from langchain_neo4j import GraphCypherQAChain\n", "from langchain_openai import ChatOpenAI" ] }, @@ -169,7 +169,7 @@ "outputs": [], "source": [ "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0), graph=graph, verbose=True\n", + " ChatOpenAI(temperature=0), graph=graph, verbose=True, allow_dangerous_requests=True\n", ")" ] }, @@ -236,7 +236,11 @@ "outputs": [], "source": [ "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0), graph=graph, verbose=True, top_k=2\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " verbose=True,\n", + " top_k=2,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -295,7 +299,11 @@ "outputs": [], "source": [ "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0), graph=graph, verbose=True, return_intermediate_steps=True\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " verbose=True,\n", + " return_intermediate_steps=True,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -348,7 +356,11 @@ "outputs": [], "source": [ "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0), graph=graph, verbose=True, return_direct=True\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " verbose=True,\n", + " return_direct=True,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -435,6 +447,7 @@ " graph=graph,\n", " verbose=True,\n", " cypher_prompt=CYPHER_GENERATION_PROMPT,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -503,6 +516,7 @@ " cypher_llm=ChatOpenAI(temperature=0, model=\"gpt-3.5-turbo\"),\n", " qa_llm=ChatOpenAI(temperature=0, model=\"gpt-3.5-turbo-16k\"),\n", " verbose=True,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -574,6 +588,7 @@ " qa_llm=ChatOpenAI(temperature=0, model=\"gpt-3.5-turbo-16k\"),\n", " verbose=True,\n", " exclude_types=[\"Movie\"],\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -622,6 +637,7 @@ " graph=graph,\n", " verbose=True,\n", " validate_cypher=True,\n", + " allow_dangerous_requests=True,\n", ")" ] }, diff --git a/docs/docs/integrations/graphs/diffbot.ipynb b/docs/docs/integrations/graphs/diffbot.ipynb index 06a8ed4e21b..9c4a5e866f4 100644 --- a/docs/docs/integrations/graphs/diffbot.ipynb +++ b/docs/docs/integrations/graphs/diffbot.ipynb @@ -45,7 +45,7 @@ "metadata": {}, "outputs": [], "source": [ - "%pip install --upgrade --quiet langchain langchain-experimental langchain-openai neo4j wikipedia" + "%pip install --upgrade --quiet langchain langchain-experimental langchain-openai langchain-neo4j neo4j wikipedia" ] }, { @@ -124,7 +124,7 @@ "metadata": {}, "outputs": [], "source": [ - "from langchain_community.graphs import Neo4jGraph\n", + "from langchain_neo4j import Neo4jGraph\n", "\n", "url = \"bolt://localhost:7687\"\n", "username = \"neo4j\"\n", @@ -186,7 +186,7 @@ "metadata": {}, "outputs": [], "source": [ - "from langchain.chains import GraphCypherQAChain\n", + "from langchain_neo4j import GraphCypherQAChain\n", "from langchain_openai import ChatOpenAI\n", "\n", "chain = GraphCypherQAChain.from_llm(\n", @@ -194,6 +194,7 @@ " qa_llm=ChatOpenAI(temperature=0, model_name=\"gpt-3.5-turbo\"),\n", " graph=graph,\n", " verbose=True,\n", + " allow_dangerous_requests=True,\n", ")" ] }, diff --git a/docs/docs/integrations/graphs/memgraph.ipynb b/docs/docs/integrations/graphs/memgraph.ipynb index 85eb7497dbf..4dc8d33be4b 100644 --- a/docs/docs/integrations/graphs/memgraph.ipynb +++ b/docs/docs/integrations/graphs/memgraph.ipynb @@ -53,7 +53,7 @@ "metadata": {}, "outputs": [], "source": [ - "pip install langchain langchain-openai neo4j gqlalchemy --user" + "pip install langchain langchain-neo4j langchain-openai neo4j gqlalchemy --user" ] }, { @@ -74,9 +74,9 @@ "import os\n", "\n", "from gqlalchemy import Memgraph\n", - "from langchain.chains import GraphCypherQAChain\n", "from langchain_community.graphs import MemgraphGraph\n", "from langchain_core.prompts import PromptTemplate\n", + "from langchain_neo4j import GraphCypherQAChain\n", "from langchain_openai import ChatOpenAI" ] }, @@ -259,7 +259,11 @@ "outputs": [], "source": [ "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0), graph=graph, verbose=True, model_name=\"gpt-3.5-turbo\"\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " verbose=True,\n", + " model_name=\"gpt-3.5-turbo\",\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -363,7 +367,11 @@ "source": [ "# Return the result of querying the graph directly\n", "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0), graph=graph, verbose=True, return_direct=True\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " verbose=True,\n", + " return_direct=True,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -412,7 +420,11 @@ "source": [ "# Return all the intermediate steps of query execution\n", "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0), graph=graph, verbose=True, return_intermediate_steps=True\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " verbose=True,\n", + " return_intermediate_steps=True,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -465,7 +477,11 @@ "source": [ "# Limit the maximum number of results returned by query\n", "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0), graph=graph, verbose=True, top_k=2\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " verbose=True,\n", + " top_k=2,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -530,7 +546,11 @@ "outputs": [], "source": [ "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0), graph=graph, verbose=True, model_name=\"gpt-3.5-turbo\"\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " verbose=True,\n", + " model_name=\"gpt-3.5-turbo\",\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -628,6 +648,7 @@ " graph=graph,\n", " verbose=True,\n", " model_name=\"gpt-3.5-turbo\",\n", + " allow_dangerous_requests=True,\n", ")" ] }, diff --git a/docs/docs/integrations/graphs/neo4j_cypher.ipynb b/docs/docs/integrations/graphs/neo4j_cypher.ipynb index 3348f0b8d26..8dd9824d671 100644 --- a/docs/docs/integrations/graphs/neo4j_cypher.ipynb +++ b/docs/docs/integrations/graphs/neo4j_cypher.ipynb @@ -46,8 +46,7 @@ "metadata": {}, "outputs": [], "source": [ - "from langchain.chains import GraphCypherQAChain\n", - "from langchain_community.graphs import Neo4jGraph\n", + "from langchain_neo4j import GraphCypherQAChain, Neo4jGraph\n", "from langchain_openai import ChatOpenAI" ] }, @@ -61,6 +60,28 @@ "graph = Neo4jGraph(url=\"bolt://localhost:7687\", username=\"neo4j\", password=\"password\")" ] }, + { + "cell_type": "markdown", + "id": "8c663e91", + "metadata": {}, + "source": [ + "We default to OpenAI models in this guide." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "51c88001", + "metadata": {}, + "outputs": [], + "source": [ + "import getpass\n", + "import os\n", + "\n", + "if \"OPENAI_API_KEY\" not in os.environ:\n", + " os.environ[\"OPENAI_API_KEY\"] = getpass.getpass(\"OpenAI API Key:\")" + ] + }, { "cell_type": "markdown", "id": "995ea9b9", @@ -203,7 +224,7 @@ "outputs": [], "source": [ "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0), graph=graph, verbose=True\n", + " ChatOpenAI(temperature=0), graph=graph, verbose=True, allow_dangerous_requests=True\n", ")" ] }, @@ -264,7 +285,11 @@ "outputs": [], "source": [ "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0), graph=graph, verbose=True, top_k=2\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " verbose=True,\n", + " top_k=2,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -324,7 +349,11 @@ "outputs": [], "source": [ "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0), graph=graph, verbose=True, return_intermediate_steps=True\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " verbose=True,\n", + " return_intermediate_steps=True,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -377,7 +406,11 @@ "outputs": [], "source": [ "chain = GraphCypherQAChain.from_llm(\n", - " ChatOpenAI(temperature=0), graph=graph, verbose=True, return_direct=True\n", + " ChatOpenAI(temperature=0),\n", + " graph=graph,\n", + " verbose=True,\n", + " return_direct=True,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -465,6 +498,7 @@ " graph=graph,\n", " verbose=True,\n", " cypher_prompt=CYPHER_GENERATION_PROMPT,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -527,6 +561,7 @@ " cypher_llm=ChatOpenAI(temperature=0, model=\"gpt-3.5-turbo\"),\n", " qa_llm=ChatOpenAI(temperature=0, model=\"gpt-3.5-turbo-16k\"),\n", " verbose=True,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -592,6 +627,7 @@ " qa_llm=ChatOpenAI(temperature=0, model=\"gpt-3.5-turbo-16k\"),\n", " verbose=True,\n", " exclude_types=[\"Movie\"],\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -640,6 +676,7 @@ " graph=graph,\n", " verbose=True,\n", " validate_cypher=True,\n", + " allow_dangerous_requests=True,\n", ")" ] }, @@ -734,6 +771,7 @@ " graph=graph,\n", " verbose=True,\n", " use_function_response=True,\n", + " allow_dangerous_requests=True,\n", ")\n", "chain.invoke({\"query\": \"Who played in Top Gun?\"})" ] @@ -790,6 +828,7 @@ " verbose=True,\n", " use_function_response=True,\n", " function_response_system=\"Respond as a pirate!\",\n", + " allow_dangerous_requests=True,\n", ")\n", "chain.invoke({\"query\": \"Who played in Top Gun?\"})" ] diff --git a/docs/docs/integrations/memory/neo4j_chat_message_history.ipynb b/docs/docs/integrations/memory/neo4j_chat_message_history.ipynb index d9dc80020c8..20cfd9ce68c 100644 --- a/docs/docs/integrations/memory/neo4j_chat_message_history.ipynb +++ b/docs/docs/integrations/memory/neo4j_chat_message_history.ipynb @@ -19,7 +19,7 @@ "metadata": {}, "outputs": [], "source": [ - "from langchain_community.chat_message_histories import Neo4jChatMessageHistory\n", + "from langchain_neo4j import Neo4jChatMessageHistory\n", "\n", "history = Neo4jChatMessageHistory(\n", " url=\"bolt://localhost:7687\",\n", diff --git a/docs/docs/integrations/providers/neo4j.mdx b/docs/docs/integrations/providers/neo4j.mdx index 929b622d612..2b8d8f683cc 100644 --- a/docs/docs/integrations/providers/neo4j.mdx +++ b/docs/docs/integrations/providers/neo4j.mdx @@ -11,7 +11,7 @@ ## Installation and Setup -- Install the Python SDK with `pip install neo4j` +- Install the Python SDK with `pip install neo4j langchain-neo4j` ## VectorStore @@ -20,7 +20,7 @@ The Neo4j vector index is used as a vectorstore, whether for semantic search or example selection. ```python -from langchain_community.vectorstores import Neo4jVector +from langchain_neo4j import Neo4jVector ``` See a [usage example](/docs/integrations/vectorstores/neo4jvector) @@ -31,8 +31,7 @@ There exists a wrapper around Neo4j graph database that allows you to generate C and use them to retrieve relevant information from the database. ```python -from langchain_community.graphs import Neo4jGraph -from langchain.chains import GraphCypherQAChain +from langchain_neo4j import GraphCypherQAChain, Neo4jGraph ``` See a [usage example](/docs/integrations/graphs/neo4j_cypher) @@ -45,7 +44,7 @@ By coupling Diffbot's NLP API with Neo4j, a graph database, you can create power These graph structures are fully queryable and can be integrated into various applications. ```python -from langchain_community.graphs import Neo4jGraph +from langchain_neo4j import Neo4jGraph from langchain_experimental.graph_transformers.diffbot import DiffbotGraphTransformer ``` @@ -56,5 +55,5 @@ See a [usage example](/docs/integrations/graphs/diffbot) See a [usage example](/docs/integrations/memory/neo4j_chat_message_history). ```python -from langchain.memory import Neo4jChatMessageHistory +from langchain_neo4j import Neo4jChatMessageHistory ``` diff --git a/docs/docs/integrations/retrievers/self_query/neo4j_self_query.ipynb b/docs/docs/integrations/retrievers/self_query/neo4j_self_query.ipynb index 6bc4f718dfc..0d2f1452127 100644 --- a/docs/docs/integrations/retrievers/self_query/neo4j_self_query.ipynb +++ b/docs/docs/integrations/retrievers/self_query/neo4j_self_query.ipynb @@ -99,8 +99,8 @@ "metadata": {}, "outputs": [], "source": [ - "from langchain_community.vectorstores import Neo4jVector\n", "from langchain_core.documents import Document\n", + "from langchain_neo4j import Neo4jVector\n", "from langchain_openai import OpenAIEmbeddings\n", "\n", "embeddings = OpenAIEmbeddings()" diff --git a/docs/docs/integrations/vectorstores/neo4jvector.ipynb b/docs/docs/integrations/vectorstores/neo4jvector.ipynb index cc489d5c483..87f521c2fad 100644 --- a/docs/docs/integrations/vectorstores/neo4jvector.ipynb +++ b/docs/docs/integrations/vectorstores/neo4jvector.ipynb @@ -34,7 +34,7 @@ "source": [ "# Pip install necessary package\n", "%pip install --upgrade --quiet neo4j\n", - "%pip install --upgrade --quiet langchain-openai langchain-community\n", + "%pip install --upgrade --quiet langchain-openai langchain-neo4j\n", "%pip install --upgrade --quiet tiktoken" ] }, @@ -75,8 +75,8 @@ "outputs": [], "source": [ "from langchain_community.document_loaders import TextLoader\n", - "from langchain_community.vectorstores import Neo4jVector\n", "from langchain_core.documents import Document\n", + "from langchain_neo4j import Neo4jVector\n", "from langchain_openai import OpenAIEmbeddings\n", "from langchain_text_splitters import CharacterTextSplitter" ] diff --git a/docs/docs/tutorials/graph.ipynb b/docs/docs/tutorials/graph.ipynb index d189d1af21f..4130bae5a84 100644 --- a/docs/docs/tutorials/graph.ipynb +++ b/docs/docs/tutorials/graph.ipynb @@ -45,7 +45,7 @@ "metadata": {}, "outputs": [], "source": [ - "%pip install --upgrade --quiet langchain langchain-community langchain-openai neo4j" + "%pip install --upgrade --quiet langchain langchain-neo4j langchain-openai neo4j" ] }, { @@ -123,7 +123,7 @@ } ], "source": [ - "from langchain_community.graphs import Neo4jGraph\n", + "from langchain_neo4j import Neo4jGraph\n", "\n", "graph = Neo4jGraph()\n", "\n", @@ -233,11 +233,13 @@ } ], "source": [ - "from langchain.chains import GraphCypherQAChain\n", + "from langchain_neo4j import GraphCypherQAChain\n", "from langchain_openai import ChatOpenAI\n", "\n", "llm = ChatOpenAI(model=\"gpt-3.5-turbo\", temperature=0)\n", - "chain = GraphCypherQAChain.from_llm(graph=graph, llm=llm, verbose=True)\n", + "chain = GraphCypherQAChain.from_llm(\n", + " graph=graph, llm=llm, verbose=True, allow_dangerous_requests=True\n", + ")\n", "response = chain.invoke({\"query\": \"What was the cast of the Casino?\"})\n", "response" ] @@ -286,7 +288,11 @@ ], "source": [ "chain = GraphCypherQAChain.from_llm(\n", - " graph=graph, llm=llm, verbose=True, validate_cypher=True\n", + " graph=graph,\n", + " llm=llm,\n", + " verbose=True,\n", + " validate_cypher=True,\n", + " allow_dangerous_requests=True,\n", ")\n", "response = chain.invoke({\"query\": \"What was the cast of the Casino?\"})\n", "response" diff --git a/libs/community/langchain_community/chains/graph_qa/cypher.py b/libs/community/langchain_community/chains/graph_qa/cypher.py index 91a5ba60662..760ce667312 100644 --- a/libs/community/langchain_community/chains/graph_qa/cypher.py +++ b/libs/community/langchain_community/chains/graph_qa/cypher.py @@ -7,6 +7,7 @@ from typing import Any, Dict, List, Optional, Union from langchain.chains.base import Chain from langchain.chains.llm import LLMChain +from langchain_core._api.deprecation import deprecated from langchain_core.callbacks import CallbackManagerForChainRun from langchain_core.language_models import BaseLanguageModel from langchain_core.messages import ( @@ -44,6 +45,11 @@ very concise style in interpreting results! """ +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.chains.graph_qa.cypher.extract_cypher", +) def extract_cypher(text: str) -> str: """Extract Cypher code from a text. @@ -62,6 +68,11 @@ def extract_cypher(text: str) -> str: return matches[0] if matches else text +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.chains.graph_qa.cypher.construct_schema", +) def construct_schema( structured_schema: Dict[str, Any], include_types: List[str], @@ -124,6 +135,11 @@ def construct_schema( ) +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.chains.graph_qa.cypher.get_function_response", +) def get_function_response( question: str, context: List[Dict[str, Any]] ) -> List[BaseMessage]: @@ -149,6 +165,11 @@ def get_function_response( return messages +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.GraphCypherQAChain", +) class GraphCypherQAChain(Chain): """Chain for question-answering against a graph by generating Cypher statements. diff --git a/libs/community/langchain_community/chains/graph_qa/cypher_utils.py b/libs/community/langchain_community/chains/graph_qa/cypher_utils.py index c123cac9b52..4d8c7c45572 100644 --- a/libs/community/langchain_community/chains/graph_qa/cypher_utils.py +++ b/libs/community/langchain_community/chains/graph_qa/cypher_utils.py @@ -2,9 +2,16 @@ import re from collections import namedtuple from typing import Any, Dict, List, Optional, Tuple +from langchain_core._api.deprecation import deprecated + Schema = namedtuple("Schema", ["left_node", "relation", "right_node"]) +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.chains.graph_qa.cypher_utils.CypherQueryCorrector", +) class CypherQueryCorrector: """ Used to correct relationship direction in generated Cypher statements. diff --git a/libs/community/langchain_community/chat_message_histories/neo4j.py b/libs/community/langchain_community/chat_message_histories/neo4j.py index aeca69cdad8..5a054c706de 100644 --- a/libs/community/langchain_community/chat_message_histories/neo4j.py +++ b/libs/community/langchain_community/chat_message_histories/neo4j.py @@ -1,5 +1,6 @@ from typing import List, Optional, Union +from langchain_core._api.deprecation import deprecated from langchain_core.chat_history import BaseChatMessageHistory from langchain_core.messages import BaseMessage, messages_from_dict from langchain_core.utils import get_from_dict_or_env @@ -7,6 +8,11 @@ from langchain_core.utils import get_from_dict_or_env from langchain_community.graphs import Neo4jGraph +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.Neo4jChatMessageHistory", +) class Neo4jChatMessageHistory(BaseChatMessageHistory): """Chat message history stored in a Neo4j database.""" diff --git a/libs/community/langchain_community/graphs/neo4j_graph.py b/libs/community/langchain_community/graphs/neo4j_graph.py index d3e8860c891..dd2a7937f7f 100644 --- a/libs/community/langchain_community/graphs/neo4j_graph.py +++ b/libs/community/langchain_community/graphs/neo4j_graph.py @@ -1,6 +1,7 @@ from hashlib import md5 from typing import Any, Dict, List, Optional +from langchain_core._api.deprecation import deprecated from langchain_core.utils import get_from_dict_or_env from langchain_community.graphs.graph_document import GraphDocument @@ -51,6 +52,11 @@ include_docs_query = ( ) +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.graphs.neo4j_graph.clean_string_values", +) def clean_string_values(text: str) -> str: """Clean string values for schema. @@ -65,6 +71,11 @@ def clean_string_values(text: str) -> str: return text.replace("\n", " ").replace("\r", " ") +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.graphs.neo4j_graph.value_sanitize", +) def value_sanitize(d: Any) -> Any: """Sanitize the input dictionary or list. @@ -111,6 +122,11 @@ def value_sanitize(d: Any) -> Any: return d +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.graphs.neo4j_graph._get_node_import_query", +) def _get_node_import_query(baseEntityLabel: bool, include_source: bool) -> str: if baseEntityLabel: return ( @@ -134,6 +150,11 @@ def _get_node_import_query(baseEntityLabel: bool, include_source: bool) -> str: ) +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.graphs.neo4j_graph._get_rel_import_query", +) def _get_rel_import_query(baseEntityLabel: bool) -> str: if baseEntityLabel: return ( @@ -158,6 +179,11 @@ def _get_rel_import_query(baseEntityLabel: bool) -> str: ) +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.graphs.neo4j_graph._format_schema", +) def _format_schema(schema: Dict, is_enhanced: bool) -> str: formatted_node_props = [] formatted_rel_props = [] @@ -287,10 +313,20 @@ def _format_schema(schema: Dict, is_enhanced: bool) -> str: ) +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.graphs.neo4j_graph._remove_backticks", +) def _remove_backticks(text: str) -> str: return text.replace("`", "") +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.Neo4jGraph", +) class Neo4jGraph(GraphStore): """Neo4j database wrapper for various graph operations. diff --git a/libs/community/langchain_community/query_constructors/neo4j.py b/libs/community/langchain_community/query_constructors/neo4j.py index ecb62452069..2ce1de136fc 100644 --- a/libs/community/langchain_community/query_constructors/neo4j.py +++ b/libs/community/langchain_community/query_constructors/neo4j.py @@ -1,5 +1,6 @@ from typing import Dict, Tuple, Union +from langchain_core._api.deprecation import deprecated from langchain_core.structured_query import ( Comparator, Comparison, @@ -10,6 +11,11 @@ from langchain_core.structured_query import ( ) +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.query_constructors.neo4j.Neo4jTranslator", +) class Neo4jTranslator(Visitor): """Translate `Neo4j` internal query language elements to valid filters.""" diff --git a/libs/community/langchain_community/vectorstores/neo4j_vector.py b/libs/community/langchain_community/vectorstores/neo4j_vector.py index 7f7f3f97dd8..03d97a5a9d0 100644 --- a/libs/community/langchain_community/vectorstores/neo4j_vector.py +++ b/libs/community/langchain_community/vectorstores/neo4j_vector.py @@ -16,6 +16,7 @@ from typing import ( ) import numpy as np +from langchain_core._api.deprecation import deprecated from langchain_core.documents import Document from langchain_core.embeddings import Embeddings from langchain_core.utils import get_from_dict_or_env @@ -63,6 +64,11 @@ SUPPORTED_OPERATORS = ( ) +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.vectorstores.neo4j_vector.SearchType", +) class SearchType(str, enum.Enum): """Enumerator of the Distance strategies.""" @@ -73,6 +79,11 @@ class SearchType(str, enum.Enum): DEFAULT_SEARCH_TYPE = SearchType.VECTOR +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.vectorstores.neo4j_vector.IndexType", +) class IndexType(str, enum.Enum): """Enumerator of the index types.""" @@ -83,6 +94,11 @@ class IndexType(str, enum.Enum): DEFAULT_INDEX_TYPE = IndexType.NODE +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.vectorstores.neo4j_vector._get_search_index_query", +) def _get_search_index_query( search_type: SearchType, index_type: IndexType = DEFAULT_INDEX_TYPE ) -> str: @@ -119,6 +135,11 @@ def _get_search_index_query( ) +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.vectorstores.neo4j_vector.check_if_not_null", +) def check_if_not_null(props: List[str], values: List[Any]) -> None: """Check if the values are not None or empty string""" for prop, value in zip(props, values): @@ -126,6 +147,11 @@ def check_if_not_null(props: List[str], values: List[Any]) -> None: raise ValueError(f"Parameter `{prop}` must not be None or empty string") +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.vectorstores.neo4j_vector.sort_by_index_name", +) def sort_by_index_name( lst: List[Dict[str, Any]], index_name: str ) -> List[Dict[str, Any]]: @@ -133,6 +159,11 @@ def sort_by_index_name( return sorted(lst, key=lambda x: x.get("name") != index_name) +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.vectorstores.neo4j_vector.remove_lucene_chars", +) def remove_lucene_chars(text: str) -> str: """Remove Lucene special characters""" special_chars = [ @@ -161,6 +192,11 @@ def remove_lucene_chars(text: str) -> str: return text.strip() +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.vectorstores.neo4j_vector.dict_to_yaml_str", +) def dict_to_yaml_str(input_dict: Dict, indent: int = 0) -> str: """ Convert a dictionary to a YAML-like string without using external libraries. @@ -186,6 +222,11 @@ def dict_to_yaml_str(input_dict: Dict, indent: int = 0) -> str: return yaml_str +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.vectorstores.neo4j_vector.combine_queries", +) def combine_queries( input_queries: List[Tuple[str, Dict[str, Any]]], operator: str ) -> Tuple[str, Dict[str, Any]]: @@ -220,6 +261,11 @@ def combine_queries( return combined_query, combined_params +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.vectorstores.neo4j_vector.collect_params", +) def collect_params( input_data: List[Tuple[str, Dict[str, str]]], ) -> Tuple[List[str], Dict[str, Any]]: @@ -247,6 +293,11 @@ def collect_params( return (query_parts, params) +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.vectorstores.neo4j_vector._handle_field_filter", +) def _handle_field_filter( field: str, value: Any, param_number: int = 1 ) -> Tuple[str, Dict]: @@ -348,6 +399,11 @@ def _handle_field_filter( raise NotImplementedError() +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.vectorstores.neo4j_vector.construct_metadata_filter", +) def construct_metadata_filter(filter: Dict[str, Any]) -> Tuple[str, Dict]: """Construct a metadata filter. @@ -430,6 +486,11 @@ def construct_metadata_filter(filter: Dict[str, Any]) -> Tuple[str, Dict]: raise ValueError("Got an empty dictionary for filters.") +@deprecated( + since="0.3.8", + removal="1.0", + alternative_import="langchain_neo4j.Neo4jVector", +) class Neo4jVector(VectorStore): """`Neo4j` vector index.