No description
Find a file
xenarathon 29f8eef5e2 perf: pin aisle-sort to qwen3.5:9b + think:false (share Boxxo's warm model)
Avoids a second VRAM model (no swap thrash) by reusing the model Boxxo already
keeps loaded; think:false keeps the JSON clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 16:06:03 -04:00
.gitignore alexa-grocy-sync v5: fix Used-list consume (match existing stocked product, parse qty, never create) 2026-06-25 10:34:43 -04:00
LICENSE alexa-grocy-sync v5: fix Used-list consume (match existing stocked product, parse qty, never create) 2026-06-25 10:34:43 -04:00
README.md alexa-grocy-sync v5: fix Used-list consume (match existing stocked product, parse qty, never create) 2026-06-25 10:34:43 -04:00
sync.py perf: pin aisle-sort to qwen3.5:9b + think:false (share Boxxo's warm model) 2026-07-07 16:06:03 -04:00

alexa-grocy-sync

Two-way sync between an Alexa list and Grocy, plus a voice-driven "used" list that consumes items from your Grocy stock — all local, with a small LLM doing fuzzy product matching and unit/aisle guessing.

What it does

  • Shopping list (bidirectional): add/remove on the Alexa shopping list ⇄ Grocy shopping list. New free-text items are matched to an existing Grocy product (cache → exact → LLM) or a clean, unit-aware product is created in the AI-chosen aisle. Removals propagate both ways, decided by a three-way merge against the last-synced baseline (so a removal is never mistaken for an add).
  • "Used" list → consume: say/add items to a second Alexa list and the quantity is consumed from Grocy stock. The consume path matches existing stocked products only — it never creates one — parses the quantity ("3 eggs" → 3), and removes the list item only on a successful consume (failures stay visible).

Talks to Home Assistant (Alexa lists via the todo integration), Grocy's REST API, and a local Ollama model. Runs on an interval; DRY_RUN=1 logs without writing.

Built with

Built with the help of Claude (Claude Opus 4.8).

License

GPL-3.0. See LICENSE.