Skip to content

Commit cb7bbca

Browse files
2 parents 14f377b + d7ef7f3 commit cb7bbca

File tree

12 files changed

+96
-57
lines changed

12 files changed

+96
-57
lines changed

examples/poetry.lock

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/py310/doc-examples-python-apis.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
TopicSubscriptionItem,
2424
)
2525
from momento.responses.vector_index import (
26+
CountItems,
2627
CreateIndex,
2728
DeleteIndex,
2829
DeleteItemBatch,
@@ -228,6 +229,18 @@ async def example_API_DeleteIndex(vector_client: PreviewVectorIndexClientAsync):
228229
# end example
229230

230231

232+
async def example_API_CountItems(vector_client: PreviewVectorIndexClientAsync):
233+
response = await vector_client.count_items("test-index")
234+
match response:
235+
case CountItems.Success() as success:
236+
print(f"Found {success.item_count} items")
237+
case CountItems.Error() as error:
238+
print(f"Error counting items in index 'test-index': {error.message}")
239+
240+
241+
# end example
242+
243+
231244
async def example_API_UpsertItemBatch(vector_client: PreviewVectorIndexClientAsync):
232245
response = await vector_client.upsert_item_batch(
233246
"test-index",
@@ -343,6 +356,7 @@ async def main():
343356
await example_API_InstantiateVectorClient()
344357
await example_API_CreateIndex(vector_client)
345358
await example_API_ListIndexes(vector_client)
359+
await example_API_CountItems(vector_client)
346360
await example_API_UpsertItemBatch(vector_client)
347361
await example_API_GetItemBatch(vector_client)
348362
await example_API_GetItemMetadataBatch(vector_client)

examples/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ license = "Apache-2.0"
88
[tool.poetry.dependencies]
99
python = ">=3.7,<3.12"
1010

11-
momento = "1.15.1"
11+
momento = "1.17.0"
1212
colorlog = "6.7.0"
1313
hdrhistogram = "^0.10.1"
1414

poetry.lock

Lines changed: 16 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ exclude = ["src/momento/internal/codegen.py"]
3030
[tool.poetry.dependencies]
3131
python = "^3.7"
3232

33-
momento-wire-types = "^0.102.1"
33+
momento-wire-types = "^0.105.3"
3434
grpcio = "^1.46.0"
3535
# note if you bump this presigned url test need be updated
3636
pyjwt = "^2.4.0"

src/momento/internal/aio/_vector_index_data_client.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ async def search(
149149
top_k: int,
150150
metadata_fields: Optional[list[str]] | AllMetadata = None,
151151
score_threshold: Optional[float] = None,
152-
filter_expression: Optional[FilterExpression] = None,
152+
filter: Optional[FilterExpression] = None,
153153
) -> SearchResponse:
154154
try:
155155
self._log_issuing_request("Search", {"index_name": index_name})
@@ -159,7 +159,7 @@ async def search(
159159
query_vector_pb = vectorindex_pb._Vector(elements=query_vector)
160160
metadata_fields_pb = _VectorIndexDataClient.__build_metadata_request(metadata_fields)
161161
no_score_threshold = _VectorIndexDataClient.__build_no_score_threshold(score_threshold)
162-
filter_expression_pb = _VectorIndexDataClient.__build_filter_expression(filter_expression)
162+
filter_expression_pb = _VectorIndexDataClient.__build_filter_expression(filter)
163163

164164
request = vectorindex_pb._SearchRequest(
165165
index_name=index_name,
@@ -168,7 +168,7 @@ async def search(
168168
metadata_fields=metadata_fields_pb,
169169
score_threshold=score_threshold,
170170
no_score_threshold=no_score_threshold,
171-
filter_expression=filter_expression_pb,
171+
filter=filter_expression_pb,
172172
)
173173

174174
response: vectorindex_pb._SearchResponse = await self._build_stub().Search(
@@ -189,7 +189,7 @@ async def search_and_fetch_vectors(
189189
top_k: int,
190190
metadata_fields: Optional[list[str]] | AllMetadata = None,
191191
score_threshold: Optional[float] = None,
192-
filter_expression: Optional[FilterExpression] = None,
192+
filter: Optional[FilterExpression] = None,
193193
) -> SearchAndFetchVectorsResponse:
194194
try:
195195
self._log_issuing_request("SearchAndFetchVectors", {"index_name": index_name})
@@ -199,7 +199,7 @@ async def search_and_fetch_vectors(
199199
query_vector_pb = vectorindex_pb._Vector(elements=query_vector)
200200
metadata_fields_pb = _VectorIndexDataClient.__build_metadata_request(metadata_fields)
201201
no_score_threshold = _VectorIndexDataClient.__build_no_score_threshold(score_threshold)
202-
filter_expression_pb = _VectorIndexDataClient.__build_filter_expression(filter_expression)
202+
filter_expression_pb = _VectorIndexDataClient.__build_filter_expression(filter)
203203

204204
request = vectorindex_pb._SearchAndFetchVectorsRequest(
205205
index_name=index_name,
@@ -208,7 +208,7 @@ async def search_and_fetch_vectors(
208208
metadata_fields=metadata_fields_pb,
209209
score_threshold=score_threshold,
210210
no_score_threshold=no_score_threshold,
211-
filter_expression=filter_expression_pb,
211+
filter=filter_expression_pb,
212212
)
213213

214214
response: vectorindex_pb._SearchAndFetchVectorsResponse = await self._build_stub().SearchAndFetchVectors(

src/momento/internal/synchronous/_vector_index_data_client.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def search(
149149
top_k: int,
150150
metadata_fields: Optional[list[str]] | AllMetadata = None,
151151
score_threshold: Optional[float] = None,
152-
filter_expression: Optional[FilterExpression] = None,
152+
filter: Optional[FilterExpression] = None,
153153
) -> SearchResponse:
154154
try:
155155
self._log_issuing_request("Search", {"index_name": index_name})
@@ -159,7 +159,7 @@ def search(
159159
query_vector_pb = vectorindex_pb._Vector(elements=query_vector)
160160
metadata_fields_pb = _VectorIndexDataClient.__build_metadata_request(metadata_fields)
161161
no_score_threshold = _VectorIndexDataClient.__build_no_score_threshold(score_threshold)
162-
filter_expression_pb = _VectorIndexDataClient.__build_filter_expression(filter_expression)
162+
filter_expression_pb = _VectorIndexDataClient.__build_filter_expression(filter)
163163

164164
request = vectorindex_pb._SearchRequest(
165165
index_name=index_name,
@@ -168,7 +168,7 @@ def search(
168168
metadata_fields=metadata_fields_pb,
169169
score_threshold=score_threshold,
170170
no_score_threshold=no_score_threshold,
171-
filter_expression=filter_expression_pb,
171+
filter=filter_expression_pb,
172172
)
173173

174174
response: vectorindex_pb._SearchResponse = self._build_stub().Search(
@@ -189,7 +189,7 @@ def search_and_fetch_vectors(
189189
top_k: int,
190190
metadata_fields: Optional[list[str]] | AllMetadata = None,
191191
score_threshold: Optional[float] = None,
192-
filter_expression: Optional[FilterExpression] = None,
192+
filter: Optional[FilterExpression] = None,
193193
) -> SearchAndFetchVectorsResponse:
194194
try:
195195
self._log_issuing_request("SearchAndFetchVectors", {"index_name": index_name})
@@ -199,7 +199,7 @@ def search_and_fetch_vectors(
199199
query_vector_pb = vectorindex_pb._Vector(elements=query_vector)
200200
metadata_fields_pb = _VectorIndexDataClient.__build_metadata_request(metadata_fields)
201201
no_score_threshold = _VectorIndexDataClient.__build_no_score_threshold(score_threshold)
202-
filter_expression_pb = _VectorIndexDataClient.__build_filter_expression(filter_expression)
202+
filter_expression_pb = _VectorIndexDataClient.__build_filter_expression(filter)
203203

204204
request = vectorindex_pb._SearchAndFetchVectorsRequest(
205205
index_name=index_name,
@@ -208,7 +208,7 @@ def search_and_fetch_vectors(
208208
metadata_fields=metadata_fields_pb,
209209
score_threshold=score_threshold,
210210
no_score_threshold=no_score_threshold,
211-
filter_expression=filter_expression_pb,
211+
filter=filter_expression_pb,
212212
)
213213

214214
response: vectorindex_pb._SearchAndFetchVectorsResponse = self._build_stub().SearchAndFetchVectors(

src/momento/requests/vector_index/filters.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
from abc import ABC, abstractmethod
1616
from dataclasses import dataclass
17+
from typing import Iterable
1718

1819
from momento_wire_types import vectorindex_pb2 as vectorindex_pb
1920

@@ -258,3 +259,17 @@ def to_filter_expression_proto(self) -> vectorindex_pb._FilterExpression:
258259
def to_proto(self) -> vectorindex_pb._ListContainsExpression:
259260
# todo should make oneof defensively
260261
return vectorindex_pb._ListContainsExpression(field=self.field, string_value=self.value)
262+
263+
264+
@dataclass
265+
class IdInSet(FilterExpression):
266+
"""Represents an expression to test if an item id is in a set of ids."""
267+
268+
ids: Iterable[str]
269+
"""The set of ids to test id in set with."""
270+
271+
def to_filter_expression_proto(self) -> vectorindex_pb._FilterExpression:
272+
return vectorindex_pb._FilterExpression(id_in_set_expression=self.to_proto())
273+
274+
def to_proto(self) -> vectorindex_pb._IdInSetExpression:
275+
return vectorindex_pb._IdInSetExpression(ids=list(self.ids))

0 commit comments

Comments
 (0)