Commit graph

41159 commits

Author SHA1 Message Date
yuneng-jiang
397859f672
Merge pull request #36317 from BerriAI/litellm_backport_1_94_x_bp-194x-0808sec
Some checks failed
Terraform Provider / gofmt, vet, build, test (push) Has been cancelled
Terraform Provider / Provider endpoints vs proxy OpenAPI schema (push) Has been cancelled
chore(release): backport #34189, #36011 to stable/1.94.x and cut 1.94.3
2026-08-08 16:34:52 -07:00
Yuneng Jiang
be476026c6
chore: refresh uv.lock for 1.94.3 2026-08-08 13:54:56 -07:00
Yuneng Jiang
ab3b2fce48
bump: version 1.94.2 → 1.94.3 2026-08-08 13:54:25 -07:00
Yuneng Jiang
d5efca5baf
fix(health): drop a stored-credential reference along with the credentials it names
A connection test that redirects the destination already leaves the configured
credentials behind. It kept litellm_credential_name, which names the same stored
secrets and is resolved further down the call, so the reference is now dropped
with them. A request that sets no connection fields of its own is unaffected,
which is how the Admin UI tests a configured model.

(cherry picked from commit 298fb8ce56)
2026-08-08 13:10:26 -07:00
Yuneng Jiang
2d88b52da6
feat(health): let allow_client_side_credentials re-enable configured-credential reuse
The proxy-wide opt-in that already governs callers supplying their own
connection parameters now also governs whether a connection test may pair a
request-supplied endpoint with the configured deployment's credentials. Off by
default, which keeps configured credentials scoped to the endpoint the
configuration names; on, the previous merge behaviour is available unchanged.

(cherry picked from commit 59173c3a20)
2026-08-08 13:10:19 -07:00
Yuneng Jiang
2cf2e037c6
fix(health): stop inheriting configured credentials when a connection test sets its own
A request that supplies its own connection fields describes a connection of its
own, so the configured deployment's credentials are no longer merged underneath
it. Anything the request leaves unset still comes from the configuration, so
naming a configured model and testing it as configured is unchanged, and adding
a second deployment for an already-configured name works as before.

Replaces the earlier outright rejection, which also refused requests that
supplied a complete connection of their own.

(cherry picked from commit b468acb31c)
2026-08-08 13:10:12 -07:00
Yuneng Jiang
2653829374
fix(health)!: let configured deployment parameters win over request overrides
When a connection test names a model that resolves to a configured deployment,
that deployment's routing and credential parameters are authoritative. A request
supplying a complete connection of its own is unaffected.

BREAKING CHANGE: /health/test_connection no longer lets a request replace the
routing or credential parameters of a configured model it names. Supply the full
connection parameters instead of naming a configured model.

(cherry picked from commit e5effcb861)
2026-08-08 13:08:29 -07:00
Yuneng Jiang
dde20e405c
fix(proxy)!: parse bracket-notation form metadata the same way its JSON form is parsed
Multipart callers express nested metadata as flat bracket-notation keys, which
reach the request-body check as literal keys rather than as a metadata dict.
The check now rebuilds them with the same helper the endpoints use, so both
encodings are handled identically and cannot drift apart.

BREAKING CHANGE: a multipart field such as `litellm_metadata[api_base]` is now
subject to the same request-body parameter rules as its JSON equivalent. Set
`general_settings.allow_client_side_credentials`, or the deployment's
`configurable_clientside_auth_params`, to keep passing these.

(cherry picked from commit 5b2c92d749)
2026-08-08 13:07:41 -07:00
Yuneng Jiang
f916951058
fix(proxy)!: share one destination check between body and path-supplied model
The URL-destination check previously ran over request-body fields only. The
per-field logic moves into reject_url_valued_destination(field, value) so a
deployment name resolved from the request path runs the same check against the
same admin allowlist.

BREAKING CHANGE: a deployment name supplied in the request path that parses as
an http/https destination is now refused. Add the host to
`provider_url_destination_allowed_hosts` in litellm_settings to keep it working.

