-
Notifications
You must be signed in to change notification settings - Fork 212
[wip] added model deployment details tab extension #4426
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
base: main
Are you sure you want to change the base?
[wip] added model deployment details tab extension #4426
Conversation
WalkthroughThis update introduces a comprehensive set of TypeScript declaration files for the model registry frontend, covering all major components, hooks, utilities, and extension points. It also refactors how model version detail tabs are rendered, shifting from hardcoded logic to a dynamic, extension-driven approach. Additionally, package configuration and linting scripts are updated. Changes
Sequence Diagram(s)sequenceDiagram
participant UI
participant Extensions
participant ModelServing
UI->>Extensions: useExtensions('model-registry.version-details/tab')
Extensions-->>UI: Return array of tab extensions
loop For each extension
UI->>ModelServing: Dynamically import extension component
ModelServing-->>UI: Render extension tab with props
end
UI->>UI: Render all tabs (static + dynamic)
Possibly related PRs
Suggested reviewers
Poem
✨ 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 (
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: The full list of commands accepted by this bot can be found here.
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
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: 0
🧹 Nitpick comments (4)
frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx (1)
37-39
: Consider handling multiple extensions.The current implementation only uses the first extension (
extensions[0]
) if multiple deployment tab extensions are registered. Consider whether this limitation is intentional or if multiple tabs should be supported.frontend/packages/modelServing/src/components/deployments/DeploymentsTab.tsx (2)
4-4
: Consider using a shorter import alias for maintainability.The import path is quite long and fragile. Consider creating a barrel export or alias to make this more maintainable.
-import ModelVersionRegisteredDeploymentsView from '../../../../model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionRegisteredDeploymentsView'; +// Consider creating a barrel export in model-registry package, e.g.: +// import { ModelVersionRegisteredDeploymentsView } from '@odh-dashboard/model-registry';
12-12
: Consider making eventKey configurable.The
eventKey="deployments"
is hardcoded. If this extension system is meant to be flexible, consider making the eventKey configurable through the extension properties.frontend/packages/modelServing/extensions.ts (1)
42-49
: Consider whether this extension needs conditional flags.The new deployment tab extension doesn't have any
flags
property, unlike other extensions in this file that userequired: [PLUGIN_MODEL_SERVING]
. Consider whether this extension should also be conditional based on feature flags or plugin availability.{ type: 'model-registry.version-details/tab', properties: { id: 'model-registry-deployments', title: 'Deployments', component: () => import('./src/components/deployments/DeploymentsTab'), }, + flags: { + required: [PLUGIN_MODEL_SERVING], + }, },
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
frontend/packages/model-registry/extension-points/index.ts
(1 hunks)frontend/packages/model-registry/package.json
(1 hunks)frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx
(4 hunks)frontend/packages/modelServing/extensions.ts
(3 hunks)frontend/packages/modelServing/src/components/deployments/DeploymentsTab.tsx
(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
frontend/packages/model-registry/package.json (1)
Learnt from: christianvogt
PR: opendatahub-io/odh-dashboard#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.
🧬 Code Graph Analysis (4)
frontend/packages/modelServing/extensions.ts (1)
frontend/packages/model-registry/extension-points/index.ts (1)
ModelRegistryDeploymentsTabExtension
(10-17)
frontend/packages/modelServing/src/components/deployments/DeploymentsTab.tsx (2)
frontend/packages/model-registry/extension-points/index.ts (1)
ModelVersionRegisteredDeploymentsViewProps
(5-8)frontend/src/__tests__/cypress/cypress/pages/servingRuntimes.ts (1)
servingRuntimes
(155-155)
frontend/packages/model-registry/extension-points/index.ts (1)
frontend/packages/plugin-core/src/extension-points/types.ts (1)
ComponentCodeRef
(3-3)
frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx (3)
frontend/packages/plugin-core/src/core/useExtensions.ts (1)
useExtensions
(1-1)frontend/packages/model-registry/extension-points/index.ts (1)
isModelRegistryDeploymentsTabExtension
(19-22)frontend/packages/plugin-core/src/core/helpers/LazyCodeRefComponent.tsx (1)
LazyCodeRefComponent
(9-29)
🔇 Additional comments (5)
frontend/packages/model-registry/package.json (1)
35-37
: LGTM! Proper module export pattern.The addition of the
exports
field follows Node.js standards and correctly exposes the extension-points module for use by other packages.frontend/packages/model-registry/extension-points/index.ts (1)
1-23
: Well-structured extension point definitions.The type definitions follow TypeScript best practices:
- Good use of
Pick<>
utility type to extract only needed props- Proper extension type definition with correct generic parameters
- Standard type guard implementation pattern
The code is clean and maintainable.
frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx (1)
65-88
: ```shell
#!/bin/bashRe-run search without relying on ripgrep's type definitions for tsx
echo "Searching for deploymentMode usage across .ts and .tsx files..."
rg -A3 -B3 "deploymentMode.===.DeploymentMode\.(Standalone|ModelMesh)" -g '.ts' -g '.tsx'echo "Searching for platformMode usage across .ts and .tsx files..."
rg -A3 -B3 "platformMode.!==.PlatformMode\.Kubeflow" -g '.ts' -g '.tsx'echo "Searching for any deploymentMode or platformMode references..."
rg -A5 "deploymentMode.DeploymentMode|platformMode.PlatformMode" -g '.ts' -g '.tsx'</details> <details> <summary>frontend/packages/modelServing/src/components/deployments/DeploymentsTab.tsx (1)</summary> `6-25`: **Component implementation follows PatternFly patterns correctly.** The component structure and prop forwarding are implemented correctly, following established PatternFly patterns. </details> <details> <summary>frontend/packages/modelServing/extensions.ts (1)</summary> `11-11`: **LGTM! Proper type import.** The import of `ModelRegistryDeploymentsTabExtension` is correctly added and the type is properly included in the union type. </details> </blockquote></details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
import type ModelVersionDetailsTabs from '../upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs'; | ||
import type { ComponentCodeRef } from '../../plugin-core/src/extension-points/types'; |
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.
Yikes. We need a better solution than relative import to upstream
. I'll make a note of this for future improvements to working with the upstream code.
For plugin-core use @odh-dashbaord/plugin-core
export type ModelVersionRegisteredDeploymentsViewProps = Pick< | ||
React.ComponentProps<typeof ModelVersionDetailsTabs>, | ||
'inferenceServices' | 'servingRuntimes' | 'refresh' | ||
>; |
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.
I would prefer to see the extension defining their own prop types rather that picking from ModelVersionDetailsTabs
.
const extensions = useExtensions(isModelRegistryDeploymentsTabExtension); | ||
const extension = extensions.length ? extensions[0] : null; |
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.
We'll eventually be creating some reusable extensible components such as tabs. But in the meantime you may as well just do the standard extension thing and loop over all extensions; rendering a tab per extension.
893bd0f
to
7098129
Compare
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: 1
🧹 Nitpick comments (3)
frontend/packages/modelServing/src/components/deployments/types.ts (3)
26-35
: Consider adding JSDoc comments for domain-specific types.The annotation and label types contain Kubernetes-specific keys that would benefit from documentation explaining their purpose and expected values.
+/** + * Annotations specific to KServe InferenceService resources + */ export type InferenceServiceAnnotations = Partial<{ + /** Enables/disables authentication for the inference service */ 'security.kubeflow.io/enable-auth': string; }>; + +/** + * Labels for controlling network visibility and exposure + */ export type InferenceServiceLabels = Partial<{ + /** Controls Knative service visibility */ 'networking.knative.dev/visibility': string; + /** Exposes the service externally via KServe */ 'networking.kserve.io/visibility': 'exposed'; }>;
36-113
: Consider breaking down the large InferenceServiceKind type for better maintainability.This type definition is comprehensive but quite large (77 lines). Consider extracting nested types like
InferenceServiceSpec
,InferenceServiceStatus
, andPredictorSpec
to improve readability and reusability.Example refactor:
+export type PredictorSpec = { + tolerations?: Toleration[]; + nodeSelector?: NodeSelector; + model?: { + // ... model configuration + }; + maxReplicas?: number; + minReplicas?: number; + imagePullSecrets?: ImagePullSecret[]; +}; + +export type InferenceServiceSpec = { + predictor: PredictorSpec; +}; + +export type InferenceServiceStatus = { + // ... status fields +}; + export type InferenceServiceKind = K8sResourceCommon & { metadata: { // ... metadata }; - spec: { - predictor: { - // ... large nested structure - }; - }; - status?: { - // ... large nested structure - }; + spec: InferenceServiceSpec; + status?: InferenceServiceStatus; };
171-171
: Remove the incorrect source map comment.The comment references "k8sTypes.d.ts.map" but the current filename is "types.ts". This appears to be a copy-paste artifact that should be removed.
-//# sourceMappingURL=k8sTypes.d.ts.map
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (11)
frontend/packages/model-registry/extension-points/index.ts
(1 hunks)frontend/packages/model-registry/package.json
(1 hunks)frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx
(4 hunks)frontend/packages/model-registry/upstream/frontend/tsconfig.json
(1 hunks)frontend/packages/model-registry/upstream/frontend/types.ts
(1 hunks)frontend/packages/modelServing/extensions.ts
(3 hunks)frontend/packages/modelServing/src/components/deployments/DeploymentsTab.tsx
(1 hunks)frontend/packages/modelServing/src/components/deployments/EmptyModelRegistryState.tsx
(1 hunks)frontend/packages/modelServing/src/components/deployments/ModelVersionRegisteredDeploymentsView.tsx
(1 hunks)frontend/packages/modelServing/src/components/deployments/types.ts
(1 hunks)frontend/packages/plugin-core/src/extension-points/index.ts
(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- frontend/packages/modelServing/src/components/deployments/EmptyModelRegistryState.tsx
🚧 Files skipped from review as they are similar to previous changes (9)
- frontend/packages/model-registry/upstream/frontend/tsconfig.json
- frontend/packages/model-registry/package.json
- frontend/packages/plugin-core/src/extension-points/index.ts
- frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx
- frontend/packages/model-registry/extension-points/index.ts
- frontend/packages/model-registry/upstream/frontend/types.ts
- frontend/packages/modelServing/src/components/deployments/ModelVersionRegisteredDeploymentsView.tsx
- frontend/packages/modelServing/extensions.ts
- frontend/packages/modelServing/src/components/deployments/DeploymentsTab.tsx
🧰 Additional context used
🧬 Code Graph Analysis (1)
frontend/packages/modelServing/src/components/deployments/types.ts (3)
frontend/packages/model-registry/upstream/frontend/types.ts (1)
ModelVersionRegisteredDeploymentsViewProps
(4-10)frontend/src/utilities/useFetch.ts (1)
FetchStateObject
(37-43)backend/src/types.ts (1)
K8sResourceCommon
(139-149)
🔇 Additional comments (3)
frontend/packages/modelServing/src/components/deployments/types.ts (3)
1-11
: LGTM! Imports are well-structured and properly typed.The imports cover all necessary dependencies including internal types, utilities, and Kubernetes SDK types. All imported types are utilized throughout the file.
21-25
: LGTM! Enum follows TypeScript best practices.The
ServingDeploymentMode
enum uses string values that match the enum keys, which provides good debugging experience and serialization safety.
114-170
: LGTM! Supporting types are well-structured and follow Kubernetes patterns.The
Toleration
,ServingContainer
, andServingRuntimeKind
types properly model Kubernetes resources with appropriate optional fields and nested structures.
export type ModelVersionRegisteredDeploymentsViewProps = { | ||
id: string; | ||
title: string; | ||
inferenceServices: FetchStateObject<InferenceServiceKind[]>; | ||
servingRuntimes: FetchStateObject<ServingRuntimeKind[]>; | ||
refresh: () => void; | ||
}; |
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.
💡 Verification agent
🧩 Analysis chain
Verify type duplication across packages.
The ModelVersionRegisteredDeploymentsViewProps
type appears to be duplicated in frontend/packages/model-registry/upstream/frontend/types.ts
according to the relevant code snippets. Consider centralizing this shared type to avoid maintenance issues.
🏁 Script executed:
#!/bin/bash
# Description: Check for duplicate type definitions across packages
# Expected: Find identical type definitions that should be centralized
# Search for ModelVersionRegisteredDeploymentsViewProps across the codebase
rg -A 10 "ModelVersionRegisteredDeploymentsViewProps"
Length of output: 12419
Extract and centralize ModelVersionRegisteredDeploymentsViewProps
The ModelVersionRegisteredDeploymentsViewProps
type is currently duplicated in multiple packages:
- frontend/packages/modelServing/src/components/deployments/types.ts
- frontend/packages/model-registry/upstream/frontend/types.ts
Keeping identical definitions in sync across packages risks drift and increases maintenance overhead. Please:
• Move this shared type into a common module (e.g., frontend/packages/shared/types.ts
).
• Update imports in both model-serving and model-registry to reference the centralized definition.
🤖 Prompt for AI Agents
In frontend/packages/modelServing/src/components/deployments/types.ts lines 13
to 19, the ModelVersionRegisteredDeploymentsViewProps type is duplicated across
packages. Move this type definition to a common shared module like
frontend/packages/shared/types.ts, then update the imports in both modelServing
and model-registry packages to import it from this centralized location to avoid
duplication and maintenance issues.
4f00f56
to
a51f850
Compare
<Tab | ||
eventKey={id} | ||
title={<TabTitleText>{title}</TabTitleText>} | ||
aria-label="Deployments tab" | ||
data-testid="deployments-tab" | ||
> | ||
<PageSection hasBodyWrapper={false} isFilled data-testid="deployments-tab-content"> | ||
<ModelVersionRegisteredDeploymentsView | ||
inferenceServices={inferenceServices} | ||
servingRuntimes={servingRuntimes} | ||
refresh={refresh} | ||
/> | ||
</PageSection> | ||
</Tab> |
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.
The parent which renders the tabs should be responsible for creating the actual Tab
the extension should just worry about the contents of the tab itself.
a51f850
to
44e1584
Compare
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: 1
♻️ Duplicate comments (1)
frontend/packages/modelServing/src/components/deployments/types.ts (1)
12-16
: Address type duplication as previously identified.This issue was already flagged in previous reviews. The
ModelVersionRegisteredDeploymentsViewProps
type should be centralized to avoid maintenance issues.
🧹 Nitpick comments (2)
frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx (2)
74-74
: Remove console.log statement from production code.Debug logging should be removed before merging to production.
- console.log('extension', extension);
72-95
: Remove unnecessary Fragment wrapper and approve the extension rendering logic.The extension rendering implementation is solid, but the Fragment wrapper is unnecessary as flagged by static analysis.
- <> - {extensions.map((extension) => { + {extensions.map((extension) => { const tabProps = findProps(extension.properties.id); if (!tabProps) { return null; } return ( <Tab key={extension.properties.id} eventKey={extension.properties.id} aria-label={`${extension.properties.title} tab`} data-testid={`${extension.properties.id}-tab`} title={<TabTitleText>{extension.properties.title}</TabTitleText>} > <PageSection hasBodyWrapper={false} isFilled data-testid={`${extension.properties.id}-tab-content`}> <LazyCodeRefComponent component={extension.properties.component} props={tabProps} /> </PageSection> </Tab> - )})} - </> + })}
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (11)
frontend/packages/model-registry/extension-points/index.ts
(1 hunks)frontend/packages/model-registry/package.json
(1 hunks)frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx
(3 hunks)frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/const.ts
(1 hunks)frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/types.ts
(1 hunks)frontend/packages/model-registry/upstream/frontend/tsconfig.json
(1 hunks)frontend/packages/modelServing/extensions.ts
(3 hunks)frontend/packages/modelServing/src/components/deployments/EmptyModelRegistryState.tsx
(1 hunks)frontend/packages/modelServing/src/components/deployments/ModelVersionRegisteredDeploymentsView.tsx
(1 hunks)frontend/packages/modelServing/src/components/deployments/types.ts
(1 hunks)frontend/packages/plugin-core/src/extension-points/index.ts
(1 hunks)
✅ Files skipped from review due to trivial changes (3)
- frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/const.ts
- frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/types.ts
- frontend/packages/model-registry/extension-points/index.ts
🚧 Files skipped from review as they are similar to previous changes (5)
- frontend/packages/model-registry/upstream/frontend/tsconfig.json
- frontend/packages/model-registry/package.json
- frontend/packages/plugin-core/src/extension-points/index.ts
- frontend/packages/modelServing/src/components/deployments/EmptyModelRegistryState.tsx
- frontend/packages/modelServing/extensions.ts
🧰 Additional context used
🧬 Code Graph Analysis (1)
frontend/packages/modelServing/src/components/deployments/types.ts (2)
frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/types.ts (1)
ModelVersionRegisteredDeploymentsViewProps
(3-7)backend/src/types.ts (1)
K8sResourceCommon
(139-149)
🪛 Biome (1.9.4)
frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx
[error] 72-95: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment
(lint/complexity/noUselessFragments)
🔇 Additional comments (4)
frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx (2)
12-13
: LGTM! Extension system imports are correctly added.The imports properly bring in the necessary components and type guards for the extension-based tab rendering system.
33-44
: LGTM! Extension usage follows the established pattern.The
useExtensions
hook usage with the type guard and thefindProps
mapping function provide a clean, extensible architecture for dynamic tab rendering.frontend/packages/modelServing/src/components/deployments/ModelVersionRegisteredDeploymentsView.tsx (1)
6-27
: LGTM! Component structure and empty state handling are well implemented.The component properly handles the loading state calculation and renders an appropriate empty state when no inference services are available.
frontend/packages/modelServing/src/components/deployments/types.ts (1)
18-174
: LGTM! Comprehensive and well-structured type definitions.The type definitions provide thorough coverage of the model serving domain with proper Kubernetes resource patterns and consistent naming conventions.
return ( | ||
<EmptyModelRegistryState | ||
title="No deployments from model registry" | ||
headerIcon={() => ( | ||
<img | ||
src={typedEmptyImage(ProjectObjectType.registeredModels, 'MissingDeployment')} | ||
alt="missing deployment" | ||
/> | ||
)} | ||
description="No deployments initiated from model registry for this model version." | ||
testid="model-version-deployments-empty-state" | ||
/> | ||
); |
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.
Fix unreachable code and implement proper loading state handling.
The return statement on lines 29-41 is unreachable because the previous condition (lines 13-27) will always execute when !isLoading && !inferenceServices.data.length
is true. The loading state should be handled properly.
- return (
- <EmptyModelRegistryState
- title="No deployments from model registry"
- headerIcon={() => (
- <img
- src={typedEmptyImage(ProjectObjectType.registeredModels, 'MissingDeployment')}
- alt="missing deployment"
- />
- )}
- description="No deployments initiated from model registry for this model version."
- testid="model-version-deployments-empty-state"
- />
- );
+ // Show loading state or handle data exists case
+ // TODO: Implement proper loading UI or data rendering when model serving is available
+ return (
+ <EmptyModelRegistryState
+ title="No deployments from model registry"
+ headerIcon={() => (
+ <img
+ src={typedEmptyImage(ProjectObjectType.registeredModels, 'MissingDeployment')}
+ alt="missing deployment"
+ />
+ )}
+ description="No deployments initiated from model registry for this model version."
+ testid="model-version-deployments-empty-state"
+ />
+ );
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
return ( | |
<EmptyModelRegistryState | |
title="No deployments from model registry" | |
headerIcon={() => ( | |
<img | |
src={typedEmptyImage(ProjectObjectType.registeredModels, 'MissingDeployment')} | |
alt="missing deployment" | |
/> | |
)} | |
description="No deployments initiated from model registry for this model version." | |
testid="model-version-deployments-empty-state" | |
/> | |
); | |
// Show loading state or handle data exists case | |
// TODO: Implement proper loading UI or data rendering when model serving is available | |
return ( | |
<EmptyModelRegistryState | |
title="No deployments from model registry" | |
headerIcon={() => ( | |
<img | |
src={typedEmptyImage(ProjectObjectType.registeredModels, 'MissingDeployment')} | |
alt="missing deployment" | |
/> | |
)} | |
description="No deployments initiated from model registry for this model version." | |
testid="model-version-deployments-empty-state" | |
/> | |
); |
🤖 Prompt for AI Agents
In
frontend/packages/modelServing/src/components/deployments/ModelVersionRegisteredDeploymentsView.tsx
around lines 13 to 41, the return statement rendering EmptyModelRegistryState is
unreachable due to a prior condition that always returns when !isLoading &&
!inferenceServices.data.length is true. To fix this, refactor the component to
properly handle the loading state by adding a conditional check for isLoading
before rendering the empty state, ensuring that the loading UI is shown while
data is being fetched and the empty state only renders when loading is complete
and no data exists.
44e1584
to
428a17b
Compare
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: 2
♻️ Duplicate comments (1)
frontend/packages/modelServing/src/components/deployments/types.ts (1)
12-16
: Address type duplication across packages.The
ModelVersionRegisteredDeploymentsViewProps
type is duplicated infrontend/packages/model-registry/upstream/frontend/types.ts
. This creates maintenance overhead and potential drift between definitions.Consider centralizing this shared type in a common module (e.g.,
frontend/packages/shared/types.ts
) and updating imports in both packages to reference the centralized definition.
🧹 Nitpick comments (1)
frontend/packages/modelServing/src/components/deployments/types.ts (1)
175-175
: Remove unnecessary source map comment.The source map comment appears to be auto-generated and may not be needed in this manually created TypeScript file.
-//# sourceMappingURL=k8sTypes.d.ts.map
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (11)
frontend/packages/model-registry/extension-points/index.ts
(1 hunks)frontend/packages/model-registry/package.json
(1 hunks)frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx
(3 hunks)frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/const.ts
(1 hunks)frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/types.ts
(1 hunks)frontend/packages/model-registry/upstream/frontend/tsconfig.json
(1 hunks)frontend/packages/modelServing/extensions.ts
(3 hunks)frontend/packages/modelServing/src/components/deployments/EmptyModelRegistryState.tsx
(1 hunks)frontend/packages/modelServing/src/components/deployments/ModelVersionRegisteredDeploymentsView.tsx
(1 hunks)frontend/packages/modelServing/src/components/deployments/types.ts
(1 hunks)frontend/packages/plugin-core/src/extension-points/index.ts
(1 hunks)
✅ Files skipped from review due to trivial changes (2)
- frontend/packages/model-registry/extension-points/index.ts
- frontend/packages/modelServing/src/components/deployments/EmptyModelRegistryState.tsx
🚧 Files skipped from review as they are similar to previous changes (7)
- frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/const.ts
- frontend/packages/model-registry/package.json
- frontend/packages/model-registry/upstream/frontend/tsconfig.json
- frontend/packages/plugin-core/src/extension-points/index.ts
- frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/types.ts
- frontend/packages/modelServing/extensions.ts
- frontend/packages/modelServing/src/components/deployments/ModelVersionRegisteredDeploymentsView.tsx
🧰 Additional context used
🧬 Code Graph Analysis (1)
frontend/packages/modelServing/src/components/deployments/types.ts (2)
frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/types.ts (1)
ModelVersionRegisteredDeploymentsViewProps
(3-7)backend/src/types.ts (1)
K8sResourceCommon
(139-149)
🪛 Biome (1.9.4)
frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx
[error] 72-95: Avoid using unnecessary Fragment.
A fragment is redundant if it contains only one child, or if it is the child of a html element, and is not a keyed fragment.
Unsafe fix: Remove the Fragment
(lint/complexity/noUselessFragments)
⏰ Context from checks skipped due to timeout of 90000ms (2)
- GitHub Check: Lint
- GitHub Check: Cypress-Setup
🔇 Additional comments (4)
frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx (3)
12-13
: LGTM: Clean import additions for extension support.The new imports properly support the extension-based architecture transition.
33-33
: LGTM: Proper extension hook usage.The
useExtensions
hook with the type guard follows the standard extension pattern.
35-44
: LGTM: Clean props mapping logic.The
findProps
function provides a clean way to map extension IDs to their required props.frontend/packages/modelServing/src/components/deployments/types.ts (1)
25-174
: LGTM: Comprehensive type definitions for model serving.The Kubernetes/OpenShift resource type definitions are comprehensive and well-structured, providing proper typing for inference services, serving runtimes, and related components.
...frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx
Outdated
Show resolved
Hide resolved
export type FetchStateObject<T, E = Error> = { | ||
data: T; | ||
loaded: boolean; | ||
error?: E; | ||
refresh: () => void; | ||
}; |
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.
💡 Verification agent
🧩 Analysis chain
Verify if FetchStateObject type already exists.
The FetchStateObject
type is commonly used across React applications for managing async state. Verify if this type is already defined elsewhere in the codebase to avoid duplication.
🏁 Script executed:
#!/bin/bash
# Description: Check if FetchStateObject type is already defined elsewhere
# Expected: Find existing definitions to avoid duplication
rg -A 5 "FetchStateObject" --type ts
Length of output: 95603
Remove duplicate FetchStateObject definition and import the existing type
The FetchStateObject
type is already exported from frontend/src/utilities/useFetch.ts
. To avoid duplication, remove your local definition and import it instead.
• File: frontend/packages/modelServing/src/components/deployments/types.ts
- Delete lines 18–23 where
FetchStateObject
is redefined. - Add at the top:
import { FetchStateObject } from '#~/utilities/useFetch';
Suggested diff:
--- a/frontend/packages/modelServing/src/components/deployments/types.ts
+++ b/frontend/packages/modelServing/src/components/deployments/types.ts
@@
-import type FetchStateObject<T, E = Error> = {
- data: T;
- loaded: boolean;
- error?: E;
- refresh: () => void;
-};
+import { FetchStateObject } from '#~/utilities/useFetch';
🤖 Prompt for AI Agents
In frontend/packages/modelServing/src/components/deployments/types.ts at lines
18 to 23, remove the local definition of the FetchStateObject type to avoid
duplication. Then, add an import statement at the top of the file: import {
FetchStateObject } from '#~/utilities/useFetch'; to use the existing type
definition from that module.
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: 0
🧹 Nitpick comments (1)
frontend/package.json (1)
36-38
: Unify memory-limit handling across lint scriptsHard-coding
node --max-old-space-size=8192
in every ESLint invocation solves the OOM issue, but it:
- Duplicates the limit in multiple scripts (
test:fix
,test:lint
, but notlint:goal
or future scripts).- Couples the command to the explicit path
./node_modules/.bin/eslint
, whichnpm
/yarn
already resolves.- Becomes harder to tweak globally.
A leaner, portable alternative is to set the limit via
NODE_OPTIONS
once and keep the script bodies simple, e.g.:- "test:fix": "node --max-old-space-size=8192 ./node_modules/.bin/eslint --ext .js,.ts,.jsx,.tsx . --fix", - "test:lint": "node --max-old-space-size=8192 ./node_modules/.bin/eslint --max-warnings 0 --ext .js,.ts,.jsx,.tsx .", + "test:fix": "cross-env NODE_OPTIONS=--max-old-space-size=8192 eslint --ext .js,.ts,.jsx,.tsx . --fix", + "test:lint": "cross-env NODE_OPTIONS=--max-old-space-size=8192 eslint --max-warnings 0 --ext .js,.ts,.jsx,.tsx .",Benefits:
• Single place (NODE_OPTIONS
) to tune memory.
• Avoids path coupling—eslint
is resolved vianode_modules/.bin
automatically.
• Works on all shells/OS when usingcross-env
(already frequently used in JS projects; tiny dependency).If you’d rather not add
cross-env
, at least replicate the memory flag inlint:goal
to prevent inconsistent OOM behavior.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
frontend/package.json
(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
frontend/package.json (1)
Learnt from: christianvogt
PR: opendatahub-io/odh-dashboard#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.
⏰ Context from checks skipped due to timeout of 90000ms (2)
- GitHub Check: Cypress-Setup
- GitHub Check: Lint
9c82516
to
34f9775
Compare
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: 3
🧹 Nitpick comments (12)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useNotification.d.ts (2)
1-9
: Prefer type-only import and omit unnecessaryundefined
unionA
.d.ts
file should avoid value-level imports.
- Use a type-only import instead of a default import – this removes the runtime dependency on
react
and works regardless ofesModuleInterop
.- In
NotificationRemoveProps
the parameter can be declared optional (id?: number
) instead ofnumber | undefined
, which is simpler and idiomatic.-import React from 'react'; +import type { ReactNode } from 'react'; ... -type NotificationProps = (title: string, message?: React.ReactNode) => void; -type NotificationRemoveProps = (id: number | undefined) => void; +type NotificationProps = (title: string, message?: ReactNode) => void; +type NotificationRemoveProps = (id?: number) => void;
17-17
: Remove useless empty exportBiome flags the
export {}
as redundant because the file already has named exports.
It can be deleted without changing the public API.-export {};
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ArchiveModelVersionModal.d.ts (1)
8-8
: Remove the useless empty export.The empty export statement is unnecessary since there's already a named export of the component.
-export {};
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/RestoreModelVersionModal.d.ts (1)
8-8
: Remove the useless empty export.The empty export statement is unnecessary since there's already a named export of the component.
-export {};
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ArchiveRegisteredModelModal.d.ts (1)
8-8
: Remove the useless empty export.The empty export statement is unnecessary since there's already a named export of the component.
-export {};
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/RestoreRegisteredModel.d.ts (1)
8-8
: Remove the useless empty export.The empty export statement is unnecessary since there's already a named export of the component.
-export {};
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelRegistryAPI.d.ts (1)
6-6
: Remove useless empty export.The empty export is unnecessary since there's already a named export declaration.
-export {};
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/AppContext.d.ts (1)
9-9
: Remove useless empty export.The empty export is unnecessary since there are already named export declarations.
-export {};
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/usePrefillRegisterVersionFields.d.ts (1)
15-15
: Remove useless empty export.The empty export is unnecessary since there's already a named export declaration.
-export {};
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/context/ModelRegistryContext.d.ts (1)
13-13
: Remove useless empty export.The empty export is unnecessary since there are already named export declarations.
-export {};
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/api/updateTimestamps.d.ts (1)
6-6
: Remove useless empty export.The empty export is unnecessary since there are already named export declarations.
-export {};
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/context/ModelRegistrySelectorContext.d.ts (1)
15-15
: Remove useless empty export.The empty export statement is redundant since there are other exports in the file.
-export {};
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (107)
frontend/@mf-types/@mf/modelRegistry/api.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/apis.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/__tests__/unit/testUtils/hooks.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/AppContext.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/api/k8s.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/api/service.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/api/updateTimestamps.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/context/ModelRegistryContext.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/context/ModelRegistrySelectorContext.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelArtifactsByVersionId.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelRegistries.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelRegistriesSetting.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelRegistryAPI.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelRegistryAPIState.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelVersionById.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelVersions.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelVersionsByRegisteredModel.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useNotification.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useRegisteredModelById.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useRegisteredModels.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/ModelRegistryCoreLoader.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/ModelRegistryRoutes.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/InvalidModelRegistry.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelPropertiesDescriptionListGroup.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelPropertiesTableRow.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelRegistry.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelRegistrySelector.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelRegistrySelectorNavigator.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetails.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsHeaderActions.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsView.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionSelector.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/const.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/types.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelDetailsView.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersionListView.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersions.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersionsHeaderActions.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersionsTable.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersionsTableColumns.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersionsTableRow.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersionsTabs.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/const.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ArchiveModelVersionDetails.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ArchiveModelVersionDetailsBreadcrumb.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ModelVersionArchiveDetails.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ModelVersionArchiveDetailsBreadcrumb.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ModelVersionsArchive.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ModelVersionsArchiveListView.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ModelVersionsArchiveTable.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/PrefilledModelRegistryField.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegisterModel.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegisterModelDetailsFormSection.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegisterModelErrors.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegisterVersion.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegisteredModelSelector.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegistrationCommonFormSections.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegistrationFormFooter.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/const.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/usePrefillRegisterVersionFields.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/useRegisterModelData.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/utils.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelListView.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelTable.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelTableRow.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelsTableColumns.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelsTableToolbar.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelArchiveDetails.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelArchiveDetailsBreadcrumb.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchive.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchiveListView.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchiveTable.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ArchiveModelVersionModal.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ArchiveRegisteredModelModal.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/EmptyModelRegistryState.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/FormFieldset.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ModelLabels.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ModelTimestamp.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/RestoreModelVersionModal.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/RestoreRegisteredModel.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ThemeAwareSearchInput.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/routeUtils.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/utils.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/DeleteModelRegistryModal.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistriesTable.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistriesTableRow.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistryCreateModal.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistryCreateModalFooter.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistryDatabasePassword.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistrySettings.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistrySettingsRoutes.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistryTableRowStatus.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/PasswordInput.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/columns.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/components/ThemeAwareFormGroupWrapper.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/types.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/utilities/const.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/utils.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/concepts/k8s/K8sNameDescriptionField/K8sNameDescriptionField.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/concepts/k8s/K8sNameDescriptionField/ResourceNameField.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/concepts/k8s/ResourceNameDefinitionTootip.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/odh/ModelRegistrySettingsRoutesWrapper.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/odh/ModelRegistryWrapper.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/odh/api.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/odh/extension-points.d.ts
(1 hunks)frontend/@mf-types/@mf/modelRegistry/compiled-types/src/odh/extensions.d.ts
(1 hunks)
⛔ Files not processed due to max files limit (15)
- frontend/@mf-types/@mf/modelRegistry/extension-points.d.ts
- frontend/@mf-types/@mf/modelRegistry/extensions.d.ts
- frontend/@mf-types/index.d.ts
- frontend/packages/model-registry/upstream/frontend/config/moduleFederation.js
- frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetails.tsx
- frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsHeaderActions.tsx
- frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.tsx
- frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ArchiveModelVersionDetails.tsx
- frontend/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ModelVersionArchiveDetails.tsx
- frontend/packages/model-registry/upstream/frontend/src/odh/api.ts
- frontend/packages/model-registry/upstream/frontend/src/odh/extension-points.ts
- frontend/packages/modelServing/extensions.ts
- frontend/packages/modelServing/src/components/archive/ArchiveButton.tsx
- frontend/packages/modelServing/src/components/deployments/ModelVersionRegisteredDeploymentsViewWrapper.tsx
- frontend/packages/modelServing/tsconfig.json
✅ Files skipped from review due to trivial changes (25)
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/odh/extensions.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersionsTableColumns.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelVersionsByRegisteredModel.d.ts
- frontend/@mf-types/@mf/modelRegistry/api.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/InvalidModelRegistry.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelRegistries.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/columns.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchive.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistryCreateModal.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelTableRow.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/const.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/EmptyModelRegistryState.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelRegistrySelector.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ThemeAwareSearchInput.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetails.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelArtifactsByVersionId.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersionsTableRow.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelDetailsView.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/components/ThemeAwareFormGroupWrapper.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ModelVersionArchiveDetails.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/const.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistryDatabasePassword.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegisterModelErrors.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelPropertiesDescriptionListGroup.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/routeUtils.d.ts
🚧 Files skipped from review as they are similar to previous changes (69)
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/odh/ModelRegistrySettingsRoutesWrapper.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegisterVersion.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegisterModel.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistrySettings.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/ModelRegistryRoutes.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistrySettingsRoutes.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/odh/ModelRegistryWrapper.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useRegisteredModels.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ArchiveModelVersionDetails.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/concepts/k8s/ResourceNameDefinitionTootip.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelArchiveDetailsBreadcrumb.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelRegistriesSetting.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/PrefilledModelRegistryField.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelVersions.d.ts
- frontend/@mf-types/@mf/modelRegistry/apis.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/concepts/k8s/K8sNameDescriptionField/ResourceNameField.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useRegisteredModelById.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/ModelRegistryCoreLoader.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ArchiveModelVersionDetailsBreadcrumb.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsHeaderActions.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelsTableToolbar.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ModelTimestamp.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/FormFieldset.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersionsHeaderActions.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsView.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelVersionById.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/PasswordInput.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionSelector.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistryCreateModalFooter.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelsTableColumns.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegistrationFormFooter.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersionListView.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ModelVersionsArchiveTable.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistriesTableRow.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ModelVersionsArchiveListView.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelRegistry.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegistrationCommonFormSections.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ModelVersionArchiveDetailsBreadcrumb.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersions.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/DeleteModelRegistryModal.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/odh/api.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelRegistrySelectorNavigator.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelListView.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/types.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchiveTable.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/concepts/k8s/K8sNameDescriptionField/K8sNameDescriptionField.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegisterModelDetailsFormSection.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/RegisteredModelSelector.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ModelLabels.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelRegistryAPIState.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionDetails/ModelVersionDetailsTabs.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelsArchiveListView.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModelsArchive/RegisteredModelArchiveDetails.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisteredModels/RegisteredModelTable.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersionsTabs.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/utils.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersions/ModelVersionsTable.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelPropertiesTableRow.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistriesTable.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/useRegisterModelData.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/const.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/ModelVersionsArchive/ModelVersionsArchive.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/utils.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/types.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/odh/extension-points.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/utils.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/utilities/const.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/api/k8s.d.ts
- frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/api/service.d.ts
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: christianvogt
PR: opendatahub-io/odh-dashboard#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.
🧬 Code Graph Analysis (10)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/__tests__/unit/testUtils/hooks.d.ts (1)
frontend/src/__tests__/unit/testUtils/hooks.ts (4)
renderHook
(59-98)testHook
(112-133)standardUseFetchState
(149-158)createComparativeValue
(201-202)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/AppContext.d.ts (1)
frontend/src/app/AppContext.ts (2)
AppContext
(14-14)useAppContext
(16-16)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/api/updateTimestamps.d.ts (1)
frontend/src/concepts/modelRegistry/utils/updateTimestamps.ts (3)
bumpModelVersionTimestamp
(11-45)bumpRegisteredModelTimestamp
(47-81)bumpBothTimestamps
(83-92)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/context/ModelRegistrySelectorContext.d.ts (2)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/types.d.ts (1)
ModelRegistry
(15-20)frontend/src/__tests__/cypress/cypress/pages/modelRegistry.ts (1)
modelRegistry
(248-248)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/usePrefillRegisterVersionFields.d.ts (2)
frontend/src/pages/projects/types.ts (1)
UpdateObjectAtPropAndValue
(8-11)frontend/src/pages/modelRegistry/screens/RegisterModel/usePrefillRegisterVersionFields.ts (1)
usePrefillRegisterVersionFields
(25-87)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ArchiveModelVersionModal.d.ts (1)
frontend/src/pages/modelRegistry/screens/components/ArchiveModelVersionModal.tsx (1)
ArchiveModelVersionModal
(25-117)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ArchiveRegisteredModelModal.d.ts (1)
frontend/src/pages/modelRegistry/screens/components/ArchiveRegisteredModelModal.tsx (1)
ArchiveRegisteredModelModal
(25-122)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/RestoreModelVersionModal.d.ts (1)
frontend/src/pages/modelRegistry/screens/components/RestoreModelVersionModal.tsx (1)
RestoreModelVersionModal
(15-77)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/RestoreRegisteredModel.d.ts (1)
frontend/src/pages/modelRegistry/screens/components/RestoreRegisteredModel.tsx (1)
RestoreRegisteredModelModal
(15-83)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistryTableRowStatus.d.ts (1)
frontend/src/pages/modelRegistrySettings/ModelRegistryTableRowStatus.tsx (1)
ModelRegistryTableRowStatus
(36-164)
🪛 Biome (1.9.4)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/__tests__/unit/testUtils/hooks.d.ts
[error] 3-3: Don't use 'Function' as a type.
Prefer explicitly define the function shape. This type accepts any function-like value, which can be a common source of bugs.
(lint/complexity/noBannedTypes)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/AppContext.d.ts
[error] 8-9: This empty export is useless because there's another export or import.
This import makes useless the empty export.
Safe fix: Remove this useless empty export.
(lint/complexity/noUselessEmptyExport)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/api/updateTimestamps.d.ts
[error] 5-6: This empty export is useless because there's another export or import.
This import makes useless the empty export.
Safe fix: Remove this useless empty export.
(lint/complexity/noUselessEmptyExport)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/context/ModelRegistryContext.d.ts
[error] 12-13: This empty export is useless because there's another export or import.
This import makes useless the empty export.
Safe fix: Remove this useless empty export.
(lint/complexity/noUselessEmptyExport)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/context/ModelRegistrySelectorContext.d.ts
[error] 14-15: This empty export is useless because there's another export or import.
This import makes useless the empty export.
Safe fix: Remove this useless empty export.
(lint/complexity/noUselessEmptyExport)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelRegistryAPI.d.ts
[error] 5-6: This empty export is useless because there's another export or import.
This import makes useless the empty export.
Safe fix: Remove this useless empty export.
(lint/complexity/noUselessEmptyExport)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useNotification.d.ts
[error] 16-17: This empty export is useless because there's another export or import.
This import makes useless the empty export.
Safe fix: Remove this useless empty export.
(lint/complexity/noUselessEmptyExport)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/usePrefillRegisterVersionFields.d.ts
[error] 14-15: This empty export is useless because there's another export or import.
This import makes useless the empty export.
Safe fix: Remove this useless empty export.
(lint/complexity/noUselessEmptyExport)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ArchiveModelVersionModal.d.ts
[error] 7-8: This empty export is useless because there's another export or import.
This import makes useless the empty export.
Safe fix: Remove this useless empty export.
(lint/complexity/noUselessEmptyExport)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ArchiveRegisteredModelModal.d.ts
[error] 7-8: This empty export is useless because there's another export or import.
This import makes useless the empty export.
Safe fix: Remove this useless empty export.
(lint/complexity/noUselessEmptyExport)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/RestoreModelVersionModal.d.ts
[error] 7-8: This empty export is useless because there's another export or import.
This import makes useless the empty export.
Safe fix: Remove this useless empty export.
(lint/complexity/noUselessEmptyExport)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/RestoreRegisteredModel.d.ts
[error] 7-8: This empty export is useless because there's another export or import.
This import makes useless the empty export.
Safe fix: Remove this useless empty export.
(lint/complexity/noUselessEmptyExport)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistryTableRowStatus.d.ts
[error] 6-7: This empty export is useless because there's another export or import.
This import makes useless the empty export.
Safe fix: Remove this useless empty export.
(lint/complexity/noUselessEmptyExport)
⏰ 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)
- GitHub Check: Lint
🔇 Additional comments (15)
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ArchiveModelVersionModal.d.ts (1)
2-7
: Type declarations look correct and match the implementation.The props interface accurately reflects the component's requirements with proper callback signatures and string parameter.
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/RestoreModelVersionModal.d.ts (1)
2-7
: Type declarations are accurate and consistent.The props interface correctly matches the component implementation with appropriate callback and string parameter types.
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/ArchiveRegisteredModelModal.d.ts (1)
2-7
: Type declarations are correct and align with the implementation.The props interface properly defines the callback functions and
registeredModelName
parameter as expected by the component.frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/components/RestoreRegisteredModel.d.ts (1)
2-7
: Type declarations are properly defined and match the implementation.The props interface correctly specifies the callback functions and
registeredModelName
parameter consistent with the component's actual implementation.frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/hooks/useModelRegistryAPI.d.ts (1)
1-5
: Hook declaration looks correct.The type definition properly extends
ModelRegistryAPIState
with therefreshAllAPI
method and follows standard TypeScript declaration patterns.frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/AppContext.d.ts (1)
1-8
: Context declaration looks correct.The type definitions properly define the app context with config and user settings, following standard React context patterns. The imports and type structure are appropriate.
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/modelRegistry/screens/RegisterModel/usePrefillRegisterVersionFields.d.ts (1)
1-14
: Hook declaration looks correct.The type definitions properly define the hook arguments and return values, including optional parameters for error handling and data loading states. The structure follows standard React hook patterns.
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/context/ModelRegistryContext.d.ts (1)
1-12
: Context declaration looks correct.The type definitions properly define the model registry context with API state and refresh functionality, following standard React context patterns. The provider props correctly include children and model registry name.
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/api/updateTimestamps.d.ts (1)
1-5
: API function declarations look correct.The type definitions properly declare the timestamp update functions with appropriate parameters and return types. The use of
MinimalModelRegistryAPI
for the registered model function is a good pattern that follows the principle of least privilege.frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/context/ModelRegistrySelectorContext.d.ts (3)
1-9
: Well-structured context type definition.The
ModelRegistrySelectorContextType
is comprehensive and properly typed, including loading state, error handling, registry management, and preference selection capabilities.
10-12
: Standard React provider props pattern.The provider props type correctly follows React patterns with appropriate children typing.
13-14
: Proper context and provider declarations.The context and provider component declarations are correctly typed and follow React/TypeScript patterns.
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/__tests__/unit/testUtils/hooks.d.ts (3)
6-26
: Excellent extension of RTL's RenderHookResult.The
RenderHookResultExt
interface adds valuable testing capabilities with comprehensive documentation. The additional methods for tracking previous results, update counts, and waiting for updates will be very useful for hook testing.
27-58
: Well-designed hook testing API.Both
renderHook
andtestHook
declarations provide clean APIs for testing React hooks with excellent documentation and examples. The type signatures are comprehensive and appropriate.
59-79
: Useful testing utility functions.Both
standardUseFetchState
andcreateComparativeValue
provide valuable abstractions for common testing patterns with clear documentation and appropriate typing.
@@ -0,0 +1,7 @@ | |||
import React from 'react'; |
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.
Prefer namespace (* as
) import in declaration files
import React from 'react';
relies on esModuleInterop
and may break consumers that compile with stricter settings (e.g. allowSyntheticDefaultImports: false
).
In .d.ts
files the idiomatic, interoperable form is:
-import React from 'react';
+import * as React from 'react';
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
import React from 'react'; | |
import * as React from 'react'; |
🤖 Prompt for AI Agents
In
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistryTableRowStatus.d.ts
at line 1, replace the default import of React with a namespace import using
`import * as React from 'react';` to ensure compatibility with stricter
TypeScript compiler settings and avoid reliance on esModuleInterop.
export declare const ModelRegistryTableRowStatus: React.FC<ModelRegistryTableRowStatusProps>; | ||
export {}; |
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.
🛠️ Refactor suggestion
Remove the redundant export {}
to satisfy linter & reduce noise
The file is already a module due to the explicit import/export above, so the empty export is superfluous and triggers Biome’s noUselessEmptyExport
error.
-export {};
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
export declare const ModelRegistryTableRowStatus: React.FC<ModelRegistryTableRowStatusProps>; | |
export {}; | |
export declare const ModelRegistryTableRowStatus: React.FC<ModelRegistryTableRowStatusProps>; |
🧰 Tools
🪛 Biome (1.9.4)
[error] 6-7: This empty export is useless because there's another export or import.
This import makes useless the empty export.
Safe fix: Remove this useless empty export.
(lint/complexity/noUselessEmptyExport)
🤖 Prompt for AI Agents
In
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/app/pages/settings/ModelRegistryTableRowStatus.d.ts
at lines 6 to 7, remove the redundant empty export statement `export {}` since
the file already contains an explicit export and is recognized as a module. This
will satisfy the linter rule `noUselessEmptyExport` and reduce unnecessary code
noise.
export type BooleanValues<T> = T extends boolean | number | null | undefined | Function ? boolean | undefined : boolean | undefined | { | ||
[K in keyof T]?: BooleanValues<T[K]>; | ||
}; |
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.
🛠️ Refactor suggestion
Replace generic 'Function' type with more specific function type.
The use of Function
in the conditional type is discouraged as it accepts any function-like value, which can be a source of bugs. Use a more specific function type instead.
-export type BooleanValues<T> = T extends boolean | number | null | undefined | Function ? boolean | undefined : boolean | undefined | {
+export type BooleanValues<T> = T extends boolean | number | null | undefined | ((...args: any[]) => any) ? boolean | undefined : boolean | undefined | {
[K in keyof T]?: BooleanValues<T[K]>;
};
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
export type BooleanValues<T> = T extends boolean | number | null | undefined | Function ? boolean | undefined : boolean | undefined | { | |
[K in keyof T]?: BooleanValues<T[K]>; | |
}; | |
export type BooleanValues<T> = T extends boolean | number | null | undefined | ((...args: any[]) => any) | |
? boolean | undefined | |
: boolean | undefined | { | |
[K in keyof T]?: BooleanValues<T[K]>; | |
}; |
🧰 Tools
🪛 Biome (1.9.4)
[error] 3-3: Don't use 'Function' as a type.
Prefer explicitly define the function shape. This type accepts any function-like value, which can be a common source of bugs.
(lint/complexity/noBannedTypes)
🤖 Prompt for AI Agents
In
frontend/@mf-types/@mf/modelRegistry/compiled-types/src/__tests__/unit/testUtils/hooks.d.ts
around lines 3 to 5, replace the generic 'Function' type in the conditional type
with a more specific function type such as '(...args: any[]) => any'. This
change narrows the function type to actual callable signatures, reducing
potential bugs caused by the overly broad 'Function' type.
Codecov ReportAttention: Patch coverage is
❌ Your patch check has failed because the patch coverage (0.00%) is below the target coverage (70.00%). You can increase the patch coverage or adjust the target coverage. Additional details and impacted files@@ Coverage Diff @@
## main #4426 +/- ##
==========================================
- Coverage 82.62% 82.60% -0.02%
==========================================
Files 1751 1762 +11
Lines 36551 36819 +268
Branches 10804 10912 +108
==========================================
+ Hits 30200 30415 +215
- Misses 6351 6404 +53
... and 87 files with indirect coverage changes Continue to review full report in Codecov by Sentry.
🚀 New features to boost your workflow:
|
Description
How Has This Been Tested?
Test Impact
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
New Features
Refactor
Chores