QUICKSTART

A working gateway in under five minutes

One container, one provider, one request. No account, no signup, no phone-home. If you have Docker, you can be through this page before your coffee lands.

Start the gateway

Embedded mode needs nothing external: state is held in memory, so nothing survives a restart, and there is no Postgres or Redis to stand up yet. The console comes up on the same port, served by the same Rust binary.

$ docker run -p 4000:4000 <registry>/waeg-gateway:<version>

Not a working pull: the images are not public yet. Design partners receive the registry details privately.

Registry and version are placeholders — design partners receive them privately. Console at http://localhost:4000/ui/: sign in with the seeded admin account and change its password.

Add a provider

Give it one upstream and one alias, then restart with the file mounted as the comment shows. Aliases are what your application code references, so you can repoint them later without touching the application.

# waeg.yaml
providers:
  openai:
    provider: openai
    api_key_env: OPENAI_API_KEY      # or api_key_ref: a vault reference

models:
  - name: chat                       # what your code sends as "model"
    deployments:
      - provider: openai
        model_id: gpt-4o

# Restart with it mounted:
#   docker run -p 4000:4000 -e OPENAI_API_KEY \
#     -v "$PWD/waeg.yaml:/etc/waeg/waeg.yaml" \
#     <registry>/waeg-gateway:<version> serve --config /etc/waeg/waeg.yaml

Point your SDK at it

Wäg serves the OpenAI-compatible surface, so the only thing that changes is the base URL. Your SDK, request shapes, streaming behaviour and tool calling are unchanged.

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:4000/v1",   # the only change
    api_key="<your-waeg-virtual-key>",     # created in the console
)

resp = client.chat.completions.create(
    model="chat",
    messages=[{"role": "user", "content": "Hello"}],
)

Check the response headers. This is the first visible sign that something decided something, rather than merely forwarding it:

HeaderWhat it tells you
x-waeg-routed-modelWhich deployment actually served the request.
x-waeg-route-reasonWhy the router chose it — for intelligent routing and session affinity.
x-waeg-cacheOn a cache hit, which of the four tiers answered.

See it in the console

Open the console and the request is already there: traffic, latency, tokens, the routing decision and any policy verdicts. Cost appears once the bundled price pack is loaded under Usage & cost → Pricing. Nothing else was configured — it is what passing through the request path produces.

NEXT

Where to go from here

Private preview

Wäg is in private preview, so the image address above is a placeholder. Design partners receive the built, signed images and the registry details privately, with hands-on onboarding.

Apply to the design partner program