feat(oss): port v3 pipeline with hybrid search, entity extraction, and additive scoring (#4805)

Co-authored-by: Soumil Rathi <soumilrathi@gmail.com>
Co-authored-by: Saket Aryan <saketaryan2002@gmail.com>
Co-authored-by: chaithanyak42 <chaithanya.kumar42a@gmail.com>
Co-authored-by: kartik-mem0 <kartik.labhshetwar@mem0.ai>
This commit is contained in:
soumil-rathi
2026-04-14 18:00:58 +05:30
committed by GitHub
co-authored by Soumil Rathi Saket Aryan chaithanyak42 kartik-mem0
parent 57f944e18a
commit a488e19044
120 changed files with 10107 additions and 17135 deletions
+39
View File
@@ -149,6 +149,45 @@ class UpstashVector(VectorStoreBase):
for res in response
]
def keyword_search(self, query, top_k=5, filters=None):
"""
Perform keyword-based search using Upstash's BM25 sparse search.
Args:
query (str): The text query to search for.
top_k (int, optional): Number of results to return. Defaults to 5.
filters (Dict, optional): Filters to apply to the search.
Returns:
List[OutputData]: Search results, or None if sparse/BM25 search is not supported.
"""
try:
filters_str = (
" AND ".join([f"{k} = {self._stringify(v)}" for k, v in filters.items()])
if filters
else None
)
response = self.client.query(
data=query,
top_k=top_k,
filter=filters_str or "",
include_metadata=True,
namespace=self.collection_name,
)
return [
OutputData(
id=res.id,
score=res.score,
payload=res.metadata,
)
for res in response
]
except Exception as e:
logger.error(f"Error during keyword search for query '{query}': {e}")
return None
def delete(self, vector_id: int):
"""
Delete a vector by ID.