Skip to content

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.