Darkspyre.Inference.UI.Settings.Core
11.17.3-rc.2
Prefix Reserved
dotnet add package Darkspyre.Inference.UI.Settings.Core --version 11.17.3-rc.2
NuGet\Install-Package Darkspyre.Inference.UI.Settings.Core -Version 11.17.3-rc.2
<PackageReference Include="Darkspyre.Inference.UI.Settings.Core" Version="11.17.3-rc.2" />
<PackageVersion Include="Darkspyre.Inference.UI.Settings.Core" Version="11.17.3-rc.2" />
<PackageReference Include="Darkspyre.Inference.UI.Settings.Core" />
paket add Darkspyre.Inference.UI.Settings.Core --version 11.17.3-rc.2
#r "nuget: Darkspyre.Inference.UI.Settings.Core, 11.17.3-rc.2"
#:package Darkspyre.Inference.UI.Settings.Core@11.17.3-rc.2
#addin nuget:?package=Darkspyre.Inference.UI.Settings.Core&version=11.17.3-rc.2&prerelease
#tool nuget:?package=Darkspyre.Inference.UI.Settings.Core&version=11.17.3-rc.2&prerelease
Darkspyre.Inference.UI.Settings
Three packages at the synchronized family version, each with an exact Common NuGet dependency. None embeds Common, Connect, Tensor or a UI framework's DLLs.
| Package | Holds |
|---|---|
Darkspyre.Inference.UI.Settings.Core |
UI-neutral pieces both editors share: IInferenceSettingsInteractionHost, IInferenceSettingsPathPicker, SetupEditorState, SetupNumberEdit<T> and the editor's input state. Namespace Darkspyre.Inference.UI.Settings. |
Darkspyre.Inference.UI.Settings.Avalonia |
The Avalonia editor: InferenceSettingsEditor, ConnectionTabs, SetupInstallStatusCard and IAvaloniaSettingsInteractionHost. Namespace Darkspyre.Inference.UI.Settings.Avalonia. |
Darkspyre.Inference.UI.Settings.Blazor |
The Blazor editor, drawn with Lumeo: the InferenceSettingsEditor and ConnectionTabs components and their field, number input, model pack card, install chip and status card components. Namespace Darkspyre.Inference.UI.Settings.Blazor. |
A host references the editor for its UI framework, which brings Core with it.
Each editor shows a provider's InferenceSettings object through its IInferenceSettingsManager: the settings'
fields, validation, status and setup actions. The host chooses where to show the editor and owns its connection list,
persistence, credentials, consent, browser interaction, and long-running operation lifetime.
Among Inference products, the packages reference Darkspyre.Inference.Common only. The host composes Connect or
Tensor settings managers and passes the Common types to InferenceSettingsEditor. No provider selection or
connection listing is built into the libraries.
Capability support uses Common's InferenceSupport: Unknown, Supported, or Unsupported.
Unknown leaves an explicit attempt available; it does not claim qualification. Connect's capability
override choices distinguish Default (inherit) from Unknown, Enabled (Supported), and Disabled
(Unsupported). Ordinary binary settings remain checkboxes.
The host supplies IInferenceSettingsInteractionHost to authorize declared side effects, run provider actions through
ExecuteAsync(manager, settings, action, progress, token), open the browser and show a folder. The Avalonia editor
takes IAvaloniaSettingsInteractionHost, which adds the window's clipboard. An editor does not own the settings, the
manager, or any engine behind it.
Blazor editor
The Blazor editor shows the same regions, wording, options and states as the Avalonia editor, drawn with Lumeo
components and its own scoped CSS, which reads the Lumeo theme's colours. The sections below describe both editors. It
takes Settings, Manager and Host as parameters and reports CommitCompleted, StepChanged and StateChanged
as event callbacks:
<InferenceSettingsEditor Settings="settings" Manager="manager" Host="interactionHost"
CommitCompleted="OnCommitCompleted" StateChanged="OnStateChanged" />
ShowSaveButton, ShowHeading, ShowActionEffects and ShowStepList are parameters; IntroContent,
SupplementaryContent and MoreOptionsContent are render fragments. ConnectionTabs takes the same Settings,
Manager, Host and MoreOptionsContent and draws its tabs with Lumeo's Tabs. The Blazor editor copies a device code
with the browser's navigator.clipboard.writeText and shows the result, Sign-in code copied to clipboard. or a
request to select and copy the code, under the code. A browser can refuse the automatic copy that no click started;
Copy code then copies it. SetupNumberInput.razor adapts Lumeo's NumberInput; THIRD-PARTY-NOTICES.md carries its
licence.
Avalonia editor
The Avalonia editor carries its own styles, InferenceSettingsStyles. They read the host theme's brushes, so the
editor follows the host's light or dark theme.
InferenceSettingsEditor editor = new(settings, manager, interactionHost);
editor.CommitCompleted += (_, result) => OnCommitCompleted(result);
dialog.Content = editor;
The host creates manager with the owning Connect or Tensor factory and a typed
ISetupCommitTarget<TChanges>, then calls the manager's OpenAsync for settings. Field edits stay
in settings. Only Save reaches the host. A Committed CommitCompleted result tells the host to close
the dialog and refresh its own list. Closing without Save discards the object. The editor exposes
SaveAsync() for a host-owned Save control; set ShowSaveButton = false when using that option.
When the manager implements IInferenceSettingsStatusSource, the editor listens to StatusChanged
while it is shown. After each refresh it renders the new status and reloads its choice fields, so
install chips follow the change.
The status line shows each applicable SetupStatus observation as a chip and is absent when none
applies: "Signed in", "Not signed in" or "Sign-in not checked", and the same for Configured,
Installed, Verified, Loaded and Ready. A stale observation reads as not checked; stored sign-in
configuration or a successful Save does not establish a fresh check. Action and save results read
as sentences, never as enum names.
A SetupInstallStatusField renders as a status card under the choice it follows: Installed in the
store, with the file count, size and licence and a Show button that calls the host's
RevealFolderAsync with the store folder; Not downloaded, with a Download button; Files missing,
naming the missing file, with Download again and Delete download; or Not supported, with the
status's UnsupportedReason as a line under the chip and the actions the status gives. A disabled
card action shows its reason beside it. The card's buttons run through the manager like any other
action, with the editor's progress and Cancel. Common's SetupInstallActions.For gives the card's
actions for each state: Download (<size>); Download again and Delete download; or
Delete download, disabled with its reason while the item cannot be removed. The action ids are
SetupInstallActions.Download and SetupInstallActions.Remove. A host that shows a local install
outside the editor builds the public SetupInstallStatusCard from a SetupInstallStatus with those
actions, and handles the two ids in its run callback. A choice whose SetupChoice.Install is set shows a
chip for its State: "Installed", "Not downloaded" with its download size, or "Not supported".
An Installed chip uses the success style with a check mark, a Not downloaded chip the warning style
with a download arrow, and Files missing and Not supported chips the destructive style with no icon.
When every loaded choice of a field carries Install, the field shows the choices as model pack
cards in place of the list: name, download size and install chip ("Installed", "Not downloaded" or
"Not supported"), chosen on click. A SetupChoiceField with ShowValue false keeps its value but renders no selection, and no card shows as selected; the
status card shows the value instead. A choice's Tags show as chips beside its name, and its
description as a line under it.
IntroContent and SupplementaryContent accept optional host guidance without changing the
provider-owned fields or actions. MoreOptionsContent is host content drawn on the first step: at
the end of its advanced section titled "More options", or in a "More options" expander of its own
when the step has none.
Step actions, the tool checklist and the model test
The tail under a step draws the actions the step names in SetupStep.ActionIds, in that order.
When no step of the settings names any action, every action shows on every step. The first of
several steps is the connection step: its instructions show under "About this connection", and its
troubleshooting text only when the person opens "Trouble signing in?".
A step that names a CheckPrerequisites action, in settings whose Status.Installed applies, shows
a checklist above its actions. The first item reads "✓ Installed: <executable>" once the check has
found the tool, "Not installed" when it has not, and "Not checked yet" while the observation is
unknown or stale; a missing tool's prerequisite shows as an interaction. The second item reads
"✓ Signed in", or offers the step's sign-in action. A step with no sign-in action offers the
prerequisite instructions with their recheck instead. The tail leaves out the actions the checklist
draws. The editor runs the check once when such a step is first shown, and again after a sign-in
completes.
On a step whose ActionIds contains test, choosing a model from the model field's list, or
typing one and pressing Enter or leaving the box, runs the test. Text typed into the manual box,
which shows while no choice is listed, applies on each change and starts no test. A test result
shows "Test reply received in 1.4 s", the result's Message, and a Test again button.
Editing an existing connection
ConnectionTabs shows a connection's settings on two tabs, "Connection" and "Model", one per step;
each step's own title is its heading, and no step list or Back and Next buttons show. One editor
serves both tabs, so typed input and a sign-in in progress carry across them. Its
MoreOptionsContent goes to the Connection tab. The host frames the tabs with the connection's name
and saves through SaveAsync; CommitCompleted reports the result. A refused save selects the tab
with the problem. State and StateChanged report the editor's SetupEditorState, so the host
enables its Save from CanSave and asks before discarding unsaved changes.
Showing a folder
IInferenceSettingsInteractionHost.RevealFolderAsync(folder, token) shows a folder in the platform's
file manager. The install card's Show button calls it with the model store folder; an exception
shows its message as the action result. Every host call the editor makes reports a failure the same
way: a failed authorization, action run or browser open is a Failed action result whose issue names
what failed and the exception's type and message, and a failed path pick or choice query shows the
same on its field.
Optional native path selection
An interaction host may also implement IInferenceSettingsPathPicker.SelectPathAsync. Text fields
with a SetupPathSelectionKind.File or .Folder hint, plus executable fields, then offer Browse.
Return an absolute path or null for cancellation. The host owns the native dialog and access grants;
manual entry remains available when no picker is supplied. A completion that arrives after a later
edit cannot overwrite that edit. This capability is included starting with 11.4.0-rc.1.
An empty executable input shows the field's default as a placeholder. Rendering this hint does not
change the field value or apply an edit.
Host-framed presentation
A host that frames the editor with its own title sets ShowHeading = false; the editor then omits
its provider name and description. A host that treats the person's click as consent for declared
side effects sets ShowActionEffects = false to omit the effect labels beside each action. Both
default to true.
When the settings have several steps, the step list names and marks the current step (class current),
and the step's own title is not repeated; single-step settings keep their title. A host that draws its
own step strip sets ShowStepList = false: the list is hidden, each step shows its title, and Back and
Next stay. CurrentStepIndex is the shown step, and StepChanged reports each move to another step. A device
authorization copies its user code to the clipboard the first time the code is shown, once per code, and shows a
Copy code button that copies it again. In the Avalonia editor both go through
IAvaloniaSettingsInteractionHost.CopyToClipboardAsync(source, text, copied), which writes the clipboard and tells
the person the result with the host's transient notice; the editor passes Sign-in code copied to clipboard.. The
code itself selects in one click. Device and browser sign-in panels also show the sign-in page's address as selectable
text with a Copy link button, so a person can finish in any browser when the host's browser does not open; the
Avalonia editor copies through CopyToClipboardAsync with Sign-in link copied to clipboard., and the Blazor editor
shows the same text under the panel. A searchable choice list shows its separate
provider-search box only while the loaded list is incomplete or a search is active; otherwise the
auto-complete box filters the loaded choices. A choice whose value differs from its display name shows the
value on a second line, and the filter matches either one.
Editor state and Save
Subscribe to StateChanged for a safe SetupEditorState (also available as editor.State).
HasUnsavedChanges combines unsaved settings changes with locally invalid/unapplied input and an
uncertain save. Use this signal for host-owned discard confirmation. HasPendingInput and
HasInputErrors explain local blockers. CanSave is true when every required field has a value, any
required sign-in has succeeded, no action or save is running, and no local input is invalid.
CommitOutcomeUncertain requires host readback, not an automatic save retry.
InferenceSettingsEditor editor = new(settings, manager, interactionHost) { ShowSaveButton = false };
editor.StateChanged += (_, state) => saveButton.IsEnabled = state.CanSave;
editor.CommitCompleted += (_, result) => OnCommitCompleted(result);
The host may enable its Save control from state.CanSave and invoke editor.SaveAsync().
That method and the built-in Save share the same validation gate. Invalid URL/number text and
unapplied secret text cannot silently save a previous valid value. Back preserves pending input;
replacing the settings clears it. The host must ask about discarding edits before replacing the
settings. Saved settings are not saved again; open the entry again for a subsequent edit.
Bounded choices use a combo box without search or refresh controls. Choice capabilities opt into discovery
controls. Numeric fields use UI.Settings-owned exact long/decimal parsing and stepping
(SetupNumberInput<T>). Invalid or out-of-range typed text is preserved and blocks Save; only explicit
stepping clamps to bounds. A text box reports text the editor sets during a redraw; the inputs treat only
text that differs from the shown value as an edit.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net11.0 is compatible. |
-
net11.0
- Darkspyre.Inference.Common (= 11.17.3-rc.2)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Darkspyre.Inference.UI.Settings.Core:
| Package | Downloads |
|---|---|
|
Darkspyre.Inference.UI.Settings.Avalonia
Host-placed Avalonia setup editor for Darkspyre inference providers. |
|
|
Darkspyre.Inference.UI.Settings.Blazor
Host-placed Blazor (Lumeo) setup editor for Darkspyre inference providers. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 11.17.3-rc.2 | 46 | 10/26/2026 |