Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
209 commits
Select commit Hold shift + click to select a range
c2f486a
fix: batch-limit stale managed object cleanup to prevent 300K row UPD…
ishaan-berri Apr 6, 2026
8b0fadf
[bug-fix]return actual status code - /v1/messages/count_tokens endpoi…
otaviofbrito Apr 6, 2026
414d396
feat(teams): per-member model scope + team default_team_member_models…
ishaan-berri Apr 6, 2026
0afffe4
feat: multiple concurrent budget windows per API key and team (#24883…
ishaan-berri Apr 6, 2026
a65a942
chore: sync schema.prisma copies from root
github-actions[bot] Apr 6, 2026
cf9fdff
fix(types): close unclosed paren on budget_limits field in TeamBase
ishaan-berri Apr 6, 2026
9e0fb6b
fix(tests): set default_team_member_models=None on team mocks to matc…
ishaan-berri Apr 7, 2026
1c238b6
fix(tests): update upsert tests to reflect new update-in-place behavi…
ishaan-berri Apr 7, 2026
4aed2c9
Update litellm/proxy/proxy_server.py
ishaan-berri Apr 7, 2026
67e491c
Potential fix for pull request finding 'CodeQL / Syntax error'
ishaan-berri Apr 7, 2026
0a1ded5
Potential fix for pull request finding 'CodeQL / Unused variable, imp…
ishaan-berri Apr 7, 2026
fdcab4d
Potential fix for pull request finding 'CodeQL / Cyclic import'
ishaan-berri Apr 7, 2026
e3c8867
Potential fix for pull request finding 'CodeQL / Unused variable, imp…
ishaan-berri Apr 7, 2026
c0101b1
fix(lint): extract _validate_plugin_source to reduce register_plugin …
ishaan-berri Apr 7, 2026
9de2ae6
fix(lint): extract _try_provider_token_count to reduce token_counter …
ishaan-berri Apr 7, 2026
87d7e86
feat(helm): add tpl support to extraContainers and extraInitContainers
jlav Apr 10, 2026
3df367b
fix(reset_budget_job): use spend_counter_cache from proxy_server in r…
ishaan-berri Apr 11, 2026
aff352b
fix(team_endpoints): suppress type error on budget_limits assignment
ishaan-berri Apr 11, 2026
d22a07a
Merge remote-tracking branch 'origin/main' into ci-fix-april6-fixes
ishaan-berri Apr 11, 2026
e5824b1
fix(docker): copy local litellm-proxy-extras migrations into Docker i…
ishaan-berri Apr 11, 2026
b28b82c
chore(ui): migrate GuardrailTestPlayground off @tremor/react to antd
ryan-crabbe-berri Apr 15, 2026
17568e8
chore(ui): use antd Typography in GuardrailTestPlayground
ryan-crabbe-berri Apr 15, 2026
3c9bf32
fix(bedrock): prevent negative streaming costs with start-only cache …
Sameerlite Apr 16, 2026
5aba184
Extract shared PKCE helpers into src/utils/pkce.ts
ryan-crabbe-berri Apr 16, 2026
72be35f
chore(ui): migrate router_settings page from Tremor to antd
ryan-crabbe-berri Apr 16, 2026
ff982bb
fix: return None for routing_strategy_args when not latency-based
ryan-crabbe-berri Apr 16, 2026
2606796
fix(ui): repair router_settings tests broken by full antd mock
ryan-crabbe-berri Apr 16, 2026
91bfbe6
fix(proxy): enforce organization boundaries in admin operations
stuxf Apr 16, 2026
815a2be
test: add regression tests for cross-org admin escalation
stuxf Apr 16, 2026
74a49b5
fix(proxy): read guardrail config from admin metadata, fix tag routin…
stuxf Apr 16, 2026
3cd5796
refactor: extract admin metadata helper, hoist loop-invariant tag res…
stuxf Apr 16, 2026
34e9be1
fix: merge team metadata in admin helper, remove turn_off_message_log…
stuxf Apr 16, 2026
413f898
test: update dynamic callback params test for turn_off_message_loggin…
stuxf Apr 16, 2026
9363f36
fix(proxy): add SSRF protection via resolve-and-rewrite for user-supp…
stuxf Apr 16, 2026
d15196b
fix(proxy): add safe_get/async_safe_get with redirect validation
stuxf Apr 16, 2026
037fb57
fix: preserve caller headers across redirect hops in safe_get
stuxf Apr 16, 2026
b94aaa7
fix: skip DNS resolution for base64 data in token counter, add unit t…
stuxf Apr 16, 2026
62ec396
test: mock SSRF validation in openapi spec URL test
stuxf Apr 16, 2026
814d03d
fix: fail-closed on unparseable IPs, rewrite HTTPS when SSL verify di…
stuxf Apr 16, 2026
e2a0c96
fix: redirect loop was dead code, clean up imports
stuxf Apr 16, 2026
00b25d6
fix: sync redirect bypass, Host header port, redirect loop dead code
stuxf Apr 16, 2026
1ba2be7
refactor: move url_utils to litellm_core_utils to avoid proxy dependency
stuxf Apr 16, 2026
30c6556
test: bypass SSRF validation in image handling tests
stuxf Apr 16, 2026
f5a9218
chore: remove unused asyncio import
stuxf Apr 16, 2026
1f50c6f
test: mock DNS resolution, hoist httpx import to module level
stuxf Apr 16, 2026
22572ea
fix: merge admin metadata from both metadata and litellm_metadata
stuxf Apr 16, 2026
1d3dda9
feat: add admin opt-out for user URL validation
stuxf Apr 16, 2026
d060169
fix(proxy): strip user_api_key_metadata injection slots from user input
stuxf Apr 16, 2026
0602564
fix: switch blocklist to RFC 6890 via ipaddress.is_global, block mult…
stuxf Apr 16, 2026
aa2f05f
style: use 'is not None' for port check (handle port 0 explicitly)
stuxf Apr 16, 2026
0e62add
fix(proxy): gate caller-supplied routing/budget tags behind allow_cli…
stuxf Apr 16, 2026
f46e995
fix: restrict x-pass- header forwarding for protected header names
yuneng-berri Apr 16, 2026
8526628
test: update tag-merge tests for default-deny client tag policy
stuxf Apr 16, 2026
5df7c21
fix: extend x-pass- header protection to cover additional credential …
yuneng-berri Apr 16, 2026
af8d479
chore(proxy): emit warning when caller-supplied tags are stripped
stuxf Apr 16, 2026
773ce43
Merge pull request #25916 from BerriAI/litellm_xpass_header_restriction
yuneng-berri Apr 16, 2026
9622864
test: set allow_client_tags on duplicate-tag merge test
stuxf Apr 16, 2026
db19f24
fix(proxy): move metadata strip after JSON-string parse
stuxf Apr 16, 2026
2ea3faf
fix: tighten api_key value check in credential validation
yuneng-berri Apr 16, 2026
f8f356f
test: add parametrized tests for api_key value handling in credential…
yuneng-berri Apr 16, 2026
dc8e03b
fix(proxy): expand _guardrail_modification_check to cover all bypass …
stuxf Apr 16, 2026
76aa97f
fix(proxy): close three variant metadata/tag injection paths
stuxf Apr 16, 2026
1cd3ea8
Merge pull request #25917 from BerriAI/litellm_xpass_header_restriction
yuneng-berri Apr 16, 2026
b4e98d1
fix(proxy): close 6 more metadata/tag variant bypasses
stuxf Apr 17, 2026
467166f
fix(proxy): enforce per-target org authorization on /user/delete
stuxf Apr 17, 2026
69f2bc1
amortize label context call, by reducing number of label_factory call…
harish-berri Apr 17, 2026
8c0668f
perf: batch target membership lookup in delete_user to avoid N+1
stuxf Apr 17, 2026
1320632
fix(proxy): strip root-level data['tags'] alongside metadata tags
stuxf Apr 17, 2026
cdb2994
fix: align agent endpoint and routing permission checks with existing…
yuneng-berri Apr 17, 2026
662d055
fix(proxy): close three more org-boundary escape paths
stuxf Apr 17, 2026
c7c3df2
fix(proxy): extend /key/update admin check to non-budget fields
stuxf Apr 17, 2026
e3b5579
fix(proxy): close /organization member_delete + role-escalation gaps
stuxf Apr 17, 2026
b6d5728
add support for pages param
shivamrawat1 Apr 17, 2026
089ca5f
fix(azure-ocr): reject mixed bool+int in pages list validation
shivamrawat1 Apr 17, 2026
a84c276
refactor(azure-ocr): move urllib.parse.quote to module imports
shivamrawat1 Apr 17, 2026
3ef3622
Add support for grok-4.20-0309-reasoning model
Sameerlite Apr 17, 2026
cd92b04
fix(ocr): add missing Mistral OCR params to allowlist (#25858)
michelligabriele Apr 17, 2026
f69b9d6
Add capability to override default GitHub Copilot authentication endp…
steromano87 Apr 17, 2026
bcb2ea6
fix: add explicit admin bypass to agent access checks for consistency
yuneng-berri Apr 17, 2026
95824dd
removing pydantic base model __repr__, __repr_str__ and __repr_args__…
harish-berri Apr 17, 2026
d86c6a5
fix(proxy): prioritize reasoning health check token defaults
Sameerlite Apr 17, 2026
76c69bb
fix(proxy): avoid duplicate reasoning capability lookup
Sameerlite Apr 17, 2026
1eb6be9
Removed slots attr which was causing test failures in python 3.9.
harish-berri Apr 17, 2026
62a189f
added comments to disable repr
harish-berri Apr 17, 2026
2b5bf4c
Merge pull request #25882 from BerriAI/litellm_fix-latency-config-emp…
ryan-crabbe-berri Apr 17, 2026
c23ce91
Merge pull request #25878 from BerriAI/litellm_refactor-pkce-dedup
ryan-crabbe-berri Apr 17, 2026
5df3287
fixing backwards compatibility for tests
harish-berri Apr 17, 2026
9d10ebf
fix(prometheus): restore labeled-counter tests; tolerate UserAPIKeyLa…
harish-berri Apr 17, 2026
b3ccbb9
resolve lint errors
harish-berri Apr 17, 2026
246a5bd
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Apr 17, 2026
50a6324
Merge pull request #25904 from stuxf/fix/org-boundary-enforcement
yuneng-berri Apr 17, 2026
32714a4
Merge pull request #25905 from stuxf/fix/metadata-security-controls
yuneng-berri Apr 17, 2026
7c66edb
Merge pull request #25906 from stuxf/fix/ssrf-url-validation
yuneng-berri Apr 17, 2026
bd5f560
Merge pull request #25930 from BerriAI/litellm_xai_grok-4.20-0309-rea…
ishaan-berri Apr 17, 2026
f31d4fa
Merge origin/main into litellm_ishaan_april6
ishaan-berri Apr 17, 2026
a508a96
docs(key_management): add budget_limits param to generate_key_fn docs…
ishaan-berri Apr 17, 2026
665306b
fix(ui): fix TypeScript error - publicPage === true in narrowed false…
ishaan-berri Apr 17, 2026
b2aa186
docs(key_management): add budget_limits param to update_key_fn docstring
ishaan-berri Apr 17, 2026
4423d09
fix(ui): add missing Accordion imports to TeamInfo.tsx
ishaan-berri Apr 17, 2026
8e77f9e
resolving code comments to move helper logic to ```prometheus_helper.…
harish-berri Apr 17, 2026
09e0137
docs(user_management): add budget_limits param to new_user docstring
ishaan-berri Apr 17, 2026
2893301
docs(team_management): add budget_limits and default_team_member_mode…
ishaan-berri Apr 17, 2026
375cfb7
chore: update uv.lock after merging main
ishaan-berri Apr 17, 2026
ab44df2
docs(team_management): add budget_limits and default_team_member_mode…
ishaan-berri Apr 17, 2026
e8461b5
style: run black formatter on files from main merge
ishaan-berri Apr 17, 2026
dd76cc5
docs: add "Copy Page as Markdown" + llms.txt to docs site (#25975)
krrish-berri-2 Apr 17, 2026
77767f5
docs(org_management): add allowed_models param to new_organization do…
ishaan-berri Apr 17, 2026
d369f0a
docs(user_management): add budget_limits param to user_update docstring
ishaan-berri Apr 17, 2026
3aa63d5
style(github_copilot): simplify _get_github_headers return type annot…
ishaan-berri Apr 17, 2026
6ed2929
Merge pull request #25934 from BerriAI/litellm_prometheus_improvements
ishaan-berri Apr 17, 2026
66167f5
[Feature] UI - Settings: add forward_llm_provider_auth_headers toggle
yuneng-berri Apr 17, 2026
d0f1706
[Test] pre-call utils: regression coverage for BYOK x-api-key forwarding
yuneng-berri Apr 17, 2026
ad48af6
[Feature] UI - Models: allow empty api_key for Anthropic provider (BYOK)
yuneng-berri Apr 17, 2026
9a8aa4f
[Feature] UI - Models: add api_base field for Anthropic provider form
yuneng-berri Apr 17, 2026
7eae18d
[Feature] UI - Settings: toggle row for forward_llm_provider_auth_hea…
yuneng-berri Apr 17, 2026
1e25a00
[Docs] BYOK tutorial: document the UI-only configuration path
yuneng-berri Apr 17, 2026
b7aa045
style(github_copilot): shorten __init__ docstring to avoid Black edge…
ishaan-berri Apr 17, 2026
2395a2d
style(prometheus): sync prometheus.py formatting with origin/main
ishaan-berri Apr 17, 2026
9de041f
style(prometheus): sync types/integrations/prometheus.py formatting w…
ishaan-berri Apr 17, 2026
7867497
style(github_copilot): revert authenticator.py to origin/main formatting
ishaan-berri Apr 17, 2026
2808cb9
style(prometheus): apply Black formatting to prometheus.py
ishaan-berri Apr 17, 2026
b4df07a
style(prometheus): apply Black formatting to types/integrations/prome…
ishaan-berri Apr 17, 2026
6636329
fix(proxy): revert budget exceeded error code from 429 to 400
ishaan-berri Apr 17, 2026
574633f
fix(key_delete): exclude budget_limits from deleted verification toke…
ishaan-berri Apr 17, 2026
7b3480a
fix(team_delete): exclude budget_limits and default_team_member_model…
ishaan-berri Apr 17, 2026
7239ed6
fix(schema): add budget_limits Json? to LiteLLM_TeamTable and LiteLLM…
ishaan-berri Apr 17, 2026
b91a6f5
fix(schema): add budget_limits Json? to LiteLLM_TeamTable and LiteLLM…
ishaan-berri Apr 17, 2026
9281147
fix(schema): add budget_limits Json? to LiteLLM_TeamTable and LiteLLM…
ishaan-berri Apr 17, 2026
6a9f8f7
Merge pull request #25972 from BerriAI/litellm_yj_apr16
yuneng-berri Apr 17, 2026
7c47bbd
fix(migration): run schema sanity check after P3009/P3018 idempotent …
ishaan-berri Apr 17, 2026
ee2cf0e
fix: address three CI failures from recent security PR merges
yuneng-berri Apr 17, 2026
33a2cee
fix(proxy-extras): use DIRECT_URL for prisma migrate diff, tempfile f…
ishaan-berri Apr 17, 2026
70456fb
fix(ui): update add_plugin_form tests to match rewritten smart URL form
ishaan-berri Apr 17, 2026
33175a8
fix(proxy-extras): fall back to prisma db execute when migrate diff f…
ishaan-berri Apr 17, 2026
e073fee
fix(ui): rename claude-code-plugins to skills in page_metadata.ts
ishaan-berri Apr 17, 2026
e6a20af
fix(proxy-extras): skip post-deploy sanity check when no migrations p…
ishaan-berri Apr 17, 2026
1c128a8
Merge pull request #25256 from BerriAI/litellm_ishaan_april6
ishaan-berri Apr 17, 2026
779a9fa
feat: add configurable multi-threshold budget alerts for virtual keys
ryan-crabbe-berri Apr 18, 2026
b9f5be8
Merge pull request #25922 from BerriAI/litellm_a2a_agent_acl
yuneng-berri Apr 18, 2026
ea509ec
Run key budget alert check before max-budget enforcement
ryan-crabbe-berri Apr 18, 2026
11c3270
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Apr 18, 2026
8936562
[Fix] Persist default end-user budget_id to DB so budget reset job pi…
krrish-berri-2 Apr 4, 2026
41a719a
feat: add global fallback config, fix no-owner crash, improve email g…
ryan-crabbe-berri Apr 18, 2026
bb9955b
[Fix] Budget reset job now resets implicitly-created end users with N…
krrish-berri-2 Apr 5, 2026
44eb2ea
fix: address Greptile review — empty recipients guard, type annotatio…
ryan-crabbe-berri Apr 18, 2026
6fd49f1
fix: enforce project-level model-specific rate limits in parallel_req…
shivamrawat1 Apr 18, 2026
a282ac4
[Fix] Remove unresolved merge conflict markers in bedrock test file
yuneng-berri Apr 18, 2026
0b50a29
Merge pull request #25995 from BerriAI/litellm_fixBedrockTestMergeMar…
yuneng-berri Apr 18, 2026
c1503d3
fix: escape user-controlled greeting in max budget alert email template
ryan-crabbe-berri Apr 18, 2026
fad884e
Merge branch 'litellm_internal_staging' into litellm_persist_default_…
shivamrawat1 Apr 18, 2026
a449fc1
Merge branch 'litellm_internal_staging' into litellm_project_rate_lim…
shivamrawat1 Apr 18, 2026
37765e6
Merge branch 'litellm_internal_staging' into litellm_pages_support_fo…
shivamrawat1 Apr 18, 2026
e8c3340
test: add coverage for get_project_model_rpm/tpm_limit and check_comp…
shivamrawat1 Apr 18, 2026
acb4f89
[Fix] UI - Models: clarify Anthropic api_base label and tooltip to pr…
yuneng-berri Apr 18, 2026
6fe7903
[Fix] UI - Settings: clarify Max-subscription vs BYOK toggle descript…
yuneng-berri Apr 18, 2026
e004876
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Apr 18, 2026
ec564f5
fix: resolve mypy errors in multi-threshold budget alerts
ryan-crabbe-berri Apr 18, 2026
c288777
fix(ui): extra_headers not persisting on MCP server edit
ryan-crabbe-berri Apr 18, 2026
e2e5b63
fix(ui): revert submit guard to allow intentional extra_headers clearing
ryan-crabbe-berri Apr 18, 2026
48fb19b
fix: align test assertion with additive merge semantics
ryan-crabbe-berri Apr 18, 2026
ecf65f5
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Apr 18, 2026
18a5fe5
Merge pull request #25998 from BerriAI/litellm_/wonderful-bouman
yuneng-berri Apr 18, 2026
746d10f
Merge remote-tracking branch 'origin/main' into litellm_chore-migrate…
ryan-crabbe-berri Apr 18, 2026
545db8c
Merge remote-tracking branch 'origin/main' into litellm_chore-migrate…
ryan-crabbe-berri Apr 18, 2026
2a76f10
Merge pull request #25749 from BerriAI/litellm_chore-migrate-guardrai…
ryan-crabbe-berri Apr 18, 2026
55d3229
Merge pull request #25879 from BerriAI/litellm_chore-migrate-router-s…
ryan-crabbe-berri Apr 18, 2026
d042b44
Merge pull request #25929 from BerriAI/litellm_pages_support_for_ocr
ishaan-berri Apr 18, 2026
319839d
Merge pull request #25494 from jlav/jl/helm-tpl-extra-containers
ishaan-berri Apr 18, 2026
6bf90fb
fix(mypy): cast msg and pending_delta in _promote_message_stop_usage …
ishaan-berri Apr 18, 2026
46a04e2
fix: increment model_per_project TPM counter in async_log_success_event
shivamrawat1 Apr 18, 2026
9c0b73e
[Fix] should_create_missing_views returns False for reltuples=0 (fals…
yuneng-berri Apr 18, 2026
f476447
Merge pull request #25846 from BerriAI/litellm_bedrock_cache_start_ne…
ishaan-berri Apr 18, 2026
d03c301
Merge pull request #25936 from BerriAI/litellm_health-check-reasoning…
ishaan-berri Apr 18, 2026
0d95061
refactor: extract success pipeline ops to fix PLR0915 in parallel_req…
shivamrawat1 Apr 18, 2026
f870095
Merge pull request #25991 from BerriAI/litellm_persist_default_router…
shivamrawat1 Apr 18, 2026
fc35c68
Merge pull request #26003 from BerriAI/litellm_fix-extra-headers-not-…
ryan-crabbe-berri Apr 18, 2026
1c29c5e
chore: bump proxy deps and raise python floor to 3.11
yuneng-berri Apr 18, 2026
2c41f3c
[Fix] UI - Keys: strip empty premium fields from key update payload
yuneng-berri Apr 18, 2026
cae8b74
Fall back to top-level keyData when resolving previous premium value
yuneng-berri Apr 18, 2026
d1e6657
chore: drop stale python_version markers after floor raise
yuneng-berri Apr 18, 2026
9bdb3b1
chore: lower python floor from 3.11 to 3.10
yuneng-berri Apr 18, 2026
f24c8db
chore: bump CircleCI conda envs from python 3.9 to 3.10
yuneng-berri Apr 18, 2026
8e00f61
Merge pull request #26023 from BerriAI/litellm_/eloquent-feistel-b346ec
yuneng-berri Apr 18, 2026
cfdf893
[Fix] Merge prometheus_helpers.py into prometheus_helpers/__init__.py…
yuneng-berri Apr 18, 2026
643e941
Merge pull request #26026 from BerriAI/litellm_fixPrometheusHelpersPa…
yuneng-berri Apr 18, 2026
ec590f9
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Apr 18, 2026
f483f1e
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
yuneng-berri Apr 18, 2026
dbf4f96
Merge remote-tracking branch 'upstream/litellm_internal_staging' into…
shivamrawat1 Apr 18, 2026
09a524a
fix: narrow CallInfo.max_budget_alert_emails to Dict[str, List[str]]
ryan-crabbe-berri Apr 18, 2026
8b86a3b
fix: normalize alert-email configs at merge boundary
ryan-crabbe-berri Apr 18, 2026
029d9bc
refactor: inline _parse_email_list in auth_checks to drop enterprise dep
ryan-crabbe-berri Apr 18, 2026
b7813aa
fix(mcp): restore PKCE-triggering 401 when no stored per-user token e…
ishaan-berri Apr 18, 2026
0a4b02f
fix: tighten recipient_emails guard to reject empty list
ryan-crabbe-berri Apr 18, 2026
63313bc
Merge pull request #25994 from BerriAI/litellm_project_rate_limiting
yuneng-berri Apr 18, 2026
e690519
Merge pull request #25983 from BerriAI/litellm_yj_apr17
yuneng-berri Apr 18, 2026
85b1b93
Merge pull request #26022 from BerriAI/litellm_/reverent-kirch-7cf0a6
shin-berri Apr 18, 2026
de790fd
chore: update Next.js build artifacts (2026-04-18 21:49 UTC, node v22…
yuneng-berri Apr 18, 2026
ecff06d
Merge pull request #26032 from BerriAI/litellm_mcp_pkce_fix_v2
ishaan-berri Apr 18, 2026
eb6fd98
Merge remote-tracking branch 'origin/main' into litellm_feat-multi_th…
ryan-crabbe-berri Apr 18, 2026
c8b7c1b
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
ryan-crabbe-berri Apr 18, 2026
67bf18d
Merge pull request #25989 from BerriAI/litellm_feat-multi_threshold_b…
ryan-crabbe-berri Apr 18, 2026
ba24e4a
remove next env
yuneng-berri Apr 18, 2026
aab3ef8
chore: update Next.js build artifacts (2026-04-18 23:46 UTC, node v22…
yuneng-berri Apr 18, 2026
0278d73
Merge remote-tracking branch 'origin/litellm_internal_staging' into y…
yuneng-berri Apr 18, 2026
4d63a13
bump: version 1.83.9 → 1.83.10
yuneng-berri Apr 19, 2026
e16bd15
Merge pull request #26033 from BerriAI/yj_ui_build_apr18
yuneng-berri Apr 19, 2026
49ba6b8
add uv lock
yuneng-berri Apr 19, 2026
9e77e25
Merge pull request #26038 from BerriAI/yj_bump_apr18
yuneng-berri Apr 19, 2026
2f22a12
bump litellm-proxy-extras to 0.4.67 (#26043)
ishaan-berri Apr 19, 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
  •  
  •  
  •  
12 changes: 6 additions & 6 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1707,7 +1707,7 @@ jobs:
export PATH="$HOME/miniconda/bin:$PATH"
conda init bash
source ~/.bashrc
conda create -n myenv python=3.9 -y
conda create -n myenv python=3.10 -y
conda activate myenv
python --version
- run:
Expand Down Expand Up @@ -1822,7 +1822,7 @@ jobs:
export PATH="$HOME/miniconda/bin:$PATH"
conda init bash
source ~/.bashrc
conda create -n myenv python=3.9 -y
conda create -n myenv python=3.10 -y
conda activate myenv
python --version
- run:
Expand Down Expand Up @@ -2057,7 +2057,7 @@ jobs:
export PATH="$HOME/miniconda/bin:$PATH"
conda init bash
source ~/.bashrc
conda create -n myenv python=3.9 -y
conda create -n myenv python=3.10 -y
conda activate myenv
python --version
- run:
Expand Down Expand Up @@ -2208,7 +2208,7 @@ jobs:
export PATH="$HOME/miniconda/bin:$PATH"
conda init bash
source ~/.bashrc
conda create -n myenv python=3.9 -y
conda create -n myenv python=3.10 -y
conda activate myenv
python --version
- run:
Expand Down Expand Up @@ -2319,7 +2319,7 @@ jobs:
export PATH="$HOME/miniconda/bin:$PATH"
conda init bash
source ~/.bashrc
conda create -n myenv python=3.9 -y
conda create -n myenv python=3.10 -y
conda activate myenv
python --version
- run:
Expand Down Expand Up @@ -2444,7 +2444,7 @@ jobs:
export PATH="$HOME/miniconda/bin:$PATH"
conda init bash
source ~/.bashrc
conda create -n myenv python=3.9 -y
conda create -n myenv python=3.10 -y
conda activate myenv
python --version
- run:
Expand Down
40 changes: 31 additions & 9 deletions .github/scripts/close_duplicate_issues.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ def gh(*args: str) -> str:
def fetch_open_issues(repo: str | None) -> list[dict]:
"""Fetch all open issues (excluding PRs) via gh api --paginate."""
if repo:
endpoint = f"repos/{repo}/issues?state=open&per_page=100&sort=created&direction=asc"
endpoint = (
f"repos/{repo}/issues?state=open&per_page=100&sort=created&direction=asc"
)
else:
endpoint = "repos/{owner}/{repo}/issues?state=open&per_page=100&sort=created&direction=asc"
cmd = ["api", "--paginate", endpoint]
Expand Down Expand Up @@ -71,7 +73,9 @@ def close_as_duplicate(
repo_args = ["--repo", repo] if repo else []

if dry_run:
print(f" [DRY RUN] Would close #{issue_number} as duplicate of #{duplicate_of}")
print(
f" [DRY RUN] Would close #{issue_number} as duplicate of #{duplicate_of}"
)
return

# Add comment
Expand Down Expand Up @@ -115,7 +119,9 @@ def find_duplicate(
return None


def scan_all(issues: list[dict], threshold: float, repo: str | None, dry_run: bool) -> int:
def scan_all(
issues: list[dict], threshold: float, repo: str | None, dry_run: bool
) -> int:
"""Compare every issue against all older issues. Returns count of duplicates found."""
# Sort oldest first
issues.sort(key=lambda i: i["number"])
Expand Down Expand Up @@ -144,7 +150,11 @@ def scan_all(issues: list[dict], threshold: float, repo: str | None, dry_run: bo


def check_single(
issue_number: int, issues: list[dict], threshold: float, repo: str | None, dry_run: bool
issue_number: int,
issues: list[dict],
threshold: float,
repo: str | None,
dry_run: bool,
) -> bool:
"""Check a single issue against all older open issues. Returns True if duplicate found."""
target = None
Expand Down Expand Up @@ -178,13 +188,23 @@ def check_single(


def main() -> None:
parser = argparse.ArgumentParser(description="Detect and close duplicate GitHub issues")
parser = argparse.ArgumentParser(
description="Detect and close duplicate GitHub issues"
)
mode = parser.add_mutually_exclusive_group(required=True)
mode.add_argument("--scan", action="store_true", help="Scan all open issues")
mode.add_argument("--issue-number", type=int, help="Check a single issue number")
parser.add_argument("--threshold", type=float, default=0.85, help="Similarity threshold (0-1)")
parser.add_argument("--close", action="store_true", help="Actually close duplicates (default is dry-run)")
parser.add_argument("--repo", type=str, help="Repository (owner/repo). Auto-detected if omitted.")
parser.add_argument(
"--threshold", type=float, default=0.85, help="Similarity threshold (0-1)"
)
parser.add_argument(
"--close",
action="store_true",
help="Actually close duplicates (default is dry-run)",
)
parser.add_argument(
"--repo", type=str, help="Repository (owner/repo). Auto-detected if omitted."
)
args = parser.parse_args()

dry_run = not args.close
Expand All @@ -200,7 +220,9 @@ def main() -> None:
count = scan_all(issues, args.threshold, args.repo, dry_run)
print(f"\nTotal duplicates {'found' if dry_run else 'closed'}: {count}")
else:
found = check_single(args.issue_number, issues, args.threshold, args.repo, dry_run)
found = check_single(
args.issue_number, issues, args.threshold, args.repo, dry_run
)
sys.exit(0 if found else 0) # Always exit 0; finding no dup is not an error


Expand Down
20 changes: 14 additions & 6 deletions .github/scripts/scan_keywords.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,13 @@ def send_webhook(webhook_url: str, payload: dict) -> None:
def _excerpt(text: str, max_len: int = 400) -> str:
if not text:
return ""

# Keep original formatting
if len(text) <= max_len:
return text
return text[: max_len - 1] + "…"



def main() -> int:
event = read_event_payload()
if not event:
Expand All @@ -87,8 +86,19 @@ def main() -> int:

# Keywords from env or defaults
keywords_env = os.environ.get("KEYWORDS", "")
default_keywords = ["azure", "openai", "bedrock", "vertexai", "vertex ai", "anthropic"]
keywords = [k.strip() for k in keywords_env.split(",")] if keywords_env else default_keywords
default_keywords = [
"azure",
"openai",
"bedrock",
"vertexai",
"vertex ai",
"anthropic",
]
keywords = (
[k.strip() for k in keywords_env.split(",")]
if keywords_env
else default_keywords
)

matches = detect_keywords(combined_text, keywords)
found = bool(matches)
Expand Down Expand Up @@ -129,5 +139,3 @@ def main() -> int:

if __name__ == "__main__":
raise SystemExit(main())


2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ LiteLLM is a unified interface for 100+ LLM providers with two main components:
- When wiring a new UI entity type to an existing backend endpoint, verify the backend API contract (single value vs. array, required vs. optional params) and ensure the UI controls match — e.g., use a single-select dropdown when the backend accepts a single value, not a multi-select

### UI Component Library
- **Always use `antd` for new UI components** — we are migrating off of `@tremor/react`. Do not introduce new `Badge`, `Text`, `Card`, `Grid`, `Title`, or other imports from `@tremor/react` in any new or modified file. Use `antd` equivalents: `Tag` for labels, plain `<span>`/`<div>` with Tailwind classes (or `Typography.Text`) for text, `Card` from `antd`, etc. Note that `antd` has no `"yellow"` Tag color — use `"gold"` for amber/yellow.
- **Always use `antd` for new UI components** — we are migrating off of `@tremor/react`. Do not introduce new `Badge`, `Text`, `Card`, `Grid`, `Title`, or other imports from `@tremor/react` in any new or modified file. Use `antd` equivalents: `Tag` for labels, `Typography.Text` / `Typography.Title` / `Typography.Paragraph` for textual content (avoid plain text-only `<span>`, `<p>`, `<h*>` when Typography fits), and `Card` from `antd`. Note that `antd` has no `"yellow"` Tag color — use `"gold"` for amber/yellow.

### MCP OAuth / OpenAPI Transport Mapping
- `TRANSPORT.OPENAPI` is a UI-only concept. The backend only accepts `"http"`, `"sse"`, or `"stdio"`. Always map it to `"http"` before any API call (including pre-OAuth temp-session calls).
Expand Down
4 changes: 3 additions & 1 deletion ci_cd/run_migration.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ def create_migration(migration_name: str = None):
try:
# Get paths
root_dir = Path(__file__).parent.parent
migrations_dir = root_dir / "litellm-proxy-extras" / "litellm_proxy_extras" / "migrations"
migrations_dir = (
root_dir / "litellm-proxy-extras" / "litellm_proxy_extras" / "migrations"
)
schema_path = root_dir / "schema.prisma"

# Create temporary PostgreSQL database
Expand Down
50 changes: 27 additions & 23 deletions cookbook/anthropic_agent_sdk/agent_with_mcp.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,24 +24,26 @@ async def interactive_chat_with_mcp():
Interactive CLI chat with the agent and MCP server
"""
config = Config()

# Configure Anthropic SDK to point to LiteLLM gateway
litellm_base_url = setup_litellm_env(config)

# Fetch available models from proxy
available_models = await fetch_available_models(litellm_base_url, config.LITELLM_API_KEY)

available_models = await fetch_available_models(
litellm_base_url, config.LITELLM_API_KEY
)

current_model = config.LITELLM_MODEL

# MCP server configuration
mcp_server_url = f"{litellm_base_url}/mcp/deepwiki2"
use_mcp = os.getenv("USE_MCP", "true").lower() == "true"

if not use_mcp:
print("⚠️ MCP disabled via USE_MCP=false")

print_header(litellm_base_url, current_model, has_mcp=use_mcp)

while True:
# Configure agent options
if use_mcp:
Expand All @@ -58,7 +60,7 @@ async def interactive_chat_with_mcp():
"url": mcp_server_url,
"headers": {
"Authorization": f"Bearer {config.LITELLM_API_KEY}"
}
},
}
},
)
Expand All @@ -78,47 +80,49 @@ async def interactive_chat_with_mcp():
model=current_model,
max_turns=50,
)

# Create agent client
try:
async with ClaudeSDKClient(options=options) as client:
conversation_active = True

while conversation_active:
# Get user input
try:
user_input = input("\n👤 You: ").strip()
except (EOFError, KeyboardInterrupt):
print("\n\n👋 Goodbye!")
return

# Handle commands
if user_input.lower() in ['quit', 'exit']:
if user_input.lower() in ["quit", "exit"]:
print("\n👋 Goodbye!")
return
if user_input.lower() == 'clear':

if user_input.lower() == "clear":
print("\n🔄 Starting new conversation...\n")
conversation_active = False
continue
if user_input.lower() == 'models':

if user_input.lower() == "models":
handle_model_list(available_models, current_model)
continue

if user_input.lower() == 'model':
new_model, should_restart = handle_model_switch(available_models, current_model)

if user_input.lower() == "model":
new_model, should_restart = handle_model_switch(
available_models, current_model
)
if should_restart:
current_model = new_model
conversation_active = False
continue

if not user_input:
continue

# Stream response from agent
await stream_response(client, user_input)

except Exception as e:
print(f"\n❌ Error creating agent client: {e}")
print("This might be an MCP configuration issue. Try running without MCP:")
Expand Down
Loading
Loading