Skip to content

feat(inferences): inference services list and tabbed detail pages - #34

Closed
imneov wants to merge 6 commits into
mainfrom
feat/inferences-module
Closed

imneov wants to merge 6 commits into
mainfrom
feat/inferences-module

Conversation

@imneov

@imneov imneov commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

What type of PR is this?

  • feature
  • bug fix
  • documentation

What this PR does and why

Adds Inference services (/inferences), a second view on swissd's releases laid out the way Rise Global's model service pages are:

  • List (/inferences): a resource table with a two-line name/model cell, a state dot, namespace, route, chart, revision, updated time and a "behind catalog" badge; server-side paging (swissd caps a page at 100); a row menu with details, upgrade, versions and uninstall.
  • Detail (/inferences/:release/details?namespace=…&tab=…): a header card (back link, name, state, actions, four key fields) over tabs -- overview, instances, cluster resources, health check, SLO, versions, activity, plan -- instead of every panel stacked down the page. The tab is in the URL.

/swiss is unchanged. Deploy, upgrade and roll back still open swiss's wizards; uninstall is done here, confirmed by typing the release name.

It reuses swiss's API client and its resources, health check, SLO and plan panels rather than copying them: they are swiss's domain, and a copy would drift. That makes inferences the one module that imports another; docs/console-design.md records the exception and its cost. swiss's components render in swiss's module context (SwissScope / InSwiss), so their /… links and the setup redirect stay under /swiss. The shell exports ModuleProvider for this.

Two fixes found on the way:

  • Sidebar (fix(shell)): a module's pages without a menu entry -- e.g. /swiss/deployments/ns/r -- matched no entry, and the sidebar opened the first group. Groups now carry the module's basePath and the active one is the module the path is under.
  • Install track: when /objects cannot be read (an older swissd has no such endpoint) the new page reports the route and scaler as unreadable instead of claiming there is no ModelRoute.

Left out, written down in the design doc:

  • Logs and events tabs: swissd has no endpoint for either; that is a swissd change and starts with a design proposal.
  • Search on the list: swissd's list takes no query and filtering one page on the client would miss the rest; it needs ?q= on /api/deployments.
  • swiss's embedded panels stay English, as swiss's pages are.

Which issue(s) this PR fixes

None.

How it was tested

  • lib.test.ts: state mapping, tab visibility and fallback, paths, revision/run join, install track (21 tests). module.test.tsx: active sidebar group (1 test).
  • A local console built from this branch, with the UI from web/dist, against a live swissd:
    • detail page of an existing helm release, every tab, in zh-CN and en-US; read-only swissd greys out upgrade and uninstall with the reason;
    • list empty state, and the list with a fixture deployment list (the test cluster has no swiss releases);
    • the uninstall dialog opened, not confirmed (writes were refused by the local proxy);
    • /swiss list and detail unchanged, sidebar on the right group.

Checks

  • go test ./... and gofmt -l . is empty
  • npm run typecheck && npm test && npm run build in web/ (if web/ changed)
  • helm lint --strict helm/console (if the chart changed) -- chart unchanged
  • Docs updated where behaviour, a config key or a chart value moved
  • No internal hostnames, IPs, registries or credentials

Notes for reviewers

Start at web/src/modules/inferences/index.tsx and components/SwissScope.tsx (the context juggling), then lib.ts. The permission is swiss.view, so existing roles see the new page without a change.

Release note

New "Inference services" pages (/inferences): swiss's releases as a resource list and a tabbed detail page. /swiss is unchanged.

🤖 Generated with Claude Code

imneov and others added 6 commits October 3, 2026 04:41
The inferences module re-presents swissd's releases as a list and a tabbed
detail page. This is the part that decides, kept pure: the state a row or a
release is in, which tabs a release has, revisions joined with the runs that
made them, and the install track. The shell exports ModuleProvider so the
module can render swiss's own components in swiss's context.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A second view on swissd beside the swiss module, laid out the way Rise
Global's lists and detail pages are: /inferences is a resource table with a
name/model cell, a state dot and a row menu; /inferences/:release/details
puts a header card over tabs (overview, instances, cluster resources, health
check, SLO, versions, activity, plan) instead of stacking every panel.

It reuses swiss's API client and its resources, health check, SLO and plan
panels, rendered in swiss's module context so their links stay swiss's.
Deploy, upgrade and roll back still go to swiss's wizards; uninstall is
confirmed by typing the release name.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The active group was the one with a menu entry matching the path. A module's
index entry matches only exactly, so its pages without an entry -- a detail
page such as /swiss/deployments/ns/r or /inferences/r/details -- matched none,
and the sidebar fell back to the first group. Groups now carry the module's
basePath and the active one is the module the path is under.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
An older swissd has no /objects; the install track then claimed there was no
ModelRoute and the replicas were fixed. It now reports both as unreadable.
The small tables in the tabs drop the column toggle.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@imneov imneov closed this Oct 3, 2026
@imneov
imneov deleted the feat/inferences-module branch October 3, 2026 12:04
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