mirror of
https://github.com/hwchase17/langchain
synced 2024-11-10 01:10:59 +00:00
neo4j: Fix test for order-insensitive comparison and floating-point precision issues (#24338)
**Description:** This PR addresses two main issues in the `test_neo4jvector.py`: 1. **Order-insensitive Comparison:** Modified the `test_retrieval_dictionary` to ensure that it passes regardless of the order of returned values by parsing `page_content` into a structured format (dictionary) before comparison. 2. **Floating-point Precision:** Updated `test_neo4jvector_relevance_score` to handle minor floating-point precision differences by using the `isclose` function for comparing relevance scores with a relative tolerance. Errors addressed: - **test_neo4jvector_relevance_score:** ``` AssertionError: assert [(Document(page_content='foo', metadata={'page': '0'}), 1.0000014305114746), (Document(page_content='bar', metadata={'page': '1'}), 0.9998371005058289), (Document(page_content='baz', metadata={'page': '2'}), 0.9993508458137512)] == [(Document(page_content='foo', metadata={'page': '0'}), 1.0), (Document(page_content='bar', metadata={'page': '1'}), 0.9998376369476318), (Document(page_content='baz', metadata={'page': '2'}), 0.9993523359298706)] At index 0 diff: (Document(page_content='foo', metadata={'page': '0'}), 1.0000014305114746) != (Document(page_content='foo', metadata={'page': '0'}), 1.0) Full diff: - [(Document(page_content='foo', metadata={'page': '0'}), 1.0), + [(Document(page_content='foo', metadata={'page': '0'}), 1.0000014305114746), ? +++++++++++++++ - (Document(page_content='bar', metadata={'page': '1'}), 0.9998376369476318), ? ^^^ ------ + (Document(page_content='bar', metadata={'page': '1'}), 0.9998371005058289), ? ^^^^^^^^^ - (Document(page_content='baz', metadata={'page': '2'}), 0.9993523359298706), ? ---------- + (Document(page_content='baz', metadata={'page': '2'}), 0.9993508458137512), ? ++++++++++ ] ``` - **test_retrieval_dictionary:** ``` AssertionError: assert [Document(page_content='skills:\n- Python\n- Data Analysis\n- Machine Learning\nname: John\nage: 30\n')] == [Document(page_content='skills:\n- Python\n- Data Analysis\n- Machine Learning\nage: 30\nname: John\n')] At index 0 diff: Document(page_content='skills:\n- Python\n- Data Analysis\n- Machine Learning\nname: John\nage: 30\n') != Document(page_content='skills:\n- Python\n- Data Analysis\n- Machine Learning\nage: 30\nname: John\n') Full diff: - [Document(page_content='skills:\n- Python\n- Data Analysis\n- Machine Learning\nage: 30\nname: John\n')] ? --------- + [Document(page_content='skills:\n- Python\n- Data Analysis\n- Machine Learning\nage: John\nage: 30\n')] ? +++++++++ ```
This commit is contained in:
parent
47ed7f766a
commit
fc41730e28
@ -1,9 +1,11 @@
|
||||
"""Test Neo4jVector functionality."""
|
||||
|
||||
import os
|
||||
from math import isclose
|
||||
from typing import Any, Dict, List, cast
|
||||
|
||||
from langchain_core.documents import Document
|
||||
from yaml import safe_load
|
||||
|
||||
from langchain_community.graphs import Neo4jGraph
|
||||
from langchain_community.vectorstores.neo4j_vector import (
|
||||
@ -217,12 +219,21 @@ def test_neo4jvector_relevance_score() -> None:
|
||||
)
|
||||
|
||||
output = docsearch.similarity_search_with_relevance_scores("foo", k=3)
|
||||
assert output == [
|
||||
expected_output = [
|
||||
(Document(page_content="foo", metadata={"page": "0"}), 1.0),
|
||||
(Document(page_content="bar", metadata={"page": "1"}), 0.9998376369476318),
|
||||
(Document(page_content="baz", metadata={"page": "2"}), 0.9993523359298706),
|
||||
]
|
||||
|
||||
# Check if the length of the outputs matches
|
||||
assert len(output) == len(expected_output)
|
||||
|
||||
# Check if each document and its relevance score is close to the expected value
|
||||
for (doc, score), (expected_doc, expected_score) in zip(output, expected_output):
|
||||
assert doc.page_content == expected_doc.page_content
|
||||
assert doc.metadata == expected_doc.metadata
|
||||
assert isclose(score, expected_score, rel_tol=1e-5)
|
||||
|
||||
drop_vector_indexes(docsearch)
|
||||
|
||||
|
||||
@ -779,8 +790,16 @@ def test_retrieval_dictionary() -> None:
|
||||
)
|
||||
)
|
||||
]
|
||||
|
||||
output = docsearch.similarity_search("Foo", k=1)
|
||||
assert output == expected_output
|
||||
|
||||
def parse_document(doc: Document) -> Any:
|
||||
return safe_load(doc.page_content)
|
||||
|
||||
parsed_expected = [parse_document(doc) for doc in expected_output]
|
||||
parsed_output = [parse_document(doc) for doc in output]
|
||||
|
||||
assert parsed_output == parsed_expected
|
||||
drop_vector_indexes(docsearch)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user