-
Notifications
You must be signed in to change notification settings - Fork 229
Feature Store Context and API setup #4509
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
Feature Store Context and API setup #4509
Conversation
* Backend proxy setup * Routes * Context * Hooks * API * Unit tests
WalkthroughThis change implements a new architecture for Feature Store project and entity management, introducing new backend and frontend APIs, React hooks, and context providers. It refactors the frontend to use API-driven project/entity data, removes legacy project context, and adds comprehensive tests for the new hooks. Several new components and utility modules are introduced, while obsolete files are deleted or refactored. Changes
Sequence Diagram(s)sequenceDiagram
participant UI as User Interface
participant FSContext as FeatureStoreContextProvider
participant Hooks as FeatureStore Hooks
participant API as FeatureStore API (custom.ts)
participant Backend as Backend Proxy Service
UI->>FSContext: Render with children
FSContext->>Hooks: Provide API state, current project
UI->>Hooks: useFeatureStoreProjects/useFeatureStoreEntities
Hooks->>API: listFeatureStoreProject/getEntities
API->>Backend: Proxy API request (GET /projects or /entities)
Backend-->>API: Return project/entity list
API-->>Hooks: Return data or error
Hooks-->>UI: Provide loading, data, or error state
Estimated code review effort4 (~90 minutes) Possibly related PRs
Suggested labels
Suggested reviewers
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 8
🔭 Outside diff range comments (2)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreEnitites.tsx (1)
1-39
: Fix filename typo: "Enitites" should be "Entities".The filename contains a typo -
useFeatureStoreEnitites.tsx
should beuseFeatureStoreEntities.tsx
. Please rename the file to correct this spelling error.frontend/src/pages/featureStore/FeatureStoreCoreLoader.tsx (1)
66-68
: Update user-facing message for consistencyThe user title and description still reference "Feature Store project" but should be updated to match the new "service" terminology.
- const userTitle = 'Start by requesting a Feature Store project'; + const userTitle = 'Start by requesting access to the Feature Store service'; const userDescription = - 'Feature Store projects allow you and your team to organize and collaborate on resources within separate namespaces. To request a project, contact your administrator.'; + 'The Feature Store service allows you and your team to organize and collaborate on resources within separate namespaces. To request access, contact your administrator.';
🧹 Nitpick comments (15)
.env.development (1)
22-25
: Address dotenv-linter warnings & keep POSIX newline
dotenv-linter
flags the new block as unordered and missing a trailing newline.
While ordering is purely cosmetic, many tooling chains fail CI on lint warnings or missing EOF newline.MODEL_REGISTRY_NAMESPACE=odh-model-registries FEAST_REGISTRY_SERVICE_HOST=localhost FEAST_REGISTRY_SERVICE_PORT=8443 +
Adds the blank line and silences the
EndingBlankLine
warning.
Re-ordering (namespace before host) is optional but recommended for a cleanmake lint
.frontend/src/pages/featureStore/screens/entities/FeatureStoreEntitiesListView.tsx (2)
9-9
: Remove console.log statement.Console.log statements should be removed from production code. Consider using a proper logging solution or remove this debugging statement.
- console.log(entities);
4-11
: Component appears to be a placeholder implementation.While the component structure and TypeScript typing are correct, this appears to be a stub implementation that doesn't actually display the entities data. Consider implementing the actual list view functionality or add a TODO comment if this is intentionally incomplete.
backend/src/routes/api/service/featurestore/index.ts (1)
21-22
: Improve type safety in the readiness check function.The readiness check uses
any
type for the condition parameter, which reduces type safety. Consider defining a proper type for the condition object.- (resource) => - !!resource.status?.conditions?.find((c: any) => c.type === 'Registry' && c.status === 'True'), + (resource) => + !!resource.status?.conditions?.find((c: { type: string; status: string }) => c.type === 'Registry' && c.status === 'True'),frontend/src/pages/featureStore/apiHooks/useFeatureStoreObject.tsx (1)
7-14
: Consider adding enum validation for better type safety.The function uses type assertion without validating that the extracted string is actually a valid
FeatureStoreObject
enum value. Consider adding validation to prevent runtime issues.export function getFeatureStoreObjectFromPath(pathname: string): FeatureStoreObject { const featureStoreObject = pathname.split('/')[2]; if (featureStoreObject) { - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - return featureStoreObject as FeatureStoreObject; + if (Object.values(FeatureStoreObject).includes(featureStoreObject as FeatureStoreObject)) { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + return featureStoreObject as FeatureStoreObject; + } } return FeatureStoreObject.ENTITIES; // TODO: change default to overview page once we have it }frontend/src/api/featureStore/errorUtils.ts (1)
7-26
: Consider adding JSDoc documentation for the main error handler.The
handleFeatureStoreFailures
function is a key utility that would benefit from documentation explaining its purpose, parameters, and error handling behavior.+/** + * Handles feature store API failures by normalizing error responses + * @param promise - The API promise to wrap with error handling + * @returns Promise that resolves with the result or throws normalized errors + */ export const handleFeatureStoreFailures = <T>(promise: Promise<T>): Promise<T> =>frontend/src/pages/featureStore/apiHooks/useFeatureStoreAPIState.tsx (1)
9-21
: Consider adding JSDoc documentation for the hook.This hook would benefit from documentation explaining its purpose, parameters, and return values, especially since it's a key part of the feature store API integration.
+/** + * Hook for managing Feature Store API state + * @param hostPath - The host path for API requests, or null if not available + * @returns Tuple containing the API state and refresh function + */ const useFeatureStoreAPIState = ( hostPath: string | null, ): [apiState: FeatureStoreAPIState, refreshAPIState: () => void] => {frontend/src/pages/featureStore/apiHooks/useFeatureStoreCR.tsx (1)
18-31
: Consider removing redundant filtering.The implementation filters Feature Store CRs twice:
- Via
labelSelector
query parameter (line 23)- Manual filtering of the results (lines 26-28)
Since the label selector should already filter the results on the server side, the manual filtering appears redundant.
Consider simplifying to:
const listFeatureStoreCR = async (): Promise<FeatureStoreKind | null> => { const labelSelector = `${FEATURE_STORE_UI_LABEL_KEY}=${FEATURE_STORE_UI_LABEL_VALUE}`; const featureStoreCRs = await k8sListResource<FeatureStoreKind>({ model: FeatureStoreModel, queryOptions: { queryParams: { labelSelector } }, }); - const filteredFeatureStoreCR = featureStoreCRs.items.filter( - (cr) => cr.metadata.labels?.[FEATURE_STORE_UI_LABEL_KEY] === FEATURE_STORE_UI_LABEL_VALUE, - ); - return filteredFeatureStoreCR[0] || null; + return featureStoreCRs.items[0] || null; };frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreProjects.test.tsx (1)
48-229
: Consider adding a test for abort signal behaviorThe test suite comprehensively covers various scenarios, but it would be beneficial to add a test case that verifies the abort signal behavior when the component unmounts before the API call completes.
Add a test case to verify abort signal functionality:
+ it('should abort the request when component unmounts', async () => { + let capturedSignal: AbortSignal | undefined; + + useFeatureStoreAPIMock.mockReturnValue({ + api: { + listFeatureStoreProject: jest.fn().mockImplementation((opts) => { + capturedSignal = opts.signal; + return new Promise(() => {}); // Never resolves + }), + }, + apiAvailable: true, + } as unknown as ReturnType<typeof useFeatureStoreAPI>); + + const renderResult = testHook(useFeatureStoreProjects)(); + + // Wait a tick for the effect to run + await act(async () => { + await Promise.resolve(); + }); + + expect(capturedSignal).toBeDefined(); + expect(capturedSignal?.aborted).toBe(false); + + // Unmount the hook + renderResult.unmount(); + + expect(capturedSignal?.aborted).toBe(true); + });frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreCR.spec.tsx (1)
1-1
: File naming inconsistency detectedThis test file uses
.spec.tsx
extension whileuseFeatureStoreProjects.test.tsx
uses.test.tsx
. Consider standardizing the test file naming convention across the codebase.frontend/src/pages/featureStore/FeatureStoreContext.tsx (3)
22-28
: Consider removing the TypeScript assertion in default context values.The type assertion on line 24 could be avoided by providing a more type-safe default value or restructuring the default state.
export const FeatureStoreContext = React.createContext<FeatureStoreContextType>({ - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - apiState: { apiAvailable: false, api: null as unknown as FeatureStoreAPIs }, + apiState: { apiAvailable: false, api: {} as FeatureStoreAPIs }, refreshAPIState: () => undefined, currentProject: undefined, setCurrentProject: () => undefined, });Alternatively, consider defining a proper default API object that matches the
FeatureStoreAPIs
interface.
44-46
: Potential unnecessary re-renders from effect dependency.The effect synchronizes
currentProject
with the URL parameter, but since both are derived from the same source, this might cause unnecessary re-renders.Consider whether this effect is necessary. If
fsProjectName
changes trigger component re-renders anyway, you might be able to usefsProjectName
directly ascurrentProject
or implement a more efficient synchronization:- const [currentProject, setCurrentProject] = React.useState<string | undefined>(fsProjectName); - - React.useEffect(() => { - setCurrentProject(fsProjectName); - }, [fsProjectName]); + const [currentProject, setCurrentProject] = React.useState<string | undefined>(); + + React.useEffect(() => { + if (fsProjectName !== currentProject) { + setCurrentProject(fsProjectName); + } + }, [fsProjectName, currentProject]);
66-73
: Consider renaming for clarity and consistency.The hook returns
refreshAllAPI
but the context property is namedrefreshAPIState
. Consider using consistent naming throughout the interface.export const useFeatureStoreAPI = (): UseFeatureStoreAPI => { - const { apiState, refreshAPIState: refreshAllAPI } = React.useContext(FeatureStoreContext); + const { apiState, refreshAPIState } = React.useContext(FeatureStoreContext); return { - refreshAllAPI, + refreshAPIState, ...apiState, }; };Or update the type definition to match:
type UseFeatureStoreAPI = FeatureStoreAPIState & { - refreshAllAPI: () => void; + refreshAPIState: () => void; };frontend/src/pages/featureStore/types.ts (2)
3-10
: Consider camelCase naming for consistency with TypeScript conventions.The pagination type uses snake_case naming (
total_count
,total_pages
,has_next
,has_previous
) which is inconsistent with typical TypeScript/JavaScript camelCase conventions used elsewhere in the codebase. If this naming comes directly from the backend API response, this is acceptable for maintaining API contract alignment.
185-186
: Consider consistent naming convention.The functional changes look good, but consider naming consistency:
listFeatureStoreProject
vsgetEntities
. Both methods perform similar list/get operations but use different verbs.Consider standardizing to either:
- listFeatureStoreProject: GetProjects; - getEntities: GetEntities; + getProjects: GetProjects; + getEntities: GetEntities;Or:
- listFeatureStoreProject: GetProjects; - getEntities: GetEntities; + listProjects: GetProjects; + listEntities: GetEntities;
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (34)
.env.development
(1 hunks)backend/src/routes/api/service/featurestore/index.ts
(1 hunks)backend/src/types.ts
(1 hunks)frontend/src/__mocks__/mockDataSources.ts
(1 hunks)frontend/src/__mocks__/mockEntities.ts
(2 hunks)frontend/src/__mocks__/mockFeatureServices.ts
(1 hunks)frontend/src/__mocks__/mockFeatureStoreProject.ts
(1 hunks)frontend/src/__mocks__/mockFeatureViews.ts
(1 hunks)frontend/src/api/featureStore/custom.ts
(1 hunks)frontend/src/api/featureStore/errorUtils.ts
(1 hunks)frontend/src/concepts/areas/const.ts
(1 hunks)frontend/src/concepts/featureStore/context/FeatureStoreProjectContext.tsx
(0 hunks)frontend/src/concepts/featureStore/useFeatureStoreEnabled.ts
(0 hunks)frontend/src/k8sTypes.ts
(1 hunks)frontend/src/pages/featureStore/FeatureStore.tsx
(2 hunks)frontend/src/pages/featureStore/FeatureStoreContext.tsx
(1 hunks)frontend/src/pages/featureStore/FeatureStoreCoreLoader.tsx
(4 hunks)frontend/src/pages/featureStore/FeatureStoreRoutes.tsx
(1 hunks)frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreCR.spec.tsx
(1 hunks)frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreEntities.spec.tsx
(1 hunks)frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreObject.spec.tsx
(1 hunks)frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreProjects.test.tsx
(1 hunks)frontend/src/pages/featureStore/apiHooks/useFeatureStoreAPIState.tsx
(1 hunks)frontend/src/pages/featureStore/apiHooks/useFeatureStoreCR.tsx
(1 hunks)frontend/src/pages/featureStore/apiHooks/useFeatureStoreEnitites.tsx
(1 hunks)frontend/src/pages/featureStore/apiHooks/useFeatureStoreObject.tsx
(1 hunks)frontend/src/pages/featureStore/apiHooks/useFeatureStoreProjects.tsx
(1 hunks)frontend/src/pages/featureStore/const.ts
(1 hunks)frontend/src/pages/featureStore/screens/FeatureStoreProjectSelectorNavigator.tsx
(0 hunks)frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelector.tsx
(4 hunks)frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelectorNavigator.tsx
(1 hunks)frontend/src/pages/featureStore/screens/entities/FeatureStoreEntities.tsx
(1 hunks)frontend/src/pages/featureStore/screens/entities/FeatureStoreEntitiesListView.tsx
(1 hunks)frontend/src/pages/featureStore/types.ts
(4 hunks)
💤 Files with no reviewable changes (3)
- frontend/src/concepts/featureStore/useFeatureStoreEnabled.ts
- frontend/src/pages/featureStore/screens/FeatureStoreProjectSelectorNavigator.tsx
- frontend/src/concepts/featureStore/context/FeatureStoreProjectContext.tsx
🧰 Additional context used
🧠 Learnings (20)
📓 Common learnings
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/__tests__/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.
frontend/src/__mocks__/mockDataSources.ts (4)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.
Learnt from: christianvogt
PR: #4381
File: frontend/src/tests/cypress/tsconfig.json:9-9
Timestamp: 2025-06-19T20:38:32.485Z
Learning: In the ODH Dashboard project, the frontend/src/__tests__/cypress/tsconfig.json
file intentionally has an empty files
array to disable type checking for Cypress test files. This is part of the monorepo structure where Cypress was separated into its own package but type checking is deliberately disabled for it.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.
frontend/src/__mocks__/mockFeatureServices.ts (6)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/utils/**/*.ts : All API calls must be in utility functions in utils/; don't make inline API requests in tests.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.
frontend/src/__mocks__/mockFeatureStoreProject.ts (6)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.
Learnt from: christianvogt
PR: #4381
File: frontend/src/tests/cypress/tsconfig.json:9-9
Timestamp: 2025-06-19T20:38:32.485Z
Learning: In the ODH Dashboard project, the frontend/src/__tests__/cypress/tsconfig.json
file intentionally has an empty files
array to disable type checking for Cypress test files. This is part of the monorepo structure where Cypress was separated into its own package but type checking is deliberately disabled for it.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.
.env.development (1)
Learnt from: ConorOM1
PR: #4423
File: frontend/src/tests/cypress/cypress/fixtures/resources/yaml/model_registry.yaml:12-12
Timestamp: 2025-06-27T11:00:06.871Z
Learning: For ModelRegistry resources in frontend/src/__tests__/cypress/cypress/fixtures/resources/yaml/model_registry.yaml
, the oauthProxy: {}
empty configuration is sufficient to enable the OAuth proxy. The ModelRegistry operator enables the proxy by default when this key is present, without requiring explicit enabled: true
flags or image specifications.
frontend/src/__mocks__/mockFeatureViews.ts (8)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use .navigate() methods in page objects for navigation instead of cy.visit() in tests.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : MANDATORY: Use page objects for ALL UI interactions; NEVER use cy.findByTestId(), cy.findByRole(), or cy.get() directly in test files.
Learnt from: christianvogt
PR: #4381
File: frontend/src/tests/cypress/tsconfig.json:9-9
Timestamp: 2025-06-19T20:38:32.485Z
Learning: In the ODH Dashboard project, the frontend/src/__tests__/cypress/tsconfig.json
file intentionally has an empty files
array to disable type checking for Cypress test files. This is part of the monorepo structure where Cypress was separated into its own package but type checking is deliberately disabled for it.
frontend/src/pages/featureStore/FeatureStore.tsx (3)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use .navigate() methods in page objects for navigation instead of cy.visit() in tests.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.
frontend/src/pages/featureStore/apiHooks/useFeatureStoreObject.tsx (1)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.
backend/src/routes/api/service/featurestore/index.ts (1)
Learnt from: ConorOM1
PR: #4423
File: frontend/src/tests/cypress/cypress/fixtures/resources/yaml/model_registry.yaml:12-12
Timestamp: 2025-06-27T11:00:06.871Z
Learning: For ModelRegistry resources in frontend/src/__tests__/cypress/cypress/fixtures/resources/yaml/model_registry.yaml
, the oauthProxy: {}
empty configuration is sufficient to enable the OAuth proxy. The ModelRegistry operator enables the proxy by default when this key is present, without requiring explicit enabled: true
flags or image specifications.
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreObject.spec.tsx (10)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : MANDATORY: Use page objects for ALL UI interactions; NEVER use cy.findByTestId(), cy.findByRole(), or cy.get() directly in test files.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/fixtures/e2e/*.yaml : Store test-specific data in YAML fixture files with descriptive names like testFeatureName.yaml.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use .navigate() methods in page objects for navigation instead of cy.visit() in tests.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/pages/**/*.ts : All actions (e.g., .click(), .type()) must be performed in the test itself, not inside the page object method.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/pages/**/*.ts : All selectors must be encapsulated in page object methods; page objects should return Cypress chainables or other page objects.
frontend/src/__mocks__/mockEntities.ts (2)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.
frontend/src/pages/featureStore/const.ts (2)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.
frontend/src/pages/featureStore/FeatureStoreRoutes.tsx (1)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.
frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelectorNavigator.tsx (1)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use .navigate() methods in page objects for navigation instead of cy.visit() in tests.
frontend/src/api/featureStore/errorUtils.ts (1)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/utils/**/*.ts : All API calls must be in utility functions in utils/; don't make inline API requests in tests.
frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelector.tsx (3)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/pages/**/*.ts : All selectors must be encapsulated in page object methods; page objects should return Cypress chainables or other page objects.
frontend/src/pages/featureStore/FeatureStoreCoreLoader.tsx (2)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/pages/**/*.ts : All selectors must be encapsulated in page object methods; page objects should return Cypress chainables or other page objects.
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreEntities.spec.tsx (11)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/fixtures/e2e/*.yaml : Store test-specific data in YAML fixture files with descriptive names like testFeatureName.yaml.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Delete test projects, PVCs, and other resources after tests using after() hooks.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/utils/**/*.ts : All API calls must be in utility functions in utils/; don't make inline API requests in tests.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : MANDATORY: Use page objects for ALL UI interactions; NEVER use cy.findByTestId(), cy.findByRole(), or cy.get() directly in test files.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/fixtures/e2e/test-variables.yml.example : Use test-variables.yml.example as template for what gets checked in.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Tags should be specified in the test file, in the it() block options, e.g. it('...', { tags: ['@tag'] }, ...).
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreCR.spec.tsx (10)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/fixtures/e2e/*.yaml : Store test-specific data in YAML fixture files with descriptive names like testFeatureName.yaml.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Delete test projects, PVCs, and other resources after tests using after() hooks.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Tags should be specified in the test file, in the it() block options, e.g. it('...', { tags: ['@tag'] }, ...).
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : MANDATORY: Use page objects for ALL UI interactions; NEVER use cy.findByTestId(), cy.findByRole(), or cy.get() directly in test files.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/utils/**/*.ts : All API calls must be in utility functions in utils/; don't make inline API requests in tests.
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreProjects.test.tsx (11)
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Delete test projects, PVCs, and other resources after tests using after() hooks.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/utils/**/*.ts : All API calls must be in utility functions in utils/; don't make inline API requests in tests.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/fixtures/e2e/*.yaml : Store test-specific data in YAML fixture files with descriptive names like testFeatureName.yaml.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : MANDATORY: Use page objects for ALL UI interactions; NEVER use cy.findByTestId(), cy.findByRole(), or cy.get() directly in test files.
Learnt from: christianvogt
PR: #4381
File: frontend/src/tests/cypress/tsconfig.json:9-9
Timestamp: 2025-06-19T20:38:32.485Z
Learning: In the ODH Dashboard project, the frontend/src/__tests__/cypress/tsconfig.json
file intentionally has an empty files
array to disable type checking for Cypress test files. This is part of the monorepo structure where Cypress was separated into its own package but type checking is deliberately disabled for it.
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Tags should be specified in the test file, in the it() block options, e.g. it('...', { tags: ['@tag'] }, ...).
🧬 Code Graph Analysis (16)
frontend/src/pages/featureStore/FeatureStore.tsx (1)
frontend/src/pages/featureStore/FeatureStoreRoutes.tsx (1)
featureStoreRoute
(8-12)
frontend/src/pages/featureStore/screens/entities/FeatureStoreEntitiesListView.tsx (1)
frontend/src/pages/featureStore/types.ts (1)
EntityList
(47-50)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreEnitites.tsx (3)
frontend/src/utilities/useFetch.ts (1)
FetchStateObject
(37-43)frontend/src/pages/featureStore/types.ts (1)
EntityList
(47-50)frontend/src/pages/featureStore/FeatureStoreContext.tsx (1)
useFeatureStoreAPI
(66-73)
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreObject.spec.tsx (2)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreObject.tsx (2)
getFeatureStoreObjectFromPath
(7-14)useFeatureStoreObject
(16-19)frontend/src/__tests__/unit/testUtils/hooks.ts (1)
testHook
(112-133)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreCR.tsx (3)
frontend/src/k8sTypes.ts (1)
FeatureStoreKind
(1647-1693)frontend/src/pages/featureStore/const.ts (2)
FEATURE_STORE_UI_LABEL_KEY
(2-2)FEATURE_STORE_UI_LABEL_VALUE
(3-3)frontend/src/api/models/odh.ts (1)
FeatureStoreModel
(66-71)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreProjects.tsx (3)
frontend/src/utilities/useFetch.ts (1)
FetchStateObject
(37-43)frontend/src/pages/featureStore/types.ts (1)
ProjectList
(31-34)frontend/src/pages/featureStore/FeatureStoreContext.tsx (1)
useFeatureStoreAPI
(66-73)
frontend/src/__mocks__/mockEntities.ts (1)
frontend/src/pages/featureStore/types.ts (1)
EntityList
(47-50)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreAPIState.tsx (2)
frontend/src/pages/featureStore/types.ts (1)
FeatureStoreAPIs
(184-187)frontend/src/api/featureStore/custom.ts (2)
listFeatureStoreProject
(7-12)getEntities
(14-23)
backend/src/types.ts (1)
frontend/src/k8sTypes.ts (2)
FeatureStoreKind
(1647-1693)K8sCondition
(134-142)
frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelectorNavigator.tsx (2)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreObject.tsx (1)
useFeatureStoreObject
(16-19)frontend/src/pages/featureStore/FeatureStoreContext.tsx (1)
useFeatureStoreProject
(75-85)
frontend/src/api/featureStore/custom.ts (5)
frontend/src/k8sTypes.ts (1)
K8sAPIOptions
(291-295)frontend/src/pages/featureStore/types.ts (2)
ProjectList
(31-34)EntityList
(47-50)frontend/src/api/featureStore/errorUtils.ts (1)
handleFeatureStoreFailures
(7-26)frontend/src/api/proxyUtils.ts (1)
proxyGET
(70-79)frontend/src/pages/featureStore/const.ts (1)
FEATURE_STORE_API_VERSION
(1-1)
frontend/src/api/featureStore/errorUtils.ts (1)
frontend/src/concepts/modelRegistry/types.ts (1)
ModelRegistryError
(150-153)
frontend/src/pages/featureStore/FeatureStoreCoreLoader.tsx (5)
frontend/src/concepts/userSSAR/useAccessAllowed.ts (1)
useAccessAllowed
(15-35)frontend/src/api/models/odh.ts (1)
FeatureStoreModel
(66-71)frontend/src/pages/featureStore/apiHooks/useFeatureStoreCR.tsx (1)
useFeatureStoreCR
(33-52)frontend/src/pages/featureStore/FeatureStoreContext.tsx (1)
FeatureStoreContextProvider
(30-60)frontend/src/pages/featureStore/FeatureStoreRoutes.tsx (1)
featureStoreRoute
(8-12)
frontend/src/pages/featureStore/FeatureStoreContext.tsx (4)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreAPIState.tsx (1)
FeatureStoreAPIState
(7-7)frontend/src/pages/featureStore/types.ts (1)
FeatureStoreAPIs
(184-187)frontend/src/concepts/areas/index.ts (2)
conditionalArea
(10-10)SupportedArea
(11-11)frontend/src/pages/featureStore/apiHooks/useFeatureStoreCR.tsx (1)
useFeatureStoreCR
(33-52)
frontend/src/pages/featureStore/types.ts (1)
frontend/src/k8sTypes.ts (1)
K8sAPIOptions
(291-295)
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreProjects.test.tsx (4)
frontend/src/pages/featureStore/FeatureStoreContext.tsx (1)
useFeatureStoreAPI
(66-73)frontend/src/pages/featureStore/types.ts (1)
ProjectList
(31-34)frontend/src/__mocks__/mockFeatureStoreProject.ts (1)
mockFeatureStoreProject
(3-14)frontend/src/__tests__/unit/testUtils/hooks.ts (2)
testHook
(112-133)standardUseFetchStateObject
(172-185)
🪛 dotenv-linter (3.3.0)
.env.development
[warning] 22-22: [UnorderedKey] The MODEL_REGISTRY_NAMESPACE key should go before the MODEL_REGISTRY_SERVICE_HOST key
[warning] 25-25: [EndingBlankLine] No blank line at the end of the file
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: Cypress-Setup
- GitHub Check: Lint
🔇 Additional comments (34)
frontend/src/pages/featureStore/const.ts (1)
1-9
: LGTM – centralised constants improve cohesionThe constants & enum are self-contained, immutable, and typed – good move.
No issues spotted.frontend/src/__mocks__/mockFeatureServices.ts (1)
2-2
: LGTM! Clean import path refactor.The import path update aligns with the centralization of feature store types to the
pages/featureStore
directory, which is consistent with the broader architecture changes in this PR.frontend/src/concepts/areas/const.ts (1)
223-223
: Temporary disabling of Feast operator requirement acknowledged.The TODO comment clearly indicates this is intentional until the latest Feast operator is released. This allows Feature Store development to proceed without the operator dependency.
frontend/src/k8sTypes.ts (1)
631-636
: LGTM! Standard Kubernetes Route specification extension.The optional
to
field addition follows standard Kubernetes/OpenShift Route specifications and supports traffic routing features without breaking existing implementations.frontend/src/pages/featureStore/FeatureStore.tsx (2)
4-4
: LGTM! Component import path correctly updated.The import path reflects the component's relocation to the
components
subdirectory, improving code organization.
23-25
: LGTM! Function signature updated to match new routing architecture.The
getRedirectPath
prop now correctly accepts two parameters (featureStoreObject
,featureStoreProject
) matching the updatedfeatureStoreRoute
function signature fromFeatureStoreRoutes.tsx
. This aligns with the new routing structure introduced in this PR.backend/src/routes/api/service/featurestore/index.ts (1)
4-23
: Well-structured proxy service implementation.The service configuration is well-designed with proper API group specification, local development support via environment variables, and appropriate readiness checking logic for the FeatureStore registry service.
frontend/src/pages/featureStore/apiHooks/useFeatureStoreProjects.tsx (1)
7-36
: Excellent hook implementation following React best practices.The hook is well-structured with proper error handling, sensible default state, and appropriate use of the useFetch pattern. The API availability check and memoized callback ensure reliable data fetching behavior.
frontend/src/__mocks__/mockEntities.ts (2)
1-2
: Import path update aligns with refactor.The import path change from
concepts/featureStore
topages/featureStore
and type updates toEntityList
are consistent with the broader architectural refactor.
28-38
: Mock data structure correctly updated for EntityList type.The function signature and return type updates properly align with the new
EntityList
structure, and the pagination mock values are reasonable and consistent.frontend/src/pages/featureStore/apiHooks/useFeatureStoreEnitites.tsx (1)
7-36
: Well-implemented hook following established patterns.The hook implementation is excellent, properly handling the optional project parameter, API availability checks, and providing sensible defaults. The logic is consistent with other feature store hooks.
frontend/src/pages/featureStore/apiHooks/useFeatureStoreObject.tsx (1)
16-19
: Clean and simple hook implementation.The hook provides a straightforward interface for accessing the current feature store object from the URL, properly leveraging React Router's useLocation hook.
frontend/src/pages/featureStore/apiHooks/useFeatureStoreAPIState.tsx (1)
12-18
: LGTM - Clean hook implementation.The useCallback with empty dependencies is appropriate here since
listFeatureStoreProject
andgetEntities
are imported functions that don't change between renders. The memoization properly prevents unnecessary API object recreations.frontend/src/pages/featureStore/screens/entities/FeatureStoreEntities.tsx (1)
17-58
: LGTM - Well-structured component with proper state handling.The component follows good practices:
- Proper separation of concerns with hooks for data fetching
- Comprehensive state handling (loading, error, empty)
- Clear component composition with ApplicationsPage wrapper
- Appropriate integration with project selector navigator
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreObject.spec.tsx (2)
15-33
: Excellent test coverage for path extraction function.The tests comprehensively cover the
getFeatureStoreObjectFromPath
function with multiple scenarios including normal paths, default fallbacks, and deep nested paths. The test cases are well-named and verify the expected behavior.
35-119
: Thorough testing of hook behavior and stability.The hook tests cover all important scenarios:
- Basic functionality with different pathnames
- Default behavior when no feature store object is present
- Hook updates when location changes
- Hook stability when location remains the same
- Proper mock verification
The use of
testHook
utility and proper mock management demonstrates good testing practices.backend/src/types.ts (1)
1310-1354
: LGTM - Comprehensive FeatureStoreKind type definition.The type definition is well-structured and follows Kubernetes CRD patterns appropriately:
- Properly extends
K8sResourceCommon
for consistency with other K8s resources- Required and optional fields are correctly marked
- Comprehensive spec and status fields cover the expected functionality
- Uses existing types like
K8sCondition
for consistency- The use of
Record<string, any>
for services is appropriate for flexible configurationThis type definition provides a solid foundation for the backend Feature Store API integration.
frontend/src/pages/featureStore/FeatureStoreRoutes.tsx (2)
8-12
: LGTM - Clean route function implementation.The updated
featureStoreRoute
function properly handles optional project parameters with clean conditional path construction.
15-21
: Route structure looks well organized.The simplified routing structure with direct index and entities routes is cleaner than the previous nested approach. The use of
FeatureStoreCoreLoader
as the parent route element provides good separation of concerns.frontend/src/pages/featureStore/apiHooks/useFeatureStoreCR.tsx (1)
33-52
: Hook implementation follows best practices.The hook properly uses
useCallback
to memoize the fetch function anduseFetch
with appropriate initial state configuration.frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelectorNavigator.tsx (2)
8-16
: Component structure is well-designed.The component properly separates concerns by accepting a
getRedirectPath
function as a prop and using appropriate hooks for navigation and state management.
19-27
: Empty-string fallback aligns with component logicThe
FeatureStoreProjectSelector
explicitly checks forfeatureStoreProject === ''
(line 48), so usingcurrentProject ?? ''
ensures the selector’s “no project” state works as intended. No changes needed here.frontend/src/api/featureStore/custom.ts (1)
7-12
: API function structure follows good patterns.The higher-order function approach with partial application of
hostPath
and proper error handling integration is well-designed.frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelector.tsx (2)
19-31
: Well-executed refactoring to new data structure.The component correctly adapts to the new
ProjectList
type by accessing theprojects
array property throughout the implementation while maintaining existing functionality.
10-11
: Updated callback signature handled correctly.The component properly uses the new
onSelection
callback signature, passing thefeatureStoreObject
parameter in both "All projects" (line 50) and specific project selection (line 63) scenarios.Also applies to: 50-50, 63-63
frontend/src/pages/featureStore/FeatureStoreContext.tsx (5)
1-9
: Clean import organization and proper TypeScript extensions.The imports are well-organized and use the proper file extensions for TypeScript modules. The hash-tilde import path syntax is consistent with the project's module resolution setup.
11-16
: Well-defined context type interface.The
FeatureStoreContextType
interface clearly defines all the context properties with appropriate types, providing good TypeScript support for consumers.
35-37
: Robust hostPath construction with proper null handling.The conditional logic properly handles the case when
featureStoreCR
is null, ensuring thehostPath
is appropriately set for the API state hook.
75-85
: Clean and focused project management hook.The
useFeatureStoreProject
hook provides a clean interface for project state management, following React patterns well.
30-33
: conditionalArea wrapper verifiedThe
conditionalArea
HOC infrontend/src/concepts/areas/AreaComponent.tsx
accepts aSupportedArea
and an optionalisFullPage
flag, then correctly wraps the passed component in<AreaComponent area={area} isFullPage={isFullPage}>
. Your usage inFeatureStoreContextProvider
aligns with this signature—no changes required.frontend/src/pages/featureStore/types.ts (4)
31-34
: LGTM!Clean wrapper type that properly combines the existing project data structure with pagination metadata.
47-50
: LGTM!Consistent with the ProjectList pattern, properly extending the existing EntityList to include pagination support.
180-180
: LGTM!Clean API contract with proper typing and async support. The name is more concise while maintaining clarity.
182-182
: LGTM!Well-designed function type that allows optional project-based filtering while maintaining consistency with the GetProjects pattern.
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreEntities.spec.tsx
Show resolved
Hide resolved
frontend/src/pages/featureStore/screens/entities/FeatureStoreEntities.tsx
Show resolved
Hide resolved
a7174d3
to
ee9fb2d
Compare
7cc353d
to
16b5562
Compare
/lgtm |
/lgtm |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/lgtm but there is stray console.log
that will be removed in an upcoming PR - this is blocking all the other stories in the epic - so merging this
}: { | ||
entities: EntityList; | ||
}): React.ReactElement => { | ||
console.log(entities); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need this console.log
?
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: manaswinidas The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
2b24c01
into
opendatahub-io:main
* Feature Store Context and API setup: * Backend proxy setup * Routes * Context * Hooks * API * Unit tests * remove title icon * import updates and few changes * adding unit tests * PR review updates * Invalid project selector * adding prefix in proxy
* add feature flag (#4431) * Add model metrics for KServe refactor (#4346) * added lmeval improvements (#4438) * serving runtime version status label and tests (#4398) * Rhoaieng 26502 (#4440) * Enable pipelines tests affected by RHOAIENG-24702 * enable test affected by RHOAIENG-27515 * Lint fixes * Add feature flag for Feature store (#4437) * Fixed bug where storage class select wouldn't appear in NIM Modal (#4427) * Enhance ManageNIMServingModal to support OpenShift default storage class and improve storage class selection logic - Added support for OpenShift default storage class in ManageNIMServingModal. - Updated logic to prefer ODH default storage class over OpenShift default when both are available. - Introduced a new prop `showDefaultWhenNoConfig` in StorageClassSelect to control visibility and enablement of storage class options based on configuration availability. - Added comprehensive tests for ManageNIMServingModal and StorageClassSelect to cover new functionality and edge cases. * removed debug logging * removed extension on ts import * fixed awkward logic * fix: PVC resizing doesn't trigger a redeployment (#4334) * fix: PVC resizing doesn't trigger a redeployment * one annotation solution * updated tests * fixed lint * NIM isolation * generic version * fix: lint * deleted comment * Serving refactor: Add tokens and hardware accelerators (#4441) * Add tokens and hardware accelerators * Remove unused kserve auth function * Cypress e2e Test - Verify a model version can be registered via versions view (#4444) * add test for registering via version view * add page object with timeout * enhance test * add empty state object, update test * update test object * use common mr login function * create versions page object * remove duplicate v2 check * add database checks * update login pattern to standard approach * sanitise queries * add uid to object storage model * update and apply nav method * add feature flag tag * fixed provider filter in resources (#4443) * fixed provider filter in resources * updated mocks for start basic workbench card * made new component hidden from enabled page * removed deprecated usage of useQueryParams * Allow empty requested/limit for CPU and memory when hardware profile is disabled (#4407) * Serving refactor: Show deployments of all projects in global page (#4451) * Show deployments of all projects in global page * Fix padding issue * Fix spacing issue * Fix deployment status bug (#4446) * Cypress e2e Test - Verify model registry permissions can be managed (#4456) * add new registry permissions test * lint fix * new line lint * Change "Launch application" to "Open application" (#4409) * change launch application to open application * change link * remove readme change * Update Model Registry Plugin with latest upstream changes. (#4455) * Update model-registry to 21197e57471e2a7fc6a09e178147540e8e218a94 * Revert changes * Update model-registry to 6545c37be18e2ead22e2d0ba83ae7874c3bd8680 * Revert overriden files * Pipeline failure feedback 2 (#4436) * moved over changes from pipeline-failure-feedback manually into newest branch; also adjusted title and description upon erroring out also: now only showing errors that have actual messages (reduce noise) * working on finishing this up...now that i have an actual cluster/backend to use again :) * removing the ignoreTimeout; not using anymore per UX * cleaning up code * removing timeout hacks that sped up development * using server timeout directly now * adjusted comment; next: remove the new css * adding an overrideTimeout * linter fix + removing unneeded timeOut alert * fixed unit test * (using cursor) added a div with an id for the mock tests; they are passing locally now * used cursor to add section to ignore ChunkLoadErrors * linter fix * style (scss) changes removed * Add toast notification upon successful datascience pipeline configuration (#4350) * add polling * fix linking * remove unused util * fix lint * protect against null array * change to use notificationwatchercontext * fix autolint * add test * add testids * change error msg * remove comment * fix linting * adjust redundant const * change time check * use dspipelinekind metadata namespace * use dspaloaded and server timeout functions * fix lint * add polling * fix linking * remove unused util * fix lint * protect against null array * change to use notificationwatchercontext * fix autolint * add test * add testids * change error msg * remove comment * fix linting * adjust redundant const * change time check * use dspipelinekind metadata namespace * adjust notifications to not show during modal * remove info notification * fix imports * check for undefined * fix tests * fix notifs * add cypress tests * e2e test (#4403) * Microcopy updates for "project-scoped" items (#4448) * microcopy updates * ChunkLoadError fix * microcopy updates * Remove list and listitem imports * Update test with global-scoped name * li ul changes * lint error fix * adjust the content tags * Update manageAcceleratorProfiles.cy.ts * edit label microcopy (#4458) * split frontend lint task into two separate runs (#4461) * run type checking in all packages with turbo (#4381) * run type checking in all packages with turbo * remove type-check from unit test script as it is run separately * Updates and enhancements for 'Verify the filters on Resources page' e2e test (#4463) * enhance test with backend validation * use inline types * check namespace * implement rhoai specific checks * add self-managed step * add navigate method * update tags and apply lint * Add more approvers (#4464) * Fix type errors for array in es2021 (#4467) * Add stopping status to model deployments (#4421) * RHOAIENG-29339: Filter out outdated notebook image tags and only validate UI version dropdown for images with 2+ non-outdated versions\n\nThis change updates the Cypress workbench image/version test to:\n- Filter out outdated notebook image tags (using the opendatahub.io/image-tag-outdated annotation)\n- Only validate the UI version dropdown when there are 2 or more non-outdated versions for an image\n- Skip UI validation for images with only 1 non-outdated version, matching current UI behavior\n\nThis ensures the test is robust and cluster-agnostic, and resolves failures due to outdated or single-version images.\n\nJira: https://issues.redhat.com/browse/RHOAIENG-29339 (#4471) * Quarantine model serving tests due to [Product Bug: RHOAIENG-29340] * Small change for quarantine branch RHOAIENG-29340 * Remove accidentally added web-ui directory from index * Update Hardware profile admin page (#4400) * Update hardware profile CRD, add local queue and workload priority class options * Added kueue fields to the details popover in HWP select * easier to use feature flags via a button in the header (#4237) * moved over a lot; the button is showing again. need to control when/how the banner shows again tho * better; need a break: next: compare tests (since files changed....)" * tweaks re pr review * tests are at lest running..... * yay passing :) * lint/prettier fixes * unit test fix * linter fix (unused import) * lint fix (added space) * fixing linter test error; (test runs locally just fine of course) * fixing merge error * Retrieve default local queue name from DSC (#4462) * Remove deleted crd from kustomization file (#4478) * Temporarily restore dashboard HWP crd (#4480) * Serving refactor: Add modelmesh as a platform shortcircuit option (#4459) * Add modelmesh as a platform shortcircuit option * Fix eslint oom * Add dependencies to package.json * Update icon * Internal model serving endpoint (#4475) * Update Label url to Internal * Updated Internal label test in cypress * Upgrade cluster storage modal (#4457) * upgrade cluster storage to include model context * remove isGeneralPurpose useEffect * remove redundant annotation setting * feat: Enhance the dashboard to support deploying NIM with a PVC (#4447) * v1 * fix: lint * hide on edit * refactor: DEFAULT_MODEL_PATH * model pvc dropdown * deletion logic * fix: lint * fix for current tests * fix:lint * lint * defaultMockInferenceServiceData * added testid's * tests + info * coderabbitai * deleted comment * no model is selected + relativeTime * Change how model deployment links appear (#4442) * Change how model deployment links appear * Cypress fixes * Adjustments from feedback * Move instances of isModelStopped into a util * Move duplicated code into shared resource * Rebase fixes * Integrate stop start changes * Small fixes * Fix issue with metrics link * Quick fix for stopping --------- Co-authored-by: Griffin-Sullivan <[email protected]> * Remove Product Bug references and @Bug tags from model serving tests (#4488) - Removed '[Product Bug: RHOAIENG-29340]' from describe blocks - Removed '@Bug' tags from all test configurations - Fixed linter formatting issues for tag arrays - Tests are now unquarantined and ready for execution * RHOAIENG-25339: Update application of hardware profiles in all workloads (#4413) * conditionally set resources * added unit tests * bring back lost changes * fixed unit tests * fixed mock tests * remove logic to unset resources for harware profiles * added new annotation * added new annotation to the serving runtime * Revert "fixed mock tests" This reverts commit 805f14d6294b429f5c4e0647f1606fdcc7141f8c. * fix lint * added a check for acc profile * fix mock tests * fixed more tests * fix mode serving mock test * added a better check * fixed tests * removed console * fixed unit test * Feature flag modal re-organization (#4481) * starting on separating feature flags into groups * comments and scaffolding * starting with cursor...added tabs * better * better * better * better * flags redistributed onto tabs now; easier to find the active ones * no longer having indeterminate checkboxes * cleanup * cleanup * restoring package.json * added scrolling to *just* the content of the tab that needs it (tried to use patternfly but capability not there) * did find a patternfly way; with chatgpt (better than cursor in this case) * working on test * removed debugging code * removing PageSection (review feedback) * linter fix (removing unused import) * Create a set of Cursor rules for Cypress e2e Development (#4485) * chore: initial changes for Cypress E2E rules and setup * docs(cypress-e2e): update rules for linting scripts, cy.get usage, and tagging per PR feedback * docs(cypress-e2e): clarify lint/fix commands for root, frontend, and backend per feedback * docs(cypress-e2e): update lint/fix instructions to frontend-only for E2E tests * Feature Store Initial Setup (#4487) * Add types, mocks, feature store project context, empty state and project selector for feature store. (#5) * Add types and mocks for feast * Add feature store project context and project selector * feat(RHOAIENG-28417):added feature store code block common component * feat(RHOAIENG-28415):added single label and tags with overflow and show all tags component * feat(RHOAIENG-28413): added feature store side navigation routes * feat(RHOAIENG-28413):uncommented the feature store flag check for routes * feat(RHOAIENG-28413):rearranged the nav items below experiments in the navbar and minor content changes in name * feat(RHOAIENG-28413):added core loader in the routes for feature store * fix(context):added featurestore context in app file * removed unused component * fix(feast-context): moved the feast context to the feast routes level * style: addressed review comments (text and spacing) --------- Co-authored-by: Pushpa Padti <[email protected]> * Add missing frontmatter to cypress-e2e.mdc rule file - Added description, globs, and alwaysApply fields to match jira-creation.mdc format - Enables proper rule configuration and LLM-driven relevance detection - Addresses reviewer feedback about missing frontmatter section * Fix globs field to be empty array instead of null - Changed 'globs:' to 'globs: []' to ensure it parses as empty array - Prevents type errors in rule-runner which expects a list - Addresses PR reviewer feedback * Fix bug when stopping model with confirmation modal (#4492) * Update cluster storage connected resources (#4469) * Update cluster storage connected resources * update ConnectedResourcesProps * RHOAIENG-27574: Filter Hardware profiles if kueue disabled (#4490) * added filter logic * added unit tests * fixed lint * moved the filter logic * enum * renamed * updated tests * removed unnecessary const * fix dupl issie * RHOAIENG-30110: The workload priority is not maintained when switching between local queue and not selectors. (#4496) * fixed the bug * added gutter * added unit tests * Kueue extras (#4489) * Set default hwp namespace in notebooks to dashboard namespace, remove non-legacy hwp from model mesh, move hwp annotations from serving runtime to inference service * Small fix * Additional fixes * Add test IDs for deployed model names in ModelMesh and plugin components (#4499) * Add test IDs for deployed model names in ModelMesh and plugin components - Add 'deployed-model-name' test ID to InferenceServiceTableRow for ModelMesh deployments - Add 'deployed-model-name' test ID to DeploymentsTableRow for plugin-based deployments - Fix syntax error in testSingleModelAdminCreation.cy.ts test file - Update Cypress tests to use new test ID selectors Supports RHOAIENG-29747 and RHOAIENG-29977 * Fix mock tests by restoring metrics-link test IDs while adding model name selectors - Restore original metrics-link-{name} test IDs for backward compatibility with existing tests - Add data-model-name='deployed-model-name' attributes as additional selectors - Update findModelServerDeployedName method to use new generic selector - Add findModelDeployedName method for table-based model selection This fixes the mock test failures while maintaining both specific (metrics link) and general (model name) test selectors. * Revert PR changes to InferenceServiceTableRow.tsx * Update test selector to use data-testid instead of data-model-name * Add deployed-model-name test ID to InferenceServiceTableRow - Add data-testid='deployed-model-name' to both Link and span elements - Preserve existing metrics-link functionality - Update page object to use new test ID selector - Add uncaught exception handler for JavaScript parsing errors - Support both loaded and unloaded model states * Update model serving tests: remove exception handling and fix project deletion timeout - Remove unnecessary Cypress.on('uncaught:exception') handling from all model serving tests - Set 5-minute timeout for project deletion due to RHOAIENG-19969 - Add TODO comments to review timeout once RHOAIENG-19969 is resolved - Support proper test retries by waiting for project deletion completion - Clean up test code to be more focused and maintainable * Address review comments: use findByTestId and remove redundant data-model-name - Update findModelDeployedName() in page object to use findByTestId('deployed-model-name') for consistency - Remove redundant data-model-name attribute from InferenceServiceTableRow component - Keep only data-testid='deployed-model-name' for test selection Addresses review feedback from Griffin-Sullivan on PR #4499 * Update frontend/src/__tests__/cypress/cypress/pages/modelServing.ts Co-authored-by: Griffin Sullivan <[email protected]> * Remove unused findModelDeployedName method from page object - Method was not used anywhere in the codebase - Clean up unnecessary code for better maintainability * Rename findModelServerName to findModelMetricsLink for clarity - Renamed findModelServerName(name: string) to findModelMetricsLink(name: string) in ModelServingSection - This method actually finds metrics links using metrics-link-${name}, not model server names - Updated all test file references to use the new method name - Kept the original findModelServerName() method for input fields unchanged - Addresses naming confusion between different findModelServerName methods Updated files: - testSingleModelContributorCreation.cy.ts - testSingleModelAdminCreation.cy.ts - testDeployOCIModel.cy.ts - testModelServingTolerations.cy.ts --------- Co-authored-by: Griffin Sullivan <[email protected]> * Remove dashboard hardware profiles CRD (#4500) * Add 'Last Deployed' column to model deployments (#4468) * Add 'Last Deployed' column to model deployments * Adjust extension and modify for model mesh * Add generic component for last deployed * Cypress fix * Fix sorting for models refactor * Adjust to only show timestamp for 'Started' models * fixed filtering behavior for model registry page (#4482) * fixed filtering behavior for model registry page * fixed tests * added filtering for model version table * removed file extension * upversion dashboard (#4503) * Workbench Test Maintenance - implement dynamic notebook image selection with backend fallback (#4502) * feat: implement dynamic notebook image selection with backend fallback - Replace hardcoded 'jupyter' image validation with dynamic selection - Add selectNotebookImageWithBackendFallback utility function: - Try UI selection first (createSpawnerPage.findNotebookImage) - Fall back to backend query if UI element not found - Uses opendatahub.io/notebook-image-name annotation for display name - Update workbench tests to use scoped validation (notebookRow.shouldHaveNotebookImageName) - Centralize all OC commands in imageStreams.ts utility per Cypress E2E rules - Handle environment variables (APPLICATIONS_NAMESPACE) internally in utilities - Fix async/sync mixing issues in Cypress command chaining Resolves: RHOAIENG-30224 * feat: complete dynamic image selection for testWorkbenchVariables.cy.ts - Replace all hardcoded 'code-server' validations with dynamic approach - Both tests now use selectNotebookImageWithBackendFallback for UI-first selection - All 4 workbench instances now validate using getImageStreamDisplayName - Handle complex test structure with multiple workbenches per test - Proper async chaining for nested workbench creation flows - All 6 workbench test files now consistently use dynamic image selection All workbench tests (11 total) now passing with dynamic image selection: ✅ testWorkbenchControlSuite.cy.ts (2 tests) ✅ testWorkbenchCreation.cy.ts (2 tests) ✅ testWorkbenchImages.cy.ts (1 test) ✅ testWorkbenchNegativeTests.cy.ts (2 tests) ✅ testWorkbenchStatus.cy.ts (1 test) ✅ testWorkbenchVariables.cy.ts (2 tests) - COMPLETED ✅ workbenches.cy.ts (1 test) Resolves: RHOAIENG-30224 * refactor: remove unused helper functions from imageStreams.ts Address CodeRabbit AI feedback by removing dead code: - Remove verifyNotebookImageDisplayName (unused) - Remove validateNotebookRowImageName (unused) - Remove shouldHaveNotebookImageNameFromImageStream (unused) - Remove selectTestImageStream (unused) All tests use getImageStreamDisplayName directly with manual validation, making these helper functions redundant. This cleanup reduces code duplication and maintains only the functions actually used: ✅ getImageStreamDisplayName - Core function used in all tests ✅ selectNotebookImageWithBackendFallback - Main selection function ✅ getAvailableNotebookImageStreams - Used by fallback logic ✅ getNotebookImageNames - Used by testWorkbenchImages.cy.ts File size reduced from 273 lines to ~150 lines with no functionality lost. * test: add @Workbenches tag to workbenches.cy.ts test Add missing @Workbenches tag to the 'Verify users can create a workbench and connect an existent PersistentVolume' test case. This ensures the test is included when running workbench tests with tag filtering (e.g., --env grepTags='@Workbenches'). * Add back hardware profiles crd (#4507) * Add back hardware profiles crd * Add description * Deploy a Model from a PVC (#4449) * deploy a model from pvc * existing uri bug fix * simplify useEffect and hide uri when pvc found * Refactor: Avoid destructuring from process.env (#4510) * add documentation on extensibility (#4501) * add documentation on extensibility * add link under 'developer readmes' * add cypress tests for missing links (#4513) * add cypress tests for help links * Refactor: Avoid destructuring from process.env --------- Co-authored-by: Lucas Fernandez <[email protected]> * Serving refactor: Backport nim platform (#4493) * Add refactor platform card * Update NIM context to be generic * Updating naming * Add tests * import consistency updates * cleaner isPlatformEnabled * Feature Store Context and API setup (#4509) * Feature Store Context and API setup: * Backend proxy setup * Routes * Context * Hooks * API * Unit tests * remove title icon * import updates and few changes * adding unit tests * PR review updates * Invalid project selector * adding prefix in proxy * Add fix to image streams notebook enabling annotation (#4522) * Splitting feature store types.ts (#4529) * Add skeleton for accelerator profile while loading (#4454) * change loading checks and update components * add state for component * fix lint * Update AcceleratorProfileSelectField.tsx * fix loading state issues * remove imports * add test case * DevFeatureFlag removal (#4517) * Status refresh for the Model Registry's Deployments (#4466) * MR status refresh * fix lint: imports * address comments * Globals page exports routes with metrics too (#4519) * Globals page exports routes with metrics too * better metric link logic * Initial folder structure for llama stack ui (RAG/Gen AI v3) (#4535) * feat: integrate model registry into the deployment (#4450) * PVC Serving E2E Test (#4494) * Add E2E test for deploying from PVC * pr fixes * remove feature flag flip * PVC serving microcopy updates (#4516) * PVC serving microcopy updates * Add HelperTextItem * change to popover * warning title change * fix: update title and label text in Enable NIM dialog to reference personal key (#4536) Signed-off-by: Olga Lavtar <[email protected]> * Refactor RegisterCatlogModel and Remove useEffect (#4420) * Refactor RegisterCatlogModel and remove useEffect * model name fix for cypress test * simplify the hook * mapping suggestion fix Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * remove timeout from test Co-authored-by: Robert Sun <[email protected]> * timeout removal Co-authored-by: Robert Sun <[email protected]> * timeout removal Co-authored-by: Robert Sun <[email protected]> * remove the prefilled values test --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Robert Sun <[email protected]> * aggregate get/list/watch permissions to project admins/contributors (#4497) * chore: e2e Test Maintenance - Jul 24th 25' (#4538) * RHOAIENG-30472: Standardize deleteKueueResources function options to match deleteOpenShiftProject pattern - Add standardized options parameter with timeout, wait, and ignoreNotFound properties - Implement same pattern and defaults as deleteOpenShiftProject for consistency - Fix async/sync code mixing issues that caused Cypress errors - Update test files to use new options parameter syntax with proper comma placement - Maintain backward compatibility while improving code consistency * Add exception handler for webpack-dev-server fallback errors in E2E tests - Ignore 'Unexpected token <' errors that occur due to webpack-dev-server fallback - Prevents E2E tests from failing due to these development environment issues - Added alongside existing ChunkLoadError handler for consistent error handling * Add quarantine steps to model serving E2E tests - Add quarantine steps to testModelStopStart.cy.ts - Add quarantine steps to testSingleModelAdminCreation.cy.ts - Add quarantine steps to testSingleModelContributorCreation.cy.ts - Fix formatting issues with tag arrays per prettier requirements * Update frontend/src/__tests__/cypress/cypress/utils/oc_commands/distributedWorkloads.ts Co-authored-by: Noam Manos <[email protected]> * Improve robustness of Kueue resource deletion commands - Replace && with || : ; to ensure all deletion attempts run independently - Prevents cleanup from stopping if one resource doesn't exist - Addresses review feedback from @manosnoam in PR #4538 Co-authored-by: Noam Manos <[email protected]> --------- Co-authored-by: Noam Manos <[email protected]> * Add version labels to refactored code (#4523) * Add version labels to refactored code * Add generic component * Modify servingruntime to servingdetails, create shared version component * Added entire repo for llama-stack-modular-ui (#4541) * Added entire repo for llama-stack-modular-ui Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Removed .github Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Added .eslintignore Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Added gh actions Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Fix for lint errors Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Removed gh actions Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Ignoring tests in llama-stack-modular-ui directory Signed-off-by: Agnieszka Gancarczyk <[email protected]> --------- Signed-off-by: Agnieszka Gancarczyk <[email protected]> * [feat] Add real amd mock endpoints for Query and Chat completion (#4543) This commit contains the following: 1. Mock and real endpoints for query. 2. Allows query when no DB is present. 3. Allows query when DB is present. Signed-off-by: Varsha Prasad Narsing <[email protected]> Co-authored-by: Matias Schimuneck <[email protected]> * Add area/llama-stack-modular-ui label for PRs (#4551) * Serving refactor global models page backport (#4531) * Add global models page backports * Remove unused backport file * Quarantine distributed workloads test - add bug tag and JIRA reference RHOAIENG-30510 (#4550) * Unquarantine serving tests from RHOAIENG-30376 (#4554) * add llama stack github action workflow (#4546) * add llama stack workflow * fix package.json in llama-stack-modular-ui * change the workflow name * feat: Add comprehensive OpenAPI documentation for Llama Stack Modular… (#4547) * feat: Add OpenAPI documentation for Llama Stack Modular UI BFF - Add comprehensive OpenAPI 3.0 specification for BFF endpoints - Include /api/v1/query endpoint for RAG and chat completion - Add vector database management endpoints - Include model management endpoints - Fix CORS configuration for healthcheck endpoint to enable Swagger UI - Document only public-facing models and remove authentication requirements - Add common schemas and responses in separate lib/common.yaml file The OpenAPI documentation can be visualized using Swagger UI or any OpenAPI viewer. Run the BFF with: make run STATIC_ASSETS_DIR=../frontend/dist MOCK_LS_CLIENT=true ALLOWED_ORIGINS="*" * docs: Improve OpenAPI specification clarity and security definitions - Add explicit security: [] to healthcheck and config endpoints for public access - Clean up proxy endpoint descriptions by removing redundant authentication text - Improve formatting consistency in OpenAPI specification - Clarify which endpoints are public vs require authentication --------- Co-authored-by: Matias Schimuneck <[email protected]> * Bump form-data in /frontend/packages/model-registry/upstream/frontend (#4521) Bumps [form-data](https://github.com/form-data/form-data) from 4.0.3 to 4.0.4. - [Release notes](https://github.com/form-data/form-data/releases) - [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md) - [Commits](https://github.com/form-data/form-data/compare/v4.0.3...v4.0.4) --- updated-dependencies: - dependency-name: form-data dependency-version: 4.0.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Manaswini Das <[email protected]> * config: enable typecheck for source files, disable only for test files (#4562) - Enable typecheck linter for regular source code files - Disable typecheck only for test files (*_test.go) to avoid Ginkgo framework errors - Maintain proper type checking for production code while allowing test framework functions * Removed all code related to chatbot openshift auth and chatbot sharing visuals (#4561) * Removed all code related to oAuth Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Fixed eslint Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Fixed eslint Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Fixed eslint Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Fixed eslint Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Fixed eslint Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Fixed eslint Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Fixed eslint Signed-off-by: Agnieszka Gancarczyk <[email protected]> --------- Signed-off-by: Agnieszka Gancarczyk <[email protected]> * exclude llama-stack-modular-ui in tsconfig.json (#4566) * Removed out of date documentation files (#4567) * make rwo tag always show (#4524) * Quarantine model serving tests for Product Bug RHOAIENG-30799 - Added [Product Bug: RHOAIENG-30799] to describe blocks for all model serving tests - Added @Bug tag to all affected test cases - Quarantined tests in: - testSingleModelAdminCreation.cy.ts - testSingleModelContributorCreation.cy.ts - testModelPvcDeployment.cy.ts - testModelStopStart.cy.ts - testMultiModelAdminCreation.cy.ts - testDeployOCIModel.cy.ts - testSingleServingRuntimeCreation.cy.ts * module federation documentation (#4556) * Feature view api (#4553) * Feature View * Table * Routes * API Hooks * Empty state * Ensuring API availability for feature store * Feature view tags overflow fix * empty owner placeholder * Coderabit updates * Updating feature view online offline label * cypress tests * Update failed unit test * Test updates * Uncommenting mock status * Port start / stop models to the plugin (#4533) * Model Registry - ODH Enablement (#4540) * Lucas' test MR container * Update params.env * Update deployment.yaml * Update deployment.yaml * Fix issue with overlay * Get target ports referenced by name * Revert namespace * Avoid using labels in this overlay --------- Co-authored-by: Andrew Ballantyne <[email protected]> Co-authored-by: Lucas Fernandez <[email protected]> * Serving refactor global cypress test fixes (#4555) * Add global models page backports * Remove unused backport file * fixes * small test update * Remove comments * Fix more tests * Fix last deployed tooltip mouseenter * feat: adapt base images to red hat and migrate from ubi8 to ubi9 (#4565) * Cypress e2e Test - Verify models can be deployed from model registry (#4564) * add new deploy test * increase timeout * handle empty registry condition * deploy secret * handle single registry condition * improve timeout mechanism * minor enhancements * combine mr utils * add page object * lint * remove initial validation * move clickRegisterModelButton to new util * update tests * follow up missing changes in commit (#4576) * Upgrade mod arch upstream (#4579) * Update model-registry to b4c43a0dfc6864f9a630a011e71f48c48b695df1 * Revert changes that override upstream * RHOAIENG-28909: Add Storage Class Provisioner "disk.csi.azure.com" to Storage Enums (#4528) * added disk.csi.azure.com * added RWOP * added unit tests * added RWX * rwo only * New LMEval E2E tests for TrustyAI (#4511) * New LMEval E2E tests for TrustyAI This commit adds comprehensive LMEval tests and related E2E utilities: - Add 2 scenarios for LMEval using static and dynamic models - Add LMEval job utilities for configuration and job verification - Add ModelTestSetup utility for any e2e test setup - Add YAML support to ESLint: eslint-plugin-yml, yaml-eslint-parser - Update LMEval form components with missing test IDs Signed-off-by: manosnoam [email protected] * Fix CodeRabbitAI comments Signed-off-by: manosnoam <[email protected]> * Multiple fixes to address Reviewers comments Signed-off-by: manosnoam <[email protected]> * fix(lm-eval): Dynamically detect port for InferenceService connections LMEval jobs were failing with ConnectionRefusedError because they were connecting to InferenceService models on the default port 80, while the ServingRuntime was configured to listen on a different container port. This fix fetches the ServingRuntime associated with each InferenceService and extracts the containerPort from its definition. The port is then used to construct the correct internal cluster URL. Signed-off-by: manosnoam <[email protected]> * Update LMEval mock tests and page object Signed-off-by: manosnoam <[email protected]> * Split LMEval tests into static and dynamic test files Signed-off-by: manosnoam <[email protected]> * Fix CodeRabbitAI suggestions Signed-off-by: manosnoam <[email protected]> * Rebase lmeval_e2e branch Signed-off-by: manosnoam <[email protected]> * Quarantine testLMEvalDynamic due to bug RHOAIENG-30642 Signed-off-by: manosnoam <[email protected]> * Fix accessibility violations (A11y) with plain buttons in LMEval form Signed-off-by: manosnoam <[email protected]> * Add testId to LMEvalTaskSection Signed-off-by: manosnoam <[email protected]> * Rename lmEval.ts to lmEvalFormPage.ts Signed-off-by: manosnoam <[email protected]> * Fix e2e.ts before hook to skip test suites based on tags Signed-off-by: manosnoam <[email protected]> * Update LMEval E2E page objects and tests - Remove complex dropdown logic, enhance model selection - Move cleanup function, remove fallback project name - Enhance YAML parsing with error handling - Login before test, to avoid session race conditions with devFeatureFlags - Remove Tag for bug RHOAIENG-30642 - Update README.md Signed-off-by: manosnoam <[email protected]> --------- Signed-off-by: manosnoam [email protected] Signed-off-by: manosnoam <[email protected]> * E2E Test for Token Authentication (#4572) * add E2E test to validate token authentication * copy tokens from UI * remove comment * Serving refactor: fix project details tab cypress tests (#4580) * Make test ids more consistent * Update project test too * Feature store entities (#4568) * feat(RHOAIENG-28420):added constants and feature store route for entitiy details page * feat(RHOAIENG-28420,RHOAIENG-28421):added hooks for feature store entities * feat(reusable-components):added a common timestamp component,scrollable links popover and import changes * feat(reusable-toolbar):added a common toolbar component * feat(entities-detail-page):added entitities detail and list view component * feat(entities-table):added entity table component and row component * fix(lint):addressed linting errors for relative imports * fix(jest-test-cases):added hook test cases and fixed test cases for error utils and api integration * fix(components): added route fixes, empty state and error state for entity details page * feat(cypress):added cypress mocks and test cases * fix:added common route function * fix(review):added spec file for utility functions and rearranged the options in the filter to match the column * Remove bug tags from model serving tests (#4585) * add bug tag * add description tag * remove bug tags * lint fix * add ticket to oci test * Add dashboard support for the pipelines Kubernetes native API (#4484) * add section * store * adjust types * remove console * add crd connection * begin kfp upstream changes * revert kfp changes * remove dataid word * begin kfp upstream changes * add support for new versions * add mock tests * fix tests and add k8s name checking * fix lint * adjust tests and add auto scroll * fix unit test * add deel equal * add component for k8s checkbox * change to smooth * Add deploy button, dropdown button, and connection autofill button as extension in MR midstream (#4453) * Add deploy button and dropdown button as extension in MR midstream * Add autofill connection button as extension when registering model * rebase * Update the extensions * Rebase and update * Update plugin context for the MR app to unblock midstream standalone mode * address feedback * Revert change to mandatoryNamespace Signed-off-by: Mike Turley <[email protected]> * Attempt to give lint job more memory Signed-off-by: Mike Turley <[email protected]> --------- Signed-off-by: Mike Turley <[email protected]> Co-authored-by: Mike Turley <[email protected]> * Update MR e2e test `testArchiveModels' (#4586) * update test * add should_be_enabled * add page object * linter fixes * lint * add selectors * Add edit model modal to refactor (#4573) * consolidate hooks * deprecate hooks * replace hooks with default hook * fixed tests * remove auto patch code for admin page * delete deprecated hooks * clean up * fixed issue * updated comment * Feature store toolbar component (#4593) * Feature store toolbar component * solving linting * fix:resolved linting issues --------- Co-authored-by: Claudia Alphonse <[email protected]> * Doc upload in chatbot (#4612) * Converted to new designs Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Removed some eslint ignore statements Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Added document upload functionality Signed-off-by: Agnieszka Gancarczyk <[email protected]> * Refactor Signed-off-by: Agnieszka Gancarczyk <[email protected]> * test fix * test fix --------- Signed-off-by: Agnieszka Gancarczyk <[email protected]> Co-authored-by: pnaik1 <[email protected]> * Increasing memory allocation to 8GB for lint tests (#4616) * feat: Add OpenAPI serving to BFF (#4560) - Add OpenAPI handler with JSON, YAML, and Swagger UI endpoints - Support external references in OpenAPI specification - Integrate OpenAPI routes with existing routing system - Preserve static file serving functionality with STATIC_ASSETS_DIR - Add comprehensive API documentation endpoints: * /openapi.json - OpenAPI specification in JSON format * /openapi.yaml - OpenAPI specification in YAML format * /swagger-ui - Interactive Swagger UI interface * /openapi - Redirect to Swagger UI The BFF now serves both frontend static files and provides comprehensive OpenAPI documentation for the API endpoints. * Link refactor deploy buttons to existing deploy modal (#4542) * Link refactor deploy buttons to existing deploy modal * Adjustments from feedback * Add toolbar for refactored global models page * Small bug fixes * Refine some areas * Remove references to refresh * Clean up code and fix deploy button in global no models * Kueue microcopy changes (#4620) * Adds user_token auth mode to llama stack module (#4596) * Updates authentication to follow pattern used by model registry. Now supports user_token mode. * fix: properly disable authentication if auth_method=disabled * refactor: optimize TokenClientFactory performance and make API path prefix configurable - Move TokenClientFactory creation from per-request to app-level initialization - Add configurable APIPathPrefix to EnvConfig with default /api/v1 - Add --api-path-prefix command-line flag and API_PATH_PREFIX env var - Replace hardcoded ApiPathPrefix constants with dynamic path generation methods - Update middleware to use app.tokenFactory instead of recreating per request - Update isAPIRoute function to be App method using configurable prefix - Update all tests to work with new configurable approach - Maintain backward compatibility with default /api/v1 prefix This improves performance by eliminating per-request object creation and provides flexibility for different deployment scenarios. --------- Co-authored-by: Akram Ben Aissi <[email protected]> * E2E test for model deployment with Kserve Raw (#4583) * Cypress E2E test for model deployment with Kserve Raw -20579 * refactored code * Addressed review comments * Add [Product Bug: RHOAIENG-31261] and Bug Tag to Quarantine the test * update checkInferenceServiceState utility method to check deployment mode * Update deployment mode conditions * remove getDeploymentModeLength() function. * refactored code * refactored code * fixed tests * add feature page (#4574) * add feature page * feat:added test cases,tooltip, common filter changes * feat:added fature views api in the odh cypress file * fix:reused the generic filter component and removed the unused featurestoolbar * changed the test id for the toolbar --------- Co-authored-by: Claudia Alphonse <[email protected]> * Unquarantine missed serving test from RHOAIENG-30799 bug (#4617) * Feature services (#4571) * Feature service * Added project col * Coderabbit comments * Tests added * Feature view links * feature service dates * Feature service toolbar * fixing lint * Lint fix * fixing tests * Fixing tests 2 * Replace project column * Adding back type and mocks * typo fix * TruncatedText truncation for tooltips in HardwareProfileSelection helper description (#4578) * fix tooltip * adjust other overflow * update truncate text * adjust truncation options * add scroll : * use panel * add back in support for no truncation * adjust text * fix truncation for simpleselect * change back to truncated text * fix mouse enter hook * Dspa caching rebased (#4621) * dspa cache enablement; squashing all the commits: (rebasing on derek's branch: story-21309) * using cacheEnabled (instead of cache: {enabled: <value>}) * autoscrolling when the alert shows up now so alert is not hidden *turning off autoscroll unless user interacted with it * added 'Loading...' text * renamed View->Manage for the modal * added toast * added tests * added to cypress mock test * playing with titles/text sizes * adjusting layout depending on the context * alert looks better and takes up entire width now, no matter the layout mode * linter fix (import order ) * fixing tests * updated tests; did lint fixes; removed the lint:changed from package.json * fixing import * working on package files.... * restoring package-lock.json * restored base package files * starting on review comments: fixed one layout issue and using 'useNotificaton' instead of the context * fixing button alignment in the modal * small tweaks: style removed, test code adjusted per review * fixed import * linter fix * test fix * fixing test (to use useNotification hook instead of registerNotification) * removing tag that cursor added * fixing more tests * adding in a StackItem to add a margin without adding explicit css; tested that the auto-scroll to view the alert is still functional * Refractor ChatbotMain.tsx file (#4624) * remove @app alias * create separate folder * add hooks * add unit test for hooks * Rhoaieng 28422 - Entities tab - feature views (#4626) * feat:added entity param for the feature views tab * feat:added cypress test for feature views tab and updated usefeature views hook spec test * feat:added feature view tab for entities * feat:added classname and a fixed test case * [feat] Allow context message to be an input from the user (#4603) This change allows users to input context message from the user instead of hardcoding it. To test the change, use the mock client and run the command: curl -X POST http://localhost:8080/api/v1/query \ -H "Content-Type: application/json" \ -d '{ "content": "What is machine learning?", "vector_db_ids": ["my-vector-db-identifier"], "llm_model_id": "ollama/llama3.2-3b", "system_prompt": "You are a technical consultant. Provide concise, actionable insights based on the available context." }' Signed-off-by: Varsha Prasad Narsing <[email protected]> * Feature service details (#4628) * Feature service * Added project col * Feature service toolbar * Replace project column * Feature service details * tests update * Coderabbit comments * Fallback for no tags * Fix case sensitivity: rename featureServiceDetails.tsx to FeatureServiceDetails.tsx * Details page empty states * Empty message update * solving tests * resolving conflicts * revert * revert comment * Package and feature flag setup for model training (#4615) * serving refactor: cypress project details model fixes (#4601) * Add checking runtimeTemplates for deploy button * Fix accessibility error * More consistent testids * Add testid for project details table too * Add missing testid for change platform button * Minor fix to make deploy button a link in the section overview * fix type and short circuit some template api calls * Fix deploy button not having a project in global * Fix templates load state * final fixes * Add PR review guidelines and best practices (#4486) * Add PR review guidelines and best practices * Fix indentation, wording, add to PR template * Fix Markdown formatting issues * Fix MD007 issues * Add more details about when to and when not to use useCallback * Add code examples * make content clearer and add examples * Serving refactor cypress: Re-add deploy from registry button link (#4623) * Make and use nav back to registry button * Fix gap being gone when aria-disabled true * chore(deps): Upgrade PatternFly to 6.3.0 release (#4435) fix lint chore(deps): bump versions to latest prerelease candidates chore(deps): bump versions to latest prerelease candidates chore(deps): bump versions to latest prerelease candidates, update table components chore(deps): fix lint chore(deps): fix lint chore(deps): bump to stable release versions chore(deps): add isHamburgerButton prop for page toggle animation chore(deps): fix tabs bug, add TODO for table, remove BarsIcon as child of PageToggleButton chore(deps): remove BarsIcon from imports in Header.tsx chore(deps): apply usePageInsets prop instead of util classes to match page margins chore(deps): bump to latest patch release versions chore(deps): revert hasAnimations on opt-in components chore(deps): revert hasAnimations on opt-in components chore(deps): revert hasAnimations on opt-in components chore(deps): revert Header.tsx to apply isHamburgerButton * test: create unit tests for internal api handlers and cmd package (#4619) * Feature view tab for features (#4631) * Add CY_RETRY option for Cypress test retry configuration - Add new CY_RETRY environment variable to control test retry behavior - Document all Cypress environment configuration in testing.md - Reference main documentation from cypress README to avoid duplication Signed-off-by: manosnoam <[email protected]> * Fix uncaught exception handler conflict in e2e.ts Multiple uncaught:exception handlers were interfering in e2e.ts, causing timeout errors to be ignored instead of failing tests. For example, pipelines/topology.ts had a timeout error handler that was overriding the global one, causing tests to run for 1.5+ hours (until Jenkins killed them). Fixed by consolidating into a single uncaught exception handler. Signed-off-by: manosnoam <[email protected]> * Add support for both process.env and --env variables for all CY_ vars Signed-off-by: manosnoam <[email protected]> * Make modular architecture workspace enabled so it works with plugins (#4595) * Move 'Use existing settings' to top of Hardware Profile select list (#4627) * change order * add unit test * move to new describe block * add not exist assertion * Add params.env to modular architecture overlay so the operator can inject the image (#4575) * fix: Update NIM enable test to be more resilient (#4590) * feat: implement robust NIM application enablement test with automatic manifest application - Add comprehensive NIM application enablement test with automatic manifest application - Create dedicated nimCommands.ts file for NIM-specific functions - Implement robust NIM card detection and enable button handling - Add proper error handling for cases where NIM is already enabled - Improve test reliability with proper timeouts and element detection - Add NIM manifest fixture for testing - Resolve async/sync mixing issues and improve scrolling behavior - Add @SanitySet3 tag for test categorization - Fix linting issues and improve code formatting * fix: resolve linting issues in NIM test files - Fix unnecessary else after return in NIMCard.ts - Fix prettier formatting issues in testEnableNIM.cy.ts - Fix indentation and spacing in nimCommands.ts - Add proper function name for test function to resolve func-names warning - Ensure all files pass eslint and prettier checks * refactor: simplify NIM test by removing already-enabled checks - Remove all logic around checking if NIM was already enabled - Simplify executeNIMTestSteps function to return void instead of boolean - Remove unnecessary conditional logic and skip statements - Clean up the test flow since deleteNIMAccount in before() handles cleanup - Make the test more straightforward and focused on the enablement flow * refactor: improve NIM test with better step logging and page object encapsulation - Replace cy.log() with cy.step() for test steps to improve test reporting - Add reload() method to ExplorePage class for better encapsulation - Use explorePage.reload() instead of direct cy.reload() calls - Keep informative cy.log() calls for context that don't represent test steps - Improve test readability and maintainability * refactor: move direct DOM selectors to NIMCard page object methods - Add findDrawerPanel() method to NIMCard class for drawer panel selector - Add findActionList() method to NIMCard class for action list selector - Add findEnableButton() method to NIMCard class for enable button selector - Replace direct cy.get() calls with page object methods in test - Improve encapsulation and follow mandatory coding guidelines for UI interactions --------- Co-authored-by: Noam Manos <[email protected]> * Model serving fix cypress platform selection errors (#4602) * Reuse same platform error alert * Add error alert for details page too * Verify Required type and add system instruction (#4638) * add required file * add required type and system instructions * add source toggle button * fix test * microcopy change for pipeline caching section; no functional changes (#4643) * microcopy change for pipeline caching section; no functional changes * updated relevant test that checked the text * RHOAIENG 29677 -Feature Views details section (#4635) * feat:updated mocks and cypress tests for feature services,views,entities * feat:added apis getfeatureviewbyname, added routes for data sources, and updated jest test files * feat:added hooks changes for feature store * feat:updated props in featurestorecodeblock, and constant changes for feature store objects * feat:added filter utils function to handle feature views, and types and utils files * feat:added filtering changes for project column for entities * feat:added filtering changes for project column for features * feat:added filtering changes for project column for feature services * feat:added filtering changes for project column for feature views and removed the unused toolbar for feature views * feat:added feature views details tab, details page and the consuming tab component * feat:added feature view tabs component, and feature view schema and transformation component * feat:added feature view lineage tab and feature view materialization tab component * fix:test cases fixes * fix(review-comments):resolved code rabbit and other review comments * fix(review-comments):added fallback for not interaction code block * fix(store-type-filter-feature-view):added custom filtering fix for the feature view for the store type filter * fix(review-comments): added feature view materialization component with sorting, replaced the table less header for entity details part with flex * fix:added compact variant for materialization component * fix:added minor textual changes and test id changes * cypress config file * cypress config file added to tsconfig for cypress * Migrate /images POST, PUT, and DELETE endpoints to frontend (#4470) * PVC Model Path Helper Text Update (#4651) * helper text * pull out connected resources * Add reviewers in llama-stack-modular-ui (rag-playground) (#4625) * Add ChristianZaccaria as reviewer in llama-stack-modular-ui (rag-playground) * Add Bobbins228 and Ygnas as reviewers in rag-playground * Fix the pipelines run metrics table (#4652) * Ignore store_session_info when displaying pipeline run metrics This is an implementation detail not directly set by the user, so it does not need to be displayed. Signed-off-by: mprahl <[email protected]> * Fix displaying pipeline run metrics with zero values If a metric had a `0` value, the code would call `toString` on `boolValue` which is undefined and caused the UI to crash until the pipeline run was archived. Signed-off-by: mprahl <[email protected]> --------- Signed-off-by: mprahl <[email protected]> * Update start / stop models with UX improvements (#4645) * remove model name (#4653) * Update Tekton output-image tags to version v2.35.1-odh (#4430) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * updated tekton (#4432) * upversion dashboard (#4434) * Upversion Dashboard --------- Signed-off-by: Olga Lavtar <[email protected]> Signed-off-by: Agnieszka Gancarczyk <[email protected]> Signed-off-by: Varsha Prasad Narsing <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: manosnoam [email protected] Signed-off-by: manosnoam <[email protected]> Signed-off-by: Mike Turley <[email protected]> Signed-off-by: mprahl <[email protected]> Co-authored-by: Katelynn Perry <[email protected]> Co-authored-by: Griffin Sullivan <[email protected]> Co-authored-by: Purva Naik <[email protected]> Co-authored-by: Fede Alonso <[email protected]> Co-authored-by: Pushpa Padti <[email protected]> Co-authored-by: Theia <[email protected]> Co-authored-by: mtalvi <[email protected]> Co-authored-by: Emily Samoylov <[email protected]> Co-authored-by: Conor O'Malley <[email protected]> Co-authored-by: Robert Sun <[email protected]> Co-authored-by: Juntao Wang <[email protected]> Co-authored-by: Ashley McEntee <[email protected]> Co-authored-by: Derek Xu <[email protected]> Co-authored-by: Lucas Fernandez <[email protected]> Co-authored-by: Jill Pelavin <[email protected]> Co-authored-by: Arsheen Taj Syed <[email protected]> Co-authored-by: Christian Vogt <[email protected]> Co-authored-by: Anthony Coughlin <[email protected]> Co-authored-by: Anthony Coughlin <[email protected]> Co-authored-by: Nana Nosirova <[email protected]> Co-authored-by: Sri Sai Sowjanya Darna <[email protected]> Co-authored-by: Griffin-Sullivan <[email protected]> Co-authored-by: Anish Surti <[email protected]> Co-authored-by: Claudia Alphonse <[email protected]> Co-authored-by: Lucas Fernandez <[email protected]> Co-authored-by: Dipanshu Gupta <[email protected]> Co-authored-by: Eder Ignatowicz <[email protected]> Co-authored-by: olavtar <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Noam Manos <[email protected]> Co-authored-by: Agnieszka Gancarczyk <[email protected]> Co-authored-by: Varsha <[email protected]> Co-authored-by: Matias Schimuneck <[email protected]> Co-authored-by: Andrew Ballantyne <[email protected]> Co-authored-by: Matias Schimuneck <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Akram Ben Aissi <[email protected]> Co-authored-by: Andrew Ballantyne <[email protected]> Co-authored-by: Mike Turley <[email protected]> Co-authored-by: Anish Surti <[email protected]> Co-authored-by: Alex Creasy <[email protected]> Co-authored-by: Jenny <[email protected]> Co-authored-by: IAN MILLER <[email protected]> Co-authored-by: Gary Harden <[email protected]> Co-authored-by: Christian Zaccaria <[email protected]> Co-authored-by: Matt Prahl <[email protected]> Co-authored-by: odh-devops-app[bot] <140140902+odh-devops-app[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Feature Store Context and API setup: * Backend proxy setup * Routes * Context * Hooks * API * Unit tests * remove title icon * import updates and few changes * adding unit tests * PR review updates * Invalid project selector * adding prefix in proxy
RHOAIENG-28418
Description
Added context, route, APIs, backend proxy
How Has This Been Tested?
Run backend:
export FEAST_REGISTRY_SERVICE_HOST=localhost && export FEAST_REGISTRY_SERVICE_PORT=8445 && cd backend && npm run start:dev
Enable port forwarding:
kubectl port-forward -n default svc/feast-multiproject-registry-rest 8445:443
Run frontend:
npm run start:dev
Test Impact
Added unit tests for hooks
Request review criteria:
Self checklist (all need to be checked):
If you have UI changes:
After the PR is posted & before it merges:
main
Summary by CodeRabbit
Summary by CodeRabbit
New Features
Refactor
Bug Fixes
Tests
Chores
Revert