Darkspyre.Inference.UI.Settings.Avalonia 11.17.3-rc.2

Prefix Reserved
This is a prerelease version of Darkspyre.Inference.UI.Settings.Avalonia.
dotnet add package Darkspyre.Inference.UI.Settings.Avalonia --version 11.17.3-rc.2
                    
NuGet\Install-Package Darkspyre.Inference.UI.Settings.Avalonia -Version 11.17.3-rc.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Darkspyre.Inference.UI.Settings.Avalonia" Version="11.17.3-rc.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Darkspyre.Inference.UI.Settings.Avalonia" Version="11.17.3-rc.2" />
                    
Directory.Packages.props
<PackageReference Include="Darkspyre.Inference.UI.Settings.Avalonia" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Darkspyre.Inference.UI.Settings.Avalonia --version 11.17.3-rc.2
                    
#r "nuget: Darkspyre.Inference.UI.Settings.Avalonia, 11.17.3-rc.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Darkspyre.Inference.UI.Settings.Avalonia@11.17.3-rc.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Darkspyre.Inference.UI.Settings.Avalonia&version=11.17.3-rc.2&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Darkspyre.Inference.UI.Settings.Avalonia&version=11.17.3-rc.2&prerelease
                    
Install as a Cake Tool

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 Compatible and additional computed target framework versions.
.NET net11.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
11.17.3-rc.2 44 10/26/2026