uv.lock was originally resolved with the workstation's globally-configured
dexterenergy private artifact registry as the default index, baking that
URL into every `source = { registry = ... }` entry. Inside Docker that
401s.
- pyproject.toml: declare https://pypi.org/simple as the project's
default uv index (overrideable, but pins intent)
- uv.lock: regenerated with UV_DEFAULT_INDEX=https://pypi.org/simple and
no UV_INDEX so every source now points at public PyPI
Reproduce: `UV_DEFAULT_INDEX=https://pypi.org/simple UV_INDEX= uv lock`
finrod
Tiny web translator backed by Ollama on radagast. Named for Finrod Felagund, Noldor loremaster of the tongues of Men.
Run
uv run uvicorn app:app --host 127.0.0.1 --port 8000 --reload
Then open http://127.0.0.1:8000.
Config
| Env var | Default | Notes |
|---|---|---|
OLLAMA_URL |
http://radagast.jpnadas.xyz:11434 |
Ollama base URL |
MODEL_FILTER |
gemma,aya |
Comma-separated substrings; model matches if it contains any. Empty = show all |
Models
For Pt/Nl/En translation, three worth A/B-ing:
ssh radagast 'ollama pull gemma2:9b' # already there — big-and-broad baseline
ssh radagast 'ollama pull gemma3:4b' # newer multilingual training, ~2-3× faster on Ivy Bridge
ssh radagast 'ollama pull aya-expanse:8b' # Cohere multilingual model, strong on Dutch
All three fit in radagast's 10 GB at Q4. Switching models in the dropdown forces Ollama to load the new weights — expect a 5-15 s pause on the first call after a switch while it reads from disk.
Build / push image
Built locally and pushed to Scaleway — no Gitea runners on the homelab yet, so there's no CI workflow.
One-time setup (host needs buildx + QEMU for cross-arch):
docker buildx create --name multi --use
docker run --privileged --rm tonistiigi/binfmt --install all
docker login rg.nl-ams.scw.cloud -u nologin -p <SCW_SECRET_KEY>
Then on every change:
./build.sh
That builds linux/amd64,linux/arm64 and pushes rg.nl-ams.scw.cloud/valinor/finrod:{latest, <git-short-sha>}. Take note of the short SHA it prints — that's what you pin in valinor.
Deploy
Cluster manifests live in valinor/apps/finrod/ (bjw-s app-template, internal-only ingress at finrod.jpnadas.xyz). To roll out a new build:
./build.shhere — get the SHA- Bump
tag:invalinor/apps/finrod/values.yamlto that SHA on a branch - Merge → ArgoCD syncs the new image
Using :latest works for the first deploy (the pull policy is Always) but pinning to a SHA on each rollout gives you trivial rollback via git revert.