diff --git a/libs/langchain/langchain/chains/query_constructor/ir.py b/libs/langchain/langchain/chains/query_constructor/ir.py index c8d6fc976b6..9f412aedb29 100644 --- a/libs/langchain/langchain/chains/query_constructor/ir.py +++ b/libs/langchain/langchain/chains/query_constructor/ir.py @@ -88,6 +88,8 @@ class Comparator(str, Enum): LTE = "lte" CONTAIN = "contain" LIKE = "like" + IN = "in" + NIN = "nin" class FilterDirective(Expr, ABC): diff --git a/libs/langchain/langchain/retrievers/self_query/pinecone.py b/libs/langchain/langchain/retrievers/self_query/pinecone.py index a39fc310bf4..80c401dd95f 100644 --- a/libs/langchain/langchain/retrievers/self_query/pinecone.py +++ b/libs/langchain/langchain/retrievers/self_query/pinecone.py @@ -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 diff --git a/libs/langchain/pyproject.toml b/libs/langchain/pyproject.toml index 5c06278cc8c..72a8e9087df 100644 --- a/libs/langchain/pyproject.toml +++ b/libs/langchain/pyproject.toml @@ -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' diff --git a/pyproject.toml b/pyproject.toml index 0d9ad96fe11..071c1a2605e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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'