Skip to content

Feast-MLflow Integration#6235

Open
Vperiodt wants to merge 3 commits intofeast-dev:masterfrom
Vperiodt:feast-mlflow
Open

Feast-MLflow Integration#6235
Vperiodt wants to merge 3 commits intofeast-dev:masterfrom
Vperiodt:feast-mlflow

Conversation

@Vperiodt
Copy link
Copy Markdown
Contributor

@Vperiodt Vperiodt commented Apr 8, 2026

What this PR does / why we need it:

Which issue(s) this PR fixes:

Checks

  • I've made sure the tests are passing.
  • My commits are signed off (git commit -s)
  • My PR title follows conventional commits format

Testing Strategy

  • Unit tests
  • Integration tests
  • Manual tests
  • Testing is not required for this change

Misc


Open with Devin

github-advanced-security[bot]

This comment was marked as resolved.

Vperiodt added 2 commits April 9, 2026 17:30
Signed-off-by: Vanshika Vanshika <vvanshik@redhat.com>

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
Signed-off-by: Vanshika Vanshika <vvanshik@redhat.com>

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
@Vperiodt Vperiodt marked this pull request as ready for review April 9, 2026 12:06
@Vperiodt Vperiodt requested a review from a team as a code owner April 9, 2026 12:06
Copy link
Copy Markdown
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 potential issues.

View 5 additional findings in Devin Review.

Open in Devin Review

Comment on lines +272 to +276
fs_refs = frozenset(
f"{p.name}:{f.name}"
for p in fs.feature_view_projections
for f in p.features
)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 _resolve_feature_service_name uses p.name instead of p.name_to_use(), causing feature service matching failures

The _resolve_feature_service_name method at sdk/python/feast/feature_store.py:273 constructs feature service refs as f"{p.name}:{f.name}", but the _feature_refs it receives from callers (via utils._get_features at sdk/python/feast/utils.py:1164) are built using f"{projection.name_to_use()}:{f.name}". The name_to_use() method (sdk/python/feast/feature_view_projection.py:52-56) returns self.name_alias or self.name and may append @v{version_tag}. When a feature view projection has an alias or a version tag, the frozensets will never match, so the method silently returns None and the feast.feature_service tag is never set in MLflow for those retrievals.

Suggested change
fs_refs = frozenset(
f"{p.name}:{f.name}"
for p in fs.feature_view_projections
for f in p.features
)
fs_refs = frozenset(
f"{p.name_to_use()}:{f.name}"
for p in fs.feature_view_projections
for f in p.features
)
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Resolved: The current analysis (ANALYSIS_0001) performed a more thorough trace of all calling paths and determined this is NOT a bug: _resolve_feature_service_name is only called when features is a List[str] (not a FeatureService), and in that code path _get_features returns the user-provided strings as-is. User-provided feature refs use the original FV name (matching p.name), so the comparison is consistent. The previous bug was a false positive.

f.name: f.dtype.to_value_type() for f in requested_feature_view.features
}
return OnlineResponse(online_features_response, feature_types=feature_types)
return OnlineResponse(online_features_response)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 Removal of feature_types from OnlineResponse in document retrieval breaks UUID deserialization

The PR removes the feature_types parameter from three OnlineResponse() calls in retrieve_online_documents and retrieve_online_documents_v2. Previously, feature_types was passed as {f.name: f.dtype.to_value_type() for f in table.features}, and OnlineResponse.to_dict() (sdk/python/feast/online_response.py:76-80) uses this to call feast_value_type_to_python_type(v, feature_type). Without the type hint, the backward-compatibility path at sdk/python/feast/type_map.py:177-186 for UUID/TIME_UUID features stored as string_val will no longer convert them to uuid.UUID objects — they'll be returned as raw strings instead. Other call sites (e.g., sdk/python/feast/infra/online_stores/online_store.py:254) still pass feature_types.

Prompt for agents
The PR removed the feature_types parameter from OnlineResponse() in three places in feature_store.py: retrieve_online_documents (line 3006), and retrieve_online_documents_v2 (lines 3296 and 3319). The old code was:

feature_types = {f.name: f.dtype.to_value_type() for f in requested_feature_view.features}  # or table.features
return OnlineResponse(online_features_response, feature_types=feature_types)

This feature_types dict is used in OnlineResponse.to_dict() to enable backward-compatible deserialization of UUID types stored as string_val. Restore the feature_types parameter in these three OnlineResponse() calls to match the behavior of other call sites like online_store.py:254 and online_store.py:406.
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Signed-off-by: Vanshika Vanshika <vvanshik@redhat.com>

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants