Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1141 commits
Select commit Hold shift + click to select a range
d17bf84
feat: EU AI Act Article 5 policy template for prohibited practices de…
ishaan-jaff Feb 16, 2026
0d2aac6
allow filtering by user in global usage
yuneng-jiang Feb 17, 2026
0e736a7
add server root path test to github actions
yuneng-jiang Feb 17, 2026
8ab2c91
Update .github/workflows/test_server_root_path.yml
yuneng-jiang Feb 17, 2026
310cca1
address greptile review feedback (greploop iteration 1)
yuneng-jiang Feb 17, 2026
a946cc4
fix: resolve merge conflicts with staging branch
ndgigliotti Feb 17, 2026
df5e8d0
address greptile review feedback (greploop iteration 2)
yuneng-jiang Feb 17, 2026
bec06c0
fixing syntax
yuneng-jiang Feb 17, 2026
56133f8
Merge branch 'litellm_gh_server_root_test' of github.com:BerriAI/lite…
yuneng-jiang Feb 17, 2026
330802e
remove artifacts
yuneng-jiang Feb 17, 2026
100a5a1
Merge pull request #21351 from BerriAI/litellm_ui_usage_filter_by_user
yuneng-jiang Feb 17, 2026
c3b13fa
fix: Make vector stores migration idempotent (#21325)
milan-berri Feb 17, 2026
0f96b5a
feat: guardrail tracing UI - policy, detection method, match details …
ishaan-jaff Feb 17, 2026
3a34b63
Merge pull request #21222 from ndgigliotti/feat/bedrock-native-struct…
Sameerlite Feb 17, 2026
a3ff903
passing in masster key for api calls
yuneng-jiang Feb 17, 2026
5e02844
Fix: Add blog as incident report
Sameerlite Feb 17, 2026
53728b4
Fix: Add blog as incident report
Sameerlite Feb 17, 2026
6acf63f
remove timeline
Sameerlite Feb 17, 2026
4936aab
Merge pull request #21356 from BerriAI/litellm_incident_claude_code
Sameerlite Feb 17, 2026
757acb4
feat(models): add github_copilot/gpt-5.3-codex and github_copilot/cla…
Chesars Feb 17, 2026
5ac3430
only tests for /ui
yuneng-jiang Feb 17, 2026
8d50956
fix(proxy): preserve and forward OAuth Authorization headers through …
iamadamreed Feb 17, 2026
72af441
feat: Add IBM watsonx.ai rerank support (#21303)
MateuszOssGit Feb 17, 2026
c4f0fc9
bump: version 1.81.12 → 1.81.13
yuneng-jiang Feb 17, 2026
349e3da
Fixing mapped tests
yuneng-jiang Feb 16, 2026
efe8477
fixing no_config test
yuneng-jiang Feb 16, 2026
23219d9
fixing container tests
yuneng-jiang Feb 16, 2026
45e6440
fixing test_basic_openai_responses_api
yuneng-jiang Feb 16, 2026
aa7bc6a
Adding bedrock thinking budget tokens to docs
yuneng-jiang Feb 16, 2026
3669d54
fixing regen key tests
yuneng-jiang Feb 16, 2026
f162371
fix(pod-lock): make release lock compare-and-delete atomic (#21226)
emerzon Feb 17, 2026
3b5096d
Merge pull request #21357 from BerriAI/release_feb16_copy
yuneng-jiang Feb 17, 2026
96d7585
Merge pull request #21353 from BerriAI/litellm_gh_server_root_test
yuneng-jiang Feb 17, 2026
d184b3c
fix: preserve provider_specific_fields from proxy responses (#21153) …
sahukanishka Feb 17, 2026
fb2c22e
perf(router): optimize v2 deployment selection lookup (#21211)
emerzon Feb 17, 2026
ddb48fa
perf(router): use set membership in team deployment filter (#21210)
emerzon Feb 17, 2026
4978df8
fix: add `store` to OPENAI_CHAT_COMPLETION_PARAMS (#21195)
namabile Feb 17, 2026
b67c140
Fix Bedrock service_tier cost propagation (#21172)
emerzon Feb 17, 2026
b609f58
fix: add missing OpenAI chat completion params to OPENAI_CHAT_COMPLET…
Feb 17, 2026
5749ca6
feat(bedrock): broaden Nova 2 model detection to support nova-2-pro r…
ryanh-ai Feb 9, 2026
93b8484
perf: increase default LRU cache size to reduce multi-model thrash (#…
emerzon Feb 17, 2026
d859f06
fix(router): avoid alias scan for non-alias get_model_list lookups (#…
emerzon Feb 17, 2026
ee5120b
fix default duration
yuneng-jiang Feb 17, 2026
8576683
Update tests/test_litellm/proxy/management_endpoints/test_key_managem…
yuneng-jiang Feb 17, 2026
69ee2c2
Merge pull request #21362 from BerriAI/litellm_default_key_fix
yuneng-jiang Feb 17, 2026
3053fed
Add Databricks to supported LLM providers for response schema
TomeHirata Feb 17, 2026
43ba7d0
Add test case for Databricks Meta LLaMA 3.1 70B instruct model in con…
TomeHirata Feb 17, 2026
f4b79fa
Merge pull request #21368 from TomeHirata/databricks/response-schema
Sameerlite Feb 17, 2026
1c2e114
Merge branch 'main' into litellm_oss_staging_02_16_2026
Sameerlite Feb 17, 2026
525acaf
Add BaseEvalsAPIConfig for openai evals
Sameerlite Feb 17, 2026
357a2b6
Add Evals API operations
Sameerlite Feb 17, 2026
a4eae1b
Add Evals API operations
Sameerlite Feb 17, 2026
6b95bde
Add OpenAIEvalsConfig
Sameerlite Feb 17, 2026
5cc0036
Add openai evals endpoints and routing
Sameerlite Feb 17, 2026
71385a4
Add openai evals in base http handler
Sameerlite Feb 17, 2026
32263de
Add tests for openai evals
Sameerlite Feb 17, 2026
590b986
Update litellm/llms/custom_httpx/llm_http_handler.py
Sameerlite Feb 17, 2026
ea72ffb
Update litellm/llms/custom_httpx/llm_http_handler.py
Sameerlite Feb 17, 2026
782b048
Update tests/test_litellm/llms/openai/evals/test_openai_evals_transfo…
Sameerlite Feb 17, 2026
8b75979
Add eval run endpoints methods
Sameerlite Feb 17, 2026
b246c3c
Add eval run endpoints and methods
Sameerlite Feb 17, 2026
5940838
Add eval run endpoints
Sameerlite Feb 17, 2026
90be817
Add support for evals via sdk
Sameerlite Feb 17, 2026
211d6e9
Add vllm e2e test for embedding
Sameerlite Feb 17, 2026
cd7fc38
Update poetry.lock
Sameerlite Feb 17, 2026
7a35116
Fix : test_video_content_handler_uses_get_for_openai
Sameerlite Feb 17, 2026
8374b4d
Fix : test_exception_without_scanners
Sameerlite Feb 17, 2026
fe20e66
Fix : test_exception_without_scanners
Sameerlite Feb 17, 2026
550bb62
fix llm tests
Sameerlite Feb 17, 2026
1ced47c
fix tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server.py
Sameerlite Feb 17, 2026
288f7b8
fix test_allow_access_by_email
Sameerlite Feb 17, 2026
791cef6
fix test_chat_completion
Sameerlite Feb 17, 2026
3af90d6
Merge pull request #21383 from BerriAI/litellm_fix_mock_tests
Sameerlite Feb 17, 2026
842d5a0
Fix mypy issues
Sameerlite Feb 17, 2026
1c9cee0
Fix doc
Sameerlite Feb 17, 2026
ec573ee
Merge pull request #21375 from BerriAI/litellm_evals_api
Sameerlite Feb 17, 2026
181a1c3
Fix test conifg
Sameerlite Feb 17, 2026
811ffff
move e2e to llm translation
Sameerlite Feb 17, 2026
8098380
Merge pull request #21382 from BerriAI/litellm_vllm_e2e_testing
Sameerlite Feb 17, 2026
126cf36
move e2e to llm translation
Sameerlite Feb 17, 2026
289341d
fix(lint): suppress PLR0915 in route_request function
jquinter Feb 17, 2026
cd20dde
Merge pull request #21390 from BerriAI/fix/lint-too-many-statements-r…
jquinter Feb 17, 2026
e936f88
refactor: remove old doc
Feb 17, 2026
bf824de
docs: remove references to unused var
Feb 17, 2026
4930bab
docs(release_cycle.md): document enterprise support
Feb 17, 2026
7a097ae
fix(ci): reduce parallelism and add retry logic
jquinter Feb 17, 2026
e9929d2
fix: replace deprecated asyncio.iscoroutinefunction with inspect.isco…
jquinter Feb 17, 2026
bd9b239
fix(ci): address Greptile review feedback
jquinter Feb 17, 2026
56fab12
fix: prompt registry
Harshit28j Feb 17, 2026
82f9ad1
fix silent skip prompt id
Harshit28j Feb 17, 2026
bf157ac
fix: restore pytest-xdist to CI workflow
jquinter Feb 17, 2026
02126c5
fix: remove pytest-retry configuration to eliminate duplicate retries
jquinter Feb 17, 2026
1e8ade2
Add Claude Sonnet 4.6 pricing (#21395)
ishaan-jaff Feb 17, 2026
c7fbab4
add default version for opus 4.6 (#21397)
superpoussin22 Feb 17, 2026
48105e6
fix: remove pytest-retry to avoid conflicting retry plugins
jquinter Feb 17, 2026
b07e4a3
update latest upstream main
Harshit28j Feb 17, 2026
ab912e5
refactor: move logging_utils.py deprecation fix to PR #21396
jquinter Feb 17, 2026
dc1775d
Day 0 Support: Claude Sonnet 4.6 (#21401)
ishaan-jaff Feb 17, 2026
ee83d47
Merge pull request #21394 from BerriAI/fix/ci-test-improvements
jquinter Feb 17, 2026
d7b2ce9
Merge remote-tracking branch 'upstream/main' into litellm_prompt_regi…
Harshit28j Feb 17, 2026
2efe4ba
Update cookbook/mock_prompt_management_server/mock_prompt_management_…
Harshit28j Feb 17, 2026
d061ae9
fix docs and format
Harshit28j Feb 17, 2026
f9ea565
fix(tests): improve test isolation in conftest.py
jquinter Feb 17, 2026
3b176a0
fix(tests): remove asyncio.get_event_loop_policy deprecation warning
jquinter Feb 17, 2026
53d9cad
fix(tests): restore autouse=True to setup_and_teardown fixture
jquinter Feb 17, 2026
5da5a14
Merge branch 'litellm_prompt_registry_fix' of https://github.com/Hars…
Harshit28j Feb 17, 2026
e37befd
fix: address Greptile feedback - remove duplicates and fix deprecations
jquinter Feb 17, 2026
6678b2b
fix: replace asyncio.iscoroutinefunction with inspect.iscoroutinefunc…
jquinter Feb 17, 2026
480974e
fix: complete asyncio.iscoroutinefunction deprecation fix across code…
jquinter Feb 17, 2026
890cc08
fix: resolve merge conflict and Greptile feedback
jquinter Feb 17, 2026
63bb27e
Merge pull request #21396 from BerriAI/fix/conftest-deprecation-warnings
jquinter Feb 17, 2026
cea1279
Add EU AI Act Article 5 template to policy templates UI (#21414)
ishaan-jaff Feb 17, 2026
9b5eddd
fix: remove unused asyncio imports (F401)
jquinter Feb 17, 2026
7f1cb90
Merge pull request #21412 from BerriAI/fix/remove-unused-asyncio-imports
jquinter Feb 17, 2026
26f8e1a
fix(tests): resolve test isolation issue in http_handler tests
jquinter Feb 17, 2026
fb839d5
chore: regenerate poetry.lock after rebase with main
jquinter Feb 17, 2026
a39a234
doc: add right readme.md
Dec 12, 2025
b5aff26
fix(deps): regenerate poetry.lock after pyproject.toml changes
jquinter Feb 17, 2026
00530cb
Merge pull request #21418 from BerriAI/fix/regenerate-poetry-lock
jquinter Feb 17, 2026
703f02b
fix(test): prevent flaky failure in test_log_langfuse_v2_handles_null…
jquinter Feb 17, 2026
16ca7f4
fix(token-counter): normalize encode() return type and handle HF toke…
jquinter Feb 17, 2026
defc76b
fix(tests): mock prisma.Prisma in backoff retry tests to avoid 'prism…
jquinter Feb 17, 2026
f8f2a86
fix(lakera-guardrail): use os.environ.get() to avoid KeyError on miss…
jquinter Feb 17, 2026
fad4d4c
fix(lakera-guardrail): ensure lakera_api_key is always str to fix myp…
jquinter Feb 17, 2026
afbfbf3
Update tests/test_litellm/litellm_core_utils/test_token_counter.py
jquinter Feb 17, 2026
9fb886d
Merge pull request #21388 from BerriAI/fix/test-isolation-http-handler
jquinter Feb 17, 2026
6d5f9b5
Merge pull request #21419 from BerriAI/fix/langfuse-test-supports-pro…
jquinter Feb 17, 2026
7b49be1
Merge pull request #21416 from BerriAI/fix/token-counter-hf-fallback
jquinter Feb 17, 2026
153af8b
Merge pull request #21421 from BerriAI/fix/mock-prisma-in-backoff-tests
jquinter Feb 17, 2026
acbcfec
Merge pull request #21422 from BerriAI/fix/lakera-keyerror-missing-ap…
jquinter Feb 17, 2026
f2480f4
Fix EU AI Act template: add missing category_file path (#21424)
ishaan-jaff Feb 17, 2026
fd1237e
fix(token-counter): fix test isolation and encode() return type norma…
jquinter Feb 17, 2026
c0e87f7
fixed byok models for teams issue (#21408)
shivamrawat1 Feb 17, 2026
a6df01c
fix: remove importlib.reload calls that cause cross-test class-refere…
jquinter Feb 17, 2026
b221b45
Merge pull request #21425 from BerriAI/fix/test-module-reload-class-s…
jquinter Feb 17, 2026
f0fc44c
fix(tests): use class-level AsyncHTTPHandler mock in vertex GPT-OSS t…
jquinter Feb 17, 2026
ea0cfac
fix(tests): add cache flush fixture for reliable HTTP client isolation
jquinter Feb 18, 2026
3cc032b
Add French language support for EU AI Act Article 5 guardrail (#21427)
ishaan-jaff Feb 18, 2026
d7b0a8c
fix(tests): restore disable_aiohttp_transport and force_ipv4 in isola…
jquinter Feb 18, 2026
59171bd
Merge pull request #21423 from BerriAI/fix/token-counter-test-isolation
jquinter Feb 18, 2026
faa16ef
Merge pull request #21428 from BerriAI/fix/vertex-gpt-oss-test-isolation
jquinter Feb 18, 2026
62c7ebf
Merge pull request #21431 from BerriAI/fix/isolate-litellm-transport-…
jquinter Feb 18, 2026
3c61c7f
fix(test): mock enterprise license check in JWT test
jquinter Feb 15, 2026
eff0829
Fix mock target for enterprise license check
jquinter Feb 16, 2026
bf9d52e
Update tests/proxy_unit_tests/test_user_api_key_auth.py
jquinter Feb 16, 2026
764b9ba
eu_ai_act_article5_prohibited_practices_fr
ishaan-jaff Feb 18, 2026
ab6d2ee
fix: improve test isolation for parallel execution
jquinter Feb 6, 2026
77f315e
fix: address Greptile review feedback for test isolation
jquinter Feb 6, 2026
e6abb86
fix: properly reload litellm in setup_and_teardown fixture
jquinter Feb 6, 2026
c38c29d
Merge pull request #21285 from BerriAI/fix/jwt-enterprise-license-test
jquinter Feb 18, 2026
c334696
fix: replace silent if-hasattr guards with unconditional assertions i…
jquinter Feb 18, 2026
ecda49e
fix remplate
ishaan-jaff Feb 18, 2026
cca4a86
Merge pull request #20595 from jquinter/fix/test-parallelization-isol…
jquinter Feb 18, 2026
44feb55
improve(ci): enhance test stability with better isolation and distrib…
jquinter Feb 15, 2026
a1ba4e3
Merge pull request #21277 from BerriAI/improve/ci-test-stability
jquinter Feb 18, 2026
ae24bfe
fix description
ishaan-jaff Feb 18, 2026
f329294
fix(ui): show category count badge in guardrail selection modal
ishaan-jaff Feb 18, 2026
3292244
fix: restore sys.modules after stub injection in langfuse otel test
jquinter Feb 18, 2026
24fcc9d
fix: session grouping broken for dict rows from query_raw (#21435)
ishaan-jaff Feb 18, 2026
58f23cb
fix(ci): add prisma generate step to matrix CI workflow
jquinter Feb 18, 2026
93bbc27
Merge pull request #21434 from BerriAI/fix/langfuse-otel-sys-modules-…
jquinter Feb 18, 2026
5a3a021
feat(ui): add guardrail jump link in log detail view (#21437)
ishaan-jaff Feb 18, 2026
a6f467e
fixes - showing content filter on failure
ishaan-jaff Feb 18, 2026
e4752f4
ui fix
ishaan-jaff Feb 18, 2026
2517c06
Merge pull request #21387 from BerriAI/litellm_vllm_e2e_testing
Sameerlite Feb 18, 2026
5946a93
Add compliance checker endpoints + UI panel (#21432)
ishaan-jaff Feb 18, 2026
8003aa2
Merge pull request #21358 from ryanh-ai/fix/nova-2-reasoning
Sameerlite Feb 18, 2026
2bbae68
Add sonnet-4.6 for tool use
Sameerlite Feb 18, 2026
0cb56c9
Add mapping for thinking and response format
Sameerlite Feb 18, 2026
bdba316
Add inference_geo: us costing
Sameerlite Feb 18, 2026
892b9ac
Add other provider feats
Sameerlite Feb 18, 2026
e0b28a1
Add other provider feats
Sameerlite Feb 18, 2026
8d7f9a5
feat(datadog): add 'team' tag to logs, metrics, and cost management
Harshit28j Feb 18, 2026
954e8d2
Add relevant test case
Harshit28j Feb 18, 2026
bc7fef6
Add prompt injection detection policy template + guardrails (#21452)
ishaan-jaff Feb 18, 2026
5b5306a
feat: split EU AI Act Article 5 into 5 dedicated sub-guardrails per l…
ishaan-jaff Feb 18, 2026
371cabf
Add MCP Security guardrail to block unregistered MCP servers (#21429)
ishaan-jaff Feb 18, 2026
8f80b10
Add File deletion criteria with batch references
Sameerlite Feb 18, 2026
9f5580f
Fixes based on greptile reviews
Sameerlite Feb 18, 2026
fe7e764
Add native Responses API support for Databricks GPT models
TomeHirata Feb 18, 2026
1f521be
End users - Allow giving end users access to specific mcp servers (#…
Feb 18, 2026
03f5717
Fixes based on greptile reviews
Sameerlite Feb 18, 2026
14a35a1
Revert "End users - Allow giving end users access to specific mcp ser…
Feb 18, 2026
d046122
Add support for devstral 2512 model aliases (#21372)
stronk7 Feb 18, 2026
020d769
Address Greptile review: fix SDK auth fallback and remove unused imports
TomeHirata Feb 18, 2026
8e8511a
feat(bedrock): support nova/ and nova-2/ spec prefixes for custom imp…
ryanh-ai Feb 18, 2026
91c3746
feat: contextual gap checks, word-form digits (#18301)
uc4w6c Jan 14, 2026
9a3c0dc
Add sanititzation for anthropic messages
Sameerlite Jan 16, 2026
eebe231
Add docs for message sanitisation
Sameerlite Jan 16, 2026
ec4fae5
Potential fix for code scanning alert no. 3990: Clear-text logging of…
Sameerlite Jan 16, 2026
075bf74
Remove double import
Sameerlite Feb 18, 2026
838bfc8
Fix greptile review
Sameerlite Feb 18, 2026
6b26b47
Add mapping for websearch from v1/messages to chat/completions
Sameerlite Feb 18, 2026
cfea758
Merge pull request #21460 from TomeHirata/databricks/responses-api
Sameerlite Feb 18, 2026
fae95ee
Add duckduckgo as search tool
Sameerlite Feb 18, 2026
0ea8249
Add duckcukgo in model map
Sameerlite Feb 18, 2026
6b8b391
Add duckcukgo in docs
Sameerlite Feb 18, 2026
3bc1ae5
Add duckcukgo in docs
Sameerlite Feb 18, 2026
3ea8d32
Merge pull request #21402 from Harshit28j/litellm_prompt_registry_fix
Harshit28j Feb 18, 2026
78e6080
Merge branch 'main' of https://github.com/BerriAI/litellm into litell…
Harshit28j Feb 18, 2026
9678c72
Add reasoning' field to 'reasoning_content' field in delta
Sameerlite Feb 18, 2026
d44d52f
fix(test): correct assertion order in test_case_a_orphaned_tool_call_…
jquinter Feb 18, 2026
53dcebc
Revert "fix(pod-lock): make release lock compare-and-delete atomic (#…
Sameerlite Feb 18, 2026
0e79326
Fix cicd tests
Sameerlite Feb 18, 2026
eb8b991
Merge branch 'main' into litellm_oss_staging_02_17_2026
Sameerlite Feb 18, 2026
6a42e99
Merge pull request #21469 from BerriAI/revert-21226-fix/pod-lock-atom…
Sameerlite Feb 18, 2026
7e36d47
fix code quality tests and mypy
Sameerlite Feb 18, 2026
4bbd15f
Fix test_async_post_call_success_hook_includes_client_ip_user_agent
Sameerlite Feb 18, 2026
02e4530
fix: add missing var in standard logging metadata
Harshit28j Feb 18, 2026
bd0c804
Merge pull request #21326 from BerriAI/litellm_oss_staging_02_16_2026
Sameerlite Feb 18, 2026
aa255c7
Merge pull request #21361 from BerriAI/litellm_oss_staging_02_17_2026
Sameerlite Feb 18, 2026
30d4f34
fix(tests): restore proxy_server module attrs in test_proxy_admin_exp…
jquinter Feb 18, 2026
3087f60
Merge pull request #21299 from BerriAI/litellm_add_remaining_beta_tests2
Sameerlite Feb 18, 2026
a9b7320
Incident Report: vLLM Embeddings Broken by encoding_format Parameter
Sameerlite Feb 18, 2026
421b4e0
Merge pull request #21465 from BerriAI/litellm_map_anthropi_web_searc…
Sameerlite Feb 18, 2026
b8fd569
Add docs for DuckDuckGo
Sameerlite Feb 18, 2026
5f70165
Fix get_unique_names_from_llms_dir
Sameerlite Feb 18, 2026
8d74666
Fix : _add_missing_tool_results
Sameerlite Feb 18, 2026
827444c
Fix mypy issues
Sameerlite Feb 18, 2026
d740196
Merge pull request #21468 from BerriAI/litellm_vllm_streaming
Sameerlite Feb 18, 2026
19951c5
Fix incident report date
Sameerlite Feb 18, 2026
a01dcc7
Merge pull request #21467 from BerriAI/litellm_add_duck_duck_go
Sameerlite Feb 18, 2026
ee3ad3a
Merge pull request #21464 from BerriAI/litellm_sanitise_anthropic_mes…
Sameerlite Feb 18, 2026
6f82a3e
Merge pull request #21456 from BerriAI/litellm_fix_delete_file_manage…
Sameerlite Feb 18, 2026
f6d3919
Merge branch 'main' into litellm_sonnet_4_6_feat
Sameerlite Feb 18, 2026
3e0a723
Merge pull request #21474 from BerriAI/litellm_incident_report_vllm
Sameerlite Feb 18, 2026
c369b0f
Merge pull request #21448 from BerriAI/litellm_sonnet_4_6_feat
Sameerlite Feb 18, 2026
5755483
fix(datadog): use .get() for safe team tag extraction
Harshit28j Feb 18, 2026
ee7e543
Fix _rotate_master_key
Sameerlite Feb 18, 2026
610bf00
Fix:test_get_key_object_loads_object_permission
Sameerlite Feb 18, 2026
a358b7a
Merge pull request #21475 from BerriAI/litellm_fix_mock_test
Sameerlite Feb 18, 2026
0d11720
Update tests/test_litellm/proxy/auth/test_user_api_key_auth.py
jquinter Feb 18, 2026
34f06c4
Merge pull request #21473 from BerriAI/fix/test-proxy-admin-expired-k…
jquinter Feb 18, 2026
65a79d5
Merge pull request #21436 from BerriAI/fix/prisma-generate-matrix-ci
jquinter Feb 18, 2026
d4755c8
fix(tests): add inference_geo to model prices JSON schema
jquinter Feb 18, 2026
419151d
fix(tests): resolve merge conflict in test_vertex_ai_rerank_transform…
jquinter Feb 18, 2026
c760318
Merge pull request #21449 from Harshit28j/litellm_feat_dataDog_tags
Harshit28j Feb 18, 2026
392bbf3
fix(proxy): use prisma.Json for JSON fields in _rotate_master_key cre…
jquinter Feb 18, 2026
63783db
Merge pull request #21478 from BerriAI/fix/vertex-rerank-merge-conflict
jquinter Feb 18, 2026
2395734
Merge pull request #21479 from BerriAI/fix/prisma-json-create-many
jquinter Feb 18, 2026
45d3d1a
Merge pull request #21477 from BerriAI/fix/schema-inference-geo-property
jquinter Feb 18, 2026
cff4412
Fix websearch interception with extended thinking mode support
mpcusack-altos Feb 5, 2026
89cd444
fix(websearch_interception): load API keys from router configuration
Quentin-M Feb 5, 2026
dc3536d
fix(websearch): validate and adjust max_tokens for thinking budget
Quentin-M Feb 5, 2026
94fe05b
feat(bedrock): centralize beta header filtering with version-based su…
Quentin-M Feb 5, 2026
63c9cca
fix(bedrock): remove invalid :0 suffix from Claude Opus 4.6 model ID
Quentin-M Feb 5, 2026
898e33f
fix(bedrock): strip context_management from request body for all Bedr…
Quentin-M Feb 6, 2026
21a41be
fix(thinking): drop thinking param when assistant messages have text …
Quentin-M Feb 6, 2026
1800774
fix(thinking): recognize adaptive thinking type in is_thinking_enabled
Quentin-M Feb 13, 2026
ab743af
fix(bedrock): fix version extraction regex in beta headers config
Quentin-M Feb 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
  •  
  •  
  •  
211 changes: 191 additions & 20 deletions .circleci/config.yml

Large diffs are not rendered by default.

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
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
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
118 changes: 118 additions & 0 deletions .github/workflows/test-litellm-matrix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
name: LiteLLM Unit Tests (Matrix)

on:
pull_request:
branches: [main]

# Cancel in-progress runs for the same PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 20 # Increased from 15 to 20
strategy:
fail-fast: false
matrix:
test-group:
# tests/test_litellm split by subdirectory (~560 files total)
# Vertex AI tests separated for better isolation (prevent auth/env pollution)
- name: "llms-vertex"
path: "tests/test_litellm/llms/vertex_ai"
workers: 1
reruns: 2
- name: "llms-other"
path: "tests/test_litellm/llms --ignore=tests/test_litellm/llms/vertex_ai"
workers: 2
reruns: 2
# tests/test_litellm/proxy split by subdirectory (~180 files total)
- name: "proxy-guardrails"
path: "tests/test_litellm/proxy/guardrails tests/test_litellm/proxy/management_endpoints tests/test_litellm/proxy/management_helpers"
workers: 2
reruns: 2
- name: "proxy-core"
path: "tests/test_litellm/proxy/auth tests/test_litellm/proxy/client tests/test_litellm/proxy/db tests/test_litellm/proxy/hooks tests/test_litellm/proxy/policy_engine"
workers: 2
reruns: 2
- name: "proxy-misc"
path: "tests/test_litellm/proxy/_experimental tests/test_litellm/proxy/agent_endpoints tests/test_litellm/proxy/anthropic_endpoints tests/test_litellm/proxy/common_utils tests/test_litellm/proxy/discovery_endpoints tests/test_litellm/proxy/experimental tests/test_litellm/proxy/google_endpoints tests/test_litellm/proxy/health_endpoints tests/test_litellm/proxy/image_endpoints tests/test_litellm/proxy/middleware tests/test_litellm/proxy/openai_files_endpoint tests/test_litellm/proxy/pass_through_endpoints tests/test_litellm/proxy/prompts tests/test_litellm/proxy/public_endpoints tests/test_litellm/proxy/response_api_endpoints tests/test_litellm/proxy/spend_tracking tests/test_litellm/proxy/ui_crud_endpoints tests/test_litellm/proxy/vector_store_endpoints tests/test_litellm/proxy/test_*.py"
workers: 2
reruns: 2
- name: "integrations"
path: "tests/test_litellm/integrations"
workers: 2
reruns: 3 # Integration tests tend to be flakier
- name: "core-utils"
path: "tests/test_litellm/litellm_core_utils"
workers: 2
reruns: 1
- name: "other"
path: "tests/test_litellm/caching tests/test_litellm/responses tests/test_litellm/secret_managers tests/test_litellm/vector_stores tests/test_litellm/a2a_protocol tests/test_litellm/anthropic_interface tests/test_litellm/completion_extras tests/test_litellm/containers tests/test_litellm/enterprise tests/test_litellm/experimental_mcp_client tests/test_litellm/google_genai tests/test_litellm/images tests/test_litellm/interactions tests/test_litellm/passthrough tests/test_litellm/router_strategy tests/test_litellm/router_utils tests/test_litellm/types"
workers: 2
reruns: 2
- name: "root"
path: "tests/test_litellm/test_*.py"
workers: 2
reruns: 2
# tests/proxy_unit_tests split alphabetically (~48 files total)
- name: "proxy-unit-a"
path: "tests/proxy_unit_tests/test_[a-o]*.py"
workers: 2
reruns: 1
- name: "proxy-unit-b"
path: "tests/proxy_unit_tests/test_[p-z]*.py"
workers: 2
reruns: 1

name: test (${{ matrix.test-group.name }})

steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install Poetry
uses: snok/install-poetry@v1

- name: Cache Poetry dependencies
uses: actions/cache@v4
with:
path: |
~/.cache/pypoetry
~/.cache/pip
.venv
key: ${{ runner.os }}-poetry-${{ hashFiles('poetry.lock') }}
restore-keys: |
${{ runner.os }}-poetry-

- name: Install dependencies
run: |
poetry config virtualenvs.in-project true
poetry install --with dev,proxy-dev --extras "proxy semantic-router"
# pytest-rerunfailures and pytest-xdist are in pyproject.toml dev dependencies
poetry run pip install google-genai==1.22.0 \
google-cloud-aiplatform>=1.38 fastapi-offline==1.7.3 python-multipart==0.0.22 openapi-core

- name: Setup litellm-enterprise
run: |
cd enterprise && poetry run pip install -e . && cd ..

- name: Generate Prisma client
run: |
poetry run prisma generate --schema litellm/proxy/schema.prisma

- name: Run tests - ${{ matrix.test-group.name }}
run: |
poetry run pytest ${{ matrix.test-group.path }} \
--tb=short -vv \
--maxfail=10 \
-n ${{ matrix.test-group.workers }} \
--reruns ${{ matrix.test-group.reruns }} \
--reruns-delay 1 \
--dist=loadscope \
--durations=20
32 changes: 32 additions & 0 deletions .github/workflows/test-litellm-ui-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: UI Build Check
permissions:
contents: read

on:
pull_request:
branches: [main]

jobs:
build-ui:
runs-on: ubuntu-latest
timeout-minutes: 10
defaults:
run:
working-directory: ui/litellm-dashboard

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
cache-dependency-path: ui/litellm-dashboard/package-lock.json

- name: Install dependencies
run: npm install

- name: Build
run: npm run build
8 changes: 6 additions & 2 deletions .github/workflows/test-litellm.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
name: LiteLLM Mock Tests (folder - tests/test_litellm)

# DEPRECATED: This workflow is replaced by test-litellm-matrix.yml which runs
# the same tests in parallel across 10 jobs for faster CI times.
# Kept for manual debugging only.
on:
pull_request:
branches: [ main ]
workflow_dispatch: # Manual trigger only
# pull_request:
# branches: [ main ]

jobs:
test:
Expand Down
96 changes: 96 additions & 0 deletions .github/workflows/test_server_root_path.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
name: Test Proxy SERVER_ROOT_PATH Routing
permissions:
contents: read

on:
pull_request:
branches: [main]

jobs:
test-server-root-path:
runs-on: ubuntu-latest
timeout-minutes: 15

strategy:
matrix:
root_path: ["/api/v1", "/llmproxy"]

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build Docker image
uses: docker/build-push-action@v5
with:
context: .
file: ./docker/Dockerfile.database
tags: litellm-test:${{ github.sha }}
load: true
cache-from: type=gha
cache-to: type=gha,mode=max

- name: Start LiteLLM container with SERVER_ROOT_PATH
run: |
docker run -d \
--name litellm-test \
-p 4000:4000 \
-e SERVER_ROOT_PATH="${{ matrix.root_path }}" \
-e LITELLM_MASTER_KEY="sk-1234" \
litellm-test:${{ github.sha }} \
--detailed_debug

- name: Wait for container to be healthy
run: |
echo "Waiting for LiteLLM to start..."
max_attempts=30
attempt=0

while [ $attempt -lt $max_attempts ]; do
if docker logs litellm-test 2>&1 | grep -q "Uvicorn running"; then
echo "LiteLLM started successfully"
break
fi
attempt=$((attempt + 1))
echo "Attempt $attempt/$max_attempts - waiting for server to start..."
sleep 2
done

if [ $attempt -eq $max_attempts ]; then
echo "Server failed to start within timeout"
docker logs litellm-test
exit 1
fi

sleep 5

- name: Show container logs
if: always()
run: docker logs litellm-test

- name: Test UI endpoint with root path
run: |
ROOT_PATH="${{ matrix.root_path }}"
echo "Testing UI at: http://localhost:4000${ROOT_PATH}/ui/"

for i in 1 2 3; do
content=$(curl -sL --max-time 5 -H "Authorization: Bearer sk-1234" "http://localhost:4000${ROOT_PATH}/ui/")
if echo "$content" | grep -q -E "(html|<!DOCTYPE|<head|<body)"; then
echo "UI page contains valid HTML content"
exit 0
fi
echo "Attempt $i/3 - no valid HTML, retrying in 5s..."
sleep 5
done
echo "UI page does not contain expected HTML content"
echo "Response: $content"
docker logs litellm-test
exit 1

- name: Cleanup
if: always()
run: |
docker stop litellm-test || true
docker rm litellm-test || true
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
.venv
.venv_policy_test
.env
.claude
.newenv
newenv/*
litellm/proxy/myenv/*
Expand Down
22 changes: 22 additions & 0 deletions .semgrep/rules/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Custom Semgrep rules for LiteLLM

Add custom rule YAML files here. Semgrep loads all `.yml`/`.yaml` files under this directory.

**Run only custom rules (CI / fail on findings):**

```bash
semgrep scan --config .semgrep/rules . --error
```

**Run with registry + custom rules:**

```bash
semgrep scan --config auto --config .semgrep/rules .
```

**Layout:**

- `python/` – Python-specific rules (security, patterns)
- Add more subdirs as needed (e.g. `generic/` for language-agnostic rules)

See [Semgrep rule syntax](https://semgrep.dev/docs/writing-rules/rule-syntax/).
17 changes: 17 additions & 0 deletions .semgrep/rules/python/reliability/unbounded-memory.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Unbounded memory growth – data structures without a clear max limit
# Can lead to OOM under load.

rules:
- id: unbounded-asyncio-queue
message: asyncio.Queue() with no maxsize can grow unbounded. Use asyncio.Queue(maxsize=N) for integrations (e.g. log queues).
severity: ERROR
languages: [python]
pattern-either:
- pattern: asyncio.Queue()
- pattern: asyncio.Queue(maxsize=0)
metadata:
category: reliability
cwe: "CWE-400: Uncontrolled Resource Consumption"
tags: [python, reliability]
confidence: HIGH
source: https://docs.python.org/3/library/asyncio-queue.html
14 changes: 14 additions & 0 deletions .semgrep/rules/python/unbounded-memory.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Unbounded memory growth – data structures without a clear max limit
# Can lead to OOM under load.

rules:
- id: unbounded-asyncio-queue
message: asyncio.Queue() with no maxsize can grow unbounded. Use asyncio.Queue(maxsize=N) for integrations (e.g. log queues).
severity: ERROR
languages: [python]
pattern-either:
- pattern: asyncio.Queue()
- pattern: asyncio.Queue(maxsize=0)
metadata:
category: correctness
cwe: "CWE-400: Uncontrolled Resource Consumption"
Loading
Loading