add in, nin for pinecone (#10303)

Description: Adds the in and nin comparators for pinecone seen
[here](https://docs.pinecone.io/docs/metadata-filtering#metadata-query-language)

---------

Co-authored-by: Bagatur <baskaryan@gmail.com>
This commit is contained in:
Eddie Cohen 2023-10-05 21:31:09 -04:00 committed by GitHub
parent 56048b909f
commit 656d2303f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 11 additions and 2 deletions

View File

@ -88,6 +88,8 @@ class Comparator(str, Enum):
LTE = "lte"
CONTAIN = "contain"
LIKE = "like"
IN = "in"
NIN = "nin"
class FilterDirective(Expr, ABC):

View File

@ -20,6 +20,8 @@ class PineconeTranslator(Visitor):
Comparator.LTE,
Comparator.GT,
Comparator.GTE,
Comparator.IN,
Comparator.NIN,
)
"""Subset of allowed logical comparators."""
allowed_operators = (Operator.AND, Operator.OR)
@ -34,6 +36,11 @@ class PineconeTranslator(Visitor):
return {self._format_func(operation.operator): args}
def visit_comparison(self, comparison: Comparison) -> Dict:
if comparison.comparator in (Comparator.IN, Comparator.NIN) and not isinstance(
comparison.value, list
):
comparison.value = [comparison.value]
return {
comparison.attribute: {
self._format_func(comparison.comparator): comparison.value

View File

@ -413,4 +413,4 @@ ignore-regex = '.*(Stati Uniti|Tense=Pres).*'
# whats is a typo but used frequently in queries so kept as is
# aapply - async apply
# unsecure - typo but part of API, decided to not bother for now
ignore-words-list = 'momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure,damon,crate,aadd,symbl,precesses,accademia'
ignore-words-list = 'momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure,damon,crate,aadd,symbl,precesses,accademia,nin'

View File

@ -40,4 +40,4 @@ ignore-regex = '.*(Stati Uniti|Tense=Pres).*'
# whats is a typo but used frequently in queries so kept as is
# aapply - async apply
# unsecure - typo but part of API, decided to not bother for now
ignore-words-list = 'momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure,damon,crate,aadd,symbl,precesses,accademia'
ignore-words-list = 'momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure,damon,crate,aadd,symbl,precesses,accademia,nin'