mirror of
https://github.com/lukaszraczylo/traefik-llmgateway.git
synced 2026-10-12 04:54:45 +00:00
I2 (controller ruling): docs/superpowers/specs/2026-08-19-traefik-llmgateway-design.md
described limits as "user overrides group" / "user limit if set, else
group limit, else unlimited" — stale relative to the actual, already-correct
implementation (buildLimitScopes/checkAndCount evaluate every configured
scope and return the first violation). Amended §2 and §7 to state both
scopes are enforced together and the tighter bound wins.
I4 (manifest hedge): .traefik.yml's groups.default was a bare "{}",
the shape empirically reproduced as a decode failure outside this
repo's own (necessarily simplified) yaegi-check harness. Changed to
"providers: []" — same zero semantics, no longer a bare empty object.
manifest_test.go's JSON mirror and drift-check token updated to match;
make yaegi-check still passes (its YAML-subset parser already handles
an inline "[]" under a nested map key).
M9 (pricing provenance): pricing.go's built-in table comment replaced
"verify before release" with a real source note (each provider's own
published list prices, recorded 2026-08, approximate). README's limits
section gained the matching caveat and points to the "pricing" config
override for billing-grade accuracy.
Doc nits: README's Kubernetes section now says the example manifest
applies cleanly once Traefik's CRDs (Middleware, IngressRoute) are
installed, rather than claiming kubectl apply -f works unconditionally.
README's Security notes section no longer claims "no auth-event logging
at all" (see the paired fix: commit) — it now describes what is logged
and that key material never appears.
This commit and its sibling fix: commit are the final wave closing out
the whole-branch review findings for docs/superpowers/sdd/2026-08-20-
traefik-llmgateway.
Gates: go test ./... -count=1 (-race) green, gofmt -l . empty, go vet
clean, make yaegi-check OK, golangci-lint 0 issues.
31 lines
1.1 KiB
YAML
31 lines
1.1 KiB
YAML
displayName: LLM Gateway
|
|
type: middleware
|
|
import: github.com/lukaszraczylo/traefik-llmgateway
|
|
# basePkg: Traefik's Yaegi middleware loader (pkg/plugins/middlewareyaegi.go,
|
|
# newYaegiMiddlewareBuilder) binds the interpreted package under
|
|
# strings.ReplaceAll(path.Base(import), "-", "_") — "traefik_llmgateway" —
|
|
# unless this field overrides it. The package itself declares
|
|
# `package traefikllmgateway` (no underscore), so without this override a
|
|
# real Traefik instance fails plugin load with
|
|
# `failed to eval New: ...: undefined: traefik_llmgateway`, discovered
|
|
# running the plugin in real Traefik v3.5 for the first time (Task 15's
|
|
# integration suite). Required for both Traefik itself and the Plugin
|
|
# Catalog analyzer (piceus), which uses this identical mechanism.
|
|
basePkg: traefikllmgateway
|
|
summary: Multi-provider LLM gateway with groups, per-user keys, token/cost limits, MCP/A2A proxy.
|
|
testData:
|
|
providers:
|
|
openai:
|
|
type: openai
|
|
apiKey: test-key
|
|
models:
|
|
- gpt-test
|
|
groups:
|
|
default:
|
|
providers: []
|
|
users:
|
|
inline:
|
|
- name: tester
|
|
group: default
|
|
apiKey: test-user-key
|