Commit graph

49317 commits

Author SHA1 Message Date
mateo
12c71ab407 fix(proxy): block bulk user creation during the master key lockout
Some checks failed
Terraform Provider / gofmt, vet, build, test (push) Has been cancelled
ai-gateway image / ai-gateway release image (push) Has been cancelled
LiteLLM Rust / rust-lint (push) Has been cancelled
LiteLLM Rust / rust-test (push) Has been cancelled
Terraform Provider / Provider endpoints vs proxy OpenAPI schema (push) Has been cancelled
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 18:40:44 +00:00
mateo
0f1a44fb15 chore(ui): regen schema types after main merge
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 18:16:02 +00:00
Devin AI
417d33911c Merge remote-tracking branch 'origin/main' into litellm_refuse_example_master_key
# Conflicts:
#	litellm/proxy/_types.py
2026-09-15 18:15:12 +00:00
ryan-crabbe-berri
8b6c398b92
Merge pull request #41039 from BerriAI/litellm_bulk_user_delete
feat(proxy): add POST /user/bulk_delete and POST /team/bulk_member_delete
2026-09-15 11:12:40 -07:00
mateo
a40804b7dc fix(proxy): block POST /user/new during the master key lockout
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 18:06:57 +00:00
ryan
6ea1085bc3 Merge branch 'main' into litellm_bulk_user_delete
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 18:03:15 +00:00
ryan-crabbe-berri
08b433267e
Merge pull request #40917 from BerriAI/litellm_credential_conflict_409
fix(credentials): answer 409 on a credential name collision, make Terraform adoption opt-in
2026-09-15 10:58:26 -07:00
ryan-crabbe-berri
6dcca8c4ae
Merge pull request #41028 from BerriAI/litellm_bulk_new_user
feat(proxy): add POST /management/v1/users/bulk for batched user and team membership creation
2026-09-15 10:57:46 -07:00
Mateo Wang
e5547a56a9
Merge pull request #41257 from BerriAI/litellm_pr_template_coding_tool_proof
docs(github): ask for interactive coding-tool proof in the PR template
2026-09-15 10:44:53 -07:00
ryan-crabbe-berri
a7f180fdd8 feat(terraform): make credential adoption opt-in, escape names in request URLs
Terraform's convention is that create does not seize a resource the
configuration never made, and credential_values holds secrets that are never
read back into state, so a silent takeover overwrites values no plan showed.
A name collision now fails with the terraform import command that adopts the
existing credential explicitly, and adopt_existing = true opts into taking it
over during create. The provider detects the conflict by the proxy's 409 and
keeps the Prisma string match as a fallback for older proxies

Credential names and model_id went into URLs raw, so a name with a slash or a
question mark hit the wrong route. Every credential URL is now built from a
package const through fmt.Sprintf with url.PathEscape or url.QueryEscape,
which the endpoint audit can resolve. Toggling adopt_existing alone no longer
sends a PATCH, so it does not rewrite the stored secret
2026-09-15 10:41:44 -07:00
ryan-crabbe-berri
81806f33cf fix(credentials): answer 409 on a name collision, let PATCH resolve values from model_id
POST /credentials let a duplicate name hit the unique index and handed back
Prisma's "Unique constraint failed" as a 500, so callers string-matched that
message to tell a caller mistake from a server fault. The unique violation now
maps to a 409 whose message names the PATCH route, two concurrent creates of
one name agree on it, and the detection lives in a repository helper the five
hand-rolled copies can move onto later

