feat(cli): Updated feast init demo by adding rag template - #5946
Conversation
| help="Directory path where the repository will be created (default: create subdirectory with project name)", | ||
| ) | ||
| def init_command(project_directory, minimal: bool, template: str, repo_path: str): | ||
| @click.option( |
There was a problem hiding this comment.
IMO, we should just add rag to the default template and not do scenarios.
There was a problem hiding this comment.
suggestion are addressed, may be I can make one more PR for recommendation engine one, will keep this PR scope small as of now, thanks !
There was a problem hiding this comment.
@franciscojavierarceo The ideology of scenario is coming from #5264. The template are backend-based and without much of user context to it WHEREAS scenarios are real production-like deployments that customers can directly try and gain experience of feast usage with given Notebooks/Readme in deployment scenarios. So I would prefer to go with scenario and templates as two different options.
The plan also to design a feast-lab(within feast OR outside) with multiple scenarios to try out like banking/RAG/recommendation etc and hence by using -s OR --scenario we could have directly pull those feat-labs scenarios.
What do you think on this ?
There was a problem hiding this comment.
I guess I think we could put them all in one bc they're lightweight examples
There was a problem hiding this comment.
Thanks for the review!
Regarding the current scope: I’ve implemented the RAG template (City Wikipedia) and merged it with the driver example. As of now, running feast init <project_name> will create both projects in the same directory, allowing users to navigate to either and explore the demos.
I deliberately held off on adding the Recommendation System in this PR to keep the changes focused and easier to review.
Plan for immediate follow-up PRs is:
- Add the Recommendation System (so feast init will eventually generate three demos).
- Extend the driver demos to include ODFV transforms.
There was a problem hiding this comment.
LGTM, just a concern about template vs scenario raised at #5946 (comment) before we merge it.
| ), | ||
| ], | ||
| source=city_summaries_source, | ||
| ttl=timedelta(hours=2), |
There was a problem hiding this comment.
I think for RAG use case TTL could be in days than hours, wdyt ?
79b5552 to
5554f43
Compare
1e1363d to
dc75cf5
Compare
|
@Vperiodt Nice! Could you please paste the |
5621840 to
993449e
Compare
|
One of the big disadvantage I am seeing with this change is RAG template won't work without additional dependencies (pymilvus, torch, transformers). This could affect getting-started experience. Thoughts @franciscojavierarceo ? |
| repo_dir = temp_path / project_name | ||
| data_dir = repo_dir / "data" | ||
| repo_config = repo_dir / "feature_store.yaml" | ||
| repo_config = repo_dir / "feature_repo" / "feature_store.yaml" |
There was a problem hiding this comment.
@Vperiodt This breaks operator functioning.
With this PR, feast init sample_init (no -t flag) creates:
sample_init/
├── driver/feature_repo/...
├── rag/feature_repo/...
But the operator expects:
sample_init/
├── feature_repo/... <-- DOES NOT EXIST
There was a problem hiding this comment.
regarding this particular test we use feast init repo_name --template local, so we get a single feature_repo/ and the test overwrites that file to check that feast apply fails for invalid project names.
may be instead of changing default scenario of feast init, we can make multi-demo flow to be opt-in with new option |
|
@Vperiodt After reviewing the concerns raised by @ntkathole around operator breakage and heavy dependencies (pymilvus, torch, transformers) affecting the default getting-started experience, here's are my thoughts: The RAG template should be opt-in, not the default The default This means:
Could you please:
Once rebased and updated, we can get this across the line quickly. Thanks! |
There was a problem hiding this comment.
Devin Review found 1 new potential issue.
🐛 1 issue in files not directly in the diff
🐛 Integration test not updated for new default feast init multi-demo directory structure (sdk/python/tests/integration/online_store/test_remote_online_store.py:229-231)
The PR changes feast init (without --template) to create a multi-demo layout ({project}/driver/feature_repo/ and {project}/rag/feature_repo/) instead of the previous single-repo layout ({project}/feature_repo/). However, _create_remote_client_feature_store at sdk/python/tests/integration/online_store/test_remote_online_store.py:229 still calls runner.run(["init", project_name]) without --template "local", then on line 231 constructs repo_path = os.path.join(temp_dir, project_name, "feature_repo") — a path that no longer exists under the new default behavior. This will cause the test to fail because _overwrite_remote_client_feature_store_yaml will try to write to a nonexistent directory, and FeatureStore(repo_path=repo_path) on line 252 will fail. All other test call sites (e.g., test_cli_chdir.py:30, test_offline_server.py:73, auth_permissions_util.py:39, test_repo_operations.py:187) were correctly updated to pass --template "local", but this one was missed.
View 15 additional findings in Devin Review.
Add a new RAG (Retrieval-Augmented Generation) template that can be selected via `feast init -t rag`. The template provides a City Q&A demo using Feast for feature management and Milvus for vector search. The default `feast init` behavior is unchanged — it continues to use the local template, preserving operator compatibility and avoiding heavy dependencies (pymilvus, torch, transformers) in the default getting-started flow. Fixes feast-dev#5264 Signed-off-by: Vanshika Vanshika <vvanshik@redhat.com> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED
caffc46 to
f568630
Compare
|
hello ! @jyejare , ready for review |
|
@Vperiodt Please resolve conflicts and will merge |
Resolve cli.py conflict by keeping master's modular CLI and re-adding the opt-in `rag` template choice for feast init. Signed-off-by: Vanshika Vanshika <vvanshik@redhat.com> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #5946 +/- ##
==========================================
+ Coverage 46.44% 46.46% +0.01%
==========================================
Files 414 414
Lines 50134 50138 +4
Branches 7173 7173
==========================================
+ Hits 23285 23295 +10
+ Misses 25212 25204 -8
- Partials 1637 1639 +2
... and 2 files with indirect coverage changes Continue to review full report in Codecov by Harness.
🚀 New features to boost your workflow:
|
done! |
|
Again there are conflicts @Vperiodt |
Rebase failed
…5946) feat(cli): add RAG template as opt-in option for feast init Add a new RAG (Retrieval-Augmented Generation) template that can be selected via `feast init -t rag`. The template provides a City Q&A demo using Feast for feature management and Milvus for vector search. The default `feast init` behavior is unchanged — it continues to use the local template, preserving operator compatibility and avoiding heavy dependencies (pymilvus, torch, transformers) in the default getting-started flow. Fixes feast-dev#5264 Signed-off-by: Vanshika Vanshika <vvanshik@redhat.com> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED
# [0.66.0](v0.65.0...v0.66.0) (2026-08-21) ### Bug Fixes * Add connection pre-warming for DynamoDB async client ([89240fa](89240fa)), closes [#6060](#6060) * Add remote registry client extra ([#6697](#6697)) ([b8dfcb0](b8dfcb0)) * Address review feedback on FIPS cipher suite configuration ([4a35fba](4a35fba)) * Allow remote-registry first apply for new projects ([39d408d](39d408d)) * Avoid importing feast.feature_store at mcp_server import time ([ddb2e9a](ddb2e9a)) * Bump pymssql to >=2.3.6 for macOS arm64 wheel support ([181eb35](181eb35)), closes [#5636](#5636) [#5193](#5193) [#5636](#5636) * Call ApplySavedDataset RPC instead of ApplyFeatureService in RemoteRegistry.apply_saved_dataset() ([934d341](934d341)) * Catch missing dbt parser dependency in dbt CLI commands ([#6534](#6534)) ([3c2ae3c](3c2ae3c)) * Default authentication to kubernetes auth ([6a4690a](6a4690a)) * Defer feature-freshness thread to post-fork to avoid Gunicorn deadlock ([#6648](#6648)) ([104ad10](104ad10)), closes [#6647](#6647) * Do not pass undeclared feature view columns to ODFV UDFs ([#6527](#6527)) ([75b9463](75b9463)) * downgrade mcp pin to 1.29.0 and fix CI lockfiles and unit tests ([98e5bca](98e5bca)), closes [#6706](#6706) * Feast apply silently ignoring ttl updates to None or timedelta(0) ([#6709](#6709)) ([97b0f25](97b0f25)), closes [#6703](#6703) * Fix mypy TorchTensor type alias error ([#6712](#6712)) ([34de6fa](34de6fa)), closes [#5563](#5563) * Fixed data source creation form gaps ([5d0f7d6](5d0f7d6)) * Handle parameterized and complex Trino types in type map ([326554d](326554d)) * Isolate default user permissions ([e37adbf](e37adbf)) * Isolate projection join key maps ([d1c709d](d1c709d)) * Map Postgres real to FLOAT instead of DOUBLE ([62db435](62db435)) * Merge shared ODFV source projections in feature resolution ([d269946](d269946)), closes [#6621](#6621) * More exhaustive athena types ([a9aaefc](a9aaefc)) * Normalize SQL registry read_path to the psycopg3 driver like path ([#6644](#6644)) ([996c6ea](996c6ea)), closes [#6643](#6643) * **operator:** add spec.services.onlineStore.disabled to opt out of the online store ([d81d4e3](d81d4e3)), closes [#6586](#6586) * Preinstall DuckDB delta extension for tests ([fd4d49d](fd4d49d)), closes [#6743](#6743) * Preserve event-time ordering within Redis online_write_batch ([40fb788](40fb788)), closes [#5163](#5163) * Prevent mutation of cached feature resolution results ([ea17419](ea17419)) * Remote feastRef FeatureStore fails first apply for a new feastProject ([9affee5](9affee5)) * Remove inert subjectaccessreviews and reorganize RBAC rules ([f771ea4](f771ea4)) * Report single-feature-view spark_application materialization success ([a9219d9](a9219d9)), closes [#6673](#6673) * Reset the global security manager after the permissions fixture ([7667215](7667215)) * Resolve kserve with pip --dry-run instead of installing it ([01da132](01da132)), closes [#6732](#6732) * Resolve write_to_offline_store feature view with a single registry lookup ([a42dc85](a42dc85)), closes [#4235](#4235) * Return False from __eq__ on cross-type comparison ([#6637](#6637)) ([0f149a9](0f149a9)), closes [#6636](#6636) * Reuse IdP-issued client tokens until near expiry ([602d752](602d752)) * Reuse the OIDC JWKS client across requests ([#6683](#6683)) ([a1e6fc2](a1e6fc2)) * Separate CronJob and feature-server ServiceAccounts ([398f643](398f643)) * Serialize UnixTimestamp proto values as raw int64 in remote online store transport ([1e7134f](1e7134f)) * Set FIPS cipher suites before pyarrow.flight import to prevent crash on IBM Power ([979b82a](979b82a)) * Support Entra ID (Azure AD) token claims in OIDC auth ([#6631](#6631)) ([f843c63](f843c63)) * UDF/ODFV source rehydrate (+ Postgres / online cache) ([#6655](#6655)) ([5fd7af7](5fd7af7)) * Updated projects-list.json in order to display newly added projects ([#6657](#6657)) ([3a6a103](3a6a103)) * Use correct image name in multi-arch imagetools push step ([faf85e0](faf85e0)) * Use join keys instead of entity names in ODFV materialization ([#6645](#6645)) ([abffebc](abffebc)), closes [#5965](#5965) * use matching proto class per feature view list in SqliteOnlineStore.plan() ([adb8c1c](adb8c1c)), closes [#6658](#6658) * Widen Athena integer type mapping for unsigned ints ([3425783](3425783)) ### Features * Add ConnectionRef to DataSource for pluggable external credential resolution ([28bde01](28bde01)) * Add Feature Service Create in UI ([0399380](0399380)) * Add hybrid to ValidOfflineStoreDBStorePersistenceTypes for HybridOfflineStore support ([#6707](#6707)) ([310ab51](310ab51)), closes [#6701](#6701) * Add MLflow integration support to Feast operator ([#6611](#6611)) ([52999f1](52999f1)) * Add opt-in filter_by_created_timestamp cutoff to get_historical_features ([#6617](#6617)) ([79b33ce](79b33ce)), closes [#6615](#6615) * Add optional OIDC token audience and issuer verification ([#6670](#6670)) ([ef307c6](ef307c6)) * Add packaged feature repository support to Feast Operator ([8112b1e](8112b1e)), closes [#6598](#6598) * add plan() support to DynamoDBOnlineStore ([51ce982](51ce982)), closes [#6658](#6658) [#6659](#6659) * Added optional namespace/colleciton to datasets ([165fcf2](165fcf2)) * Added SQL registry schema_mode and registry create command ([#6704](#6704)) ([037c4cd](037c4cd)) * Allow users to have protected project on shared registry ([f9923bc](f9923bc)) * Apply Intermediate TLS defaults on API fallback and handle transient errors ([#6587](#6587)) ([43ae993](43ae993)) * **cli:** Updated feast init demo by adding rag template ([#5946](#5946)) ([c8628eb](c8628eb)), closes [#5264](#5264) * Expose the OIDC JWKS tunables through the operator ([#6690](#6690)) ([fef4e78](fef4e78)), closes [#6683](#6683) * Making feast vector store with open ai search api compatible ([#6121](#6121)) ([54da19a](54da19a)) * Multi-arch publish for feast operator image ([b221036](b221036)) * OpenLineage lineage enhancements - full object coverage, richer UI, and API-level sync ([#6719](#6719)) ([120a868](120a868)) * **operator:** Add spec.services.initImage for init container image override ([#6598](#6598)) ([ca355cb](ca355cb)) * Pass optional OIDC audience and issuer through the operator ([#6677](#6677)) ([a13ed7b](a13ed7b)), closes [#6670](#6670) * **server:** Remote Materialization ([#6649](#6649)) ([b7ae488](b7ae488)), closes [#4526](#4526) * Support Lineage configs via operator ([bf1e54a](bf1e54a)) * Updated datasets UI to support grouping ([7ae64ec](7ae64ec))
What this PR does / why we need it:
demos.mov
Which issue(s) this PR fixes:
Fixes : #5264