Commit Graph
11489 Commits
Author SHA1 Message Date
Aleksander Grygier 7a375abfb7 ui : put the model filters in a carousel and give controls a pointer
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
2026-09-28 12:10:14 +02:00
Aleksander Grygier 3044a73ce5 ui : filter models by capability and by draft sidecar
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
2026-09-28 12:10:14 +02:00
Aleksander Grygier d5e81d004b ui : close the models manager when a chat starts from it
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
2026-09-28 12:10:14 +02:00
Aleksander Grygier f941692289 ui : spin the load button while a model loads
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
2026-09-28 12:10:14 +02:00
Aleksander Grygier b56e0adb26 ui : show only the load state and the provider in the pane header
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
2026-09-28 12:10:14 +02:00
Aleksander Grygier 03da7488f8 ui : give the pane avatar the discover details sizing
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
2026-09-28 12:10:14 +02:00
Aleksander Grygier 9eb0d117f6 ui : calm the configuration pane header
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
2026-09-28 12:10:14 +02:00
Aleksander Grygier f1b33942a8 ui : say state, compat and provider on one line in the pane
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
2026-09-28 12:10:14 +02:00
Aleksander Grygier 4e9d860856 ui : stop the configuration pane from padding its right edge twice
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
2026-09-28 12:10:14 +02:00
Aleksander Grygier e4d69bf6cd ui : keep the model selector usable when a provider is down
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
2026-09-28 12:10:14 +02:00
Aleksander Grygier 727d8b93d5 ui : let a remote model report its own status
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
2026-09-28 12:10:14 +02:00
Aleksander Grygier 407bd3906e ui : send the external server its own key when loading
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier a00e37e4ba ui : load a model on the backend that serves it
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier f24212e504 ui : give the discover chips a border colour and a shadow
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier 3134109a8e ui : give the chat add button its own light surface
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier 2c1d01ba90 ui : add a tertiary variant and give secondary its own look back
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier 2981ac722b ui : give the secondary button the filter box
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier 330ac0807e ui : give the model filters one box, and the loaded section its own rows
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier 2569306b71 ui : list loaded models as their own rows
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier 81d7672db8 ui : show the connection test as a status block
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier 6509a52333 ui : read a refused probe as a llama-server that wants a key
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier 30430bbcaa ui : rework the provider dialog around protocol detection
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier 5c12d35169 ui : slide the dialog title into its sub-views
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier 377ec491da ui : move mcp servers to the sidebar
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier 4d992dbe05 ui : move mcp from the add menu to the sidebar rail
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier 30247b4d34 ui : keep the toolbar filters and the view body in place
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier ef6225b27f ui : shorten the pane and calls to action transitions
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier 7193c80df1 ui : fade the calls to action in place
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier fbc4fda032 ui : let the calls to action leave before the pane takes their space
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier 75513d259d ui : fade between the dialog's views
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier d6e74f5a89 ui : lay the model pane out before its first open
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier ed7310b2f5 ui : give the configuration drawer a drawer curve
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier a8a19c95f6 ui : slide the configuration pane in as a fixed width drawer
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
2026-09-28 12:10:13 +02:00
Aleksander Grygier a8c65ce6ac ui : let the toolbar's calls to action leave with the pane
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier df8dfc6d5d ui : trim the model info rows and let long values scroll
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier 34a7cf98bd ui : show a model's info from what its provider and load state allow
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier 4be52bf364 ui : size the selector trigger icon and its spacing
Assisted-by: pi:llama.cpp/GLM-5.3-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier 76eba07511 ui : pad the add-provider card in the providers view
Assisted-by: pi:llama.cpp/GLM-5.3-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier a1abf19169 ui : add a setting to show model modalities and capabilities in the selector
Assisted-by: pi:llama.cpp/GLM-5.3-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier d1b242b222 ui : drop the providers settings section and the model grouping setting
Assisted-by: pi:llama.cpp/GLM-5.3-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier 0662d5d726 ui : use the info icon for the action that opens the models manager
Assisted-by: pi:llama.cpp/GLM-5.3-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier bc132403a8 ui : show the selected model's org avatar on the selector trigger
Assisted-by: pi:llama.cpp/GLM-5.3-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier db4fc4fe2e ui : show the provider's mark on the model selector trigger
Assisted-by: pi:llama.cpp/GLM-5.3-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier 3eb568e8f1 ui : replace models dialog tabs with drill-down from the manage table
Assisted-by: pi:llama.cpp/GLM-5.3-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier dadf93f081 feat: UI improvements 2026-09-28 12:10:13 +02:00
Aleksander Grygier 9d2ca5ac05 ui : put manage, discover and providers in one dialog
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier 3dea340073 ui : give the capability icons one order and one spacing
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier 4fdf871e02 ui : show the draft badge after the model's own quant
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier f2432ce485 ui : put the draft sidecar on the model id and its details in the pane
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
2026-09-28 12:10:13 +02:00
Aleksander Grygier 2d59a0d668 ui : show and set a model's speculative draft
Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash
2026-09-28 12:10:13 +02:00