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.
- graphiti_core/cross_encoder/openai_reranker_client.py +1 -1
- graphiti_core/driver/__init__.py +17 -0
- graphiti_core/driver/driver.py +66 -0
- graphiti_core/driver/falkordb_driver.py +132 -0
- graphiti_core/driver/neo4j_driver.py +61 -0
- graphiti_core/edges.py +66 -40
- graphiti_core/embedder/azure_openai.py +64 -0
- graphiti_core/embedder/gemini.py +14 -3
- graphiti_core/graph_queries.py +149 -0
- graphiti_core/graphiti.py +41 -14
- graphiti_core/graphiti_types.py +2 -2
- graphiti_core/helpers.py +9 -4
- graphiti_core/llm_client/__init__.py +16 -0
- graphiti_core/llm_client/azure_openai_client.py +73 -0
- graphiti_core/llm_client/gemini_client.py +4 -1
- graphiti_core/models/edges/edge_db_queries.py +2 -4
- graphiti_core/nodes.py +31 -31
- graphiti_core/prompts/dedupe_edges.py +52 -1
- graphiti_core/prompts/dedupe_nodes.py +79 -4
- graphiti_core/prompts/extract_edges.py +50 -5
- graphiti_core/prompts/invalidate_edges.py +1 -1
- graphiti_core/search/search.py +6 -10
- graphiti_core/search/search_filters.py +23 -9
- graphiti_core/search/search_utils.py +250 -189
- graphiti_core/utils/bulk_utils.py +38 -11
- graphiti_core/utils/maintenance/community_operations.py +6 -7
- graphiti_core/utils/maintenance/edge_operations.py +149 -19
- graphiti_core/utils/maintenance/graph_data_operations.py +13 -42
- graphiti_core/utils/maintenance/node_operations.py +52 -71
- {graphiti_core-0.11.6rc9.dist-info → graphiti_core-0.12.0.dist-info}/METADATA +14 -5
- {graphiti_core-0.11.6rc9.dist-info → graphiti_core-0.12.0.dist-info}/RECORD +33 -26
- {graphiti_core-0.11.6rc9.dist-info → graphiti_core-0.12.0.dist-info}/LICENSE +0 -0
- {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 = '
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
178
|
+
if i == len(filters.expired_at) - 1:
|
|
165
179
|
expired_at_filter += ')'
|
|
166
180
|
else:
|
|
167
181
|
expired_at_filter += ' OR '
|