Skip to content

Feat: Visualizations, Dashboards, Model Registry CLI, Project Filtering, Search, Notifications & E2E Tests#10

Merged
Jovonni merged 16 commits intomainfrom
feat/viz-cli-models-3
Mar 8, 2026
Merged

Feat: Visualizations, Dashboards, Model Registry CLI, Project Filtering, Search, Notifications & E2E Tests#10
Jovonni merged 16 commits intomainfrom
feat/viz-cli-models-3

Conversation

@Jovonni
Copy link
Contributor

@Jovonni Jovonni commented Mar 8, 2026

addresses #3 #4 #5

Major feature release adding 6 new subsystems and comprehensive fixes across the full stack. ~11,400 lines added across 83 files spanning the Rust API, Python SDK, Next.js frontend, model-runner, Kubernetes deployment, and E2E test suite.

  • Visualizations & Dashboards — Full visualization system with 9 backends (matplotlib, plotly, altair, seaborn, bokeh, datashader, networkx, geopandas, plotnine), unified render()
    abstraction, in-browser Monaco editor with live preview, and drag-and-drop dashboard builder with panel layout persistence
  • Model Registry CLI ↔ UI integration — Bidirectional sync between CLI openmodelstudio install/uninstall and UI badges. use_model() SDK function resolves models via API (works
    inside K8s workspace pods). Auto-detection of local platform API + auto-login with default credentials
  • Project-scoped filtering — Every noun (models, datasets, experiments, training jobs, workspaces, features, monitoring, visualizations, data sources, AutoML) now filters by
    selected project via ProjectFilterProvider in the topbar
  • Global search — Cmd+K overlay searching across models, datasets, experiments, training jobs, projects, and visualizations with instant navigation
  • Notifications system — Real-time notification bell with unread count polling, grouped timeline (Today/This Week/Earlier), mark-all-read, and context-aware icons per notification
    type
  • Training job duration fix — Fixed duration showing "0m" or "0:00" after completion by preserving original started_at timestamp, adding seconds to duration display, marking jobs
    completed when progress hits 100%, and adding live polling on list/detail pages
  • Workspace tutorial notebooks — Three pre-loaded notebooks (welcome.ipynb, visualization.ipynb, registry.ipynb) covering the full ML workflow, all 9 viz backends, and registry SDK
    usage

Changes by area

Backend (Rust API)

  • New visualizations routes — full CRUD + publish endpoint for visualizations
  • New notifications routes — unread count, mark read, mark all read
  • New search route — multi-entity search across the platform
  • New resolve-registry endpoint — resolve models by registry_name for SDK use_model()
  • New registry-uninstall endpoint — unregister models from platform on CLI uninstall
  • New registry-status endpoint — batch check install status for UI badges
  • Project filter (?project_id=) added to all list endpoints (models, datasets, experiments, training, workspaces, features, monitoring, data sources, AutoML)
  • Fixed nullable project_id across Model, Dataset, DataSource, Pipeline structs (Uuid → Option) — was causing 500 errors on any SELECT of models without a project
  • post_metrics now sets status = 'completed' and completed_at when progress reaches 100%
  • DB migrations: 003_visualizations.sql (visualizations + dashboards tables), 004_registry_name.sql

Python SDK

  • New visualization.py — create_visualization(), render() (auto-detects backend), publish_visualization(), dashboard CRUD
  • New registry.py — registry_search(), registry_list(), registry_info(), registry_install(), registry_uninstall(), list_installed(), set_registry() with auto-detect API + auto-login
  • New client.py — RegistryModel class, use_model() method, register_model() enhanced to accept RegistryModel instances
  • New cli.py — Full CLI (openmodelstudio search/registry/info/install/uninstall/list/config)
  • New config.py — Persistent config (~/.openmodelstudio/config.json), registry URL + models dir management
  • init.py — Exports all new SDK functions

