Repository navigation
feat: Optional nameless pre-computed vectors with a schema fingerprint - #7077
chandlerok wants to merge 3 commits into
Conversation
precompute_feature_service accepts entity_keys and skips the keyspace scan when they are given. The push hook now passes the distinct entity keys from the pushed DataFrame instead of rebuilding every entity in the store. Signed-off-by: Chandler King <chandler.king@findheadway.com> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Stored vectors carry "<fv>__<feature>" names while the default request expects bare feature names, so the fast path always reported a schema mismatch unless full_feature_names=True. Compare on the caller's naming and derive the per-feature view name from the stored names for TTL checks. Signed-off-by: Chandler King <chandler.king@findheadway.com> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A pre-computed vector stores the full repeated feature name list next to its values. For a wide service that is most of the blob: 90 features came to 4.8 KB per entity, 3.8 KB of it names that are identical for every entity. FeatureService gains precompute_omit_names. Vectors written for such a service carry only values, per-view timestamps, and a fingerprint of the service's ordered names. The fast path validates a nameless vector by fingerprint and takes its names from the service. Vectors with names keep working as before. With the flag on the same blob is 834 bytes, and a 500-entity read moves 414 KB instead of 2.4 MB. Generated code is from grpcio-tools 1.62.3 (protobuf 4.25) and mypy-protobuf 3.3.0 to match the checked-in files. Signed-off-by: Chandler King <chandler.king@findheadway.com> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #7077 +/- ##
==========================================
+ Coverage 50.97% 51.01% +0.03%
==========================================
Files 455 455
Lines 56994 57030 +36
Branches 8321 8327 +6
==========================================
+ Hits 29055 29095 +40
+ Misses 25954 25950 -4
Partials 1985 1985
*This pull request uses carry forward flags. Click here to find out more.
... and 1 file with indirect coverage changes Continue to review full report in Codecov by Harness.
🚀 New features to boost your workflow:
|
|
The one red check is |
What this PR does / why we need it:
Adds an opt-in
precompute_omit_namesonFeatureService. Vectors written for such a service carry values, per-view timestamps, and a fingerprint of the service's ordered<fv>__<feature>names instead of the repeated name list. The fast path validates a nameless vector by fingerprint and takes its names from the service. Vectors with names keep working as before, and a vector whose fingerprint does not match the service falls through to the existing mismatch handling.Measured on a 90-feature service, Feast 0.67.0, Redis store:
precompute_omit_names=TrueThe names are identical for every entity, so today the single-read path moves 4x the bytes of the per-view path it replaces.
Proto changes:
FeatureServiceSpec.precompute_omit_namesandPrecomputedFeatureVector.schema_fingerprint, both additive. Generated code is from grpcio-tools 1.62.3 (protobuf 4.25) and mypy-protobuf 3.3.0 so the diff against the checked-in files is only the new fields.Stacked on #7076; the first two commits are that PR.
Which issue(s) this PR fixes:
Fixes #7075
Checks
git commit -s)Testing Strategy
New unit tests: nameless vector matches and reorders by fingerprint, stale fingerprint falls back, nameless vector without a service falls back, flag round-trips through proto, fingerprint follows feature order.
test_precomputed_feature_vectors.pyandlocal_feast_tests/test_feature_service.pypass locally.Misc
@ntkathole
🤖 Generated with Claude Code