Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
180 commits
Select commit Hold shift + click to select a range
d8c7e25
fix(batches): paginate managed batch list by unified_object_id cursor
shivamrawat1 Jul 21, 2026
93f2764
fix(batches): stabilize managed batch pagination with unified_object_…
shivamrawat1 Jul 21, 2026
050cef5
fix(mcp): stop leaking upstream server credentials in tool-call 403
tin-berri Jul 23, 2026
ee9f0db
fix(bedrock-mantle): backfill usage on non-streaming /v1/messages res…
shivamrawat1 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
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
a1aae95
test: replace deprecated gpt-5-codex with gpt-5.3-codex
yuneng-berri Jul 24, 2026
d6fd9d8
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-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
d91fd08
Fix cache leakage card layout to keep date picker on right (#34885)
tin-berri Jul 28, 2026
b930e2f
fix(gateway): route /a2a through the gateway component (#34958)
ryan-crabbe-berri Jul 28, 2026
01ffd12
fix(e2e): poll for both spend rows before asserting the cache-hit con…
ryan-crabbe-berri Jul 28, 2026
51ad1b0
test(e2e): skip passthrough headers test until stage can route custom…
ryan-crabbe-berri Jul 28, 2026
f4a68a7
feat(ui): mark Cost Optimization as beta in the left nav (#34984)
yuneng-berri Jul 28, 2026
7cd009c
fix(proxy): avoid DB outage during planned RDS IAM rotation (#34749)
mubashir1osmani 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/_test-unit-base.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ jobs:
- name: Install dependencies
if: steps.changes.outputs.decision != 'skip'
run: |
.github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router
.github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router --extra saml

- name: Generate Prisma client
if: steps.changes.outputs.decision != 'skip'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/mutation-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ jobs:

- name: Install dependencies
run: |
.github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router
.github/scripts/uv_sync_with_retries.sh --frozen --group ci --group proxy-dev --extra google --extra proxy --extra semantic-router --extra saml

- name: Generate Prisma client
env:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test-linting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ jobs:
- name: Check basedpyright budget (delta vs base)
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
NODE_OPTIONS: --max-old-space-size=12288
run: |
(uv run --no-sync basedpyright --outputjson || true) | uv run --no-sync python scripts/type_check_gate.py --base "$BASE_SHA"

Expand Down
10 changes: 9 additions & 1 deletion .github/workflows/test-litellm-ui-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,15 @@ jobs:
id: changed
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
# base.sha is the base branch tip from when the PR was opened, while
# actions/checkout leaves HEAD on a merge of the PR into the *current*
# base tip. "$BASE_SHA"...HEAD therefore spans every base-branch commit
# landed since, so a PR that touches no UI file still gets linted
# against hundreds of other people's files. Diff the PR head against its
# own merge base instead, which is exactly what this PR changed.
merge_base=$(git merge-base "$BASE_SHA" "$HEAD_SHA")
: > "$RUNNER_TEMP/prettier_files.txt"
: > "$RUNNER_TEMP/eslint_files.txt"
while IFS= read -r f; do
Expand All @@ -41,7 +49,7 @@ jobs:
*.json | *.css | *.scss | *.md | *.mdx | *.yml | *.yaml | *.html)
printf '%s\n' "$f" >> "$RUNNER_TEMP/prettier_files.txt" ;;
esac
done < <(git diff --name-only --diff-filter=ACMR --relative "$BASE_SHA"...HEAD -- .)
done < <(git diff --name-only --diff-filter=ACMR --relative "$merge_base" "$HEAD_SHA" -- .)
if [ -s "$RUNNER_TEMP/prettier_files.txt" ] || [ -s "$RUNNER_TEMP/eslint_files.txt" ]; then
echo "has_files=true" >> "$GITHUB_OUTPUT"
else
Expand Down
151 changes: 0 additions & 151 deletions .github/workflows/test_server_root_path.yml

This file was deleted.

2 changes: 2 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ RUN uv sync --frozen --no-install-project --no-install-workspace --no-default-gr
--extra proxy-runtime \
--extra extra_proxy \
--extra semantic-router \
--extra saml \
--python python3

# Copy full source tree
Expand All @@ -84,6 +85,7 @@ RUN uv sync --frozen --no-default-groups --no-editable \
--extra proxy-runtime \
--extra extra_proxy \
--extra semantic-router \
--extra saml \
--python python3

RUN HOME=/opt/prisma XDG_CACHE_HOME=/opt/prisma/.cache PRISMA_BINARY_CACHE_DIR=/opt/prisma/binaries \
Expand Down
4 changes: 4 additions & 0 deletions backend/routes/allowlist.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@
"/project/",
"/memory/",
"/mcp/",
# Control plane (see the List Endpoints + Tables standard). Every resource
# eventually moves under this prefix, so allowlist it once rather than
# per-resource.
"/management/v1/",
# Spend / analytics
"/spend/",
"/analytics/",
Expand Down
24 changes: 12 additions & 12 deletions basedpyright-code-budget.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"reportAny": {
"limit": 37484
"limit": 34906
},
"reportArgumentType": {
"limit": 2704
"limit": 2701
},
"reportAssignmentType": {
"limit": 330
Expand All @@ -12,7 +12,7 @@
"limit": 516
},
"reportCallIssue": {
"limit": 124
"limit": 123
},
"reportConstantRedefinition": {
"limit": 59
Expand All @@ -24,7 +24,7 @@
"limit": 42
},
"reportExplicitAny": {
"limit": 10389
"limit": 10230
},
"reportFunctionMemberAccess": {
"limit": 11
Expand Down Expand Up @@ -54,10 +54,10 @@
"limit": 0
},
"reportMissingParameterType": {
"limit": 5900
"limit": 5893
},
"reportMissingTypeArgument": {
"limit": 15903
"limit": 15886
},
"reportMissingTypeStubs": {
"limit": 41
Expand Down Expand Up @@ -99,31 +99,31 @@
"limit": 0
},
"reportUnknownArgumentType": {
"limit": 45894
"limit": 45870
},
"reportUnknownLambdaType": {
"limit": 113
},
"reportUnknownMemberType": {
"limit": 40539
"limit": 40525
},
"reportUnknownParameterType": {
"limit": 20403
"limit": 20384
},
"reportUnknownVariableType": {
"limit": 32141
"limit": 32099
},
"reportUnnecessaryCast": {
"limit": 177
},
"reportUnnecessaryComparison": {
"limit": 1025
"limit": 1023
},
"reportUnnecessaryContains": {
"limit": 7
},
"reportUnnecessaryIsInstance": {
"limit": 1209
"limit": 1206
},
"reportUntypedBaseClass": {
"limit": 165
Expand Down
46 changes: 46 additions & 0 deletions db_scripts/backfill_daily_tool_spend.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
-- One-shot backfill of the LiteLLM_DailyToolSpend rollup from the per-request
-- LiteLLM_SpendLogToolIndex x LiteLLM_SpendLogs tables.
--
-- This is an opt-in, manual operation. New deployments do not need it: the
-- rollup is written at request time from the moment the release is deployed.
-- Run it only if you want the Cost Optimization "Spend by tool" card to show
-- history from before the deploy, and only once.
--
-- IMPORTANT caveats before running:
--
-- 1. Pre-deploy index rows may include tools that were merely DECLARED in a
-- request body but never invoked (the release this ships with stops
-- recording those). For agentic clients that declare many tools per
-- request, backfilled history attributes each request's full spend to
-- every declared tool, overstating per-tool spend. Post-deploy rows do not
-- have this problem. If your traffic is mostly such clients, consider not
-- backfilling.
--
-- 2. Coverage is bounded by spend-log retention: rows older than
-- maximum_spend_logs_retention_period are already gone.
--
-- 3. Replace the cutover timestamp below with the time you deployed the
-- release, so backfilled per-request rows cannot double-count on top of
-- rollup rows the new writer already created. ON CONFLICT DO NOTHING is a
-- second guard for (date, tool_name) buckets the writer already touched:
-- such buckets keep the writer's numbers and skip the backfill's.
--
-- Usage:
-- psql "$DATABASE_URL" -v cutover="'2026-07-25T00:00:00Z'" -f db_scripts/backfill_daily_tool_spend.sql

SET TIME ZONE 'UTC';

INSERT INTO "LiteLLM_DailyToolSpend" (date, tool_name, spend, total_tokens, request_count, created_at, updated_at)
SELECT
to_char(ti.start_time, 'YYYY-MM-DD') AS date,
ti.tool_name,
COALESCE(SUM(sl.spend), 0) AS spend,
COALESCE(SUM(sl.total_tokens), 0) AS total_tokens,
COUNT(*) AS request_count,
now() AS created_at,
now() AS updated_at
FROM "LiteLLM_SpendLogToolIndex" ti
JOIN "LiteLLM_SpendLogs" sl ON sl.request_id = ti.request_id
WHERE ti.start_time < :cutover::timestamptz
GROUP BY 1, 2
ON CONFLICT (date, tool_name) DO NOTHING;
2 changes: 2 additions & 0 deletions docker/Dockerfile.database
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ RUN uv sync --frozen --no-install-project --no-install-workspace --no-default-gr
--extra proxy-runtime \
--extra extra_proxy \
--extra semantic-router \
--extra saml \
--python python3

# Copy full source tree
Expand All @@ -82,6 +83,7 @@ RUN uv sync --frozen --no-default-groups --no-editable \
--extra proxy-runtime \
--extra extra_proxy \
--extra semantic-router \
--extra saml \
--python python3

RUN HOME=/opt/prisma XDG_CACHE_HOME=/opt/prisma/.cache PRISMA_BINARY_CACHE_DIR=/opt/prisma/binaries \
Expand Down
3 changes: 3 additions & 0 deletions docker/Dockerfile.non_root
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ RUN --mount=type=cache,target=/app/.cache/uv,id=litellm-uv-cache \
--extra proxy-runtime \
--extra extra_proxy \
--extra semantic-router \
--extra saml \
--python python3

# Copy full source tree
Expand All @@ -94,6 +95,7 @@ RUN --mount=type=cache,target=/app/.cache/uv,id=litellm-uv-cache \
--extra proxy-runtime \
--extra extra_proxy \
--extra semantic-router \
--extra saml \
--python python3 \
--no-sources-package litellm-proxy-extras; \
else \
Expand All @@ -102,6 +104,7 @@ RUN --mount=type=cache,target=/app/.cache/uv,id=litellm-uv-cache \
--extra proxy-runtime \
--extra extra_proxy \
--extra semantic-router \
--extra saml \
--python python3; \
fi

Expand Down
Loading
Loading