Skip to content

fix(desktop): hide models and controls for stopped engines - #189

Open
nvrithik wants to merge 2 commits into
NVIDIA:developfrom
nvrithik:rithik/fix/stopped-engine-models-ui
Open

nvrithik wants to merge 2 commits into
NVIDIA:developfrom
nvrithik:rithik/fix/stopped-engine-models-ui

Conversation

@nvrithik

@nvrithik nvrithik commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator

Changelog title

Stopped engines show consistent model guidance

Changelog body

  • A stopped engine's Models section now shows “Start engine to see models” and hides cached model rows and model controls until the engine is turned on.
  • vLLM that is on but idle continues to show its downloaded models and available controls.

Bumps

  • services: minor
  • nvpair-cluster-manager: none
  • nvpair-engine-manager: none
  • nvpair-errors: none
  • nvpair-job-scheduler: none
  • nvpair-manual-nodes: none
  • nvpair-node-info: none
  • nvpair-node-scanner: none
  • nvpair-node-settings: none
  • nvpair-proxy: none
  • nvpair-tui: none
  • nvpair-ui-broker: none
  • nvpair-workload-manager: none

Description

A stopped vLLM engine could show cached model rows and Add model, or “No model/weight files downloaded,” because model operations remain available in its disk cache. The Models section now follows reported engine status: stopped engines show only “Start engine to see models.” Running engines retain their existing model list and controls, including vLLM's on-but-idle state.

Follow-up to #181, based on its current head 2e300f2452baf581d341efaa898f48c428c4c997. This branch has one additional fix commit. Until #181 merges, GitHub's comparison against develop also includes that prerequisite.

Scope

Changes the shared Models presentation for local and peer engine cards. Engine capabilities, cached inventory, runtime lifecycle and model actions keep their existing contracts. This PR is independent of the separate peer idle-timeout display fix.

Validation

  • From desktop/: npm run typecheck, npm run lint, npm run dead-code:check, npm run test:unit, and npm run service-contracts:check passed in this isolated PR checkout.
  • Added 48 component regression cases using the actual ModelManager/ModelSection and their renderer stores: all four engines, local/peer IDs, stopped empty/cached lists, running lists, on-but-idle vLLM and stale operation progress.
  • A mounted Electron renderer harness passed 95 assertions, including off/on/off transitions and opening model action menus. The original UI failed 30 of those assertions. These use controlled node-state inputs rather than a live-cluster transport test.
  • The combined test checkout passed all 394 desktop tests on Linux x64 and Apple Silicon macOS. The isolated branch's full desktop suite passed separately.
  • node scripts/spdx-headers.mjs and git diff --check passed.

Risk

Stopped engine cards intentionally hide model controls even when an engine's underlying cache operations are available while stopped. On-but-idle vLLM remains running and retains those controls. No persisted state, service binary, protocol or package-version file changes.

Checklist

  • Read CONTRIBUTING.md and applicable architecture rules.
  • Signed off the fix commit with the configured author identity.
  • Added focused regression coverage and ran the desktop gates.
  • Reviewed the unique diff for credentials, private node identities and generated files.
  • Declared release intent without editing versions.json or CHANGELOG.md.

[backendType, nodeId]
)

if (backend.processStatus === 'stopped') {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we clear the modal state when the engine becomes stopped? This early return unmounts ModelHubModal and ConfirmModal but leaves openModelHubModal and modelPendingDelete set. If the engine starts again, the model hub—or a stale delete confirmation—could reappear. Consider resetting those states on stop and adding a stopped→running regression case.

)

if (backend.processStatus === 'stopped') {
return (

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This guard handles only the exact stopped status. While the engine is stopping, model rows and controls still render; for vLLM, modelOpsWhenStopped may also leave Load enabled because isRunning is false. Could we explicitly distinguish stopped from transitional states and disable actions while stopping, while preserving the intended actions for a fully stopped vLLM engine? A stopping-state regression test would clarify the expected behavior.

@nvrithik
nvrithik force-pushed the rithik/fix/stopped-engine-models-ui branch from b45cccd to 3b138ac Compare November 3, 2026 08:38
@nvrithik
nvrithik force-pushed the rithik/fix/stopped-engine-models-ui branch from 3b138ac to dcf06e2 Compare November 12, 2026 05:47
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.

2 participants