Commit Graph
39 Commits
Author SHA1 Message Date
whit3rabbitandClaude 75a5a3a230 chore: release v0.16.0
Bump workspace + all inter-crate version refs from 0.15.1 to 0.16.0
(workspace Cargo.toml, anyllm_client pinned version, batch_engine,
proxy's 8 internal deps, optimizer core/passes/scorer + cli + benches).
Refresh Cargo.lock. Move CHANGELOG [Unreleased] -> [0.16.0] - 2026-07-16
and add a fresh empty [Unreleased]; bump the README deb filename to
anyllm-proxy_0.16.0-1_amd64.deb and add the v0.16.0 compare link.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-16 20:12:53 -05:00
whit3rabbitandClaude Opus 4.8 063af0d423 fix: admin UI provider model cache wipe, chip removal, stale-backend edit (v0.15.1)
- discover/refresh no longer wipe provider_models_cache on an empty result
  (DELETE-then-INSERT upsert skipped when zero ids), preserving autorouter
  model suggestions.
- Provider editor: removed model chips stick; persisted names seeded once
  instead of re-unioned on every cache refetch.
- Managed-backend edit falls back to SQLite on an in-memory miss, so a row
  skipped at startup no longer 404s on every save (heals value-fixable
  configs; unknown provider_id still 400s).
- Add get_managed_backend DB helper + round-trip test.
- Bump workspace to 0.15.1; CHANGELOG + README deb filename.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 21:50:42 -05:00
whit3rabbitandClaude Opus 4.8 3dc4f8d491 chore: release v0.15.0
Bump workspace + all crate versions 0.14.1 -> 0.15.0, move CHANGELOG
[Unreleased] into [0.15.0], backfill compare links, update README deb URL.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 20:59:27 -05:00
whit3rabbitandClaude Opus 4.8 d12309d701 chore: release 0.14.1
Re-cut of the 0.14.0 release. The v0.14.0 tag was pushed before the CI
publish job knew about the new leaf crates (pxpipe, rtk, optimize_*), so
its pipeline would have failed to publish anyllm_proxy to crates.io. The
publish-order fix landed on main after the tag, and a tag can't be moved
under auto mode, so the release is re-cut as 0.14.1 with the fix in place.

Bump 0.14.0 -> 0.14.1 (workspace, inter-crate deps, client pinned version,
README deb filename) and rename the CHANGELOG section (0.14.0 was never
released).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 21:36:24 -05:00
whit3rabbitandClaude Opus 4.8 ff03a7ebd7 chore: release 0.14.0
Move Unreleased changelog entries (RTK compression, opt-in prompt
optimizer, release binary archives, Bedrock allowlist fix, model
discovery fix) into the 0.14.0 section. Bump workspace + inter-crate
versions 0.13.0 -> 0.14.0 and the README deb filename.

Fix clippy missing_const_for_thread_local in optimize-core alloc_budget
test (const-init the thread-locals) so cargo clippy -D warnings is clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 21:21:14 -05:00
whit3rabbitandClaude Opus 4.8 d155bfd148 feat: RTK tool-output compression and opt-in prompt optimizer
RTK (anyllm_rtk crate): command-aware filtering of tool-result text
(test/build/git/log output) via a catalog of 55 declarative filters ported
from OmniRoute (MIT). IO-free, deterministic, prompt-cache safe (cache_control
blocks preserved byte-for-byte). Wired into the Anthropic passthrough (stream +
non-stream) and OpenAI-translate paths, gated per-model via RTK_MODELS.
RTK_COMPRESS env / admin toggle, rtk_compress/rtk_models runtime config.

Optimizer (anyllm_optimize_* crates): opt-in Frozen-Frontier Extractive
Compression of long client-sent conversation history for OpenAI Chat
Completions, the Anthropic translate path, and the Anthropic passthrough path
(client history only, never proxy tool-loop turns). OPTIMIZER_MODE=off|shadow|
live env / admin toggle; live places a cache_control breakpoint at the frontier
over raw bytes. Optional LLMLingua-2 ONNX scorer behind the optimizer-onnx
feature (model fetched on demand, never bundled). New optimizer_* metrics
counters and GET/POST /admin/api/optimizer/model endpoints.

Both features expose runtime config + Settings UI controls and fail open on any
error. Adds workspace members, CI lint/test for the optimizer-onnx feature, and
gitignore rules for downloaded ONNX artifacts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 19:55:33 -05:00
whit3rabbitandClaude Opus 4.8 c2e77c59c7 chore: release 0.13.0
Bump workspace + inter-crate versions 0.12.0 -> 0.13.0, README deb filename,
and move CHANGELOG [Unreleased] into [0.13.0] - 2026-07-12.

Also bump crossbeam-epoch 0.9.18 -> 0.9.20 (Cargo.lock) to clear
RUSTSEC-2026-0204 (invalid pointer dereference), which was failing the
CI Security audit step.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 08:00:28 -05:00
whit3rabbit 9031e0ee16 chore: release 0.12.0 2026-07-05 19:20:29 -05:00
whit3rabbit 8d523abd63 feat: pxpipe context compression + forge guardrails + LiteLLM catalog refresh + otel security bump 2026-07-05 16:22:51 -05:00
whit3rabbit a786da1e49 Release 0.11.0 2026-07-04 17:58:14 -05:00
whit3rabbitandClaude Sonnet 5 9456d1ad1b feat: opt-in forge-guardrails tool-call policy + Anthropic thinking-block repair
- Tool-call guardrails (lsp_first/quiet_command/write_payload_cap nudges,
  fingerprint dedup) for local-LLM tool loops. Configurable via YAML
  tool_execution.guardrails, FORGE_TOOL_CALL_POLICY env fallback, or the
  admin UI (live, no restart).
- Anthropic thinking-block record/repair (ANTHROPIC_THINKING_REPAIR):
  records ground truth off the real API and repairs client-corrupted
  thinking/redacted_thinking blocks in replayed conversations.
- Bidirectional thinking_blocks (signature/redacted state) round-trip
  through the OpenAI-compat wire format for LiteLLM-style clients.
- Review fixes: guardrail-mode divergence between streaming/non-streaming
  paths, cross-backend/tenant cache-namespace collision, client-controlled
  integer overflow in thinking budget_tokens, dropped reasoning_content and
  citations on repair/translation paths, a fail-closed race under cache
  eviction, plus dedup/simplification cleanup and doc corrections.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 13:03:02 -05:00
whit3rabbitandClaude Sonnet 5 9eb15cce16 fix(deps): bump opentelemetry to 0.32 to fix baggage-propagation DoS
opentelemetry_sdk <= 0.32.0 allows unbounded memory allocation while
parsing W3C Baggage headers (2 open Dependabot alerts). Bump
opentelemetry/opentelemetry_sdk/opentelemetry-otlp 0.31 -> 0.32 and
tracing-opentelemetry 0.32 -> 0.33 in lockstep behind the optional
otel feature; the old tracing-opentelemetry 0.32.x pinned
opentelemetry 0.31, which produced a duplicate-trait-impl compile
error until bumped together.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 10:46:26 -05:00
whit3rabbit ce89a2d19c Release 0.10.1 2026-06-20 15:24:43 -05:00
whit3rabbitandClaude Opus 4.8 bfe24b5cc2 chore(release): v0.10.0
Bump workspace + inter-crate version refs 0.9.9 -> 0.10.0 and update
CHANGELOG with admin UI redesign, cache auth/backend scoping, Gemini
virtual-key accounting, and security dependency bumps.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 21:12:49 -05:00
whit3rabbitandClaude Opus 4.8 d3a7aadfa5 chore(deps): cargo update (bytes, h2, syn, time, webpki-roots; drop unused wit-bindgen tree)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 20:45:32 -05:00
whit3rabbitandClaude Opus 4.8 65cf673b97 feat: performative admin UI redesign + admin API contract fixes
Large admin-ui refactor (Performative component system, sidebar nav,
provider/route tabs) plus backend module restructuring.

Admin UI contract fixes (this session):
- Fix Models page crash: useBackends unwraps {backends:[...]}; align
  ModelEntry to {model_name, deployments} and ModelsResponse.strategy;
  fix add-model body to {model_name, actual_model, backend_name}.
- Fix Backends/Providers health rendering: source per-backend status and
  latency from the uptime endpoint (health_checks); narrow Backend type to
  the real get_backends shape.
- Route + sidebar-link the previously-unrouted Backends tab.

Verified: cargo test (exit 0), clippy -D warnings (exit 0), fmt --check,
admin-ui tsc + vite build all green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 18:13:59 -05:00
whit3rabbitandClaude Opus 4.8 138aaa65ac fix: error classification + retry consistency across backends; bump 0.9.9
Surface upstream errors hidden in 200 bodies/streams (OpenRouter), unify
retry/fallback policy, fast-fail insufficient_quota, add timeout_error
mapping. Gemini native now retries with backoff.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 15:43:04 -05:00
whit3rabbitandClaude Sonnet 4.6 b5930eee51 chore: update Cargo.lock for 0.9.8 version bump
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 22:40:44 -05:00
whit3rabbitandClaude Sonnet 4.6 681b0d47d9 chore: bump to 0.9.8, add CHANGELOG, cargo update
- Version: 0.9.7 → 0.9.8 (workspace + all pinned inter-crate deps)
- New: AnthropicMessagesClient passthrough client
- New: RetryPolicy struct, retry_transport_errors flag, extra_header builder
- New: ssrf_allow_loopback, ssrf_allow_private, extra_headers in HttpClientConfig
- New: ChatMessage::effective_text(), claude-fable-5 in provider catalog
- Fix: relaxed serde defaults for lax local backends (Ollama, llama.cpp)
- Fix: warn on empty choices in openai_to_anthropic_response
- ci: create-release now uses CHANGELOG section as release body
- docs: CHANGELOG.md created, release process documented in CLAUDE.md
- deps: cargo update (~105 packages, tokio 1.52, axum 0.8.9, rustls 0.23.40)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 22:37:09 -05:00
whit3rabbit 8b4abfdf7d chore: bump version to 0.9.7 2026-06-07 15:38:56 -05:00
whit3rabbit 1b902c5310 Add provider catalog runtime support 2026-06-07 10:19:50 -05:00
whit3rabbit 45e18c83d2 chore: bump version to 0.9.6 2026-05-23 16:39:43 -05:00
whit3rabbit c68bb88f85 chore: bump version to 0.9.5 2026-05-23 15:35:01 -05:00
dependabot[bot]andwhit3rabbit 9d01381166 chore(deps): bump rand from 0.8.5 to 0.8.6 (#5)
Bumps [rand](https://github.com/rust-random/rand) from 0.8.5 to 0.8.6.
- [Release notes](https://github.com/rust-random/rand/releases)
- [Changelog](https://github.com/rust-random/rand/blob/0.8.6/CHANGELOG.md)
- [Commits](https://github.com/rust-random/rand/compare/0.8.5...0.8.6)

---
updated-dependencies:
- dependency-name: rand
  dependency-version: 0.8.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: whit3rabbit <whit3rabbit@users.noreply.github.com>
2026-05-23 15:28:28 -05:00
dependabot[bot] 2a069dfe08 chore(deps): bump openssl from 0.10.76 to 0.10.80 (#9)
Bumps [openssl](https://github.com/rust-openssl/rust-openssl) from 0.10.76 to 0.10.80.
- [Release notes](https://github.com/rust-openssl/rust-openssl/releases)
- [Commits](https://github.com/rust-openssl/rust-openssl/compare/openssl-v0.10.76...openssl-v0.10.80)

---
updated-dependencies:
- dependency-name: openssl
  dependency-version: 0.10.80
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 15:22:43 -05:00
whit3rabbit 98bc1c833a fix: include pricing asset in proxy crate 2026-05-23 15:03:09 -05:00
whit3rabbit 4cdfef82e3 chore: prepare 0.9.3 release 2026-05-23 12:28:08 -05:00
whit3rabbitandClaude Opus 4.7 25f37dd9a4 docs(crates): add READMEs for client, batch_engine, proxy; bump 0.9.2
Each new README places the crate inside the anyllm-proxy workspace and
includes verified library-use examples for downstream consumers.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 19:04:38 -05:00
whit3rabbitandClaude Opus 4.6 58bd323242 fix(deps): bump rustls-webpki 0.103.10 -> 0.103.12, version 0.9.1
Fixes RUSTSEC-2026-0098 (URI name constraint bypass) and
RUSTSEC-2026-0099 (wildcard name constraint bypass).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 20:36:31 -05:00
whit3rabbitandClaude Sonnet 4.6 816b64ae6a feat: add 16 new provider stubs and providers catalog UI tab
New providers: assemblyai, baidu, blackboxai, brave, cartesia, deepgram,
elevenlabs, exa, iflytek, lmsys, playht, pollinations, serper, siliconflow,
stability, tavily. Registered in mod.rs and registry.rs.

Adds a Providers tab to the admin UI with a ProviderIcon component and
catalog route. Updates backend, streaming, config, and test infrastructure
to align with the expanded provider set. Bumps all crate versions to 0.9.0.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 17:42:46 -05:00
whit3rabbitandClaude Sonnet 4.6 7c5a568034 feat: add providers crate, row_to_backend_config, managed_backends SharedState field, startup loading
- Copy crates/providers (anyllm_providers) into worktree and add to workspace + proxy deps
- Implement row_to_backend_config() in admin/routes/managed_backends.rs: converts ManagedBackendRow + ProviderDef into BackendConfig by mapping ProviderProtocol to BackendKind and AuthKind to BackendAuth; Custom protocol returns None (unsupported)
- Add managed_backends field to SharedState (Arc<RwLock<HashMap<String, (ManagedBackendRow, BackendClient)>>>)
- Load managed backends from SQLite at startup in async_main: list_managed_backends -> get_provider -> row_to_backend_config -> BackendClient::from_backend_config
- Fix cost/mod.rs test SharedState initializer to include new field

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 13:11:27 -05:00
whit3rabbitandClaude Sonnet 4.6 a76f169376 feat: complete React admin UI migration with Traffic and Uptime tabs
Fix unused _labels lint error in LineChart component.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 15:22:40 -05:00
whit3rabbitandClaude Opus 4.6 0fe011d718 fix(security): harden 4 medium findings from security audit
1. CSRF token store: replace unbounded DashMap with moka::sync::Cache
   (max 1,000 entries, 24h TTL) to prevent memory exhaustion.
2. Cloud metadata SSRF: warn at startup if QDRANT_URL/REDIS_URL points
   at 169.254.169.254 or metadata.google.internal.
3. TLS P12 password: wrap in zeroize::Zeroizing<String> so it is zeroed
   from heap on drop, preventing extraction from core dumps.
4. CSP nonce: replace unsafe-inline with per-request 128-bit nonce on
   admin SPA script/style tags.

Also includes: batch/bedrock model allowlist enforcement, litellm
master_key extraction moved to single-threaded fn main().

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 20:31:11 -05:00
whit3rabbitandClaude Sonnet 4.6 8ac9ef2677 Merge feat/batch-engine-phase1 into main
Resolves conflicts: take HEAD (security audit) for mcp.rs imports,
register_server_blocking error handling, and maybe_execute_tools loop.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 16:00:37 -05:00
whit3rabbitandClaude Sonnet 4.6 e6dd396b05 fix(security): apply 2026-03-31 security audit hardening
- Use getrandom for CSPRNG HMAC secret generation
- Case-insensitive admin path check prevents bypass via /Admin/, /ADMIN/
- Add TRUSTED_PROXY_DEPTH for multi-hop proxy X-Forwarded-For extraction
- Add dangerous-builtin-tools feature flag with security warning
- Remove repomix-output.xml, add .syntext to .gitignore

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 15:56:30 -05:00
whit3rabbit d2a56c5ad2 feat(proxy): wire batch_engine into proxy crate
- Add anyllm_batch_engine dependency to proxy Cargo.toml
- Add batch_engine field to AppState (Option<Arc<BatchEngine<...>>>)
- Add POST /v1/batches/{batch_id}/cancel route and handler
- cancel_batch handler uses BatchEngine when available, falls back to not_implemented
2026-03-31 06:30:25 -05:00
whit3rabbitandClaude Opus 4.6 b6277a8b86 feat: operator observability dashboard with error classification
- Admin UI: operator view with request volume, token usage, latency,
  cost charts, failure table, and request timeline
- Backend: add error_kind() method and infer_error_kind() for stable
  error classification (rate_limit, timeout, backend_error, client_error)
- Admin DB: error_kind column in request_log, observability aggregate
  queries (bucketed timeseries, failure breakdown, timeline)
- Gemini: improved streaming translation, thinking block support,
  grounding metadata passthrough
- Request timeout: configurable REQUEST_TIMEOUT_SECS with streaming
  watchdog
- Model pricing: MODEL_PRICING_FILE for external pricing overrides
- Degradation header: ANYLLM_DEGRADATION_WARNINGS env var control

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 19:12:03 -05:00
whit3rabbit b3b191e4bd chore: bump workspace version to 0.2.0 to match anyllm_client 2026-03-30 16:51:31 -05:00
whit3rabbit 14c4d24a91 chore: track Cargo.lock for reproducible builds 2026-03-30 16:49:39 -05:00