Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2140 commits
Select commit Hold shift + click to select a range
3c595f6
fix(test): update Phoenix OTEL test for dedicated TracerProvider arch…
mubashir1osmani Feb 26, 2026
d9cd3ea
Merge pull request #22181 from mubashir1osmani/fix/arize-phoenix-nest…
Sameerlite Feb 26, 2026
7adaf49
Add tranlation of context_management
Sameerlite Feb 26, 2026
6a68e3b
Add tests for messages to responses transformation:
Sameerlite Feb 26, 2026
678200e
Bump litellm version to 1.81.16
Sameerlite Feb 26, 2026
27f9903
Merge pull request #22184 from BerriAI/litellm_bump_litellm_26_02
Sameerlite Feb 26, 2026
87b4fed
Merge pull request #22186 from BerriAI/main
Sameerlite Feb 26, 2026
95b8fb8
Revert "fix(proxy): improve auth exception logging levels and add str…
Sameerlite Feb 26, 2026
81455db
Merge pull request #22187 from BerriAI/revert-22099-fix/improve-auth-…
Sameerlite Feb 26, 2026
e1df85e
Merge pull request #22166 from BerriAI/litellm_oss_staging_02_26_2026
Sameerlite Feb 26, 2026
2772c88
Merge pull request #22142 from BerriAI/litellm_fix_mcp_server_ip
Sameerlite Feb 26, 2026
dc1e97d
Merge pull request #22144 from BerriAI/litellm_allowed_openai_params_…
Sameerlite Feb 26, 2026
16d6c27
Merge pull request #22180 from BerriAI/litellm_fix_vllm_test
Sameerlite Feb 26, 2026
61d2f28
Fix based on review
Sameerlite Feb 26, 2026
ec31845
Merge pull request #22092 from BerriAI/litellm_fix_tts_vertex_ai
Sameerlite Feb 26, 2026
6600c86
Merge pull request #22170 from BerriAI/litellm_fix_video_veo_vertex
Sameerlite Feb 26, 2026
2fce35a
test(ci): add secret scan test and CI job to prevent hardcoded creden…
jquinter Feb 26, 2026
05c3a95
fix(ci): add permissions block to secret-scan job
jquinter Feb 26, 2026
1c376af
fix(ci): use secrets context in ggshield step condition
jquinter Feb 26, 2026
ace49b1
fix(tests): update MCP server test mocks to match production API
jquinter Feb 26, 2026
4419c7a
Merge pull request #22198 from BerriAI/fix/mcp-server-test-mock-mismatch
jquinter Feb 26, 2026
494d783
fix(mypy): suppress attr-defined errors on websocket send/close calls
jquinter Feb 26, 2026
21d958e
fix(mypy): add union-attr suppression to all backend_ws method calls
jquinter Feb 26, 2026
1790a6b
Merge pull request #21604 from michelligabriele/fix/websearch-thinkin…
Sameerlite Feb 26, 2026
ae13a40
test(mcp): add e2e test for stateless StreamableHTTP behavior (#22033)
michelligabriele Feb 26, 2026
acfb5ad
refactor: remove periodic dead PID cleanup, trim redundant tests
ryan-crabbe Feb 26, 2026
857a324
Merge remote-tracking branch 'origin' into litellm_key_info_crash_fix
yuneng-jiang Feb 26, 2026
4d2fab4
Merge pull request #22164 from Harshit28j/litellm_custom_auth_budget_fix
Harshit28j Feb 26, 2026
50bf2da
Merge pull request #22137 from BerriAI/litellm_key_info_crash_fix
yuneng-jiang Feb 26, 2026
947586b
Merge remote-tracking branch 'origin' into litellm_paginated_key_alias
yuneng-jiang Feb 26, 2026
d3d11fb
feat: add tags in project
Harshit28j Feb 26, 2026
cbdaaae
[Feat] Add control for setting upperbound on chunk processing time (…
ishaan-jaff Feb 26, 2026
4b75a89
Merge remote-tracking branch 'origin' into litellm_paginated_key_alias
yuneng-jiang Feb 26, 2026
719b7fd
Merge pull request #22157 from BerriAI/litellm_paginated_key_alias
yuneng-jiang Feb 26, 2026
0ee8cb5
refactor: remove shutdown cleanup, rely solely on startup wipe
ryan-crabbe Feb 26, 2026
c3c79b9
[Fix] Virtual Keys pagination displays stale totals when filtering
yuneng-jiang Feb 26, 2026
de556ad
Merge pull request #22202 from BerriAI/fix/realtime-streaming-mypy-attr
jquinter Feb 26, 2026
0020e59
fix: accurate wipe count on partial failure, remove stray blank line
ryan-crabbe Feb 26, 2026
f24a418
feat(vertex): add gemini-3.1-flash-image-preview model DB support
emerzon Feb 26, 2026
8a6a67b
fix(proxy): isolate get_config failures from model loading in sync loop
jquinter Feb 26, 2026
702d5e8
fix(cost): use token usage for gemini/vertex image generation when av…
emerzon Feb 26, 2026
7df61d4
[Fix] Enhance MidStreamFallbackError to preserve original status code…
dharamendrak Feb 26, 2026
0e01425
refactor(cost): dedupe image token usage cost helper
emerzon Feb 26, 2026
c651a51
Update test to righ place
dharamendrak Feb 26, 2026
840333f
Restore
dharamendrak Feb 26, 2026
fcdfc63
Remove nit
dharamendrak Feb 26, 2026
3639800
Merge pull request #22221 from BerriAI/litellm_prometheus_multiproc_c…
ryan-crabbe Feb 26, 2026
c20e496
[Feature] Add /public/supported_endpoints endpoint
yuneng-jiang Feb 26, 2026
33bb798
Merge pull request #22222 from BerriAI/litellm_key_filter_pagination_fix
yuneng-jiang Feb 26, 2026
efcc856
Move provider_endpoints_support.json into litellm package
yuneng-jiang Feb 26, 2026
d5ef6c7
Merge pull request #22238 from BerriAI/litellm_supported_endpoints
yuneng-jiang Feb 26, 2026
f4e3e01
fixing inf budget
yuneng-jiang Feb 27, 2026
9546d9b
_add_dd_apm_tags_for_litellm_call_id (#22219)
ishaan-jaff Feb 27, 2026
0e1428b
remove orphan comment from test file
yuneng-jiang Feb 27, 2026
28c77b4
fix +Inf user budget metric when metadata max_budget is None
yuneng-jiang Feb 27, 2026
48b9eca
fix(realtime): fix guardrails not firing for Gemini/Vertex AI and pro…
ishaan-jaff Feb 27, 2026
0a690a5
Merge pull request #22243 from BerriAI/litellm_team_budget_inf_fix
yuneng-jiang Feb 27, 2026
71c3503
Revert "[Feature] Add /public/supported_endpoints endpoint"
yuneng-jiang Feb 27, 2026
5a95d9b
Merge pull request #22246 from BerriAI/revert-22238-litellm_supported…
yuneng-jiang Feb 27, 2026
df36845
fix: remove cache eviction close that kills in-use httpx clients
ryan-crabbe Feb 27, 2026
88ccffc
Merge pull request #22247 from BerriAI/litellm_fix_client_closed_on_e…
ryan-crabbe Feb 27, 2026
86b2efd
[Feature] Add /public/endpoints endpoint for provider endpoint support
yuneng-jiang Feb 27, 2026
ffc00c0
fix: correct _ENDPOINT_METADATA keys to match actual JSON data (a2a, …
yuneng-jiang Feb 27, 2026
8d1c75c
Merge pull request #22225 from dharamendrak/bugfix/midstream-fallback…
Sameerlite Feb 27, 2026
fc69d6e
fix: add 12 missing endpoint keys to _ENDPOINT_METADATA, fix stale _s…
yuneng-jiang Feb 27, 2026
369c0ec
[Infra] Add prisma_schema_sync CircleCI job before e2e UI tests
yuneng-jiang Feb 27, 2026
516b18f
[Feature] Access group CRUD: Add bidirectional sync for teams/keys
yuneng-jiang Feb 27, 2026
2d9ba67
fix: move update_access_group find_unique inside transaction
yuneng-jiang Feb 27, 2026
fd58c8c
Merge pull request #22251 from BerriAI/litellm_circleci_prisma_sync
yuneng-jiang Feb 27, 2026
ee7b737
bump: version 0.4.48 β†’ 0.4.49
yuneng-jiang Feb 27, 2026
1e82ec6
adding build
yuneng-jiang Feb 27, 2026
7e2f5b7
Merge pull request #22255 from BerriAI/litellm_e2e_fix_feb26
yuneng-jiang Feb 27, 2026
d9af321
Fix free models working from UI
Sameerlite Feb 27, 2026
57c5efc
refactor: initialize delta vars before try block and avoid redundant …
yuneng-jiang Feb 27, 2026
577f703
Register custom pricing in litellm.model_cost
Sameerlite Feb 27, 2026
06c90ec
Update litellm/proxy/public_endpoints/public_endpoints.py
yuneng-jiang Feb 27, 2026
2144e79
fix: guard against null assigned_*_ids in update_access_group delta c…
yuneng-jiang Feb 27, 2026
a732c3f
Merge pull request #22248 from BerriAI/litellm_public_endpoints
yuneng-jiang Feb 27, 2026
cde23e9
fix: normalize null list fields to [] in update_data before DB write
yuneng-jiang Feb 27, 2026
aaf0570
fix: normalize null to [] for all Optional[List[str]] fields in updat…
yuneng-jiang Feb 27, 2026
6b9ec42
Preserve forwarding server side called tools
Sameerlite Feb 27, 2026
596437b
Add Regression tests for image_url blocks in assistant message content.
Sameerlite Feb 27, 2026
8565c70
Revert "Fix mapping of parallel_tool_calls for bedrock converse"
Sameerlite Feb 27, 2026
3369cd9
Merge pull request #22265 from BerriAI/revert-21659-litellm_fix_conve…
Sameerlite Feb 27, 2026
d0445e1
Fix converse handling for parallel_tool_calls
Sameerlite Feb 27, 2026
33e6b9c
Merge branch 'main' into litellm_fixParallel_tool_cal
Sameerlite Feb 27, 2026
99c62ca
Add opt out varible for v1/messages to responses
Sameerlite Feb 27, 2026
2fa9b81
Add docs for opt out variable
Sameerlite Feb 27, 2026
a9d0e2c
fix: req changes
Harshit28j Feb 27, 2026
72d7f64
fix: relevant comment req changes
Harshit28j Feb 27, 2026
9b7b987
fix: req changes
Harshit28j Feb 27, 2026
d8b134d
Merge pull request #22216 from BerriAI/litellm_project_tags_handle
Harshit28j Feb 27, 2026
9e4cf0e
Update tests/test_litellm/integrations/datadog/test_datadog_metrics.py
Harshit28j Feb 27, 2026
9d3e97a
Update litellm/integrations/datadog/datadog_metrics.py
Harshit28j Feb 27, 2026
c58aea4
chore: regenerate poetry.lock to match pyproject.toml (#1)
github-actions[bot] Feb 27, 2026
8dc8e82
Update tests/test_litellm/integrations/datadog/test_datadog_metrics.py
Harshit28j Feb 27, 2026
44dd139
Update tests/test_litellm/integrations/datadog/test_datadog_metrics.py
Harshit28j Feb 27, 2026
04fda9e
Update tests/test_litellm/integrations/datadog/test_datadog_metrics.py
Harshit28j Feb 27, 2026
b6a53fb
Update tests/test_litellm/integrations/datadog/test_datadog_metrics.py
Harshit28j Feb 27, 2026
5d5409e
fix presidio memory leak
Harshit28j Feb 26, 2026
1b632ed
chore: remove debug logs from presidio guardrail
Harshit28j Feb 26, 2026
3210da1
fix: req changes
Harshit28j Feb 27, 2026
39e0fa9
Merge pull request #22223 from emerzon/feat/vertex-gemini-3-1-flash-i…
Sameerlite Feb 27, 2026
1c0d072
Update litellm/proxy/proxy_server.py
Harshit28j Feb 27, 2026
25fa9af
Merge branch 'main' into litellm_fix_tts_metrics
Harshit28j Feb 27, 2026
e575b80
Merge pull request #21930 from Harshit28j/litellm_fix_index_query_call
Harshit28j Feb 27, 2026
f297036
Merge pull request #22267 from BerriAI/litellm_fixParallel_tool_cal
Sameerlite Feb 27, 2026
e583489
Merge pull request #22260 from BerriAI/litellm_Fix_tool_pass
Sameerlite Feb 27, 2026
547e844
Merge pull request #22258 from BerriAI/litellm_fix_free_models
Sameerlite Feb 27, 2026
63c9b3a
Merge pull request #22087 from BerriAI/litellm_fix_anthropic_responses
Sameerlite Feb 27, 2026
ec8aaa9
Merge pull request #22155 from BerriAI/litellm_fix_image
Sameerlite Feb 27, 2026
3bec6f5
Fix: poetry lock
Sameerlite Feb 27, 2026
adb9d94
Merge pull request #22293 from BerriAI/litellm_27_02_lock2
Sameerlite Feb 27, 2026
2553698
feat: health check max tokens
Harshit28j Feb 27, 2026
d13508c
Enable local file support for OCR (#22133)
noahnistler Feb 27, 2026
1144d05
feat(models): add gpt-audio-1.5 to model cost map
Chesars Feb 27, 2026
29bb73f
fix(mcp): strip stale mcp-session-id header to prevent 400 in multi-w…
gavksingh Feb 27, 2026
1f88754
feat(models): add gpt-realtime-1.5 to model cost map
Chesars Feb 27, 2026
c7ab631
fix(audio): detect gpt-realtime models as audio-capable for Chat Comp…
Chesars Feb 27, 2026
da73e54
fix: gpt-realtime-1.5 only supports /v1/realtime endpoint
Chesars Feb 27, 2026
1ca4dd8
fix: gpt-audio-1.5 only supports /v1/chat/completions endpoint
Chesars Feb 27, 2026
ad9c70e
Add LLMClientCache regression tests for httpx client eviction safety
ryan-crabbe Feb 27, 2026
98e944c
Merge pull request #22253 from BerriAI/litellm_access_group_sync
yuneng-jiang Feb 27, 2026
dc97e2f
Merge pull request #22306 from BerriAI/tests/add_llmclientcache_regre…
ryan-crabbe Feb 27, 2026
d8fa43a
Merge pull request #22303 from Chesars/feat/add-gpt-audio-1.5-model
Chesars Feb 27, 2026
ea5d551
Merge pull request #22304 from Chesars/feat/add-gpt-realtime-1.5-model
Chesars Feb 27, 2026
1943e02
Merge pull request #21582 from Chesars/fix/publicai-apertus-function-…
Chesars Feb 27, 2026
6490ad1
Revert "Add LLMClientCache regression tests for httpx client eviction…
ryan-crabbe Feb 27, 2026
0b7e9a1
Add e2e tests: httpx clients survive LLMClientCache eviction
ryan-crabbe Feb 27, 2026
dce597b
Close httpx clients after assertions to prevent resource leaks
ryan-crabbe Feb 27, 2026
d9cfae9
Merge pull request #22313 from BerriAI/tests/add_llmclientcache_regre…
ryan-crabbe Feb 27, 2026
88c465b
Merge pull request #20102 from Chesars/xai-deprecation-dates
Chesars Feb 27, 2026
2613277
[Feature] UI - Projects: Add Projects page with list and create flows
yuneng-jiang Feb 27, 2026
b5cd282
Merge upstream/main into feat/add-openrouter-native-models
Chesars Feb 27, 2026
e05865f
Merge pull request #20520 from Chesars/feat/add-openrouter-native-models
Chesars Feb 27, 2026
c47d219
docs: add openrouter/anthropic/claude-opus-4.6 to main model cost map
Chesars Feb 27, 2026
5628ba0
docs: remove openrouter/anthropic/claude-opus-4.6 from backup JSON
Chesars Feb 27, 2026
7d084df
Merge pull request #20525 from Chesars/docs/opus-4-6-openrouter-and-1…
Chesars Feb 27, 2026
8bb6457
[Fix] Include created_at and updated_at in /project/list response
yuneng-jiang Feb 27, 2026
7cffd77
Merge pull request #22323 from BerriAI/litellm_project_list_timestamps
yuneng-jiang Feb 27, 2026
03720ec
Merge pull request #22315 from BerriAI/litellm_projects_page
yuneng-jiang Feb 27, 2026
64c85db
Fix/claude code plugin schema (#22271)
rahulrd25 Feb 27, 2026
4fa6742
Add Prometheus child_exit cleanup for gunicorn workers
ryan-crabbe Feb 28, 2026
e445a32
Merge pull request #22324 from BerriAI/litellm_prometheus_child_exit_…
ryan-crabbe Feb 28, 2026
af6fe18
docs: update AssemblyAI docs with Universal-3 Pro, Speech Understandi…
dylan-duan-aai Feb 28, 2026
cb4cfa1
fix(mcp): update test mocks to use renamed filter_server_ids_by_ip_wi…
jquinter Feb 28, 2026
50ecfbc
Merge branch 'main' of https://github.com/BerriAI/litellm
Harshit28j Feb 28, 2026
9a48c8e
fix(test): update realtime guardrail test assertions for voice violat…
jquinter Feb 28, 2026
aa899b5
fix(bedrock): restore parallel_tool_calls mapping in map_openai_params
jquinter Feb 28, 2026
273994b
fix(test): update Azure pass-through test to mock litellm.completion
jquinter Feb 28, 2026
15fcd90
feat: add in_flight_requests metric to /health/backlog + prometheus (…
ishaan-jaff Feb 28, 2026
d292ed7
fix(db): add missing migration for LiteLLM_ClaudeCodePluginTable
jquinter Feb 28, 2026
2ac5365
fix: update stale docstring to match guardrail voicing behavior
jquinter Feb 28, 2026
9b20a05
Merge pull request #22332 from BerriAI/fix/realtime-guardrail-test-as…
jquinter Feb 28, 2026
332dc32
Merge pull request #22334 from BerriAI/fix/anthropic-passthrough-azur…
jquinter Feb 28, 2026
b192ba7
Merge pull request #22335 from BerriAI/fix/claude-code-plugin-migration
jquinter Feb 28, 2026
9278a31
Merge pull request #22333 from BerriAI/fix/bedrock-parallel-tool-call…
jquinter Feb 28, 2026
e3779a8
fix(lint): suppress PLR0915 too-many-statements in complex transform …
jquinter Feb 28, 2026
fb72979
fix(caching): store background task references in LLMClientCache._rem…
shivaaang Feb 26, 2026
8ce358e
[Feat] Agent RBAC Permission Fix - Ensure Internal Users cannot creat…
ishaan-jaff Feb 28, 2026
8b50703
Merge pull request #22327 from BerriAI/fix/mcp-test-mock-filter-metho…
jquinter Feb 28, 2026
594600d
fix: Add PROXY_ADMIN role to system user for key rotation (#21896)
milan-berri Feb 28, 2026
3e60ca3
fix: populate user_id and user_info for admin users in /user/info (#2…
milan-berri Feb 28, 2026
98bc247
Merge pull request #22143 from shivaaang/fix/llm-client-cache-unawait…
jquinter Feb 28, 2026
2d649f2
Merge pull request #22026 from ZeroClover/fix/img-extra-headers
jquinter Feb 28, 2026
d49abf8
[Fix] Pass MCP auth headers from request into tool fetch for /v1/resp…
shivamrawat1 Feb 28, 2026
1ac3c23
Update .github/scripts/close_duplicate_issues.py
jquinter Feb 28, 2026
94b7342
Update .github/workflows/check_duplicate_issues.yml
jquinter Feb 28, 2026
5a28ca9
Update .github/workflows/scan_duplicate_issues.yml
jquinter Feb 28, 2026
fcabf9b
fix(bedrock): filter internal json_tool_call when mixed with real tools
jquinter Feb 13, 2026
b983352
refactor: extract duplicated JSON unwrapping into helper method
jquinter Feb 15, 2026
fdf4c9d
fix: use correct class name AmazonConverseConfig in helper method calls
jquinter Feb 15, 2026
37ec9f8
fix: shorten guardrail benchmark result filenames for Windows long pa…
demoray Feb 24, 2026
bcf9acf
Update litellm/proxy/guardrails/guardrail_hooks/litellm_content_filte…
demoray Feb 24, 2026
9db4ab1
Merge pull request #22039 from demoray/bcaswell/fix-long-path-filenames
jquinter Feb 28, 2026
bffce84
Remove Apache 2 license from SKILL.md (#22322)
rasmi Feb 28, 2026
eea083f
fix(mcp): default available_on_public_internet to true (#22331)
ishaan-jaff Feb 28, 2026
8ab5428
Merge pull request #21107 from BerriAI/fix/bedrock-filter-json-tool-c…
jquinter Feb 28, 2026
ee703ce
fix(jwt): OIDC discovery URLs, roles array handling, dot-notation err…
ishaan-jaff Feb 28, 2026
9f24537
perf: streaming latency improvements β€” 4 targeted hot-path fixes (#22…
ishaan-jaff Feb 28, 2026
c4a0174
test: add comprehensive Vitest coverage for CostTrackingSettings
yuneng-jiang Feb 28, 2026
85590e4
Merge pull request #22354 from BerriAI/litellm_cost_tracking_vitest
yuneng-jiang Feb 28, 2026
6d8b5b7
[Feature] Key list endpoint: Add project_id and access_group_id filters
yuneng-jiang Feb 28, 2026
061703a
[Feature] UI - Projects: Add Project Details page with Edit modal
yuneng-jiang Feb 28, 2026
c4b21fa
Merge pull request #22356 from BerriAI/litellm_key_list_filters
yuneng-jiang Feb 28, 2026
50dc7b5
Update ui/litellm-dashboard/src/components/Projects/ProjectModals/Cre…
yuneng-jiang Feb 28, 2026
a4b7a93
Merge pull request #22360 from BerriAI/litellm_ui_project_info
yuneng-jiang Feb 28, 2026
b914c98
[Feature] UI - Projects: Add project key table, project dropdown on k…
yuneng-jiang Feb 28, 2026
8abba63
Merge pull request #22373 from BerriAI/litellm_ui_project_keys
yuneng-jiang Feb 28, 2026
e0168db
add docs and formatting
Harshit28j Feb 28, 2026
1576033
Merge pull request #22299 from BerriAI/litellm_health_check_tokens
Harshit28j Feb 28, 2026
0b7d8b9
fix: edge case when key alias empty
Harshit28j Feb 28, 2026
dee2a62
Add security vulnerability scan report to v1.81.14 release notes
Harshit28j Feb 28, 2026
539f2ee
Update litellm/proxy/management_endpoints/key_management_endpoints.py
Harshit28j Feb 28, 2026
24aa8ba
fix req changes test case
Harshit28j Feb 28, 2026
b392180
fix req change
Harshit28j Feb 28, 2026
09b557f
Merge pull request #22385 from BerriAI/litellm_security_release_notes
Harshit28j Feb 28, 2026
bfdea42
Merge pull request #22103 from Harshit28j/litellm_feat_datadog_metrics
Harshit28j Feb 28, 2026
df99be9
Merge pull request #22034 from BerriAI/feat/duplicate-issues-bot
jquinter Feb 28, 2026
1badece
fix: presidio req change
Harshit28j Feb 28, 2026
1073ba6
fix req changes
Harshit28j Feb 28, 2026
1c9ecd4
Merge pull request #22384 from BerriAI/litellm_aws_edge_case
Harshit28j Feb 28, 2026
53f3123
fix(ci): add custom CodeQL workflow to replace expensive default setup
jquinter Feb 28, 2026
e1d09a1
Merge pull request #22283 from BerriAI/litellm_presidio_stream_v3
Harshit28j Feb 28, 2026
d7340b5
Update .github/workflows/codeql.yml
jquinter Feb 28, 2026
99210e9
fix req changes
Harshit28j Feb 28, 2026
7f5c865
Merge pull request #18478 from Chesars/fix/prevent-scheduled-workflow…
Chesars Feb 28, 2026
10a91c5
fix(ci): remove duplicate env key in scan_duplicate_issues workflow
Chesars Feb 28, 2026
c3bb1cb
Merge pull request #22405 from Chesars/fix/scan-duplicate-issues-env
Chesars Feb 28, 2026
62d2bf2
Merge pull request #22328 from BerriAI/fix/ruff-plr0915-too-many-stat…
jquinter Feb 28, 2026
597f88d
Merge pull request #22002 from jquinter/fix/flaky-rpm-limit-test
jquinter Feb 28, 2026
ce07532
Merge pull request #22193 from BerriAI/test/secret-scan-ci
jquinter Feb 28, 2026
13ea00a
Merge pull request #22224 from BerriAI/fix/isolate-get-config-from-mo…
jquinter Feb 28, 2026
6e533e7
Merge pull request #20632 from Harshit28j/litellm_fix_tts_metrics
Harshit28j Feb 28, 2026
926d95c
[Feature] UI - Projects: Add delete project action to projects table
yuneng-jiang Feb 28, 2026
29e3fd5
[Release Fix] (#22411)
ishaan-jaff Feb 28, 2026
456ad50
fix(mcp): set LITELLM_MASTER_KEY env var in e2e tests to prevent life…
jquinter Feb 28, 2026
ccf2b7b
fix(ci): handle inline table in pyproject.toml for litellm-proxy-extr…
ishaan-jaff Feb 28, 2026
3e37f44
Merge pull request #22412 from BerriAI/litellm_ui_project_delete
yuneng-jiang Feb 28, 2026
3ff7059
fix: bump litellm-proxy-extras to 0.4.50 and fix 3 failing tests (#22…
ishaan-jaff Feb 28, 2026
65c5d5a
bump: version 1.81.16 β†’ 1.82.0
ishaan-jaff Feb 28, 2026
2285dc7
[Fix] UI - resolve flaky tests from leaked @tremor/react Tooltip timer
yuneng-jiang Feb 28, 2026
2abe290
[Feature] UI - Admin Settings: Add opt-in flag for Projects feature
yuneng-jiang Feb 28, 2026
e325db3
[Fix] Add useUISettings mock to KeyInfoView test
yuneng-jiang Feb 28, 2026
44c3b4b
[Feature] UI: Add New badges for Projects discoverability
yuneng-jiang Feb 28, 2026
8affa73
[Infra] Revert _experimental/out build artifacts from PR
yuneng-jiang Feb 28, 2026
7c2dc5c
[Infra] Restore _experimental/out to match branch base
yuneng-jiang Feb 28, 2026
c04be31
[Infra] Remove stale _experimental/out build artifacts
yuneng-jiang Feb 28, 2026
6a916e7
Merge pull request #22420 from BerriAI/litellm_fix_flaky_mcp_test
yuneng-jiang Feb 28, 2026
fef6fe0
Merge pull request #22416 from BerriAI/litellm_project_opt_in
yuneng-jiang Feb 28, 2026
0bfbadd
chore: update Next.js build artifacts (2026-02-28 18:44 UTC, node v22…
yuneng-jiang Feb 28, 2026
b54688c
Merge pull request #22423 from BerriAI/ui_build_feb28
yuneng-jiang Feb 28, 2026
17f9ccb
fix(mypy): fix 3 mypy errors in presidio.py and _health_endpoints.py …
ishaan-jaff Feb 28, 2026
b5f5b42
bump: litellm-enterprise 0.1.32 β†’ 0.1.33 + manual publish workflow (#…
ishaan-jaff Feb 28, 2026
aa62923
Merge pull request #22413 from BerriAI/fix/mcp-contextvar-propagation
jquinter Feb 28, 2026
bc9c28e
Merge pull request #22397 from BerriAI/fix/codeql-custom-workflow
jquinter Feb 28, 2026
edc19b4
[Fix] UI - Virtual Keys: Fix beforeunload listener memory leak in Use…
yuneng-jiang Feb 28, 2026
e375625
Development environment setup (#22432)
ishaan-jaff Feb 28, 2026
647b376
fix(test): add spend data polling + graceful skip to Gemini e2e spend…
ishaan-jaff Feb 28, 2026
4e3274c
Merge pull request #22430 from BerriAI/litellm_ui_memory_leak
yuneng-jiang Feb 28, 2026
b232e2f
docs(agents.md): update agents.md
Feb 28, 2026
755ae9e
Litellm stability fix v2 (#22452)
ishaan-jaff Feb 28, 2026
dc52c6d
fix(test): add missing mocks for test_streamable_http_mcp_handler_mock
cursoragent Mar 1, 2026
ca3e60a
fix(ci): route OpenAI models through chat completions in pass-through…
cursoragent Mar 1, 2026
a69d2e9
fix(ci): fix assemblyai custom auth and router wildcard test flakiness
cursoragent Mar 1, 2026
d4bd46b
ci: retrigger CI pipeline
cursoragent Mar 1, 2026
a8cf646
fix(mypy): use LitellmUserRoles enum instead of raw string in custom_…
cursoragent Mar 1, 2026
97947c2
fix: don't close HTTP/SDK clients on LLMClientCache eviction (#22926)
ishaan-jaff Mar 5, 2026
1666f6d
sync: merge v1.82.0-stable tag
Mar 16, 2026
ffd24fb
fix: resolve upstream sync conflicts for PR #100
github-actions[bot] Mar 16, 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
  •  
  •  
  •  
236 changes: 211 additions & 25 deletions .circleci/config.yml

Large diffs are not rendered by default.

36 changes: 36 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"permissions": {
"allow": [
"Bash(git show:*)",
"Bash(git worktree add:*)",
"Read(//Users/krrishdholakia/Documents/litellm/**)",
"Read(//Users/krrishdholakia/Documents/litellm-claude-code-guardrails/litellm/types/**)",
"Read(//Users/krrishdholakia/Documents/litellm-claude-code-guardrails/**)",
"Read(//Users/krrishdholakia/Documents/litellm-claude-code-guardrails/litellm/**)",
"Bash(python:*)",
"Bash(python -c \"\nimport sys; sys.path.insert\\(0, ''.''\\)\nfrom litellm.proxy.guardrails.guardrail_hooks.claude_code.guardrail import ClaudeCodeGuardrail, HOSTED_TOOL_PREFIXES\nprint\\(''HOSTED_TOOL_PREFIXES:'', HOSTED_TOOL_PREFIXES\\)\nprint\\(''ClaudeCodeGuardrail imported OK''\\)\n\")",
"Read(//Users/krrishdholakia/Documents/litellm-mcp-jwt-groups/litellm/proxy/**)",
"Read(//Users/krrishdholakia/Documents/litellm-mcp-jwt-groups/**)",
"Bash(poetry run pytest:*)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(poetry run python:*)",
"Bash(poetry run pip:*)",
"Bash(git reset:*)",
"Bash(git cherry-pick:*)",
"Bash(git checkout:*)",
"Read(//Users/krrishdholakia/Documents/litellm/litellm/proxy/guardrails/guardrail_hooks/**)",
"Read(//Users/krrishdholakia/Documents/**)",
"Bash(git -C /Users/krrishdholakia/Documents/litellm-mcp-user-permissions worktree list)",
"Bash(ls:*)"
],
"additionalDirectories": [
"/Users/krrishdholakia/Documents/litellm-mcp-group-plan/plan",
"/Users/krrishdholakia/Documents/litellm-claude-code-guardrails/litellm/proxy/guardrails/guardrail_hooks/claude_code",
"/Users/krrishdholakia/Documents/litellm-claude-code-guardrails/litellm/types",
"/Users/krrishdholakia/Documents/litellm-claude-code-guardrails",
"/Users/krrishdholakia/Documents/litellm-mcp-jwt-groups/litellm/proxy",
"/Users/krrishdholakia/Documents/litellm-mcp-jwt-groups/tests/test_litellm/proxy/auth"
]
}
}
2 changes: 1 addition & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ dist/
build/
*.egg-info/
.DS_Store
node_modules/
**/node_modules
*.log
.env
.env.local
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
blank_issues_enabled: true
contact_links:
- name: Schedule Demo
url: https://calendly.com/d/4mp-gd3-k5k/litellm-1-1-onboarding-chat
url: https://calendly.com/d/cx9p-5yf-2nm/litellm-introductions
about: Speak directly with Krrish and Ishaan, the founders, to discuss issues, share feedback, or explore improvements for LiteLLM
- name: Discord
url: https://discord.com/invite/wuPM9dRgDw
Expand Down
19 changes: 7 additions & 12 deletions .github/actions/helm-oci-chart-releaser/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,38 +40,33 @@ outputs:
runs:
using: composite
steps:
- name: Helm | Setup
uses: azure/setup-helm@v4
with:
version: v3.20.0

- name: Helm | Login
shell: bash
run: echo ${{ inputs.registry_password }} | helm registry login -u ${{ inputs.registry_username }} --password-stdin ${{ inputs.registry }}
env:
HELM_EXPERIMENTAL_OCI: '1'


- name: Helm | Dependency
if: inputs.update_dependencies == 'true'
shell: bash
run: helm dependency update ${{ inputs.path == null && format('{0}/{1}', 'charts', inputs.name) || inputs.path }}
env:
HELM_EXPERIMENTAL_OCI: '1'

- name: Helm | Package
shell: bash
run: helm package ${{ inputs.path == null && format('{0}/{1}', 'charts', inputs.name) || inputs.path }} --version ${{ inputs.tag }} --app-version ${{ inputs.app_version }}
env:
HELM_EXPERIMENTAL_OCI: '1'

- name: Helm | Push
shell: bash
run: helm push ${{ inputs.name }}-${{ inputs.tag }}.tgz oci://${{ inputs.registry }}/${{ inputs.repository }}
env:
HELM_EXPERIMENTAL_OCI: '1'

- name: Helm | Logout
shell: bash
run: helm registry logout ${{ inputs.registry }}
env:
HELM_EXPERIMENTAL_OCI: '1'

- name: Helm | Output
id: output
shell: bash
run: echo "image=${{ inputs.registry }}/${{ inputs.repository }}/${{ inputs.name }}:${{ inputs.tag }}" >> $GITHUB_OUTPUT
run: echo "image=${{ inputs.registry }}/${{ inputs.repository }}/${{ inputs.name }}:${{ inputs.tag }}" >> $GITHUB_OUTPUT
3 changes: 2 additions & 1 deletion .github/carto-features.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ features:
verification:
- pattern: "uuid.uuid4().hex"
file: litellm/llms/oci/chat/transformation.py
- pattern: "_handle_tool_call_delta"
# Note: upstream replaced _handle_tool_call_delta with _queue_tool_call_delta_events
- pattern: "_queue_tool_call_delta_events"
file: litellm/responses/litellm_completion_transformation/streaming_iterator.py

- name: "Snowflake Streaming + Tool Calling"
Expand Down
15 changes: 15 additions & 0 deletions .github/codeql/codeql-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
name: "LiteLLM CodeQL config"

# Exclude queries that produce result sets > 2 GiB on this codebase,
# causing 49+ minute runs that fail and block CI resources.
query-filters:
- exclude:
id: py/clear-text-logging-sensitive-data # CWE-312/CleartextLogging.ql β€” result set > 2 GiB
- exclude:
id: py/polynomial-redos # CWE-730/PolynomialReDoS.ql β€” result set > 2 GiB

paths-ignore:
- tests
- docs
- "**/*.md"
- litellm/proxy/_experimental/out
1 change: 1 addition & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
- [ ] I have Added testing in the [`tests/litellm/`](https://github.com/BerriAI/litellm/tree/main/tests/litellm) directory, **Adding at least 1 test is a hard requirement** - [see details](https://docs.litellm.ai/docs/extras/contributing_code)
- [ ] My PR passes all unit tests on [`make test-unit`](https://docs.litellm.ai/docs/extras/contributing_code)
- [ ] 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

## CI (LiteLLM team)

Expand Down
208 changes: 208 additions & 0 deletions .github/scripts/close_duplicate_issues.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
#!/usr/bin/env python3
"""
Detect and close duplicate GitHub issues using title similarity.

Modes:
--scan Compare all open issues against each other (batch)
--issue-number N Check a single issue against older open issues

Requires the `gh` CLI to be authenticated.
"""

import argparse
import difflib
import json
import re
import subprocess
import sys


def normalize_title(title: str) -> str:
"""Strip common prefixes, lowercase, and collapse whitespace."""
title = re.sub(
r"^\[?(bug|feature request|enhancement|question|docs)[:\]]?\s*",
"",
title,
flags=re.IGNORECASE,
)
return " ".join(title.lower().split())


def gh(*args: str) -> str:
"""Run a gh CLI command and return stdout."""
result = subprocess.run(
["gh", *args],
capture_output=True,
text=True,
check=True,
)
return result.stdout


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"
else:
endpoint = "repos/{owner}/{repo}/issues?state=open&per_page=100&sort=created&direction=asc"
cmd = ["api", "--paginate", endpoint]

raw = gh(*cmd)
# gh --paginate concatenates JSON arrays, so we may get multiple arrays
issues = []
for line in raw.strip().splitlines():
line = line.strip()
if not line:
continue
parsed = json.loads(line)
if isinstance(parsed, list):
issues.extend(parsed)
else:
issues.append(parsed)

# Filter out pull requests (they also appear in the issues endpoint)
return [i for i in issues if "pull_request" not in i]


def close_as_duplicate(
issue_number: int, duplicate_of: int, repo: str | None, dry_run: bool
) -> None:
"""Close an issue as duplicate of another, adding a comment and label."""
repo_args = ["--repo", repo] if repo else []

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

# Add comment
comment_body = (
f"Closing as duplicate of #{duplicate_of}.\n\n"
"If you believe this is not a duplicate, please reopen and add context "
"explaining how this differs."
)
gh("issue", "comment", str(issue_number), "--body", comment_body, *repo_args)

# Add label
gh("issue", "edit", str(issue_number), "--add-label", "duplicate", *repo_args)

# Close with not_planned reason
gh(
"api",
f"repos/{repo or '{owner}/{repo}'}/issues/{issue_number}",
"-X",
"PATCH",
"-f",
"state=closed",
"-f",
"state_reason=not_planned",
)

print(f" Closed #{issue_number} as duplicate of #{duplicate_of}")


def find_duplicate(
issue: dict, candidates: list[dict], threshold: float
) -> dict | None:
"""Return the first candidate whose normalized title is above threshold."""
norm = normalize_title(issue["title"])
for candidate in candidates:
if candidate["number"] == issue["number"]:
continue
cand_norm = normalize_title(candidate["title"])
ratio = difflib.SequenceMatcher(None, norm, cand_norm).ratio()
if ratio >= threshold:
return candidate
return None


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"])
closed_count = 0

for idx, issue in enumerate(issues):
older = issues[:idx]
if not older:
continue
dup = find_duplicate(issue, older, threshold)
if dup:
ratio = difflib.SequenceMatcher(
None,
normalize_title(issue["title"]),
normalize_title(dup["title"]),
).ratio()
print(
f"#{issue['number']}: \"{issue['title']}\"\n"
f" -> duplicate of #{dup['number']}: \"{dup['title']}\" "
f"({ratio:.0%} similar)"
)
close_as_duplicate(issue["number"], dup["number"], repo, dry_run)
closed_count += 1

return closed_count


def check_single(
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
for i in issues:
if i["number"] == issue_number:
target = i
break

if target is None:
print(f"Issue #{issue_number} not found among open issues.")
return False

older = [i for i in issues if i["number"] < issue_number]
dup = find_duplicate(target, older, threshold)
if dup:
ratio = difflib.SequenceMatcher(
None,
normalize_title(target["title"]),
normalize_title(dup["title"]),
).ratio()
print(
f"#{target['number']}: \"{target['title']}\"\n"
f" -> duplicate of #{dup['number']}: \"{dup['title']}\" "
f"({ratio:.0%} similar)"
)
close_as_duplicate(issue_number, dup["number"], repo, dry_run)
return True

print(f"#{issue_number}: no duplicate found above threshold {threshold}")
return False


def main() -> None:
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.")
args = parser.parse_args()

dry_run = not args.close

if dry_run:
print("=== DRY RUN MODE (pass --close to actually close issues) ===\n")

print("Fetching open issues...")
issues = fetch_open_issues(args.repo)
print(f"Found {len(issues)} open issues.\n")

if args.scan:
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)
sys.exit(0 if found else 0) # Always exit 0; finding no dup is not an error


if __name__ == "__main__":
main()
1 change: 1 addition & 0 deletions .github/workflows/auto_update_price_and_context_window.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:

jobs:
auto_update_price_and_context_window:
if: github.repository == 'BerriAI/litellm'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
Expand Down
27 changes: 25 additions & 2 deletions .github/workflows/check_duplicate_issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,33 @@ jobs:
reaction: eyes
comment: |
**⚠️ Potential duplicate detected**

This issue appears similar to existing issue(s):
{{#issues}}
- [#{{number}}]({{html_url}}) - {{title}} ({{accuracy}}% similar)
{{/issues}}

Please review the linked issue(s) to see if they address your concern. If this is not a duplicate, please provide additional context to help us understand the difference.

- name: Checkout close script
if: github.event.action == 'opened'
uses: actions/checkout@v4
with:
sparse-checkout: .github/scripts

- name: Set up Python
if: github.event.action == 'opened'
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Auto-close if high-confidence duplicate
if: github.event.action == 'opened'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python3 .github/scripts/close_duplicate_issues.py \
--issue-number ${{ github.event.issue.number }} \
--repo ${{ github.repository }} \
--threshold 0.85 \
--close
Loading
Loading