Skip to content

feat(cli): Updated feast init demo by adding rag template - #5946

Merged
jyejare merged 9 commits into
feast-dev:masterfrom
Vperiodt:patch-rag-scenario
Jul 30, 2026
Merged

feat(cli): Updated feast init demo by adding rag template#5946
jyejare merged 9 commits into
feast-dev:masterfrom
Vperiodt:patch-rag-scenario

Conversation

@Vperiodt

@Vperiodt Vperiodt commented Feb 5, 2026

Copy link
Copy Markdown
Contributor

What this PR does / why we need it:

demos.mov

Which issue(s) this PR fixes:

Fixes : #5264


Open with Devin

@Vperiodt
Vperiodt marked this pull request as ready for review February 10, 2026 14:08
@Vperiodt
Vperiodt requested a review from a team as a code owner February 10, 2026 14:08
@Vperiodt
Vperiodt marked this pull request as draft February 10, 2026 14:09
devin-ai-integration[bot]

This comment was marked as resolved.

Comment thread sdk/python/feast/cli/cli.py Outdated
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(

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

IMO, we should just add rag to the default template and not do scenarios.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

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 !

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@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 ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I guess I think we could put them all in one bc they're lightweight examples

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

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:

  1. Add the Recommendation System (so feast init will eventually generate three demos).
  2. Extend the driver demos to include ODFV transforms.

@Vperiodt
Vperiodt marked this pull request as ready for review February 10, 2026 19:27
@Vperiodt Vperiodt changed the title feat(cli): Add --scenario option to feast init for RAG template feast(cli): Updated feast init demo by adding rag template Feb 11, 2026
@Vperiodt Vperiodt changed the title feast(cli): Updated feast init demo by adding rag template feat(cli): Updated feast init demo by adding rag template Feb 11, 2026

@jyejare jyejare left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM, just a concern about template vs scenario raised at #5946 (comment) before we merge it.

),
],
source=city_summaries_source,
ttl=timedelta(hours=2),

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I think for RAG use case TTL could be in days than hours, wdyt ?

devin-ai-integration[bot]

This comment was marked as resolved.

@ntkathole
ntkathole force-pushed the patch-rag-scenario branch from 79b5552 to 5554f43 Compare March 2, 2026 05:48
devin-ai-integration[bot]

This comment was marked as resolved.

@Vperiodt
Vperiodt force-pushed the patch-rag-scenario branch from 1e1363d to dc75cf5 Compare March 2, 2026 11:41
devin-ai-integration[bot]

This comment was marked as resolved.

@jyejare

jyejare commented Mar 3, 2026

Copy link
Copy Markdown
Collaborator

@Vperiodt Nice! Could you please paste the feast init output in the description.

@ntkathole
ntkathole force-pushed the patch-rag-scenario branch from 5621840 to 993449e Compare March 4, 2026 08:03
@ntkathole

Copy link
Copy Markdown
Member

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"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@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

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

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.

@ntkathole

Copy link
Copy Markdown
Member

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 ?

may be instead of changing default scenario of feast init, we can make multi-demo flow to be opt-in with new option feast init -t multi-project ?

devin-ai-integration[bot]

This comment was marked as resolved.

@jyejare

jyejare commented Apr 16, 2026

Copy link
Copy Markdown
Collaborator

@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 feast init behavior.

The default feast init (no flags) must continue to produce the current feature_repo/ structure so the operator and existing workflows are unaffected. The RAG demo should only be created when the user explicitly requests it via the -t option, e.g.:

feast init my_project -t rag

This means:

  • The operator breakage concern goes away — default init is unchanged.
  • The heavy-dependency concern goes away — users only pull pymilvus/torch/transformers when they explicitly choose the RAG template.
  • No need for a --scenario flag or multi-demo default flow.

Could you please:

  1. Update the PR to make RAG a standard template option (selected via -t rag) rather than changing the default init flow.
  2. Rebase the branch on latest master — it's significantly behind and CI isn't running.
  3. Address the Click 7.x compatibility issue (ParameterSource import) — either bump the minimum Click version to 8.0 in pyproject.toml or add a try/except guard.

Once rebased and updated, we can get this across the line quickly. Thanks!

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

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.

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.

Open 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
@Vperiodt
Vperiodt force-pushed the patch-rag-scenario branch from caffc46 to f568630 Compare April 16, 2026 14:41
@Vperiodt

Copy link
Copy Markdown
Contributor Author

hello ! @jyejare , ready for review

@ntkathole

Copy link
Copy Markdown
Member

@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-commenter

codecov-commenter commented Jul 24, 2026

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 46.46%. Comparing base (ef307c6) to head (339b5c2).
⚠️ Report is 1 commits behind head on master.
❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files

Impacted file tree graph

@@            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     
Flag Coverage Δ
go-feature-server 30.58% <ø> (ø)
python-unit 47.76% <ø> (+0.01%) ⬆️
Files with missing lines Coverage Δ
sdk/python/feast/cli/cli.py 54.82% <ø> (ø)

... and 2 files with indirect coverage changes


Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update ef307c6...339b5c2. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

jyejare

This comment was marked as spam.

@Vperiodt

Copy link
Copy Markdown
Contributor Author

@Vperiodt Please resolve conflicts and will merge

done!

@jyejare
jyejare enabled auto-merge (rebase) July 29, 2026 15:31
@jyejare

jyejare commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

Again there are conflicts @Vperiodt

auto-merge was automatically disabled July 29, 2026 15:33

Rebase failed

@jyejare
jyejare enabled auto-merge (squash) July 30, 2026 15:29
@jyejare
jyejare merged commit c8628eb into feast-dev:master Jul 30, 2026
3 checks passed
jyejare pushed a commit to opendatahub-io/feast that referenced this pull request Aug 5, 2026
…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
franciscojavierarceo pushed a commit that referenced this pull request Aug 21, 2026
# [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))
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.

Deploy Scenario from feast examples

5 participants