diff --git a/backend/src/types.ts b/backend/src/types.ts index b487889eeb..909b0998e4 100644 --- a/backend/src/types.ts +++ b/backend/src/types.ts @@ -33,6 +33,7 @@ export type DashboardConfig = K8sResourceCommon & { disablePerformanceMetrics: boolean; disableKServe: boolean; disableKServeAuth: boolean; + disableKServeMetrics: boolean; disableModelMesh: boolean; disableAcceleratorProfiles: boolean; disablePipelineExperiments: boolean; diff --git a/backend/src/utils/constants.ts b/backend/src/utils/constants.ts index 4d39f675f1..ab4982fedf 100644 --- a/backend/src/utils/constants.ts +++ b/backend/src/utils/constants.ts @@ -58,6 +58,7 @@ export const blankDashboardCR: DashboardConfig = { disablePipelines: false, disableKServe: false, disableKServeAuth: false, + disableKServeMetrics: true, disableModelMesh: false, disableAcceleratorProfiles: false, disablePipelineExperiments: true, diff --git a/docs/dashboard-config.md b/docs/dashboard-config.md index 7edd859781..ef7f972284 100644 --- a/docs/dashboard-config.md +++ b/docs/dashboard-config.md @@ -27,6 +27,7 @@ The following are a list of features that are supported, along with there defaul | disableCustomServingRuntimes | false | Disables Custom Serving Runtimes from the Admin Panel. | | disableKServe | false | Disables the ability to select KServe as a Serving Platform. | | disableKServeAuth | false | Disables the ability to use auth in KServe. | +| disableKServeMetrics | true | Disables the ability to see KServe Metrics. | | disableModelMesh | false | Disables the ability to select ModelMesh as a Serving Platform. | | disableAcceleratorProfiles | false | Disables Accelerator profiles from the Admin Panel. | | modelMetricsNamespace | false | Enables the namespace in which the Model Serving Metrics' Prometheus Operator is installed. | @@ -59,6 +60,7 @@ spec: disableCustomServingRuntimes: false disableAcceleratorProfiles: false modelMetricsNamespace: '' + disableKServeMetrics: true disableBiasMetrics: false disablePerformanceMetrics: false disablePipelineExperiments: false @@ -154,6 +156,7 @@ spec: disableCustomServingRuntimes: false disableAcceleratorProfiles: true modelMetricsNamespace: '' + disableKServeMetrics: true disableBiasMetrics: false disablePerformanceMetrics: false disablePipelineExperiments: true diff --git a/frontend/src/__mocks__/mockDashboardConfig.ts b/frontend/src/__mocks__/mockDashboardConfig.ts index e66920a0e2..566e1f8b03 100644 --- a/frontend/src/__mocks__/mockDashboardConfig.ts +++ b/frontend/src/__mocks__/mockDashboardConfig.ts @@ -16,6 +16,7 @@ type MockDashboardConfigType = { disableCustomServingRuntimes?: boolean; disableKServe?: boolean; disableKServeAuth?: boolean; + disableKServeMetrics?: boolean; disableModelMesh?: boolean; disableAcceleratorProfiles?: boolean; disablePerformanceMetrics?: boolean; @@ -42,6 +43,7 @@ export const mockDashboardConfig = ({ disablePipelines = false, disableKServe = false, disableKServeAuth = false, + disableKServeMetrics = true, disableModelMesh = false, disableAcceleratorProfiles = false, disablePerformanceMetrics = false, @@ -81,6 +83,7 @@ export const mockDashboardConfig = ({ disablePerformanceMetrics, disableKServe, disableKServeAuth, + disableKServeMetrics, disableModelMesh, disableAcceleratorProfiles, disablePipelineExperiments, diff --git a/frontend/src/__tests__/cypress/cypress/e2e/modelServing/ModelServingGlobal.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/modelServing/ModelServingGlobal.cy.ts index bef9dbf055..d507ff03e2 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/modelServing/ModelServingGlobal.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/modelServing/ModelServingGlobal.cy.ts @@ -36,6 +36,7 @@ type HandlersProps = { inferenceServices?: InferenceServiceKind[]; delayInferenceServices?: boolean; delayServingRuntimes?: boolean; + disableKServeMetrics?: boolean; }; const initIntercepts = ({ @@ -46,6 +47,7 @@ const initIntercepts = ({ inferenceServices = [mockInferenceServiceK8sResource({})], delayInferenceServices, delayServingRuntimes, + disableKServeMetrics, }: HandlersProps) => { cy.interceptOdh( 'GET /api/dsc/status', @@ -58,6 +60,7 @@ const initIntercepts = ({ mockDashboardConfig({ disableKServe: disableKServeConfig, disableModelMesh: disableModelMeshConfig, + disableKServeMetrics, }), ); cy.interceptK8sList(ServingRuntimeModel, mockK8sResourceList(servingRuntimes)); @@ -478,6 +481,22 @@ describe('Model Serving Global', () => { modelServingGlobal.findDeployModelButton().click(); cy.findByText('Error creating model server').should('not.exist'); }); + it('Navigate to kserve model metrics page only if enabled', () => { + initIntercepts({}); + modelServingGlobal.visit('test-project'); + + // Verify initial run rows exist + modelServingGlobal.getModelRow('Test Inference Service').should('have.length', 1); + modelServingGlobal.getModelMetricLink('Test Inference Service').should('not.exist'); + + initIntercepts({ disableKServeMetrics: false }); + modelServingGlobal.visit('test-project'); + + modelServingGlobal.getModelRow('Test Inference Service').should('have.length', 1); + modelServingGlobal.getModelMetricLink('Test Inference Service').should('be.visible'); + modelServingGlobal.getModelMetricLink('Test Inference Service').click(); + cy.findByTestId('kserve-metrics-page').should('be.visible'); + }); describe('Table filter and pagination', () => { it('filter by name', () => { diff --git a/frontend/src/__tests__/cypress/cypress/e2e/projects/projectDetails.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/projects/projectDetails.cy.ts index c2c55a9d7d..4d2ce30fb1 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/projects/projectDetails.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/projects/projectDetails.cy.ts @@ -26,12 +26,17 @@ import { SecretModel, ServiceAccountModel, TemplateModel, + InferenceServiceModel, + ServingRuntimeModel, } from '~/__tests__/cypress/cypress/utils/models'; +import { mockServingRuntimeK8sResource } from '~/__mocks__/mockServingRuntimeK8sResource'; +import { mockInferenceServiceK8sResource } from '~/__mocks__/mockInferenceServiceK8sResource'; type HandlersProps = { isEmpty?: boolean; imageStreamName?: string; disableKServeConfig?: boolean; + disableKServeMetrics?: boolean; disableModelConfig?: boolean; isEnabled?: string; isUnknown?: boolean; @@ -43,6 +48,7 @@ type HandlersProps = { const initIntercepts = ({ disableKServeConfig, + disableKServeMetrics, disableModelConfig, isEmpty = false, imageStreamName = 'test-image', @@ -96,6 +102,7 @@ const initIntercepts = ({ mockDashboardConfig({ disableKServe: disableKServeConfig, disableModelMesh: disableModelConfig, + disableKServeMetrics, }), ); if (pipelineServerInstalled) { @@ -233,6 +240,13 @@ const initIntercepts = ({ }; describe('Project Details', () => { + const servingRuntimes = [mockServingRuntimeK8sResource({})]; + const inferenceServices = [mockInferenceServiceK8sResource({})]; + const initModelServingIntercepts = () => { + cy.interceptK8sList(ServingRuntimeModel, mockK8sResourceList(servingRuntimes)); + cy.interceptK8sList(InferenceServiceModel, mockK8sResourceList(inferenceServices)); + }; + describe('Empty project details', () => { it('Empty state component in project details', () => { initIntercepts({ isEmpty: true }); @@ -271,6 +285,26 @@ describe('Project Details', () => { projectDetails.findServingPlatformLabel().should('have.text', 'Single-model serving enabled'); }); + it('Shows KServe metrics only when available', () => { + initIntercepts({ templates: true, disableKServeConfig: false, disableModelConfig: true }); + initModelServingIntercepts(); + + projectDetails.visitSection('test-project', 'model-server'); + projectDetails.getKserveModelMetricLink('Test Inference Service').should('not.exist'); + + initIntercepts({ + templates: true, + disableKServeConfig: false, + disableModelConfig: true, + disableKServeMetrics: false, + }); + initModelServingIntercepts(); + + projectDetails.visitSection('test-project', 'model-server'); + projectDetails.getKserveModelMetricLink('Test Inference Service').should('be.visible'); + projectDetails.getKserveModelMetricLink('Test Inference Service').click(); + cy.findByTestId('kserve-metrics-page').should('be.visible'); + }); it('Multi model serving platform is enabled', () => { initIntercepts({ templates: true, disableKServeConfig: true, disableModelConfig: false }); projectDetails.visit('test-project'); diff --git a/frontend/src/__tests__/cypress/cypress/pages/modelServing.ts b/frontend/src/__tests__/cypress/cypress/pages/modelServing.ts index ecfcb9bcf4..0af165b0c2 100644 --- a/frontend/src/__tests__/cypress/cypress/pages/modelServing.ts +++ b/frontend/src/__tests__/cypress/cypress/pages/modelServing.ts @@ -61,6 +61,10 @@ class ModelServingGlobal { return this.findModelsTable().find(`[data-label=Name]`).contains(name).parents('tr'); } + getModelMetricLink(name: string) { + return this.findModelsTable().findByTestId(`metrics-link-${name}`); + } + findEmptyResults() { return cy.findByTestId('no-result-found-title'); } diff --git a/frontend/src/__tests__/cypress/cypress/pages/projects.ts b/frontend/src/__tests__/cypress/cypress/pages/projects.ts index ab02c97cb8..b271a0121a 100644 --- a/frontend/src/__tests__/cypress/cypress/pages/projects.ts +++ b/frontend/src/__tests__/cypress/cypress/pages/projects.ts @@ -221,6 +221,14 @@ class ProjectDetails { findUnsupportedPipelineVersionAlert() { return cy.findByTestId('unsupported-pipeline-version-alert'); } + + private findKserveModelsTable() { + return cy.findByTestId('kserve-inference-service-table'); + } + + getKserveModelMetricLink(name: string) { + return this.findKserveModelsTable().findByTestId(`metrics-link-${name}`); + } } class ProjectDetailsSettingsTab extends ProjectDetails { diff --git a/frontend/src/concepts/areas/const.ts b/frontend/src/concepts/areas/const.ts index 4a13cbbdc7..fad0f0fa6d 100644 --- a/frontend/src/concepts/areas/const.ts +++ b/frontend/src/concepts/areas/const.ts @@ -37,6 +37,10 @@ export const SupportedAreasStateMap: SupportedAreasState = { reliantAreas: [SupportedArea.K_SERVE], requiredCapabilities: [StackCapability.SERVICE_MESH, StackCapability.SERVICE_MESH_AUTHZ], }, + [SupportedArea.K_SERVE_METRICS]: { + featureFlags: ['disableKServeMetrics'], + reliantAreas: [SupportedArea.K_SERVE, SupportedArea.MODEL_SERVING], + }, [SupportedArea.MODEL_MESH]: { featureFlags: ['disableModelMesh'], requiredComponents: [StackComponent.MODEL_MESH], @@ -59,7 +63,6 @@ export const SupportedAreasStateMap: SupportedAreasState = { }, [SupportedArea.PERFORMANCE_METRICS]: { featureFlags: ['disablePerformanceMetrics'], - requiredComponents: [StackComponent.MODEL_MESH], // TODO: remove when KServe support is added reliantAreas: [SupportedArea.MODEL_SERVING], }, [SupportedArea.TRUSTY_AI]: { diff --git a/frontend/src/concepts/areas/types.ts b/frontend/src/concepts/areas/types.ts index bbfad94248..332523cac7 100644 --- a/frontend/src/concepts/areas/types.ts +++ b/frontend/src/concepts/areas/types.ts @@ -46,6 +46,7 @@ export enum SupportedArea { CUSTOM_RUNTIMES = 'custom-serving-runtimes', K_SERVE = 'kserve', K_SERVE_AUTH = 'kserve-auth', + K_SERVE_METRICS = 'kserve-metrics', MODEL_MESH = 'model-mesh', BIAS_METRICS = 'bias-metrics', PERFORMANCE_METRICS = 'performance-metrics', diff --git a/frontend/src/k8sTypes.ts b/frontend/src/k8sTypes.ts index 2d3d3aedd6..5ae1c0a363 100644 --- a/frontend/src/k8sTypes.ts +++ b/frontend/src/k8sTypes.ts @@ -1211,6 +1211,7 @@ export type DashboardCommonConfig = { disablePerformanceMetrics: boolean; disableKServe: boolean; disableKServeAuth: boolean; + disableKServeMetrics: boolean; disableModelMesh: boolean; disableAcceleratorProfiles: boolean; // TODO Temp feature flag - remove with https://issues.redhat.com/browse/RHOAIENG-3826 diff --git a/frontend/src/pages/modelServing/screens/global/InferenceServiceTableRow.tsx b/frontend/src/pages/modelServing/screens/global/InferenceServiceTableRow.tsx index e04d42e7e9..863f275e79 100644 --- a/frontend/src/pages/modelServing/screens/global/InferenceServiceTableRow.tsx +++ b/frontend/src/pages/modelServing/screens/global/InferenceServiceTableRow.tsx @@ -6,6 +6,8 @@ import ResourceNameTooltip from '~/components/ResourceNameTooltip'; import useModelMetricsEnabled from '~/pages/modelServing/useModelMetricsEnabled'; import { InferenceServiceKind, ServingRuntimeKind } from '~/k8sTypes'; import { isModelMesh } from '~/pages/modelServing/utils'; +import { SupportedArea } from '~/concepts/areas'; +import useIsAreaAvailable from '~/concepts/areas/useIsAreaAvailable'; import { getInferenceServiceDisplayName } from './utils'; import InferenceServiceEndpoint from './InferenceServiceEndpoint'; import InferenceServiceProject from './InferenceServiceProject'; @@ -31,28 +33,42 @@ const InferenceServiceTableRow: React.FC = ({ showServingRuntime, }) => { const [modelMetricsEnabled] = useModelMetricsEnabled(); + const kserveMetricsEnabled = useIsAreaAvailable(SupportedArea.K_SERVE_METRICS).status; - const modelMetricsSupported = (modelMetricsInferenceService: InferenceServiceKind) => - modelMetricsEnabled && - modelMetricsInferenceService.metadata.annotations?.['serving.kserve.io/deploymentMode'] === - 'ModelMesh'; + const modelMesh = isModelMesh(inferenceService); + const modelMeshMetricsSupported = modelMetricsEnabled && modelMesh; + const kserveMetricsSupported = modelMetricsEnabled && kserveMetricsEnabled && !modelMesh; + + const displayName = getInferenceServiceDisplayName(inferenceService); return ( <> - {modelMetricsSupported(inferenceService) ? ( + {modelMeshMetricsSupported ? ( - {getInferenceServiceDisplayName(inferenceService)} + {displayName} + + ) : kserveMetricsSupported ? ( + + {displayName} ) : ( - getInferenceServiceDisplayName(inferenceService) + displayName )} @@ -70,20 +86,17 @@ const InferenceServiceTableRow: React.FC = ({ - + { isActive: true, }, ]} + model={model} type={PerformanceMetricType.MODEL} /> ); diff --git a/frontend/src/pages/modelServing/screens/metrics/MetricsPage.tsx b/frontend/src/pages/modelServing/screens/metrics/MetricsPage.tsx index e67474ab74..ba4f0666a9 100644 --- a/frontend/src/pages/modelServing/screens/metrics/MetricsPage.tsx +++ b/frontend/src/pages/modelServing/screens/metrics/MetricsPage.tsx @@ -9,15 +9,17 @@ import { MetricsTabKeys } from '~/pages/modelServing/screens/metrics/types'; import { PerformanceMetricType } from '~/pages/modelServing/screens/types'; import { TrustyAIContext } from '~/concepts/trustyai/context/TrustyAIContext'; import ServerMetricsPage from '~/pages/modelServing/screens/metrics/performance/ServerMetricsPage'; +import { InferenceServiceKind } from '~/k8sTypes'; import { getBreadcrumbItemComponents } from './utils'; type MetricsPageProps = { title: string; breadcrumbItems: BreadcrumbItemType[]; type: PerformanceMetricType; + model?: InferenceServiceKind; }; -const MetricsPage: React.FC = ({ title, breadcrumbItems, type }) => { +const MetricsPage: React.FC = ({ title, breadcrumbItems, type, model }) => { const { tab } = useParams(); const navigate = useNavigate(); @@ -46,7 +48,11 @@ const MetricsPage: React.FC = ({ title, breadcrumbItems, type ) } > - {type === PerformanceMetricType.SERVER ? : } + {type === PerformanceMetricType.SERVER ? ( + + ) : model ? ( + + ) : null} ); }; diff --git a/frontend/src/pages/modelServing/screens/metrics/MetricsPageTabs.tsx b/frontend/src/pages/modelServing/screens/metrics/MetricsPageTabs.tsx index 8ed2e2438d..d9d7010988 100644 --- a/frontend/src/pages/modelServing/screens/metrics/MetricsPageTabs.tsx +++ b/frontend/src/pages/modelServing/screens/metrics/MetricsPageTabs.tsx @@ -6,6 +6,7 @@ import { useModelBiasData } from '~/concepts/trustyai/context/useModelBiasData'; import NotFound from '~/pages/NotFound'; import useDoesTrustyAICRExist from '~/concepts/trustyai/context/useDoesTrustyAICRExist'; import { SupportedArea, useIsAreaAvailable } from '~/concepts/areas'; +import { InferenceServiceKind } from '~/k8sTypes'; import PerformanceTab from './performance/PerformanceTab'; import BiasTab from './bias/BiasTab'; import BiasConfigurationAlertPopover from './bias/BiasConfigurationPage/BiasConfigurationAlertPopover'; @@ -13,7 +14,11 @@ import useMetricsPageEnabledTabs from './useMetricsPageEnabledTabs'; import './MetricsPageTabs.scss'; -const MetricsPageTabs: React.FC = () => { +type MetricsPageTabsProps = { + model: InferenceServiceKind; +}; + +const MetricsPageTabs: React.FC = ({ model }) => { const enabledTabs = useMetricsPageEnabledTabs(); const { biasMetricConfigs, loaded } = useModelBiasData(); const [biasMetricsInstalled] = useDoesTrustyAICRExist(); @@ -35,6 +40,10 @@ const MetricsPageTabs: React.FC = () => { return ; } + if (enabledTabs.length === 1) { + return performanceMetricsAreaAvailable ? : ; + } + return ( { className="odh-metrics-page-tabs__content" data-testid="performance-tab" > - + )} {biasMetricsInstalled && ( diff --git a/frontend/src/pages/modelServing/screens/metrics/performance/PerformanceTab.tsx b/frontend/src/pages/modelServing/screens/metrics/performance/PerformanceTab.tsx index 2ec0d26e68..26712183d6 100644 --- a/frontend/src/pages/modelServing/screens/metrics/performance/PerformanceTab.tsx +++ b/frontend/src/pages/modelServing/screens/metrics/performance/PerformanceTab.tsx @@ -1,23 +1,57 @@ -import React, { ReactElement } from 'react'; -import { PageSection, Stack, StackItem } from '@patternfly/react-core'; -import ModelGraphs from '~/pages/modelServing/screens/metrics/performance/ModelGraphs'; +import React from 'react'; +import { + EmptyState, + EmptyStateHeader, + EmptyStateIcon, + PageSection, + Stack, + StackItem, +} from '@patternfly/react-core'; +import { PendingIcon } from '@patternfly/react-icons'; +import { InferenceServiceKind } from '~/k8sTypes'; +import { SupportedArea, useIsAreaAvailable } from '~/concepts/areas'; import MetricsPageToolbar from '~/concepts/metrics/MetricsPageToolbar'; +import { isModelMesh } from '~/pages/modelServing/utils'; +import ModelGraphs from '~/pages/modelServing/screens/metrics/performance/ModelGraphs'; import { ModelMetricType } from '~/pages/modelServing/screens/metrics/ModelServingMetricsContext'; import EnsureMetricsAvailable from '~/pages/modelServing/screens/metrics/EnsureMetricsAvailable'; -const PerformanceTab = (): ReactElement => ( - - - - - - - - - - -); +type PerformanceTabsProps = { + model: InferenceServiceKind; +}; + +const PerformanceTab: React.FC = ({ model }) => { + const kserve = !isModelMesh(model); + const kserveMetricsEnabled = useIsAreaAvailable(SupportedArea.K_SERVE_METRICS).status; + + if (kserve && kserveMetricsEnabled) { + return ( + + } + alt="" + /> + + ); + } + + return ( + + + + + + + + + + + ); +}; + export default PerformanceTab; diff --git a/frontend/src/pages/modelServing/screens/projects/ProjectModelMetricsPage.tsx b/frontend/src/pages/modelServing/screens/projects/ProjectModelMetricsPage.tsx index e96e8324b7..a5687d8c1f 100644 --- a/frontend/src/pages/modelServing/screens/projects/ProjectModelMetricsPage.tsx +++ b/frontend/src/pages/modelServing/screens/projects/ProjectModelMetricsPage.tsx @@ -26,6 +26,7 @@ const ProjectModelMetricsPage: React.FC = () => { }, ]} type={PerformanceMetricType.MODEL} + model={model} /> ); }; diff --git a/frontend/src/pages/projects/screens/detail/overview/serverModels/deployedModels/DeployedModelCard.tsx b/frontend/src/pages/projects/screens/detail/overview/serverModels/deployedModels/DeployedModelCard.tsx index fb58b8018d..a0b2b6640b 100644 --- a/frontend/src/pages/projects/screens/detail/overview/serverModels/deployedModels/DeployedModelCard.tsx +++ b/frontend/src/pages/projects/screens/detail/overview/serverModels/deployedModels/DeployedModelCard.tsx @@ -23,6 +23,7 @@ import useModelMetricsEnabled from '~/pages/modelServing/useModelMetricsEnabled' import InferenceServiceServingRuntime from '~/pages/modelServing/screens/global/InferenceServiceServingRuntime'; import InferenceServiceEndpoint from '~/pages/modelServing/screens/global/InferenceServiceEndpoint'; import TypeBorderedCard from '~/concepts/design/TypeBorderedCard'; +import { SupportedArea, useIsAreaAvailable } from '~/concepts/areas/'; interface DeployedModelCardProps { inferenceService: InferenceServiceKind; @@ -33,10 +34,11 @@ const DeployedModelCard: React.FC = ({ servingRuntime, }) => { const [modelMetricsEnabled] = useModelMetricsEnabled(); + const kserveMetricsEnabled = useIsAreaAvailable(SupportedArea.K_SERVE_METRICS).status; + const modelMesh = isModelMesh(inferenceService); + + const modelMetricsSupported = modelMetricsEnabled && (modelMesh || kserveMetricsEnabled); - const modelMetricsSupported = - modelMetricsEnabled && - inferenceService.metadata.annotations?.['serving.kserve.io/deploymentMode'] === 'ModelMesh'; const inferenceServiceDisplayName = getInferenceServiceDisplayName(inferenceService); return ( diff --git a/manifests/crd/odhdashboardconfigs.opendatahub.io.crd.yaml b/manifests/crd/odhdashboardconfigs.opendatahub.io.crd.yaml index 8a1b8dbe6f..e3cf6c4a65 100644 --- a/manifests/crd/odhdashboardconfigs.opendatahub.io.crd.yaml +++ b/manifests/crd/odhdashboardconfigs.opendatahub.io.crd.yaml @@ -61,6 +61,8 @@ spec: type: boolean disableKServeAuth: type: boolean + disableKServeMetrics: + type: boolean disableModelMesh: type: boolean disableAcceleratorProfiles: diff --git a/manifests/overlays/odhdashboardconfig/odh-dashboard-config.yaml b/manifests/overlays/odhdashboardconfig/odh-dashboard-config.yaml index ef5b2b03f6..db4a69a0e3 100644 --- a/manifests/overlays/odhdashboardconfig/odh-dashboard-config.yaml +++ b/manifests/overlays/odhdashboardconfig/odh-dashboard-config.yaml @@ -25,6 +25,7 @@ spec: disableAcceleratorProfiles: true disableKServe: false disableKServeAuth: false + disableKServeMetrics: true disableModelMesh: false disableDistributedWorkloads: false notebookController: diff --git a/manifests/overlays/odhdashboardconfig/odhdashboardconfig.yaml b/manifests/overlays/odhdashboardconfig/odhdashboardconfig.yaml index aa15f080f5..297c610b75 100644 --- a/manifests/overlays/odhdashboardconfig/odhdashboardconfig.yaml +++ b/manifests/overlays/odhdashboardconfig/odhdashboardconfig.yaml @@ -24,6 +24,7 @@ spec: disableAcceleratorProfiles: false disableKServe: false disableKServeAuth: false + disableKServeMetrics: true disableModelMesh: false disableDistributedWorkloads: false disableModelRegistry: true