Skip to content
Open
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
837e34f
feat: Add unified transformation
franciscojavierarceo Nov 26, 2025
d12fbfd
feat: Unify transformations
franciscojavierarceo Nov 27, 2025
9a2df49
feat: Unify Transformations
franciscojavierarceo Nov 28, 2025
9aceb7f
feat: Unify Transformations
franciscojavierarceo Nov 28, 2025
5c8b93c
updated docs
franciscojavierarceo Dec 4, 2025
6d5ce47
refactor: separate transformation logic from execution decisions with…
franciscojavierarceo Dec 23, 2025
9380cf9
format
franciscojavierarceo Dec 23, 2025
5b759ed
incorporaitng feedback
franciscojavierarceo Dec 24, 2025
2d7a43b
updated
franciscojavierarceo Dec 25, 2025
b6299d2
fix
franciscojavierarceo Dec 26, 2025
3726733
linter
franciscojavierarceo Dec 26, 2025
f55d4b4
cleanup
franciscojavierarceo Dec 26, 2025
716e692
cleanup
franciscojavierarceo Dec 26, 2025
a4f2e0a
more fix
franciscojavierarceo Dec 29, 2025
02ae40b
more fix
franciscojavierarceo Dec 29, 2025
74de467
updated
franciscojavierarceo Dec 31, 2025
c360aef
fix
franciscojavierarceo Jan 5, 2026
f73431c
fix
franciscojavierarceo Jan 5, 2026
50e536a
fix
franciscojavierarceo Jan 5, 2026
a87c4b4
fix
franciscojavierarceo Jan 5, 2026
e2f722c
Merge branch 'master' into refactor-odfv
franciscojavierarceo Jan 5, 2026
dde05bd
lint
franciscojavierarceo Jan 5, 2026
0e1f037
fix
franciscojavierarceo Jan 6, 2026
662e21b
linter
franciscojavierarceo Jan 6, 2026
9f48c75
fix linter
franciscojavierarceo Jan 6, 2026
a058aac
fix
franciscojavierarceo Jan 6, 2026
b8771c9
fix(redis): Preserve millisecond timestamp precision for Redis online…
jatin5251 Jan 6, 2026
34d9b52
feat: Add GCS registry store in Go feature server (#5818)
samuelkim7 Jan 6, 2026
6c35d45
chore: Refactor some unit tests into integration tests (#5820)
franciscojavierarceo Jan 6, 2026
5bcd6e6
test: Remove e2e_rhoai package tests
Srihari1192 Jan 5, 2026
61812ba
fix
franciscojavierarceo Jan 7, 2026
d4adcd5
fix
franciscojavierarceo Jan 7, 2026
a007be3
fix
franciscojavierarceo Jan 8, 2026
416b15c
uploading progress
franciscojavierarceo Jan 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix
Signed-off-by: Francisco Javier Arceo <farceo@redhat.com>
  • Loading branch information
franciscojavierarceo committed Jan 6, 2026
commit a058aac3b42c2da155d9a2ef210e2e0ffbbf7889
19 changes: 19 additions & 0 deletions sdk/python/feast/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -745,6 +745,9 @@ def _augment_response_with_on_demand_transforms(
) or not getattr(odfv, "write_to_online_store", True)

if should_transform:
# Initialize transformed_features to avoid UnboundLocalError
transformed_features = None

# Apply aggregations if configured.
aggregations = getattr(odfv, "aggregations", [])
mode_attr = getattr(odfv, "mode", "pandas")
Expand All @@ -771,6 +774,16 @@ def _augment_response_with_on_demand_transforms(
mode,
)

# If only aggregations were applied and no transformations will follow,
# set transformed_features to avoid UnboundLocalError.
# This handles the case where aggregations exist but the ODFV has no transformations.
if not hasattr(odfv, "feature_transformation") or not odfv.feature_transformation:
# No transformations will be applied, set transformed_features to aggregated result
if mode == "python" and initial_response_dict is not None:
transformed_features = initial_response_dict
elif mode in {"pandas", "substrait"} and initial_response_arrow is not None:
transformed_features = initial_response_arrow

# Apply transformation. Note: aggregations and transformation configs are mutually exclusive
# TODO: Fix to make it work for having both aggregation and transformation
# ticket: https://github.com/feast-dev/feast/issues/5689
Expand Down Expand Up @@ -822,6 +835,12 @@ def _augment_response_with_on_demand_transforms(
raise Exception(
f"Invalid OnDemandFeatureMode: {mode}. Expected one of 'pandas', 'python', or 'substrait'."
)

# Handle case where no transformation was applied
if transformed_features is None:
# No transformation was applied, skip this ODFV
continue

transformed_columns = (
transformed_features.column_names
if isinstance(transformed_features, pyarrow.Table)
Expand Down
Loading