Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
bb1e3f6
Update @odh-dashboard/model-registry tracking to e6f94485f9c4f74bfc44…
ppadti Jun 16, 2026
239344d
Update @odh-dashboard/model-registry tracking to c19a6b7cec419e12f7bf…
ppadti Jun 16, 2026
e321c82
Update @odh-dashboard/model-registry tracking to 8b1cdf070e6f8e238ddb…
ppadti Jun 16, 2026
712270a
Update @odh-dashboard/model-registry tracking to 9c7c35fa53efa21ee5c8…
ppadti Jun 16, 2026
0eb859e
Update @odh-dashboard/model-registry tracking to 18a71314e1ed0eb35bf1…
ppadti Jun 16, 2026
44fda6e
Update @odh-dashboard/model-registry tracking to 86cbb4bf2c754c7c2d4d…
ppadti Jun 16, 2026
b30150e
Update @odh-dashboard/model-registry tracking to 7a8dc3def1803ed633b1…
ppadti Jun 16, 2026
b789a39
Update @odh-dashboard/model-registry: Fix the label order in model ca…
ppadti Jun 16, 2026
492c1e2
Update @odh-dashboard/model-registry tracking to 0f14f645c51096629cf0…
ppadti Jun 16, 2026
bbf4e32
Update @odh-dashboard/model-registry: fix(ui): fix reset-all-defaults…
ppadti Jun 16, 2026
6ca2ce5
Update @odh-dashboard/model-registry tracking to fac965eda3acbc326a59…
ppadti Jun 16, 2026
e64f874
Update @odh-dashboard/model-registry tracking to b59ce0ebd66377d3157e…
ppadti Jun 16, 2026
83bd62b
Update @odh-dashboard/model-registry tracking to cc82d925f7d661b78c74…
ppadti Jun 16, 2026
6e5f244
Update @odh-dashboard/model-registry tracking to d732d57664e59ccbc2fa…
ppadti Jun 16, 2026
79d4f05
Update @odh-dashboard/model-registry tracking to ac0dd5aeea75cc49fcb8…
ppadti Jun 17, 2026
7c4ee87
Update @odh-dashboard/model-registry: chore(deps): bump github.com/on…
ppadti Jun 17, 2026
34c3bb9
Update @odh-dashboard/model-registry tracking to 38c814ba9ca98ebc17d1…
ppadti Jun 17, 2026
af0d614
Update @odh-dashboard/model-registry: Fix the source label dispaly na…
ppadti Jun 17, 2026
7454d30
Update @odh-dashboard/model-registry: chore(deps): bump tmp from 0.2.…
ppadti Jun 17, 2026
7889bba
Update @odh-dashboard/model-registry tracking to 04942ad3c2c0f5750a73…
ppadti Jun 17, 2026
3e3ce9d
Update @odh-dashboard/model-registry: feat(ui): resolve hardware conf…
ppadti Jun 17, 2026
ae5aa79
Update @odh-dashboard/model-registry: chore(deps): bump form-data fro…
ppadti Jun 17, 2026
cdd3fec
Fix missing hyphen in validated models banner button text
ppadti Jun 17, 2026
3bbc4c9
Update @odh-dashboard/model-registry: chore(deps): bump github.com/on…
ppadti Jun 17, 2026
b8a6089
Update @odh-dashboard/model-registry: chore(deps): bump launch-editor…
ppadti Jun 17, 2026
de67a12
Update @odh-dashboard/model-registry: chore(deps): bump dompurify fro…
ppadti Jun 17, 2026
2df5f80
Update @odh-dashboard/model-registry: fix(ui): replace OuterScrollCon…
ppadti Jun 17, 2026
4ad3028
Update @odh-dashboard/model-registry: Fix the cold start filtering fr…
ppadti Jun 17, 2026
d923d4a
Remove trailing newline from package-lock.json
ppadti Jun 17, 2026
12d115c
Merge branch 'main' into mr-sync-2026-06-16
manaswinidas Jun 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/model-registry/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"branch": "main",
"src": "clients/ui",
"target": "upstream",
"commit": "3e8c430880aac2fbaf0b26e74d596609a5d95163"
"commit": "acdf0135544891be7e245017356b6731e5e01e56"
},
"module-federation": {
"name": "modelRegistry",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ const ValidatedModelsBanner: React.FC = () => {
onClick={handleExploreClick}
data-testid="explore-validated-models-button"
>
Explore Red Hat AI validated models
Explore Red Hat AI - validated models
</Button>
</CardFooter>
</Flex>
Expand Down
4 changes: 2 additions & 2 deletions packages/model-registry/upstream/bff/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ require (
github.com/google/uuid v1.6.0
github.com/julienschmidt/httprouter v1.3.0
github.com/kubeflow/hub/pkg/openapi v0.3.9
github.com/onsi/ginkgo/v2 v2.29.0
github.com/onsi/gomega v1.40.0
github.com/onsi/ginkgo/v2 v2.31.0
github.com/onsi/gomega v1.42.0
github.com/rs/cors v1.11.1
github.com/stretchr/testify v1.11.1
gopkg.in/yaml.v3 v3.0.1
Expand Down
8 changes: 4 additions & 4 deletions packages/model-registry/upstream/bff/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,10 @@ github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFd
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/onsi/ginkgo/v2 v2.29.0 h1:rfh+ZFjgJhYWRoIqVf3Uwx/W20yLrcrE2h2GmYVRaag=
github.com/onsi/ginkgo/v2 v2.29.0/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU9kNcA44=
github.com/onsi/gomega v1.40.0 h1:Vtol0e1MghCD2ZVIilPDIg44XSL9l2QAn8ZNaljWcJc=
github.com/onsi/gomega v1.40.0/go.mod h1:M/Uqpu/8qTjtzCLUA2zJHX9Iilrau25x1PdoSRbWh5A=
github.com/onsi/ginkgo/v2 v2.31.0 h1:GtuJos5DFUV9EerYJo8RhYxosYNGvOdDE5haKq6Grfs=
github.com/onsi/ginkgo/v2 v2.31.0/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU9kNcA44=
github.com/onsi/gomega v1.42.0 h1:CJby8u36xb7v34W78F8WKvqTQP7PCMIPB78IVDB73l4=
github.com/onsi/gomega v1.42.0/go.mod h1:M/Uqpu/8qTjtzCLUA2zJHX9Iilrau25x1PdoSRbWh5A=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
Expand Down
32 changes: 16 additions & 16 deletions packages/model-registry/upstream/frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/model-registry/upstream/frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@
"@patternfly/react-table": "^6.4.3",
"@patternfly/react-templates": "^6.4.0",
"classnames": "^2.2.6",
"dompurify": "^3.4.9",
"dompurify": "^3.4.10",
"js-yaml": "^4.1.1",
"lodash-es": "^4.18.1",
"mod-arch-core": "~1.18.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ export const mockCatalogLabelList = (partial?: Partial<CatalogLabelList>): Catal
}),
mockCatalogLabel({
name: 'Red Hat AI Validated',
displayName: 'Red Hat AI Validated models',
displayName: 'Red Hat AI - validated models',
description:
'Validated models are benchmarked for performance and quality using leading open source evaluation datasets. Some of these include tested runtime arguments for enabling additional capabilities.',
'Third-party models verified by Red Hat to ensure reliable performance and compatibility. Some of these include validated runtime arguments for enabling additional capabilities.',
}),
mockCatalogLabel({
name: 'Sample category 1',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,16 +273,23 @@ describe('Model Catalog Performance Filters API Behavior', () => {

cy.findByTestId(PERFORMANCE_FILTER_TEST_IDS.hardwareTable).should('exist');

// Change a filter to ensure something is set
// Change workload type filter
changeWorkloadTypeFilter();

// Click Clear all filters button in the toolbar (PatternFly's native button)
// Apply cold start filter (applies with default max value)
modelCatalog.openColdStartLatencyFilter();
modelCatalog.applyColdStartLatencyFilter();

// Click Reset all defaults button in the toolbar
cy.findByRole('button', { name: 'Reset all defaults' }).click();

// Verify filters are reset to defaults - workload type should NOT show Code Fixing
// Verify workload type is reset - should NOT show Code Fixing
cy.findByTestId(PERFORMANCE_FILTER_TEST_IDS.workloadType)
.should('be.visible')
.and('not.contain.text', 'Code Fixing');

// Verify cold start filter is still visible and reset to default
cy.findByTestId(PERFORMANCE_FILTER_TEST_IDS.coldStartLoadTime).should('be.visible');
});

it('should reset latency filter when Reset all filters is clicked', () => {
Expand Down Expand Up @@ -322,25 +329,6 @@ describe('Model Catalog Performance Filters API Behavior', () => {
});
});

it('should NOT include cold_start_time_to_load_seconds after toggle is turned OFF', () => {
visitWithPerformanceToggle(true);

modelCatalog.openColdStartLatencyFilter();
modelCatalog.applyColdStartLatencyFilter();

modelCatalog.togglePerformanceView();
modelCatalog.findLoadingState().should('not.exist');

cy.intercept('GET', '**/model_catalog/models*').as('getModelsWithoutColdStart');

triggerFilterRefresh();

cy.wait('@getModelsWithoutColdStart').then((interception) => {
const decodedUrl = decodeURIComponent(interception.request.url);
expect(decodedUrl).to.not.include('cold_start_time_to_load_seconds');
});
});

it('should pass cold_start_time_to_load_seconds as orderBy when cold start sort is selected', () => {
visitWithPerformanceToggle(true);

Expand Down Expand Up @@ -393,7 +381,7 @@ describe('Model Catalog Performance Filters API Behavior', () => {
});
});

it('should NOT include min_vram_gb after toggle is turned OFF', () => {
it('should still include min_vram_gb after toggle is turned OFF (basic filter)', () => {
visitWithPerformanceToggle(true);

cy.findByTestId('minimum-vram-filter').scrollIntoView();
Expand All @@ -403,17 +391,17 @@ describe('Model Catalog Performance Filters API Behavior', () => {
modelCatalog.togglePerformanceView();
modelCatalog.findLoadingState().should('not.exist');

cy.intercept('GET', '**/model_catalog/models*').as('getModelsWithoutVram');
cy.intercept('GET', '**/model_catalog/models*').as('getModelsWithVram');

triggerFilterRefresh();

cy.wait('@getModelsWithoutVram').then((interception) => {
cy.wait('@getModelsWithVram').then((interception) => {
const decodedUrl = decodeURIComponent(interception.request.url);
expect(decodedUrl).to.not.include('min_vram_gb');
expect(decodedUrl).to.include('min_vram_gb');
});
});

it('should NOT include modelcar_image_size after toggle is turned OFF', () => {
it('should still include modelcar_image_size after toggle is turned OFF (basic filter)', () => {
visitWithPerformanceToggle(true);

cy.findByTestId('container-size-filter').scrollIntoView();
Expand All @@ -423,13 +411,13 @@ describe('Model Catalog Performance Filters API Behavior', () => {
modelCatalog.togglePerformanceView();
modelCatalog.findLoadingState().should('not.exist');

cy.intercept('GET', '**/model_catalog/models*').as('getModelsWithoutContainerSize');
cy.intercept('GET', '**/model_catalog/models*').as('getModelsWithContainerSize');

triggerFilterRefresh();

cy.wait('@getModelsWithoutContainerSize').then((interception) => {
cy.wait('@getModelsWithContainerSize').then((interception) => {
const decodedUrl = decodeURIComponent(interception.request.url);
expect(decodedUrl).to.not.include('modelcar_image_size');
expect(decodedUrl).to.include('modelcar_image_size');
});
});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ export const getCatalogModelsBySource =
): Promise<CatalogModelList> => {
const computedFilterQuery =
filterQuery ??
(filterData && filterOptions ? filtersToFilterQuery(filterData, filterOptions) : '');
(filterData && filterOptions
? filtersToFilterQuery(filterData, filterOptions, 'models', !!performanceParams)
: '');

const allParams = {
source: sourceId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,8 @@ function useModelCatalogSetup(providerState: CatalogProviderState) {
baseSetFilterData(latencyKey, undefined);
});
baseSetFilterData(ModelCatalogStringFilterKey.HARDWARE_CONFIGURATION, []);
baseSetFilterData(ModelCatalogNumberFilterKey.MIN_VRAM, undefined);
baseSetFilterData(ModelCatalogNumberFilterKey.IMAGE_SIZE, undefined);
baseSetFilterData(ModelCatalogNumberFilterKey.MAX_RPS, undefined);
baseSetFilterData(ModelCatalogNumberFilterKey.COLD_START_LOAD_TIME, undefined);

// Then apply all defaults from namedQueries
const defaultQuery = filterOptions?.namedQueries?.[DEFAULT_PERFORMANCE_FILTERS_QUERY_NAME];
Expand All @@ -159,6 +159,8 @@ function useModelCatalogSetup(providerState: CatalogProviderState) {
baseSetFilterData(ModelCatalogStringFilterKey.LANGUAGE, []);
baseSetFilterData(ModelCatalogStringFilterKey.TENSOR_TYPE, []);
baseSetFilterData(ModelCatalogStringFilterKey.VALIDATED_CONFIGURATION, []);
baseSetFilterData(ModelCatalogNumberFilterKey.MIN_VRAM, undefined);
baseSetFilterData(ModelCatalogNumberFilterKey.IMAGE_SIZE, undefined);
}, [baseSetFilterData]);

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,12 @@ export type PerformanceMetricsCustomProperties = {
// Computed properties when targetRPS is provided
replicas?: ModelRegistryCustomPropertyInt;
total_requests_per_second?: ModelRegistryCustomPropertyDouble;
// Cold-start sub-type fields (returned by API with metricsType "performance-metrics")
performance_sub_type?: ModelRegistryCustomPropertyString;
gpu_type?: ModelRegistryCustomPropertyString;
gpu_count?: ModelRegistryCustomPropertyInt;
cold_start_time_to_load_seconds?: ModelRegistryCustomPropertyDouble;
runtime_command?: ModelRegistryCustomPropertyString;
} & Partial<Record<LatencyPropertyKey, ModelRegistryCustomPropertyDouble>>;

export type AccuracyMetricsCustomProperties = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@ import * as React from 'react';
import { DashboardEmptyTableView, Table, ManageColumnsModal } from 'mod-arch-shared';
import { Button, Spinner } from '@patternfly/react-core';
import { ColumnsIcon } from '@patternfly/react-icons';
import { OuterScrollContainer } from '@patternfly/react-table';
import { InnerScrollContainer } from '@patternfly/react-table';
import { CatalogPerformanceMetricsArtifact, HardwareConfiguration } from '~/app/modelCatalogTypes';
import { ModelCatalogContext } from '~/app/context/modelCatalog/ModelCatalogContext';
import { getActiveLatencyFieldName } from '~/app/pages/modelCatalog/utils/modelCatalogUtils';
import {
getActiveLatencyFieldName,
findMatchingHardwareConfig,
} from '~/app/pages/modelCatalog/utils/modelCatalogUtils';
import { getStringValue } from '~/app/utils';
import { SortOrder, PerformancePropertyKey } from '~/concepts/modelCatalog/const';
import {
Expand Down Expand Up @@ -106,15 +109,13 @@ const HardwareConfigurationTable: React.FC<HardwareConfigurationTableProps> = ({

return (
<>
<OuterScrollContainer>
{toolbarContent}
<InnerScrollContainer>
<Table
data-testid="hardware-configuration-table"
variant="compact"
isStickyHeader
hasStickyColumns
data={performanceArtifacts}
columns={columns}
toolbarContent={toolbarContent}
onClearFilters={handleClearFilters}
{...(hasActiveSort ? { defaultSortColumn: sortIndex } : {})}
{...controlledSortProps}
Expand All @@ -128,20 +129,25 @@ const HardwareConfigurationTable: React.FC<HardwareConfigurationTableProps> = ({
artifact.customProperties,
PerformancePropertyKey.HARDWARE_TYPE,
);
const matched = hardwareConfigurations?.find(
(c) => hwConfig.startsWith(c.gpu_type) || c.gpu_type === hwType,
);
const hwCount = artifact.customProperties?.hardware_count?.int_value
? parseInt(artifact.customProperties.hardware_count.int_value, 10)
: 1;
return (
<HardwareConfigurationTableRow
key={artifact.customProperties?.config_id?.string_value}
performanceArtifact={artifact}
columns={columns}
matchedHardwareConfig={matched}
matchedHardwareConfig={findMatchingHardwareConfig(
hardwareConfigurations ?? [],
hwConfig,
hwType,
hwCount,
)}
/>
);
}}
/>
</OuterScrollContainer>
</InnerScrollContainer>
<ManageColumnsModal
manageColumnsResult={manageColumnsResult}
description="Manage the columns that appear in the hardware configuration table."
Expand Down
Loading
Loading