Skip to content

Commit

Permalink
Add precedence for input params over env variables in neo4j integrati…
Browse files Browse the repository at this point in the history
…on (langchain-ai#18581)

input parameters take precedence over env variables
  • Loading branch information
tomasonjo authored and gkorland committed Mar 30, 2024
1 parent 2e67318 commit 122fa0b
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 13 deletions.
18 changes: 12 additions & 6 deletions libs/community/langchain_community/graphs/neo4j_graph.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Any, Dict, List, Optional

from langchain_core.utils import get_from_env
from langchain_core.utils import get_from_dict_or_env

from langchain_community.graphs.graph_document import GraphDocument
from langchain_community.graphs.graph_store import GraphStore
Expand Down Expand Up @@ -154,7 +154,7 @@ def __init__(
url: Optional[str] = None,
username: Optional[str] = None,
password: Optional[str] = None,
database: str = "neo4j",
database: Optional[str] = None,
timeout: Optional[float] = None,
sanitize: bool = False,
) -> None:
Expand All @@ -167,10 +167,16 @@ def __init__(
"Please install it with `pip install neo4j`."
)

url = get_from_env("url", "NEO4J_URI", url)
username = get_from_env("username", "NEO4J_USERNAME", username)
password = get_from_env("password", "NEO4J_PASSWORD", password)
database = get_from_env("database", "NEO4J_DATABASE", database)
url = get_from_dict_or_env({"url": url}, "url", "NEO4J_URI")
username = get_from_dict_or_env(
{"username": username}, "username", "NEO4J_USERNAME"
)
password = get_from_dict_or_env(
{"password": password}, "password", "NEO4J_PASSWORD"
)
database = get_from_dict_or_env(
{"database": database}, "database", "NEO4J_DATABASE", "neo4j"
)

self._driver = neo4j.GraphDatabase.driver(url, auth=(username, password))
self._database = database
Expand Down
22 changes: 15 additions & 7 deletions libs/community/langchain_community/vectorstores/neo4j_vector.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

from langchain_core.documents import Document
from langchain_core.embeddings import Embeddings
from langchain_core.utils import get_from_env
from langchain_core.utils import get_from_dict_or_env
from langchain_core.vectorstores import VectorStore

from langchain_community.vectorstores.utils import DistanceStrategy
Expand Down Expand Up @@ -155,7 +155,7 @@ def __init__(
password: Optional[str] = None,
url: Optional[str] = None,
keyword_index_name: Optional[str] = "keyword",
database: str = "neo4j",
database: Optional[str] = None,
index_name: str = "vector",
node_label: str = "Chunk",
embedding_node_property: str = "embedding",
Expand Down Expand Up @@ -186,11 +186,19 @@ def __init__(
# Handle if the credentials are environment variables

# Support URL for backwards compatibility
url = os.environ.get("NEO4J_URL", url)
url = get_from_env("url", "NEO4J_URI", url)
username = get_from_env("username", "NEO4J_USERNAME", username)
password = get_from_env("password", "NEO4J_PASSWORD", password)
database = get_from_env("database", "NEO4J_DATABASE", database)
if not url:
url = os.environ.get("NEO4J_URL")

url = get_from_dict_or_env({"url": url}, "url", "NEO4J_URI")
username = get_from_dict_or_env(
{"username": username}, "username", "NEO4J_USERNAME"
)
password = get_from_dict_or_env(
{"password": password}, "password", "NEO4J_PASSWORD"
)
database = get_from_dict_or_env(
{"database": database}, "database", "NEO4J_DATABASE", "neo4j"
)

self._driver = neo4j.GraphDatabase.driver(url, auth=(username, password))
self._database = database
Expand Down

0 comments on commit 122fa0b

Please sign in to comment.