diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-29 21:11:06 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-29 21:11:06 -0500 |
| commit | 39970b462c8198220f33ef7323725982723d2233 (patch) | |
| tree | 391c10e2be3207dbea2c1f4e01ca8e2944e18df8 /assets | |
| parent | 06b2c0716b51eb73298f569752dd1d81947d9961 (diff) | |
| download | archsetup-39970b462c8198220f33ef7323725982723d2233.tar.gz archsetup-39970b462c8198220f33ef7323725982723d2233.zip | |
chore(todo): file local-llm and uv install tasks; process inbox
Filed two new [#B] parent tasks. The local offline LLM runtime task carries design-decision and implementation children for resolving the open design questions alongside implementation work. The uv install task matches the existing eask/signal-cli tooling-codification shape — load-bearing for other projects, manually installed today, codify so fresh installs pick it up. Four cross-project handoffs moved to outbox.
Diffstat (limited to 'assets')
4 files changed, 180 insertions, 0 deletions
diff --git a/assets/outbox/2026-05-28-from-rulesets-local-llm-install.org b/assets/outbox/2026-05-28-from-rulesets-local-llm-install.org new file mode 100644 index 0000000..c3cbdaa --- /dev/null +++ b/assets/outbox/2026-05-28-from-rulesets-local-llm-install.org @@ -0,0 +1,88 @@ +#+TITLE: Install local offline LLM runtime and model cache +#+DATE: 2026-05-28 +#+SOURCE_PROJECT: rulesets +#+REQUEST_TYPE: install-feature +#+STARTUP: showall + +* Request + +Please add local offline LLM support to =archsetup='s normal install process so +machines can run a local coding agent when there is no network. + +This came from the =rulesets= generic-agent-runtime design pass. =rulesets= +should become runtime-neutral, but it needs =archsetup= to provision the local +model runtime and prefetch model files while network is available. + +* Hardware-specific recommendations + +** High-end Strix Halo machine + +Detected with =inxi=: + +- AMD Ryzen AI Max+ 395 +- 128 GiB RAM +- Radeon 8060S / Strix Halo unified memory + +Install: + +- Default offline coding model: + =Qwen3-Coder-30B-A3B-Instruct-GGUF=, prefer =Q6_K= on this machine. +- Compatibility quant: + =Qwen3-Coder-30B-A3B-Instruct-GGUF Q4_K_M=. +- Larger general/long-context fallback: + =Qwen3-Next-80B-A3B-Instruct-GGUF Q4_K_M=. + +** velox + +Detected with =ssh velox inxi -C -G -m -S --filter=: + +- Intel Core i7-1370P +- 64 GiB RAM +- Intel Iris Xe integrated graphics + +Install: + +- Strongest practical offline coding default: + =Qwen3-Coder-30B-A3B-Instruct-GGUF Q4_K_M=. +- Add an 8B fallback model for quick edits and low-latency triage. + +Expect =velox= to be CPU/low-end-iGPU bound. The 30B model fits, but latency +will be the limiting factor. + +* Runtime stack + +Recommended packages/components: + +- =llama.cpp= with CPU and Vulkan support where practical. +- Optional =ollama= as a simple model manager/API for workflows that prefer it. +- A shared local model cache, e.g. =~/.local/share/llm/models= or + =/srv/models/llm=. +- OpenAI-compatible local endpoints: + - coding model on =127.0.0.1:8081= + - larger/general model on =127.0.0.1:8082= when installed + - leave =127.0.0.1:11434= for =ollama= if used + +* Install behavior + +- Install runtime packages during normal setup. +- Prefetch model files when network is available. +- Make model download idempotent: skip if exact file already exists. +- Do not make the install fail hard if model download is unavailable; surface a + clear follow-up saying local offline LLM support is incomplete. +- Add a smoke test command that starts the local endpoint and asks a short prompt. + +* Why this belongs in archsetup + +=rulesets= can provide the runtime manifests, launcher behavior, and project +instructions, but it should not own machine provisioning. =archsetup= already +owns package installation and per-host setup, so it is the right place to install +=llama.cpp=/=ollama= and maintain the machine-local model inventory. + +* Sources checked + +- Qwen3-Coder 30B GGUF quant listings show Q4_K_M around 18.6 GB and Q6_K around + 25.1 GB. +- Qwen3-Next 80B GGUF model card shows Q4_K_M around 48.4 GB and native 262K + context. +- =llama.cpp= supports CPU and GPU backends including Vulkan/HIP/ROCm; keep the + backend configurable per host. diff --git a/assets/outbox/2026-05-29-1111-from-health-todo-b-install-python-genanki-system.org b/assets/outbox/2026-05-29-1111-from-health-todo-b-install-python-genanki-system.org new file mode 100644 index 0000000..3cf53ec --- /dev/null +++ b/assets/outbox/2026-05-29-1111-from-health-todo-b-install-python-genanki-system.org @@ -0,0 +1,29 @@ +#+TITLE: * TODO [#B] Install ~python-genanki~ system-wide :install:py +#+SOURCE: from health +#+DATE: 2026-05-29 11:11:48 -0500 + +* TODO [#B] Install ~python-genanki~ system-wide :install:python: + +Add ~genanki~ to the Python package set so projects can generate Anki ~.apkg~ decks from org-drill files without per-project venvs. + +** Why +A converter script in the health project (~health-drill-to-anki.py~) emits an Anki package from an org-drill source file — same workflow as ~/sync/org/drill/~ but pushed into Anki for mobile review. The script is ~100 lines and runs anywhere Python has ~genanki~ available. The pattern is likely to spread: deepsat already has a drill file, more will follow. + +Right now Arch's PEP 668 enforcement blocks ~pip install --user genanki~, so the script needs a throwaway venv to run. Solving once at the system level removes that friction across every project. + +** Install options (pick one) +- *Arch official repo or AUR.* ~pacman -S python-genanki~ if it's in extra/community, or ~yay -S python-genanki~ from AUR. Cleanest. Auto-updates with the rest of the system. +- *pipx.* ~pipx install genanki~ — but genanki is a library, not a CLI app, so pipx is a stretch. Skip. +- *System-wide pip with ~--break-system-packages~.* Works but circumvents PEP 668. Last resort. + +Recommendation: try pacman/AUR first, fall back to a managed venv at a known path (e.g. ~/opt/python-tools/~) that scripts can shebang into. + +** Verification +After install: +#+begin_src bash +python3 -c "import genanki; print(genanki.__version__)" +#+end_src +Should print a version like ~0.13.1~ without traceback. + +** Cross-reference +- A companion message went to rulesets' inbox proposing the export script as a template script under ~claude-templates/.ai/scripts/~. That decision depends on this install landing first — without ~genanki~ available system-wide, the template script can't run out of the box. diff --git a/assets/outbox/2026-05-29-1114-from-health-cancelled-install-python-genanki-system.org b/assets/outbox/2026-05-29-1114-from-health-cancelled-install-python-genanki-system.org new file mode 100644 index 0000000..877eb18 --- /dev/null +++ b/assets/outbox/2026-05-29-1114-from-health-cancelled-install-python-genanki-system.org @@ -0,0 +1,23 @@ +#+TITLE: * CANCELLED Install ~python-genanki~ system-wide — supersede +#+SOURCE: from health +#+DATE: 2026-05-29 11:14:51 -0500 + +* CANCELLED Install ~python-genanki~ system-wide — superseded :install:python: + +The prior message in this inbox (also dated 2026-05-29) asked for a system-wide ~python-genanki~ install to remove pip/venv friction. That request is no longer needed. + +** Why +The converter script in the health project moved to ~uv~ + PEP 723 inline script metadata. Shebang is ~#!/usr/bin/env -S uv run --script~ and the deps are declared in the script header. ~uv~ handles resolve / install / cache transparently on first run (~5ms cached). No system package needed for ~genanki~ specifically. + +** Implication for archsetup +- *No genanki install required.* The earlier TODO can be deleted or marked CANCELLED. +- *~uv~ is now a load-bearing tool for this pattern.* Make sure ~uv~ stays in the Arch base setup. Currently installed via ~/usr/bin/uv~ (version 0.11.15). If it's already part of the standard package set, nothing to do. If it's only installed ad-hoc on this machine, worth adding to the install playbook. + +** Verification +#+begin_src bash +which uv && uv --version +#+end_src +Should print a path and version like ~uv 0.11.15~ without error. + +** Cross-reference +A follow-up went to rulesets' inbox with the updated implementation pattern and a renewed recommendation to formalize the converter as a template script. diff --git a/assets/outbox/2026-05-29-1127-from-health-todo-a-add-uv-to-the-install-playbook.org b/assets/outbox/2026-05-29-1127-from-health-todo-a-add-uv-to-the-install-playbook.org new file mode 100644 index 0000000..9828f0b --- /dev/null +++ b/assets/outbox/2026-05-29-1127-from-health-todo-a-add-uv-to-the-install-playbook.org @@ -0,0 +1,40 @@ +#+TITLE: * TODO [#A] Add ~uv~ to the install playbook — load-bearing +#+SOURCE: from health +#+DATE: 2026-05-29 11:27:58 -0500 + +* TODO [#A] Add ~uv~ to the install playbook — load-bearing for project tooling :install:python: + +Add ~uv~ (Astral's Python package + script runner) to the archsetup install steps so every future machine setup picks it up automatically. Currently installed on this machine at ~/usr/bin/uv~ (~0.11.15~), but it's not yet part of the standard set — if a fresh install skipped it, project scripts that depend on it would fail silently or break at first run. + +** Why this matters now +Several projects are moving Python tooling onto ~uv~ with PEP 723 inline script metadata. The pattern is: a script declares its deps in a ~# /// script~ header and shebangs ~#!/usr/bin/env -S uv run --script~, so it self-runs without venvs or pip. First example landed in the health project (~health-drill-to-anki.py~), and the rulesets follow-up recommends promoting that pattern as a template script under ~claude-templates/.ai/scripts/~ — meaning ~uv~ would become a dependency for any project pulling templates. + +Without ~uv~ in the install playbook, fresh machines would hit ~env: uv: No such file or directory~ on any script using this pattern. The PEP 668 detour (system pip blocked, manual venvs everywhere) was exactly what ~uv~ eliminates. + +** Install +Arch official: ~pacman -S uv~. If extra/community doesn't carry it, AUR has it as ~uv-bin~ or build-from-source. Astral's official installer is also an option but adds a non-pacman path to maintain. + +Pacman is cleanest — auto-updates with the rest of the system, lives under ~/usr/bin/uv~. + +** Verification (post-install) +#+begin_src bash +which uv && uv --version +#+end_src +Should print ~/usr/bin/uv~ and a version string. To verify the PEP 723 pattern works end-to-end: +#+begin_src bash +cat > /tmp/uv-test.py <<'EOF' +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# dependencies = ["requests"] +# /// +import requests +print("ok") +EOF +chmod +x /tmp/uv-test.py && /tmp/uv-test.py +#+end_src +First run resolves and caches ~requests~; subsequent runs are instant. + +** Related +- Earlier message in this inbox CANCELLED the ~python-genanki~ install request — that one is no longer needed because ~uv~ + PEP 723 covers it. +- The rulesets inbox carries the broader template-script proposal. |
