Repository navigation
Conversation
4 of 7 tasks
|
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #6900 +/- ##
==========================================
+ Coverage 49.32% 49.33% +0.01%
==========================================
Files 443 443
Lines 55094 55106 +12
Branches 8017 8021 +4
==========================================
+ Hits 27176 27189 +13
+ Misses 26035 26034 -1
Partials 1883 1883
Continue to review full report in Codecov by Harness.
🚀 New features to boost your workflow:
|
ntkathole
reviewed
Sep 30, 2026
| odfv_input_dict | ||
| ) | ||
| if full_feature_names: | ||
| # The UDF returns short output names, but the requested refs |
Member
There was a problem hiding this comment.
Move the renaming into transform_dict by adding full_feature_names parameter. It makes the three transform methods consistent and prevents the bug from recurring if transform_dict gets called from anywhere else.
With full_feature_names=True the requested ODFV refs are "<view>__<feature>", but transform_dict returns the UDF's short output names. Nothing matched, so python mode (batch and singleton) ODFV features were silently missing from get_online_features, while pandas mode worked because transform_arrow renames its outputs. Rename python mode outputs to the projected names, and look up the declared schema type under those names too. Signed-off-by: breken-ai <312387581+breken-ai@users.noreply.github.com>
Move the full feature name renaming out of _augment_response_with_on_demand_transforms and into OnDemandFeatureView.transform_dict, behind a new full_feature_names parameter, as suggested in review. It mirrors _postprocess_arrow_table, so transform_dict, transform_arrow and transform_ibis name their outputs the same way for any caller. Also cover alias + python mode + full_feature_names together: the aliased feature service test now checks "<alias>__<feature>" in pandas, python and singleton python modes, and a unit test checks transform_dict naming directly, with and without an alias. Signed-off-by: breken-ai <312387581+breken-ai@users.noreply.github.com>
breken-ai
force-pushed
the
fix/python-odfv-full-feature-names
branch
from
October 8, 2026 00:18
390856c to
6976dbb
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this PR does / why we need it:
Online serving drops python mode on demand feature views when
full_feature_names=True.In
_augment_response_with_on_demand_transforms, a full-name request looks for"<view>__<feature>". The pandas path gets that name becausetransform_arrowrenames its outputs. The python path usestransform_dict, which returns the UDF's short output names. Nothing matches, soselected_subsetis empty and the feature disappears from the response. Batch andsingleton=Truepython ODFVs are both affected. A model client that asks for full names gets a KeyError or a silently missing input, and the same request in pandas mode works.The fix adds a
full_feature_namesparameter toOnDemandFeatureView.transform_dict, as suggested in review. A new_postprocess_feature_dictrenames outputs the same way_postprocess_arrow_tabledoes, sotransform_dict,transform_arrowandtransform_ibisall name their outputs consistently for any caller. The online path passesfull_feature_namesthrough. The declared schema type is also looked up under the full name. Without that, full-name values fell back to type inference instead of the declared dtype.Which issue(s) this PR fixes:
No existing issue. I searched open issues and PRs for full_feature_names with python mode or ODFVs and didn't find a match.
This PR also adds the alias + python mode +
full_feature_namescoverage requested by @ntkathole on #6901.Checks
git commit -s)Testing Strategy
Branch rebased on
master@ 9d42729 (includes #6901).test_python_views_with_full_feature_names(test_on_demand_python_transformation.py): requests a pandas ODFV, a batch python ODFV and a singleton python ODFV withfull_feature_names=True. On the original base (3667772), onlypandas_view__conv_rate_plus_acc_pandascame back and both python outputs were missing. Passes with this change. The aliased test below shows the same python mode gap on currentmaster@ 9d42729.test_feature_service_serves_aliased_odfv_features[pandas|python|python_singleton](test_on_demand_pandas_transformation.py): an ODFV added to a feature service withwith_name("scaled_alias"), served with default and full names, so this covers alias + python mode +full_feature_namestogether.master(has fix: Serve aliased on demand feature views in feature services #6901, not this fix):[pandas]passes;[python]and[python_singleton]fail withRight contains one more item: 'scaled_alias__conv_rate_x10'.KeyError: 'conv_rate_x10'.test_transform_dict_full_feature_names[batch|singleton]: callstransform_dictdirectly and checks short names by default,plus_one__val_plus_onewithfull_feature_names=True, andalias__val_plus_oneafterwith_name("alias"). It fails against the first revision of this PR (TypeError: transform_dict() got an unexpected keyword argument 'full_feature_names') and passes now.mastergives 180. Both have the same 7 failures and 7 collection errors locally: missing torch, theTestOnDemandTransformationsWithWritesUDF globalsNameErrortracked in On-demand feature view UDFs lose their module globals when rebuilt from the registry, so serving fails with NameError #6815, twoserve_registrytests, and two modules that need deps not installed here.ruff check,ruff format --checkandmypy feast/on_demand_feature_view.py feast/utils.pyare clean.Misc
This change was prepared with an AI coding assistant, and the tests and checks above were run locally.