Menu bar app¶
The menu bar app shows your gmlx server in the macOS menu bar. From it you can see the loaded models, start and stop the server, edit the configuration file and hold voice sessions.
A background gmlx serve, or a gmlx launch that starts the server, opens
the app for you. To open it yourself:
The app appears as gmlx and a dot in the menu bar. When the server exits
unexpectedly or stops responding, the app posts a macOS notification.
What the menu shows¶
The dot is filled while the server is up, ringed while it generates, empty while it is down, and half filled when the server needs an API key that the app does not have.
Under the title, rows show the server's process id and port, and how many
requests are generating and queued. The Loaded models submenu lists each
model with its size, a [default], [pinned] or [kept] marker, and the
time until an idle model unloads. Select a model to unload it.
| Item | Action |
|---|---|
| Start server | Starts the server again. Shown only while it is down. |
| Stop server | Stops a background server |
| Restart server | Restarts the server |
| Reload config | Makes the server read its configuration file again |
| Copy server URL | Copies the server's address |
| Open logs | Shows recent log lines from the server and the app, also while the server is down |
| Quit | Quits the app. The server keeps running. |
Starting and stopping the app¶
| Command | Result |
|---|---|
gmlx launch menubar |
Starts the app in the background |
gmlx launch menubar --foreground |
Runs the app in this terminal |
gmlx launch menubar --stop |
Quits a background app |
gmlx serve --no-menubar |
Starts the server without the app |
gmlx service install |
Starts the app and the server at login |
Set server.menubar: false to never open the app
with the server. An app that a server opened quits when the last server it
manages stops. Only one app runs at a time, and it needs a desktop session,
so it does not start over SSH.
The app follows the main server. --url, --host or --port makes it
track one server, and --api-key supplies the key when the app cannot read
the server's configuration file. The flags are under
gmlx launch menubar.
Editing the configuration¶
Edit config opens the server's configuration file in a panel:
- Validate checks the draft the way
gmlx servewould, including model paths. - Save writes the file, as Changing the file describes.
- Save & Reload saves the draft and makes the server read it.
- Revert discards the draft.
- Open in Editor opens the file in your default text editor.
Voice sessions¶
When the server runs both speech services from
Speech, embeddings and rerank, the menu gains a Talk to
item, named after talk.model or the default model.
It starts a voice session inside the app. Talk in a terminal opens
gmlx talk in iTerm2 when it runs, otherwise in your default
terminal app.
During a session the menu bar shows a microphone while it listens, a thought bubble while the model thinks, and a speaker while it talks. The menu offers Stop speaking, Mute mic, a volume slider, Show transcript and End voice chat. With the assistant memory on, it also offers Show memory and Clear memory.
Settings come from the talk block of the configuration
file. The ptt and text modes need a keyboard, so the app runs them as
wake. To change the microphone level, use the macOS Sound settings.
An app started from a terminal asks for the microphone in the terminal's
name, and the login item from gmlx service install
asks in the name of gmlx. To change it later, open System Settings, Privacy
and Security, Microphone.
Tap-to-talk hotkey¶
The menu item Tap-to-talk with <key> + Space turns on a shortcut that
works in any app: hold the Globe key and press Space. The item shows the key
as a symbol. It needs the talk extra.
| Session state | A tap |
|---|---|
| No session | Starts one |
| Idle | Opens the microphone |
| Listening | Closes the microphone. In vad mode it does nothing. |
| Capturing an utterance | Ends the utterance |
| Transcribing, thinking or speaking | Interrupts the reply and opens the microphone |
A tap also unmutes a muted microphone. On a keyboard without a Globe key,
choose another key in gmlx init, or set it in the configuration file:
The hotkey needs the Accessibility permission, which the app asks for when you turn the hotkey on. It goes to the same app as the microphone, under Privacy and Security, Accessibility. If the item then says to quit and reopen the menu bar, do that.