Skip to content

feat(dashboard): add unified model catalog page - #14684

Merged
diegosouzapw merged 2 commits into
diegosouzapw:release/v3.8.51from
Dattuog:feat/12593-unified-model-catalog
Sep 24, 2026
Merged

diegosouzapw merged 2 commits into
diegosouzapw:release/v3.8.51from
Dattuog:feat/12593-unified-model-catalog

Conversation

@Dattuog

@Dattuog Dattuog commented Sep 23, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add /dashboard/models and an OmniProxy sidebar link to browse models from every provider.
  • Reuse GET /api/models/catalog; show model ID, type, capabilities, context, output limit and reported free/custom flags in a sortable table with search, filters, paging, refresh and failure states.
  • Keep missing metadata visibly unknown rather than implying a model is paid or lacks a capability.

Related Issues

Closes #12593.

⚠️ base-red inherited: #14547. The independent release repair is #14683; this feature branch does not include those changes.

Validation

npx vitest run --config vitest.config.ts tests/unit/dashboard/modelCatalogPage.test.tsx tests/unit/dashboard/modelCatalogUtils.test.tsx
  Test Files  2 passed (2)
  Tests       10 passed (10)
node --import tsx --test tests/unit/sidebar-visibility.test.ts
  tests 8; pass 8; fail 0
npm run test:vitest
  Test Files 51 passed (51); Tests 482 passed (482)
GET /dashboard/models           HTTP 200
GET /api/models/catalog          HTTP 200

Tests Added Or Updated

  • tests/unit/dashboard/modelCatalogPage.test.tsx
  • tests/unit/dashboard/modelCatalogUtils.test.tsx
  • tests/unit/sidebar-visibility.test.ts

Coverage Notes

The page test covers catalog loading, rendering, filtering, sort controls and request failure. Utility tests cover flattening, search, sorting and page bounds. Sidebar tests cover discovery and visibility.

Reviewer Notes

No migrations or new backend aggregation. The current catalog endpoint omits some metadata for some providers, and the UI shows a dash for those fields. Local full UI Vitest had unrelated pre-existing failures; PR CI will provide the authoritative run. Core and dashboard typecheck errors on the release tip are addressed in #14683.

@diegosouzapw

Copy link
Copy Markdown
Owner

Clean, small feature that fills a real gap (there was no cross-provider catalog view). Ran
your test files locally: 10/10 pass, and the sidebar-fallback pattern you used means no i18n
keys were needed — nice. Only thing missing before merge: a changelog fragment under
changelog.d/features/ (see changelog.d/README.md for the convention). Everything else
looks merge-ready to me.

@Dattuog

Dattuog commented Sep 24, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for the review and for running the focused tests. I added the requested feature changelog fragment in 96ab034, following the convention in changelog.d/README.md.

@diegosouzapw
diegosouzapw merged commit c7aa666 into diegosouzapw:release/v3.8.51 Sep 24, 2026
3 checks passed
diegosouzapw added a commit that referenced this pull request Sep 25, 2026
#14684 added a model-catalog entry to the sidebar with i18nKey modelCatalog and
subtitleKey modelCatalogSubtitle, but only inline fallbacks and no en.json keys,
so settings-i18n-keys ('English sidebar translations include every configured
sidebar item') failed on the release tip. The English values are the fallbacks
#14684 already ships; other locales fall back to them until the next i18n refresh.

Refs #14547
diegosouzapw added a commit that referenced this pull request Sep 25, 2026
pt-BR and vi carry key-parity tests against en.json, so the two English
sidebar keys added for #14684 have to exist there too (i18n-pt-br and
i18n-vi-completeness failed on the previous head). Values follow each locale's
existing sidebar terms (Provedores / Nhà cung cấp).

Refs #14547
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: unified all-models catalog page in the dashboard

2 participants