# changelog

## 0.4.0

- request fields the gateway doesn't convert are no longer dropped silently. for the same wire format (Anthropic request to an Anthropic model, OpenAI chat request to an OpenAI-compatible model) they are copied into the provider request, merged with what pi sends (`output_config.format` next to `effort`, per-tool `strict`, `top_k`, `stop_sequences`, `logit_bias`, `metadata` and so on). across formats, fields with an equivalent are translated (`response_format` ↔ `output_config.format` / `text.format`, `tool_choice`, `parallel_tool_calls`, `stop`, `user`) and any other field gets a 400 that names it, so clients such as Hindsight can fall back
- `tool_choice: "required"` and named tools are sent as such instead of becoming `auto`; a named tool follows Claude Code's tool name casing on Anthropic logins
- `temperature` reaches the provider even for models pi would leave it out for, so their error is shown instead of the setting vanishing
- `n` above 1, `logprobs`, `top_logprobs` and audio output get a 400; the gateway can only return one choice of text and tool calls
- the request log lists forwarded fields under `passthrough`
- a provider 4xx (other than 401/403) reaches the client with its status instead of a 502, streaming or not; the stream's headers wait until the provider accepted the request
- new `reasoningSummary` option (`auto`, `concise` or `detailed`, default `detailed`) for Responses-API models such as Codex; a request's `reasoning.summary` overrides it
- OpenAI-format usage adds `cost_from_provider: true` when `cost` is the provider's billed amount rather than pi's estimate (pi 1.5.0+)
- tests and type checks run against pi 1.5.0

## 0.3.1

- package metadata: `engines.node` is `>=22.19.0`, the same range pi supports
- the README's development steps no longer need `--legacy-peer-deps`
- CI and releases build on Node 24 (npm 11); a release skips publishing if that version is already on npm

no code changes since 0.3.0.

## 0.3.0

first release as `pi-proxy-gateway`. forked from pi-model-proxy 0.2.0.

- reasoning effort is passed to the model (OpenAI `reasoning_effort` and `reasoning.effort`, Anthropic `output_config.effort` and `thinking`)
- `max_completion_tokens`, `top_p`, `stop`, `seed`, penalties and `tool_choice` are passed through
- requests go through pi's model registry, so extension-registered providers and logins work
- usage counts cached tokens in `prompt_tokens` and reports `cached_tokens`, `reasoning_tokens` and cost
- `stream_options.include_usage: false` is respected
- provider errors appear in the stream instead of ending it silently
- non-streaming responses include `reasoning_content`
- `X-OpenWebUI-Chat-Id` or `X-Session-Id` is used as the session id for prompt caching
- loads automatically: added the `pi.extensions` manifest
- uses the `@earendil-works` pi packages
- default request timeout raised from 2 to 30 minutes
- new `host` option; binds to `127.0.0.1` by default (pi-model-proxy listened on every interface)
- when several pi instances run, the others wait and take over the port if the owner exits
- config moved to `~/.pi/proxy-gateway.json` (the old file is copied over) and the log to `~/.pi/proxy-gateway-log.jsonl`