(cherry picked from commit fc4be70a37)
2026-08-08 13:07:33 -07:00
yucheng-berri
892a285f0e
chore(proxy): clean up request parameter validation and provider destination handling (#34189)
(cherry picked from commit 065faf6e69)
2026-08-08 13:06:36 -07:00
yuneng-jiang
51d0368943
Merge pull request #36237 from BerriAI/litellm_/stable-backport-1-94-x-98ab0e
chore(release): backport #35835, #35844 to stable/1.94.x and cut 1.94.2
2026-08-07 19:17:44 -07:00
Yuneng Jiang
bbd53a48bd
chore: refresh uv.lock for 1.94.2 2026-08-07 18:30:39 -07:00
Yuneng Jiang
fefdcde9e3
bump: version 1.94.1 → 1.94.2 2026-08-07 18:30:30 -07:00
Yuneng Jiang
2cca083414
chore: update Next.js build artifacts (2026-08-08 01:28 UTC, node v20.20.2) 2026-08-07 18:28:22 -07:00
Yuneng Jiang
551dfb0274
chore(deps): bump cryptography to 50.0.0
Widens the proxy extra to >=49.0.0,<51.0 and adds a uv override so the lock
resolves 50.0.0. The override is needed because every released mlflow, through
3.15.1, carries a precautionary cryptography upper bound that it ratchets each
release (<47 on 3.11, <49 on 3.13, <50 on 3.15), which otherwise caps this
workspace below the target.

mlflow's entire cryptography surface is mlflow/utils/crypto.py (Fernet, AESGCM,
PBKDF2HMAC, hashes, InvalidTag); its KEK derivation, DEK wrap/unwrap, AES-GCM
round trip, and authenticated-failure paths were all exercised against 50.0.0.
litellm's own surface (Fernet, x509, RSA/PSS, PKCS8, AESGCM, PyJWT RS256) was
exercised the same way. mlflow is not installed in the published image.

The regenerated lock moves cryptography and nothing else.
2026-08-07 18:19:32 -07:00
Yuneng Jiang
5563491dc9
chore(deps): bump h2 to 4.4.1 2026-08-07 18:18:48 -07:00
Yuneng Jiang
a54e96ba28
chore(deps): bump gitpython to 3.1.58 2026-08-07 18:18:47 -07:00
Yuneng Jiang
8bd5b278d0
chore(deps): bump aiohttp to 3.14.3 2026-08-07 18:18:47 -07:00
yuneng-jiang
925fc362d1
Merge pull request #35844 from BerriAI/litellm_/terraform-provider-dep-bump-5feb4a
chore(deps): bump grpc and golang.org/x modules in the terraform provider

(cherry picked from commit 2e255191ab)
2026-08-07 18:18:13 -07:00
yuneng-jiang
2f2e477207
Merge pull request #35835 from BerriAI/litellm_/elated-margulis-7f300f
refactor(ui): route MCP session tokens through the shared storage helper

