diff --git a/packages/model-registry/package.json b/packages/model-registry/package.json index 741db6c736..052e4db761 100644 --- a/packages/model-registry/package.json +++ b/packages/model-registry/package.json @@ -23,7 +23,7 @@ "branch": "main", "src": "clients/ui", "target": "upstream", - "commit": "6e18d5aca6de378c66794ae581b9c42d0767aff7" + "commit": "6eb25cfb3ce76cd0f87438ea7de60b414dd6e25a" }, "module-federation": { "name": "modelRegistry", diff --git a/packages/model-registry/upstream/.env b/packages/model-registry/upstream/.env index 4a0344d3a2..d6758a52b1 100644 --- a/packages/model-registry/upstream/.env +++ b/packages/model-registry/upstream/.env @@ -1,9 +1,9 @@ ############### Default settings ############### CONTAINER_TOOL=docker -IMG_UI=ghcr.io/kubeflow/model-registry/ui:latest -IMG_UI_STANDALONE=ghcr.io/kubeflow/model-registry/ui-standalone:latest -IMG_UI_FEDERATED=ghcr.io/kubeflow/model-registry/ui-federated:latest +IMG_UI=ghcr.io/kubeflow/hub/ui:latest +IMG_UI_STANDALONE=ghcr.io/kubeflow/hub/ui-standalone:latest +IMG_UI_FEDERATED=ghcr.io/kubeflow/hub/ui-federated:latest PLATFORM=linux/amd64 STYLE_THEME=mui-theme DEPLOYMENT_MODE=kubeflow diff --git a/packages/model-registry/upstream/CONTRIBUTING.md b/packages/model-registry/upstream/CONTRIBUTING.md index 5059bf75fe..b31803b41a 100644 --- a/packages/model-registry/upstream/CONTRIBUTING.md +++ b/packages/model-registry/upstream/CONTRIBUTING.md @@ -2,8 +2,8 @@ [BFF requirements]: ./bff/README.md#pre-requisites [frontend dev setup]: ./frontend/docs/dev-setup.md#development [BFF dev setup]: ./bff/README.md#development -[issue]: https://github.com/kubeflow/model-registry/issues/new/choose -[contributing guidelines]: https://github.com/kubeflow/model-registry/blob/main/CONTRIBUTING.md +[issue]: https://github.com/kubeflow/hub/issues/new/choose +[contributing guidelines]: https://github.com/kubeflow/hub/blob/main/CONTRIBUTING.md # Contributing Individual bug fixes are welcome. Please open an [issue] to track the fix you are planning to implement. If you are unsure how best to solve it, start by opening the issue and note your desire to contribute. @@ -28,9 +28,9 @@ To run the mocked development environment you can either: ### Kubernetes Deployment -For an in-depth guide on how to deploy the Model Registry UI, please refer to the [local kubernetes deployment](./docs/local-deployment-guide.md) documentation. +For an in-depth guide on how to deploy the Kubeflow Hub UI, please refer to the [local kubernetes deployment](./docs/local-deployment-guide.md) documentation. -To quickly enable the Model Registry UI in your Kind cluster, you can use the following command: +To quickly enable the Kubeflow Hub UI in your Kind cluster, you can use the following command: ```shell make kind-deployment @@ -38,4 +38,4 @@ make kind-deployment ## Debugging and Testing -See [frontend testing guidelines](frontend/docs/testing.md) for testing the frontend. \ No newline at end of file +See [frontend testing guidelines](frontend/docs/testing.md) for testing the frontend. diff --git a/packages/model-registry/upstream/README.md b/packages/model-registry/upstream/README.md index c54c77a79c..68d21788aa 100644 --- a/packages/model-registry/upstream/README.md +++ b/packages/model-registry/upstream/README.md @@ -1,26 +1,26 @@ [frontend requirements]: ./frontend/docs/dev-setup.md#requirements [BFF requirements]: ./bff/README.md#pre-requisites -[Model registry UI]: ./docs/README.md +[Kubeflow Hub UI]: ./docs/README.md [contributing guidelines]: ./CONTRIBUTING.md -# Model Registry UI +# Kubeflow Hub UI ## Overview -The Model Registry UI is a standalone web app for Kubeflow Model Registry. In this repository, you will find the frontend and backend for the Model Registry UI. +The Kubeflow Hub UI is a standalone web app for Kubeflow Kubeflow Hub. In this repository, you will find the frontend and backend for the Kubeflow Hub UI. ## Contributing -You can check the [contributing guidelines] for more information on how to contribute to the Model Registry UI. +You can check the [contributing guidelines] for more information on how to contribute to the Kubeflow Hub UI. ## OpenAPI Specification -You can find the OpenAPI specification for the Model Registry UI in the [openapi](./api/openapi) directory. -A live version of the OpenAPI specification can be found [here](https://editor.swagger.io/?url=https://raw.githubusercontent.com/kubeflow/model-registry/main/clients/ui/api/openapi/mod-arch.yaml). +You can find the OpenAPI specification for the Kubeflow Hub UI in the [openapi](./api/openapi) directory. +A live version of the OpenAPI specification can be found [here](https://editor.swagger.io/?url=https://raw.githubusercontent.com/kubeflow/hub/main/clients/ui/api/openapi/mod-arch.yaml). ## Targeted environments -There's two main environments that the Model Registry UI is targeted for: +There's two main environments that the Kubeflow Hub UI is targeted for: 1. **Standalone**: This is the default environment for local development. The UI is served by the BFF and the BFF is responsible for serving the API requests. The BFF exposes a `/namespace` endpoint that returns all the namespaces in the cluster and the UI sends a user header `kubeflow-user` to authenticate the calls. @@ -28,7 +28,7 @@ There's two main environments that the Model Registry UI is targeted for: ## Environment Variables -The following environment variables are used to configure the deployment and development environment for the Model Registry UI. These variables should be defined in a `.env.local` file in the `clients/ui` directory of the project. **This values will affect the build and push commands**. +The following environment variables are used to configure the deployment and development environment for the Kubeflow Hub UI. These variables should be defined in a `.env.local` file in the `clients/ui` directory of the project. **This values will affect the build and push commands**. ### `CONTAINER_TOOL` @@ -40,20 +40,20 @@ The following environment variables are used to configure the deployment and dev ### `IMG_UI` * **Description**: Specifies the image name and tag for the UI (with BFF). -* **Default Value**: `ghcr.io/kubeflow/model-registry/ui:latest` -* **Example**: `IMG_UI=ghcr.io/kubeflow/model-registry/ui:latest` +* **Default Value**: `ghcr.io/kubeflow/hub/ui:latest` +* **Example**: `IMG_UI=ghcr.io/kubeflow/hub/ui:latest` ### `IMG_UI_STANDALONE` * **Description**: Specifies the image name and tag for the UI (with BFF) in **standalone mode**, used for local kind deployment. -* **Default Value**: `ghcr.io/kubeflow/model-registry/ui-standalone:latest` -* **Example**: `IMG_UI_STANDALONE=ghcr.io/kubeflow/model-registry/ui-standalone:latest` +* **Default Value**: `ghcr.io/kubeflow/hub/ui-standalone:latest` +* **Example**: `IMG_UI_STANDALONE=ghcr.io/kubeflow/hub/ui-standalone:latest` ### `IMG_UI_FEDERATED` * **Description**: Specifies the image name and tag for the UI (with BFF) in **federated mode**, used for federated mode outside kubeflow. -* **Default Value**: `ghcr.io/kubeflow/model-registry/ui-federated:latest` -* **Example**: `IMG_UI_FEDERATED=ghcr.io/kubeflow/model-registry/ui-federated:latest` +* **Default Value**: `ghcr.io/kubeflow/hub/ui-federated:latest` +* **Example**: `IMG_UI_FEDERATED=ghcr.io/kubeflow/hub/ui-federated:latest` ### `PLATFORM` @@ -130,4 +130,4 @@ The standalone image includes K8s test binaries to support the `--mock-k8s-clien ## Deployments -For more information on how to deploy the Model Registry UI, please refer to the [Model registry UI] documentation. +For more information on how to deploy the Kubeflow Hub UI, please refer to the [Kubeflow Hub UI] documentation. diff --git a/packages/model-registry/upstream/api/openapi/mod-arch.yaml b/packages/model-registry/upstream/api/openapi/mod-arch.yaml index 02d1080c11..d2144a56bd 100644 --- a/packages/model-registry/upstream/api/openapi/mod-arch.yaml +++ b/packages/model-registry/upstream/api/openapi/mod-arch.yaml @@ -3361,7 +3361,7 @@ components: message: type: string description: Human-readable description of the event. - example: "Successfully pulled image \"ghcr.io/kubeflow/model-registry/job/async-upload:latest\"" + example: "Successfully pulled image \"ghcr.io/kubeflow/hub/job/async-upload:latest\"" ModelTransferJobList: description: List of ModelTransferJob entities. type: object diff --git a/packages/model-registry/upstream/bff/README.md b/packages/model-registry/upstream/bff/README.md index 3b10306738..c633fd4fec 100644 --- a/packages/model-registry/upstream/bff/README.md +++ b/packages/model-registry/upstream/bff/README.md @@ -1,6 +1,6 @@ -# Kubeflow Model Registry UI BFF +# Kubeflow Hub UI BFF -The Kubeflow Model Registry UI BFF is the _backend for frontend_ (BFF) used by the Kubeflow Model Registry UI. +The Kubeflow Hub UI BFF is the _backend for frontend_ (BFF) used by the Kubeflow Hub UI. ## Pre-requisites: @@ -14,7 +14,7 @@ To be operational, our BFF needs the Model Registry backend running. > **NOTE:** Docker compose must be installed in your environment. -There are two `docker-compose` files located at the [root](https://github.com/kubeflow/model-registry) of Model Registry repository that make the startup of both model registry easier by simply running: +There are two `docker-compose` files located at the [root](https://github.com/kubeflow/hub) of Model Registry repository that make the startup of both model registry easier by simply running: ```shell docker compose -f docker-compose[-local].yaml up @@ -567,7 +567,7 @@ labels: #... ``` -You can view the complete Model Registry service manifest [here](https://github.com/kubeflow/model-registry/blob/main/manifests/kustomize/base/model-registry-service.yaml#L10). +You can view the complete Model Registry service manifest [here](https://github.com/kubeflow/hub/blob/main/manifests/kustomize/base/model-registry-service.yaml#L10). #### 2. What is the structure of the mock Kubernetes environment? diff --git a/packages/model-registry/upstream/bff/cmd/main.go b/packages/model-registry/upstream/bff/cmd/main.go index 49f0ab25b4..5933b0b642 100644 --- a/packages/model-registry/upstream/bff/cmd/main.go +++ b/packages/model-registry/upstream/bff/cmd/main.go @@ -8,11 +8,11 @@ import ( "os/signal" "syscall" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - "github.com/kubeflow/model-registry/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/api" + "github.com/kubeflow/hub/ui/bff/internal/config" // Import redhat handlers to register handler overrides via init() - _ "github.com/kubeflow/model-registry/ui/bff/internal/redhat/handlers" + _ "github.com/kubeflow/hub/ui/bff/internal/redhat/handlers" "log/slog" "net/http" diff --git a/packages/model-registry/upstream/bff/docs/extensions.md b/packages/model-registry/upstream/bff/docs/extensions.md index 7366907f8c..ae110a16bc 100644 --- a/packages/model-registry/upstream/bff/docs/extensions.md +++ b/packages/model-registry/upstream/bff/docs/extensions.md @@ -67,7 +67,7 @@ import ( // ... other imports ... // Import downstream handlers to register overrides via init() - _ "github.com/kubeflow/model-registry/ui/bff/internal/redhat/handlers" + _ "github.com/kubeflow/hub/ui/bff/internal/redhat/handlers" ) ``` @@ -98,8 +98,8 @@ import ( "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/api" + "github.com/kubeflow/hub/ui/bff/internal/constants" ) // Mirror the upstream handler ID string @@ -180,8 +180,8 @@ import ( "net/http" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/api" + "github.com/kubeflow/hub/ui/bff/internal/constants" ) const kubernetesServicesListHandlerID = api.HandlerID("kubernetes:services:list") @@ -252,14 +252,14 @@ func myHandler(app *api.App) httprouter.Handle { // Use the client to interact with Kubernetes // The client interface is defined in internal/integrations/kubernetes namespace := r.Context().Value(constants.NamespaceHeaderParameterKey).(string) - + // Example: Get service details services, err := client.GetServiceDetails(r.Context(), namespace) if err != nil { app.ServerError(w, r, err) return } - + // Process services... }) } @@ -276,23 +276,23 @@ When building downstream handlers, you'll commonly import these packages: ```go import ( // Core API types and App - "github.com/kubeflow/model-registry/ui/bff/internal/api" - + "github.com/kubeflow/hub/ui/bff/internal/api" + // Configuration types - "github.com/kubeflow/model-registry/ui/bff/internal/config" - + "github.com/kubeflow/hub/ui/bff/internal/config" + // Context keys for namespace, identity, etc. - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - + "github.com/kubeflow/hub/ui/bff/internal/constants" + // Kubernetes client interface - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + // Data models - "github.com/kubeflow/model-registry/ui/bff/internal/models" - + "github.com/kubeflow/hub/ui/bff/internal/models" + // Upstream repositories (if needed) - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" - + "github.com/kubeflow/hub/ui/bff/internal/repositories" + // Router "github.com/julienschmidt/httprouter" ) @@ -322,7 +322,7 @@ func TestMyHandler_MockMode(t *testing.T) { cfg := config.EnvConfig{ MockK8Client: true, } - + // Your handler factory should return buildDefault() or mock behavior // when app.Config().MockK8Client is true } @@ -344,7 +344,7 @@ func myOverrideFactory(app *api.App, buildDefault func() httprouter.Handle) http if !shouldUseDownstreamOverrides(app) { return buildDefault() } - + // Real implementation return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { // ... diff --git a/packages/model-registry/upstream/bff/go.mod b/packages/model-registry/upstream/bff/go.mod index 0b558e5644..639e88c22c 100644 --- a/packages/model-registry/upstream/bff/go.mod +++ b/packages/model-registry/upstream/bff/go.mod @@ -1,4 +1,4 @@ -module github.com/kubeflow/model-registry/ui/bff +module github.com/kubeflow/hub/ui/bff go 1.25.0 diff --git a/packages/model-registry/upstream/bff/internal/api/app.go b/packages/model-registry/upstream/bff/internal/api/app.go index 01633fd37d..2d5389ec6c 100644 --- a/packages/model-registry/upstream/bff/internal/api/app.go +++ b/packages/model-registry/upstream/bff/internal/api/app.go @@ -10,18 +10,18 @@ import ( "path" "strings" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - k8mocks "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes/k8mocks" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + k8mocks "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes/k8mocks" "k8s.io/client-go/kubernetes" "sigs.k8s.io/controller-runtime/pkg/envtest" - helper "github.com/kubeflow/model-registry/ui/bff/internal/helpers" + helper "github.com/kubeflow/hub/ui/bff/internal/helpers" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/repositories" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/mocks" ) const ( diff --git a/packages/model-registry/upstream/bff/internal/api/app_test.go b/packages/model-registry/upstream/bff/internal/api/app_test.go index d592d31842..52543c6355 100644 --- a/packages/model-registry/upstream/bff/internal/api/app_test.go +++ b/packages/model-registry/upstream/bff/internal/api/app_test.go @@ -5,8 +5,8 @@ import ( "net/http" httptest "net/http/httptest" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/repositories" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/artifacts_handler.go b/packages/model-registry/upstream/bff/internal/api/artifacts_handler.go index ab17f95747..4ca66db9e3 100644 --- a/packages/model-registry/upstream/bff/internal/api/artifacts_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/artifacts_handler.go @@ -6,11 +6,11 @@ import ( "fmt" "net/http" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" "github.com/julienschmidt/httprouter" + "github.com/kubeflow/hub/ui/bff/internal/constants" "github.com/kubeflow/model-registry/pkg/openapi" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" ) type ArtifactListEnvelope Envelope[*openapi.ArtifactList, None] diff --git a/packages/model-registry/upstream/bff/internal/api/artifacts_handler_test.go b/packages/model-registry/upstream/bff/internal/api/artifacts_handler_test.go index c20837cc9f..efc227fe28 100644 --- a/packages/model-registry/upstream/bff/internal/api/artifacts_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/artifacts_handler_test.go @@ -1,11 +1,12 @@ package api import ( - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" "net/http" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/brianvoe/gofakeit/v7" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/mocks" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/catalog_filters_handler.go b/packages/model-registry/upstream/bff/internal/api/catalog_filters_handler.go index be7fbf15d5..0875490faf 100644 --- a/packages/model-registry/upstream/bff/internal/api/catalog_filters_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/catalog_filters_handler.go @@ -5,9 +5,9 @@ import ( "net/http" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type CatalogFilterOptionsListEnvelope Envelope[*models.FilterOptionsList, None] diff --git a/packages/model-registry/upstream/bff/internal/api/catalog_filters_handler_test.go b/packages/model-registry/upstream/bff/internal/api/catalog_filters_handler_test.go index 3722aed809..8995e10763 100644 --- a/packages/model-registry/upstream/bff/internal/api/catalog_filters_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/catalog_filters_handler_test.go @@ -3,8 +3,8 @@ package api import ( "net/http" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/mocks" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/catalog_models_handler.go b/packages/model-registry/upstream/bff/internal/api/catalog_models_handler.go index a4ea49703e..227f123684 100644 --- a/packages/model-registry/upstream/bff/internal/api/catalog_models_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/catalog_models_handler.go @@ -5,9 +5,9 @@ import ( "net/http" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type CatalogModelListEnvelope Envelope[*models.CatalogModelList, None] diff --git a/packages/model-registry/upstream/bff/internal/api/catalog_models_handler_test.go b/packages/model-registry/upstream/bff/internal/api/catalog_models_handler_test.go index 301a42553e..1580357327 100644 --- a/packages/model-registry/upstream/bff/internal/api/catalog_models_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/catalog_models_handler_test.go @@ -3,8 +3,8 @@ package api import ( "net/http" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/mocks" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/catalog_source_preview_handler.go b/packages/model-registry/upstream/bff/internal/api/catalog_source_preview_handler.go index 88498b86ef..da0724149f 100644 --- a/packages/model-registry/upstream/bff/internal/api/catalog_source_preview_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/catalog_source_preview_handler.go @@ -7,9 +7,9 @@ import ( "net/http" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type CatalogSourcePreviewEnvelope Envelope[*models.CatalogSourcePreviewResult, None] diff --git a/packages/model-registry/upstream/bff/internal/api/catalog_source_preview_handler_test.go b/packages/model-registry/upstream/bff/internal/api/catalog_source_preview_handler_test.go index 09769cae24..9ed08fee37 100644 --- a/packages/model-registry/upstream/bff/internal/api/catalog_source_preview_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/catalog_source_preview_handler_test.go @@ -5,9 +5,9 @@ import ( "encoding/json" "net/http" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/models" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/catalog_sources_handler.go b/packages/model-registry/upstream/bff/internal/api/catalog_sources_handler.go index 564da37da3..6da3ce5746 100644 --- a/packages/model-registry/upstream/bff/internal/api/catalog_sources_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/catalog_sources_handler.go @@ -7,9 +7,9 @@ import ( "strings" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type CatalogSourceListEnvelope Envelope[*models.CatalogSourceList, None] diff --git a/packages/model-registry/upstream/bff/internal/api/catalog_sources_handler_test.go b/packages/model-registry/upstream/bff/internal/api/catalog_sources_handler_test.go index 7448dbdb13..576d945dcd 100644 --- a/packages/model-registry/upstream/bff/internal/api/catalog_sources_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/catalog_sources_handler_test.go @@ -3,8 +3,8 @@ package api import ( "net/http" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/mocks" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/check_namespace_registry_access_handler.go b/packages/model-registry/upstream/bff/internal/api/check_namespace_registry_access_handler.go index b6e4874ebf..8f71a38ee5 100644 --- a/packages/model-registry/upstream/bff/internal/api/check_namespace_registry_access_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/check_namespace_registry_access_handler.go @@ -6,8 +6,8 @@ import ( "net/http" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" ) const CheckNamespaceRegistryAccessPath = ApiPathPrefix + "/check-namespace-registry-access" diff --git a/packages/model-registry/upstream/bff/internal/api/check_namespace_registry_access_handler_test.go b/packages/model-registry/upstream/bff/internal/api/check_namespace_registry_access_handler_test.go index 51773e2d85..d322c09e6b 100644 --- a/packages/model-registry/upstream/bff/internal/api/check_namespace_registry_access_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/check_namespace_registry_access_handler_test.go @@ -8,10 +8,10 @@ import ( "net/http" "net/http/httptest" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/repositories" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/errors.go b/packages/model-registry/upstream/bff/internal/api/errors.go index 522169eb13..070fc2da9f 100644 --- a/packages/model-registry/upstream/bff/internal/api/errors.go +++ b/packages/model-registry/upstream/bff/internal/api/errors.go @@ -6,7 +6,7 @@ import ( "net/http" "strconv" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" ) type HTTPError struct { diff --git a/packages/model-registry/upstream/bff/internal/api/healthcheck__handler_test.go b/packages/model-registry/upstream/bff/internal/api/healthcheck__handler_test.go index de2ecc30c0..f17d96843c 100644 --- a/packages/model-registry/upstream/bff/internal/api/healthcheck__handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/healthcheck__handler_test.go @@ -7,10 +7,10 @@ import ( "net/http/httptest" "testing" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" - "github.com/kubeflow/model-registry/ui/bff/internal/models" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/repositories" "github.com/stretchr/testify/assert" ) diff --git a/packages/model-registry/upstream/bff/internal/api/mcp_servers_catalog_handler.go b/packages/model-registry/upstream/bff/internal/api/mcp_servers_catalog_handler.go index d8627daeaa..7ae8356412 100644 --- a/packages/model-registry/upstream/bff/internal/api/mcp_servers_catalog_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/mcp_servers_catalog_handler.go @@ -6,9 +6,9 @@ import ( "net/http" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type McpServerListEnvelope Envelope[*models.McpServerList, None] diff --git a/packages/model-registry/upstream/bff/internal/api/mcp_servers_catalog_handler_test.go b/packages/model-registry/upstream/bff/internal/api/mcp_servers_catalog_handler_test.go index c18e529b6b..d23e87e1b8 100644 --- a/packages/model-registry/upstream/bff/internal/api/mcp_servers_catalog_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/mcp_servers_catalog_handler_test.go @@ -3,8 +3,8 @@ package api import ( "net/http" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/mocks" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/middleware.go b/packages/model-registry/upstream/bff/internal/api/middleware.go index 01c868b2ad..a910796c68 100644 --- a/packages/model-registry/upstream/bff/internal/api/middleware.go +++ b/packages/model-registry/upstream/bff/internal/api/middleware.go @@ -8,16 +8,16 @@ import ( "runtime/debug" "strings" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/repositories" "github.com/google/uuid" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - helper "github.com/kubeflow/model-registry/ui/bff/internal/helpers" + "github.com/kubeflow/hub/ui/bff/internal/constants" + helper "github.com/kubeflow/hub/ui/bff/internal/helpers" "github.com/rs/cors" ) diff --git a/packages/model-registry/upstream/bff/internal/api/model_artifacts_handler.go b/packages/model-registry/upstream/bff/internal/api/model_artifacts_handler.go index c8a1de571f..90cb704679 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_artifacts_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/model_artifacts_handler.go @@ -6,11 +6,11 @@ import ( "fmt" "net/http" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" "github.com/julienschmidt/httprouter" + "github.com/kubeflow/hub/ui/bff/internal/constants" "github.com/kubeflow/model-registry/pkg/openapi" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" ) type ModelArtifactUpdateEnvelope Envelope[*openapi.ModelArtifactUpdate, None] diff --git a/packages/model-registry/upstream/bff/internal/api/model_artifacts_handler_test.go b/packages/model-registry/upstream/bff/internal/api/model_artifacts_handler_test.go index 055d464c9f..1fd11a2617 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_artifacts_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/model_artifacts_handler_test.go @@ -1,11 +1,12 @@ package api import ( - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" "net/http" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/brianvoe/gofakeit/v7" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/mocks" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/model_catalog_settings_handler.go b/packages/model-registry/upstream/bff/internal/api/model_catalog_settings_handler.go index 515f9086ac..96640a2dfe 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_catalog_settings_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/model_catalog_settings_handler.go @@ -7,9 +7,9 @@ import ( "net/http" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/models" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/repositories" ) type ModelCatalogSettingsSourceConfigEnvelope Envelope[*models.CatalogSourceConfig, None] diff --git a/packages/model-registry/upstream/bff/internal/api/model_catalog_settings_handler_test.go b/packages/model-registry/upstream/bff/internal/api/model_catalog_settings_handler_test.go index 364993c678..886bbce2b6 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_catalog_settings_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/model_catalog_settings_handler_test.go @@ -3,8 +3,8 @@ package api import ( "net/http" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/model_registry_handler.go b/packages/model-registry/upstream/bff/internal/api/model_registry_handler.go index 22b228a4b1..053e6d22b7 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_registry_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/model_registry_handler.go @@ -5,8 +5,8 @@ import ( "net/http" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type ModelRegistryListEnvelope Envelope[[]models.ModelRegistryModel, None] diff --git a/packages/model-registry/upstream/bff/internal/api/model_registry_handler_test.go b/packages/model-registry/upstream/bff/internal/api/model_registry_handler_test.go index f2d6b33d0e..1c558276a3 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_registry_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/model_registry_handler_test.go @@ -8,10 +8,10 @@ import ( "net/http" "net/http/httptest" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" - "github.com/kubeflow/model-registry/ui/bff/internal/models" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/repositories" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/model_registry_settings_groups_handler.go b/packages/model-registry/upstream/bff/internal/api/model_registry_settings_groups_handler.go index 7352137fa4..56073733e2 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_registry_settings_groups_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/model_registry_settings_groups_handler.go @@ -5,9 +5,9 @@ import ( "net/http" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type GroupsEnvelope Envelope[[]models.Group, None] diff --git a/packages/model-registry/upstream/bff/internal/api/model_registry_settings_groups_handler_test.go b/packages/model-registry/upstream/bff/internal/api/model_registry_settings_groups_handler_test.go index f1dcd01995..cc8e4d5cfa 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_registry_settings_groups_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/model_registry_settings_groups_handler_test.go @@ -7,10 +7,10 @@ import ( "net/http" "net/http/httptest" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/repositories" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/model_registry_settings_handler.go b/packages/model-registry/upstream/bff/internal/api/model_registry_settings_handler.go index dc8adcae25..95d35aa826 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_registry_settings_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/model_registry_settings_handler.go @@ -7,9 +7,9 @@ import ( "time" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - helper "github.com/kubeflow/model-registry/ui/bff/internal/helpers" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + helper "github.com/kubeflow/hub/ui/bff/internal/helpers" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type ModelRegistrySettingsListEnvelope Envelope[[]models.ModelRegistryKind, None] diff --git a/packages/model-registry/upstream/bff/internal/api/model_registry_settings_rbac_handler.go b/packages/model-registry/upstream/bff/internal/api/model_registry_settings_rbac_handler.go index e21180cf2b..653da4d28a 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_registry_settings_rbac_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/model_registry_settings_rbac_handler.go @@ -4,7 +4,7 @@ import ( "net/http" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/models" rbacv1 "k8s.io/api/rbac/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" // Add other necessary imports like context, slog, helpers etc. diff --git a/packages/model-registry/upstream/bff/internal/api/model_registry_settings_rbac_handler_test.go b/packages/model-registry/upstream/bff/internal/api/model_registry_settings_rbac_handler_test.go index 7421be1146..59e3d8d93a 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_registry_settings_rbac_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/model_registry_settings_rbac_handler_test.go @@ -9,11 +9,11 @@ import ( "net/http/httptest" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/repositories" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" rbacv1 "k8s.io/api/rbac/v1" diff --git a/packages/model-registry/upstream/bff/internal/api/model_transfer_job_handler.go b/packages/model-registry/upstream/bff/internal/api/model_transfer_job_handler.go index 2e5a2cf7ff..1b3dcc861a 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_transfer_job_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/model_transfer_job_handler.go @@ -7,9 +7,9 @@ import ( "net/http" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/models" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/repositories" ) type ModelTransferJobListEnvelope Envelope[*models.ModelTransferJobList, None] diff --git a/packages/model-registry/upstream/bff/internal/api/model_transfer_job_handler_test.go b/packages/model-registry/upstream/bff/internal/api/model_transfer_job_handler_test.go index bc4528123a..f70c88bdd4 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_transfer_job_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/model_transfer_job_handler_test.go @@ -3,8 +3,8 @@ package api import ( "net/http" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/model_versions_handler.go b/packages/model-registry/upstream/bff/internal/api/model_versions_handler.go index d9de9429d6..588cb4acae 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_versions_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/model_versions_handler.go @@ -7,10 +7,10 @@ import ( "net/http" "github.com/julienschmidt/httprouter" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/validation" "github.com/kubeflow/model-registry/pkg/openapi" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/validation" ) type ModelVersionEnvelope Envelope[*openapi.ModelVersion, None] diff --git a/packages/model-registry/upstream/bff/internal/api/model_versions_handler_test.go b/packages/model-registry/upstream/bff/internal/api/model_versions_handler_test.go index ec54c92e0a..505233d863 100644 --- a/packages/model-registry/upstream/bff/internal/api/model_versions_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/model_versions_handler_test.go @@ -1,12 +1,13 @@ package api import ( + "net/http" + + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/mocks" "github.com/kubeflow/model-registry/pkg/openapi" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - "net/http" ) var _ = Describe("TestGetModelVersionHandler", func() { diff --git a/packages/model-registry/upstream/bff/internal/api/namespaces_handler.go b/packages/model-registry/upstream/bff/internal/api/namespaces_handler.go index 2dfe785538..1a6dfe7fe8 100644 --- a/packages/model-registry/upstream/bff/internal/api/namespaces_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/namespaces_handler.go @@ -6,9 +6,9 @@ import ( "strings" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" apierrors "k8s.io/apimachinery/pkg/api/errors" ) diff --git a/packages/model-registry/upstream/bff/internal/api/namespaces_handler_test.go b/packages/model-registry/upstream/bff/internal/api/namespaces_handler_test.go index b6b8a458f8..e774de46a3 100644 --- a/packages/model-registry/upstream/bff/internal/api/namespaces_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/namespaces_handler_test.go @@ -7,12 +7,12 @@ import ( "net/http" "net/http/httptest" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes/k8mocks" - "github.com/kubeflow/model-registry/ui/bff/internal/models" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes/k8mocks" + "github.com/kubeflow/hub/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/repositories" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/api/public_helpers.go b/packages/model-registry/upstream/bff/internal/api/public_helpers.go index 742be14b2c..4b19b0e09d 100644 --- a/packages/model-registry/upstream/bff/internal/api/public_helpers.go +++ b/packages/model-registry/upstream/bff/internal/api/public_helpers.go @@ -7,9 +7,9 @@ import ( "log/slog" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/config" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/repositories" ) // BadRequest exposes the internal bad request helper for extensions. diff --git a/packages/model-registry/upstream/bff/internal/api/registered_models_handler.go b/packages/model-registry/upstream/bff/internal/api/registered_models_handler.go index 2b147cbff5..012128b5e3 100644 --- a/packages/model-registry/upstream/bff/internal/api/registered_models_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/registered_models_handler.go @@ -7,10 +7,10 @@ import ( "net/http" "github.com/julienschmidt/httprouter" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/validation" "github.com/kubeflow/model-registry/pkg/openapi" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/validation" ) type RegisteredModelEnvelope Envelope[*openapi.RegisteredModel, None] diff --git a/packages/model-registry/upstream/bff/internal/api/registered_models_handler_test.go b/packages/model-registry/upstream/bff/internal/api/registered_models_handler_test.go index 5664b4d634..777eb3036f 100644 --- a/packages/model-registry/upstream/bff/internal/api/registered_models_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/registered_models_handler_test.go @@ -1,12 +1,13 @@ package api import ( + "net/http" + + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/mocks" "github.com/kubeflow/model-registry/pkg/openapi" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - "net/http" ) var _ = Describe("TestGetRegisteredModelHandler", func() { diff --git a/packages/model-registry/upstream/bff/internal/api/suite_test.go b/packages/model-registry/upstream/bff/internal/api/suite_test.go index 8eb06bab78..6e23e84f64 100644 --- a/packages/model-registry/upstream/bff/internal/api/suite_test.go +++ b/packages/model-registry/upstream/bff/internal/api/suite_test.go @@ -6,13 +6,13 @@ import ( "os" "testing" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes/k8mocks" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes/k8mocks" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "sigs.k8s.io/controller-runtime/pkg/envtest" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/mocks" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" diff --git a/packages/model-registry/upstream/bff/internal/api/test_app.go b/packages/model-registry/upstream/bff/internal/api/test_app.go index 776c0f3650..386fd0b478 100644 --- a/packages/model-registry/upstream/bff/internal/api/test_app.go +++ b/packages/model-registry/upstream/bff/internal/api/test_app.go @@ -4,9 +4,9 @@ import ( "io" "log/slog" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/config" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/repositories" ) // NewTestApp exposes a minimal constructor that allows tests and downstream diff --git a/packages/model-registry/upstream/bff/internal/api/test_utils.go b/packages/model-registry/upstream/bff/internal/api/test_utils.go index 72a1b0c2d3..7d9bc60197 100644 --- a/packages/model-registry/upstream/bff/internal/api/test_utils.go +++ b/packages/model-registry/upstream/bff/internal/api/test_utils.go @@ -11,13 +11,13 @@ import ( "os" "path/filepath" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/config" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/repositories" ) func setupApiTest[T any](method string, url string, body interface{}, k8Factory kubernetes.KubernetesClientFactory, requestIdentity kubernetes.RequestIdentity, namespace string) (T, *http.Response, error) { diff --git a/packages/model-registry/upstream/bff/internal/api/user_handler.go b/packages/model-registry/upstream/bff/internal/api/user_handler.go index 9890843295..17fb742751 100644 --- a/packages/model-registry/upstream/bff/internal/api/user_handler.go +++ b/packages/model-registry/upstream/bff/internal/api/user_handler.go @@ -2,11 +2,12 @@ package api import ( "fmt" - "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" "net/http" + + "github.com/julienschmidt/httprouter" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type UserEnvelope Envelope[*models.User, None] diff --git a/packages/model-registry/upstream/bff/internal/api/user_handler_test.go b/packages/model-registry/upstream/bff/internal/api/user_handler_test.go index 812e9de69c..d0b8e94c57 100644 --- a/packages/model-registry/upstream/bff/internal/api/user_handler_test.go +++ b/packages/model-registry/upstream/bff/internal/api/user_handler_test.go @@ -7,10 +7,10 @@ import ( "net/http" "net/http/httptest" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/repositories" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/helpers/logging.go b/packages/model-registry/upstream/bff/internal/helpers/logging.go index 40b60f67fa..11ba74016f 100644 --- a/packages/model-registry/upstream/bff/internal/helpers/logging.go +++ b/packages/model-registry/upstream/bff/internal/helpers/logging.go @@ -4,11 +4,12 @@ import ( "bytes" "context" "fmt" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" "io" "log/slog" "net/http" "slices" + + "github.com/kubeflow/hub/ui/bff/internal/constants" ) func GetContextLoggerFromReq(r *http.Request) *slog.Logger { diff --git a/packages/model-registry/upstream/bff/internal/helpers/mcpserver_converter.go b/packages/model-registry/upstream/bff/internal/helpers/mcpserver_converter.go index b8dbdbf662..b721ad31ac 100644 --- a/packages/model-registry/upstream/bff/internal/helpers/mcpserver_converter.go +++ b/packages/model-registry/upstream/bff/internal/helpers/mcpserver_converter.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/models" corev1 "k8s.io/api/core/v1" ) diff --git a/packages/model-registry/upstream/bff/internal/helpers/mcpserver_converter_test.go b/packages/model-registry/upstream/bff/internal/helpers/mcpserver_converter_test.go index 13c9915bec..64e45c4cbd 100644 --- a/packages/model-registry/upstream/bff/internal/helpers/mcpserver_converter_test.go +++ b/packages/model-registry/upstream/bff/internal/helpers/mcpserver_converter_test.go @@ -3,7 +3,7 @@ package helper import ( "testing" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/models" "github.com/stretchr/testify/assert" ) diff --git a/packages/model-registry/upstream/bff/internal/integrations/httpclient/http.go b/packages/model-registry/upstream/bff/internal/integrations/httpclient/http.go index 3e6e0b1128..30c6d7b6cf 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/httpclient/http.go +++ b/packages/model-registry/upstream/bff/internal/integrations/httpclient/http.go @@ -11,7 +11,7 @@ import ( "strconv" "github.com/google/uuid" - helper "github.com/kubeflow/model-registry/ui/bff/internal/helpers" + helper "github.com/kubeflow/hub/ui/bff/internal/helpers" ) type HTTPClientInterface interface { @@ -102,7 +102,7 @@ func (c *HTTPClient) GET(url string) ([]byte, error) { } //Sometimes the code comes empty from model registry API //also not all error codes are correctly implemented - //see https://github.com/kubeflow/model-registry/issues/95 + //see https://github.com/kubeflow/hub/issues/95 if httpError.Code == "" { httpError.Code = strconv.Itoa(response.StatusCode) } @@ -163,7 +163,7 @@ func (c *HTTPClient) POSTWithContentType(url string, body io.Reader, contentType } //Sometimes the code comes empty from model registry API //also not all error codes are correctly implemented - //see https://github.com/kubeflow/model-registry/issues/95 + //see https://github.com/kubeflow/hub/issues/95 if httpError.Code == "" { httpError.Code = strconv.Itoa(response.StatusCode) } @@ -220,7 +220,7 @@ func (c *HTTPClient) PATCH(url string, body io.Reader) ([]byte, error) { } //Sometimes the code comes empty from model registry API //also not all error codes are correctly implemented - //see https://github.com/kubeflow/model-registry/issues/95 + //see https://github.com/kubeflow/hub/issues/95 if httpError.Code == "" { httpError.Code = strconv.Itoa(response.StatusCode) } diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/factory.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/factory.go index d3d4e0d3a1..6767a73966 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/factory.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/factory.go @@ -8,8 +8,8 @@ import ( "net/http" "strings" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/constants" ) // ─── STATIC FACTORY (INTERNAL) ────────────────────────────────────────── diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/internal_k8s_client.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/internal_k8s_client.go index 4b946c0961..0507e9e251 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/internal_k8s_client.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/internal_k8s_client.go @@ -6,7 +6,7 @@ import ( "log/slog" "time" - helper "github.com/kubeflow/model-registry/ui/bff/internal/helpers" + helper "github.com/kubeflow/hub/ui/bff/internal/helpers" authv1 "k8s.io/api/authorization/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/base_testenv.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/base_testenv.go index 8acf16ae44..86aa3bd6f0 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/base_testenv.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/base_testenv.go @@ -12,7 +12,7 @@ import ( "strings" "time" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" rbacv1 "k8s.io/api/rbac/v1" @@ -923,7 +923,7 @@ func createModelTransferJob(k8sClient kubernetes.Interface, ctx context.Context, Containers: []corev1.Container{ { Name: "async-upload", - Image: "ghcr.io/kubeflow/model-registry/job/async-upload:latest", + Image: "ghcr.io/kubeflow/hub/job/async-upload:latest", Env: []corev1.EnvVar{ {Name: "MODEL_SYNC_SOURCE_TYPE", Value: "s3"}, {Name: "MODEL_SYNC_SOURCE_AWS_KEY", Value: "models/my-model"}, @@ -1045,7 +1045,7 @@ func createModelTransferJob(k8sClient kubernetes.Interface, ctx context.Context, Containers: []corev1.Container{ { Name: "async-upload", - Image: "ghcr.io/kubeflow/model-registry/job/async-upload:latest", + Image: "ghcr.io/kubeflow/hub/job/async-upload:latest", }, }, }, @@ -1122,7 +1122,7 @@ func createModelTransferJob(k8sClient kubernetes.Interface, ctx context.Context, Containers: []corev1.Container{ { Name: "async-upload", - Image: "ghcr.io/kubeflow/model-registry/job/async-upload:latest", + Image: "ghcr.io/kubeflow/hub/job/async-upload:latest", }, }, }, @@ -1168,7 +1168,7 @@ func createModelTransferJob(k8sClient kubernetes.Interface, ctx context.Context, Spec: corev1.PodSpec{ RestartPolicy: corev1.RestartPolicyNever, Containers: []corev1.Container{ - {Name: "async-upload", Image: "ghcr.io/kubeflow/model-registry/job/async-upload:latest"}, + {Name: "async-upload", Image: "ghcr.io/kubeflow/hub/job/async-upload:latest"}, }, }, }, diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/internal_k8s_client_mock.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/internal_k8s_client_mock.go index c77ed2d61e..61ac82067e 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/internal_k8s_client_mock.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/internal_k8s_client_mock.go @@ -5,7 +5,7 @@ import ( "fmt" "log/slog" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" corev1 "k8s.io/api/core/v1" "k8s.io/client-go/kubernetes" ) diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/mock_factory.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/mock_factory.go index 0e3bd42d2c..1dadfb165d 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/mock_factory.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/mock_factory.go @@ -3,15 +3,16 @@ package k8mocks import ( "context" "fmt" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/rest" "log/slog" "net/http" - "sigs.k8s.io/controller-runtime/pkg/envtest" "sync" + + "github.com/kubeflow/hub/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/constants" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/envtest" ) type MockedKubernetesClientFactory interface { diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/token_k8s_client_mock.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/token_k8s_client_mock.go index c7efc05614..fbe59caa97 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/token_k8s_client_mock.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/k8mocks/token_k8s_client_mock.go @@ -5,7 +5,7 @@ import ( "fmt" "log/slog" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" corev1 "k8s.io/api/core/v1" "k8s.io/client-go/kubernetes" ) diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/shared_k8s_client.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/shared_k8s_client.go index 851870eb8f..9b275b4cee 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/shared_k8s_client.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/shared_k8s_client.go @@ -8,7 +8,7 @@ import ( "strings" "time" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/constants" batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/shared_k8s_client_test.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/shared_k8s_client_test.go index ce7fe474ef..d0e6965294 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/shared_k8s_client_test.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/shared_k8s_client_test.go @@ -5,7 +5,7 @@ import ( "log/slog" "testing" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/constants" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes/fake" diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/factory_test.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/factory_test.go index 7be647bd94..5742c512c2 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/factory_test.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/factory_test.go @@ -1,10 +1,11 @@ package tests import ( - "github.com/kubeflow/model-registry/ui/bff/internal/config" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" "net/http" + "github.com/kubeflow/hub/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/internal_k8s_client_test.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/internal_k8s_client_test.go index 27138dc437..6bfd0e12ec 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/internal_k8s_client_test.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/internal_k8s_client_test.go @@ -1,9 +1,9 @@ package tests import ( - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - mocks2 "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes/k8mocks" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + mocks2 "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes/k8mocks" + "github.com/kubeflow/hub/ui/bff/internal/mocks" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/namespace_registry_access_test.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/namespace_registry_access_test.go index 5dcccdb5d4..851f5787d4 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/namespace_registry_access_test.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/namespace_registry_access_test.go @@ -3,7 +3,7 @@ package tests import ( "context" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/suite_test.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/suite_test.go index 1470a005c5..1359d940c4 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/suite_test.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/suite_test.go @@ -2,20 +2,20 @@ package tests import ( "context" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes/k8mocks" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/rest" "log/slog" "os" + "testing" + + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes/k8mocks" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" "sigs.k8s.io/controller-runtime/pkg/envtest" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" - "testing" -) -import ( . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/token_k8s_client_test.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/token_k8s_client_test.go index 7c05ac45ae..ccd4049709 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/token_k8s_client_test.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/tests/token_k8s_client_test.go @@ -2,9 +2,10 @@ package tests import ( "context" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - k8mocks "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes/k8mocks" + + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + k8mocks "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes/k8mocks" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/token_k8s_client.go b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/token_k8s_client.go index 19590362a6..eb87a974f6 100644 --- a/packages/model-registry/upstream/bff/internal/integrations/kubernetes/token_k8s_client.go +++ b/packages/model-registry/upstream/bff/internal/integrations/kubernetes/token_k8s_client.go @@ -7,7 +7,7 @@ import ( "strings" "time" - helper "github.com/kubeflow/model-registry/ui/bff/internal/helpers" + helper "github.com/kubeflow/hub/ui/bff/internal/helpers" authnv1 "k8s.io/api/authentication/v1" authv1 "k8s.io/api/authorization/v1" corev1 "k8s.io/api/core/v1" diff --git a/packages/model-registry/upstream/bff/internal/mocks/model_catalog_client_mock.go b/packages/model-registry/upstream/bff/internal/mocks/model_catalog_client_mock.go index a0d6fcca36..e281be93be 100644 --- a/packages/model-registry/upstream/bff/internal/mocks/model_catalog_client_mock.go +++ b/packages/model-registry/upstream/bff/internal/mocks/model_catalog_client_mock.go @@ -8,9 +8,9 @@ import ( "strconv" "strings" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/models" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" "github.com/stretchr/testify/mock" ) diff --git a/packages/model-registry/upstream/bff/internal/mocks/model_registry_client_mock.go b/packages/model-registry/upstream/bff/internal/mocks/model_registry_client_mock.go index 2e90ec6d8a..202b587d5f 100644 --- a/packages/model-registry/upstream/bff/internal/mocks/model_registry_client_mock.go +++ b/packages/model-registry/upstream/bff/internal/mocks/model_registry_client_mock.go @@ -4,7 +4,7 @@ import ( "log/slog" "net/url" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" "github.com/kubeflow/model-registry/pkg/openapi" "github.com/stretchr/testify/mock" diff --git a/packages/model-registry/upstream/bff/internal/mocks/static_data_mock.go b/packages/model-registry/upstream/bff/internal/mocks/static_data_mock.go index f4628a75be..9f5cbf3f7f 100644 --- a/packages/model-registry/upstream/bff/internal/mocks/static_data_mock.go +++ b/packages/model-registry/upstream/bff/internal/mocks/static_data_mock.go @@ -9,9 +9,9 @@ import ( "github.com/brianvoe/gofakeit/v7" "github.com/google/uuid" + "github.com/kubeflow/hub/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/models" "github.com/kubeflow/model-registry/pkg/openapi" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - "github.com/kubeflow/model-registry/ui/bff/internal/models" ) func GetRegisteredModelMocks() []openapi.RegisteredModel { diff --git a/packages/model-registry/upstream/bff/internal/redhat/handlers/kubernetes_services.go b/packages/model-registry/upstream/bff/internal/redhat/handlers/kubernetes_services.go index 31ba19c6cf..da139a5210 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/handlers/kubernetes_services.go +++ b/packages/model-registry/upstream/bff/internal/redhat/handlers/kubernetes_services.go @@ -6,8 +6,8 @@ import ( "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" + "github.com/kubeflow/hub/ui/bff/internal/api" + "github.com/kubeflow/hub/ui/bff/internal/constants" ) // KubernetesServicesListEnvelope is the response envelope for listing Kubernetes services. diff --git a/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_deployment_auth.go b/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_deployment_auth.go index bea76a0fb3..c1a4bb7514 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_deployment_auth.go +++ b/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_deployment_auth.go @@ -5,10 +5,10 @@ import ( "log/slog" "net/http" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/api" + "github.com/kubeflow/hub/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/constants" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" ) // requireMcpDeploymentAccess performs a permission check to verify that the diff --git a/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_deployments.go b/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_deployments.go index a91fae5743..a761de4841 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_deployments.go +++ b/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_deployments.go @@ -10,10 +10,10 @@ import ( "github.com/julienschmidt/httprouter" apierrors "k8s.io/apimachinery/pkg/api/errors" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" - redhatrepos "github.com/kubeflow/model-registry/ui/bff/internal/redhat/repositories" + "github.com/kubeflow/hub/ui/bff/internal/api" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" + redhatrepos "github.com/kubeflow/hub/ui/bff/internal/redhat/repositories" ) type McpDeploymentListEnvelope api.Envelope[models.McpDeploymentList, api.None] diff --git a/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_deployments_test.go b/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_deployments_test.go index 2179ae0ff9..3d7a3ba579 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_deployments_test.go +++ b/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_deployments_test.go @@ -14,11 +14,11 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime/schema" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" - redhatrepos "github.com/kubeflow/model-registry/ui/bff/internal/redhat/repositories" + "github.com/kubeflow/hub/ui/bff/internal/api" + "github.com/kubeflow/hub/ui/bff/internal/config" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" + redhatrepos "github.com/kubeflow/hub/ui/bff/internal/redhat/repositories" ) type mockMcpDeploymentRepo struct { diff --git a/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_server_availability.go b/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_server_availability.go index 0584eca813..36bf7fd310 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_server_availability.go +++ b/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_server_availability.go @@ -6,9 +6,9 @@ import ( "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - redhatrepos "github.com/kubeflow/model-registry/ui/bff/internal/redhat/repositories" + "github.com/kubeflow/hub/ui/bff/internal/api" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + redhatrepos "github.com/kubeflow/hub/ui/bff/internal/redhat/repositories" ) type McpServerAvailabilityEnvelope api.Envelope[McpServerAvailabilityResponse, api.None] diff --git a/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_server_availability_test.go b/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_server_availability_test.go index dc9f9f2b4f..67e488b3df 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_server_availability_test.go +++ b/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_server_availability_test.go @@ -9,9 +9,9 @@ import ( "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/api" + "github.com/kubeflow/hub/ui/bff/internal/config" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" ) type mockMcpServerAvailabilityRepo struct { diff --git a/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_server_converter.go b/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_server_converter.go index cde16a204a..ea367b9086 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_server_converter.go +++ b/packages/model-registry/upstream/bff/internal/redhat/handlers/mcp_server_converter.go @@ -7,11 +7,11 @@ import ( "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - helper "github.com/kubeflow/model-registry/ui/bff/internal/helpers" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/api" + "github.com/kubeflow/hub/ui/bff/internal/constants" + helper "github.com/kubeflow/hub/ui/bff/internal/helpers" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type MCPServerEnvelope api.Envelope[*models.MCPServer, api.None] diff --git a/packages/model-registry/upstream/bff/internal/redhat/handlers/model_registry_settings.go b/packages/model-registry/upstream/bff/internal/redhat/handlers/model_registry_settings.go index 6d7059ce55..d15f7929d9 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/handlers/model_registry_settings.go +++ b/packages/model-registry/upstream/bff/internal/redhat/handlers/model_registry_settings.go @@ -9,11 +9,11 @@ import ( "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" - redhatrepos "github.com/kubeflow/model-registry/ui/bff/internal/redhat/repositories" + "github.com/kubeflow/hub/ui/bff/internal/api" + "github.com/kubeflow/hub/ui/bff/internal/constants" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" + redhatrepos "github.com/kubeflow/hub/ui/bff/internal/redhat/repositories" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) diff --git a/packages/model-registry/upstream/bff/internal/redhat/handlers/model_registry_settings_test.go b/packages/model-registry/upstream/bff/internal/redhat/handlers/model_registry_settings_test.go index f1bba08138..4e58573da1 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/handlers/model_registry_settings_test.go +++ b/packages/model-registry/upstream/bff/internal/redhat/handlers/model_registry_settings_test.go @@ -12,10 +12,10 @@ import ( "testing" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/api" + "github.com/kubeflow/hub/ui/bff/internal/config" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) diff --git a/packages/model-registry/upstream/bff/internal/redhat/handlers/model_transfer_jobs.go b/packages/model-registry/upstream/bff/internal/redhat/handlers/model_transfer_jobs.go index 39e63c60e2..48796d917c 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/handlers/model_transfer_jobs.go +++ b/packages/model-registry/upstream/bff/internal/redhat/handlers/model_transfer_jobs.go @@ -10,10 +10,10 @@ import ( "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - helper "github.com/kubeflow/model-registry/ui/bff/internal/helpers" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/api" + "github.com/kubeflow/hub/ui/bff/internal/constants" + helper "github.com/kubeflow/hub/ui/bff/internal/helpers" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" batchv1 "k8s.io/api/batch/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" diff --git a/packages/model-registry/upstream/bff/internal/redhat/handlers/model_transfer_jobs_test.go b/packages/model-registry/upstream/bff/internal/redhat/handlers/model_transfer_jobs_test.go index f536927714..ab3f07bed7 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/handlers/model_transfer_jobs_test.go +++ b/packages/model-registry/upstream/bff/internal/redhat/handlers/model_transfer_jobs_test.go @@ -10,11 +10,11 @@ import ( "testing" "github.com/julienschmidt/httprouter" - "github.com/kubeflow/model-registry/ui/bff/internal/api" - "github.com/kubeflow/model-registry/ui/bff/internal/config" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/repositories" + "github.com/kubeflow/hub/ui/bff/internal/api" + "github.com/kubeflow/hub/ui/bff/internal/config" + "github.com/kubeflow/hub/ui/bff/internal/constants" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/repositories" batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/packages/model-registry/upstream/bff/internal/redhat/repositories/mcp_deployment_repository.go b/packages/model-registry/upstream/bff/internal/redhat/repositories/mcp_deployment_repository.go index 8ab16ccfe2..2589a376bf 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/repositories/mcp_deployment_repository.go +++ b/packages/model-registry/upstream/bff/internal/redhat/repositories/mcp_deployment_repository.go @@ -10,8 +10,8 @@ import ( "strings" "github.com/google/uuid" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" "gopkg.in/yaml.v3" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/packages/model-registry/upstream/bff/internal/redhat/repositories/mcp_deployment_repository_test.go b/packages/model-registry/upstream/bff/internal/redhat/repositories/mcp_deployment_repository_test.go index 9ef99ac5b1..dbea368a34 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/repositories/mcp_deployment_repository_test.go +++ b/packages/model-registry/upstream/bff/internal/redhat/repositories/mcp_deployment_repository_test.go @@ -5,7 +5,7 @@ import ( "strings" "testing" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/models" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" ) diff --git a/packages/model-registry/upstream/bff/internal/redhat/repositories/mcp_server_availability_repository.go b/packages/model-registry/upstream/bff/internal/redhat/repositories/mcp_server_availability_repository.go index a96b81a24a..a97767981a 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/repositories/mcp_server_availability_repository.go +++ b/packages/model-registry/upstream/bff/internal/redhat/repositories/mcp_server_availability_repository.go @@ -5,7 +5,7 @@ import ( "fmt" "log/slog" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" "k8s.io/client-go/discovery" ) diff --git a/packages/model-registry/upstream/bff/internal/redhat/repositories/model_registry_conversion.go b/packages/model-registry/upstream/bff/internal/redhat/repositories/model_registry_conversion.go index ca888e83e4..32acc9599b 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/repositories/model_registry_conversion.go +++ b/packages/model-registry/upstream/bff/internal/redhat/repositories/model_registry_conversion.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/models" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" diff --git a/packages/model-registry/upstream/bff/internal/redhat/repositories/model_registry_settings_repository.go b/packages/model-registry/upstream/bff/internal/redhat/repositories/model_registry_settings_repository.go index 9f6ce9139d..aa696461fe 100644 --- a/packages/model-registry/upstream/bff/internal/redhat/repositories/model_registry_settings_repository.go +++ b/packages/model-registry/upstream/bff/internal/redhat/repositories/model_registry_settings_repository.go @@ -8,9 +8,9 @@ import ( "fmt" "log/slog" - helper "github.com/kubeflow/model-registry/ui/bff/internal/helpers" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + helper "github.com/kubeflow/hub/ui/bff/internal/helpers" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/packages/model-registry/upstream/bff/internal/repositories/artifacts.go b/packages/model-registry/upstream/bff/internal/repositories/artifacts.go index e0721e0028..70f08c9c51 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/artifacts.go +++ b/packages/model-registry/upstream/bff/internal/repositories/artifacts.go @@ -4,9 +4,10 @@ import ( "bytes" "encoding/json" "fmt" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" "net/url" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/model-registry/pkg/openapi" ) diff --git a/packages/model-registry/upstream/bff/internal/repositories/catalog_models.go b/packages/model-registry/upstream/bff/internal/repositories/catalog_models.go index 0bdde3e6aa..3459cbe871 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/catalog_models.go +++ b/packages/model-registry/upstream/bff/internal/repositories/catalog_models.go @@ -5,8 +5,8 @@ import ( "fmt" "net/url" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/models" ) const catalogModelsPath = "/models" diff --git a/packages/model-registry/upstream/bff/internal/repositories/catalog_source_preview.go b/packages/model-registry/upstream/bff/internal/repositories/catalog_source_preview.go index 41a22dbd61..fa360e69db 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/catalog_source_preview.go +++ b/packages/model-registry/upstream/bff/internal/repositories/catalog_source_preview.go @@ -7,8 +7,8 @@ import ( "mime/multipart" "net/url" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type CatalogSourcePreviewInterface interface { diff --git a/packages/model-registry/upstream/bff/internal/repositories/catalog_source_preview_test.go b/packages/model-registry/upstream/bff/internal/repositories/catalog_source_preview_test.go index 94c746bfb4..60c07b9ab3 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/catalog_source_preview_test.go +++ b/packages/model-registry/upstream/bff/internal/repositories/catalog_source_preview_test.go @@ -5,9 +5,9 @@ import ( "net/url" "testing" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/models" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) diff --git a/packages/model-registry/upstream/bff/internal/repositories/catalog_sources.go b/packages/model-registry/upstream/bff/internal/repositories/catalog_sources.go index baefdfc729..4f435af2ae 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/catalog_sources.go +++ b/packages/model-registry/upstream/bff/internal/repositories/catalog_sources.go @@ -5,8 +5,8 @@ import ( "fmt" "net/url" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/models" ) const sourcesPath = "/sources" diff --git a/packages/model-registry/upstream/bff/internal/repositories/health_check.go b/packages/model-registry/upstream/bff/internal/repositories/health_check.go index a012b5116c..a546ab8ffe 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/health_check.go +++ b/packages/model-registry/upstream/bff/internal/repositories/health_check.go @@ -1,6 +1,6 @@ package repositories -import "github.com/kubeflow/model-registry/ui/bff/internal/models" +import "github.com/kubeflow/hub/ui/bff/internal/models" type HealthCheckRepository struct{} diff --git a/packages/model-registry/upstream/bff/internal/repositories/helpers.go b/packages/model-registry/upstream/bff/internal/repositories/helpers.go index 2acd8556cb..948a576ece 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/helpers.go +++ b/packages/model-registry/upstream/bff/internal/repositories/helpers.go @@ -4,7 +4,7 @@ import ( "fmt" "net/url" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/models" "gopkg.in/yaml.v3" ) diff --git a/packages/model-registry/upstream/bff/internal/repositories/mcp_server_catalog.go b/packages/model-registry/upstream/bff/internal/repositories/mcp_server_catalog.go index a17a30bafe..a05e771da4 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/mcp_server_catalog.go +++ b/packages/model-registry/upstream/bff/internal/repositories/mcp_server_catalog.go @@ -5,8 +5,8 @@ import ( "fmt" "net/url" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/models" ) const mcpServerPath = "/mcp_servers" diff --git a/packages/model-registry/upstream/bff/internal/repositories/mcp_server_catalog_test.go b/packages/model-registry/upstream/bff/internal/repositories/mcp_server_catalog_test.go index b7c0d3a0a4..b738d163cd 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/mcp_server_catalog_test.go +++ b/packages/model-registry/upstream/bff/internal/repositories/mcp_server_catalog_test.go @@ -6,8 +6,8 @@ import ( "strings" "testing" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/hub/ui/bff/internal/mocks" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) diff --git a/packages/model-registry/upstream/bff/internal/repositories/model_artifacts.go b/packages/model-registry/upstream/bff/internal/repositories/model_artifacts.go index a4a0e7ee7b..84d6cf8fc0 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/model_artifacts.go +++ b/packages/model-registry/upstream/bff/internal/repositories/model_artifacts.go @@ -4,9 +4,10 @@ import ( "bytes" "encoding/json" "fmt" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" "net/url" + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/model-registry/pkg/openapi" ) diff --git a/packages/model-registry/upstream/bff/internal/repositories/model_catalog.go b/packages/model-registry/upstream/bff/internal/repositories/model_catalog.go index b7359c5c7f..81e1c84ed5 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/model_catalog.go +++ b/packages/model-registry/upstream/bff/internal/repositories/model_catalog.go @@ -4,8 +4,8 @@ import ( "context" "fmt" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" ) const ( diff --git a/packages/model-registry/upstream/bff/internal/repositories/model_catalog_settings.go b/packages/model-registry/upstream/bff/internal/repositories/model_catalog_settings.go index 4acae29147..8dc8612d3f 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/model_catalog_settings.go +++ b/packages/model-registry/upstream/bff/internal/repositories/model_catalog_settings.go @@ -8,9 +8,9 @@ import ( "regexp" "strings" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/packages/model-registry/upstream/bff/internal/repositories/model_catalog_settings_test.go b/packages/model-registry/upstream/bff/internal/repositories/model_catalog_settings_test.go index c203227ff7..94198fb86e 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/model_catalog_settings_test.go +++ b/packages/model-registry/upstream/bff/internal/repositories/model_catalog_settings_test.go @@ -4,9 +4,9 @@ import ( "context" "strings" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/models" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" apierrors "k8s.io/apimachinery/pkg/api/errors" diff --git a/packages/model-registry/upstream/bff/internal/repositories/model_registry.go b/packages/model-registry/upstream/bff/internal/repositories/model_registry.go index ecaa76c9e7..0b76ebdaab 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/model_registry.go +++ b/packages/model-registry/upstream/bff/internal/repositories/model_registry.go @@ -4,10 +4,10 @@ import ( "context" "fmt" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - helper "github.com/kubeflow/model-registry/ui/bff/internal/helpers" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + helper "github.com/kubeflow/hub/ui/bff/internal/helpers" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type ModelRegistryRepository struct{} diff --git a/packages/model-registry/upstream/bff/internal/repositories/model_registry_settings.go b/packages/model-registry/upstream/bff/internal/repositories/model_registry_settings.go index a55f009785..415ae5ccb4 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/model_registry_settings.go +++ b/packages/model-registry/upstream/bff/internal/repositories/model_registry_settings.go @@ -4,8 +4,8 @@ import ( "context" "fmt" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type ModelRegistrySettingsRepository struct { diff --git a/packages/model-registry/upstream/bff/internal/repositories/model_registry_settings_test.go b/packages/model-registry/upstream/bff/internal/repositories/model_registry_settings_test.go index 7f1111337a..cb4f615488 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/model_registry_settings_test.go +++ b/packages/model-registry/upstream/bff/internal/repositories/model_registry_settings_test.go @@ -3,8 +3,8 @@ package repositories import ( "context" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/models" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/repositories/model_registry_test.go b/packages/model-registry/upstream/bff/internal/repositories/model_registry_test.go index 3cdc54948f..b683a54d5e 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/model_registry_test.go +++ b/packages/model-registry/upstream/bff/internal/repositories/model_registry_test.go @@ -3,10 +3,10 @@ package repositories import ( "context" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/models" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/repositories/model_transfer_jobs.go b/packages/model-registry/upstream/bff/internal/repositories/model_transfer_jobs.go index 63cddd78c8..e6232cd863 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/model_transfer_jobs.go +++ b/packages/model-registry/upstream/bff/internal/repositories/model_transfer_jobs.go @@ -11,10 +11,10 @@ import ( "strings" "github.com/google/uuid" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - helper "github.com/kubeflow/model-registry/ui/bff/internal/helpers" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + helper "github.com/kubeflow/hub/ui/bff/internal/helpers" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -24,7 +24,7 @@ import ( const ( // DefaultAsyncUploadImage is the default container image for async-upload jobs. - DefaultAsyncUploadImage = "ghcr.io/kubeflow/model-registry/job/async-upload:latest" + DefaultAsyncUploadImage = "ghcr.io/kubeflow/hub/job/async-upload:latest" asyncUploadConfigMapName = "model-registry-ui-config" asyncUploadConfigMapKey = "images-jobs-async-upload" ) diff --git a/packages/model-registry/upstream/bff/internal/repositories/model_transfer_jobs_test.go b/packages/model-registry/upstream/bff/internal/repositories/model_transfer_jobs_test.go index 80d4277b2d..59248e4e83 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/model_transfer_jobs_test.go +++ b/packages/model-registry/upstream/bff/internal/repositories/model_transfer_jobs_test.go @@ -5,10 +5,10 @@ import ( "testing" "time" - "github.com/kubeflow/model-registry/ui/bff/internal/constants" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + "github.com/kubeflow/hub/ui/bff/internal/constants" + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/models" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" batchv1 "k8s.io/api/batch/v1" diff --git a/packages/model-registry/upstream/bff/internal/repositories/model_version.go b/packages/model-registry/upstream/bff/internal/repositories/model_version.go index a764257392..246259e9bd 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/model_version.go +++ b/packages/model-registry/upstream/bff/internal/repositories/model_version.go @@ -4,9 +4,10 @@ import ( "bytes" "encoding/json" "fmt" - "github.com/kubeflow/model-registry/pkg/openapi" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" "net/url" + + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/model-registry/pkg/openapi" ) const modelVersionPath = "/model_versions" diff --git a/packages/model-registry/upstream/bff/internal/repositories/model_version_test.go b/packages/model-registry/upstream/bff/internal/repositories/model_version_test.go index 40d0522ff1..caebfb6aae 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/model_version_test.go +++ b/packages/model-registry/upstream/bff/internal/repositories/model_version_test.go @@ -8,7 +8,7 @@ import ( "testing" "github.com/brianvoe/gofakeit/v7" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/mocks" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) diff --git a/packages/model-registry/upstream/bff/internal/repositories/namespace.go b/packages/model-registry/upstream/bff/internal/repositories/namespace.go index 242b37eef2..7bc373ddca 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/namespace.go +++ b/packages/model-registry/upstream/bff/internal/repositories/namespace.go @@ -3,8 +3,9 @@ package repositories import ( "context" "fmt" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type NamespaceRepository struct{} diff --git a/packages/model-registry/upstream/bff/internal/repositories/registered_model.go b/packages/model-registry/upstream/bff/internal/repositories/registered_model.go index d8629c92bd..fd71064674 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/registered_model.go +++ b/packages/model-registry/upstream/bff/internal/repositories/registered_model.go @@ -4,9 +4,10 @@ import ( "bytes" "encoding/json" "fmt" - "github.com/kubeflow/model-registry/pkg/openapi" - "github.com/kubeflow/model-registry/ui/bff/internal/integrations/httpclient" "net/url" + + "github.com/kubeflow/hub/ui/bff/internal/integrations/httpclient" + "github.com/kubeflow/model-registry/pkg/openapi" ) const registeredModelPath = "/registered_models" diff --git a/packages/model-registry/upstream/bff/internal/repositories/registered_model_test.go b/packages/model-registry/upstream/bff/internal/repositories/registered_model_test.go index 78aa0d3e1b..8c7a8843da 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/registered_model_test.go +++ b/packages/model-registry/upstream/bff/internal/repositories/registered_model_test.go @@ -8,7 +8,7 @@ import ( "testing" "github.com/brianvoe/gofakeit/v7" - "github.com/kubeflow/model-registry/ui/bff/internal/mocks" + "github.com/kubeflow/hub/ui/bff/internal/mocks" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) diff --git a/packages/model-registry/upstream/bff/internal/repositories/suite_test.go b/packages/model-registry/upstream/bff/internal/repositories/suite_test.go index 79c75dbc78..7c392400e5 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/suite_test.go +++ b/packages/model-registry/upstream/bff/internal/repositories/suite_test.go @@ -2,19 +2,19 @@ package repositories import ( "context" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - k8mocks "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes/k8mocks" - "k8s.io/client-go/kubernetes" "log/slog" "os" + "testing" + + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + k8mocks "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes/k8mocks" + "k8s.io/client-go/kubernetes" "sigs.k8s.io/controller-runtime/pkg/envtest" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" - "testing" -) -import ( . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" ) diff --git a/packages/model-registry/upstream/bff/internal/repositories/user.go b/packages/model-registry/upstream/bff/internal/repositories/user.go index 4aaeb0d1c7..31fae16f46 100644 --- a/packages/model-registry/upstream/bff/internal/repositories/user.go +++ b/packages/model-registry/upstream/bff/internal/repositories/user.go @@ -2,8 +2,9 @@ package repositories import ( "fmt" - k8s "github.com/kubeflow/model-registry/ui/bff/internal/integrations/kubernetes" - "github.com/kubeflow/model-registry/ui/bff/internal/models" + + k8s "github.com/kubeflow/hub/ui/bff/internal/integrations/kubernetes" + "github.com/kubeflow/hub/ui/bff/internal/models" ) type UserRepository struct{} diff --git a/packages/model-registry/upstream/bff/internal/validation/validation.go b/packages/model-registry/upstream/bff/internal/validation/validation.go index 2c988bfc57..6cc74cd73b 100644 --- a/packages/model-registry/upstream/bff/internal/validation/validation.go +++ b/packages/model-registry/upstream/bff/internal/validation/validation.go @@ -2,6 +2,7 @@ package validation import ( "errors" + "github.com/kubeflow/model-registry/pkg/openapi" ) diff --git a/packages/model-registry/upstream/docs/README.md b/packages/model-registry/upstream/docs/README.md index 885c3774cf..66e02c4b41 100644 --- a/packages/model-registry/upstream/docs/README.md +++ b/packages/model-registry/upstream/docs/README.md @@ -2,9 +2,9 @@ [Local deployment UI]: ./local-deployment-guide-ui.md [Kubeflow development]: ./kubeflow-development-guide.md -# Model Registry UI Docs +# Kubeflow Hub UI Docs -This directory contains documentation for the Model Registry UI. +This directory contains documentation for the Kubeflow Hub UI. ## Local Deployment Guide diff --git a/packages/model-registry/upstream/docs/kubeflow-development-guide.md b/packages/model-registry/upstream/docs/kubeflow-development-guide.md index f6b0f1805d..3eada2ad53 100644 --- a/packages/model-registry/upstream/docs/kubeflow-development-guide.md +++ b/packages/model-registry/upstream/docs/kubeflow-development-guide.md @@ -5,7 +5,7 @@ ## Prerequisites - [Kubeflow repo](https://github.com/kubeflow/kubeflow/tree/master/components/centraldashboard#development) -- [Model Registry repo](../README.md) +- [Hub repo](../README.md) ## Setup @@ -32,7 +32,7 @@ npm run dev ``` -### Model Registry repo +### Hub repo 1. Just run the repo in kubeflow dev mode @@ -42,7 +42,7 @@ make dev-start-kubeflow ### Access the cluster -You need to have a kubeflow cluster up and running, to get the Model Registry working you'll need to port-forward these two services: +You need to have a kubeflow cluster up and running, to get the Hub working you'll need to port-forward these two services: ```shell kubectl port-forward service/model-registry-service 8085:8080 -n @@ -52,6 +52,6 @@ kubectl port-forward service/model-registry-service 8085:8080 -n { + try { + const token = execSync( + "kubectl config view --raw --minify --flatten -o jsonpath='{.users[].user.token}'", + ) + .toString() + .trim(); + const username = execSync("kubectl auth whoami -o jsonpath='{.status.userInfo.username}'") + .toString() + .trim(); + // eslint-disable-next-line no-console + console.info('Logged in as user:', username); + return token; + } catch (error) { + // eslint-disable-next-line no-console + console.error('Failed to get Kubernetes token:', error.message); + return ''; + } +}; + +const fallbackToken = AUTH_METHOD === 'user_token' ? getKubeconfigToken() : ''; + +// Build static proxy headers for auth methods that don't need dynamic forwarding. const getProxyHeaders = () => { if (AUTH_METHOD === 'internal') { return { 'kubeflow-userid': 'user@example.com', }; } - if (AUTH_METHOD === 'user_token') { - try { - const token = execSync( - "kubectl config view --raw --minify --flatten -o jsonpath='{.users[].user.token}'", - ) - .toString() - .trim(); - const username = execSync("kubectl auth whoami -o jsonpath='{.status.userInfo.username}'") - .toString() - .trim(); - // eslint-disable-next-line no-console - console.info('Logged in as user:', username); - return { - Authorization: `Bearer ${token}`, - 'x-forwarded-access-token': token, - }; - } catch (error) { - // eslint-disable-next-line no-console - console.error('Failed to get Kubernetes token:', error.message); - return {}; - } - } + // For user_token, auth headers are set dynamically in onProxyReq below. return {}; }; +// When using user_token auth, dynamically forward the authorization header from the +// incoming request if present (e.g. from a host backend proxy with dev impersonation). +// Fall back to the kubeconfig token captured at startup for standalone dev mode. +const onProxyReq = (proxyReq, req) => { + if (AUTH_METHOD !== 'user_token') { + return; + } + const incomingAuth = req.headers.authorization; + if (incomingAuth) { + proxyReq.setHeader('Authorization', incomingAuth); + const token = incomingAuth.replace(/^Bearer\s+/i, ''); + proxyReq.setHeader('x-forwarded-access-token', token); + } else if (fallbackToken) { + proxyReq.setHeader('Authorization', `Bearer ${fallbackToken}`); + proxyReq.setHeader('x-forwarded-access-token', fallbackToken); + } +}; + module.exports = smp.wrap( merge( { @@ -94,6 +114,7 @@ module.exports = smp.wrap( }, changeOrigin: true, headers: getProxyHeaders(), + onProxyReq, }, ], devMiddleware: { diff --git a/packages/model-registry/upstream/frontend/docs/README.md b/packages/model-registry/upstream/frontend/docs/README.md index 433094ccf2..b76d783291 100644 --- a/packages/model-registry/upstream/frontend/docs/README.md +++ b/packages/model-registry/upstream/frontend/docs/README.md @@ -3,9 +3,9 @@ [Testing]: testing.md [Environment Variables]: env-variables.md -# Model Registry UI Documentation +# Kubeflow Hub UI Documentation -This is the general documentation of the Model Registry UI. +This is the general documentation of the Kubeflow Hub UI. ## Developer Readmes diff --git a/packages/model-registry/upstream/frontend/docs/architecture.md b/packages/model-registry/upstream/frontend/docs/architecture.md index f2a9f0383a..313603a6ff 100644 --- a/packages/model-registry/upstream/frontend/docs/architecture.md +++ b/packages/model-registry/upstream/frontend/docs/architecture.md @@ -1,7 +1,7 @@ -# Model Registry UI Architecture +# Kubeflow Hub UI Architecture ## Overview ![Overview](./meta/arch-overview.png) -The Model Registry UI is a web application that provides a user interface for interacting with the Model Registry API. The UI is built using React and communicates with the Model Registry API using RESTful HTTP requests. The UI is designed to be responsive and accessible, providing a user-friendly experience for users interacting with the Model Registry. +The Kubeflow Hub UI is a web application that provides a user interface for interacting with the Kubeflow Hub API. The UI is built using React and communicates with the Kubeflow Hub API using RESTful HTTP requests. The UI is designed to be responsive and accessible, providing a user-friendly experience for users interacting with the Kubeflow Hub. diff --git a/packages/model-registry/upstream/frontend/docs/dev-setup.md b/packages/model-registry/upstream/frontend/docs/dev-setup.md index 4cdcc73711..f3487a9662 100644 --- a/packages/model-registry/upstream/frontend/docs/dev-setup.md +++ b/packages/model-registry/upstream/frontend/docs/dev-setup.md @@ -13,7 +13,7 @@ This project requires the following tools to be installed on your system: 1. Clone the repository ``` bash - git clone https://github.com/kubeflow/model-registry + git clone https://github.com/kubeflow/hub ``` 2. Within the repo context, install project dependencies diff --git a/packages/model-registry/upstream/frontend/docs/env-variables.md b/packages/model-registry/upstream/frontend/docs/env-variables.md index 8db9a9066a..3e0220aa2d 100644 --- a/packages/model-registry/upstream/frontend/docs/env-variables.md +++ b/packages/model-registry/upstream/frontend/docs/env-variables.md @@ -1,6 +1,6 @@ # Environment Variables -The following environment variables are used to configure the deployment and development environment for the Model Registry UI. These variables should be defined in a `.env.local` file in the `clients/ui` directory of the project. **These values will affect the build and push commands**. +The following environment variables are used to configure the deployment and development environment for the Kubeflow Hub UI. These variables should be defined in a `.env.local` file in the `clients/ui` directory of the project. **These values will affect the build and push commands**. - `LOGO=logo-light-theme.svg` - The file name for the logo used in the light theme. diff --git a/packages/model-registry/upstream/frontend/docs/testing.md b/packages/model-registry/upstream/frontend/docs/testing.md index 3e2c582b57..d3f15cfc05 100644 --- a/packages/model-registry/upstream/frontend/docs/testing.md +++ b/packages/model-registry/upstream/frontend/docs/testing.md @@ -1,4 +1,4 @@ -# Model Registry UI Testing +# Kubeflow Hub UI Testing ## Cypress Tests diff --git a/packages/model-registry/upstream/frontend/package-lock.json b/packages/model-registry/upstream/frontend/package-lock.json index f595e3174a..15fdf3a5bb 100644 --- a/packages/model-registry/upstream/frontend/package-lock.json +++ b/packages/model-registry/upstream/frontend/package-lock.json @@ -71,7 +71,7 @@ "jest-environment-jsdom": "^29.7.0", "junit-report-merger": "^7.0.1", "mini-css-extract-plugin": "^2.9.0", - "postcss": "^8.4.49", + "postcss": "^8.5.10", "prettier": "^3.3.3", "prop-types": "^15.8.1", "raw-loader": "^4.0.2", @@ -21386,9 +21386,9 @@ } }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", + "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", "dev": true, "funding": [ { diff --git a/packages/model-registry/upstream/frontend/package.json b/packages/model-registry/upstream/frontend/package.json index faf8b081a5..efc1b2de48 100644 --- a/packages/model-registry/upstream/frontend/package.json +++ b/packages/model-registry/upstream/frontend/package.json @@ -1,9 +1,9 @@ { "name": "model-registry-ui", "version": "1.0.0", - "description": "An user interface for Kubeflow Model Registry project", - "repository": "https://github.com/kubeflow/model-registry.git", - "homepage": "https://github.com/kubeflow/model-registry", + "description": "An user interface for Kubeflow Hub project", + "repository": "https://github.com/kubeflow/hub.git", + "homepage": "https://github.com/kubeflow/hub", "license": "Apache-2.0", "private": true, "engines": { @@ -66,7 +66,7 @@ "jest-environment-jsdom": "^29.7.0", "junit-report-merger": "^7.0.1", "mini-css-extract-plugin": "^2.9.0", - "postcss": "^8.4.49", + "postcss": "^8.5.10", "prettier": "^3.3.3", "prop-types": "^15.8.1", "raw-loader": "^4.0.2", diff --git a/packages/model-registry/upstream/frontend/src/__mocks__/mockCatalogSourceList.ts b/packages/model-registry/upstream/frontend/src/__mocks__/mockCatalogSourceList.ts index 070c296764..809ddf6ae3 100644 --- a/packages/model-registry/upstream/frontend/src/__mocks__/mockCatalogSourceList.ts +++ b/packages/model-registry/upstream/frontend/src/__mocks__/mockCatalogSourceList.ts @@ -56,6 +56,25 @@ export const mockCatalogSourceActive = (): CatalogSource => ({ status: 'available', }); +export const mockTwoProviderSources = (): CatalogSource[] => [ + mockCatalogSource({ labels: ['Provider one'] }), + mockCatalogSource({ + id: 'source-2', + name: 'Provider Two Source', + labels: ['Provider two'], + }), +]; + +export const mockProviderAndCustomSources = (): CatalogSource[] => [ + mockCatalogSource({ labels: ['Provider one'] }), + mockCatalogSource({ id: 'custom-source', name: 'Custom Source', labels: [] }), +]; + +export const mockDefaultSources = (): CatalogSource[] => [ + mockCatalogSource({}), + mockCatalogSource({ id: 'source-2', name: 'source 2' }), +]; + export const mockCatalogSourceList = (partial?: Partial): CatalogSourceList => ({ items: [ mockCatalogSourceActive(), diff --git a/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/pages/modelCatalog.ts b/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/pages/modelCatalog.ts index fc69134400..01f14528af 100644 --- a/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/pages/modelCatalog.ts +++ b/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/pages/modelCatalog.ts @@ -188,6 +188,10 @@ class ModelCatalog { return cy.findByTestId('model-long-description'); } + findModelCardMarkdown() { + return cy.findByTestId('model-card-markdown'); + } + findModelArchitecture() { return cy.findByTestId('model-architecture'); } diff --git a/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/pages/modelRegistryView/modelTransferJobs.ts b/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/pages/modelRegistryView/modelTransferJobs.ts index 4acd1a0a4b..de524b16c1 100644 --- a/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/pages/modelRegistryView/modelTransferJobs.ts +++ b/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/pages/modelRegistryView/modelTransferJobs.ts @@ -4,6 +4,18 @@ class ModelTransferJobsTableRow extends TableRow { findJobName() { return this.find().findByTestId('job-name'); } + + findStatus() { + return this.find().findByTestId('job-status'); + } + + findErrorMessage() { + return this.find().findByTestId('job-error-message'); + } + + findRetryButton() { + return this.find().findByTestId('job-retry-button'); + } } class ModelTransferJobsPage { @@ -57,6 +69,14 @@ class ModelTransferJobsPage { findEmptyState() { return cy.findByTestId('empty-model-transfer-jobs'); } + + findRetryModal() { + return cy.findByTestId('retry-job-modal'); + } + + findRetryModalSubmitButton() { + return this.findRetryModal().findByTestId('retry-job-submit-button'); + } } export const modelTransferJobsPage = new ModelTransferJobsPage(); diff --git a/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/tests/mocked/modelCatalog/modelCatalog.cy.ts b/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/tests/mocked/modelCatalog/modelCatalog.cy.ts index 796bb20445..2bfbd1e893 100644 --- a/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/tests/mocked/modelCatalog/modelCatalog.cy.ts +++ b/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/tests/mocked/modelCatalog/modelCatalog.cy.ts @@ -10,11 +10,13 @@ import { mockCatalogPerformanceMetricsArtifact, mockCatalogSource, mockCatalogSourceList, + mockDefaultSources, + mockProviderAndCustomSources, + mockTwoProviderSources, } from '~/__mocks__'; -import type { CatalogSource } from '~/app/modelCatalogTypes'; import { MODEL_CATALOG_API_VERSION } from '~/__tests__/cypress/cypress/support/commands/api'; import { mockCatalogFilterOptionsList } from '~/__mocks__/mockCatalogFilterOptionsList'; -import { SourceLabel } from '~/app/modelCatalogTypes'; +import { SourceLabel, type CatalogSource } from '~/app/modelCatalogTypes'; import { ModelRegistryMetadataType } from '~/app/types'; type FilteredModelsInterceptConfig = { @@ -90,7 +92,7 @@ const calculateExpectedCategoryCount = (sources: CatalogSource[]): number => { }; const initIntercepts = ({ - sources = [mockCatalogSource({}), mockCatalogSource({ id: 'source-2', name: 'source 2' })], + sources = mockDefaultSources(), modelsPerCategory = 4, hasValidatedModels = false, includeAllModelsIntercept = true, @@ -275,15 +277,9 @@ describe('Model Catalog Page', () => { }); it('checkbox should work', () => { - // Calculate expected category count based on sources - const defaultSources = [ - mockCatalogSource({}), - mockCatalogSource({ id: 'source-2', name: 'source 2' }), - ]; - - const expectedCategoryCount = calculateExpectedCategoryCount(defaultSources); + const expectedCategoryCount = calculateExpectedCategoryCount(mockDefaultSources()); - initIntercepts({ sources: defaultSources, includeAllModelsIntercept: false }); + initIntercepts({ sources: mockDefaultSources(), includeAllModelsIntercept: false }); setupFilteredModelsIntercept({ returnModelsForFilters: true, @@ -328,14 +324,9 @@ describe('Model Catalog Page', () => { }); it('tensor type filter combined with other filters should work', () => { - const defaultSources = [ - mockCatalogSource({}), - mockCatalogSource({ id: 'source-2', name: 'source 2' }), - ]; + const expectedCategoryCount = calculateExpectedCategoryCount(mockDefaultSources()); - const expectedCategoryCount = calculateExpectedCategoryCount(defaultSources); - - initIntercepts({ sources: defaultSources, includeAllModelsIntercept: false }); + initIntercepts({ sources: mockDefaultSources(), includeAllModelsIntercept: false }); setupFilteredModelsIntercept({ returnModelsForFilters: true, @@ -363,10 +354,7 @@ describe('Performance Empty State', () => { describe('Community & Custom Section', () => { it('should show performance empty state when toggle is ON', () => { initIntercepts({ - sources: [ - mockCatalogSource({ labels: ['Provider one'] }), - mockCatalogSource({ id: 'custom-source', name: 'Custom Source', labels: [] }), - ], + sources: mockProviderAndCustomSources(), hasValidatedModels: true, }); setupFilteredModelsIntercept({ returnModelsForFilters: false }); @@ -386,10 +374,7 @@ describe('Performance Empty State', () => { it('should show models when toggle is OFF', () => { initIntercepts({ - sources: [ - mockCatalogSource({ labels: ['Provider one'] }), - mockCatalogSource({ id: 'custom-source', name: 'Custom Source', labels: [] }), - ], + sources: mockProviderAndCustomSources(), }); modelCatalog.visit(); @@ -403,7 +388,7 @@ describe('Performance Empty State', () => { describe('Labeled Section Without Validated Models', () => { it('should show performance empty state when toggle is ON and no validated models', () => { initIntercepts({ - sources: [mockCatalogSource({ labels: ['Provider one'] })], + sources: mockTwoProviderSources(), hasValidatedModels: false, }); // No user filters/search; this scenario should hit the special "No performance data" state. @@ -420,7 +405,7 @@ describe('Performance Empty State', () => { it('should show models when toggle is OFF', () => { initIntercepts({ - sources: [mockCatalogSource({ labels: ['Provider one'] })], + sources: mockTwoProviderSources(), hasValidatedModels: false, }); modelCatalog.visit(); @@ -434,7 +419,7 @@ describe('Performance Empty State', () => { describe('Labeled Section With Validated Models', () => { it('should show models when toggle is ON and section has validated models', () => { initIntercepts({ - sources: [mockCatalogSource({ labels: ['Provider one'] })], + sources: mockTwoProviderSources(), hasValidatedModels: true, }); modelCatalog.visit(); @@ -450,10 +435,7 @@ describe('Performance Empty State', () => { describe('Empty State Actions', () => { it('should turn off toggle when clicking "Turn Model performance view off"', () => { initIntercepts({ - sources: [ - mockCatalogSource({ labels: ['Provider one'] }), - mockCatalogSource({ id: 'custom-source', name: 'Custom Source', labels: [] }), - ], + sources: mockProviderAndCustomSources(), hasValidatedModels: true, }); setupFilteredModelsIntercept({ returnModelsForFilters: false }); @@ -471,10 +453,7 @@ describe('Performance Empty State', () => { it('should navigate to All models when clicking "View all models with performance data"', () => { initIntercepts({ - sources: [ - mockCatalogSource({ labels: ['Provider one'] }), - mockCatalogSource({ id: 'custom-source', name: 'Custom Source', labels: [] }), - ], + sources: mockProviderAndCustomSources(), hasValidatedModels: true, }); setupFilteredModelsIntercept({ returnModelsForFilters: false }); @@ -491,7 +470,7 @@ describe('Performance Empty State', () => { it('should show performance empty state after clicking Reset filters when toggle is ON', () => { initIntercepts({ - sources: [mockCatalogSource({ labels: ['Provider one'] })], + sources: mockTwoProviderSources(), hasValidatedModels: false, }); setupFilteredModelsIntercept({ returnModelsForFilters: false }); @@ -514,10 +493,7 @@ describe('Performance Empty State', () => { it('should work correctly when toggling performance view', () => { initIntercepts({ - sources: [ - mockCatalogSource({ labels: ['Provider one'] }), - mockCatalogSource({ id: 'custom-source', name: 'Custom Source', labels: [] }), - ], + sources: mockProviderAndCustomSources(), hasValidatedModels: true, }); setupFilteredModelsIntercept({ returnModelsForFilters: false }); @@ -541,7 +517,7 @@ describe('Performance Empty State', () => { it('should show "No results found" when toggle is ON and user applies filter that returns 0 results', () => { initIntercepts({ - sources: [mockCatalogSource({ labels: ['Provider one'] })], + sources: mockTwoProviderSources(), hasValidatedModels: true, }); setupFilteredModelsIntercept({ returnModelsForFilters: false }); @@ -562,7 +538,7 @@ describe('Performance Empty State', () => { describe('All Models Section', () => { it('should show models in All models section even when toggle is ON', () => { initIntercepts({ - sources: [mockCatalogSource({ labels: ['Provider one'] })], + sources: mockTwoProviderSources(), hasValidatedModels: true, }); modelCatalog.visit(); @@ -575,3 +551,35 @@ describe('All Models Section', () => { modelCatalog.findPerformanceEmptyState().should('not.exist'); }); }); + +describe('Single Category Behavior', () => { + it('should hide category toggle when only one category is active', () => { + initIntercepts({ + sources: [mockCatalogSource({ labels: ['Provider one'] })], + }); + modelCatalog.visit(); + + cy.findByTestId('label-Provider one').should('not.exist'); + cy.findByTestId('all').should('not.exist'); + }); + + it('should auto-select the single active category and show its models', () => { + initIntercepts({ + sources: [mockCatalogSource({ labels: ['Provider one'] })], + }); + modelCatalog.visit(); + + modelCatalog.findModelCatalogCards().should('have.length.at.least', 1); + }); + + it('should show full grid view for the auto-selected single category', () => { + initIntercepts({ + sources: [mockCatalogSource({ labels: ['Provider one'] })], + hasValidatedModels: true, + }); + modelCatalog.visit(); + + modelCatalog.togglePerformanceView(); + modelCatalog.findModelCatalogCards().should('have.length.at.least', 1); + }); +}); diff --git a/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/tests/mocked/modelCatalog/modelCatalogDetails.cy.ts b/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/tests/mocked/modelCatalog/modelCatalogDetails.cy.ts index d9a1baa116..201b3f8ac5 100644 --- a/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/tests/mocked/modelCatalog/modelCatalogDetails.cy.ts +++ b/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/tests/mocked/modelCatalog/modelCatalogDetails.cy.ts @@ -7,8 +7,9 @@ import { interceptArtifactsList, interceptPerformanceArtifactsList, } from '~/__tests__/cypress/cypress/support/interceptHelpers/modelCatalog'; -import { mockCatalogModelArtifact } from '~/__mocks__'; +import { mockCatalogModelArtifact, mockCatalogModel } from '~/__mocks__'; import { ModelRegistryMetadataType } from '~/app/types'; +import { MODEL_CATALOG_API_VERSION } from '~/__tests__/cypress/cypress/support/commands/api'; describe('Model Catalog Details Page', () => { beforeEach(() => { @@ -201,3 +202,113 @@ describe('Model Catalog Details Page - Filter State Management', () => { modelCatalog.findPerformanceFiltersUpdatedAlert().should('be.visible'); }); }); + +describe('Model Catalog Details Page - Edge Cases', () => { + beforeEach(() => { + cy.intercept('GET', '/model-registry/api/v1/model_registry*', [ + mockModelRegistry({ name: 'modelregistry-sample' }), + ]).as('getModelRegistries'); + }); + + it('should show "No description" when model has no description', () => { + const modelWithoutDescription = mockCatalogModel({ + name: 'no-description-model', + description: undefined, + }); + + setupModelCatalogIntercepts({ customNonValidatedModel: modelWithoutDescription }); + modelCatalog.visit(); + modelCatalog.findLoadingState().should('not.exist'); + modelCatalog.findModelCatalogDetailLink().first().click(); + modelCatalog.findBreadcrumb().should('exist'); + + modelCatalog.findDetailsDescription().should('contain.text', 'No description'); + }); + + it('should show model card markdown when readme exists', () => { + setupModelCatalogIntercepts({}); + modelCatalog.visit(); + modelCatalog.findLoadingState().should('not.exist'); + modelCatalog.findModelCatalogDetailLink().first().click(); + modelCatalog.findBreadcrumb().should('exist'); + + modelCatalog.findModelCardMarkdown().should('exist'); + }); + + it('should show "No model card" when model has no readme', () => { + const modelWithoutReadme = mockCatalogModel({ + name: 'no-readme-model', + readme: undefined, + }); + + setupModelCatalogIntercepts({ customNonValidatedModel: modelWithoutReadme }); + modelCatalog.visit(); + modelCatalog.findLoadingState().should('not.exist'); + modelCatalog.findModelCatalogDetailLink().first().click(); + modelCatalog.findBreadcrumb().should('exist'); + + cy.contains('No model card').should('be.visible'); + }); + + it('should show "N/A" for provider when provider is not set', () => { + const modelWithoutProvider = mockCatalogModel({ + name: 'no-provider-model', + provider: undefined, + }); + + setupModelCatalogIntercepts({ customNonValidatedModel: modelWithoutProvider }); + modelCatalog.visit(); + modelCatalog.findLoadingState().should('not.exist'); + modelCatalog.findModelCatalogDetailLink().first().click(); + modelCatalog.findBreadcrumb().should('exist'); + + cy.findAllByText('N/A').should('have.length.at.least', 1); + }); + + it('should show error alert when artifacts fail to load', () => { + setupModelCatalogIntercepts({}); + + cy.intercept( + { + method: 'GET', + url: new RegExp( + `/model-registry/api/${MODEL_CATALOG_API_VERSION}/model_catalog/sources/.*/artifacts/.*`, + ), + }, + { statusCode: 500, body: { message: 'Failed to load artifacts' } }, + ).as('getArtifactsError'); + + modelCatalog.visit(); + modelCatalog.findLoadingState().should('not.exist'); + modelCatalog.findModelCatalogDetailLink().first().click(); + modelCatalog.findBreadcrumb().should('exist'); + + cy.wait('@getArtifactsError'); + cy.get('.pf-v6-c-alert.pf-m-danger').should('be.visible'); + }); + + it('should show spinner while artifacts are loading', () => { + setupModelCatalogIntercepts({}); + + cy.intercept( + { + method: 'GET', + url: new RegExp( + `/model-registry/api/${MODEL_CATALOG_API_VERSION}/model_catalog/sources/.*/artifacts/.*`, + ), + }, + (req) => { + req.on('response', (res) => { + res.setDelay(10000); + }); + }, + ).as('getArtifactsSlow'); + + modelCatalog.visit(); + modelCatalog.findLoadingState().should('not.exist'); + modelCatalog.findModelCatalogDetailLink().first().click(); + modelCatalog.findBreadcrumb().should('exist'); + + cy.findByRole('progressbar').should('exist'); + }); +}); diff --git a/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/tests/mocked/modelRegistry/modelTransferJobs.cy.ts b/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/tests/mocked/modelRegistry/modelTransferJobs.cy.ts index 9b66f39234..0ef41f860b 100644 --- a/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/tests/mocked/modelRegistry/modelTransferJobs.cy.ts +++ b/packages/model-registry/upstream/frontend/src/__tests__/cypress/cypress/tests/mocked/modelRegistry/modelTransferJobs.cy.ts @@ -477,6 +477,146 @@ describe('Model transfer jobs', () => { }); }); + it('should show truncated error message below Failed label when errorMessage exists', () => { + interceptWithSingleFailedJob( + 'job-with-error', + 'Connection timeout while uploading to destination bucket', + ); + + modelTransferJobsPage.visit(modelRegistryName); + modelTransferJobsPage.findTableRows().should('have.length', 1); + + const row = modelTransferJobsPage.getRow('job-with-error'); + row.findStatus().should('contain.text', 'Failed'); + row + .findErrorMessage() + .should('be.visible') + .and('contain.text', 'Connection timeout while uploading to destination bucket'); + }); + + it('should not show error message when job is Failed but errorMessage is undefined', () => { + const failedJobList = mockModelTransferJobList({ + items: [ + mockModelTransferJob({ + id: 'job-failed-no-msg', + name: 'job-failed-no-msg', + jobDisplayName: 'job-failed-no-msg', + status: ModelTransferJobStatus.FAILED, + errorMessage: undefined, + }), + ], + size: 1, + pageSize: 10, + nextPageToken: '', + }); + + cy.intercept( + 'GET', + `**/api/${MODEL_REGISTRY_API_VERSION}/model_registry/${modelRegistryName}/model_transfer_jobs*`, + mockModArchResponse(failedJobList), + ); + + modelTransferJobsPage.visit(modelRegistryName); + + const row = modelTransferJobsPage.getRow('job-failed-no-msg'); + row.findStatus().should('contain.text', 'Failed'); + row.findErrorMessage().should('not.exist'); + }); + + it('should not show error message when errorMessage is an empty string', () => { + const failedJobList = mockModelTransferJobList({ + items: [ + mockModelTransferJob({ + id: 'job-failed-empty-msg', + name: 'job-failed-empty-msg', + jobDisplayName: 'job-failed-empty-msg', + status: ModelTransferJobStatus.FAILED, + errorMessage: '', + }), + ], + size: 1, + pageSize: 10, + nextPageToken: '', + }); + + cy.intercept( + 'GET', + `**/api/${MODEL_REGISTRY_API_VERSION}/model_registry/${modelRegistryName}/model_transfer_jobs*`, + mockModArchResponse(failedJobList), + ); + + modelTransferJobsPage.visit(modelRegistryName); + + const row = modelTransferJobsPage.getRow('job-failed-empty-msg'); + row.findStatus().should('contain.text', 'Failed'); + row.findErrorMessage().should('not.exist'); + }); + + it('should open status modal when clicking the truncated error message', () => { + interceptWithSingleFailedJob('job-click-error', 'Upload failed: insufficient storage'); + + cy.intercept('GET', '**/model_transfer_jobs/job-click-error/events*', { + forceNetworkError: true, + }); + + modelTransferJobsPage.visit(modelRegistryName); + + const row = modelTransferJobsPage.getRow('job-click-error'); + row.findErrorMessage().click(); + + cy.findByTestId('transfer-job-status-modal').should('be.visible'); + cy.findByLabelText('Close').click(); + cy.findByTestId('transfer-job-status-modal').should('not.exist'); + }); + + it('should show retry button for failed jobs and open retry modal on click', () => { + interceptWithSingleFailedJob('job-retry-test', 'Connection error'); + + cy.intercept( + 'PUT', + `**/api/${MODEL_REGISTRY_API_VERSION}/model_registry/${modelRegistryName}/model_transfer_jobs/job-retry-test*`, + { statusCode: 200, body: {} }, + ).as('retryJob'); + + modelTransferJobsPage.visit(modelRegistryName); + + const row = modelTransferJobsPage.getRow('job-retry-test'); + row.findRetryButton().should('be.visible').click(); + + modelTransferJobsPage.findRetryModal().should('be.visible'); + modelTransferJobsPage.findRetryModal().contains('Retry model transfer job?').should('exist'); + modelTransferJobsPage.findRetryModalSubmitButton().should('be.visible'); + }); + + it('should not show error message for non-FAILED statuses', () => { + const completedJobList = mockModelTransferJobList({ + items: [ + mockModelTransferJob({ + id: 'job-completed-no-error', + name: 'job-completed-no-error', + jobDisplayName: 'job-completed-no-error', + status: ModelTransferJobStatus.COMPLETED, + }), + ], + size: 1, + pageSize: 10, + nextPageToken: '', + }); + + cy.intercept( + 'GET', + `**/api/${MODEL_REGISTRY_API_VERSION}/model_registry/${modelRegistryName}/model_transfer_jobs*`, + mockModArchResponse(completedJobList), + ); + + modelTransferJobsPage.visit(modelRegistryName); + + const row = modelTransferJobsPage.getRow('job-completed-no-error'); + row.findStatus().should('contain.text', 'Complete'); + row.findErrorMessage().should('not.exist'); + row.findRetryButton().should('not.exist'); + }); + it('should show the empty state when there are no transfer jobs', () => { const emptyList = mockModelTransferJobList({ items: [], diff --git a/packages/model-registry/upstream/frontend/src/app/pages/mcpCatalog/screens/McpCatalog.tsx b/packages/model-registry/upstream/frontend/src/app/pages/mcpCatalog/screens/McpCatalog.tsx index 03f82235f9..1a494411bc 100644 --- a/packages/model-registry/upstream/frontend/src/app/pages/mcpCatalog/screens/McpCatalog.tsx +++ b/packages/model-registry/upstream/frontend/src/app/pages/mcpCatalog/screens/McpCatalog.tsx @@ -1,22 +1,54 @@ import * as React from 'react'; import { PageSection, Sidebar, SidebarContent, SidebarPanel, Stack } from '@patternfly/react-core'; import { ApplicationsPage, ProjectObjectType, TitleWithIcon } from 'mod-arch-shared'; +import { SearchIcon } from '@patternfly/react-icons'; import ScrollViewOnMount from '~/app/shared/components/ScrollViewOnMount'; import { McpCatalogContext } from '~/app/context/mcpCatalog/McpCatalogContext'; import { hasMcpFiltersApplied } from '~/app/pages/mcpCatalog/utils/mcpCatalogUtils'; import McpCatalogFilters from '~/app/pages/mcpCatalog/components/McpCatalogFilters'; import { MCP_CATALOG_TITLE, MCP_CATALOG_DESCRIPTION } from '~/app/pages/mcpCatalog/const'; +import { getActiveSourceLabels } from '~/app/pages/modelCatalog/utils/modelCatalogUtils'; +import EmptyModelCatalogState from '~/app/pages/modelCatalog/EmptyModelCatalogState'; import McpCatalogSourceLabelSelector from './McpCatalogSourceLabelSelector'; import McpCatalogAllServersView from './McpCatalogAllServersView'; import McpCatalogGalleryView from './McpCatalogGalleryView'; const McpCatalog: React.FC = () => { - const { searchQuery, setSearchQuery, clearAllFilters, selectedSourceLabel, filters } = - React.useContext(McpCatalogContext); + const { + searchQuery, + setSearchQuery, + clearAllFilters, + selectedSourceLabel, + setSelectedSourceLabel, + filters, + catalogSources, + catalogLabels, + catalogSourcesLoaded, + } = React.useContext(McpCatalogContext); const filtersApplied = hasMcpFiltersApplied(filters, searchQuery); const isAllServersView = selectedSourceLabel === undefined && !filtersApplied; + const activeCategories = React.useMemo( + () => getActiveSourceLabels(catalogSources, catalogLabels), + [catalogSources, catalogLabels], + ); + + const isSingleCategory = activeCategories.length === 1; + const hasNoCategories = activeCategories.length === 0; + + React.useEffect(() => { + if (catalogSourcesLoaded && isSingleCategory && selectedSourceLabel !== activeCategories[0]) { + setSelectedSourceLabel(activeCategories[0]); + } + }, [ + catalogSourcesLoaded, + isSingleCategory, + activeCategories, + selectedSourceLabel, + setSelectedSourceLabel, + ]); + const handleSearch = React.useCallback( (term: string) => { setSearchQuery(term); @@ -45,28 +77,41 @@ const McpCatalog: React.FC = () => { loaded provideChildrenPadding > - - - - - - - - - {isAllServersView ? ( - - ) : ( - - )} - - - - + {catalogSourcesLoaded && hasNoCategories ? ( + + ) : ( + + + + + + + + + {isAllServersView && !isSingleCategory ? ( + + ) : ( + + )} + + + + + )} ); diff --git a/packages/model-registry/upstream/frontend/src/app/pages/mcpCatalog/screens/McpCatalogGalleryView.tsx b/packages/model-registry/upstream/frontend/src/app/pages/mcpCatalog/screens/McpCatalogGalleryView.tsx index 73920a9586..e34ef8cd38 100644 --- a/packages/model-registry/upstream/frontend/src/app/pages/mcpCatalog/screens/McpCatalogGalleryView.tsx +++ b/packages/model-registry/upstream/frontend/src/app/pages/mcpCatalog/screens/McpCatalogGalleryView.tsx @@ -3,6 +3,7 @@ import { Alert, Bullseye, Button, + Content, EmptyState, Flex, Grid, @@ -13,8 +14,15 @@ import { import { SearchIcon } from '@patternfly/react-icons'; import { McpCatalogContext } from '~/app/context/mcpCatalog/McpCatalogContext'; import { useMcpServersBySourceLabelWithAPI } from '~/app/hooks/mcpServerCatalog/useMcpServersBySourceLabel'; -import { MCP_CATALOG_GRID_SPAN } from '~/app/pages/mcpCatalog/const'; +import { + MCP_CATALOG_GRID_SPAN, + OTHER_MCP_SERVERS_DISPLAY_NAME, +} from '~/app/pages/mcpCatalog/const'; import { mcpFiltersToFilterQuery } from '~/app/pages/mcpCatalog/utils/mcpCatalogUtils'; +import { + getLabelDisplayName, + getLabelDescription, +} from '~/app/pages/modelCatalog/utils/modelCatalogUtils'; import EmptyModelCatalogState from '~/app/pages/modelCatalog/EmptyModelCatalogState'; import ScrollViewOnMount from '~/app/shared/components/ScrollViewOnMount'; import McpCatalogCard from '~/app/pages/mcpCatalog/components/McpCatalogCard'; @@ -23,11 +31,23 @@ const PAGE_SIZE = 10; type McpCatalogGalleryViewProps = { handleFilterReset: () => void; + isSingleCategory?: boolean; + singleCategoryLabel?: string; }; -const McpCatalogGalleryView: React.FC = ({ handleFilterReset }) => { - const { mcpApiState, selectedSourceLabel, searchQuery, filters, catalogLabelsLoaded } = - React.useContext(McpCatalogContext); +const McpCatalogGalleryView: React.FC = ({ + handleFilterReset, + isSingleCategory = false, + singleCategoryLabel, +}) => { + const { + mcpApiState, + selectedSourceLabel, + searchQuery, + filters, + catalogLabels, + catalogLabelsLoaded, + } = React.useContext(McpCatalogContext); const filterQuery = React.useMemo(() => mcpFiltersToFilterQuery(filters), [filters]); @@ -80,9 +100,34 @@ const McpCatalogGalleryView: React.FC = ({ handleFil ); } + const effectiveCategoryLabel = singleCategoryLabel || selectedSourceLabel || ''; + const categoryTitle = isSingleCategory + ? getLabelDisplayName( + effectiveCategoryLabel, + catalogLabels, + OTHER_MCP_SERVERS_DISPLAY_NAME, + 'servers', + ) + : undefined; + const categoryDescription = isSingleCategory + ? getLabelDescription(effectiveCategoryLabel, catalogLabels) + : undefined; + return ( <> + {isSingleCategory && categoryTitle && ( +
+ + {categoryTitle} + + {categoryDescription && ( + + {categoryDescription} + + )} +
+ )} {items.map((server) => ( { return null; } + const activeCategoryCount = blocks.length - 1; + if (activeCategoryCount <= 1) { + return null; + } + const isSelected = (block: SourceLabelBlock) => block.label === undefined ? selectedSourceLabel === undefined diff --git a/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelCatalog.tsx b/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelCatalog.tsx index 4c4737c811..f01c6deeef 100644 --- a/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelCatalog.tsx +++ b/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelCatalog.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import { PageSection, Sidebar, SidebarContent, SidebarPanel } from '@patternfly/react-core'; import { ApplicationsPage, ProjectObjectType, TitleWithIcon } from 'mod-arch-shared'; +import { SearchIcon } from '@patternfly/react-icons'; import { LazyCodeRefComponent, useExtensions } from '@odh-dashboard/plugin-core'; import { useSearchParams } from 'react-router-dom'; import { isModelCatalogBannerExtension } from '~/odh/extension-points'; @@ -9,15 +10,44 @@ import ModelCatalogFilters from '~/app/pages/modelCatalog/components/ModelCatalo import { ModelCatalogContext } from '~/app/context/modelCatalog/ModelCatalogContext'; import { CategoryName } from '~/app/modelCatalogTypes'; import { useHasVisibleFiltersApplied } from '~/app/hooks/modelCatalog/useHasVisibleFiltersApplied'; +import { getActiveSourceLabels } from '~/app/pages/modelCatalog/utils/modelCatalogUtils'; +import EmptyModelCatalogState from '~/app/pages/modelCatalog/EmptyModelCatalogState'; import ModelCatalogSourceLabelSelectorNavigator from './ModelCatalogSourceLabelSelectorNavigator'; import ModelCatalogAllModelsView from './ModelCatalogAllModelsView'; import ModelCatalogGalleryView from './ModelCatalogGalleryView'; const ModelCatalog: React.FC = () => { const [searchTerm, setSearchTerm] = React.useState(''); - const { selectedSourceLabel, updateSelectedSourceLabel, clearAllFilters } = - React.useContext(ModelCatalogContext); + const { + selectedSourceLabel, + updateSelectedSourceLabel, + clearAllFilters, + catalogSources, + catalogLabels, + catalogSourcesLoaded, + } = React.useContext(ModelCatalogContext); const filtersApplied = useHasVisibleFiltersApplied(); + + const activeCategories = React.useMemo( + () => getActiveSourceLabels(catalogSources, catalogLabels), + [catalogSources, catalogLabels], + ); + + const isSingleCategory = activeCategories.length === 1; + const hasNoCategories = activeCategories.length === 0; + + React.useEffect(() => { + if (catalogSourcesLoaded && isSingleCategory && selectedSourceLabel !== activeCategories[0]) { + updateSelectedSourceLabel(activeCategories[0]); + } + }, [ + catalogSourcesLoaded, + isSingleCategory, + activeCategories, + selectedSourceLabel, + updateSelectedSourceLabel, + ]); + const isAllModelsView = selectedSourceLabel === CategoryName.allModels && !searchTerm && !filtersApplied; @@ -63,29 +93,40 @@ const ModelCatalog: React.FC = () => { component={extension.properties.component} /> ))} - - - - - - - - {isAllModelsView ? ( - - ) : ( - - )} - - - + {catalogSourcesLoaded && hasNoCategories ? ( + + ) : ( + + + + + + + + {isAllModelsView && !isSingleCategory ? ( + + ) : ( + + )} + + + + )} ); diff --git a/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelCatalogGalleryView.tsx b/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelCatalogGalleryView.tsx index f08c7a8f5f..ac616fe0f5 100644 --- a/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelCatalogGalleryView.tsx +++ b/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelCatalogGalleryView.tsx @@ -2,6 +2,7 @@ import { Alert, Bullseye, Button, + Content, EmptyState, EmptyStateVariant, Flex, @@ -22,6 +23,8 @@ import { getActiveLatencyFieldName, getSortParams, generateCategoryName, + getLabelDisplayName, + getLabelDescription, hasFiltersApplied, isValueDifferentFromDefault, } from '~/app/pages/modelCatalog/utils/modelCatalogUtils'; @@ -38,11 +41,15 @@ import { type ModelCatalogPageProps = { searchTerm: string; handleFilterReset: () => void; + isSingleCategory?: boolean; + singleCategoryLabel?: string; }; const ModelCatalogGalleryView: React.FC = ({ searchTerm, handleFilterReset, + isSingleCategory = false, + singleCategoryLabel, }) => { const { selectedSourceLabel, @@ -51,6 +58,7 @@ const ModelCatalogGalleryView: React.FC = ({ filterOptionsLoaded, filterOptionsLoadError, catalogSources, + catalogLabels, catalogLabelsLoaded, catalogLabelsLoadError, setPerformanceViewEnabled, @@ -270,9 +278,29 @@ const ModelCatalogGalleryView: React.FC = ({ ); } + const effectiveCategoryLabel = singleCategoryLabel || selectedSourceLabel || ''; + const categoryTitle = isSingleCategory + ? getLabelDisplayName(effectiveCategoryLabel, catalogLabels) + : undefined; + const categoryDescription = isSingleCategory + ? getLabelDescription(effectiveCategoryLabel, catalogLabels) + : undefined; + return ( <> + {isSingleCategory && categoryTitle && ( +
+ + {categoryTitle} + + {categoryDescription && ( + + {categoryDescription} + + )} +
+ )} {catalogModels.items.map((model: CatalogModel) => ( diff --git a/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelCatalogSourceLabelBlocks.tsx b/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelCatalogSourceLabelBlocks.tsx index 47a608d466..1c16d6ac4e 100644 --- a/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelCatalogSourceLabelBlocks.tsx +++ b/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelCatalogSourceLabelBlocks.tsx @@ -62,6 +62,11 @@ const ModelCatalogSourceLabelBlocks: React.FC = () => { return null; } + const activeCategoryCount = blocks.length - 1; + if (activeCategoryCount <= 1) { + return null; + } + const handleToggleClick = (label: string) => { updateSelectedSourceLabel(label); }; diff --git a/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelDetailsView.tsx b/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelDetailsView.tsx index 066e7c4dd1..f9ce851ec1 100644 --- a/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelDetailsView.tsx +++ b/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/screens/ModelDetailsView.tsx @@ -166,11 +166,13 @@ const ModelDetailsView: React.FC = ({ License - + + + Provider diff --git a/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/utils/__tests__/modelCatalogUtils.spec.ts b/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/utils/__tests__/modelCatalogUtils.spec.ts index 99629039ad..beaa330722 100644 --- a/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/utils/__tests__/modelCatalogUtils.spec.ts +++ b/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/utils/__tests__/modelCatalogUtils.spec.ts @@ -2,6 +2,8 @@ /* eslint-disable camelcase */ import { CatalogFilterOptionsList, + CatalogLabel, + CatalogLabelList, CatalogSource, CatalogSourceList, ModelCatalogFilterStates, @@ -32,6 +34,7 @@ import { hasFiltersApplied, getArchitecturesFromArtifacts, getModelName, + getActiveSourceLabels, } from '~/app/pages/modelCatalog/utils/modelCatalogUtils'; import { mockCatalogModelArtifact } from '~/__mocks__/mockCatalogModelArtifactList'; import { ModelRegistryMetadataType } from '~/app/types'; @@ -1383,3 +1386,229 @@ describe('getModelName', () => { expect(result).toBe('my-model_v1'); }); }); + +describe('getActiveSourceLabels', () => { + const createSource = (overrides: Partial = {}): CatalogSource => ({ + id: 'source-1', + name: 'Test Source', + labels: ['Red Hat'], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + ...overrides, + }); + + const createSourceList = (items: CatalogSource[] = []): CatalogSourceList => ({ + items, + size: items.length, + pageSize: 10, + nextPageToken: '', + }); + + it('returns empty array when catalogSources is null', () => { + expect(getActiveSourceLabels(null, null)).toEqual([]); + }); + + it('returns empty array when no sources are enabled or available', () => { + const sources = createSourceList([ + createSource({ + id: '1', + enabled: false, + status: CatalogSourceStatus.DISABLED, + }), + createSource({ + id: '2', + enabled: true, + status: CatalogSourceStatus.ERROR, + }), + ]); + expect(getActiveSourceLabels(sources, null)).toEqual([]); + }); + + it('returns a single label when only one category exists', () => { + const sources = createSourceList([ + createSource({ + id: '1', + labels: ['Red Hat'], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + ]); + expect(getActiveSourceLabels(sources, null)).toEqual(['Red Hat']); + }); + + it('returns multiple labels when multiple categories exist', () => { + const sources = createSourceList([ + createSource({ + id: '1', + labels: ['Red Hat'], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + createSource({ + id: '2', + labels: ['Community'], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + ]); + const result = getActiveSourceLabels(sources, null); + expect(result).toHaveLength(2); + expect(result).toContain('Red Hat'); + expect(result).toContain('Community'); + }); + + it('includes "null" label for sources without labels', () => { + const sources = createSourceList([ + createSource({ + id: '1', + labels: ['Red Hat'], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + createSource({ + id: '2', + labels: [], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + ]); + const result = getActiveSourceLabels(sources, null); + expect(result).toContain('Red Hat'); + expect(result).toContain('null'); + }); + + it('excludes disabled sources from active categories', () => { + const sources = createSourceList([ + createSource({ + id: '1', + labels: ['Red Hat'], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + createSource({ + id: '2', + labels: ['Excluded'], + enabled: false, + status: CatalogSourceStatus.AVAILABLE, + }), + ]); + const result = getActiveSourceLabels(sources, null); + expect(result).toEqual(['Red Hat']); + }); + + it('excludes sources with error status', () => { + const sources = createSourceList([ + createSource({ + id: '1', + labels: ['Red Hat'], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + createSource({ + id: '2', + labels: ['Error Source'], + enabled: true, + status: CatalogSourceStatus.ERROR, + }), + ]); + const result = getActiveSourceLabels(sources, null); + expect(result).toEqual(['Red Hat']); + }); + + it('includes partially-available sources', () => { + const sources = createSourceList([ + createSource({ + id: '1', + labels: ['Red Hat'], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + createSource({ + id: '2', + labels: ['Partial'], + enabled: true, + status: CatalogSourceStatus.PARTIALLY_AVAILABLE, + }), + ]); + const result = getActiveSourceLabels(sources, null); + expect(result).toHaveLength(2); + expect(result).toContain('Red Hat'); + expect(result).toContain('Partial'); + }); + + it('deduplicates labels from multiple sources with the same label', () => { + const sources = createSourceList([ + createSource({ + id: '1', + labels: ['Red Hat'], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + createSource({ + id: '2', + labels: ['Red Hat'], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + ]); + const result = getActiveSourceLabels(sources, null); + expect(result).toEqual(['Red Hat']); + }); + + it('returns only "null" label when all sources have no labels', () => { + const sources = createSourceList([ + createSource({ + id: '1', + labels: [], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + createSource({ + id: '2', + labels: [], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + ]); + const result = getActiveSourceLabels(sources, null); + expect(result).toEqual(['null']); + }); + + it('orders labels by catalogLabels priority when catalogLabels is provided', () => { + const sources = createSourceList([ + createSource({ + id: '1', + labels: ['Community'], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + createSource({ + id: '2', + labels: ['Red Hat'], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + createSource({ + id: '3', + labels: ['Partner'], + enabled: true, + status: CatalogSourceStatus.AVAILABLE, + }), + ]); + + const createLabel = (name: string | null): CatalogLabel => ({ + name, + displayName: name ?? undefined, + }); + + const catalogLabels: CatalogLabelList = { + items: [createLabel('Red Hat'), createLabel('Partner'), createLabel('Community')], + size: 3, + pageSize: 10, + nextPageToken: '', + }; + + const result = getActiveSourceLabels(sources, catalogLabels); + expect(result).toEqual(['Red Hat', 'Partner', 'Community']); + }); +}); diff --git a/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/utils/modelCatalogUtils.ts b/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/utils/modelCatalogUtils.ts index 607492a14d..9c41a35b3c 100644 --- a/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/utils/modelCatalogUtils.ts +++ b/packages/model-registry/upstream/frontend/src/app/pages/modelCatalog/utils/modelCatalogUtils.ts @@ -753,6 +753,21 @@ export const orderLabelsByPriority = ( return orderedLabels; }; +export const getActiveSourceLabels = ( + catalogSources: CatalogSourceList | null, + catalogLabels: CatalogLabelList | null, +): string[] => { + const enabledSources = filterEnabledCatalogSources(catalogSources); + const uniqueLabels = getUniqueSourceLabels(enabledSources); + const orderedLabels = orderLabelsByPriority(uniqueLabels, catalogLabels); + + if (hasSourcesWithoutLabels(enabledSources)) { + return [...orderedLabels, SourceLabel.other]; + } + + return orderedLabels; +}; + /** * Formats model type value for display in the UI. * Converts raw API values (generative, predictive, unknown) to user-friendly display labels. diff --git a/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelTransferJobs/ModelTransferJobTableRow.tsx b/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelTransferJobs/ModelTransferJobTableRow.tsx index 6a797bb79e..656ca52ba3 100644 --- a/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelTransferJobs/ModelTransferJobTableRow.tsx +++ b/packages/model-registry/upstream/frontend/src/app/pages/modelRegistry/screens/ModelTransferJobs/ModelTransferJobTableRow.tsx @@ -130,27 +130,50 @@ const ModelTransferJobTableRow: React.FC = ({ - + - + + + + {job.status === ModelTransferJobStatus.FAILED && onRequestRetry && ( + + + + )} + - {job.status === ModelTransferJobStatus.FAILED && onRequestRetry && ( + {job.status === ModelTransferJobStatus.FAILED && job.errorMessage && ( )} diff --git a/packages/model-registry/upstream/scripts/deploy_kind_cluster.sh b/packages/model-registry/upstream/scripts/deploy_kind_cluster.sh index f67a61c189..1d4b35a82c 100755 --- a/packages/model-registry/upstream/scripts/deploy_kind_cluster.sh +++ b/packages/model-registry/upstream/scripts/deploy_kind_cluster.sh @@ -26,7 +26,7 @@ else fi # Step 3: Deploy Model Registry to cluster echo "Deploying Model Registry to cluster..." -kubectl apply -k "https://github.com/kubeflow/model-registry/manifests/kustomize/overlays/db" +kubectl apply -k "https://github.com/kubeflow/hub/manifests/kustomize/overlays/db" # Wait for deployment to be available echo "Waiting for Model Registry deployment to be available..."