From 65a3fa398cac195cd1d8b5e8c31311db3d1a8ce7 Mon Sep 17 00:00:00 2001 From: Jules Kuehn <jk@jules.lol> Date: Thu, 4 Apr 2024 15:14:24 -0400 Subject: [PATCH] fix(postgres): numeric metadata filters (#12583) --- .../vector_stores/postgres/base.py | 20 ++++++++++++++----- .../pyproject.toml | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-postgres/llama_index/vector_stores/postgres/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-postgres/llama_index/vector_stores/postgres/base.py index faa474aad5..e5cbb310b3 100644 --- a/llama-index-integrations/vector_stores/llama-index-vector-stores-postgres/llama_index/vector_stores/postgres/base.py +++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-postgres/llama_index/vector_stores/postgres/base.py @@ -392,11 +392,21 @@ class PGVectorStore(BasePydanticVectorStore): f"'[\"{filter_.value}\"]'" ) else: - return text( - f"metadata_->>'{filter_.key}' " - f"{self._to_postgres_operator(filter_.operator)} " - f"'{filter_.value}'" - ) + # Check if value is a number. If so, cast the metadata value to a float + # This is necessary because the metadata is stored as a string + try: + return text( + f"(metadata_->>'{filter_.key}')::float " + f"{self._to_postgres_operator(filter_.operator)} " + f"{float(filter_.value)}" + ) + except ValueError: + # If not a number, then treat it as a string + return text( + f"metadata_->>'{filter_.key}' " + f"{self._to_postgres_operator(filter_.operator)} " + f"'{filter_.value}'" + ) def _recursively_apply_filters(self, filters: List[MetadataFilters]) -> Any: """ diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-postgres/pyproject.toml b/llama-index-integrations/vector_stores/llama-index-vector-stores-postgres/pyproject.toml index a605510d91..6efae8f05f 100644 --- a/llama-index-integrations/vector_stores/llama-index-vector-stores-postgres/pyproject.toml +++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-postgres/pyproject.toml @@ -27,7 +27,7 @@ exclude = ["**/BUILD"] license = "MIT" name = "llama-index-vector-stores-postgres" readme = "README.md" -version = "0.1.4.post1" +version = "0.1.5" [tool.poetry.dependencies] python = ">=3.8.1,<4.0" -- GitLab