# The decision-model route — GreenPT "Metis" (`/v1/systemone`) The gateway exposes a **decision model** — GreenPT's **Metis** (System One API) — as a **pass-through route**, not a chat model. ## What it is, and why it is a route and not a model Metis is a **decision** endpoint, not a chat completion: it takes a `state` plus up to 32 typed questions and returns **probabilities / choices / scores**. It generates no text (`output_tokens` is always 0), so **it cannot be a `model_list` entry** — LiteLLM's chat pipeline has nothing to parse. It is therefore exposed as a pass-through: ``` path: /v1/systemone target: https://api.greenpt.ai/v1/systemone auth: true # members call it with their normal co-op API key ``` - **It is API-only and deliberately NOT a chat-picker model.** It never appears in the chat model list. Do not add it there. - **Members authenticate with their own co-op key**, never the provider key — the route's `Authorization` header injects the provider key server-side. - Hosted by GreenPT (policy-based privacy, EU, 100% renewable), same `GREENPT_API_KEY` the green chat models use. ## Pricing and the metering fix - **$0.12 per 1M input tokens; output is free.** Metering is **exact, from the token count GreenPT reports back**. Because Metis is not a `model_list` entry, it is priced through the `coop_passthrough_cost_per_token` map, keyed by the route path (`/v1/systemone: 0.00000012`). `patch_passthrough_token_cost.py` (built into the image) reads `usage.input_tokens` from the Metis response body at logging time and writes the exact figure to member spend. **Why this exists — record it, it will recur:** **generic pass-through routes originally logged nothing.** A route that is not a `model_list` entry gets no automatic pricing, so its calls were metered as $0 — a paid feature silently free. The pass-through accounting had to be fixed so spend lands against the **calling member's key**. If another pass-through route is ever added, it needs the same treatment or it bills nothing. `cost_per_request: 0.0001` on the route is now only a **fallback** — it applies if a response arrives without a usable token count, so a call is never silently free. Keep the two in sync. ## Access control gotcha (community edition) The route is opened to any authenticated member key via `coop_passthrough_open_to_keys` (consumed at build time by `patch_passthrough_key_access.py`). **LiteLLM's own gate for `auth=true` pass-through routes (`allowed_passthrough_routes`) is an Enterprise-only field**, so on this community-edition proxy it can never be granted to member keys. The only alternative, `auth: false`, would expose the route publicly and forward the co-op's GreenPT key to anonymous callers. **Authentication is unchanged** — the endpoint still requires a valid key.