Source code for langchain_community.query_constructors.deeplake
"""Logic for converting internal query language to a valid Chroma query."""fromtypingimportTuple,Unionfromlangchain_core.structured_queryimport(Comparator,Comparison,Operation,Operator,StructuredQuery,Visitor,)COMPARATOR_TO_TQL={Comparator.EQ:"==",Comparator.GT:">",Comparator.GTE:">=",Comparator.LT:"<",Comparator.LTE:"<=",}OPERATOR_TO_TQL={Operator.AND:"and",Operator.OR:"or",Operator.NOT:"NOT",}
[docs]defcan_cast_to_float(string:str)->bool:"""Check if a string can be cast to a float."""try:float(string)returnTrueexceptValueError:returnFalse
[docs]classDeepLakeTranslator(Visitor):"""Translate `DeepLake` internal query language elements to valid filters."""allowed_operators=[Operator.AND,Operator.OR,Operator.NOT]"""Subset of allowed logical operators."""allowed_comparators=[Comparator.EQ,Comparator.GT,Comparator.GTE,Comparator.LT,Comparator.LTE,]"""Subset of allowed logical comparators."""def_format_func(self,func:Union[Operator,Comparator])->str:self._validate_func(func)ifisinstance(func,Operator):value=OPERATOR_TO_TQL[func.value]# type: ignoreelifisinstance(func,Comparator):value=COMPARATOR_TO_TQL[func.value]# type: ignorereturnf"{value}"
[docs]defvisit_comparison(self,comparison:Comparison)->str:comparator=self._format_func(comparison.comparator)values=comparison.valueifisinstance(values,list):tql=[]forvalueinvalues:comparison.value=valuetql.append(self.visit_comparison(comparison))return"("+(" or ").join(tql)+")"ifnotcan_cast_to_float(comparison.value):values=f"'{values}'"returnf"metadata['{comparison.attribute}'] {comparator}{values}"
[docs]defvisit_structured_query(self,structured_query:StructuredQuery)->Tuple[str,dict]:ifstructured_query.filterisNone:kwargs={}else:tqL=f"SELECT * WHERE {structured_query.filter.accept(self)}"kwargs={"tql":tqL}returnstructured_query.query,kwargs