Repository navigation
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What type of PR is this?
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:/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./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./swissis 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
inferencesthe one module that imports another;docs/console-design.mdrecords 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 exportsModuleProviderfor this.Two fixes found on the way:
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'sbasePathand the active one is the module the path is under./objectscannot 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:
?q=on/api/deployments.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).web/dist, against a live swissd:/swisslist and detail unchanged, sidebar on the right group.Checks
go test ./...andgofmt -l .is emptynpm run typecheck && npm test && npm run buildinweb/(ifweb/changed)helm lint --strict helm/console(if the chart changed) -- chart unchangedNotes for reviewers
Start at
web/src/modules/inferences/index.tsxandcomponents/SwissScope.tsx(the context juggling), thenlib.ts. The permission isswiss.view, so existing roles see the new page without a change.Release note
🤖 Generated with Claude Code