Skip to content

Commit d9446d1

Browse files
committed
Removing the singular feature parameter for doc retrieval
Signed-off-by: jyejare <jyejare@redhat.com>
1 parent d7f185f commit d9446d1

File tree

9 files changed

+28
-60
lines changed

9 files changed

+28
-60
lines changed

sdk/python/feast/feature_store.py

Lines changed: 20 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1831,19 +1831,15 @@ async def get_online_features_async(
18311831

18321832
def retrieve_online_documents(
18331833
self,
1834-
feature: Optional[str],
18351834
query: Union[str, List[float]],
18361835
top_k: int,
1837-
features: Optional[List[str]] = None,
1836+
features: List[str],
18381837
distance_metric: Optional[str] = "L2",
18391838
) -> OnlineResponse:
18401839
"""
18411840
Retrieves the top k closest document features. Note, embeddings are a subset of features.
18421841
18431842
Args:
1844-
feature: The list of document features that should be retrieved from the online document store. These features can be
1845-
specified either as a list of string document feature references or as a feature service. String feature
1846-
references must have format "feature_view:feature", e.g, "document_fv:document_embeddings".
18471843
features: The list of features that should be retrieved from the online store.
18481844
query: The query to retrieve the closest document features for.
18491845
top_k: The number of closest document features to retrieve.
@@ -1853,38 +1849,27 @@ def retrieve_online_documents(
18531849
raise ValueError(
18541850
"Using embedding functionality is not supported for document retrieval. Please embed the query before calling retrieve_online_documents."
18551851
)
1856-
feature_list: List[str] = (
1857-
features
1858-
if features is not None
1859-
else ([feature] if feature is not None else [])
1860-
)
18611852

18621853
(
18631854
available_feature_views,
18641855
_,
18651856
) = utils._get_feature_views_to_use(
18661857
registry=self._registry,
18671858
project=self.project,
1868-
features=feature_list,
1859+
features=features,
18691860
allow_cache=True,
18701861
hide_dummy_entity=False,
18711862
)
1872-
if feature_list:
1873-
feature_view_set = set()
1874-
for _feature in feature_list:
1875-
feature_view_name = _feature.split(":")[0]
1876-
feature_view = self.get_feature_view(feature_view_name)
1877-
feature_view_set.add(feature_view.name)
1878-
if len(feature_view_set) > 1:
1879-
raise ValueError(
1880-
"Document retrieval only supports a single feature view."
1881-
)
1882-
requested_feature = (
1883-
feature.split(":")[1] if isinstance(feature, str) else feature
1884-
)
1885-
requested_features = [
1886-
f.split(":")[1] for f in feature_list if isinstance(f, str) and ":" in f
1887-
]
1863+
feature_view_set = set()
1864+
for _feature in features:
1865+
feature_view_name = _feature.split(":")[0]
1866+
feature_view = self.get_feature_view(feature_view_name)
1867+
feature_view_set.add(feature_view.name)
1868+
if len(feature_view_set) > 1:
1869+
raise ValueError("Document retrieval only supports a single feature view.")
1870+
requested_features = [
1871+
f.split(":")[1] for f in features if isinstance(f, str) and ":" in f
1872+
]
18881873
requested_feature_view_name = list(feature_view_set)[0]
18891874
for feature_view in available_feature_views:
18901875
if feature_view.name == requested_feature_view_name:
@@ -1899,15 +1884,20 @@ def retrieve_online_documents(
18991884
document_features = self._retrieve_from_online_store(
19001885
provider,
19011886
requested_feature_view,
1902-
requested_feature,
19031887
requested_features,
19041888
query,
19051889
top_k,
19061890
distance_metric,
19071891
)
1892+
19081893
# TODO currently not return the vector value since it is same as feature value, if embedding is supported,
19091894
# the feature value can be raw text before embedded
1910-
entity_key_vals = [feature[1] for feature in document_features]
1895+
def _doc_feature(x):
1896+
return [feature[x] for feature in document_features]
1897+
1898+
entity_key_vals, document_feature_vals, document_feature_distance_vals = map(
1899+
_doc_feature, (1, 4, 5)
1900+
)
19111901
join_key_values: Dict[str, List[ValueProto]] = {}
19121902
for entity_key_val in entity_key_vals:
19131903
if entity_key_val is not None:
@@ -1917,11 +1907,7 @@ def retrieve_online_documents(
19171907
if join_key not in join_key_values:
19181908
join_key_values[join_key] = []
19191909
join_key_values[join_key].append(entity_value)
1920-
1921-
document_feature_vals = [feature[4] for feature in document_features]
1922-
document_feature_distance_vals = [feature[5] for feature in document_features]
19231910
online_features_response = GetOnlineFeaturesResponse(results=[])
1924-
requested_feature = requested_feature or requested_features[0]
19251911
if vector_field_metadata := _get_feature_view_vector_field_metadata(
19261912
requested_feature_view
19271913
):
@@ -1931,7 +1917,7 @@ def retrieve_online_documents(
19311917
vector_field_name: document_feature_vals,
19321918
"distance": document_feature_distance_vals,
19331919
}
1934-
_requested_features = [_feature.split(":")[-1] for _feature in feature_list]
1920+
_requested_features = [_feature.split(":")[-1] for _feature in features]
19351921
requested_features_data = {
19361922
_feature: data[_feature]
19371923
for _feature in _requested_features
@@ -2016,7 +2002,6 @@ def _retrieve_from_online_store(
20162002
self,
20172003
provider: Provider,
20182004
table: FeatureView,
2019-
requested_feature: Optional[str],
20202005
requested_features: Optional[List[str]],
20212006
query: List[float],
20222007
top_k: int,
@@ -2036,7 +2021,6 @@ def _retrieve_from_online_store(
20362021
documents = provider.retrieve_online_documents(
20372022
config=self.config,
20382023
table=table,
2039-
requested_feature=requested_feature,
20402024
requested_features=requested_features,
20412025
query=query,
20422026
top_k=top_k,

sdk/python/feast/infra/online_stores/elasticsearch_online_store/elasticsearch.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,7 @@ def retrieve_online_documents(
213213
self,
214214
config: RepoConfig,
215215
table: FeatureView,
216-
requested_feature: Optional[str],
217-
requested_features: Optional[List[str]],
216+
requested_features: List[str],
218217
embedding: List[float],
219218
top_k: int,
220219
*args,

sdk/python/feast/infra/online_stores/faiss_online_store.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,7 @@ def retrieve_online_documents(
176176
self,
177177
config: RepoConfig,
178178
table: FeatureView,
179-
requested_feature: Optional[str],
180-
requested_featres: Optional[List[str]],
179+
requested_featres: List[str],
181180
embedding: List[float],
182181
top_k: int,
183182
distance_metric: Optional[str] = None,

sdk/python/feast/infra/online_stores/online_store.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -392,8 +392,7 @@ def retrieve_online_documents(
392392
self,
393393
config: RepoConfig,
394394
table: FeatureView,
395-
requested_feature: Optional[str],
396-
requested_features: Optional[List[str]],
395+
requested_features: List[str],
397396
embedding: List[float],
398397
top_k: int,
399398
distance_metric: Optional[str] = None,
@@ -413,7 +412,6 @@ def retrieve_online_documents(
413412
distance_metric: distance metric to use for retrieval.
414413
config: The config for the current feature store.
415414
table: The feature view whose feature values should be read.
416-
requested_feature: The name of the feature whose embeddings should be used for retrieval.
417415
requested_features: The list of features whose embeddings should be used for retrieval.
418416
embedding: The embeddings to use for retrieval.
419417
top_k: The number of documents to retrieve.
@@ -423,10 +421,8 @@ def retrieve_online_documents(
423421
where the first item is the event timestamp for the row, and the second item is a dict of feature
424422
name to embeddings.
425423
"""
426-
if not requested_feature and not requested_features:
427-
raise ValueError(
428-
"Either requested_feature or requested_features must be specified"
429-
)
424+
if not requested_features:
425+
raise ValueError("Requested_features must be specified")
430426
raise NotImplementedError(
431427
f"Online store {self.__class__.__name__} does not support online retrieval"
432428
)

sdk/python/feast/infra/online_stores/postgres_online_store/postgres.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,6 @@ def retrieve_online_documents(
354354
self,
355355
config: RepoConfig,
356356
table: FeatureView,
357-
requested_feature: Optional[str],
358357
requested_features: Optional[List[str]],
359358
embedding: List[float],
360359
top_k: int,
@@ -373,7 +372,6 @@ def retrieve_online_documents(
373372
Args:
374373
config: Feast configuration object
375374
table: FeatureView object as the table to search
376-
requested_feature: The requested feature as the column to search
377375
requested_features: The list of features whose embeddings should be used for retrieval.
378376
embedding: The query embedding to search for
379377
top_k: The number of items to return
@@ -425,15 +423,13 @@ def retrieve_online_documents(
425423
vector_value,
426424
vector_value {distance_metric_sql} %s::vector as distance,
427425
event_ts FROM {table_name}
428-
WHERE feature_name = {feature_name}
429426
ORDER BY distance
430427
LIMIT {top_k};
431428
"""
432429
).format(
433430
distance_metric_sql=sql.SQL(distance_metric_sql),
434431
table_name=sql.Identifier(table_name),
435432
feature_names=required_feature_names,
436-
feature_name=sql.Literal(requested_feature),
437433
top_k=sql.Literal(top_k),
438434
),
439435
(embedding,),

sdk/python/feast/infra/online_stores/qdrant_online_store/qdrant.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,7 @@ def retrieve_online_documents(
248248
self,
249249
config: RepoConfig,
250250
table: FeatureView,
251-
requested_feature: Optional[str],
252-
requested_features: Optional[List[str]],
251+
requested_features: List[str],
253252
embedding: List[float],
254253
top_k: int,
255254
distance_metric: Optional[str] = "cosine",

sdk/python/feast/infra/online_stores/sqlite.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,7 @@ def retrieve_online_documents(
322322
self,
323323
config: RepoConfig,
324324
table: FeatureView,
325-
requested_feature: Optional[str],
326-
requested_featuers: Optional[List[str]],
325+
requested_featuers: List[str],
327326
embedding: List[float],
328327
top_k: int,
329328
distance_metric: Optional[str] = None,
@@ -341,7 +340,7 @@ def retrieve_online_documents(
341340
Args:
342341
config: Feast configuration object
343342
table: FeatureView object as the table to search
344-
requested_feature: The requested feature as the column to search
343+
requested_features: The list of requested features to retrieve
345344
embedding: The query embedding to search for
346345
top_k: The number of items to return
347346
Returns:

sdk/python/feast/infra/passthrough_provider.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,6 @@ def retrieve_online_documents(
294294
self,
295295
config: RepoConfig,
296296
table: FeatureView,
297-
requested_feature: Optional[str],
298297
requested_features: Optional[List[str]],
299298
query: List[float],
300299
top_k: int,
@@ -305,7 +304,6 @@ def retrieve_online_documents(
305304
result = self.online_store.retrieve_online_documents(
306305
config,
307306
table,
308-
requested_feature,
309307
requested_features,
310308
query,
311309
top_k,

sdk/python/feast/infra/provider.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,6 @@ def retrieve_online_documents(
419419
self,
420420
config: RepoConfig,
421421
table: FeatureView,
422-
requested_feature: Optional[str],
423422
requested_features: Optional[List[str]],
424423
query: List[float],
425424
top_k: int,
@@ -440,7 +439,6 @@ def retrieve_online_documents(
440439
distance_metric: distance metric to use for the search.
441440
config: The config for the current feature store.
442441
table: The feature view whose embeddings should be searched.
443-
requested_feature: the requested document feature name.
444442
requested_features: the requested document feature names.
445443
query: The query embedding to search for.
446444
top_k: The number of documents to return.

0 commit comments

Comments
 (0)