Skip to content

Commit de96032

Browse files
Merge pull request feast-dev#40 from jyejare/merging_all
Pulling all missing commits of Upstream/Master to midstream
2 parents 6e5b0f2 + dd6985b commit de96032

154 files changed

Lines changed: 19364 additions & 13020 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build_wheels.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ jobs:
112112
needs: [ build-python-wheel ]
113113
strategy:
114114
matrix:
115-
os: [ ubuntu-latest, macos-13 ]
115+
os: [ ubuntu-latest, macos-14 ]
116116
python-version: [ "3.9", "3.10", "3.11" ]
117117
from-source: [ True, False ]
118118
env:
@@ -141,7 +141,7 @@ jobs:
141141
name: python-wheels
142142
path: dist
143143
- name: Install OS X dependencies
144-
if: matrix.os == 'macos-13'
144+
if: matrix.os == 'macos-14'
145145
run: brew install coreutils
146146
- name: Install wheel
147147
if: ${{ !matrix.from-source }}

.github/workflows/nightly-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ jobs:
131131
sudo apt update
132132
sudo apt install -y -V libarrow-dev
133133
- name: Install apache-arrow on macos
134-
if: matrix.os == 'macos-13'
134+
if: matrix.os == 'macos-14'
135135
run: brew install apache-arrow
136136
- name: Install dependencies
137137
run: make install-python-dependencies-ci

