ZAI LLM reverse proxy and metrics dashboard
Find a file
jedarden 9f70534fe7 test(bf-4pql): fix AssertJSONBody negative test cases
Fix negative test cases in TestAssertJSONBody to match the pattern
used in other assertion helper tests. Instead of calling the helper
and checking return values (which triggers test failures), verify
behavior by inspection only.

All 10 assertion helpers now pass:
- AssertStatusCode
- AssertJSONBody
- AssertResponseField
- AssertEmptyBody
- AssertHeader
- AssertContentType
- ReadResponseBody
- ReadJSONResponse
- AssertDurationAtLeast
- AssertDurationInRange
2026-07-02 19:19:04 -04:00
dashboard docs(bf-5gbv): update default SCRAPE_TARGETS namespace from mcp to devpod 2026-07-02 18:36:39 -04:00
docs docs(bf-5gbv): update default SCRAPE_TARGETS namespace from mcp to devpod 2026-07-02 18:36:39 -04:00
notes docs(bf-4gif): verify MockUpstream server scenarios and methods 2026-07-02 18:50:04 -04:00
proxy test(bf-4pql): fix AssertJSONBody negative test cases 2026-07-02 19:19:04 -04:00
.gitignore feat: initial zai-proxy ecosystem repo 2026-05-16 15:53:52 -04:00
.needle-predispatch-sha test(ratelimiter): make AdaptiveRateLimiter testable via window duration injection 2026-07-02 10:55:06 -04:00
CONTRIBUTING.md docs: add comprehensive CONTRIBUTING.md 2026-06-21 10:02:17 -04:00
DEVELOPMENT.md docs: add comprehensive DEVELOPMENT.md developer guide 2026-06-21 10:05:18 -04:00
go.mod refactor(module): move go.mod to root and consolidate dependencies 2026-07-02 11:52:23 -04:00
go.sum refactor(module): move go.mod to root and consolidate dependencies 2026-07-02 11:52:23 -04:00
README.md docs(readme): fix intro - describe Z.AI as Claude API not Anthropic-compatible 2026-07-02 08:45:18 -04:00

zai-proxy

Production-grade LLM reverse proxy with token counting, adaptive rate limiting, and a real-time metrics dashboard.

What it is

zai-proxy sits in front of the Z.AI Claude API and adds the observability and reliability layer that bare API access lacks:

  • Token tracking — counts input and output tokens on every request, using API-reported usage when available and tiktoken estimation as a fallback
  • Adaptive rate limiting — tracks upstream 429 responses with an EWMA ceiling estimator and automatically holds just below the limit, probing periodically to detect ceiling increases
  • Prometheus metrics — request counts, latency histograms, token rates, error rates, and rate-limit wait times, all labelled by model and deployment variant
  • Blue/green and canary support — tag requests by DEPLOYMENT_VARIANT to compare proxy versions or model configurations side-by-side in the same metrics namespace
  • SSE streaming — passes through chunked streaming responses without buffering

Components

proxy/

Go HTTP reverse proxy. Listens on :8080, forwards to the upstream LLM API, and exports Prometheus metrics at /metrics.

See proxy/README.md for full configuration and deployment instructions.

dashboard/

Go backend + React frontend for live monitoring. Scrapes the proxy's Prometheus endpoint every 5 seconds, stores dual-resolution snapshots in SQLite, and streams updates to the browser via SSE.

proxy :8080/metrics  →  Collector  →  SQLite  →  SSE Hub  →  React UI
                                       metrics_5s (24h)
                                       metrics_1m (7d)

Features: request throughput, latency percentiles, token usage totals, error rates, and per-variant comparison panels.

Quick start

# 1. Configure the upstream API key and (optionally) override the target URL
export ZAI_API_KEY="your-api-key"
export ZAI_TARGET_URL="https://your-llm-provider.example.com/v1"  # optional

# 2. Start the proxy
cd proxy
go run .

# Proxy → :8080   Metrics → :8080/metrics

# 3. (Optional) start the dashboard in another terminal
cd dashboard
go run .
# Dashboard → :8080

Environment variables

Proxy

Variable Default Description
ZAI_API_KEY (required) API key forwarded to the upstream provider
ZAI_TARGET_URL https://api.z.ai/api/anthropic Override the upstream base URL
TOKEN_COUNTING_ENABLED true Enable/disable token counting
TOKENIZER_MODEL glm-4 Tokenizer model name for estimation
MAX_WORKERS 10 Max concurrent upstream requests
DEPLOYMENT_VARIANT production Label for blue/green or canary tracking
RATE_LIMIT_INITIAL 10.0 Initial rate (req/s)
RATE_LIMIT_MIN 1.0 Minimum rate floor
RATE_LIMIT_MAX 50.0 Maximum rate ceiling
RATE_LIMIT_CEILING_ALPHA 0.3 EWMA smoothing factor for ceiling estimation
RATE_LIMIT_HOLD_MARGIN 0.02 Hold margin below ceiling (as fraction, e.g., 0.02 = 2%)
RATE_LIMIT_PROBE_INTERVAL 10 Probe ceiling every N clean windows
MAX_RETRIES 3 Retry count on transient errors

Dashboard

See docs/notes/ for dashboard configuration and deployment.

Metrics

The proxy exposes standard Prometheus metrics at /metrics:

  • zai_proxy_requests_total — request counts by method, path, status, and variant
  • zai_proxy_request_duration_seconds — latency histogram
  • zai_proxy_request_size_bytes — request size histogram
  • zai_proxy_response_size_bytes — response size histogram
  • zai_proxy_concurrent_requests — concurrent request gauge
  • zai_proxy_upstream_errors_total — upstream error counts by type and variant
  • zai_proxy_tokens_total — token counters with labels: direction (input/output/cache_read/cache_write), model, variant, pricing_tier
  • zai_proxy_rate_limit_requests_per_second — current rate limit gauge
  • zai_proxy_rate_limit_wait_seconds — time spent waiting on the rate limiter
  • zai_proxy_rate_limit_adjustments_total — rate limit adjustments by direction and variant
  • zai_proxy_rate_limit_rejections_total — requests rejected due to rate limiting
  • zai_proxy_retry_attempts_total — retry attempts by reason and variant
  • zai_proxy_worker_utilization_ratio — worker utilization gauge
  • zai_proxy_max_workers — maximum concurrent workers gauge
  • zai_proxy_token_rate_seconds — token processing time histogram
  • zai_proxy_token_rate — token throughput histogram (tokens per second)
  • zai_proxy_token_count_duration_seconds — token counting operation duration
  • zai_proxy_build_info — build information (version, variant, commit, build time)

Docs

License

See LICENSE if present, or contact the maintainer.