Two features here are LLM-generated: the trend summary and the swim/heater advisor. Both run on a local model on the same Mac that fetches the pool data โ here's exactly what each one sees, what model answers it, and what happens if the model isn't available. The chlorine outlook is documented here too, precisely because it isn't AI and shouldn't be mistaken for it.
Both AI features call Ollama, a
local LLM runtime, at localhost:11434 on the same Mac that runs the twice-daily fetch.
The prompts (pool readings, weather forecast, today's date) never leave that machine, and neither
model has internet access or tool use โ they just read the numbers they're given and write text
back. The only things that do leave the machine each run are the calls to WaterGuru, the National
Weather Service, and โ if you've enabled push alerts โ ntfy.sh.
The 2-3 sentence readout at the top of the dashboard on whether chlorine, pH, and water temp are trending up, down, or holding steady.
The great/good/marginal/poor verdict on each of the next 5 days, plus the heater lead-time advice paragraph.
great/good/marginal/poor) and a one-phrase
note per day, plus the heater-advice paragraph. The response is validated (right dates, right
verdict values) before the dashboard trusts it.Three local models were compared for the swim advisor specifically, since it has to weigh several factors into a judgment call and return valid JSON โ that's a meaningfully harder ask than the trend summary.
| Model | Result |
|---|---|
| llama3.2:3b | Fast, valid JSON, but inconsistent or illogical verdicts โ e.g. once rated a sunny 78ยฐF day worse than a stormy one. |
| gpt-oss:20b | Ignored the JSON output constraint entirely and returned rambling chain-of-thought prose instead of the requested structure. |
| qwen2.5:32b | Reliable JSON every time, and verdicts that were internally consistent (worse weather reliably scored worse) โ this is what's actually running. Takes roughly 30-45 seconds per run, which is a non-issue for something that runs twice a day in the background. |
The trend summary's ask is simpler (summarize a table of numbers in a few sentences), so the
smaller, much faster llama3.2:3b handles it fine.
The "estimated now" number and the projection chart. This one is worth being explicit about, because it sits next to two features that are LLM-generated: it's ordinary arithmetic, fully deterministic, and would produce the same answer with Ollama uninstalled.
"In range" means what the device means. WaterGuru ships the band it actually judges chlorine against โ green from 1.6 to 5.4 ppm around a 3.0 target โ so that's what the card uses, rather than a tolerance invented at this end.
What it deliberately doesn't model: UV index, bather load, or anything else this sensor doesn't report. Both the heat and stabilizer adjustments are coarse approximations. It's a trend projection to tell you whether to reach for the chlorine this week โ not a chemistry calculator.
These are convenience reads, not safety systems. The chemistry alerts (RED/YELLOW/GREEN, cassette replacement) are WaterGuru's own thresholds, not AI-generated โ the LLMs only touch the trend summary and the swim/heater advice. The chlorine outlook and the sensor-health checks are plain arithmetic. Treat all of them as a second opinion worth a glance, not a replacement for checking the water yourself.