Skip to content

feat: search sidebar relocation, display fields fix, and compact layout#25

Merged
aGallea merged 8 commits into
masterfrom
feat/search-sidebar-relocation
Mar 2, 2026
Merged

feat: search sidebar relocation, display fields fix, and compact layout#25
aGallea merged 8 commits into
masterfrom
feat/search-sidebar-relocation

Conversation

@aGallea

@aGallea aGallea commented Mar 2, 2026

Copy link
Copy Markdown
Owner

Summary

  • Fix display fields filtering: Selected display fields now actually filter the metadata shown in tooltips. Default shows all fields when none selected.
  • Relocate Semantic Search: Moved search bar from standalone position to top of left sidebar, shown only after plot is computed.
  • Compact sidebar layout: Tightened spacing, padding, and font sizes across all sidebar components. Added collapsible accordion sections to PlotControls with chevron toggles (Collection and Clusters default open, all others collapsed).

Changes

Backend

  • scatter_plot.py: Filter compute_plot_data() metadata output to respect text_display_fields setting
  • test_scatter_plot.py: Added TestComputePlotData with 2 tests for display field filtering

Frontend

  • PlotControls.tsx: Compact spacing (space-y-2 p-3), collapsible sections with inline CollapsibleSection component
  • SearchBar.tsx: Tightened spacing (space-y-2 p-3), smaller heading and input padding
  • SearchResults.tsx: Compact items (px-3 py-2), smaller thumbnails (w-8 h-8)
  • ClusterSuggestion.tsx: Smaller chart (240x110), adjusted padding
  • PlotPage.tsx: Sidebar SearchBar wrapper reduced to px-3 py-2, search conditional on plotData, fullscreen desync fix
  • search.spec.ts: 9 e2e tests updated for sidebar placement with data-testid selectors

Verification

  • Frontend build: clean
  • 9 e2e search tests: all pass
  • 211 backend tests: all pass (97.78% coverage)
  • No behavioral changes -- only visual/layout adjustments in the compact sidebar commit

Ultraworked with Sisyphus

aGallea and others added 8 commits March 1, 2026 17:22
Add pydantic-settings fields for reduction_algorithm (tsne/umap/pca),
tsne_perplexity, tsne_learning_rate, umap_n_neighbors, umap_min_dist,
and umap_metric. Add umap-learn as optional dependency group. Include
mypy override for umap stubs.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add reduce_dimensions() function supporting t-SNE, UMAP, and PCA with
strategy dispatch. Refactor compute_plot_data() to use the new function.
UMAP import is guarded with a friendly error message when not installed.
Includes 8 new tests covering all algorithms, custom params, import
guard, and invalid algorithm handling.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Extend PlotRequest model with reduction_algorithm field (tsne/umap/pca)
and algorithm-specific parameters with field_validator for mutual
exclusivity. Update plot route to pass reduction params to Settings.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add ReductionAlgorithm type and algorithm params to PlotRequest interface.
Extend plotStore with algorithm state and setters. Add radio selector
for t-SNE/UMAP/PCA with conditional parameter panels: perplexity slider
and learning rate dropdown for t-SNE, neighbors/min-dist sliders and
metric dropdown for UMAP, and info text for PCA.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Document t-SNE/UMAP/PCA algorithm selection in features, architecture
diagram, and Plot parameters table. Add UMAP optional installation
instructions and new env var reference for all 6 reduction parameters.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
compute_plot_data now respects text_display_fields setting by filtering
each point metadata dict to only the selected keys. When no fields are
selected, all metadata is returned (previous behavior). imageUrl is
treated like any other field with no special-casing.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Move SearchBar and SearchResults above PlotControls in the left sidebar,
displayed only after plot is computed. This improves search discoverability
without consuming extra vertical screen space like the top bar approach.

Also adds data-testid attributes for robust e2e selectors, and fixes
fullscreen state desync when exiting via Escape key.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Tighten spacing, padding, and font sizes across all sidebar
components. Add collapsible accordion sections to PlotControls
with chevron toggles — Collection and Clusters default open,
all others collapsed.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
@github-actions

github-actions Bot commented Mar 2, 2026

Copy link
Copy Markdown

Tests Report 📄

Tests Succees ✅

JUnit Details

Total Tests Failures Errors Skipped Time ⏳
211 0 0 0 60.01s

Coverage Details (93% >= 90%) ✅

Diff Cover Details
FileCovered LinesMissing Lines
embedding_cluster/scatter_plot.py74/7796%268-270
embedding_cluster/settings.py10/10100%
embedding_cluster/server/models.py16/2176%86-88,92-93
embedding_cluster/server/routes/plot.py6/6100%
Total106/11493%

@aGallea aGallea merged commit dc3ee96 into master Mar 2, 2026
3 checks passed
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.

1 participant