This commit is contained in:
prestonrasmussen 2025-05-07 22:46:35 -04:00
parent 1f2f1eeab5
commit 8ce9b1e157
3 changed files with 18 additions and 8 deletions

View file

@ -380,6 +380,7 @@ class Graphiti:
resolve_extracted_edges( resolve_extracted_edges(
self.clients, self.clients,
edges, edges,
episode,
), ),
extract_attributes_from_nodes( extract_attributes_from_nodes(
self.clients, nodes, episode, previous_episodes, entity_types self.clients, nodes, episode, previous_episodes, entity_types
@ -682,7 +683,11 @@ class Graphiti:
related_edges = await get_relevant_edges(self.driver, [updated_edge], SearchFilters(), 0.8) related_edges = await get_relevant_edges(self.driver, [updated_edge], SearchFilters(), 0.8)
resolved_edge = await dedupe_extracted_edge(self.llm_client, updated_edge, related_edges[0]) resolved_edge = await dedupe_extracted_edge(
self.llm_client,
updated_edge,
related_edges[0],
)
contradicting_edges = await get_edge_contradictions(self.llm_client, edge, related_edges[0]) contradicting_edges = await get_edge_contradictions(self.llm_client, edge, related_edges[0])
invalidated_edges = resolve_edge_contradictions(resolved_edge, contradicting_edges) invalidated_edges = resolve_edge_contradictions(resolved_edge, contradicting_edges)

View file

@ -235,6 +235,7 @@ async def dedupe_extracted_edges(
async def resolve_extracted_edges( async def resolve_extracted_edges(
clients: GraphitiClients, clients: GraphitiClients,
extracted_edges: list[EntityEdge], extracted_edges: list[EntityEdge],
episode: EpisodicNode,
) -> tuple[list[EntityEdge], list[EntityEdge]]: ) -> tuple[list[EntityEdge], list[EntityEdge]]:
driver = clients.driver driver = clients.driver
llm_client = clients.llm_client llm_client = clients.llm_client
@ -258,10 +259,7 @@ async def resolve_extracted_edges(
await semaphore_gather( await semaphore_gather(
*[ *[
resolve_extracted_edge( resolve_extracted_edge(
llm_client, llm_client, extracted_edge, related_edges, existing_edges, episode
extracted_edge,
related_edges,
existing_edges,
) )
for extracted_edge, related_edges, existing_edges in zip( for extracted_edge, related_edges, existing_edges in zip(
extracted_edges, related_edges_lists, edge_invalidation_candidates, strict=True extracted_edges, related_edges_lists, edge_invalidation_candidates, strict=True
@ -322,9 +320,10 @@ async def resolve_extracted_edge(
extracted_edge: EntityEdge, extracted_edge: EntityEdge,
related_edges: list[EntityEdge], related_edges: list[EntityEdge],
existing_edges: list[EntityEdge], existing_edges: list[EntityEdge],
episode: EpisodicNode,
) -> tuple[EntityEdge, list[EntityEdge]]: ) -> tuple[EntityEdge, list[EntityEdge]]:
resolved_edge, invalidation_candidates = await semaphore_gather( resolved_edge, invalidation_candidates = await semaphore_gather(
dedupe_extracted_edge(llm_client, extracted_edge, related_edges), dedupe_extracted_edge(llm_client, extracted_edge, related_edges, episode),
get_edge_contradictions(llm_client, extracted_edge, existing_edges), get_edge_contradictions(llm_client, extracted_edge, existing_edges),
) )
@ -356,7 +355,10 @@ async def resolve_extracted_edge(
async def dedupe_extracted_edge( async def dedupe_extracted_edge(
llm_client: LLMClient, extracted_edge: EntityEdge, related_edges: list[EntityEdge] llm_client: LLMClient,
extracted_edge: EntityEdge,
related_edges: list[EntityEdge],
episode: EpisodicNode | None = None,
) -> EntityEdge: ) -> EntityEdge:
if len(related_edges) == 0: if len(related_edges) == 0:
return extracted_edge return extracted_edge
@ -391,6 +393,9 @@ async def dedupe_extracted_edge(
else extracted_edge else extracted_edge
) )
if duplicate_fact_id >= 0 and episode is not None:
edge.episodes += episode.uuid
end = time() end = time()
logger.debug( logger.debug(
f'Resolved Edge: {extracted_edge.name} is {edge.name}, in {(end - start) * 1000} ms' f'Resolved Edge: {extracted_edge.name} is {edge.name}, in {(end - start) * 1000} ms'

View file

@ -437,7 +437,7 @@ async def dedupe_node_list(
# Prepare context for LLM # Prepare context for LLM
nodes_context = [ nodes_context = [
{'uuid': node.uuid, 'name': node.name, 'summary': node.summary}.update(node.attributes) {'uuid': node.uuid, 'name': node.name, 'summary': node.summary, **node.attributes}
for node in nodes for node in nodes
] ]