community[patch]: Add the ability to pass maps to neo4j retrieval query (#19758)

Makes it easier to flatten complex values to text, so you don't have to
use a lot of Cypher to do it.
This commit is contained in:
Tomaz Bratanic
2024-03-29 16:33:48 +01:00
committed by GitHub
parent f7e8a382cc
commit dec00d3050
3 changed files with 77 additions and 2 deletions

View File

@@ -741,3 +741,29 @@ def test_retrieval_params() -> None:
Document(page_content="test", metadata={"test": "test1"}),
Document(page_content="test", metadata={"test": "test1"}),
]
def test_retrieval_dictionary() -> None:
"""Test if we use parameters in retrieval query"""
docsearch = Neo4jVector.from_texts(
texts=texts,
embedding=FakeEmbeddings(),
pre_delete_collection=True,
retrieval_query="""
RETURN {
name:'John',
age: 30,
skills: ["Python", "Data Analysis", "Machine Learning"]} as text,
score, {} AS metadata
""",
)
expected_output = [
Document(
page_content=(
"skills:\n- Python\n- Data Analysis\n- "
"Machine Learning\nage: 30\nname: John\n"
)
)
]
output = docsearch.similarity_search("Foo", k=1)
assert output == expected_output

View File

@@ -1,6 +1,9 @@
"""Test Neo4j functionality."""
from langchain_community.vectorstores.neo4j_vector import remove_lucene_chars
from langchain_community.vectorstores.neo4j_vector import (
dict_to_yaml_str,
remove_lucene_chars,
)
def test_escaping_lucene() -> None:
@@ -43,3 +46,22 @@ def test_escaping_lucene() -> None:
remove_lucene_chars("It is the end of the world. Take shelter~")
== "It is the end of the world. Take shelter"
)
def test_converting_to_yaml() -> None:
example_dict = {
"name": "John Doe",
"age": 30,
"skills": ["Python", "Data Analysis", "Machine Learning"],
"location": {"city": "Ljubljana", "country": "Slovenia"},
}
yaml_str = dict_to_yaml_str(example_dict)
expected_output = (
"name: John Doe\nage: 30\nskills:\n- Python\n- "
"Data Analysis\n- Machine Learning\nlocation:\n city: Ljubljana\n"
" country: Slovenia\n"
)
assert yaml_str == expected_output