aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/modules/assistant/README.md
blob: 3c35dc6c29325015ad40772d5552f391f1920524 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# assistant

Two settings pages for desktop-assistant, the daemon behind the assistant
canvas (`../../assistant/`).

**Assistant** edits the daemon's `~/.config/desktop-assistant/config.toml`
and switches its tools. The model fields (server, temperature, tool rounds,
thinking), the system prompt, the `[env]` rows and the tool switches all
edit a draft, and the header's Save writes it: the config first, then the
tool renames. An emptied field falls back to the daemon's default, shown as
its placeholder; the defaults come from `assistant.py --defaults`, so they
are never copied here. A refused number is outlined and holds Save back.
The system prompt also has "Use the default". The tool environment
(`[env]`) is one row per key, with an add row below. A tool's switch, once
saved, renames `tools/<name>.toml`
to `<name>.toml.off`, which the daemon's `*.toml` glob skips.

The page also lists llama-server's models with their state. The daemon
always answers with whichever model is loaded and never asks for one, so
it never swaps a model out from under another client. Load is the
deliberate swap: it asks the router to load that model now, polling
`/v1/models` until it reports `loaded`, and leaves the preference alone.
Prefer is the other, separate choice: the model the assistant should use,
saved in `Prefs`. A first version made Load also set the preference, so a
model loaded for another client became the assistant's too.

Opening the assistant canvas (SUPER+Home) loads the preferred model when
another one is resident, and the canvas header reads "loading <model>…"
until it is in. This desktop runs one model and one client at a time, so
opening the assistant is when its model should come back; the daemon still
never asks for a model itself. With no preferred model set, nothing is
swapped.

The daemon reads all of this only at startup, so after a change the page
says so and offers Restart, which runs `assistant.sh restart`; a daemon that
does not come back shows the script's status, whose log tail says why.

The file is edited line by line (`Config.js`) so the comments the example
ships with survive: an unset key sits commented out, setting it activates
its line, and unsetting comments it back out. Every write first parses the
whole new file with `tomllib`, then replaces the old one atomically, so an
edit can never leave a config the daemon refuses to start with.

**Ask presets** edits the canvas's canned questions for staged files:
label, question, and the file kinds each is offered for. They live in
`Prefs` and the canvas reads them live, so changes apply at once; "Reset to
defaults" drops the saved list and brings back the built-in one in
`../../assistant/Presets.js`. A new preset gets the fallback icon.

Search finds the model fields, every `[env]` key, every tool and every
preset by name.

Check: `node desktop/modules/assistant/test_config.js`.