Skip to content

Commit 29a071b

Browse files
Custom ontology (#262)
* ontology * extract and save node labels * extract entity type properties * neo4j upgrade needed * add entity types * update typing * update types * updates * Update graphiti_core/utils/maintenance/node_operations.py Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * fix warning * mypy updates * update properties * mypy ignore * mypy types * bump version --------- Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
1 parent 6eccc9e commit 29a071b

File tree

13 files changed

+189
-350
lines changed

13 files changed

+189
-350
lines changed

examples/multi_session_conversation_memory/msc_eval.py

Lines changed: 0 additions & 142 deletions
This file was deleted.

examples/multi_session_conversation_memory/msc_runner.py

Lines changed: 0 additions & 89 deletions
This file was deleted.

examples/multi_session_conversation_memory/parse_msc_messages.py

Lines changed: 0 additions & 85 deletions
This file was deleted.

examples/podcast/podcast_runner.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import sys
2121

2222
from dotenv import load_dotenv
23+
from pydantic import BaseModel, Field
2324
from transcript_parser import parse_podcast_messages
2425

2526
from graphiti_core import Graphiti
@@ -53,6 +54,12 @@ def setup_logging():
5354
return logger
5455

5556

57+
class Person(BaseModel):
58+
first_name: str | None = Field(..., description='First name')
59+
last_name: str | None = Field(..., description='Last name')
60+
occupation: str | None = Field(..., description="The person's work occupation")
61+
62+
5663
async def main():
5764
setup_logging()
5865
client = Graphiti(neo4j_uri, neo4j_user, neo4j_password)
@@ -67,6 +74,7 @@ async def main():
6774
reference_time=message.actual_timestamp,
6875
source_description='Podcast Transcript',
6976
group_id='podcast',
77+
entity_types={'Person': Person},
7078
)
7179

7280

graphiti_core/graphiti.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ async def add_episode(
262262
group_id: str = '',
263263
uuid: str | None = None,
264264
update_communities: bool = False,
265+
entity_types: dict[str, BaseModel] | None = None,
265266
) -> AddEpisodeResults:
266267
"""
267268
Process an episode and update the graph.
@@ -336,7 +337,9 @@ async def add_episode_endpoint(episode_data: EpisodeData):
336337

337338
# Extract entities as nodes
338339

339-
extracted_nodes = await extract_nodes(self.llm_client, episode, previous_episodes)
340+
extracted_nodes = await extract_nodes(
341+
self.llm_client, episode, previous_episodes, entity_types
342+
)
340343
logger.debug(f'Extracted nodes: {[(n.name, n.uuid) for n in extracted_nodes]}')
341344

342345
# Calculate Embeddings
@@ -362,6 +365,7 @@ async def add_episode_endpoint(episode_data: EpisodeData):
362365
existing_nodes_lists,
363366
episode,
364367
previous_episodes,
368+
entity_types,
365369
),
366370
extract_edges(
367371
self.llm_client, episode, extracted_nodes, previous_episodes, group_id

graphiti_core/models/nodes/node_db_queries.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,16 @@
3131

3232
ENTITY_NODE_SAVE = """
3333
MERGE (n:Entity {uuid: $uuid})
34-
SET n = {uuid: $uuid, name: $name, group_id: $group_id, summary: $summary, created_at: $created_at}
34+
SET n:$($labels)
35+
SET n = $entity_data
3536
WITH n CALL db.create.setNodeVectorProperty(n, "name_embedding", $name_embedding)
3637
RETURN n.uuid AS uuid"""
3738

3839
ENTITY_NODE_SAVE_BULK = """
3940
UNWIND $nodes AS node
4041
MERGE (n:Entity {uuid: node.uuid})
41-
SET n = {uuid: node.uuid, name: node.name, group_id: node.group_id, summary: node.summary, created_at: node.created_at}
42+
SET n:$(node.labels)
43+
SET n = node
4244
WITH n, node CALL db.create.setNodeVectorProperty(n, "name_embedding", node.name_embedding)
4345
RETURN n.uuid AS uuid
4446
"""

0 commit comments

Comments
 (0)