.github/workflows/unit_tests.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
fail-fast: false
1111
matrix:
1212
python-version: ["3.10", "3.11", "3.12"]
13-
os: [ ubuntu-latest, macos-13, macos-14 ]
13+
os: [ ubuntu-latest, macos-14 ]
1414
exclude:
1515
- os: macos-14
1616
python-version: "3.10"
@@ -30,6 +30,12 @@ jobs:
3030
uses: astral-sh/setup-uv@v5
3131
with:
3232
enable-cache: true
33+
- name: Install torch (platform-specific)
34+
run: |
35+
if [[ "$RUNNER_OS" == "Linux" ]]; then
36+
pip install torch torchvision \
37+
--index-url https://download.pytorch.org/whl/cpu
38+
fi
3339
- name: Install dependencies
3440
run: make install-python-dependencies-ci
3541
- name: Test Python

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ test-python-integration-local: ## Run Python integration tests (local dev mode)
152152
test-python-integration-rbac-remote: ## Run Python remote RBAC integration tests
153153
FEAST_IS_LOCAL_TEST=True \
154154
FEAST_LOCAL_ONLINE_CONTAINER=True \
155-
python -m pytest --tb=short -v -n 8 --color=yes --integration --durations=10 --timeout=1200 --timeout_method=thread --dist loadgroup \
155+
python -m pytest --tb=short -v -n 4 --color=yes --integration --durations=10 --timeout=1200 --timeout_method=thread --dist loadgroup \
156156
-k "not test_lambda_materialization and not test_snowflake_materialization" \
157157
-m "rbac_remote_integration_test" \
158158
--log-cli-level=INFO -s \

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717
[![License](https://img.shields.io/badge/License-Apache%202.0-blue)](https://github.com/feast-dev/feast/blob/master/LICENSE)
1818
[![GitHub Release](https://img.shields.io/github/v/release/feast-dev/feast.svg?style=flat&sort=semver&color=blue)](https://github.com/feast-dev/feast/releases)
1919

20+
2021
## Join us on Slack!
2122
👋👋👋 [Come say hi on Slack!](https://communityinviter.com/apps/feastopensource/feast-the-open-source-feature-store)
2223

2324
[Check out our DeepWiki!](https://deepwiki.com/feast-dev/feast)
2425

2526
## Overview
27+
<a href="https://trendshift.io/repositories/8046" target="_blank"><img src="https://trendshift.io/api/badge/repositories/8046" alt="feast-dev%2Ffeast | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
2628

2729
Feast (**Fea**ture **St**ore) is an open source feature store for machine learning. Feast is the fastest path to manage existing infrastructure to productionize analytic data for model training and online inference.
2830

docs/SUMMARY.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
* [Validating historical features with Great Expectations](tutorials/validating-historical-features.md)
5454
* [Building streaming features](tutorials/building-streaming-features.md)
5555
* [Retrieval Augmented Generation (RAG) with Feast](tutorials/rag-with-docling.md)
56+
* [MCP - AI Agent Example](../examples/mcp_feature_store/README.md)
5657

5758
## How-to Guides
5859

@@ -131,6 +132,7 @@
131132
* [GCS](reference/registries/gcs.md)
132133
* [SQL](reference/registries/sql.md)
133134
* [Snowflake](reference/registries/snowflake.md)
135+
* [Remote](reference/registries/remote.md)
134136
* [Providers](reference/providers/README.md)
135137
* [Local](reference/providers/local.md)
136138
* [Google Cloud Platform](reference/providers/google-cloud-platform.md)
@@ -146,6 +148,7 @@
146148
* [Feature servers](reference/feature-servers/README.md)
147149
* [Python feature server](reference/feature-servers/python-feature-server.md)
148150
* [\[Alpha\] Go feature server](reference/feature-servers/go-feature-server.md)
151+
* [MCP Feature Server](reference/feature-servers/mcp-feature-server.md)
149152
* [Offline Feature Server](reference/feature-servers/offline-feature-server.md)
150153
* [Registry server](reference/feature-servers/registry-server.md)
151154
* [\[Beta\] Web UI](reference/alpha-web-ui.md)
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
# Batch Materialization Engine
22

3+
Note: The materialization engine is not constructed via unified compute engine interface.
4+
35
A batch materialization engine is a component of Feast that's responsible for moving data from the offline store into the online store.
46

5-
A materialization engine abstracts over specific technologies or frameworks that are used to materialize data. It allows users to use a pure local serialized approach (which is the default LocalMaterializationEngine), or delegates the materialization to seperate components (e.g. AWS Lambda, as implemented by the the LambdaMaterializaionEngine).
7+
A materialization engine abstracts over specific technologies or frameworks that are used to materialize data. It allows users to use a pure local serialized approach (which is the default LocalComputeEngine), or delegates the materialization to seperate components (e.g. AWS Lambda, as implemented by the the LambdaComputeEngine).
68

7-
If the built-in engines are not sufficient, you can create your own custom materialization engine. Please see [this guide](../../how-to-guides/customizing-feast/creating-a-custom-materialization-engine.md) for more details.
9+
If the built-in engines are not sufficient, you can create your own custom materialization engine. Please see [this guide](../../how-to-guides/customizing-feast/creating-a-custom-compute-engine.md) for more details.
810

911
Please see [feature\_store.yaml](../../reference/feature-repository/feature-store-yaml.md#overview) for configuring engines.

docs/getting-started/genai.md

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ The transformation workflow typically involves:
5656
3. **Chunking**: Split documents into smaller, semantically meaningful chunks
5757
4. **Embedding Generation**: Convert text chunks into vector embeddings
5858
5. **Storage**: Store embeddings and metadata in Feast's feature store
59-
6059
### Feature Transformation for LLMs
6160

6261
Feast supports transformations that can be used to:
@@ -105,13 +104,61 @@ This integration enables:
105104
- Efficiently materializing features to vector databases
106105
- Scaling RAG applications to enterprise-level document repositories
107106

107+
## Model Context Protocol (MCP) Support
108+
109+
Feast supports the Model Context Protocol (MCP), which enables AI agents and applications to interact with your feature store through standardized MCP interfaces. This allows seamless integration with LLMs and AI agents for GenAI applications.
110+
111+
### Key Benefits of MCP Support
112+
113+
* **Standardized AI Integration**: Enable AI agents to discover and use features dynamically without hardcoded definitions
114+
* **Easy Setup**: Add MCP support with a simple configuration change and `pip install feast[mcp]`
115+
* **Agent-Friendly APIs**: Expose feature store capabilities through MCP tools that AI agents can understand and use
116+
* **Production Ready**: Built on top of Feast's proven feature serving infrastructure
117+
118+
### Getting Started with MCP
119+
120+
1. **Install MCP support**:
121+
```bash
122+
pip install feast[mcp]
123+
```
124+
125+
2. **Configure your feature store** to use MCP:
126+
```yaml
127+
feature_server:
128+
type: mcp
129+
enabled: true
130+
mcp_enabled: true
131+
mcp_server_name: "feast-feature-store"
132+
mcp_server_version: "1.0.0"
133+
```
134+
135+
### How It Works
136+
137+
The MCP integration uses the `fastapi_mcp` library to automatically transform your Feast feature server's FastAPI endpoints into MCP-compatible tools. When you enable MCP support:
138+
139+
1. **Automatic Discovery**: The integration scans your FastAPI application and discovers all available endpoints
140+
2. **Tool Generation**: Each endpoint becomes an MCP tool with auto-generated schemas and descriptions
141+
3. **Dynamic Access**: AI agents can discover and call these tools dynamically without hardcoded definitions
142+
4. **Standard Protocol**: Uses the Model Context Protocol for standardized AI-to-API communication
143+
144+
### Available MCP Tools
145+
146+
The fastapi_mcp integration automatically exposes your Feast feature server's FastAPI endpoints as MCP tools. This means AI assistants can:
147+
148+
* **Call `/get-online-features`** to retrieve features from the feature store
149+
* **Use `/health`** to check server status
150+
151+
For a complete example, see the [MCP Feature Store Example](../../examples/mcp_feature_store/).
152+
108153
## Learn More
109154

110155
For more detailed information and examples:
111156

112157
* [Vector Database Reference](../reference/alpha-vector-database.md)
113158
* [RAG Tutorial with Docling](../tutorials/rag-with-docling.md)
114159
* [Milvus Quickstart Example](https://github.com/feast-dev/feast/tree/master/examples/rag/milvus-quickstart.ipynb)
160+
* [MCP Feature Store Example](../../examples/mcp_feature_store/)
161+
* [MCP Feature Server Reference](../reference/feature-servers/mcp-feature-server.md)
115162
* [Spark Data Source](../reference/data-sources/spark.md)
116163
* [Spark Offline Store](../reference/offline-stores/spark.md)
117164
* [Spark Batch Materialization](../reference/batch-materialization/spark.md)

docs/how-to-guides/customizing-feast/creating-a-custom-materialization-engine.md renamed to docs/how-to-guides/customizing-feast/creating-a-custom-compute-engine.md

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
# Adding a custom batch materialization engine
1+
# Adding a custom compute engine
22

33
### Overview
44

5-
Feast batch materialization operations (`materialize` and `materialize-incremental`) execute through a `BatchMaterializationEngine`.
5+
Feast batch materialization operations (`materialize` and `materialize-incremental`), and get_historical_features are executed through a `ComputeEngine`.
66

7-
Custom batch materialization engines allow Feast users to extend Feast to customize the materialization process. Examples include:
7+
Custom batch compute engines allow Feast users to extend Feast to customize the materialization and get_historical_features process. Examples include:
88

99
* Setting up custom materialization-specific infrastructure during `feast apply` (e.g. setting up Spark clusters or Lambda Functions)
1010
* Launching custom batch ingestion (materialization) jobs (Spark, Beam, AWS Lambda)
1111
* Tearing down custom materialization-specific infrastructure during `feast teardown` (e.g. tearing down Spark clusters, or deleting Lambda Functions)
1212

13-
Feast comes with built-in materialization engines, e.g, `LocalMaterializationEngine`, and an experimental `LambdaMaterializationEngine`. However, users can develop their own materialization engines by creating a class that implements the contract in the [BatchMaterializationEngine class](https://github.com/feast-dev/feast/blob/6d7b38a39024b7301c499c20cf4e7aef6137c47c/sdk/python/feast/infra/materialization/batch\_materialization\_engine.py#L72).
13+
Feast comes with built-in materialization engines, e.g, `LocalComputeEngine`, and an experimental `LambdaComputeEngine`. However, users can develop their own compute engines by creating a class that implements the contract in the [ComputeEngine class](https://github.com/feast-dev/feast/blob/85514edbb181df083e6a0d24672c00f0624dcaa3/sdk/python/feast/infra/compute_engines/base.py#L19).
1414

1515
### Guide
1616

17-
The fastest way to add custom logic to Feast is to extend an existing materialization engine. The most generic engine is the `LocalMaterializationEngine` which contains no cloud-specific logic. The guide that follows will extend the `LocalProvider` with operations that print text to the console. It is up to you as a developer to add your custom code to the engine methods, but the guide below will provide the necessary scaffolding to get you started.
17+
The fastest way to add custom logic to Feast is to implement the ComputeEngine. The guide that follows will extend the `LocalProvider` with operations that print text to the console. It is up to you as a developer to add your custom code to the engine methods, but the guide below will provide the necessary scaffolding to get you started.
1818

1919
#### Step 1: Define an Engine class
2020

21-
The first step is to define a custom materialization engine class. We've created the `MyCustomEngine` below. This python file can be placed in your `feature_repo` directory if you're following the Quickstart guide.
21+
The first step is to define a custom compute engine class. We've created the `MyCustomEngine` below. This python file can be placed in your `feature_repo` directory if you're following the Quickstart guide.
2222

2323
```python
2424
from typing import List, Sequence, Union
@@ -27,14 +27,16 @@ from feast.entity import Entity
2727
from feast.feature_view import FeatureView
2828
from feast.batch_feature_view import BatchFeatureView
2929
from feast.stream_feature_view import StreamFeatureView
30-
from feast.infra.materialization.local_engine import LocalMaterializationJob, LocalMaterializationEngine
30+
from feast.infra.common.retrieval_task import HistoricalRetrievalTask
31+
from feast.infra.compute_engines.local.job import LocalMaterializationJob
32+
from feast.infra.compute_engines.base import ComputeEngine
3133
from feast.infra.common.materialization_job import MaterializationTask
32-
from feast.infra.offline_stores.offline_store import OfflineStore
34+
from feast.infra.offline_stores.offline_store import OfflineStore, RetrievalJob
3335
from feast.infra.online_stores.online_store import OnlineStore
3436
from feast.repo_config import RepoConfig
3537

3638

37-
class MyCustomEngine(LocalMaterializationEngine):
39+
class MyCustomEngine(ComputeEngine):
3840
def __init__(
3941
self,
4042
*,
@@ -80,9 +82,13 @@ class MyCustomEngine(LocalMaterializationEngine):
8082
)
8183
for task in tasks
8284
]
85+
86+
def get_historical_features(self, task: HistoricalRetrievalTask) -> RetrievalJob:
87+
raise NotImplementedError
8388
```
8489

85-
Notice how in the above engine we have only overwritten two of the methods on the `LocalMaterializatinEngine`, namely `update` and `materialize`. These two methods are convenient to replace if you are planning to launch custom batch jobs.
90+
Notice how in the above engine we have only overwritten two of the methods on the `LocalComputeEngine`, namely `update` and `materialize`. These two methods are convenient to replace if you are planning to launch custom batch jobs.
91+
If you want to use the compute to execute the get_historical_features method, you will need to implement the `get_historical_features` method as well.
8692

8793
#### Step 2: Configuring Feast to use the engine
8894

docs/how-to-guides/running-feast-in-production.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,8 @@ feature_vector = fs.get_online_features(
207207

208208
To deploy a Feast feature server on Kubernetes, you should use the included [feast-operator](../../infra/feast-operator).
209209

210+
{% embed url="https://www.youtube.com/playlist?list=PLPzVNzik7rsAN-amQLZckd0so3cIr7blX" %}
211+
210212
**Basic steps**
211213
1. Install [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
212214
2. Install the Operator

0 commit comments

Comments
 (0)