Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 930 Bytes
d434239 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
from pydantic import BaseModel
from typing import Literal, Union, List, Dict
AllowedOps = Literal["$in", "$eq", "$gt", "$gte", "$lt", "$lte", "$ne", "$nin"]
class MetadataFilter(BaseModel):
metadata_field: str
metadata_search_operator: AllowedOps
metadata_value: Union[str, int, float, List[Union[str, int, float]]]
class MetadataWhereClause(BaseModel):
filters: List[MetadataFilter]
def to_chroma_where(self) -> Dict:
"""Convert list of MetadataFilter into Chroma-compatible where clause with AND logic."""
if not self.filters:
return {}
if len(self.filters) == 1:
f = self.filters[0]
return {f.metadata_field: {f.metadata_search_operator: f.metadata_value}}
return {
"$and": [
{f.metadata_field: {f.metadata_search_operator: f.metadata_value}}
for f in self.filters
]
} |