Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1383 commits
Select commit Hold shift + click to select a range
27c91e6
fix(sagemaker): forward native streaming events as they arrive to cut…
mateo-berri Jul 23, 2026
a63884b
test(sagemaker): cover sync native streaming path via injectable make…
mateo-berri Jul 23, 2026
5bc1df5
test(sagemaker): assert make_sync_call maps non-200 to SagemakerError
mateo-berri Jul 23, 2026
0b0d59d
feat(ui): give each Models + Endpoints tab its own path (#34327)
ryan-crabbe-berri Jul 23, 2026
070e19c
feat(organization): add RESTful PATCH /v2/organization/{organization_…
ryan-crabbe-berri Jul 23, 2026
baf85d7
refactor(ui): migrate search-tools info view to shadcn (#34323)
yuneng-berri Jul 23, 2026
9dda5d8
test(ui): characterise the memory page's drawer and header before mig…
yuneng-berri Jul 23, 2026
d2f872d
refactor(ui): migrate memory page to shadcn
yuneng-berri Jul 23, 2026
5a3ab86
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 23, 2026
f7842cd
fix(docker): bake non_root prisma engines at /opt/prisma so migration…
yuneng-berri Jul 23, 2026
3cdd6ab
test(e2e): drive a real Linear OAuth MCP through chat completions und…
tin-berri Jul 17, 2026
86eee8b
Merge pull request #34319 from BerriAI/litellm_anthropic_output_forma…
mateo-berri Jul 23, 2026
a928db1
fix(ui): keep the memory detail sheet inside the viewport on narrow s…
yuneng-berri Jul 23, 2026
a781304
feat(mcp): gateway DCR session admission at the aggregate /mcp endpoi…
tin-berri Jul 22, 2026
ffa0dff
refactor(mcp): trim redundant comments and dedupe admission-arm tests
tin-berri Jul 22, 2026
3bba363
Merge pull request #34338 from BerriAI/litellm_lit_4313_sagemaker_cha…
mateo-berri Jul 23, 2026
2bfd50e
test(e2e): cover key budget_duration resets on personal, team, and te…
ryan-crabbe-berri Jul 23, 2026
6bdb791
Merge pull request #33190 from BerriAI/litellm_lit3637_session_admission
tin-berri Jul 23, 2026
55b0046
Merge branch 'litellm_internal_staging' into litellm_lit4658_oauth_di…
tin-berri Jul 23, 2026
712136d
Merge pull request #34225 from BerriAI/litellm_lit4658_oauth_discover…
tin-berri Jul 23, 2026
8929e09
fix(ui): gate the keyless connect redirect on internal-user roles
tin-berri Jul 23, 2026
bb388b2
refactor(ui): migrate workflow runs to shadcn (#34370)
yuneng-berri Jul 23, 2026
fd494d2
refactor(ui): migrate models and endpoints table onto the shared Data…
yuneng-berri Jul 23, 2026
3c2403a
Merge pull request #33787 from BerriAI/litellm_mcp_chat_completion_li…
tin-berri Jul 23, 2026
0a43335
refactor(ui): migrate request logs table onto the shared DataTable (#…
yuneng-berri Jul 23, 2026
6ca40e7
refactor(mcp): delete unreachable v1 OBO handler and gate REST OAuth …
tin-berri Jul 23, 2026
1b2a7ce
feat(ui): rebuild Organization Settings on react-hook-form + zod with…
ryan-crabbe-berri Jul 23, 2026
bd73ca8
feat(cost-optimization): add spend-by-tool and cache leakage views
tin-berri Jul 23, 2026
531854d
fix(ui): hold the landing until the role hydrates before deciding the…
tin-berri Jul 23, 2026
b5bc363
refactor(e2e): drop require_env, read os.environ where a cred is used…
mubashir1osmani Jul 23, 2026
d6d52d9
feat(cost-optimization): add by-model view to cache leakage table wit…
tin-berri Jul 23, 2026
df3050f
Merge pull request #34407 from BerriAI/litellm_mcp_v1_obo_deadcode_cl…
tin-berri Jul 23, 2026
090fd49
feat(cost-optimization): sortable cache leakage columns and clearer t…
tin-berri Jul 23, 2026
43e7b96
Merge pull request #33978 from BerriAI/litellm_cost_optimization_tools
tin-berri Jul 23, 2026
2b77e8c
fix(ui): keep cache leakage time range picker inline at narrow widths
tin-berri Jul 23, 2026
07726b4
refactor(ui): migrate agents to shadcn (#34365)
yuneng-berri Jul 23, 2026
e906a7e
refactor(ui): extract shared tab-routing helpers and adopt them in Mo…
ryan-crabbe-berri Jul 23, 2026
ee9f0db
fix(bedrock-mantle): backfill usage on non-streaming /v1/messages res…
shivamrawat1 Jul 23, 2026
7aaaa05
feat(proxy): add overwrite_user_with_key_hash to stamp outgoing user …
ryan-crabbe-berri Jul 23, 2026
a507394
fix(ui): find logs by request id across pages and dates (LIT-3981) (#…
ryan-crabbe-berri Jul 23, 2026
58083b9
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 23, 2026
caac7d8
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 23, 2026
07f7fc2
fix(proxy): reject failed atomic budget reservations under fail_close…
ryan-crabbe-berri Jul 23, 2026
c255f53
ci: only run CodSpeed on backend changes (#34345)
devin-ai-integration[bot] Jul 23, 2026
a469bb7
fix(ui): keep a key's MCP toolsets when saving an edit
tin-berri Jul 24, 2026
dce1b0d
fix(ui): allow null for mcp_toolsets in the dashboard key response type
tin-berri Jul 24, 2026
e6ec153
fix(cost_tracking): map OpenAI cache_write_tokens for prompt cache cr…
krrish-berri Jul 20, 2026
2f502a1
fix(cost_tracking): map cache_write_tokens on Responses API usage path
krrish-berri Jul 21, 2026
5e1b08b
fix(spend_tracking): populate cache_creation_input_tokens for Respons…
krrish-berri Jul 21, 2026
eaf61eb
test(cost_tracking): cover OpenAI Responses API cache cost breakdown …
krrish-berri Jul 22, 2026
d3f5c6d
fix(cost_calculator): sum mirrored cache token fields once in combine…
mateo-berri Jul 24, 2026
15af874
Merge pull request #34046 from BerriAI/litellm_openai_cache_write_tokens
mateo-berri Jul 24, 2026
64aad58
fix(proxy): restore atomic user upsert when adding team members (#34457)
yuneng-berri Jul 24, 2026
42aba4f
feat(ui): show in the log drawer and session sidebar when an auto-rou…
tin-berri Jul 23, 2026
c93c3f7
Merge pull request #34439 from BerriAI/litellm_cache_leakage_header_l…
tin-berri Jul 24, 2026
2798f39
Merge pull request #34434 from BerriAI/litellm_lit4748_autorouter_logs
tin-berri Jul 24, 2026
2124212
test(ui): characterise budgets, skills and ui-theme panels before mig…
yuneng-berri Jul 24, 2026
f231d46
test(ui): decouple access-groups, vector-stores and organizations tes…
yuneng-berri Jul 24, 2026
39f0b56
refactor(ui): migrate budgets, skills and ui-theme to shadcn
yuneng-berri Jul 24, 2026
ab1484b
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 24, 2026
f2d5317
test(ui): pin mcp-servers, tag-management and tool-policies behaviour…
yuneng-berri Jul 24, 2026
a1bacb6
refactor(ui): migrate access-groups, vector-stores, organizations to …
yuneng-berri Jul 24, 2026
1ab5ff2
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 24, 2026
33dc162
test(ui): pin logging-and-alerts, caching and policies behaviour befo…
yuneng-berri Jul 24, 2026
5973032
fix(ui): keep tab panel state across tab switches on the migrated routes
yuneng-berri Jul 24, 2026
b2cf17d
refactor(ui): migrate logging-and-alerts, caching and policies to shadcn
yuneng-berri Jul 24, 2026
68bba5a
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 24, 2026
428d232
refactor(ui): migrate mcp-servers, tag-management and tool-policies t…
yuneng-berri Jul 24, 2026
64f6f45
fix(ui): render each policy template parameter once
yuneng-berri Jul 24, 2026
bda431f
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 24, 2026
bd753ae
Merge pull request #34366 from BerriAI/litellm_/migrate-page-memory-9…
yuneng-berri Jul 24, 2026
f7f9dab
fix(ui): make the suggested MCP network range keyboard operable
yuneng-berri Jul 24, 2026
58e8798
test: remove tests that mutation analysis proved assert nothing
yuneng-berri Jul 24, 2026
4db6955
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 24, 2026
2bd7c86
Merge pull request #34465 from BerriAI/litellm_/dazzling-gagarin-3d4c69
yuneng-berri Jul 24, 2026
afa8fff
Merge pull request #34466 from BerriAI/litellm_/sleepy-pascal-0e7ee6
yuneng-berri Jul 24, 2026
33b9524
Merge pull request #34468 from BerriAI/litellm_/wonderful-northcutt-1…
yuneng-berri Jul 24, 2026
c742a90
Merge pull request #34334 from BerriAI/litellm_connect_page_standalone
tin-berri Jul 24, 2026
5e98e8f
Merge pull request #34469 from BerriAI/litellm_/blissful-torvalds-5a5be3
yuneng-berri Jul 24, 2026
a1aae95
test: replace deprecated gpt-5-codex with gpt-5.3-codex
yuneng-berri Jul 24, 2026
ae81625
feat(anthropic): add Claude Opus 5
mateo-berri Jul 24, 2026
0d483a7
test(e2e): pin the a2a bridge agent's Anthropic key so message/send w…
mubashir1osmani Jul 24, 2026
d6fd9d8
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 24, 2026
7257d0f
fix(guardrails/model_armor): handle None metadata in post_call _proce…
devin-ai-integration[bot] Jul 24, 2026
e7df795
Merge pull request #34518 from BerriAI/litellm_add_claude_opus_5
mateo-berri Jul 24, 2026
6a180e9
test(a2a): assert the property agent returns listings, not just non-e…
devin-ai-integration[bot] Jul 24, 2026
692b226
fix(logging): stop scheduling sync failure_handler concurrently with …
yassin-berriai Jul 24, 2026
f6a1050
fix(vertex): incrementally parse accumulated Gemini stream JSON to pr…
yassin-berriai Jul 24, 2026
74a87b5
Merge pull request #34520 from BerriAI/litellm_/replace-gpt5-codex-te…
yuneng-berri Jul 24, 2026
2ef64ac
fix(gateway): install bedrock-realtime extra for Nova Sonic realtime …
mubashir1osmani Jul 24, 2026
35dc982
feat(proxy): add SAML 2.0 SSO for the admin UI (#31429)
yassin-berriai Jul 24, 2026
198c121
fix(responses_bridge): keep one chat completion id per stream and alw…
mateo-berri Jul 24, 2026
8177230
feat(guardrails): add run_in_parallel opt-in for concurrent pre_call …
noahnistler Jul 24, 2026
7d9eec6
fix(proxy): return 400 instead of 500 for chat completions without me…
shivamrawat1 Jul 24, 2026
a376f72
fix(responses): stop treating stream_options as a Responses API param
shivamrawat1 Jul 24, 2026
593b12d
fix(azure_ai): advertise 1M context window for Claude Opus 4.6+ on Fo…
shivamrawat1 Jul 24, 2026
2ccdb08
feat(mcp): send RFC 8707 resource indicators on upstream OAuth legs
tin-berri Jul 22, 2026
e6b5511
test(cost_map): cover root map in the Foundry Claude context matrix
shivamrawat1 Jul 24, 2026
61d32c9
fix: handle explicit outputInfo: null in Vertex AI batch response (#3…
yucheng-berri Jul 24, 2026
7263aa0
fix(otel): keep an MCP tool call in one trace, anchored to its own re…
yassin-berriai Jul 24, 2026
57ed2ed
Merge pull request #34452 from BerriAI/litellm_lit4766_key_edit_mcp_t…
tin-berri Jul 24, 2026
745f7ad
perf(ui): back the logs End User filter with a paginated endpoint
yuneng-berri Jul 24, 2026
5246de6
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 24, 2026
9f9714c
test: remove five more zero-kill tests from test_http_handler
yuneng-berri Jul 24, 2026
ba9f6d7
refactor(ui): derive the dashboard object_permission type from the ge…
tin-berri Jul 24, 2026
3476240
fix(ui): keep entity usage tabs aligned with their panels
yuneng-berri Jul 24, 2026
9e56630
refactor(ui): migrate routing groups table onto the shared DataTable
yuneng-berri Jul 24, 2026
5f2c9a9
fix(ui): bind key duration input to one Form.Item so pre-filled expir…
ryan-crabbe-berri Jul 24, 2026
3966fbf
chore(ui): drop the unused antd table header sort dropdown
yuneng-berri Jul 24, 2026
79c5c16
feat(ui): migrate the Create Organization form to shadcn and react-ho…
ryan-crabbe-berri Jul 24, 2026
b9e922c
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 24, 2026
166c443
Merge pull request #34454 from BerriAI/litellm_dashboard_object_permi…
tin-berri Jul 24, 2026
86a02f4
test(e2e): cover MCP access-group tool selection at key creation (#34…
mubashir1osmani Jul 24, 2026
770f41b
fix(guardrails): keep guardrail information in spend logs when the ca…
tin-berri Jul 24, 2026
44b95bb
fix(logs): scope the End User filter to the caller's teams and bound …
yuneng-berri Jul 24, 2026
12bd6b5
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 24, 2026
7047a37
Merge pull request #34475 from BerriAI/litellm_/test-coverage-mutatio…
yuneng-berri Jul 24, 2026
3eaf7b1
Merge pull request #34573 from BerriAI/litellm_/key-activity-missing-…
yuneng-berri Jul 24, 2026
9777e95
fix(guardrails): stop reporting a no-op guardrail as applied on passt…
tin-berri Jul 23, 2026
9bd8929
fix(guardrails): derive tokens_saved when Headroom compression servic…
tin-berri Jul 24, 2026
6ff88ba
fix(responses): strip include_usage from stream_options instead of dr…
mateo-berri Jul 24, 2026
d389f83
Merge pull request #34411 from BerriAI/litellm_lit4650_passthrough_gu…
tin-berri Jul 24, 2026
a9e7dec
Merge pull request #34547 from BerriAI/litellm_fix_chat_completions_m…
shivamrawat1 Jul 24, 2026
842f32d
Merge pull request #34458 from BerriAI/litellm_lit4759_guardrail_meta…
tin-berri Jul 25, 2026
3489e65
fix(mcp): use a toolset row's stored tool name as written
tin-berri Jul 24, 2026
cfb7edb
Merge pull request #34549 from BerriAI/litellm_fix_stream_options_res…
mateo-berri Jul 25, 2026
76b0b10
fix(guardrails): add /v1/messages support for Straiker plugin (#34548)
yucheng-berri Jul 25, 2026
f68abdc
chore: merge litellm_internal_staging into litellm_fix_responses_brid…
mateo-berri Jul 25, 2026
26f6ff2
fix(proxy): cap tool spend window at 30 days and bound every SpendLog…
tin-berri Jul 25, 2026
44f571a
fix(logs): keep the End User filter window in step with the logs table
yuneng-berri Jul 25, 2026
2a50b3a
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 25, 2026
5677bc2
fix(proxy/batches): resolve managed unified input_file_id to storage_…
yucheng-berri Jul 25, 2026
30b7fd1
fix(proxy): label the tool spend clamp accurately (start capped at 30…
tin-berri Jul 25, 2026
2d6b574
Merge pull request #34578 from BerriAI/litellm_headroom_tokens_saved
tin-berri Jul 25, 2026
fc278bb
refactor(logs): match ui_view_spend_logs' team-scope clause shape
yuneng-berri Jul 25, 2026
5fc4a05
test(proxy): cover the cleanup run-loop backstop branch
tin-berri Jul 25, 2026
3ca9d55
fix(proxy): anchor the tool spend clamp floor to UTC midnight
tin-berri Jul 25, 2026
78348fd
Merge pull request #34571 from BerriAI/litellm_/migrate-simple-table-…
yuneng-berri Jul 25, 2026
838c7a7
feat(passthrough): record upstream-reported cost and token usage
yuneng-berri Jul 25, 2026
f2315b0
Merge branch 'litellm_internal_staging' into litellm_/fil-china-passt…
yuneng-berri Jul 25, 2026
579f41d
fix(proxy): attribute org spend for team-linked credentials minted wi…
ryan-crabbe-berri Jul 25, 2026
48e7773
refactor(logs): make the end-user filter scan cap a fixed constant
yuneng-berri Jul 25, 2026
b03004a
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 25, 2026
ab44c8a
fix(passthrough): let an upstream-reported cost outrank cost_per_request
yuneng-berri Jul 25, 2026
fc5ab31
refactor(proxy/batches): make managed-file resolution purely additive…
yucheng-berri Jul 25, 2026
9c48ad4
fix(passthrough): honor the zero fallback and aggregate-only TPM usage
yuneng-berri Jul 25, 2026
7b019cf
Merge pull request #34446 from BerriAI/litellm_fix_mantle_missing_usage
mateo-berri Jul 25, 2026
c1ea54a
fix(batches): reject unresolvable list cursors and derive has_more fr…
mateo-berri Jul 25, 2026
85ad697
fix(batches): keep an empty `after` meaning "start from the beginning"
mateo-berri Jul 25, 2026
b9b27c2
Merge pull request #34582 from BerriAI/litellm_toolspend_30d_bound
tin-berri Jul 25, 2026
bac17a9
fix(ci): scope UI lint to the files a PR actually changed
mateo-berri Jul 25, 2026
5e34e04
fix(proxy): sanitize per-key callback config out of logged metadata
yuneng-berri Jul 25, 2026
c63fb4c
Merge pull request #34590 from BerriAI/litellm_passthrough_upstream_r…
yuneng-berri Jul 25, 2026
a66bac3
Merge pull request #34579 from BerriAI/litellm_/litellm-logs-ui-lag-0…
yuneng-berri Jul 25, 2026
21de59b
feat(ui): deep-link virtual key detail view via ?key= query param (#3…
ryan-crabbe-berri Jul 25, 2026
57894b5
revert(ui): return Models + Endpoints tabs to in-memory, keep the ?mo…
ryan-crabbe-berri Jul 25, 2026
2a55d23
fix(proxy): merge model-level guardrails before pre_call_hook (#29654)
hclsys Jul 25, 2026
96f58fa
fix(router): don't cool down parent deployment on advisor sub-call fa…
devin-ai-integration[bot] Jul 25, 2026
3467871
chore(deps): bump gitpython and postcss to advisory-clear versions
yuneng-berri Jul 25, 2026
00a182a
test(e2e): cover /vllm passthrough files + batches (skipped, needs ba…
mubashir1osmani Jul 25, 2026
7075919
test(e2e): point four suites at models the providers still serve (#34…
mubashir1osmani Jul 25, 2026
fa9e0f1
test(e2e): make the bedrock guardrail test match the guardrail it poi…
mubashir1osmani Jul 25, 2026
502d360
fix(otel): stamp an MCP tool failure on the request that carried it (…
yassin-berriai Jul 25, 2026
c572983
test(e2e): set reasoning_effort=none for gpt-5.6 chat tool calls (#34…
mubashir1osmani Jul 25, 2026
a11383d
test(e2e): cover /v1/images/edits (#34476)
mubashir1osmani Jul 25, 2026
2227bd5
Merge pull request #34634 from BerriAI/litellm_/osv-scanner-issues-d1…
yuneng-berri Jul 25, 2026
6cc136d
fix(proxy): hash caller-supplied key in key update audit log object_i…
yucheng-berri Jul 25, 2026
3c28757
fix(cost-optimization): replace savings methodology Collapse with per…
tin-berri Jul 25, 2026
8ce3655
test(e2e): cover /openai chat passthrough cost logging (#34470)
mubashir1osmani Jul 25, 2026
fe5cc1e
fix(proxy): global max_budget ignores budget_duration; enforce agains…
ryan-crabbe-berri Jul 25, 2026
4e3dbea
Merge pull request #34559 from BerriAI/litellm_lit3419_toolset_prefix
tin-berri Jul 25, 2026
1a0acaa
fix(auth): route JWT default-team into memberships instead of the cre…
ryan-crabbe-berri Jul 25, 2026
16550ed
ci: drop docker-based SERVER_ROOT_PATH e2e in favor of a unit test (#…
devin-ai-integration[bot] Jul 25, 2026
998a372
test: stop bedrock tool acompletion tests from making real network ca…
ryan-crabbe-berri Jul 25, 2026
df1f9fa
fix(proxy): stop litellm/proxy from shadowing installed packages on s…
yassin-berriai Jul 25, 2026
7c1d9fa
Merge pull request #34598 from BerriAI/litellm_cost_savings_tooltip
tin-berri Jul 25, 2026
c63e24b
fix(guardrails): preserve cache_control breakpoints in compresr write…
tin-berri Jul 25, 2026
d816478
Merge pull request #34600 from BerriAI/litellm_fix_ui_lint_stale_base…
mateo-berri Jul 25, 2026
cc5d400
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
mateo-berri Jul 25, 2026
7aa0cc2
Merge pull request #34340 from BerriAI/litellm_lit4703_mcp_403_leak
tin-berri Jul 25, 2026
1fa40bd
feat(cost-optimization): anchor the savings line at a $0 range start
tin-berri Jul 25, 2026
4edf8f1
Merge pull request #34192 from BerriAI/litellm_fix_batch_list_paginat…
mateo-berri Jul 25, 2026
64fc19d
fix(e2e): stop tests from breaking the shared proxy for every suite a…
mubashir1osmani Jul 25, 2026
054976e
Merge pull request #34453 from BerriAI/litellm_hourly_savings_timeseries
tin-berri Jul 25, 2026
1776daa
fix(bedrock): stop replaying expired Google OIDC tokens to STS on gua…
yucheng-berri Jul 25, 2026
32e276a
bump: litellm-enterprise 0.1.51 -> 0.1.52, litellm-proxy-extras 0.4.8…
yuneng-berri Jul 25, 2026
d05d1f3
Merge pull request #34669 from BerriAI/litellm_/release-version-bump-…
yuneng-berri Jul 25, 2026
d19787e
chore: update Next.js build artifacts (2026-07-26 00:02 UTC, node v20…
yuneng-berri Jul 26, 2026
215f055
Merge pull request #34671 from BerriAI/litellm_/release-ui-build-039815
yuneng-berri Jul 26, 2026
ecc4917
fix(ui): restore the wide Add MCP Server dialog
yuneng-berri Jul 26, 2026
2ce5900
style(ui): match MCP Servers tabs to the dashboard's line tab pattern
yuneng-berri Jul 26, 2026
b439a9a
Merge pull request #34556 from BerriAI/litellm_azure_claude_1m_context
mateo-berri Jul 26, 2026
a3f81ed
fix(ui): stop the custom-server action colliding with the dialog clos…
yuneng-berri Jul 26, 2026
7cdc89f
Merge branch 'litellm_internal_staging' into litellm_/modal-size-rest…
yuneng-berri Jul 26, 2026
086cbb2
fix(ui): center vertical toolbar dividers
yuneng-berri Jul 26, 2026
f7078e2
Merge pull request #34265 from BerriAI/litellm_lit4339_upstream_resource
tin-berri Jul 26, 2026
2412326
fix(guardrails): resolve judge_model credentials via lazy Router look…
devin-ai-integration[bot] Jul 26, 2026
c8b0530
fix(proxy): roll up tool spend daily instead of scanning SpendLogs
tin-berri Jul 26, 2026
984051f
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 26, 2026
1912ea2
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Jul 26, 2026
9dbf7c3
fix(ui): keep the spend-by-tool legend from overlapping the charts
tin-berri Jul 26, 2026
5d77c39
fix(ui): color spend-by-tool charts with an ordered ramp
tin-berri Jul 26, 2026
55ff0e1
fix(ui): truncate long team names in the models table team dropdown
yuneng-berri Jul 26, 2026
7b65508
Merge branch 'litellm_internal_staging' into litellm_/model-table-dro…
yuneng-berri Jul 26, 2026
708a3a1
fix(ui): use a single muted blue ramp for the tool charts
tin-berri Jul 26, 2026
cb78491
refactor(management): move the logs end-user filter onto /management/v1
yuneng-berri Jul 26, 2026
78e76ff
Merge branch 'litellm_internal_staging' into litellm_/management-endp…
yuneng-berri Jul 26, 2026
cf127e1
fix(management): stop emitting a dead docs link in problem documents
yuneng-berri Jul 26, 2026
1240c1a
fix(proxy): close the adversarial-review findings on the tool spend r…
tin-berri Jul 26, 2026
fbfb63c
chore(typing): clear 2.7k basedpyright Any errors across 15 hotspot f…
mateo-berri Jul 27, 2026
b089992
fix(install): pass an explicit Python version request to uv tool install
tin-berri Jul 27, 2026
b7a3516
fix(management): cover the new control plane route in CI's two guards
yuneng-berri Jul 27, 2026
63d6d8a
Merge pull request #34685 from BerriAI/litellm_/mcp-tabs-styling-dd340c
yuneng-berri Jul 27, 2026
9354849
Merge pull request #34684 from BerriAI/litellm_/model-table-divider-c…
yuneng-berri Jul 27, 2026
19348db
Merge pull request #34679 from BerriAI/litellm_/modal-size-restoratio…
yuneng-berri Jul 27, 2026
2f2e1e7
Merge pull request #34689 from BerriAI/litellm_/model-table-dropdown-…
yuneng-berri Jul 27, 2026
c3edf24
test(proxy): pin both branches of the validation exception handler
yuneng-berri Jul 27, 2026
c9d067f
chore(deps): bump gitpython to 3.1.55 and brace-expansion to 5.0.8
yuneng-berri Jul 27, 2026
612eb61
fix(e2e/ui): resolve dashboard base URL from env instead of hardcodin…
mubashir1osmani Jul 27, 2026
079003b
Merge pull request #34798 from BerriAI/litellm_/dependency-vulnerabil…
yuneng-berri Jul 27, 2026
10cd428
Merge pull request #34660 from BerriAI/litellm_lit4804_compresr_cache…
tin-berri Jul 27, 2026
33fadd7
fix(guardrails): compress content-parts messages in headroom guardrail
tin-berri Jul 27, 2026
c37fb75
Merge pull request #34750 from BerriAI/litellm_installcli_pyselect
tin-berri Jul 27, 2026
2b7e01b
Merge pull request #34691 from BerriAI/litellm_/management-endpoint-s…
yuneng-berri Jul 27, 2026
2e12614
fix(proxy): stop retrying post-send ambiguous DB errors in every spen…
tin-berri Jul 27, 2026
a7e6656
fix: match exact class in callback dedup so a custom subclass does no…
yucheng-berri Jul 27, 2026
bb6bb66
fix(prometheus): populate cache write token metrics for OpenAI-style …
yucheng-berri Jul 27, 2026
a87754d
fix(db_scripts): pin the tool spend backfill session to UTC
tin-berri Jul 27, 2026
26ab846
ci(lint): raise node heap for the basedpyright budget check
mateo-berri Jul 27, 2026
8b08c31
test: cover volcengine responses and openai evals transformations
mateo-berri Jul 27, 2026
77ed122
Merge pull request #34745 from BerriAI/litellm_decrease_anys_fable
mateo-berri Jul 27, 2026
a10365e
test(e2e): stop racing control-plane writes across the mcp, a2a, guar…
mubashir1osmani Jul 27, 2026
396554c
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
mateo-berri Jul 27, 2026
300e710
fix(router): release the pre-routing strategy slot when a deployment …
shivamrawat1 Jul 24, 2026
4299c6d
fix(responses-bridge): return CustomStreamWrapper from the completed-…
mateo-berri Jul 27, 2026
47a0c22
fix(router): rebuild the adaptive companion when an upserted complexi…
tin-berri Jul 27, 2026
0171170
fix(ui): validate default team values in Default User Settings (#34815)
ryan-crabbe-berri Jul 27, 2026
38ea85b
Merge pull request #32583 from BerriAI/litellm_/redact-langsmith-api-…
yuneng-berri Jul 27, 2026
9bb75d6
Merge pull request #34675 from BerriAI/litellm_tool_spend_rollup
tin-berri Jul 27, 2026
50bdf25
fix(router): repair deployment indices before releasing strategies on…
tin-berri Jul 27, 2026
2a7885a
Merge pull request #34539 from BerriAI/litellm_fix_responses_bridge_s…
mateo-berri Jul 27, 2026
09856a4
Merge pull request #34586 from BerriAI/litellm_lit4795_headroom_anthr…
tin-berri Jul 27, 2026
8f86c87
Merge pull request #34564 from BerriAI/litellm_fix_router_registry_le…
tin-berri Jul 27, 2026
bdf8f8c
fix(guardrails): classify all 4xx HTTPException guardrail blocks as i…
devin-ai-integration[bot] Jul 27, 2026
f2cda74
chore: update Next.js build artifacts (2026-07-28 00:06 UTC, node v20…
yuneng-berri Jul 28, 2026
5c95017
test: unstale the reasoning-effort grid count and the responses bridg…
yuneng-berri Jul 28, 2026
3c0b1db
test(e2e): realign Admin UI specs with the MCP dialog and keyless lan…
yuneng-berri Jul 28, 2026
328e41b
test(e2e): unblock the ui suite, fix the mcp registration race, park …
mubashir1osmani Jul 28, 2026
daf22ec
test(e2e): make MCP and prometheus e2e tests robust to data-plane syn…
ryan-crabbe-berri Jul 28, 2026
bb4625f
Merge branch 'datareply/prod' into litellm_internal_staging
fab-siciliano Jul 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
51 changes: 30 additions & 21 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1029,6 +1029,8 @@ jobs:
- *python312_image
working_directory: ~/project
resource_class: large
environment:
REQUEST_TIMEOUT: "180"

steps:
- checkout
Expand Down Expand Up @@ -1058,7 +1060,8 @@ jobs:
-v -x \
--junitxml=test-results/junit.xml \
--durations=5 \
-n 8"
-n 8 \
--reruns 1 --only-rerun Timeout"
no_output_timeout: 15m

# Store test results
Expand Down Expand Up @@ -1610,14 +1613,14 @@ jobs:
- run:
name: Run helm lint
command: |
helm lint ./deploy/charts/litellm-helm
helm lint ./helm/litellm-helm

# Run helm tests
- run:
name: Run helm tests
command: |
IMAGE_TAG=${CIRCLE_SHA1:-ci}
helm install litellm ./deploy/charts/litellm-helm -f ./deploy/charts/litellm-helm/ci/test-values.yaml \
helm install litellm ./helm/litellm-helm -f ./helm/litellm-helm/ci/test-values.yaml \
--set image.repository=litellm-ci \
--set image.tag=${IMAGE_TAG} \
--set image.pullPolicy=Never
Expand Down Expand Up @@ -2728,7 +2731,7 @@ jobs:
- ~/.cache/uv
- restore_cache:
keys:
- ui-e2e-node-deps-v2-{{ checksum "ui/litellm-dashboard/package-lock.json" }}
- ui-e2e-node-deps-v3-{{ checksum "ui/litellm-dashboard/package-lock.json" }}-{{ checksum "tests/e2e/ui/package-lock.json" }}
- run:
name: Install Node dependencies and Playwright
# The cimg/python:3.12-browsers image already ships the Chromium system
Expand All @@ -2739,11 +2742,14 @@ jobs:
command: |
cd ui/litellm-dashboard
npm ci
cd ../../tests/e2e/ui
npm ci
npx playwright install chromium
- save_cache:
key: ui-e2e-node-deps-v2-{{ checksum "ui/litellm-dashboard/package-lock.json" }}
key: ui-e2e-node-deps-v3-{{ checksum "ui/litellm-dashboard/package-lock.json" }}-{{ checksum "tests/e2e/ui/package-lock.json" }}
paths:
- ui/litellm-dashboard/node_modules
- tests/e2e/ui/node_modules
- ~/.cache/ms-playwright
- run:
name: Build UI from source
Expand Down Expand Up @@ -2774,10 +2780,10 @@ jobs:
name: Seed database
command: |
PGPASSWORD=e2epassword psql -h localhost -p 5432 -U e2euser -d litellm_e2e \
-f ui/litellm-dashboard/e2e_tests/fixtures/seed.sql
-f tests/e2e/ui/fixtures/seed.sql
- run:
name: Start mock LLM server
command: uv run --no-sync python ui/litellm-dashboard/e2e_tests/fixtures/mock_llm_server/server.py
command: uv run --no-sync python tests/e2e/ui/fixtures/mock_llm_server/server.py
background: true
- run:
name: Start LiteLLM proxy
Expand All @@ -2795,7 +2801,7 @@ jobs:
command: |
LITELLM_LICENSE="$LITELLM_LICENSE" \
uv run --no-sync python -m litellm.proxy.proxy_cli \
--config ui/litellm-dashboard/e2e_tests/fixtures/config.yml \
--config tests/e2e/ui/fixtures/config.yml \
--port 4000
background: true
- run:
Expand All @@ -2816,15 +2822,15 @@ jobs:
# Forward LITELLM_LICENSE so license.spec.ts can detect that the
# proxy was launched with a license and assert premium_user=true.
command: |
cd ui/litellm-dashboard
cd tests/e2e/ui
LITELLM_LICENSE="$LITELLM_LICENSE" \
npx playwright test --config e2e_tests/playwright.config.ts
npx playwright test --config playwright.config.ts
no_output_timeout: 10m
- store_artifacts:
path: ui/litellm-dashboard/test-results
path: tests/e2e/ui/test-results
destination: e2e-test-results
- store_artifacts:
path: ui/litellm-dashboard/playwright-report
path: tests/e2e/ui/playwright-report
destination: e2e-playwright-report

e2e_ui_testing_server_root_path:
Expand Down Expand Up @@ -2867,17 +2873,20 @@ jobs:
- ~/.cache/uv
- restore_cache:
keys:
- ui-e2e-node-deps-v2-{{ checksum "ui/litellm-dashboard/package-lock.json" }}
- ui-e2e-node-deps-v3-{{ checksum "ui/litellm-dashboard/package-lock.json" }}-{{ checksum "tests/e2e/ui/package-lock.json" }}
- run:
name: Install Node dependencies and Playwright
command: |
cd ui/litellm-dashboard
npm ci
cd ../../tests/e2e/ui
npm ci
npx playwright install chromium
- save_cache:
key: ui-e2e-node-deps-v2-{{ checksum "ui/litellm-dashboard/package-lock.json" }}
key: ui-e2e-node-deps-v3-{{ checksum "ui/litellm-dashboard/package-lock.json" }}-{{ checksum "tests/e2e/ui/package-lock.json" }}
paths:
- ui/litellm-dashboard/node_modules
- tests/e2e/ui/node_modules
- ~/.cache/ms-playwright
- run:
name: Build UI from source
Expand All @@ -2899,10 +2908,10 @@ jobs:
name: Seed database
command: |
PGPASSWORD=e2epassword psql -h localhost -p 5432 -U e2euser -d litellm_e2e \
-f ui/litellm-dashboard/e2e_tests/fixtures/seed.sql
-f tests/e2e/ui/fixtures/seed.sql
- run:
name: Start mock LLM server
command: uv run --no-sync python ui/litellm-dashboard/e2e_tests/fixtures/mock_llm_server/server.py
command: uv run --no-sync python tests/e2e/ui/fixtures/mock_llm_server/server.py
background: true
- run:
name: Start LiteLLM proxy under a server root path
Expand All @@ -2915,7 +2924,7 @@ jobs:
command: |
LITELLM_LICENSE="$LITELLM_LICENSE" \
uv run --no-sync python -m litellm.proxy.proxy_cli \
--config ui/litellm-dashboard/e2e_tests/fixtures/config.yml \
--config tests/e2e/ui/fixtures/config.yml \
--port 4000
background: true
- run:
Expand All @@ -2934,15 +2943,15 @@ jobs:
- run:
name: Run migration smoke under SERVER_ROOT_PATH
command: |
cd ui/litellm-dashboard
cd tests/e2e/ui
LITELLM_LICENSE="$LITELLM_LICENSE" \
npx playwright test --config e2e_tests/migration.serverRootPath.config.ts
npx playwright test --config migration.serverRootPath.config.ts
no_output_timeout: 10m
- store_artifacts:
path: ui/litellm-dashboard/test-results
path: tests/e2e/ui/test-results
destination: e2e-server-root-path-test-results
- store_artifacts:
path: ui/litellm-dashboard/playwright-report
path: tests/e2e/ui/playwright-report
destination: e2e-server-root-path-playwright-report

build_docker_database_image:
Expand Down
2 changes: 1 addition & 1 deletion .circleci/scripts/classify_changes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ has_backend=false
while IFS= read -r file || [ -n "$file" ]; do
[ -n "$file" ] || continue
case "$file" in
ui/*) has_client=true ;;
ui/* | tests/e2e/ui/*) has_client=true ;;
docs/* | *.md | *.mdx) : ;;
*) has_backend=true ;;
esac
Expand Down
3 changes: 3 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/ui/ @yuneng-jiang @ryan-crabbe-berri
/litellm/proxy/_experimental/out/ @yuneng-jiang @ryan-crabbe-berri
/ui/litellm-dashboard/src/lib/http/schema.d.ts
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ body:
id: steps-to-reproduce
attributes:
label: Steps to Reproduce
description: Please provide detailed steps to reproduce this bug(A curl/python code to reproduce the bug)
description: Please provide a numbered list of the exact steps to reproduce this bug (include a curl/python snippet to reproduce it). Number each step (1., 2., 3., ...) in the order you performed them.
placeholder: |
1. config.yaml file/ .env file/ etc.
2. Run the following code...
Expand Down
48 changes: 48 additions & 0 deletions .github/actions/detect-backend-changes/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: "Detect backend-relevant changes"
description: >-
Classify the pull request's changed files with .circleci/scripts/classify_changes.sh
and expose decision=run|skip. decision=skip means only ui/**, **.md or **.mdx files
changed, so callers can short-circuit expensive steps while the job still completes
successfully and satisfies its required status check. The decision defaults to run for
any non pull_request event or whenever the changed set cannot be resolved, so tests are
never skipped when the classification is uncertain.

outputs:
decision:
description: "run when backend-relevant files changed, otherwise skip"
value: ${{ steps.classify.outputs.decision }}

runs:
using: composite
steps:
- id: classify
shell: bash
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
run: |
set -uo pipefail
if [ -z "${BASE_SHA:-}" ]; then
echo "detect-backend-changes: not a pull_request event; running job"
echo "decision=run" >> "${GITHUB_OUTPUT}"
exit 0
fi
if ! git fetch --no-tags --depth=1 origin "${BASE_SHA}" >/dev/null 2>&1; then
echo "detect-backend-changes: could not fetch base ${BASE_SHA}; running job"
echo "decision=run" >> "${GITHUB_OUTPUT}"
exit 0
fi
changed="$(git diff --name-only "${BASE_SHA}" HEAD 2>/dev/null)" || {
echo "detect-backend-changes: git diff failed; running job"
echo "decision=run" >> "${GITHUB_OUTPUT}"
exit 0
}
if [ -z "${changed}" ]; then
echo "detect-backend-changes: no changed files vs ${BASE_SHA}; skipping job"
echo "decision=skip" >> "${GITHUB_OUTPUT}"
exit 0
fi
echo "detect-backend-changes: changed files vs ${BASE_SHA}:"
printf '%s\n' "${changed}" | sed 's/^/ /'
decision="$(printf '%s\n' "${changed}" | bash .circleci/scripts/classify_changes.sh backend)" || decision="run"
echo "detect-backend-changes: decision=${decision}"
echo "decision=${decision}" >> "${GITHUB_OUTPUT}"
47 changes: 47 additions & 0 deletions .github/actions/setup-uv-with-retries/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: "Set up uv with retries"
description: >-
Install uv via astral-sh/setup-uv, retrying on transient failures. Even with
an exact pinned version, the action resolves the artifact URL by fetching
https://raw.githubusercontent.com/astral-sh/versions/main/v1/uv.ndjson in a
single request with no retry, timeout, or fallback, so one connection-level
network error ("fetch failed") fails the whole job before any test runs.
Retrying the full step covers the manifest fetch and the binary download.

inputs:
version:
description: "uv version to install"
required: true

runs:
using: composite
steps:
- name: Set up uv (attempt 1)
id: attempt-1
continue-on-error: true
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
with:
version: ${{ inputs.version }}

- name: Wait before attempt 2
if: steps.attempt-1.outcome == 'failure'
shell: bash
run: sleep 15

- name: Set up uv (attempt 2)
id: attempt-2
if: steps.attempt-1.outcome == 'failure'
continue-on-error: true
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
with:
version: ${{ inputs.version }}

- name: Wait before attempt 3
if: steps.attempt-2.outcome == 'failure'
shell: bash
run: sleep 30

- name: Set up uv (attempt 3)
if: steps.attempt-2.outcome == 'failure'
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
with:
version: ${{ inputs.version }}
42 changes: 41 additions & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
## TLDR

<!-- Fill in the bullets below and keep each one short and concrete: one line per bullet, roughly 10 words max
This section must be extremely human parsable, comprehensible, and readable: its target audience is humans, not AI agents -->

Problem this solves:

- <blah>
- ...

How it solves it:

- <blah>
- ...

## Relevant issues

<!-- e.g., "Fixes #000" -->
Expand All @@ -13,7 +28,7 @@
- [ ] I have added meaningful tests
- [ ] My PR passes all CI/CD checks (e.g., lint, format, unit tests)
- [ ] My PR's scope is as isolated as possible; it only solves 1 specific problem
- [ ] I have requested a Greptile review by commenting `@greptileai` and received a **Confidence Score of at least 4/5** before requesting a maintainer review
- [ ] I have received a Greptile **Confidence Score of at least 4/5** before requesting a maintainer review (Greptile reviews automatically once the PR is opened; only comment `@greptileai` to re-request a review after pushing changes)

## Delays in PR merge?

Expand All @@ -24,6 +39,7 @@ If you're seeing a delay in your PR being merged, ping the LiteLLM Team on [Slac
<!-- Include screenshots, screen recordings, or command (e.g., curl) + output demonstrating that your changes work as expected
The proof must be completely e2e with no mocks, using, for example, actual LLM calls costing real $. `pytest` commands are not enough
For bug fixes: show reproduction before the fix and passing behavior after
Include the commit hash each proof was captured at, for both the before and the after runs
For new features: show the feature working end-to-end
For UI changes: include before/after screenshots -->

Expand All @@ -40,3 +56,27 @@ If you're seeing a delay in your PR being merged, ping the LiteLLM Team on [Slac
✅ Test

## Changes

## QA runbook

<!-- Only needed when your PR edits tests/e2e; delete this section otherwise

For each e2e test you added or changed, list the manual steps a reviewer can follow to reproduce it by hand against a live proxy, mapping 1:1 to what the test asserts: one top-level bullet per test giving its pytest node id followed by what it proves in plain words, then a nested "- [ ]" checklist where each item is a concrete action (route, request body, expected response) and the final item is the sanity-check step shown in the examples. Note environment prerequisites (provider credentials, config flags) and any nuances a manual run will hit. See PRs #32914 and #32963 for full examples

Example checklists:

- tests/e2e/quota_management/ratelimit/test_rate_limit_e2e.py::TestKeyRateLimits::test_rpm_limit_blocks_over_limit - a key allowed 2 requests a minute serves exactly 2 and refuses the 3rd
- [ ] Generate a limited key: curl -X POST http://localhost:4000/key/generate -H "Authorization: Bearer sk-1234" -d '{"rpm_limit": 2}'
- [ ] Send three /v1/chat/completions requests with that key inside one minute
- [ ] Expect the first two to return 200 and the third to return 429 naming the rpm limit
- [ ] Sanity check: this test makes sense to add and is not hand-wavey (e.g., assert actual expected spend instead of just spend > 0) or potentially flaky

- tests/e2e/management/test_management_e2e.py::TestModelRoutes::test_model_create_appears_in_ui - a deployment created through the API shows up on the Admin UI models page
- [ ] POST /model/new with the master key, a bedrock model, and aws_region_name (needs STORE_MODEL_IN_DB=True and AWS credentials)
- [ ] Open http://localhost:4000/ui/?page=models and expect a deployment row showing the returned model id
- [ ] Sanity check: this test makes sense to add and is not hand-wavey (e.g., assert actual expected spend instead of just spend > 0) or potentially flaky
-->

### Final Attestation

- [ ] The tests check the right things, including the edge cases, and regressions in the respective real-world customer use-cases are not possible after this PR
Loading
Loading