Frontend (Next.js)

  • New pages: /visualizations, /visualizations/[id], /dashboards, /dashboards/[id], /registry, /registry/[id], /search
  • viz-renderer.tsx — Renders Plotly (via Plotly.js), Altair (via vega-embed), Bokeh (via BokehJS), SVG, and PNG outputs in-browser
  • notification-panel.tsx — Popover with grouped notifications, unread badge, scroll area, fully opaque background
  • search-overlay.tsx — Cmd+K command palette with multi-entity search
  • project-filter.tsx + project-filter-provider.tsx — Global project scope selector in topbar
  • All list pages updated to use api.getFiltered() with project scope
  • Training detail page: 3-second polling for live metrics, loss/accuracy charts auto-update
  • Training list page: duration now shows seconds (45s not 0m), live polling + per-second re-render for running jobs
  • Registry detail page: install/uninstall button, Installed/Not Installed badges
  • Sidebar restructured with Develop/Operate/Admin sections
  • Fixed infinite reload loop in ProjectFilterProvider
  • Fixed shouldFilter={false} on cmdk CommandInput for proper search behavior

Model Runner

  • runner.py: Changed started_at = NOW() → started_at = COALESCE(started_at, NOW()) to preserve the original timestamp set when the K8s job was created, preventing duration from
    collapsing to near-zero on fast-training models

Kubernetes / Deployment

  • Dockerfile.workspace updated to include all 3 tutorial notebooks + all 9 visualization backend packages (plotly, altair, bokeh, plotnine, networkx, geopandas, datashader)

Workspace Notebooks

  • welcome.ipynb — Extended from 13 to 16 cells (added visualization creation, interactive Plotly chart, dashboard building)
  • visualization.ipynb — New 25-cell notebook covering all 9 visualization backends, render() reference, dynamic visualizations, and dashboard SDK
  • registry.ipynb — New 21-cell notebook covering registry search, install, use_model(), register + train, uninstall, and CLI reference

Documentation

  • docs/VISUALIZATIONS.md — Complete visualization & dashboards reference (9 backends, render() function, in-browser editor, dashboard SDK, API reference)
  • docs/MODELING.md — Extended with cells 14-16 (visualization, Plotly, dashboards)
  • docs/CLI-REGISTRY.md — Full CLI & SDK reference for model registry

Tests

  • search-and-registry.spec.ts — 14 Playwright tests for search overlay and registry page
  • dashboard-verification.spec.ts — Dashboard page E2E tests
  • notebook-workflow.spec.ts — Workspace notebook workflow tests
  • notifications-search.spec.ts — Notifications and search integration tests
  • project-filter-flow.spec.ts — Project filtering E2E tests
  • tests/python/sdk/test_cli.py — CLI unit tests
  • All 14 E2E tests passing

Testing Strategy

  • cargo check — Rust API compiles clean
  • npx tsc --noEmit — Frontend compiles clean
  • All 14 Playwright E2E tests pass
  • CLI install → UI shows "Installed" badge on registry page
  • CLI uninstall → UI reverts to "Not Installed" badge
  • oms.use_model("iris-svm") works inside workspace containers
  • oms.register_model("my-iris", model=iris) succeeds
  • Training job duration displays correctly after completion (seconds-level accuracy)
  • Training job metrics auto-update without page refresh
  • Notifications dropdown is scrollable, opaque, self-contained
  • Global search (Cmd+K) finds models, datasets, experiments, jobs
  • Project filter scopes all pages correctly
  • Visualization render() works for matplotlib, plotly, altair backends
  • Dashboard panels persist layout on save

@Jovonni Jovonni self-assigned this Mar 8, 2026
@Jovonni Jovonni added bug Something isn't working documentation Improvements or additions to documentation enhancement New feature or request labels Mar 8, 2026
@Jovonni Jovonni merged commit 66ae094 into main Mar 8, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working documentation Improvements or additions to documentation enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant