sichaolong's picture
Upload folder using huggingface_hub
e331e72 verified
# Copyright (c) 2024 Microsoft Corporation.
# Licensed under the MIT License
import logging
import os
import unittest
from graphrag.index.run import run_pipeline_with_config
from graphrag.index.typing import PipelineRunResult
log = logging.getLogger(__name__)
class TestRun(unittest.IsolatedAsyncioTestCase):
async def test_megapipeline(self):
pipeline_path = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"./megapipeline.yml",
)
pipeline_result = [gen async for gen in run_pipeline_with_config(pipeline_path)]
errors = []
for result in pipeline_result:
if result.errors is not None and len(result.errors) > 0:
errors.extend(result.errors)
if len(errors) > 0:
print("Errors: ", errors)
assert len(errors) == 0, "received errors\n!" + "\n".join(errors)
self._assert_text_units_and_entities_reference_each_other(pipeline_result)
def _assert_text_units_and_entities_reference_each_other(
self, pipeline_result: list[PipelineRunResult]
):
text_unit_df = next(
filter(lambda x: x.workflow == "create_final_text_units", pipeline_result)
).result
entity_df = next(
filter(lambda x: x.workflow == "create_final_entities", pipeline_result)
).result
assert text_unit_df is not None, "Text unit dataframe should not be None"
assert entity_df is not None, "Entity dataframe should not be None"
# Get around typing issues
if text_unit_df is None or entity_df is None:
return
assert len(text_unit_df) > 0, "Text unit dataframe should not be empty"
assert len(entity_df) > 0, "Entity dataframe should not be empty"
text_unit_entity_map = {}
log.info("text_unit_df %s", text_unit_df.columns)
for _, row in text_unit_df.iterrows():
values = row.get("entity_ids", [])
text_unit_entity_map[row["id"]] = set([] if values is None else values)
entity_text_unit_map = {}
for _, row in entity_df.iterrows():
# ALL entities should have text units
values = row.get("text_unit_ids", [])
entity_text_unit_map[row["id"]] = set([] if values is None else values)
text_unit_ids = set(text_unit_entity_map.keys())
entity_ids = set(entity_text_unit_map.keys())
for text_unit_id, text_unit_entities in text_unit_entity_map.items():
assert text_unit_entities.issubset(
entity_ids
), f"Text unit {text_unit_id} has entities {text_unit_entities} that are not in the entity set"
for entity_id, entity_text_units in entity_text_unit_map.items():
assert entity_text_units.issubset(
text_unit_ids
), f"Entity {entity_id} has text units {entity_text_units} that are not in the text unit set"