Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
3746 commits
Select commit Hold shift + click to select a range
003e841
fix(tests): update BFL image generation tests for new signature
cursoragent Mar 13, 2026
9a35664
fix(tests): stabilize 3 failing CI tests
cursoragent Mar 13, 2026
2b20698
chore: revert accidental _experimental/out/ changes
cursoragent Mar 13, 2026
beb521b
Merge pull request #23437 from BerriAI/litellm_user-info-endpoint-v2-…
yuneng-jiang Mar 13, 2026
b7c43d9
Fix public model hub not showing config-defined models after save
yuneng-jiang Mar 13, 2026
db0819a
Fix same stale-overwrite bug in update_useful_links
yuneng-jiang Mar 13, 2026
92d39c3
fix(gemini): preserve toolConfig on native generate_content (#23493)
emerzon Mar 13, 2026
fa3f30c
Merge pull request #23501 from BerriAI/litellm_public_model_hub_fix
yuneng-jiang Mar 13, 2026
a5b86d3
fix: revert realtime endpoint change, replace fragile asserts with fa…
cursoragent Mar 13, 2026
177edb0
fix: stabilize 5 CI test failures
cursoragent Mar 13, 2026
ff14539
fix(ci): skip tests requiring openai>=2.x and MCP M2M oauth2_flow
cursoragent Mar 13, 2026
ef78fa7
Merge pull request #23496 from BerriAI/bump_ver_1822
yuneng-jiang Mar 13, 2026
9cd7ad2
chore: regenerate poetry.lock to match pyproject.toml (#23514)
github-actions[bot] Mar 13, 2026
a9e45e7
fix: revert presidio streaming type changes (unsafe cast)
cursoragent Mar 13, 2026
2eafe5a
Merge pull request #23496 from BerriAI/bump_ver_1822
yuneng-jiang Mar 13, 2026
0235aaf
Merge pull request #23500 from BerriAI/litellm_litellm-mypy-errors-28de
yuneng-jiang Mar 13, 2026
15075ef
fix(tests): update outdated model names in o1 and gemini tests
yuneng-jiang Mar 13, 2026
3489d1d
fix(tests): update outdated model names in wildcard model tests
yuneng-jiang Mar 13, 2026
3e5199d
fix(tests): stabilize 5 flaky/outdated router integration tests
yuneng-jiang Mar 13, 2026
8882b61
fix(tests): update deprecated gemini-1.5-pro model refs in vertex tests
yuneng-jiang Mar 13, 2026
8ca7440
[Fix] Malformed messages returning 500 instead of 400
yuneng-jiang Mar 13, 2026
45ba9e1
fix(anthropic): preserve native tool format when guardrails convert t…
Sameerlite Mar 13, 2026
600bf03
fix(router): sync vector store wrapper missing model argument
yuneng-jiang Mar 13, 2026
98ed295
fix(tests): fix flaky realtime WebRTC endpoint tests
yuneng-jiang Mar 13, 2026
06681dd
Fix flaky audio streaming cost assertion in test_standard_logging_pay…
yuneng-jiang Mar 13, 2026
2a99799
fix(sso): replace httpx.AsyncClient() with get_async_httpx_client
yuneng-jiang Mar 13, 2026
b151ea6
[Fix] Extract _validate_token_response to fix PLR0915 (51 > 50 statem…
yuneng-jiang Mar 13, 2026
5dab326
fix(tests): update deprecated model refs in test_completion_cost
yuneng-jiang Mar 13, 2026
124b44e
fix(tests): update PKCE SSO tests to mock get_async_httpx_client
yuneng-jiang Mar 13, 2026
002d64b
fix(tests): increase MAX_CALLS and reduce sleep in flaky e2e budget test
yuneng-jiang Mar 13, 2026
377c12b
Allow setting organization_id on key update endpoint
yuneng-jiang Mar 13, 2026
3012c6d
fix(tests): replace fixed sleeps with polling in spend accuracy tests
yuneng-jiang Mar 13, 2026
b08f464
fix(tests): replace deprecated model refs in cost and model_info tests
yuneng-jiang Mar 13, 2026
a5bec49
Fix _supports_reasoning_effort_level for responses bridge
Sameerlite Mar 13, 2026
90b03f6
Revert "feat(openai): drop reasoning_effort for gpt-5.4 when tools pr…
Sameerlite Mar 13, 2026
288b08f
Fix routing of tool call + reasoning effor for gpt-5.4
Sameerlite Mar 13, 2026
9b3ffd0
Reserve reasoning for responses via chat completion
Sameerlite Mar 13, 2026
118d811
Include time window in export filename to prevent Vantage overwrites
Harshit28j Mar 13, 2026
511cd2b
fix: silent metrics race condition
Harshit28j Mar 13, 2026
7e662af
feat(azure): Azure Model Router cost breakdown in UI + additional_cos…
Sameerlite Mar 13, 2026
ac8d6d4
fix: ensure metadata isolation in silent experiment to prevent metric…
Harshit28j Mar 13, 2026
4e42333
fix claude.md
ishaan-jaff Mar 13, 2026
2b61f2a
ui logo (#23556)
ishaan-jaff Mar 13, 2026
b98ecd8
fix(tests): quarantine flaky test_oidc_circle_v1_with_amazon
yuneng-jiang Mar 13, 2026
61cee53
fix(tests): fix flaky qwen global endpoint test by mocking AsyncHTTPH…
yuneng-jiang Mar 13, 2026
11cf288
fix(tests): fix broken test_router_fallbacks_with_cooldowns_and_model_id
yuneng-jiang Mar 13, 2026
6ebd457
fix(tests): update remaining PKCE SSO tests to mock get_async_httpx_c…
yuneng-jiang Mar 13, 2026
8dc198e
Merge pull request #23535 from Sameerlite/litellm_improve_qa-5.4
yuneng-jiang Mar 13, 2026
2b71b0f
Revert "QA: improve gpt-5.4 code/bugs"
yuneng-jiang Mar 13, 2026
4c3a4e6
Merge pull request #23566 from BerriAI/revert-23535-litellm_improve_q…
yuneng-jiang Mar 13, 2026
9ad2223
[Fix] Convert _has_attribute_error_in_chain from recursive to iterative
yuneng-jiang Mar 13, 2026
0fbfb8e
fix(tests): remove test_oidc_circle_v1_with_amazon_fips that depends …
yuneng-jiang Mar 13, 2026
488a4d2
bumping tar for security
yuneng-jiang Mar 13, 2026
1b96064
fix(proxy): prevent OOM/Prisma connection loss from unbounded managed…
ishaan-jaff Mar 13, 2026
6a90596
updating Dockerfile to tar 7.5.11
yuneng-jiang Mar 13, 2026
e88ee33
[Fix] Resolve 7 mypy linting errors across 5 files
yuneng-jiang Mar 13, 2026
3596464
Revert "feat(openai): drop reasoning_effort for gpt-5.4 when tools pr…
Sameerlite Mar 13, 2026
7abbe2d
Fix routing of tool call + reasoning effor for gpt-5.4
Sameerlite Mar 13, 2026
30645d6
Reserve reasoning for responses via chat completion
Sameerlite Mar 13, 2026
408b717
Fix gpt 5 transformation tests
Sameerlite Mar 13, 2026
1642a2f
[Fix] Populate _hidden_params.model_id in batch terminal-state shortc…
yuneng-jiang Mar 13, 2026
57397e0
Merge pull request #23576 from Sameerlite/litellm_gpt54-tools-reasoni…
yuneng-jiang Mar 13, 2026
a6ab172
[Fix] Use type:ignore instead of Union return type for realtime endpoint
yuneng-jiang Mar 13, 2026
7dce61c
fix(tests): update TestGPT5ReasoningEffortPreservation for dict norma…
Sameerlite Mar 13, 2026
efe6ddf
Merge pull request #23577 from Sameerlite/litellm_gpt54-tools-reasoni…
yuneng-jiang Mar 13, 2026
25e161a
fix(tests): remove test_completion_bedrock_claude_sts_oidc_auth and t…
yuneng-jiang Mar 13, 2026
e40ebf2
Revert "[Fix] Populate _hidden_params.model_id in batch terminal-stat…
yuneng-jiang Mar 13, 2026
1f71578
[Fix] Add flaky reruns to test_e2e_managed_batch
yuneng-jiang Mar 13, 2026
5b755db
[Fix] Correct mypy fixes for realtime_api and presidio
yuneng-jiang Mar 13, 2026
ca20330
[Fix] Populate _hidden_params.model_id in batch terminal-state shortc…
yuneng-jiang Mar 13, 2026
57865ec
Revert "[Fix] Populate _hidden_params.model_id in batch terminal-stat…
yuneng-jiang Mar 13, 2026
4e70254
[Fix] Increase _delete_file retry budget to reduce flakiness
yuneng-jiang Mar 13, 2026
e277963
[Fix] Fix test_users_in_team_budget using model with no pricing data
yuneng-jiang Mar 13, 2026
3ec7c2a
[Fix] Fail fast when team member spend not flushed in time
yuneng-jiang Mar 13, 2026
f5662ee
[Fix] Update otel and spend tracking test configs to use gpt-3.5-turbo
yuneng-jiang Mar 13, 2026
f351bbd
[Fix] Derive SPEND_PER_REQUEST dynamically in spend accuracy tests
yuneng-jiang Mar 13, 2026
0e44c46
Merge pull request #23584 from BerriAI/litellm_release_day_03_12_2026
yuneng-jiang Mar 13, 2026
0b3dc00
Merge remote-tracking branch 'origin' into litellm_internal_dev_03_12…
yuneng-jiang Mar 13, 2026
133471f
Fix double-counting bug in org/team key limit checks on update
yuneng-jiang Mar 13, 2026
1038a11
Skip org limit check when non-throughput fields are updated
yuneng-jiang Mar 13, 2026
818c097
Fix self-exclusion hash mismatch and missing throughput field checks
yuneng-jiang Mar 13, 2026
dca231e
Merge pull request #23557 from BerriAI/litellm_ui_key_org-2
yuneng-jiang Mar 13, 2026
3aeca22
fix(test): update test_responses_background_cost assertions for pagin…
yuneng-jiang Mar 13, 2026
85e5ef4
Merge pull request #23589 from BerriAI/litellm_fix_responses_backgrou…
yuneng-jiang Mar 13, 2026
1d403e9
refactor(key_management): extract validation logic from update_key_fn…
yuneng-jiang Mar 13, 2026
811ce13
Merge pull request #23590 from BerriAI/litellm_refactor_update_key_fn
yuneng-jiang Mar 13, 2026
6549b45
Merge pull request #23591 from BerriAI/litellm_internal_dev_03_12_2026
yuneng-jiang Mar 13, 2026
c6da457
temp commit
yuneng-jiang Mar 14, 2026
8069829
Merge branch 'litellm_internal_dev_03_13_2026' of github.com:BerriAI/…
yuneng-jiang Mar 14, 2026
546ecfb
added doc
Mar 14, 2026
2405e0d
Merge pull request #23592 from BerriAI/docs_per_model_tpm_rpm_for_teams
shivamrawat1 Mar 14, 2026
c637c93
[Fix] Skip all-team-models sentinel in team change validation
yuneng-jiang Mar 14, 2026
bce37e2
[Test] Add tests for organization dropdown in key create/edit
yuneng-jiang Mar 14, 2026
f6a8087
[Test] Add test for all-team-models sentinel skip in team change vali…
yuneng-jiang Mar 14, 2026
82cdb5b
Merge pull request #23595 from BerriAI/litellm_ui_keys_org_13
yuneng-jiang Mar 14, 2026
9379f24
fix: req changes by greptile on test coverage
Harshit28j Mar 14, 2026
550ef1e
fix: test coverage
Harshit28j Mar 14, 2026
4fb71e4
[Fix] Fix tag/list 500 error from invalid Prisma group_by kwargs
yuneng-jiang Mar 14, 2026
a0a951b
fix: forward extra_headers to HuggingFace embedding calls (#23525)
Jah-yee Mar 14, 2026
7bb2d78
fix: add getPopupContainer to Select components in fallback modal to …
gambletan Mar 14, 2026
c7ba794
PR #22867 added _remove_scope_from_cache_control for Bedrock and Azur…
awais786 Mar 14, 2026
a94b961
fix: auto-fill reasoning_content for moonshot kimi reasoning models i…
pradyyadav Mar 14, 2026
1b0c4bd
Add unit tests for 5 previously untested UI components
yuneng-jiang Mar 14, 2026
81474c1
Handle response.failed, response.incomplete, and response.cancelled (…
xianzongxie-stripe Mar 14, 2026
25ee2fb
fix(security): bump tar to 7.5.11 and tornado to 6.5.5 (#23602)
joereyna Mar 14, 2026
957dbf5
Merge pull request #23607 from BerriAI/litellm_ui_component_unit_tests
yuneng-jiang Mar 14, 2026
f0d283c
[Feature] UI - Default Team Settings: Modernize page and fix defaults…
yuneng-jiang Mar 14, 2026
3ae9e07
[Feature] UI - Usage: Auto-paginate daily spend data with progressive…
yuneng-jiang Mar 14, 2026
01ed0e0
fix: ensure metadata isolation for silent model metrics
Harshit28j Mar 14, 2026
dc6f68b
Update tests/test_litellm/test_router_silent_experiment.py
Harshit28j Mar 14, 2026
6c3e036
Merge branch 'main' into litellm_fix_responses_bridge_gpr-5.4
Sameerlite Mar 14, 2026
83e6096
[Feature] UI - Internal Users: Add/remove team membership from user i…
yuneng-jiang Mar 14, 2026
fcbfcf7
Merge pull request #23533 from Sameerlite/litellm_fix_responses_bridg…
yuneng-jiang Mar 14, 2026
dd1a3e1
Merge pull request #23526 from Sameerlite/litellm_anthropic-guardrail…
yuneng-jiang Mar 14, 2026
36c076d
Merge pull request #23550 from Sameerlite/litellm_azure-model-router-…
yuneng-jiang Mar 14, 2026
b87d1f8
[Feat] - Ishaan main merge branch (#23596)
ishaan-jaff Mar 14, 2026
0cd4a68
[Fix] Add missing networking mocks to CreateKeyPage test
yuneng-jiang Mar 14, 2026
d72a34d
add docs and export fixes
Harshit28j Mar 14, 2026
db37f31
[Fix] Address review feedback on paginated daily activity hook
yuneng-jiang Mar 14, 2026
e8e46af
Merge pull request #23638 from BerriAI/litellm_ui_user_info_teams
yuneng-jiang Mar 14, 2026
4897faa
Merge pull request #23333 from Harshit28j/litellm_FOCUS_preserve-summary
yuneng-jiang Mar 14, 2026
24ae5cc
Merge pull request #23542 from Harshit28j/litellm_silent_metrics_v2
yuneng-jiang Mar 14, 2026
b793eee
fix: tiktoken cache nonroot offline (#23498)
milan-berri Mar 14, 2026
d29287c
fix: normalize content_filtered finish_reason (#23564)
milan-berri Mar 14, 2026
f72931a
[Feature] UI - Usage: Prominent fetch banner, batched pagination renders
yuneng-jiang Mar 14, 2026
6b783cc
Merge pull request #23614 from BerriAI/litellm_team_default_permissions
yuneng-jiang Mar 14, 2026
26d555f
Merge pull request #23606 from BerriAI/litellm_tag_spend_fix
yuneng-jiang Mar 14, 2026
d26faeb
[Fix] UI - Usage: Reduce batch size to 3, add loading spinner to fetc…
yuneng-jiang Mar 14, 2026
2c840f1
Merge pull request #23622 from BerriAI/litellm_usage_page_auto_pagina…
yuneng-jiang Mar 14, 2026
6abdf5a
[Fix] Responses bridge variable mismatch and outdated CI tests
yuneng-jiang Mar 14, 2026
8be79c9
[Docs] Add Vantage environment variables to config_settings reference
yuneng-jiang Mar 14, 2026
fbad073
[Fix] Use cached async HTTP client in Vantage destination
yuneng-jiang Mar 14, 2026
d049d35
[Fix] Drop unnecessary timeout param from get_async_httpx_client call
yuneng-jiang Mar 14, 2026
8be5323
Merge pull request #23646 from BerriAI/litellm_fix_ci_test_failures_0…
yuneng-jiang Mar 14, 2026
d7c9ec6
add tests for fix
Harshit28j Mar 14, 2026
8abf2d8
fix: Fixes https://github.com/BerriAI/litellm/issues/23185 (#23647)
Mar 14, 2026
0066ad7
Merge pull request #23649 from Harshit28j/litellm_tests_leak
yuneng-jiang Mar 14, 2026
4f04d26
Merge branch 'main' into litellm_langfuse-session-trace-fix
Harshit28j Mar 14, 2026
03231f3
[Fix] CI failures: mypy type error, ruff lint, and flaky router test
yuneng-jiang Mar 14, 2026
e76c1f2
Merge pull request #23651 from BerriAI/litellm_fix_ci_failures_03_14
yuneng-jiang Mar 14, 2026
94eabff
Merge pull request #22390 from Harshit28j/litellm_langfuse-session-tr…
yuneng-jiang Mar 14, 2026
47c3840
Litellm dev 03 14 2026 p1 (#23653)
Mar 14, 2026
af0c2f6
docs: add Claude Code skills page for litellm-skills (#23642)
ishaan-jaff Mar 14, 2026
e4fa6f5
Merge remote-tracking branch 'origin' into litellm_internal_dev_03_14…
yuneng-jiang Mar 14, 2026
a2708f3
Merge pull request #23658 from BerriAI/litellm_internal_dev_03_13_2026
yuneng-jiang Mar 14, 2026
374c345
feat: add sagemaker_nova provider for Amazon Nova models on SageMaker…
ryanh-ai Mar 14, 2026
2bd527e
[Fix] Prevent second responses_api_bridge_check from overwriting first
yuneng-jiang Mar 14, 2026
e0b3fcb
refactor: update pr template to invite users to slack oss
Mar 14, 2026
61d1e33
Merge pull request #23665 from BerriAI/litellm_fix_responses_bridge_o…
yuneng-jiang Mar 14, 2026
47ddd0d
fix: redact secrets from proxy log output
ryan-crabbe Mar 14, 2026
e45c82a
docs: add LITELLM_DISABLE_REDACT_SECRETS to environment variable refe…
ryan-crabbe Mar 14, 2026
1d753c3
[Fix] Allow team admins to query /user/filter/ui when scope_user_sear…
yuneng-jiang Mar 14, 2026
d4c396d
Merge pull request #23671 from BerriAI/litellm_team_admin_user_filter…
yuneng-jiang Mar 14, 2026
cda8fbe
Merge pull request #23668 from BerriAI/litellm_fix_redaction_filter_l…
yuneng-jiang Mar 14, 2026
d28e42d
chore: update Next.js build artifacts (2026-03-14 23:50 UTC, node v22…
yuneng-jiang Mar 14, 2026
b96f033
fix: prisma migrate deploy failures on pre-existing instances (#23655)
Mar 14, 2026
27f1d33
Downgrade resource_class on over-provisioned CI jobs
yuneng-jiang Mar 15, 2026
b14eade
Fix hanging CI tests in test_http_handler.py
yuneng-jiang Mar 15, 2026
062cd4a
Remove gc.get_objects() from test_gemini_session_leak.py
yuneng-jiang Mar 15, 2026
460f620
Fix __main__ exit bug, close litellm_async_client, restore global state
yuneng-jiang Mar 15, 2026
d907a81
Merge pull request #23674 from BerriAI/litellm_fix_hanging_httpx_tests
yuneng-jiang Mar 15, 2026
82fc819
Merge remote-tracking branch 'origin' into litellm_internal_dev_03_14…
yuneng-jiang Mar 15, 2026
be20a8a
Add CodSpeed performance benchmarks (#23676)
codspeed-hq[bot] Mar 15, 2026
b988a8d
Merge pull request #23654 from BerriAI/litellm_internal_dev_03_14_2026
yuneng-jiang Mar 15, 2026
c1dadc0
bumping pyJWT for security
yuneng-jiang Mar 15, 2026
188a864
updating poetry lock
yuneng-jiang Mar 15, 2026
eb7222c
[Infra] Reduce CI no_output_timeout and tighten Playwright timeouts
yuneng-jiang Mar 15, 2026
1f48500
fix: update PyJWT pin in Dockerfile.non_root to 2.12.0
yuneng-jiang Mar 15, 2026
d3587b1
fix: bump PyJWT to 2.12.0 in all Dockerfiles and tar to 7.5.11
yuneng-jiang Mar 15, 2026
95b6821
Speed up ui_unit_tests CI job (~20min -> ~5-7min)
yuneng-jiang Mar 15, 2026
548e7eb
Merge pull request #23678 from BerriAI/litellm_security_bump_mar14
yuneng-jiang Mar 15, 2026
45ff66a
Add ui_unit_tests as requirement for publish_to_pypi
yuneng-jiang Mar 15, 2026
e38ee6a
Optimize ui_build job and gate ui_unit_tests behind it
yuneng-jiang Mar 15, 2026
6147682
Switch test_bad_database_url from Dockerfile.non_root to Dockerfile.d…
yuneng-jiang Mar 15, 2026
cc80771
Cache Next.js build cache for ui_build job
yuneng-jiang Mar 15, 2026
5091375
Consolidate duplicate Docker image builds to reuse pre-built image
yuneng-jiang Mar 15, 2026
f838bea
Optimize CI: parallelize router and guardrails test jobs, fix test is…
yuneng-jiang Mar 15, 2026
f73ff72
Fix router test isolation: update deprecated model, remove shared Red…
yuneng-jiang Mar 15, 2026
bcd887e
Fix test_async_fallbacks_streaming to use mock_response instead of re…
yuneng-jiang Mar 15, 2026
023654d
Fix flaky CI tests: mock timeout race, update deprecated model, fix c…
yuneng-jiang Mar 15, 2026
568726b
Fix test_aaarouter_dynamic_cooldown_message_retry_time isolation issue
yuneng-jiang Mar 15, 2026
968d7a3
Fix test isolation: save/restore pre_call_rules and post_call_rules
yuneng-jiang Mar 15, 2026
717d37c
Fix flaky CI: update deprecated model, filter leaked async task logs
yuneng-jiang Mar 15, 2026
ed1320e
Fix test_completion_sagemaker_messages_api retry flakiness
yuneng-jiang Mar 15, 2026
82d3b23
Update deprecated Together AI model in test_completion_together_ai_llama
yuneng-jiang Mar 15, 2026
2e27e32
Downsize remaining xlarge CI jobs to match actual workload
yuneng-jiang Mar 15, 2026
87e3e84
Set semgrep job to medium resource class explicitly
yuneng-jiang Mar 15, 2026
31e6393
Fix flaky proxy_e2e_azure_batches_tests: populate _hidden_params for …
yuneng-jiang Mar 15, 2026
67e905f
Fix flaky encrypted_content_affinity tests: clear HTTP client cache, …
yuneng-jiang Mar 15, 2026
ff869e9
Fix flaky caching tests: use mock_response, add parallelism, remove f…
yuneng-jiang Mar 15, 2026
a75964f
Fix batch retrieve double-encoding: resolve output_file_id via DB loo…
yuneng-jiang Mar 15, 2026
a66b635
Upsize ui_build and ui_unit_tests CI machines for faster feedback
yuneng-jiang Mar 15, 2026
1092c17
Fix flaky encrypted_content_affinity tests: mock at handler level
yuneng-jiang Mar 15, 2026
673f3d5
Increase file deletion retry budget to 50s for batch_processed race
yuneng-jiang Mar 15, 2026
65575f3
Fix pytest -n worker oversubscription to match available CPUs
yuneng-jiang Mar 15, 2026
4c4246a
Downgrade oversized resource classes to match actual workload
yuneng-jiang Mar 15, 2026
a81a196
Fix test isolation: clear litellm.callbacks and model_fallbacks betwe…
yuneng-jiang Mar 15, 2026
a95cae6
Speed up build_docker_database_image: drop Docker upgrade, use zstd
yuneng-jiang Mar 16, 2026
670f8a1
Fix flaky test_caching_with_ttl by using distinct mock responses
yuneng-jiang Mar 16, 2026
ec537dd
Add -n 2 parallelism to 8 medium jobs running serial tests
yuneng-jiang Mar 16, 2026
40edb16
Fix test isolation: run eager tiktoken tests in subprocesses
yuneng-jiang Mar 16, 2026
0b9a242
Fix flaky vertex pass-through spend test by polling instead of fixed …
yuneng-jiang Mar 16, 2026
beee329
Fix flaky test_gemini_image_generation_async by removing non-determin…
yuneng-jiang Mar 16, 2026
4030a8b
Fix flaky tests: anthropic error_msg state leak and vertex llama 404
yuneng-jiang Mar 16, 2026
3d45ba3
Fix flaky vertex_ai overhead test by mocking auth and HTTP calls
yuneng-jiang Mar 16, 2026
4fc0975
Fix flaky e2e batch test: set batch_processed=True on completion in r…
yuneng-jiang Mar 16, 2026
19e8a16
Optimize logging_testing CI: suppress DEBUG logs, fix xdist isolation
yuneng-jiang Mar 16, 2026
92ad90d
Fix logging_testing: expand save/restore to cover redaction and other…
yuneng-jiang Mar 16, 2026
f2edc52
Fix flaky batch tests: mock vertex auth and skip on DNS failure
yuneng-jiang Mar 16, 2026
13a4659
Fix logging_testing: clear _in_memory_loggers and add missing globals
yuneng-jiang Mar 16, 2026
27d0ffe
Fix flaky AWS secret manager tests by skipping on ThrottlingException
yuneng-jiang Mar 16, 2026
9b77524
Fix logging_testing: capture true defaults at conftest import time
yuneng-jiang Mar 16, 2026
cc027a2
Fix flaky test_langsmith_queue_logging: poll instead of fixed sleep
yuneng-jiang Mar 16, 2026
9d06f53
Fix flaky test_claude_agent_sdk_streaming: add retry and stronger prompt
yuneng-jiang Mar 16, 2026
09271a4
Mark test_redis_cache_completion_stream as flaky with retries
yuneng-jiang Mar 16, 2026
f3cc292
[Infra] Speed up CI: batch pip installs and fix pytest -n parallelism
yuneng-jiang Mar 16, 2026
59f0db0
[Fix] Remove anyio==4.2.0 pin from local_testing batched installs
yuneng-jiang Mar 16, 2026
c1efbd3
[Fix] Drop httpx and opentelemetry pins from local_testing batched in…
yuneng-jiang Mar 16, 2026
74e57bd
Optimize CI test jobs: increase xdist workers, drop coverage, add cac…
yuneng-jiang Mar 16, 2026
1a00dd4
Fix router test isolation for xdist and rebalance proxy unit tests
yuneng-jiang Mar 16, 2026
26207bb
[Infra] Speed up mapped test jobs: uv installs, site-packages caching…
yuneng-jiang Mar 16, 2026
379c395
[Fix] Use uv for requirements.txt only, pip for test deps with confli…
yuneng-jiang Mar 16, 2026
65b3335
[Infra] Use uv for requirements.txt installs across 22 CI jobs
yuneng-jiang Mar 16, 2026
9711e3a
Fix xdist test isolation: capture true defaults and poll instead of s…
yuneng-jiang Mar 16, 2026
f07301a
[Infra] Optimize CI: right-size resource classes, drop unused coverag…
yuneng-jiang Mar 16, 2026
ae1e827
[Infra] Optimize CI: add xdist to caching tests, drop Docker CLI inst…
yuneng-jiang Mar 16, 2026
b4f7d11
Revert "Fix xdist test isolation: capture true defaults and poll inst…
yuneng-jiang Mar 16, 2026
eba54ba
[Fix] Add aurelio_sdk --no-deps alongside semantic_router in guardrai…
yuneng-jiang Mar 16, 2026
f68a9be
[Infra] Optimize CI: migrate litellm_security_tests from machine to d…
yuneng-jiang Mar 16, 2026
96183e8
[Fix] Drop --no-deps from aurelio_sdk in guardrails and enterprise tests
yuneng-jiang Mar 16, 2026
ca4329a
Root cause fix - migrate all logging update to use 1 function - for c…
Mar 16, 2026
cd37ee1
fix: make db migration failure exit opt-in via --enforce_prisma_migra…
Mar 16, 2026
5db6aef
[Fix] Restore xdist test isolation: capture true defaults and poll co…
yuneng-jiang Mar 16, 2026
acfaea9
[Fix] Reset api_base/api_key in xdist conftest to prevent cross-test …
yuneng-jiang Mar 16, 2026
f434cdb
[Fix] Remove flush_cache from llm_translation conftest to prevent con…
yuneng-jiang Mar 16, 2026
2372427
[Fix] Remove xdist from caching_unit_tests to fix GCS cache test fail…
yuneng-jiang Mar 16, 2026
ccfe4b5
[Fix] Restore unconditional importlib.reload for llm_translation conf…
yuneng-jiang Mar 16, 2026
9cec81a
[Fix] Revert proxy unit test groupings to prevent xdist state pollution
yuneng-jiang Mar 16, 2026
8f56ddb
Merge remote main into litellm_ci_optimize
yuneng-jiang Mar 16, 2026
58e74a6
Merge pull request #23721 from BerriAI/litellm_ci_optimize
yuneng-jiang Mar 16, 2026
c6df5b1
Merge commit '58e74a631c9d904de29282206af7d68f392b8e12' into litellm_…
yuneng-jiang Mar 16, 2026
418be36
[Fix] Install bsdmainutils for column command in security scans
yuneng-jiang Mar 16, 2026
8dec9f4
fix: handle string callback values in prometheus multiproc setup
yuneng-jiang Mar 16, 2026
0d4ae8b
bump: version 1.82.2 β†’ 1.82.3
yuneng-jiang Mar 16, 2026
3283697
fix(test): update test_startup_fails_when_db_setup_fails for opt-in e…
yuneng-jiang Mar 16, 2026
6140927
fix(cost_calculator): use model name for per-request custom pricing w…
yuneng-jiang Mar 16, 2026
1666f6d
sync: merge v1.82.0-stable tag
Mar 16, 2026
672a57d
sync: merge v1.82.3-stable tag
Mar 23, 2026
4e4ead8
fix: resolve upstream sync conflicts for PR #103
github-actions[bot] Apr 10, 2026
20fdb14
fix(ci): add missing ReasoningSummaryTextDoneEvent import
Apr 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
1,352 changes: 678 additions & 674 deletions .circleci/config.yml

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion .circleci/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ mcp==1.25.0 # for MCP server
semantic_router==0.1.10 # for auto-routing with litellm
fastuuid==0.12.0
responses==0.25.7 # for proxy client tests
pytest-retry==1.6.3 # for automatic test retries
pytest-retry==1.6.3 # for automatic test retries
litellm-proxy-extras # for prisma migrations
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
22 changes: 22 additions & 0 deletions .github/codeql/codeql-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: "LiteLLM CodeQL config"

# Use security-extended suite instead of security-and-quality to avoid
# result sets > 2 GiB on this codebase that cause fatal OOM failures.
queries:
- uses: security-extended

# These two queries are security queries included in security-extended that
# individually produce result sets > 2 GiB on this codebase, causing fatal
# OOM failures. Exclude them as a safety net until CI confirms they no longer
# OOM; drop these exclusions in a follow-up once verified.
query-filters:
- exclude:
id: py/clear-text-logging-sensitive-data # CWE-312 β€” > 2 GiB result set
- exclude:
id: py/polynomial-redos # CWE-730 β€” > 2 GiB result set

paths-ignore:
- tests
- docs
- "**/*.md"
- litellm/proxy/_experimental/out
19 changes: 19 additions & 0 deletions .github/observatory/litellm_config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# LiteLLM Observatory Test Configuration
# This config is used by CI to spin up a temporary LiteLLM instance
# for running observatory tests against RC/stable releases.
#
# Add model definitions for the providers you want to test.
# Provider API keys are injected via environment variables in CI.

model_list:
- model_name: gpt-4o
litellm_params:
model: azure/gpt-4o
api_key: os.environ/AZURE_API_KEY
api_base: os.environ/AZURE_API_BASE

- model_name: gpt-4o-mini
litellm_params:
model: azure/gpt-4o-mini
api_key: os.environ/AZURE_API_KEY
api_base: os.environ/AZURE_API_BASE
7 changes: 6 additions & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,14 @@

**Please complete all items before asking a LiteLLM maintainer to review your PR**

- [ ] 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)
- [ ] I have Added testing in the [`tests/test_litellm/`](https://github.com/BerriAI/litellm/tree/main/tests/test_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

## Delays in PR merge?

If you're seeing a delay in your PR being merged, ping the LiteLLM Team on [Slack (#pr-review)](https://join.slack.com/t/litellmossslack/shared_invite/zt-3o7nkuyfr-p_kbNJj8taRfXGgQI1~YyA).

## 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
Loading
Loading