@@ -953,6 +953,18 @@ def delete(self, ref_doc_id: str, **delete_kwargs: Any) -> None:
953
953
session .execute (stmt )
954
954
session .commit ()
955
955
956
+ async def adelete (self , ref_doc_id : str , ** delete_kwargs : Any ) -> None :
957
+ from sqlalchemy import delete
958
+
959
+ self ._initialize ()
960
+ async with self ._async_session () as session , session .begin ():
961
+ stmt = delete (self ._table_class ).where (
962
+ self ._table_class .metadata_ ["doc_id" ].astext == ref_doc_id
963
+ )
964
+
965
+ await session .execute (stmt )
966
+ await session .commit ()
967
+
956
968
def delete_nodes (
957
969
self ,
958
970
node_ids : Optional [List [str ]] = None ,
@@ -1087,6 +1099,58 @@ def get_nodes(
1087
1099
1088
1100
return nodes
1089
1101
1102
+ async def aget_nodes (
1103
+ self ,
1104
+ node_ids : Optional [List [str ]] = None ,
1105
+ filters : Optional [MetadataFilters ] = None ,
1106
+ ) -> List [BaseNode ]:
1107
+ """Get nodes asynchronously from vector store."""
1108
+ assert (
1109
+ node_ids is not None or filters is not None
1110
+ ), "Either node_ids or filters must be provided"
1111
+
1112
+ self ._initialize ()
1113
+ from sqlalchemy import select
1114
+
1115
+ stmt = select (
1116
+ self ._table_class .node_id ,
1117
+ self ._table_class .text ,
1118
+ self ._table_class .metadata_ ,
1119
+ self ._table_class .embedding ,
1120
+ )
1121
+
1122
+ if node_ids :
1123
+ stmt = stmt .where (self ._table_class .node_id .in_ (node_ids ))
1124
+
1125
+ if filters :
1126
+ filter_clause = self ._recursively_apply_filters (filters )
1127
+ stmt = stmt .where (filter_clause )
1128
+
1129
+ nodes : List [BaseNode ] = []
1130
+
1131
+ async with self ._async_session () as session , session .begin ():
1132
+ res = (await session .execute (stmt )).fetchall ()
1133
+ for item in res :
1134
+ node_id = item .node_id
1135
+ text = item .text
1136
+ metadata = item .metadata_
1137
+ embedding = item .embedding
1138
+
1139
+ try :
1140
+ node = metadata_dict_to_node (metadata )
1141
+ node .set_content (str (text ))
1142
+ node .embedding = embedding
1143
+ except Exception :
1144
+ node = TextNode (
1145
+ id_ = node_id ,
1146
+ text = text ,
1147
+ metadata = metadata ,
1148
+ embedding = embedding ,
1149
+ )
1150
+ nodes .append (node )
1151
+
1152
+ return nodes
1153
+
1090
1154
1091
1155
def _dedup_results (results : List [DBEmbeddingRow ]) -> List [DBEmbeddingRow ]:
1092
1156
seen_ids = set ()
0 commit comments