graphiti-core 0.11.6rc9__py3-none-any.whl → 0.12.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of graphiti-core might be problematic. Click here for more details.

Files changed (33) hide show
  1. graphiti_core/cross_encoder/openai_reranker_client.py +1 -1
  2. graphiti_core/driver/__init__.py +17 -0
  3. graphiti_core/driver/driver.py +66 -0
  4. graphiti_core/driver/falkordb_driver.py +132 -0
  5. graphiti_core/driver/neo4j_driver.py +61 -0
  6. graphiti_core/edges.py +66 -40
  7. graphiti_core/embedder/azure_openai.py +64 -0
  8. graphiti_core/embedder/gemini.py +14 -3
  9. graphiti_core/graph_queries.py +149 -0
  10. graphiti_core/graphiti.py +41 -14
  11. graphiti_core/graphiti_types.py +2 -2
  12. graphiti_core/helpers.py +9 -4
  13. graphiti_core/llm_client/__init__.py +16 -0
  14. graphiti_core/llm_client/azure_openai_client.py +73 -0
  15. graphiti_core/llm_client/gemini_client.py +4 -1
  16. graphiti_core/models/edges/edge_db_queries.py +2 -4
  17. graphiti_core/nodes.py +31 -31
  18. graphiti_core/prompts/dedupe_edges.py +52 -1
  19. graphiti_core/prompts/dedupe_nodes.py +79 -4
  20. graphiti_core/prompts/extract_edges.py +50 -5
  21. graphiti_core/prompts/invalidate_edges.py +1 -1
  22. graphiti_core/search/search.py +6 -10
  23. graphiti_core/search/search_filters.py +23 -9
  24. graphiti_core/search/search_utils.py +250 -189
  25. graphiti_core/utils/bulk_utils.py +38 -11
  26. graphiti_core/utils/maintenance/community_operations.py +6 -7
  27. graphiti_core/utils/maintenance/edge_operations.py +149 -19
  28. graphiti_core/utils/maintenance/graph_data_operations.py +13 -42
  29. graphiti_core/utils/maintenance/node_operations.py +52 -71
  30. {graphiti_core-0.11.6rc9.dist-info → graphiti_core-0.12.0.dist-info}/METADATA +14 -5
  31. {graphiti_core-0.11.6rc9.dist-info → graphiti_core-0.12.0.dist-info}/RECORD +33 -26
  32. {graphiti_core-0.11.6rc9.dist-info → graphiti_core-0.12.0.dist-info}/LICENSE +0 -0
  33. {graphiti_core-0.11.6rc9.dist-info → graphiti_core-0.12.0.dist-info}/WHEEL +0 -0
@@ -42,6 +42,9 @@ class SearchFilters(BaseModel):
42
42
  node_labels: list[str] | None = Field(
43
43
  default=None, description='List of node labels to filter on'
44
44
  )
45
+ edge_types: list[str] | None = Field(
46
+ default=None, description='List of edge types to filter on'
47
+ )
45
48
  valid_at: list[list[DateFilter]] | None = Field(default=None)
46
49
  invalid_at: list[list[DateFilter]] | None = Field(default=None)
47
50
  created_at: list[list[DateFilter]] | None = Field(default=None)
@@ -68,8 +71,19 @@ def edge_search_filter_query_constructor(
68
71
  filter_query: LiteralString = ''
69
72
  filter_params: dict[str, Any] = {}
70
73
 
74
+ if filters.edge_types is not None:
75
+ edge_types = filters.edge_types
76
+ edge_types_filter = '\nAND r.name in $edge_types'
77
+ filter_query += edge_types_filter
78
+ filter_params['edge_types'] = edge_types
79
+
80
+ if filters.node_labels is not None:
81
+ node_labels = '|'.join(filters.node_labels)
82
+ node_label_filter = '\nAND n:' + node_labels + ' AND m:' + node_labels
83
+ filter_query += node_label_filter
84
+
71
85
  if filters.valid_at is not None:
72
- valid_at_filter = ' AND ('
86
+ valid_at_filter = '\nAND ('
73
87
  for i, or_list in enumerate(filters.valid_at):
74
88
  for j, date_filter in enumerate(or_list):
75
89
  filter_params['valid_at_' + str(j)] = date_filter.date
@@ -81,12 +95,12 @@ def edge_search_filter_query_constructor(
81
95
  and_filter_query = ''
82
96
  for j, and_filter in enumerate(and_filters):
83
97
  and_filter_query += and_filter
84
- if j != len(and_filter_query) - 1:
98
+ if j != len(and_filters) - 1:
85
99
  and_filter_query += ' AND '
86
100
 
87
101
  valid_at_filter += and_filter_query
88
102
 
89
- if i == len(or_list) - 1:
103
+ if i == len(filters.valid_at) - 1:
90
104
  valid_at_filter += ')'
91
105
  else:
92
106
  valid_at_filter += ' OR '
@@ -106,12 +120,12 @@ def edge_search_filter_query_constructor(
106
120
  and_filter_query = ''
107
121
  for j, and_filter in enumerate(and_filters):
108
122
  and_filter_query += and_filter
109
- if j != len(and_filter_query) - 1:
123
+ if j != len(and_filters) - 1:
110
124
  and_filter_query += ' AND '
111
125
 
112
126
  invalid_at_filter += and_filter_query
113
127
 
114
- if i == len(or_list) - 1:
128
+ if i == len(filters.invalid_at) - 1:
115
129
  invalid_at_filter += ')'
116
130
  else:
117
131
  invalid_at_filter += ' OR '
@@ -131,12 +145,12 @@ def edge_search_filter_query_constructor(
131
145
  and_filter_query = ''
132
146
  for j, and_filter in enumerate(and_filters):
133
147
  and_filter_query += and_filter
134
- if j != len(and_filter_query) - 1:
148
+ if j != len(and_filters) - 1:
135
149
  and_filter_query += ' AND '
136
150
 
137
151
  created_at_filter += and_filter_query
138
152
 
139
- if i == len(or_list) - 1:
153
+ if i == len(filters.created_at) - 1:
140
154
  created_at_filter += ')'
141
155
  else:
142
156
  created_at_filter += ' OR '
@@ -156,12 +170,12 @@ def edge_search_filter_query_constructor(
156
170
  and_filter_query = ''
157
171
  for j, and_filter in enumerate(and_filters):
158
172
  and_filter_query += and_filter
159
- if j != len(and_filter_query) - 1:
173
+ if j != len(and_filters) - 1:
160
174
  and_filter_query += ' AND '
161
175
 
162
176
  expired_at_filter += and_filter_query
163
177
 
164
- if i == len(or_list) - 1:
178
+ if i == len(filters.expired_at) - 1:
165
179
  expired_at_filter += ')'
166
180
  else:
167
181
  expired_at_filter += ' OR '