You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
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/embeddings with Gemini and OpenAI backends (#135) and an
OpenAI Realtime WebSocket proxy at POST /v1/realtime (#137). SDKs released at 0.5.0
with embeddings support (#136).
Per-user attribution: userId and department on 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_tokens clamped 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).
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/ready readiness 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).
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/about 500 that broke the deploy seed-version check (#89); /health demoMode
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.js logged a semantic_cache routing 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).