mirror of
https://github.com/lukaszraczylo/traefik-llmgateway.git
synced 2026-10-13 04:58:50 +00:00
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.
16 lines
450 B
Docker
16 lines
450 B
Docker
# Build context is integration/ (see docker-compose.yml's build.context),
|
|
# so this Dockerfile can reach both go.mod and the mock/ package.
|
|
FROM golang:1.22-alpine AS build
|
|
WORKDIR /src
|
|
ENV CGO_ENABLED=0
|
|
COPY go.mod ./
|
|
COPY mock ./mock
|
|
RUN go build -o /out/mock ./mock
|
|
|
|
FROM alpine:3.20
|
|
RUN apk add --no-cache wget ca-certificates
|
|
COPY --from=build /out/mock /usr/local/bin/mock
|
|
EXPOSE 8080
|
|
ENTRYPOINT ["/usr/local/bin/mock"]
|
|
CMD ["-mode", "openai"]
|