(cherry picked from commit e4fd790f1c)
2026-08-07 18:18:06 -07:00
yuneng-jiang
065bf83f0c
Merge pull request #35277 from BerriAI/litellm_/backport-35271-1-94-x-ba1512
chore(release): backport #35271 to stable/1.94.x and cut 1.94.1
2026-07-30 15:51:10 -07:00
Yuneng Jiang
733a2745ec
chore: refresh uv.lock for 1.94.1 2026-07-30 13:58:17 -07:00
Yuneng Jiang
0e23332394
bump: version 1.94.0 → 1.94.1 2026-07-30 13:57:43 -07:00
yuneng-jiang
87c1fc3f41
revert(proxy)!: stop enforcing user budget on team keys (#35271)
Reverts #32005. Team-scoped keys are governed by the team and team-member
budgets only; the key owner personal max_budget no longer applies to them,
restoring the hierarchy that existed before that PR.

The skip_user_budget_on_team_key opt-out existed solely to turn the new
behavior back off, so it is removed along with the behavior: the
ConfigGeneralSettings field, the /config/list allowed_args entry that
surfaced it as an Admin UI toggle, and the argument threaded through
reserve_budget_for_request and _get_budget_counters.

Regression tests cover both enforcement points in the restored direction:
test_common_checks_personal_user_budget_skipped_for_team_key for the
read-time check and test_should_not_reserve_user_budget_counter_for_team_key
for the optimistic reservation path.

(cherry picked from commit 6f1625d23b)
2026-07-30 13:50:59 -07:00
yuneng-jiang
38f2e023f1
Merge pull request #34995 from BerriAI/litellm_/cost-optimization-savings-pr-0a22b6
chore: rebuild Admin UI bundle for rc/1.94.0
2026-07-28 13:00:13 -07:00
Yuneng Jiang
4d06852664
chore: update Next.js build artifacts (2026-07-28 19:58 UTC, node v20.20.2) 2026-07-28 12:58:24 -07:00
yuneng-jiang
7880e61200
Merge pull request #34994 from BerriAI/litellm_/cost-optimization-savings-pr-0a22b6
fix(cost-optimization): backport the savings chart axis fix and methodology popovers to rc/1.94.0
2026-07-28 12:55:28 -07:00
Tin Chi Lo
99618fb392
feat(cost-optimization): anchor the savings line at a $0 range start
The "Savings over time" chart plotted a single floating dot for short
ranges: the daily rollup keys spend by YYYY-MM-DD, so a one-day range is
one point by construction. Rather than stand up an hourly SpendLogs data
source, read that same daily rollup and make the cumulative line legible.

- Cumulative | Per day toggle. Cumulative accumulates within the range;
  Per day shows the raw stacked bars.
- Cumulative prepends a synthetic $0 point at the range start
  (withStartAnchor) so the line rises from zero to the running total
  instead of floating. An empty series is left untouched so the chart's
  own "No data" state shows.
- Order the daily series oldest-first (the rollup arrives newest-first)
  so the axis reads left to right and the total accumulates forward.
- Header legend, dots on small series, and a "No data" guard on BarChart.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
(cherry picked from commit 1fa40bd168)
2026-07-28 12:45:09 -07:00
Tin Chi Lo
3322f24783
fix(cost-optimization): replace savings methodology Collapse with per-card info popovers
Swap the antd Collapse "How savings are calculated" panel for click-triggered
shadcn Popovers on each SummaryCard, so the explanation sits next to the
metric it describes instead of in one combined block.

(cherry picked from commit 3c287576b2)
2026-07-28 12:42:46 -07:00
yuneng-jiang
d3c8e5aae6
Merge pull request #34982 from BerriAI/litellm_/release-ui-build-1-94-0-ff6e5a
chore: rebuild Admin UI bundle for v1.94.0
2026-07-28 12:25:53 -07:00
Yuneng Jiang
1e857943c0
chore: update Next.js build artifacts (2026-07-28 19:23 UTC, node v20.20.2) 2026-07-28 12:23:10 -07:00
yuneng-jiang
96103c9788
Merge pull request #34987 from BerriAI/litellm_/cherry-pick-34984-rc-1-94-0-765f0f
feat(ui): mark Cost Optimization as beta in the left nav (#34984)
2026-07-28 12:21:19 -07:00
yuneng-jiang
3db78a88ed
feat(ui): mark Cost Optimization as beta in the left nav (#34984)
(cherry picked from commit f4a68a75ff)
2026-07-28 12:05:46 -07:00
yuneng-jiang
81ab74e307
Merge pull request #34967 from BerriAI/litellm_rc194_cost_optimization_page_metadata
fix(ui): add missing cost-optimization page description on rc/1.94.0
2026-07-28 10:36:08 -07:00
Yuneng Jiang
6204fa0648
fix(ui): add missing cost-optimization page description on rc/1.94.0
The cost-optimization page was backported onto this line with its leftnav
entry but without its pageDescriptions entry, so page_utils.test.ts failed
two assertions: the page fell back to the "No description available"
placeholder, and it showed up in missingDescriptions.

Restores the entry verbatim from litellm_internal_staging, which makes
page_metadata.ts byte-identical to staging.
2026-07-28 10:35:03 -07:00
yuneng-jiang
fb4468904a
Merge pull request #34964 from BerriAI/litellm_/cherry-pick-34885-rc-1-94-0-d64437
fix(ui): backport cache leakage card layout fix to rc/1.94.0
2026-07-28 10:30:33 -07:00
Yuneng Jiang
9f3c51fef6
style(ui): format cache leakage card after cherry-pick
Dropping className="mt-3" from <Tabs> in #34885 shortened the line
enough that prettier wants the props back on one line; the PR merged
with frontend-lint red, so the pick inherits the violation.
2026-07-28 10:19:39 -07:00
tin-berri
cf2ff4c63b
Fix cache leakage card layout to keep date picker on right (#34885)
* Fix cache leakage card layout to keep date picker on right and prevent content overlap

Removes flex-wrap and mt-3 to ensure date picker stays pinned to the right side of the card header regardless of zoom level, preventing it from covering card content below

* Remove overflow-hidden from Card to allow dropdowns and overlays to display fully

Fixes date picker dropdown being clipped when opened in cards like the Cache Leakage Card. By removing overflow-hidden from the Card container, popovers, dropdowns, and other overflow content can now display properly without being clipped by the card boundaries.

* Make cache leakage card descriptions consistent with line clamping

Adds line-clamp-2 to ensure both 'by model' and 'by virtual key' cards maintain consistent height. Removes conditional anthropic-specific text that caused height variations between dimensions.

(cherry picked from commit d91fd084f7)
2026-07-28 10:16:57 -07:00
tin-berri
fca0ad7c05
Merge pull request #34439 from BerriAI/litellm_cache_leakage_header_layout
fix(ui): keep cache leakage time range picker inline at narrow widths

(cherry picked from commit c93c3f7582)
2026-07-28 10:16:57 -07:00
yuneng-jiang
47eae0d23e
Merge pull request #34855 from BerriAI/litellm_backport_rc194_toolspend_0727
chore(release): backport #33899, #33978, #34582, #34675 to rc/1.94.0 and bump litellm-proxy-extras to 0.4.79.post2
2026-07-27 19:11:40 -07:00
Yuneng Jiang
7fec728c7f
chore: bump litellm-proxy-extras to 0.4.79.post2
Ships the 20260724000000_add_spend_log_tool_index_start_time_idx and
20260725000000_add_daily_tool_spend migrations, which live in that package
2026-07-27 17:01:16 -07:00
Yuneng Jiang
81d0e8c112
chore: update Next.js build artifacts (2026-07-28 00:00 UTC, node v20.20.2) 2026-07-27 17:00:05 -07:00
tin-berri
0acc934c9a
Merge pull request #34675 from BerriAI/litellm_tool_spend_rollup
fix(proxy): roll up tool spend daily instead of scanning SpendLogs

(cherry picked from commit 9bb75d67af)
2026-07-27 16:58:06 -07:00
tin-berri
30f3dbc183
Merge pull request #34582 from BerriAI/litellm_toolspend_30d_bound
fix(proxy): cap /v1/tool/spend window at 30 days and bound every SpendLogs read

(cherry picked from commit b9b27c2beb)
2026-07-27 16:47:34 -07:00
tin-berri
e055f94401
Merge pull request #33978 from BerriAI/litellm_cost_optimization_tools
feat(cost-optimization): add spend-by-tool and cache leakage views

(cherry picked from commit 43e7b96b83)
2026-07-27 16:47:34 -07:00
devin-ai-integration[bot]
0b8c13fa9c
feat(ui): add configuration tabs to the Cost Optimization page (#33899)
* feat(ui): add configuration tabs to Cost Optimization page

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* feat(ui): reuse AutoRouter v2 and Router Settings prompt-caching panel in Cost Optimization; clarify Headroom compression

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* feat(ui): add experimental dashboard banner with feedback discussion link to Cost Optimization

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* feat(ui): add savings methodology note and per-key/team compression enterprise callout to Cost Optimization

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test(ui): assert active tab state in Cost Optimization tab-switch test

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: Krrish Dholakia <krrishdholakia@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
(cherry picked from commit 34561482ed)
2026-07-27 16:47:34 -07:00
yuneng-jiang
5d66f1cbd1
Merge pull request #34640 from BerriAI/litellm_backport_rc194_auth_guard_0725
chore(release): backport auth, CLI SSO and guardrail fixes to rc/1.94.0 and refresh flagged dependencies
2026-07-25 13:39:16 -07:00
Yuneng Jiang
71a59c6e80
chore: update Next.js build artifacts (2026-07-25 18:06 UTC, node v20.20.2) 2026-07-25 11:18:20 -07:00
Yuneng Jiang
0c5fe28c32
chore(deps): bump next, postcss, sharp, js-yaml and brace-expansion in the dashboard 2026-07-25 11:18:20 -07:00
Yuneng Jiang
1bae2cff47
chore(deps): bump pypdf to 6.14.2 2026-07-25 11:18:20 -07:00