diff --git a/docs/Decisions.md b/docs/Decisions.md index 1e0e81b..9c74b02 100644 --- a/docs/Decisions.md +++ b/docs/Decisions.md @@ -290,3 +290,7 @@ starts the weight download. Weights load exactly when they are needed or asked f (`loadStarted`, progress); the next load starts from clean progress. The explicit download is a full pipeline load, so it also warms up inference and surfaces the "Running on …" backend badge. +**Amendment (2026-07-14):** while the engine toggle is on "server" (signed in, +available), `ModelPicker` states explicitly that nothing is downloaded to the +device; the Download button stays (with a matching tooltip) for on-device / +offline preparation. diff --git a/src/App.tsx b/src/App.tsx index e448c9e..5532f0d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -644,6 +644,7 @@ export function App() { disabled={busy || liveActive} onDownloadSelected={handleDownloadModel} downloading={loadStarted && !modelReady} + serverEngine={serverSelected} /> {model?.multilingual && ( diff --git a/src/components/ModelPicker.tsx b/src/components/ModelPicker.tsx index 3771972..61834b1 100644 --- a/src/components/ModelPicker.tsx +++ b/src/components/ModelPicker.tsx @@ -23,6 +23,8 @@ interface ModelPickerProps { onDownloadSelected: () => void; /** True while a model load/download is in flight. */ downloading: boolean; + /** True when transcription will run on the server — no download needed (D-020). */ + serverEngine: boolean; } const DEVICE_OPTIONS: readonly { value: DevicePreference; label: string }[] = [ @@ -56,6 +58,7 @@ export function ModelPicker({ disabled = false, onDownloadSelected, downloading, + serverEngine, }: ModelPickerProps) { // Size estimates depend on the dtype the worker will pick, which depends on // the device. Until the worker has reported one, assume WASM unless the @@ -116,6 +119,13 @@ export function ModelPicker({ Model switching is disabled while a transcription is running.
)} + {serverEngine && ( ++ Transcription is set to run on the server — the selected model runs + there, so nothing is downloaded to this device. Downloading is only + useful if you plan to transcribe on-device or offline. +
+ )}0 ? " offline-status-ready" : ""}`} > @@ -164,7 +174,11 @@ export function ModelPicker({ type="button" className="model-download-button" disabled={disabled || downloading} - title="Download this model now so it is available offline. Otherwise it downloads automatically when an on-device transcription starts." + title={ + serverEngine + ? "Not needed while transcribing on the server — download only to prepare on-device or offline use." + : "Download this model now so it is available offline. Otherwise it downloads automatically when an on-device transcription starts." + } onClick={onDownloadSelected} > {downloading ? "Downloading…" : "Download"} diff --git a/src/index.css b/src/index.css index 10eff78..e32f36c 100644 --- a/src/index.css +++ b/src/index.css @@ -207,6 +207,11 @@ body { font-size: 0.85rem; } +/* Server engine active — no model download needed on this device (D-020). */ +.server-engine-hint { + color: #9ad6ae; +} + .device-select, .transcription-options label { display: flex;