Files
vibrantlabsai--ragas/tests/unit/test_knowledge_graph_save.py
2026-07-13 13:35:10 +08:00

64 lines
2.1 KiB
Python

from ragas.testset.graph import KnowledgeGraph, Node, NodeType, Relationship
def test_knowledge_graph_save_with_problematic_chars(tmp_path):
# Create a knowledge graph with special characters
kg = KnowledgeGraph()
# Create nodes with various Unicode characters including ones that might cause charmap codec issues
problematic_chars = [
chr(i)
for i in range(0x0080, 0x00FF) # Extended ASCII/Latin-1 characters
] + [
"\u2022", # bullet
"\u2192", # arrow
"\u2665", # heart
"\u2605", # star
"\u221e", # infinity
"\u00b5", # micro
"\u2264", # less than or equal
"\u2265", # greater than or equal
"\u0391", # Greek letters
"\u0392",
"\u0393",
"\uffff", # Special Unicode characters
]
# Create multiple nodes with combinations of problematic characters
for i, char in enumerate(problematic_chars):
text = f"Test{char}Text with special char at position {i}"
node = Node(
properties={
"text": text,
"description": f"Node {i} with {char}",
"metadata": f"Extra {char} info",
},
type=NodeType.CHUNK,
)
kg.add(node)
# Add some relationships to make it more realistic
nodes = kg.nodes
for i in range(len(nodes) - 1):
rel = Relationship(
source=nodes[i],
target=nodes[i + 1],
type="next",
properties={"info": f"Link {i} with special char {problematic_chars[i]}"},
)
kg.add(rel)
# Try to save to a temporary file
save_path = tmp_path / "test_knowledge_graph.json"
kg.save(str(save_path))
# Try to load it back to verify
loaded_kg = KnowledgeGraph.load(str(save_path))
# Verify the content was preserved
assert len(loaded_kg.nodes) == len(kg.nodes)
assert len(loaded_kg.relationships) == len(kg.relationships)
# Verify the special characters were preserved in the first node
assert loaded_kg.nodes[0].properties["text"] == nodes[0].properties["text"]