You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
FeatureService cannot pin a specific FeatureView/OnDemandFeatureView version #6717
A FeatureService exists to freeze the exact feature definitions a model was
trained and served on. Today it cannot pin a specific feature view version —
it always resolves to the active (promoted) version. Feast's own docs name this
limitation verbatim on the alpha feature-view-versioning page:
Feature services — Feature services always resolve to the active (promoted)
version. --no-promote versions are not served until promoted.
Building a service from a version-pinned FeatureView silently falls back to the
promoted version:
fv=FeatureView(name="driver_stats", version="v2", ...)
svc=FeatureService(name="model_v1", features=[fv[["conv_rate"]]])
svc.feature_view_projections[0].version_tag# -> None (should be 2)svc.feature_view_projections[0].name_to_use() # -> "driver_stats" (should be "driver_stats@v2")
Root cause
FeatureService.__init__ appends the source view's projection without
translating its version string into projection.version_tag (the field name_to_use() checks to render fv@v2).
utils._get_feature_views_to_use hard-codes the version as None for the FeatureService branch, so retrieval always falls through to the promoted
snapshot via get_any_feature_view.
While fixing this, a second pre-existing bug surfaced: offline retrieval of a
version-pinned OnDemandFeatureView fails. Offline stores re-fetch ODFVs from the
registry via an unversioned registry.list_on_demand_feature_views, so a pinned
ODFV ref (odfv@v1:feat) raises ValueError: Could not find feature view from reference ... or silently drops the ODFV's features. Every offline backend is
affected (they funnel through OnDemandFeatureView.get_requested_odfvs or offline_utils.get_feature_view_query_context, plus dask's inline duplicate).
Proposal
Capture the pinned version into the service's projection, and read it back at
retrieval time (fixes both online and offline for plain FeatureViews, which
share _get_feature_views_to_use).
Add a clean pinning API: allow plain string refs as FeatureService.features
entries ("driver_stats@v2:trips_today"), resolved against the registry at feast apply time — no importing/reconstructing historical view objects.
Fix offline ODFV resolution with a shared version-aware helper.
Gated by the existing registry.enable_online_feature_view_versioning flag,
which (despite its name) gates both online and offline versioned resolution.
Activity