Skip to content

Commit 8809805

Browse files
fix: Address Devin review feedback on versioning issues
- Fix SQLite _table_id to prefer projection.version_tag over current_version_number so @v2 refs read from the correct table - Detect feature name collisions for multi-version queries with full_feature_names=True (e.g. fv@v1:feat vs fv@v2:feat) - Remove unused include_feature_view_version_metadata parameter from retrieve_online_documents (v1) across all providers and online stores - Remove redundant name check from _schema_or_udf_changed since callers always match by name first Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent dd31cdb commit 8809805

File tree

13 files changed

+26
-22
lines changed

13 files changed

+26
-22
lines changed

sdk/python/feast/base_feature_view.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,10 @@ def __getitem__(self, item):
154154
return cp
155155

156156
def _schema_or_udf_changed(self, other: "BaseFeatureView") -> bool:
157-
"""Check if schema or UDF-related fields have changed (version-worthy changes)."""
158-
# Schema changes
159-
if self.name != other.name:
160-
return True
157+
"""Check if schema or UDF-related fields have changed (version-worthy changes).
158+
159+
Callers always match by name first, so name comparison is omitted here.
160+
"""
161161
if sorted(self.features) != sorted(other.features):
162162
return True
163163
# Skip metadata: description, tags, owner, projection

sdk/python/feast/feature_server.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,12 +392,14 @@ async def retrieve_online_documents(
392392
features=features,
393393
query=request.query,
394394
top_k=request.top_k,
395-
include_feature_view_version_metadata=request.include_feature_view_version_metadata,
396395
)
397396
if request.api_version == 2 and request.query_string is not None:
398397
read_params["query_string"] = request.query_string
399398

400399
if request.api_version == 2:
400+
read_params["include_feature_view_version_metadata"] = (
401+
request.include_feature_view_version_metadata
402+
)
401403
response = await run_in_threadpool(
402404
lambda: store.retrieve_online_documents_v2(**read_params) # type: ignore
403405
)

sdk/python/feast/feature_store.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2586,7 +2586,6 @@ def retrieve_online_documents(
25862586
top_k: int,
25872587
features: List[str],
25882588
distance_metric: Optional[str] = "L2",
2589-
include_feature_view_version_metadata: bool = False,
25902589
) -> OnlineResponse:
25912590
"""
25922591
Retrieves the top k closest document features. Note, embeddings are a subset of features.
@@ -2642,7 +2641,6 @@ def retrieve_online_documents(
26422641
query,
26432642
top_k,
26442643
distance_metric,
2645-
include_feature_view_version_metadata,
26462644
)
26472645

26482646
# TODO currently not return the vector value since it is same as feature value, if embedding is supported,
@@ -2863,7 +2861,6 @@ def _retrieve_from_online_store(
28632861
query: List[float],
28642862
top_k: int,
28652863
distance_metric: Optional[str],
2866-
include_feature_view_version_metadata: bool = False,
28672864
) -> List[
28682865
Tuple[
28692866
Timestamp, Optional[EntityKey], "FieldStatus.ValueType", Value, Value, Value
@@ -2879,7 +2876,6 @@ def _retrieve_from_online_store(
28792876
query=query,
28802877
top_k=top_k,
28812878
distance_metric=distance_metric,
2882-
include_feature_view_version_metadata=include_feature_view_version_metadata,
28832879
)
28842880

28852881
read_row_protos = []

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,6 @@ def retrieve_online_documents(
280280
embedding: List[float],
281281
top_k: int,
282282
distance_metric: Optional[str] = None,
283-
include_feature_view_version_metadata: bool = False,
284283
) -> List[
285284
Tuple[
286285
Optional[datetime],

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ def retrieve_online_documents(
180180
embedding: List[float],
181181
top_k: int,
182182
distance_metric: Optional[str] = None,
183-
include_feature_view_version_metadata: bool = False,
184183
) -> List[
185184
Tuple[
186185
Optional[datetime],

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,6 @@ def retrieve_online_documents(
420420
embedding: List[float],
421421
top_k: int,
422422
distance_metric: Optional[str] = None,
423-
include_feature_view_version_metadata: bool = False,
424423
) -> List[
425424
Tuple[
426425
Optional[datetime],

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,6 @@ def retrieve_online_documents(
381381
embedding: List[float],
382382
top_k: int,
383383
distance_metric: Optional[str] = "L2",
384-
include_feature_view_version_metadata: bool = False,
385384
) -> List[
386385
Tuple[
387386
Optional[datetime],

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,6 @@ def retrieve_online_documents(
264264
embedding: List[float],
265265
top_k: int,
266266
distance_metric: Optional[str] = "cosine",
267-
include_feature_view_version_metadata: bool = False,
268267
) -> List[
269268
Tuple[
270269
Optional[datetime],

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,6 @@ def retrieve_online_documents(
228228
embedding: Optional[List[float]],
229229
top_k: int,
230230
distance_metric: Optional[str] = "L2",
231-
include_feature_view_version_metadata: bool = False,
232231
) -> List[
233232
Tuple[
234233
Optional[datetime],

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,6 @@ def retrieve_online_documents(
341341
embedding: List[float],
342342
top_k: int,
343343
distance_metric: Optional[str] = None,
344-
include_feature_view_version_metadata: bool = False,
345344
) -> List[
346345
Tuple[
347346
Optional[datetime],
@@ -703,7 +702,11 @@ def _initialize_conn(
703702

704703
def _table_id(project: str, table: FeatureView) -> str:
705704
name = table.name
706-
version = getattr(table, "current_version_number", None)
705+
# Prefer version_tag from the projection (set by version-qualified refs like @v2)
706+
# over current_version_number (the FV's active version in metadata).
707+
version = getattr(table.projection, "version_tag", None)
708+
if version is None:
709+
version = getattr(table, "current_version_number", None)
707710
if version is not None and version > 0:
708711
name = f"{table.name}_v{version}"
709712
return f"{project}_{name}"

0 commit comments

Comments
 (0)