[ Gateway 5/10 ]Add endpoint listing page and tab layout#19474
[ Gateway 5/10 ]Add endpoint listing page and tab layout#19474BenWilson2 merged 1 commit intomlflow:masterfrom
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds the Endpoints Listing page and tab-based navigation layout for the AI Gateway UI. It updates the masked secret value handling to store structured JSON data instead of plain strings, increases the database field size to accommodate multi-key credentials, and implements comprehensive UI components for managing endpoints and API keys.
Key Changes
- Refactored secret masking to return dictionaries preserving key structure instead of concatenated strings
- Increased
masked_valuedatabase column from VARCHAR(100) to VARCHAR(500) to support JSON-serialized credential maps - Added endpoints listing page with filtering, search, and model/binding management
- Implemented tab-based side navigation between Endpoints and API Keys pages
Reviewed changes
Copilot reviewed 89 out of 94 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| mlflow/utils/crypto.py | Refactored masking functions to return dict structures, split into _mask_string_value and _mask_secret_value |
| mlflow/store/tracking/gateway/sqlalchemy_mixin.py | Updated to JSON-serialize masked values before storage |
| mlflow/store/tracking/dbmodels/models.py | Increased masked_value column size and updated documentation, added JSON deserialization |
| mlflow/store/db_migrations/versions/*.py | Database migration to increase masked_value column from 100 to 500 characters |
| mlflow/server/handlers.py | Fixed API endpoint path from /mlflow/secrets/config to /mlflow/gateway/secrets/config |
| tests/utils/test_crypto.py | Updated tests to reflect new dict-based masking behavior |
| tests/tracking/test_rest_tracking.py | Updated assertions to expect dict masked values |
| tests/store/tracking/test_gateway_sql_store.py | Updated to verify dict structure in masked values |
| tests/entities/test_gateway_secrets.py | Added tests for multi-key masked values |
| mlflow/server/js/src/gateway/types.ts | Updated type definitions to reflect dict masked values and corrected field names |
| mlflow/server/js/src/gateway/routes.ts | Added new route definitions for endpoints and API keys pages |
| mlflow/server/js/src/gateway/pages/GatewayPage.tsx | Implemented tab-based navigation and setup guide for missing dependencies |
| mlflow/server/js/src/gateway/pages/ApiKeysPage.tsx | New API Keys page with comprehensive key management UI |
| mlflow/server/js/src/gateway/hooks/* | Added React hooks for data fetching, mutations, and business logic |
| mlflow/server/js/src/gateway/components/* | Implemented reusable components for endpoints, API keys, secrets, and common UI elements |
| mlflow/server/js/src/gateway/utils/* | Added utility functions for provider formatting, date handling, and secret parsing |
| mlflow/server/js/src/lang/default/en.json | Added localization strings for new UI components |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Documentation preview for 07e1abf is available at: More info
|
948bda9 to
ea03066
Compare
e467e43 to
9154595
Compare
| /> | ||
| ); | ||
| } | ||
| if (isEmptyList) { |
There was a problem hiding this comment.
nit: do we need this check since empty state is displayed only when there's no row?
| css={{ flex: 0, minWidth: 96, maxWidth: 96 }} | ||
| /> | ||
| </TableRow> | ||
| {filteredEndpoints.map((endpoint) => ( |
There was a problem hiding this comment.
nit: maybe it's clearer to extract a row as a separate component
| ); | ||
| }; | ||
|
|
||
| const ProviderCell = ({ modelMappings }: { modelMappings: Endpoint['model_mappings'] }) => { |
There was a problem hiding this comment.
I prefer to have just one component per tsx file. Shall we define them in separate files? cc: @daniellok-db let me know if this is MLflow/Databricks convention.
There was a problem hiding this comment.
This makes sense for clarity. I'll refactor since it requires less mental overhead to find where things are.
a03e475 to
c412f33
Compare
Signed-off-by: Ben Wilson <benjamin.wilson@databricks.com>
c412f33 to
07e1abf
Compare
🥞 Stacked PR
Use this link to review incremental changes.
Related Issues/PRs
#xxxWhat changes are proposed in this pull request?
Add the Endpoints Listing page and the Tab-based navigation layout for endpoints and api key listing pages.
Updated the page for handling if there are issues with the security configuration or required dependencies to make the AI Gateway UI work.
How is this PR tested?
Does this PR require documentation update?
Release Notes
Is this a user-facing change?
What component(s), interfaces, languages, and integrations does this PR affect?
Components
area/tracking: Tracking Service, tracking client APIs, autologgingarea/models: MLmodel format, model serialization/deserialization, flavorsarea/model-registry: Model Registry service, APIs, and the fluent client calls for Model Registryarea/scoring: MLflow Model server, model deployment tools, Spark UDFsarea/evaluation: MLflow model evaluation features, evaluation metrics, and evaluation workflowsarea/gateway: MLflow AI Gateway client APIs, server, and third-party integrationsarea/prompts: MLflow prompt engineering features, prompt templates, and prompt managementarea/tracing: MLflow Tracing features, tracing APIs, and LLM tracing functionalityarea/projects: MLproject format, project running backendsarea/uiux: Front-end, user experience, plotting, JavaScript, JavaScript dev serverarea/build: Build and test infrastructure for MLflowarea/docs: MLflow documentation pagesHow should the PR be classified in the release notes? Choose one:
rn/none- No description will be included. The PR will be mentioned only by the PR number in the "Small Bugfixes and Documentation Updates" sectionrn/breaking-change- The PR will be mentioned in the "Breaking Changes" sectionrn/feature- A new user-facing feature worth mentioning in the release notesrn/bug-fix- A user-facing bug fix worth mentioning in the release notesrn/documentation- A user-facing documentation change worth mentioning in the release notesShould this PR be included in the next patch release?
Yesshould be selected for bug fixes, documentation updates, and other small changes.Noshould be selected for new features and larger changes. If you're unsure about the release classification of this PR, leave this unchecked to let the maintainers decide.What is a minor/patch release?
Bug fixes, doc updates and new features usually go into minor releases.
Bug fixes and doc updates usually go into patch releases.