- Anthropic outbound provider: /v1/messages, system extraction, x-api-key + anthropic-version; streaming translates Anthropic SSE -> unified OpenAI wire format - Anthropic inbound adapter (POST /v1/messages): non-streaming JSON + streaming SSE (OpenAI -> Anthropic event translation) - Embeddings: POST /v1/embeddings inbound + Provider::embed(); embedding models resolvable from the pool (registry no longer skips them) - protocols mounted always, gated on live flags; admin meta marks them implemented
53 lines
2.7 KiB
Markdown
53 lines
2.7 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to this project are documented here.
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/).
|
|
|
|
## [Unreleased]
|
|
|
|
### Added
|
|
- **Streaming (SSE)** end-to-end: `POST /v1/chat/completions` with `"stream": true`
|
|
forwards provider SSE chunks verbatim, with `X-Cortiq-*` routing headers and token
|
|
usage tapped from the final chunk for statistics. Failover applies before the first
|
|
byte. Live streaming output in the admin Playground (`/admin/api/test/stream`).
|
|
- Cross-platform Windows binaries in releases (`x86_64-pc-windows-msvc`) and a
|
|
cross-platform CI test matrix (ubuntu/windows/macos); secure token RNG via `getrandom`.
|
|
- **Anthropic provider** (outbound): `POST /v1/messages` with `system` extraction,
|
|
`x-api-key` + `anthropic-version` headers, and streaming that translates Anthropic
|
|
SSE events into the unified OpenAI wire format.
|
|
- **Anthropic inbound** adapter: `POST /v1/messages` (non-streaming JSON and streaming
|
|
SSE), so Claude-native clients can target the gateway.
|
|
- **Embeddings**: `POST /v1/embeddings` inbound + provider `embed()`; embedding models
|
|
are now resolvable from the pool.
|
|
|
|
## [0.1.0] - 2026-06-30
|
|
|
|
### Added
|
|
- **Embedded admin web console** at `/admin` — a build-free single-page app compiled
|
|
into the binary via `rust-embed`. Manage models, routing, protocols, virtual keys
|
|
and secrets from the browser; changes are hot-reloaded (no restart).
|
|
- **Multilingual UI** in 7 languages (en, ru, de, fr, es, zh, tr) with browser
|
|
auto-detection, plus light/dark themes.
|
|
- **Admin API** under `/admin/api/*` (Bearer admin token): config, models (CRUD +
|
|
probe), routing, protocols, settings, keys, secrets, stats, requests, and a
|
|
playground `test` endpoint.
|
|
- **Hot config reload** — config-derived state lives behind `arc-swap`; writes
|
|
validate → atomically rewrite the TOML → swap, with no restart.
|
|
- **Request statistics** — in-memory aggregates, per-minute time buckets, and a ring
|
|
buffer of recent requests, appended to a JSONL file and replayed on startup.
|
|
- **Prometheus `GET /metrics`** endpoint.
|
|
- **Secret store** (`config/secrets.toml`, mode `0600`) — provider keys can be set
|
|
from the UI without writing them into `gateway.toml`; values are never returned by
|
|
the API.
|
|
- English documentation as the primary language, with Russian translations
|
|
(`README.ru.md`, `docs/*.ru.md`).
|
|
|
|
### Changed
|
|
- The Anthropic provider now returns a clear error instead of panicking when called
|
|
(the adapter is still planned for v0.2).
|
|
|
|
## [0.0.1]
|
|
- Initial skeleton: OpenAI Chat Completions inbound adapter, OpenAI-compatible
|
|
outbound provider, routing table with fallback and graceful degradation, and
|
|
cost/token accounting.
|