The service
synoec-local-ai.exe (in the app’s runtime\local-ai folder) is a
notification-area app with Synoec’s icon, named Synoec Local AI, with no
window or taskbar button. It runs NInfer’s server for Bonsai 2, renamed
synoec-serve.exe after it is verified so Task Manager says Synoec, and outlives the desktop app: with Keep
running after Synoec closes on (the default), closing Synoec leaves the
service and its model available to the CLI and other apps at
http://127.0.0.1:18187/v1, with the bearer key in
%USERPROFILE%\.synoec\local-ai\api-key. The model leaves the graphics card
after five idle minutes and loads again on the next request; the weights are
read back from disk, not kept in host memory, so the wake takes from a few
seconds to a few minutes depending on what Windows still holds in its file
cache. A message sent while the model is asleep loads it first: Synoec asks
the server to resume, the chat shows Bonsai is waking up, and the turn’s
request goes out once the model is back, so a slow wake is not held to the
engine’s two-minute wait for a first byte. A model that goes to sleep in the
middle of a turn still wakes on its next request; if that takes longer than the
engine waits, the reply says the provider took the request but did not answer
in time and that a local model may still be loading, and sending again works.
Turning the switch off quits the service with the app. Start with
Synoec (on once set up) launches it with the app; off, a message to Bonsai
still starts it.
The tray menu shows the state and offers Open Synoec, Unload model now,
Start the server or Stop the server, and Quit Synoec Local AI. The service and the
server share one job object, so neither outlives the other; the service’s log
is service.log beside its configuration. Its control API on
127.0.0.1:18188 (GET /status, POST /start, /stop, /quit, same key) is
how Synoec drives it; Synoec launches it through Explorer so it inherits none
of the app’s handles.
There is no Start or Stop for the model on the page: a message to Bonsai loads it, the service’s idle timer or the tray menu unloads it, and it gives the GPU to Ollama when a chat uses an Ollama model: a local Ollama turn waits for Bonsai’s replies to finish, then suspends the model; Bonsai’s next request resumes it. If the provider step failed, the status line offers Add provider: it reuses the saved Connection name instead of creating duplicates, saves the new key to a Connection from an earlier version, and never overwrites a Connection with another endpoint. A failed load shows its message with Retry and loads again with the next message.