Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add an OOTB Chat uI to the Feature Server to support RAG demo #5106

Conversation

franciscojavierarceo
Copy link
Member

@franciscojavierarceo franciscojavierarceo commented Feb 27, 2025

What this PR does / why we need it:

This pull request introduces several enhancements to the Feast feature server, including the addition of a chat UI, WebSocket support, and improvements to the server's API documentation.

  1. MANIFEST.in:
    • Added a new line to include static files in the package.
  2. sdk/python/feast/feature_server.py:
    • Imported new modules and libraries (asyncio, os, importlib_resources, WebSocket, WebSocketDisconnect, StaticFiles).
    • Added new classes for chat functionality (ChatMessage, ChatRequest).
    • Extended get_app function to document its purpose and endpoints in detail.
    • Introduced new endpoints:
      - /chat: POST endpoint to process chat requests.
      - /chat: GET endpoint to serve the chat UI.
      - /ws/chat: WebSocket endpoint for real-time chat communication.
    • Created a ConnectionManager class to manage WebSocket connections and handle incoming messages.
  3. sdk/python/feast/ui_server.py:
    • Added a check to return a 503 status code if the registry is unavailable.
      4.sdk/python/feast/static/chat/index.html:
    • Added a new HTML file to provide a basic chat UI for the Feast feature server.
      - The UI includes an input box for user messages and a container for displaying chat messages.
      - Integrated WebSocket for real-time chat functionality.

Which issue(s) this PR fixes:

N/A

Misc

The chat looks like this and supports streaming output:

Screenshot 2025-02-27 at 9 09 18 PM

devin-ai-integration bot and others added 2 commits February 27, 2025 03:22
Co-Authored-By: Francisco Javier Arceo <arceofrancisco@gmail.com>
Co-Authored-By: Francisco Javier Arceo <arceofrancisco@gmail.com>
@franciscojavierarceo franciscojavierarceo changed the title Feature/chat application feat: Feature/chat application Feb 27, 2025
@franciscojavierarceo franciscojavierarceo marked this pull request as ready for review February 28, 2025 02:19
@franciscojavierarceo franciscojavierarceo requested a review from a team as a code owner February 28, 2025 02:19
@franciscojavierarceo franciscojavierarceo changed the title feat: Feature/chat application feat: Add an OOTB Chat uI to the Feature Server to support RAG demo Feb 28, 2025
Copy link
Collaborator

@shuchu shuchu left a comment

Choose a reason for hiding this comment

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

Lgtm

@franciscojavierarceo franciscojavierarceo merged commit 40ea7a9 into feast-dev:master Feb 28, 2025
38 checks passed
@dmartinol
Copy link
Contributor

What’s the idea behind this change? 🤔 is this a temporary endpoint or are you prototyping a future enhancement?

@franciscojavierarceo
Copy link
Member Author

Temporary endpoint fora future enhancement.

The goal will be to expose a lightweight chat capability so MLEs can see how to create their RAG applications. Not meant for production but meant for fast prototyping. Streamlit would require more packages. 😊

franciscojavierarceo pushed a commit that referenced this pull request Mar 10, 2025
# [0.47.0](v0.46.0...v0.47.0) (2025-03-10)

* feat!: Include PUBLIC_URL in defaultProjectListPromise URL in /ui ([2f0f7b3](2f0f7b3))

### Bug Fixes

* Add transformation_service_endpoit to support Go feature server. ([#5071](#5071)) ([5627d7c](5627d7c))
* Adding extra space on the VM to kind cluster to see if this solves the issue with memory not available with operator e2e tests. ([#5102](#5102)) ([e6e928c](e6e928c))
* Allow unencrypted Snowflake key ([#5097](#5097)) ([87a7c23](87a7c23))
* Cant add different type of list types ([#5118](#5118)) ([bebd7be](bebd7be))
* Fixing transformations on writes ([#5127](#5127)) ([95ac34a](95ac34a))
* Identify s3/remote uri path correctly ([#5076](#5076)) ([93becff](93becff))
* Increase available action VM storage and reduce dev feature-server image size ([#5112](#5112)) ([75f5a90](75f5a90))
* Move Feast to pyproject.toml instead of setup.py ([#5067](#5067)) ([4231274](4231274))
* Skip refresh if already in progress or if lock is already held ([#5068](#5068)) ([f3a24de](f3a24de))

### Features

* Add an OOTB Chat uI to the Feature Server to support RAG demo ([#5106](#5106)) ([40ea7a9](40ea7a9))
* Add Couchbase Columnar as an Offline Store ([#5025](#5025)) ([4373cbf](4373cbf))
* Add Feast Operator RBAC example with Kubernetes Authentication … ([#5077](#5077)) ([2179fbe](2179fbe))
* Added docling and pytorch as add on ([#5089](#5089)) ([135342b](135342b))
* Feast Operator example with Postgres in TLS mode. ([#5028](#5028)) ([2c46f6a](2c46f6a))
* Operator - Add feastProjectDir section to CR with git & init options ([#5079](#5079)) ([d64f01e](d64f01e))
* Override the udf name when provided as input to an on demand transformation ([#5094](#5094)) ([8a714bb](8a714bb))
* Set value_type of entity directly in from_proto ([#5092](#5092)) ([90e7498](90e7498))
* Updating retrieve online documents v2 to work for other fields for sq… ([#5082](#5082)) ([fc121c3](fc121c3))

### BREAKING CHANGES

* The PUBLIC_URL environment variable is now taken into account by default
when fetching the projects list. This is a breaking change only if all
these points apply:

1. You're using Feast UI as a module

2. You're serving the UI files from a non-root path via the PUBLIC_URL
   environment variable

3. You're serving the project list from the root path

4. You're not passing the `feastUIConfigs.projectListPromise` prop to
   the FeastUI component

In this case, you need to explicitly fetch the project list from the
root path via the `feastUIConfigs.projectListPromise` prop:

```diff
 const root = createRoot(document.getElementById("root")!);
 root.render(
   <React.StrictMode>
-    <FeastUI />
+    <FeastUI
+      feastUIConfigs={{
+        projectListPromise: fetch("/projects-list.json", {
+            headers: {
+              "Content-Type": "application/json",
+            },
+          }).then((res) => res.json())
+      }}
+    />
   </React.StrictMode>
 );
```

Signed-off-by: Harri Lehtola <peruukki@hotmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants