From 385ce619b3ac869048687a9e98a4e7663786adba Mon Sep 17 00:00:00 2001 From: David Meijer Date: Tue, 28 Jul 2026 11:33:23 -0400 Subject: [PATCH] ENH: also allow users to only align their own uploads --- .../workspace/WorkspaceDiscovery.tsx | 41 +++++- .../client/src/features/discovery/types.ts | 11 ++ gui/src/server/routes/discovery.py | 133 ++++++++++++++++-- 3 files changed, 174 insertions(+), 11 deletions(-) diff --git a/gui/src/client/src/components/workspace/WorkspaceDiscovery.tsx b/gui/src/client/src/components/workspace/WorkspaceDiscovery.tsx index a18e8e7..0012bf0 100644 --- a/gui/src/client/src/components/workspace/WorkspaceDiscovery.tsx +++ b/gui/src/client/src/components/workspace/WorkspaceDiscovery.tsx @@ -11,6 +11,7 @@ import Chip from "@mui/material/Chip"; import CircularProgress from "@mui/material/CircularProgress"; import Collapse from "@mui/material/Collapse"; import Divider from "@mui/material/Divider"; +import FormControlLabel from "@mui/material/FormControlLabel"; import MenuItem from "@mui/material/MenuItem"; import TextField from "@mui/material/TextField"; import ToggleButton from "@mui/material/ToggleButton"; @@ -268,7 +269,12 @@ function ResultRow({ )} - + fp {(result.fingerprintSimilarity * 100).toFixed(1)}% @@ -332,6 +338,8 @@ export const WorkspaceDiscovery: React.FC = ({ session const [scoreMode, setScoreMode] = React.useState("subsequence"); const [n, setN] = React.useState(100); const [topX, setTopX] = React.useState(20); + const [includeUserUploads, setIncludeUserUploads] = React.useState(false); + const [onlyUserUploads, setOnlyUserUploads] = React.useState(false); const [resultsView, setResultsView] = React.useState<"pairwise" | "msa">("pairwise"); const [selectedForMsa, setSelectedForMsa] = React.useState>(new Set()); @@ -349,6 +357,9 @@ export const WorkspaceDiscovery: React.FC = ({ session scoreMode, n, topX, + includeUserUploads: (includeUserUploads || onlyUserUploads) && entryType !== "bgc", + onlyUserUploads: onlyUserUploads && entryType !== "bgc", + sessionId: session.sessionId, }), onError: (err) => { const msg = err instanceof Error ? err.message : String(err); @@ -593,6 +604,34 @@ export const WorkspaceDiscovery: React.FC = ({ session disabled={discoveryMutation.isPending} /> + setIncludeUserUploads(e.target.checked)} + disabled={ + discoveryMutation.isPending || entryType === "bgc" || compoundItems.length === 0 || onlyUserUploads + } + /> + } + label="Include my uploaded compounds" + title="Uploaded compounds compete for a spot among the nearest N candidates, then follow the usual top-X ranking. BGC uploads aren't supported yet." + /> + + setOnlyUserUploads(e.target.checked)} + disabled={discoveryMutation.isPending || entryType === "bgc" || compoundItems.length === 0} + /> + } + label="Only use my uploads" + title="Skip the shared database entirely and align only against your own uploaded compounds." + /> +