PATCH /credentials/{name} took a CredentialItem body, so the model_id the
Terraform adopt path sent was dropped. It now accepts UpdateCredentialItem and
shares the deployment lookup with create. Both handlers take the router as a
FastAPI dependency instead of reading the proxy global, which is what the
tests override
2026-09-15 10:41:43 -07:00
kerry-berri
b97bc10ec9
Merge pull request #41263 from BerriAI/litellm_usgov_rows_allow_price_list_source
test(pricing): let synced GovCloud Bedrock rows cite the AWS price list
2026-09-15 10:41:42 -07:00
mateo
cbe7857af2 chore(ui): regen schema types after main merge
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 17:23:34 +00:00
mateo
2195c0ea1c Merge remote-tracking branch 'origin/main' into litellm_refuse_example_master_key 2026-09-15 17:23:13 +00:00
Devin AI
9fce6e1989 test(pricing): let synced GovCloud Bedrock rows cite the AWS price list
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 17:09:12 +00:00
mateo
7f5278eab3 fix(proxy): cover credentials by_model route param in lockout
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 17:04:08 +00:00
tin-berri
3ad9a7f336
Merge pull request #41174 from BerriAI/litellm_tier_model_affinity
fix(router): preserve session model choice within each complexity tier
2026-09-15 09:54:53 -07:00
mateo-berri
a502afe608 docs(github): ask for interactive coding-tool proof in the PR template 2026-09-15 09:34:45 -07:00
mateo
5c2fc1c99d fix(proxy): extract request method helper to satisfy typing gates
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 16:14:11 +00:00
mateo
c504ca954e fix(proxy): annotate db user row with the prisma model type
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 15:56:00 +00:00
mateo
cedee4800a fix(proxy): read request method defensively for mock and scopeless requests
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 15:36:05 +00:00
mateo
ab95b8066e fix(proxy): keep plain-str user_role handling when dropping cast
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 15:15:24 +00:00
mateo
fd7f186929 fix: satisfy type-discipline and prettier gates
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 15:06:02 +00:00
mateo
8c2e910d8a fix(proxy): unblock CI - drop banned casts, gate missing request method, fix ui lint
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 15:01:22 +00:00
Devin AI
2bc38b0b65 Merge remote-tracking branch 'origin/main' into litellm_refuse_example_master_key
# Conflicts:
#	tests/test_litellm/proxy/auth/test_user_api_key_auth.py
#	tests/test_litellm/proxy/test__types.py
#	tests/test_litellm/test_utils.py
2026-09-15 14:24:56 +00:00
mateo
eaf1c15569 chore(ui): drop generated files swept into the previous commit
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 14:11:02 +00:00
mateo
ed886c518b revert(ui): keep the simplified key generate error mapping
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-15 14:10:47 +00:00
Devin AI
5b7690cd2f fix(ui): surface the master key lockout message in credential, model and key toasts 2026-09-15 14:10:15 +00:00
Devin AI
a9e8e196c0 style(proxy): format lockout condition 2026-09-15 13:54:46 +00:00
Devin AI
29971b3011 refactor(proxy): drop unused lockout action parameter 2026-09-15 13:54:27 +00:00
Devin AI
74c0e1a339 feat(proxy): lock out credential storage and virtual key management while the master key is insecure 2026-09-15 13:52:30 +00:00
mateo
b9b0f0e7ea Merge remote-tracking branch 'origin/litellm_internal_staging' into litellm_refuse_example_master_key 2026-09-15 13:36:33 +00:00
Mateo Wang
c8114ba41f
Merge pull request #40921 from BerriAI/litellm_unified_key_policy_hook
feat(proxy): unified custom_key_policy hook for key generate, update and regenerate
2026-09-15 06:34:28 -07:00
Mateo Wang
9496f16f12
Merge pull request #41173 from BerriAI/litellm_realtime_health_check_credential_name
fix(health): resolve litellm_credential_name in realtime health checks
2026-09-15 05:24:29 -07:00
mateo-berri
1f2d050386 Merge remote-tracking branch 'origin/main' into litellm_unified_key_policy_hook 2026-09-15 05:11:29 -07:00
mateo-berri
87b630429d fix(realtime): send openai and xai health check keys as bearer tokens 2026-09-15 02:20:09 -07:00
Mateo Wang
3ed6c19b8d
Merge pull request #40915 from BerriAI/litellm_internal_copy_37075
fix(vertex-live): bill Gemini Live sessions end to end (internal copy of #37075)
2026-09-15 02:06:49 -07:00
Mateo Wang
c274fd8781
Merge pull request #41168 from BerriAI/litellm_bedrock_wif_session_policy_coverage
fix(bedrock): grant rerank, retrieve, agent, and agentcore actions in the web identity session policy
2026-09-15 01:49:41 -07:00
mateo-berri
5969fbb052 refactor(realtime): freeze the empty credential mapping in the health check 2026-09-15 01:44:46 -07:00
mateo-berri
0770f663c1 fix(vertex-live): report repeated search queries once per grounded turn
The session usage collapsed duplicate query strings across turns while the
price was per turn, so two turns asking the same question paid two fees yet
reported web_search_requests 1. Sum each turn's grounding requests so the
counter matches the bill; duplicates within one turn still collapse.
2026-09-15 01:35:36 -07:00
mateo-berri
1771255b32 Merge remote-tracking branch 'origin/main' into litellm_realtime_health_check_credential_name 2026-09-15 01:17:31 -07:00
mateo-berri
d5938ff886 Merge remote-tracking branch 'origin/main' into litellm_bedrock_wif_session_policy_coverage 2026-09-15 01:16:45 -07:00
Mateo Wang
80b9ed4f2c
Merge pull request #41191 from BerriAI/litellm_router_test_cap_resets_per_fallback_hop
fix(router): count num_retries_per_request across fallback hops
2026-09-15 01:13:41 -07:00
Mateo Wang
e5cb8b7534
Merge pull request #40984 from BerriAI/litellm_anthropic_guardrail_system_and_tool_use
fix(guardrails): scan the Anthropic top-level system prompt and tool_use arguments
2026-09-15 00:55:42 -07:00
mateo-berri
1b040af414 test(router): type the retry-cap tests this PR adds or touches 2026-09-15 00:34:38 -07:00
mateo-berri
4f27573424 merge: origin/main into litellm_internal_copy_37075 2026-09-15 00:34:18 -07:00
yuneng-jiang
81863c1b17
Merge pull request #41188 from BerriAI/litellm_spend_reconciliation
test(spend): reconcile concurrent requests and daily activity
2026-09-15 00:32:20 -07:00
tin-berri
feab83aae1
Merge pull request #41186 from BerriAI/litellm_statusline_router_cost_label
fix(cli): label savings cost bars with the auto-router name
2026-09-15 00:32:08 -07:00
Tin Chi Lo
81340439fc fix(router): preserve session model choice within each complexity tier 2026-09-15 00:09:17 -07:00
mateo-berri
92714cac0c fix(guardrails): validate tool_use rewrites before writing text rewrites back
A guardrail that rewrites text and hands back tool_use arguments that are
not a JSON object used to leave the text rewrite applied when the request
was rejected, so failure logging saw a half-rewritten request. Every
rejection now happens before any write to system or messages.
2026-09-15 00:07:45 -07:00