Releases: project-arbr/arbr-control-plane
Releases · project-arbr/arbr-control-plane
Release list
v0.3.0
Added
- Eval-backed routing: offline replay with recommendation quality-gating (#79), durable
eval worker with masked-fidelity labeling (#88), reusable benchmarks with a model
leaderboard and quality-per-dollar view (#115), judge-reliability checks for position
bias and decisiveness (#119), a "disprove it" precision pass on worse verdicts (#117,
#120), and severity-weighted benchmark curation with pinned problem cases (#123). - Canary rollouts and shadow evals: mirror live traffic to a candidate model (#54),
promote or roll back experiments, gated on passed evals (#84). - Gateway surface:
POST /v1/embeddingswith Gemini and OpenAI backends (#135) and an
OpenAI Realtime WebSocket proxy atPOST /v1/realtime(#137). SDKs released at 0.5.0
with embeddings support (#136). - Per-user attribution:
userIdanddepartmenton API keys (#131),body.user
mapping on the OpenAI-compatible path (#126), and a team usage guide (#129). - Governance: output guardrail keyword/regex deny-list with per-app scoping (#66) and a
three-section governance overhaul covering guardrails and observability (#62). - Observability: latency benchmarking with TTFT and gateway-overhead tracking (#86),
p50/p95 latency stats with per-app trends and request search (#60), a latency
breakdown table on Overview (#118), and per-request routing explainability (#44, #48). - Cost controls:
max_tokensclamped to each model's output ceiling (#46, #47), budget
warnings with CSV export and cost trend (#52), goal-driven policy generation with an
impact simulator (#42), and a 1-10 difficulty score captured per request (#40). - Engineering: server unit + integration test suite and testing strategy (#58), routing
benchmark harness across LiveBench, Arena-Hard, and SWE-bench (#63), and a gated,
image-based, rollback-safe deploy pipeline (#61, #74). - Security & hardening: CI gates for secret scanning, npm audit, CodeQL, and Trivy image
scans (#151); graceful shutdown on SIGTERM/SIGINT (#152); a production profile that
fails closed instead of booting without required secrets (#159); metadata-only logging
as the production default (#160, #162). - Guardrails & caching: built-in and custom per-app prompt injection detection (#154), and
a semantic response cache with a configurable similarity threshold (#155). - API keys: expiry dates and one-click rotation (#156).
- Access control: OIDC/RBAC accountable admin access with a per-user audit trail (#163),
an allowed-domains setting for OIDC clients shared with other apps (#165), and SSO/RBAC
documentation (#170). - Providers: LiteLLM connection type is now discoverable from the UI (#171).
- Ingestion: an observe-only ingestion API (#172).
- Unified optimization workflow: a recommendation's lifecycle stage (opportunity through
accepted, shadow, canary, or rolled back) is derived on read from its linked records
rather than stored, with realised-vs-projected outcome tracking (#180). - Exportable recommendation evidence report, as JSON or Markdown, assembled on demand from
every linked dataset, eval run, campaign, experiment, and audit entry (#181). - Design-partner demo fixture: a full opportunity-to-canary-to-rollback story seeded with
zero provider keys, using the same production aggregation/judging code as real evals
(npm run demo:seed/demo:reset) (#182). - Internal spend accounting: every LLM call Arbr makes for itself (classification, policy
generation, judging, eval replay) now goes through one wrapper that tags and prices it,
keeping it out of customer-facing analytics (#183, #184). - Cloud secret-manager integration: any credential-shaped env var can hold a
gcp-sm://...
reference instead of a literal, resolved transparently at boot and on a periodic or
on-demand refresh; production fails closed on a resolution failure. AWS/Azure adapters
are documented against the same interface (#189). - Operational readiness package: a
/health/readyreadiness check distinct from the
existing liveness check, backup/restore scripts, config/policy export and import, a
support-diagnostics bundle with no credentials or captured payloads, a disk-usage guard
on deploy, and bounded container log growth (#190). - OpenTelemetry trace export: OTLP spans per request, off by default, with sample-ratio
and content-capture controls adjustable at runtime from the Governance page (#191, #192,
#193). - A projectarbr.org link in the web console's sidebar footer (#186).
Changed
- Console reoriented around the five stages (Connect, See, Recommend, Route, Govern)
with a redesigned sidebar and Recommendations page (#98, #111, #112) and a restyle to
the ARBR monochrome brand (#144-#146). - Hot-path latency reduced via a Settings cache and parallel pre-LLM fetches (#85).
- Web stack migrated to Tailwind CSS v4 (#70).
- Roughly twenty documentation pages corrected for drift against the actual API, config,
and pricing (#173, #175-#179); the README's autonomy claims and quickstart walkthrough
clarified (#194); the README dashboard screenshot refreshed (#187).
Fixed
- Eval judge was passed a string instead of a messages array, so judging never worked;
fixed along with re-run support (#108). - Per-app config (policy, opt-out, kill switch) now applies on
/v1/chat/completions
(#39). /api/about500 that broke the deploy seed-version check (#89);/healthdemoMode
now reflects effective provider state (#147).- Audit page blanked on the new object-shaped
AuditLog.actor(#164). - Docker Compose wasn't passing the accountable-admin-access auth env vars through
(#166). - Arbr's own AI spend was polluting customer analytics views (#167).
- Sign-out showed the admin-key form even in OIDC/trusted-header mode (#168).
- Sidebar tagline pushed Users out of view without scrolling (#169).
handler.jslogged asemantic_cacherouting decision the schema's enum didn't
include, silently dropping every semantic-cache-hit log row (#174).- Sidebar footer links stacked into two rows after adding the projectarbr.org link,
pushing Users below the fold again; put back on one row (#188).
v0.2.0
Added
- Model registry: full catalog sync from LiteLLM plus LiveBench and LMSYS benchmark
scores, with a Models page for provider management and model testing. - Discovery endpoints:
GET /v1/models,GET /v1/providers,GET /v1/task-types,
filtered to live providers with tool-call capability flags. - Custom providers: connect any OpenAI-compatible endpoint from the UI, including a
LiteLLM proxy type. - Applications hub: per-app kill switch, routing policy, and model opt-out; Budgets page
with per-app and per-provider spend caps. - Analytics: per-user spend and realised-savings visibility (#38); provider prompt-cache
tokens captured and priced (#37). - Routing: difficulty-aware classification signal (#36); LLM-based policy generation;
scoring-engine router replacing the LLM router. - Bedrock: tool-call support on the Converse API, including streamed tool calls.
- AI governance controls: transparency, safety, audit, and data lifecycle.
Changed
- Repository prepared for open source under project-arbr (#1); ESLint added and CI
hardened (#33); dependabot PRs grouped per ecosystem (#17).
Fixed
- Completions no longer truncate at 1024 tokens; real
finish_reasonreported (#34). - SSE truncation on
/v1/chat/completionsfor native providers; DeepSeek R1 hang and
ValidationException on Bedrock; crash on null messages with tool-result history.
v0.1.0
Initial release: OpenAI-compatible gateway (/v1/chat/completions) in front of
Anthropic, OpenAI, Google Gemini, AWS Bedrock, and OpenAI-compatible providers;
deterministic human-approved routing rules; spend caps; request logging with cost
attribution; React dashboard; JS and Python client SDKs.