The capability and modality toggles were two groups, and the toolbar had
grown to two rows at 1280px. They are one group now and the row scrolls
with the same carousel the settings header uses. An active toggle keeps
the app's gray instead of taking the primary fill. Tailwind v4 leaves
buttons on the default cursor, so pressable controls get the pointer back.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The manager could narrow by provider, context and modality only. It now
also asks for tool use or for reasoning, which the Hub chat template
answers for a local model, and for models that have a draft sidecar to
speculate with. The provider menu says how many repos each provider
contributes and steps aside when there is only one to choose between.
The Hub details cache becomes a SvelteMap so a filter re-runs when a
template arrives after the row mounts, and the discover entry's effect
consumes its flag untracked instead of invalidating itself.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The pane's Start a new chat asks the manager to close, and the manager
forwards that through onClose, but the dialog never passed it, so the call
went nowhere and the chat opened behind the dialog.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The button kept saying Load model while the server was already starting the
load, so a second click looked reasonable. It now shows a spinner and
Loading... and is disabled until the status settles.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The line carried the compat wording between them, which repeated what the
provider's own icon and the Load tab already say. A provider that cannot
load or unload has no load state to report, so its models read Available
rather than Not loaded. The compat wording lives on in the provider title.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The pane took the default 12px quant badge tucked 4px into a 48px avatar
while the discover details header draws a 24px badge 6px in. Both now pass
the same three values.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The status line mixed a filled 10px badge in with muted 12px text, so the
compat badge drew the eye first, and the provider mark was the app logo at
14px, which reads as a smudge, or nothing at all when a remote server has
no favicon. It is now one voice, one line, with a mark for every provider
and separators that travel with their item.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The header carried a second row of context, size and a Served by chip
while the load state sat on its own line under the model id. They are now
one line, the context and size are gone, and the provider shows its own
icon, with the app logo standing in for the local server.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The dialog already pads that edge, and the pane's header, tab list and tab
content each added another 16px on top of it, so the panel sat 32px from
the edge while the table beside it sat 16px away.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The selector was disabled whenever no backend was reachable, which locked
the one control that lets you leave the broken provider. It now stays
enabled and wears the error colours, the manager marks the unreachable
provider in its section header, and the banner only speaks when there is a
single provider and nowhere to switch to.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
Listings dropped the load state they carry, status lookups only ever read
the local router rows, and the status feed belongs to the local server, so
a model loaded on an external llama-server stayed unloaded as far as the
UI knew. The state now travels with the model, lookups resolve the backend
that serves it, and an external operation settles by asking that backend
for its list until the status lands.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The backend id only reached the URL, so apiFetch built the headers for the
active backend and the remote llama-server answered 401. Passing it as an
option lets apiFetch resolve the URL and the credentials from it, which
also makes the explicit apiUrl call redundant.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The status store pinned the active backend to the local server before
loading, and the service posted to a relative /models/load, so a model
from an external llama-server was loaded on the server serving this UI.
Load and unload now name the backend the model belongs to.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The fact chips, the chat template chip, the copy chip and the Hugging
Face link drew a bare border with no colour and no shadow, while the
cards around them drew shadow-xs where the rest of the app draws
shadow-sm.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The button on screen is the dropdown's own trigger, which filled with the
secondary variant's muted surface. Ghost brings no fill, so the trigger
and the mobile sheet's button carry the page background in light and the
hint of foreground in dark that they had before.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The muted fill belonged to the filter box, but the chat form's add button
and the app's cancel buttons share the secondary variant. That look moves
to tertiary, which the manage dialog's calls to action use, and secondary
returns to the lighter surface it had before.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
It filled with bg-muted/30 and drew a border-muted edge while the filters
around it used the app's muted fill and soft border. It now uses the same
ones, so a dialog's Cancel and a filter control read as the same surface.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The filter controls filled differently between themes: the search box and
the toggle group drew their own border, and the select filled only in
dark. They now share the app's box, the select trigger wears the same
chevron as its neighbours, and the select popover matches the dropdown
menu around it.
The loaded section also lists loaded quants only, since a repo was claimed
whole when a single quant of it was loaded, and the rest of the repo now
stays with its provider.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
A loaded repo folded its quants under a repo row, which said nothing about
what is loaded. Each quant is now its own row in that section.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The test result was a line of text that only appeared once a test had run.
It is now a block at the foot of the form with an idle, testing, connected
and failed state, and it announces itself to assistive tech.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
A keyed llama-server answers /props with 401, which the probe reported as
OpenAI-compatible. It now reports llama-compat and marks the key required,
and typing one re-probes and lifts the requirement.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The protocol toggle group is gone: the dialog probes /props once the URL
settles and says what it found, keeping the format select in advanced as
an override. The recommended providers can be dismissed like the MCP
ones, and the form takes the reference dialog's spacing with the name and
key side by side.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The back arrow was inserted into the flow, so entering a sub-view
reflowed the header and snapped the title sideways. The arrow is now
absolute and fades, the title slides by transform, and the three view
marks cross-fade in one grid cell.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The rail gains an MCP item between models and settings, and the chat
form's add menu and sheet lose theirs, along with the plumbing that
opened the dialog from there.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The calls to action held 324px while invisible, so the filters wrapped
with the pane open even at 1280px. The row leaves the flow once faded.
The back button also grew the header by 8px, shifting the view body.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
Opening a panel took 450ms end to end. The fade is 120ms, the slide
200ms, and the content fade follows 80ms behind it.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
They collapsed across before, which moved and squashed them. They now
hold their box and only fade, and the pane waits for the fade to finish.
The region loses the width axis it no longer needs.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The pane opened while the toolbar was still collapsing, so both moved at
once. The pane now waits for the calls to action, and closing runs the
same order backwards.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
Opening discover or providers swapped the view in place. Each view now
fades out, swaps, then fades in, and the header's title follows the
requested view while the body follows the rendered one.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The pane mounted its content as it slid open, so the first open had work
to do that later ones did not. It now renders the first model up front,
and switching models fades the panel out, swaps, and fades it back in.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
Opening takes the iOS-like curve, closing is the system responding and
snaps back faster, and reduced motion keeps the fade while dropping the
slide. The content fade waits for the drawer to move so it reads.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
The pane kept mounting and unmounting, so it popped into place and its
content reflowed while the layout changed. It now stays in the DOM at
zero width, its content box holds the open width, and the two fade with
the drawer.
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash