Commit Graph

754 Commits

Author SHA1 Message Date
Ishaan Jaffer 6112160a16 Revert "[Fix] Security - Remove example API keys with high entropy (#18255)"
This reverts commit 24edbccf5c.
2025-12-20 20:48:11 +05:30
yuneng-jiang 026c2ad693 Merge pull request #18167 from BerriAI/litellm_vector_store_config
[Feature] Auto Resolve Vector Store Embedding Model Config
2025-12-19 11:39:17 -08:00
yuneng-jiang b1b488982d Merge pull request #18168 from BerriAI/litellm_cloudzero_delete
[Feature] Delete Cloudzero Settings Route
2025-12-19 11:38:10 -08:00
Alexsander Hamir 24edbccf5c [Fix] Security - Remove example API keys with high entropy (#18255) 2025-12-19 10:09:50 -08:00
yuneng-jiang 41732696c6 replicate delete checks for regenerate 2025-12-18 13:25:11 -08:00
yuneng-jiang 0a1fb204cd Tests for /key/delete 2025-12-18 11:40:41 -08:00
Alexsander Hamir 2e7b554747 3[Fix] CI/CD - logging_testing (#18204)
* fix: enforce team member budget check in common_checks

- Add missing team member budget validation in common_checks() function
  - Checks team membership budget when team key is used
  - Raises BudgetExceededError when team member spend exceeds max_budget_in_team
  - Follows same pattern as other budget checks (team, user, end_user)
  - Uses cached get_team_membership() for performance

- Fix AttributeError in lowest_tpm_rpm.py
  - Add null check for model_info before accessing .get() method
  - Prevents 'NoneType' object has no attribute 'get' error

- Add unit tests for team member budget enforcement
  - Test budget exceeded scenario
  - Test within budget scenario
  - Test edge cases (no budget, no membership, personal keys)
  - Tests run without requiring proxy server

Fixes failing test: test_users_in_team_budget

* fix: mock get_async_httpx_client in test_langsmith_key_based_logging

- Mock get_async_httpx_client to return a mock AsyncHTTPHandler instance
- Fixes test failure where mock_post was never called
- LangsmithLogger creates its own httpx client instance via get_async_httpx_client,
  so we need to mock the factory function rather than the class method
- Use MagicMock for response.raise_for_status (sync method) instead of AsyncMock

* fix: resolve linting errors (PLR0915, F401)

- Remove unused imports (datetime, ServiceLoggerPayload) from arize_phoenix.py
- Extract health ping setup logic from RedisCache.__init__ to reduce statement count
- Extract team member budget check from common_checks to reduce statement count

* fix: resolve type errors in ChatCompletionToolCallChunk construction

- Cast type field to Literal['function'] to satisfy TypedDict requirements
- Ensure arguments field is explicitly str type to match TypedDict signature
- Fixes pyright errors for incompatible types in transformation.py
2025-12-18 10:52:24 -08:00
Alexsander Hamir 28821427ce [Fix] CI/CD #1 - mypy | check_code_and_doc_quality | guardrails_testing (#18195) 2025-12-18 06:31:01 -08:00
Krish Dholakia 365762596b Guardrails - LiteLLM Content Filter - add support for running content filters on images (#18044)
* feat(litellm_content_filter.py): add support for content filtering categories

make it easy for proxy admin to prevent messages about violence, self harm or illegal weapons going through litellm

* feat: initial commit adding bias detection

allows admin to block inappropriate content about sexual orientation, etc.

* refactor: simplify content_filter.py

use a more exhaustive set of keywords, instead of guessing at potential phrases user can use

* feat(content_filter.py): add new denied topics for in-built content filter guardrails

allow user to automatically block content relating to certain categories from being sent to the LLML

* refactor(content-filter): document new params to litellm content filter

* feat(ui/): litellm content filter - select content categories on ui

* docs: update documentation

* docs(litellm_content_filter.md): document new content filters

* feat: initial commit adding support for inappropriate images via litellm content filter

* feat(content_filter.py): support blocking images containing blocked content

prevent images which contain disallowed content from being sent to the llm api

* docs(litellm_content_filter.md): document new image capabilities of litellm_content_filter

* fix: fix expected error code
2025-12-18 16:46:14 +05:30
YutaSaito 630f3d828e Merge pull request #18161 from BerriAI/litellm_fix_mcp_list_tool_not_working_without_db
Litellm fix mcp list tool not working without db
2025-12-18 18:27:19 +09:00
yuneng-jiang b0d371d864 delete route for cloudzero 2025-12-17 22:12:31 -08:00
yuneng-jiang 8ea7688d35 Adding tests 2025-12-17 21:59:28 -08:00
yuneng-jiang 7b2f33b9b4 Merge pull request #17559 from BerriAI/litellm_new_user_collision_handling
[Fix] New user route user_id collision handling
2025-12-17 19:19:41 -08:00
yuneng-jiang 1db7492639 Merge pull request #18159 from BerriAI/litellm_login_500_fix
[Fix] Login Page Failed To Parse JSON Error
2025-12-17 19:19:27 -08:00
yuneng-jiang 866d1eded5 Merge pull request #17995 from BerriAI/litellm_email_budget_alerts_2
[Feature] Email Budget Alerts
2025-12-17 19:16:17 -08:00
Yuta Saito 847bbd4fda fix: prefer _get_key_object_permission for key lookups and remove redundant checks 2025-12-18 09:50:56 +09:00
yuneng-jiang dd182a2ed0 Adding tests 2025-12-17 16:28:15 -08:00
yuneng-jiang f4017a1986 Tests 2025-12-17 16:07:01 -08:00
YutaSaito 6595619906 Merge pull request #18150 from BerriAI/litellm_feat_vault-per-team-config
Litellm feat vault per team config
2025-12-18 06:57:24 +09:00
Yuta Saito b7b22d559e feat: allow per-team Vault overrides when storing keys 2025-12-18 06:21:53 +09:00
Dmitri Tikhonov 844d0d47b7 Fix tag management to preserve encrypted fields in litellm_params (#17484)
The _add_tag_to_deployment function was directly modifying the
deployment's litellm_params in memory and writing it back to the
database, which caused encrypted API keys and other sensitive fields
to be lost. This fix retrieves the model from the database first,
preserves all existing fields including encrypted ones, adds only the
new tag to the tags array, and updates the database with the modified
params while keeping encrypted fields intact.

Added comprehensive unit tests covering preservation of encrypted
fields, handling of both string and dict litellm_params formats,
duplicate tag prevention, and error handling for missing models.

Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-18 02:28:39 +05:30
yuneng-jiang 087dfbf648 Merge remote-tracking branch 'origin' into litellm_email_budget_alerts_2 2025-12-17 11:37:49 -08:00
yuneng-jiang 8cdb481832 Merge remote-tracking branch 'origin' into litellm_new_user_collision_handling 2025-12-17 11:34:46 -08:00
yuneng-jiang 49a1e50672 Merge pull request #17912 from BerriAI/litellm_dd_callback_fix
[Fix] Callback Environment Variables Casing
2025-12-17 11:33:41 -08:00
yuneng-jiang 202f71c13a Merge pull request #17752 from BerriAI/litellm_ui_model_test_connection_fix
[Fix] /health/test_connection to resolve env variables like /chat/completions
2025-12-17 11:06:57 -08:00
yuneng-jiang 70f7c8b771 Merge remote-tracking branch 'origin' into litellm_dd_callback_fix 2025-12-17 11:05:46 -08:00
yuneng-jiang 358ee482e2 Merge pull request #18078 from BerriAI/litellm_sso_readiness_route
[Feature] SSO Readiness Health Check
2025-12-17 11:03:53 -08:00
yuneng-jiang 9faee8bba6 Merge pull request #17989 from Jetemple/non-root-ui-path-fix
fix: update UI path handling for non-root Docker and restructure HTML…
2025-12-16 21:57:31 -08:00
yuneng-jiang f316caa088 Merge pull request #18033 from BerriAI/litellm_ui_logs_overhead
[Feature] Add LiteLLM Overhead to Logs
2025-12-16 14:51:50 -08:00
yuneng-jiang 2d8f5111af add /sso/readiness route 2025-12-16 13:16:13 -08:00
yuneng-jiang 0e5b56eddf Fixing tests 2025-12-16 12:51:44 -08:00
Sameer Kankute 3661f8010f Revert "fix(proxy): extract model from vertex ai passthrough url pattern (#17…"
This reverts commit ae7c994526.
2025-12-16 21:44:10 +05:30
Sameer Kankute 215857cce3 Merge branch 'main' into litellm_staging_12_16_2025 2025-12-16 21:38:14 +05:30
Nicolai van der Smagt 09ba89d4fe fix: add headers to metadata for guardrails on pass-through endpoints (#17992)
Fixes #17477

Guardrails couldn't access request headers (like User-Agent) on Bedrock
pass-through endpoints because headers were only stored in
data["proxy_server_request"]["headers"] but not in data["metadata"]["headers"]
where guardrails typically look for them.

This fix adds headers to metadata in add_litellm_data_to_request() so
guardrails can access User-Agent, API keys, and other header-based checks
on all endpoints including Bedrock pass-through.

Test added to verify headers are available in metadata for guardrails.
2025-12-16 13:41:34 +05:30
yuneng-jiang c5e25a1728 Merge remote-tracking branch 'origin' into litellm_ui_model_test_connection_fix 2025-12-15 21:07:32 -08:00
yuneng-jiang 66306f21b1 Add litellm overhead to spend logs metadata 2025-12-15 20:56:55 -08:00
Igal Boxerman 636efb7795 feat(pillar): add masking support and MCP call support (#17959)
- Add 'mask' action to SUPPORTED_ON_FLAGGED_ACTIONS
  - Automatically sanitizes sensitive content using masked_session_messages
  - Allows requests to proceed with masked content instead of blocking

- Add MCP call support
  - Add pre_mcp_call and during_mcp_call to supported_event_hooks
  - Verify mcp_call is supported in call_type Literal types

- Control exception details based on config
  - Conditionally include scanners/evidence in exceptions based on
    include_scanners and include_evidence settings
  - Reduces payload size when detailed exception info isn't needed

- Add comprehensive test coverage
  - Tests for masking functionality
  - Tests for conditional exception details
  - Tests for MCP call support

- Update documentation
  - Add Mask section explaining masking functionality
  - Clarify exception details control

All changes maintain backward compatibility.
2025-12-16 08:49:03 +05:30
Kris Xia ae7c994526 fix(proxy): extract model from vertex ai passthrough url pattern (#17970)
extract model id from vertex ai passthrough routes that follow the pattern:
/vertex_ai/*/models/{model_id}:*

the model extraction now handles vertex ai routes by regex matching the model
segment from the url path, which allows proper model identification for
authentication and authorization in proxy pass-through endpoints.

adds comprehensive test coverage for vertex ai model extraction including:
- various vertex api versions (v1, v1beta1)
- different locations (us-central1, asia-southeast1)
- model names with special suffixes (gemini-1.5-pro, gemini-2.0-flash)
- precedence verification (request body model over url)
- non-vertex route isolation
2025-12-16 08:42:57 +05:30
Krish Dholakia f58b76aee8 Revert "Revert "Litellm bedrock guardrails block precedence over masking (#17…" (#18023)
This reverts commit 0abe5cdce9.
2025-12-16 08:42:10 +05:30
Krish Dholakia 0abe5cdce9 Revert "Litellm bedrock guardrails block precedence over masking (#17968)" (#18022)
This reverts commit a0754f1c88.
2025-12-16 08:41:36 +05:30
kothamah a0754f1c88 Litellm bedrock guardrails block precedence over masking (#17968)
* prioritized bedrock guardrail blocking by removing early return based on masking flags

When mask_request_content: true or mask_response_content: true, the method immediately returning False.

The Result: Even when Bedrock Guardrails returned action: "BLOCKED" for dangerous content, LiteLLM would not raise an exception and allowing the content through the response. 

So removed that early condition which will return true for the blocked actions based on guardrails.

* Added test case for bedrock guardrail block content precedence
2025-12-16 08:41:13 +05:30
yuneng-jiang 9907a0d93c Tests 2025-12-15 18:04:27 -08:00
Yuta Saito defea8b887 fix: mcp deepcopy error 2025-12-16 07:02:07 +09:00
Jack Temple 9d420265ef fix: update UI path handling for non-root Docker and restructure HTML files 2025-12-15 10:09:05 -06:00
Krish Dholakia 26fd6d5362 Guardrails API - support LLM tool call response checks on /chat/completions, /v1/responses, /v1/messages on regular + streaming calls (#17619)
* fix(unified_guardrails.py): send all chunks on completion of final stream

* feat(generic_guardrail_api.py): handle tool call response on streaming LLM responses

* fix(anthropic/chat/guardrail_translation): initial commit adding anthropic tool response streaming guardrails

enables guardrail checks on tool response from llm's to work via `/v1/messages`

* feat(anthropic/): working guardrail checks on tool response from LLMs

ensures guardrail checks on anthropic /v1/messages works as expected

* feat(responses/guardrail_translation): support tool call response guardrails on streaming for /v1/responses

ensures complete coverage of tool call responses

* refactor(openai.py): refactor to use consistent pydantic model for responses api tool response on streaming

enables non-openai model tool call response to work correctly with guardrail checks on /v1/responses

* test: update tests

* fix: fix linting error

* fix: fix failing tests

* fix: fix import errors

* fix(openai/chat/guardrail_transformation): fix final chunk returned on streaming
2025-12-15 18:19:52 +05:30
Yuta Saito 73e00c1382 fix: add MCP auth header propagation 2025-12-15 07:45:35 +09:00
Ishaan Jaffer f6c4ad92e4 async def test_update_team_guardrails_with_org_id(): 2025-12-13 16:24:58 -08:00
yuneng-jiang 61767779f8 Adding tests 2025-12-13 14:44:26 -08:00
yuneng-jiang 4bcbd8b0a9 Fix callback env variables 2025-12-12 18:03:08 -08:00
Ishaan Jaff d38f241032 [Feat] JWT Auth - auth allow selecting team_id from request header (#17884)
* feat: add get_team_id_from_header for JWT Auth

* fix Auth builder JWT Auth

* test_get_team_id_from_header

* test_auth_builder_uses_team_from_header_e2e

* Select Team via Request Header
2025-12-12 10:18:20 -08:00