Skip to content
View in the app

A better way to browse. Learn more.

Mopar1973Man.Com

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Custom built AI Server Setup

  • Owner

Building Raymond

Raymond is our local AI assistant — but it doesn't run on the server itself. It's Ollama split across two GPU gaming rigs, fronted by Open WebUI and a wake-on-demand dispatcher on the headless server that ties it all together. Here's how it's built and how it works.

The hardware

All three machines share the same board and CPU (ASUS ROG STRIX X870-A GAMING WIFI, Ryzen 5 7600X, 32GB DDR5, Intel I226-V networking) — the difference is what each one is for.

Machine

Role

GPU

Runs

server

Coordinator

None — onboard AMD Radeon only

Dispatcher + Open WebUI (Docker)

michael-desktop

Inference node

RTX 5060 Ti, 16GB VRAM

Ollama (set up first)

suzanna-desktop

Inference node

RTX 5060 Ti, 16GB VRAM

Ollama (identical build to michael)

Why the server doesn't do the thinking

The server has no dedicated GPU, so it was never a candidate for running inference itself. Both desktops have RTX 5060 Ti cards sitting idle most of the day, so the split is deliberate: inference happens on the workstations, and the server only coordinates — waking a workstation, routing the request to it, and serving the chat interface.

Sharding one model across both GPUs as a single cluster was considered and passed over in favor of two fully independent Ollama instances, load-balanced by the dispatcher. Workstation use has no fixed schedule, so a wake-on-demand proxy fits better than any fixed sleep/wake timer.

Architecture

[ Browser ]  --ask Raymond-->  [ Open WebUI  :3000 ]
                                        |
                                        v
                               [ Dispatcher  :11500 ]
                                 /michael      /suzanna
                                    |               |
                     (WoL if asleep)|               |(WoL if asleep)
                                    v               v
                      [ michael-desktop ]   [ suzanna-desktop ]
                        Ollama  :11434         Ollama  :11434
                       RTX 5060 Ti 16GB       RTX 5060 Ti 16GB

A request comes into Open WebUI, which is just the chat front end. It hands off to the dispatcher, which checks whether the target workstation is awake, sends a Wake-on-LAN magic packet if it isn't, and proxies the request through once it's up.

Ports at a glance

Port

Service

Host

Notes

3000

Open WebUI

server

Chat UI, Docker container

11500

Dispatcher

server

/michael and /suzanna paths — wakes + proxies

11434

Ollama

michael-desktop

Bound to 0.0.0.0 via systemd override

11434

Ollama

suzanna-desktop

Same fix applied

Build log

  1. Ollama installed on michael-desktop — first workstation stood up, using its RTX 5060 Ti. Tested with qwen2.5:14b before anything else was wired up.

  2. Open WebUI deployed on the server — Docker container brought up at :3000, initially pointed straight at michael-desktop's Ollama instance.

  3. Fixed a network-binding snag — Open WebUI couldn't reach Ollama. Cause was Ollama listening on localhost only; fixed with OLLAMA_HOST=0.0.0.0 via a systemd override. (ufw was checked and confirmed inactive — not the culprit.)

  4. Grew the model lineup — michael-desktop's Ollama now also carries qwen3.5:9bqwen3.5:4b, and qwen3.5:2b alongside the original 14b.

  5. Confirmed suzanna-desktop as a matching second node — same RTX 5060 Ti, 16GB VRAM, built identically to michael-desktop.

  6. Built the dispatcher and load-balanced routing — the server got a dispatcher on :11500 exposing /michael and /suzanna, each waking that workstation over Wake-on-LAN if asleep and proxying to its Ollama instance.

  7. Named it — Raymond — voice replies go out through Open WebUI's built-in text-to-speech, using the browser's Web Speech API.

Not built yet

Obsidian integration is still just an idea: either feed notes into Open WebUI's Knowledge/RAG feature, or use an Obsidian plugin that queries Ollama directly. No decision made yet on which way to go.

Software used

  • Ollama — local model runtime, loads and serves the models on each workstation's GPU. (source)

  • Open WebUI — self-hosted chat front end for Raymond, running in Docker on the server; also drives the TTS voice. (docs / source)

  • Docker — container runtime hosting Open WebUI.

  • Wake-on-LAN — protocol + wakeonlan tool the dispatcher uses to wake a sleeping workstation. (Debian Wiki)

  • systemd — used for the OLLAMA_HOST override that got Ollama listening on the network.

  • UFW — firewall checked (and ruled out) while debugging the WebUI Ollama connection.

  • Web Speech API — browser TTS engine behind Raymond's voice output.


Build notes — will update this thread as the setup grows.

Example run of Raymond while discussing my cancer story and creation of Titanium

image.png

Edited by Mopar1973Man

  • Views 21
  • Created
  • Last Reply

Posted Images

Featured Replies

No posts to show

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.