Files
traefik-llmgateway/.traefik.yml
T
lukaszraczylo 7939c3e74b test: integration suite with real Traefik, redis-shared limits, streaming assertions
Adds integration/ (separate module): docker compose stack with real Traefik
v3.5 + localPlugins, mock openai/anthropic/gemini/tool providers, shared
Redis, and a raw-TCP streaming timing probe. 6/7 tests pass; streaming
incrementality fails on a confirmed external yaegi/Traefik bug (see
task-15-report.md), not a plugin defect.

Fixes 4 real Yaegi-interpretation bugs surfaced by running the plugin under
real Traefik for the first time (none caught by go test or yaegi-check,
which never exercises chat/embeddings/streaming/Redis):

- .traefik.yml: add basePkg (Traefik derives the yaegi binding identifier
  from the module path, not the package's own declared name; without this
  override the plugin never loads at all).
- registry.go: resolveAgainst's multi-value return panicked yaegi on an
  inline string concatenation; assign to a local first.
- routes_unified.go: errors.As panicked yaegi on interpreted pointer error
  types; use plain type assertions (both types are always returned bare,
  never wrapped).
- sse.go: readSSE's dispatch closure hit the same multi-value-assignment
  panic as registry.go; split into separate statements.
- resp.go: respErr as a defined string type was indistinguishable from a
  plain string in a yaegi type assertion, misreading every successful
  Redis SELECT reply as failed and silently disabling rate limiting;
  changed to a struct.
2026-08-20 13:28:20 +01:00

30 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: {}
users:
inline:
- name: tester
group: default
apiKey: test-user-key