Skip to content

Commit 402999e

Browse files
authored
Remove deprecated code from vectorstore (#18)
Remove deprecated code
1 parent 05b1f6d commit 402999e

File tree

1 file changed

+3
-101
lines changed

1 file changed

+3
-101
lines changed

‎langchain_postgres/vectorstores.py‎

Lines changed: 3 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -712,99 +712,6 @@ def _handle_field_filter(
712712
else:
713713
raise NotImplementedError()
714714

715-
def _create_filter_clause_deprecated(self, key, value): # type: ignore[no-untyped-def]
716-
"""Deprecated functionality.
717-
718-
This is for backwards compatibility with the JSON based schema for metadata.
719-
It uses incorrect operator syntax (operators are not prefixed with $).
720-
721-
This implementation is not efficient, and has bugs associated with
722-
the way that it handles numeric filter clauses.
723-
"""
724-
IN, NIN, BETWEEN, GT, LT, NE = "in", "nin", "between", "gt", "lt", "ne"
725-
EQ, LIKE, CONTAINS, OR, AND = "eq", "like", "contains", "or", "and"
726-
727-
value_case_insensitive = {k.lower(): v for k, v in value.items()}
728-
if IN in map(str.lower, value):
729-
filter_by_metadata = self.EmbeddingStore.cmetadata[key].astext.in_(
730-
value_case_insensitive[IN]
731-
)
732-
elif NIN in map(str.lower, value):
733-
filter_by_metadata = self.EmbeddingStore.cmetadata[key].astext.not_in(
734-
value_case_insensitive[NIN]
735-
)
736-
elif BETWEEN in map(str.lower, value):
737-
filter_by_metadata = self.EmbeddingStore.cmetadata[key].astext.between(
738-
str(value_case_insensitive[BETWEEN][0]),
739-
str(value_case_insensitive[BETWEEN][1]),
740-
)
741-
elif GT in map(str.lower, value):
742-
filter_by_metadata = self.EmbeddingStore.cmetadata[key].astext > str(
743-
value_case_insensitive[GT]
744-
)
745-
elif LT in map(str.lower, value):
746-
filter_by_metadata = self.EmbeddingStore.cmetadata[key].astext < str(
747-
value_case_insensitive[LT]
748-
)
749-
elif NE in map(str.lower, value):
750-
filter_by_metadata = self.EmbeddingStore.cmetadata[key].astext != str(
751-
value_case_insensitive[NE]
752-
)
753-
elif EQ in map(str.lower, value):
754-
filter_by_metadata = self.EmbeddingStore.cmetadata[key].astext == str(
755-
value_case_insensitive[EQ]
756-
)
757-
elif LIKE in map(str.lower, value):
758-
filter_by_metadata = self.EmbeddingStore.cmetadata[key].astext.like(
759-
value_case_insensitive[LIKE]
760-
)
761-
elif CONTAINS in map(str.lower, value):
762-
filter_by_metadata = self.EmbeddingStore.cmetadata[key].astext.contains(
763-
value_case_insensitive[CONTAINS]
764-
)
765-
elif OR in map(str.lower, value):
766-
or_clauses = [
767-
self._create_filter_clause(key, sub_value)
768-
for sub_value in value_case_insensitive[OR]
769-
]
770-
filter_by_metadata = sqlalchemy.or_(*or_clauses)
771-
elif AND in map(str.lower, value):
772-
and_clauses = [
773-
self._create_filter_clause(key, sub_value)
774-
for sub_value in value_case_insensitive[AND]
775-
]
776-
filter_by_metadata = sqlalchemy.and_(*and_clauses)
777-
778-
else:
779-
filter_by_metadata = None
780-
781-
return filter_by_metadata
782-
783-
def _create_filter_clause_json_deprecated(
784-
self, filter: Any
785-
) -> List[SQLColumnExpression]:
786-
"""Convert filters from IR to SQL clauses.
787-
788-
**DEPRECATED** This functionality will be deprecated in the future.
789-
790-
It implements translation of filters for a schema that uses JSON
791-
for metadata rather than the JSONB field which is more efficient
792-
for querying.
793-
"""
794-
filter_clauses = []
795-
for key, value in filter.items():
796-
if isinstance(value, dict):
797-
filter_by_metadata = self._create_filter_clause_deprecated(key, value)
798-
799-
if filter_by_metadata is not None:
800-
filter_clauses.append(filter_by_metadata)
801-
else:
802-
filter_by_metadata = self.EmbeddingStore.cmetadata[key].astext == str(
803-
value
804-
)
805-
filter_clauses.append(filter_by_metadata)
806-
return filter_clauses
807-
808715
def _create_filter_clause(self, filters: Any) -> Any:
809716
"""Convert LangChain IR filter representation to matching SQLAlchemy clauses.
810717
@@ -905,14 +812,9 @@ def __query_collection(
905812

906813
filter_by = [self.EmbeddingStore.collection_id == collection.uuid]
907814
if filter:
908-
if self.use_jsonb:
909-
filter_clauses = self._create_filter_clause(filter)
910-
if filter_clauses is not None:
911-
filter_by.append(filter_clauses)
912-
else:
913-
# Old way of doing things
914-
filter_clauses = self._create_filter_clause_json_deprecated(filter)
915-
filter_by.extend(filter_clauses)
815+
filter_clauses = self._create_filter_clause(filter)
816+
if filter_clauses is not None:
817+
filter_by.append(filter_clauses)
916818

917819
_type = self.EmbeddingStore
918820

0 commit comments

Comments
 (0)