Files
homelab-frontend/tasks/2.1-model-registry.md
T
Story Crater BotandClaude Opus 5 058f11cf2b
CI / Test (push) Canceled after 0s
CI / Vet (push) Canceled after 0s
CI / Build (push) Canceled after 0s
CI / Security (govulncheck) (push) Canceled after 0s
chore: initial commit of Go API gateway
Baseline for the Kong replacement on api.riotpiao.com. Brings the working
tree under version control for the first time: gateway source, the task
board that drives the agent runs, test fixtures, and K8s manifests.

Anchor the gateway ignore rule to the repo root. Unanchored, "gateway"
also matched the cmd/gateway/ source directory, so the program entrypoint
was excluded from every commit.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-19 20:54:34 -07:00

1.8 KiB

2.1 — Model registry (GREEN)

Phase: 2 — LLM surface Stage: GREEN Depends on: 0.2, 1.1

  • A model name -> upstream map is loaded from configuration at startup, never compiled in
  • Each entry carries at minimum the model name clients send, the upstream address, and the upstream path to use
  • Two model names may point at the same upstream address, and both resolve independently
  • A duplicate model name, an empty model name, or an entry with no upstream address fails startup loudly with the offending entry named
  • The registry is queryable by exact model name; lookup is case-sensitive and does no fuzzy matching or defaulting
  • The set of known model names is enumerable, because /v1/models and unknown-model errors are both derived from it

The five entries verified live on 2026-08-19. Ports are 80, not 8080.

model name clients send upstream Service engine
reasoning reasoning-predictor.llm-serving:80 vLLM, DeepSeek-R1-Distill-Qwen-32B
ornith:35b ornith-predictor.llm-serving:80 Ollama
qwen2.5:3b-instruct ornith-predictor.llm-serving:80 Ollama, same pods
nomic-ai/nomic-embed-text-v2-moe embeddings-predictor.llm-serving:80 TEI
BAAI/bge-reranker-base reranker-predictor.llm-serving:80 TEI

ornith:35b and qwen2.5:3b-instruct share pods and both stay resident, so a registry that maps them to one address is correct, not a shortcut.

Verify

# with the five entries configured against local stubs
curl -s -o /dev/null -w '%{http_code}\n' localhost:8080/readyz   # expected: 200

# duplicate model name in config must refuse to start
./gateway --config testdata/duplicate-model.yaml; echo "exit=$?"  # expected: non-zero exit, stderr names the duplicated model