llmshim 0.2.1

Blazing fast LLM API translation layer in pure Rust
Documentation
# HTTP proxy quickstart

The proxy puts a network boundary around the Rust engine. Use it from any
language that can send JSON over HTTP.

> **Availability:** Rust: engine inside the server · CLI: starts the server · HTTP: compact llmshim API · Clients: connect to this API

The proxy has its own compact contract. It is not an OpenAI-compatible proxy.

## 1. Install a proxy-enabled binary

The proxy is behind the crate's `proxy` feature when building from source:

```bash
cargo install llmshim --features proxy
```

The Homebrew binary also includes the proxy:

```bash
brew install sanjay920/tap/llmshim
```

Configure at least one provider before starting it:

```bash
llmshim configure
```

## 2. Start the server

```bash
llmshim proxy
```

The default bind address is `0.0.0.0:3000`. Override it for the process with
`LLMSHIM_HOST` and `LLMSHIM_PORT`:

```bash
LLMSHIM_HOST=127.0.0.1 LLMSHIM_PORT=8080 llmshim proxy
```

The examples below assume the default port and use `localhost` to reach it.

## 3. Send a chat request

```bash
curl http://localhost:3000/v1/chat \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "openai/gpt-5.6-sol",
    "messages": [
      {"role": "user", "content": "What is Rust in one sentence?"}
    ],
    "config": {
      "max_tokens": 128
    },
    "provider_config": {
      "x-anthropic": {
        "disable_1m_context": true
      }
    }
  }'
```

`config` contains portable controls. `provider_config` is optional and merges
provider-specific fields into the core request; omit it when you do not need a
native control.

The non-streaming response uses llmshim's compact `ChatResponse`:

```json
{
  "id": "msg_...",
  "model": "gpt-5.6-sol",
  "provider": "openai",
  "message": {
    "role": "assistant",
    "content": "Rust is a systems programming language..."
  },
  "usage": {
    "input_tokens": 15,
    "output_tokens": 12,
    "total_tokens": 27
  },
  "latency_ms": 640
}
```

IDs, text, token counts, and timing vary by request. `reasoning` and
`message.tool_calls` appear only when the provider returns them.

Set top-level `"stream": true` on the same request to receive typed SSE events
instead of a JSON response. `POST /v1/chat/stream` is the always-streaming
equivalent.

See the [HTTP API](../proxy/http-api.md) for the full contract.

## Do not expose the bare proxy publicly

The server has permissive CORS and provides no authentication or TLS. For local
use, bind it to `127.0.0.1`. For a public deployment, put it behind an external
gateway that supplies authentication and TLS. The supported topology and
deployment checklist are covered in
[Deploy the proxy safely](../proxy/deployment.md).