Commit graph

32388 commits

Author SHA1 Message Date
Yuneng Jiang
f4217fe116
chore: fixes 2026-04-04 23:46:02 -07:00
Julio Quinteros Pro
90489a481c refactor: remove dead code from test cleanup per greptile feedback
Removes hasattr checks for non-existent attributes _langfuse_clients
and _langfuse_client_cache as identified by greptile code review.

Changes:
- Remove hasattr check for LangFuseLogger._langfuse_clients (doesn't exist)
- Remove hasattr check for self.logger._langfuse_client_cache (doesn't exist)
- Keep only the effective cleanup: self.logger.Langfuse = None and del self.logger

The core fix (nulling Langfuse reference and deleting logger instance)
remains unchanged and effective. This just removes dead code that was
misleading.

Addresses: https://github.com/BerriAI/litellm/pull/21248#issuecomment

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 13:41:29 -03:00
Julio Quinteros Pro
c4fa7e9298 fix(test): improve Langfuse test isolation to prevent flaky failures
Enhances test isolation in TestLangfuseUsageDetails by ensuring the
logger instance is completely fresh for each test and properly cleaned
up afterward.

Changes:
- Clear any class-level cached Langfuse clients before creating logger
- Reset logger's cached client instances in setUp
- Properly clean up logger instance and its state in tearDown

Root Cause:
The test_log_langfuse_v2_handles_null_usage_values test was failing
when run after other tests due to lingering state in the logger instance.
While the test passes in isolation, test ordering issues caused it to
fail with "Expected 'generation' to have been called once. Called 0 times."

This builds on PR #21214 which added sys.modules cleanup, but that wasn't
sufficient to prevent all state leakage between tests.

Fixes: Test isolation issues in test_log_langfuse_v2_handles_null_usage_values

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 13:28:12 -03:00
jquinter
068c994d89
Merge pull request #21075 from jquinter/fix/policy-endpoints-import-error
fix: make policy_resolve_endpoints importable without FastAPI
2026-02-15 13:18:21 -03:00
jquinter
f555846c83
Merge pull request #21227 from BerriAI/fix/sso-test-premium-check
Fix SSO test flakiness by correctly mocking premium_user
2026-02-15 13:18:08 -03:00
jquinter
2bdbb99f08
Merge pull request #19747 from jquinter/fix/flaky-tests-missing-api-keys
[test] Fix flaky tests caused by module reloading and missing mocks
2026-02-15 13:17:44 -03:00
Julio Quinteros Pro
bee4c94556 Fix Vertex AI rerank tests for parallel test execution
The test_end_to_end_rerank_flow mock for _ensure_access_token was not
being applied because conftest reloads litellm, causing the
VertexAIRerankConfig class to be a different object than what's patched.

Fix: Reload the transformation module in setup_method and re-import the
class to ensure the patch targets the same class object used by tests.
2026-02-15 13:08:47 -03:00
Julio Quinteros Pro
8285a2a7b4 Fix HuggingFace embedding tests for parallel test execution
The tests were making real API calls instead of using mocks because
conftest.py reloads litellm at module scope, causing the HTTPHandler
class reference in the HuggingFace embedding handler to become stale.
The patches were applied to the new class, but the handler used the old one.

Fix: Add a reload_huggingface_modules fixture that reloads the relevant
modules BEFORE the mock fixtures apply their patches. This ensures all
references point to the same class object.
2026-02-15 13:08:47 -03:00
Julio Quinteros Pro
59d3c75462 Fix test_error_handling_integration for parallel test execution
The test was making real API calls instead of using mocks because the
conftest.py reloads litellm at module scope, causing stale module
references. The mock was patching the old reference while the actual
code used the new one.

Fix: Reload litellm.containers.main inside the test to get a fresh
reference to base_llm_http_handler, then re-import create_container
after the reload.
2026-02-15 13:08:47 -03:00
Julio Quinteros Pro
ab658d7d50 Fix pillar guardrails tests for parallel execution
The setup_and_teardown fixture was failing with "ImportError: module
litellm not in sys.modules" during parallel test execution. This occurs
because another worker might have removed/modified litellm from
sys.modules before this test tries to reload it.

Fix: Check if litellm is in sys.modules before attempting reload.
2026-02-15 13:08:41 -03:00
Julio Quinteros Pro
7dcef86cc6 Fix test_embedding_header_forwarding_with_model_group for parallel test execution
- Reload litellm_pre_call_utils module inside test to get fresh litellm reference
- Use string-based patch("litellm.model_group_settings") instead of patch.object
- These changes ensure the patch targets the correct module after conftest reloads litellm
2026-02-15 13:08:41 -03:00
Julio Quinteros Pro
c52251ca72 test: Fix test isolation issues caused by module reloading
Fix several tests that fail in CI due to parallel test execution and
module reloading in conftest.py.

1. test_empty_assistant_message_handling:
   - Use patch.object on factory_module.litellm instead of direct assignment
   - Ensures the correct litellm reference is modified after conftest reloads

2. test_embedding_header_forwarding_with_model_group:
   - Use patch.object on pre_call_utils_module.litellm instead of direct assignment
   - Same fix for module reloading issue

3. test_embedding_input_array_of_tokens:
   - Move mock inside test function (after fixture initializes router)
   - Add skip condition if llm_router is None
   - Fixes "AttributeError: None does not have 'aembedding'" in parallel execution

Root cause: conftest.py reloads litellm at module scope, which can cause:
- Different litellm references between test code and library code
- Global state (like llm_router) being None at decorator execution time
- isinstance checks failing due to class identity mismatches
2026-02-15 13:08:41 -03:00
Julio Quinteros Pro
97f4cfc14a test: Fix additional broken tests
1. test_bedrock_converse_budget_tokens_preserved:
   - Fixed mocking at the correct level (litellm.acompletion instead of client.post)
   - The previous mock didn't work because the code runs through run_in_executor
     and the passed client parameter was not being used

2. test_error_class_returns_volcengine_error:
   - Changed isinstance check to class name comparison
   - This avoids issues when module reloading (in conftest.py) causes class
     identity mismatches during parallel test execution
2026-02-15 13:08:41 -03:00
Julio Quinteros Pro
8d15996b5a test: Fix flaky tests with proper mocking and skip conditions
1. test_acompletion_with_mcp_streaming_metadata_in_correct_chunks:
   - Moved stream consumption inside patch context to avoid real API calls
   - The previous implementation had assertions outside the `with patch(...)`
     block, causing real OpenAI API calls when consuming the stream

2. TestCheckResponsesCost tests:
   - Added skip condition when litellm_enterprise module is not available
   - These tests import from litellm_enterprise.proxy.common_utils.check_responses_cost
     which is only available in the enterprise version
2026-02-15 13:08:30 -03:00
Julio Quinteros Pro
12fddb4b8a Fix SSO test flakiness by mocking premium_user correctly
The test_sso_key_generate_shows_deprecation_banner test was failing in CI
with a 403 Forbidden error because the SSO endpoint checks for premium_user
at line 297 in ui_sso.py.

The fix adds a monkeypatch for premium_user at its source location
(litellm.proxy.proxy_server.premium_user) to bypass the enterprise check
during testing.

Fixes the intermittent test failure where the endpoint would return 403
instead of the expected 200 status code.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 13:05:37 -03:00
jquinter
a7b4c7536f
Merge pull request #21216 from BerriAI/fix/anthropic-bedrock-test-flakiness
fix(test): resolve merge conflict and fix bedrock thinking test flakiness
2026-02-15 12:45:15 -03:00
jquinter
bf9cf7ad45
Merge pull request #21214 from BerriAI/fix/langfuse-test-isolation
Fix: Langfuse test isolation to prevent flaky failures
2026-02-15 12:42:33 -03:00
jquinter
7c31bd6559
Merge pull request #21246 from BerriAI/fix/remove-unused-reasoning-import
fix: remove unused Reasoning import from transformation.py
2026-02-15 12:42:05 -03:00
Julio Quinteros Pro
4e5361c8c8 fix: remove unused Reasoning import from transformation.py
The Reasoning import was left unused after PR #21103 changed
reasoning=dict(Reasoning()) to reasoning=None. This caused
a Ruff F401 linting error.

Fixes linting error:
- F401: `litellm.types.llms.openai.Reasoning` imported but unused

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 12:37:41 -03:00
jquinter
e6dea2e49b Update litellm/integrations/opentelemetry.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-02-15 12:31:26 -03:00
Julio Quinteros Pro
54c24a8d08 fix(test): resolve merge conflict and fix bedrock thinking test flakiness
This commit addresses two issues:

1. **Merge conflict resolution**: Resolved merge conflict in litellm/integrations/opentelemetry.py
   that was preventing imports from working. The conflict was in the OpenTelemetry SDK
   LogRecord import section.

2. **Test flakiness fix**: Fixed intermittent failures in test_bedrock_converse_budget_tokens_preserved
   by properly configuring mock objects to avoid unawaited coroutine warnings.

The test was failing in CI with "Expected 'post' to have been called once. Called 0 times."
The root cause was improper mock setup where AsyncMock was creating async child methods
(raise_for_status, json) that returned unawaited coroutines, causing unreliable behavior
across different Python versions and test environments.

**Changes:**
- Set raise_for_status() and json() as explicit MagicMock instances on the response
- Use AsyncMock explicitly for the post() method via patch.object's 'new' parameter
- This ensures response methods are synchronous while the HTTP call remains async

**Testing:**
- Test now passes consistently across 5 consecutive runs
- RuntimeWarnings about unawaited coroutines eliminated (18 warnings → 16 warnings)
- Request JSON verification shows budget_tokens correctly preserved

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 12:31:26 -03:00
Julio Quinteros Pro
76e1b2c015 Remove redundant sys.modules cleanup in Langfuse test tearDown
The manual sys.modules restoration code was redundant because
patch.dict.stop() automatically handles the cleanup. This simplifies
the tearDown method and removes the now-unused _original_langfuse_module
instance variable.

Addresses review comment: https://github.com/BerriAI/litellm/pull/21214#pullrequestreview-3802348462

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 12:26:02 -03:00
Julio Quinteros Pro
9672a1f015 Fix Langfuse test isolation to prevent flaky failures
Fixes test_log_langfuse_v2_handles_null_usage_values flaky test failure
by properly cleaning up sys.modules['langfuse'] in tearDown.

Changes:
- Store original langfuse module in setUp before mocking
- Restore original or remove mock in tearDown to prevent state pollution
- Remove invalid print_verbose parameter from log_event_on_langfuse

Root Cause:
The tearDown method was not cleaning up sys.modules['langfuse'] after
each test, causing mock state to leak between tests. This caused
intermittent failures in CI, especially when tests run in parallel or
in different orders.

Impact:
This test has a long history of flakiness with multiple attempted fixes
(#20475, #17599, #17594, #17591, #17588). The missing sys.modules cleanup
was the underlying issue causing continued failures despite those patches.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 12:26:02 -03:00
jquinter
b2eade11a4
Merge pull request #21104 from BerriAI/chore/add-claude-to-gitignore
chore: add .claude directory to gitignore
2026-02-15 12:12:32 -03:00
jquinter
e642d5d9b0
Merge pull request #21103 from jquinter/fix/responses-reasoning-type-clean
fix: use None instead of Reasoning() for reasoning parameter
2026-02-15 12:11:34 -03:00
jquinter
5bd16a302b
Merge branch 'main' into fix/responses-reasoning-type-clean 2026-02-15 12:11:19 -03:00
yuneng-jiang
caf6db972f
Merge pull request #21237 from BerriAI/litellm_ui_access_groups
[Infra] UI - Unit Tests: Increase timeout on Long Running Tests
2026-02-14 18:16:43 -08:00
yuneng-jiang
ac648af78e add timeout to long running tests 2026-02-14 18:05:27 -08:00
yuneng-jiang
e92b7274c9
Merge pull request #21236 from BerriAI/litellm_ui_access_groups
[Docs] Access Group Docs
2026-02-14 18:01:11 -08:00
yuneng-jiang
227b3551a6 access groups docs 2026-02-14 18:00:22 -08:00
yuneng-jiang
58c430eaf8
Merge pull request #21235 from BerriAI/litellm_ui_access_groups
[Infra] Fixes + UI Build
2026-02-14 17:34:37 -08:00
yuneng-jiang
dd604dbf61 chore: update Next.js build artifacts (2026-02-15 01:33 UTC, node v22.16.0) 2026-02-14 17:33:10 -08:00
yuneng-jiang
1c1807df45 defensive checks for null 2026-02-14 17:30:58 -08:00
Shivam Rawat
47048d103f
Merge pull request #20684 from BerriAI/litellm_preserver_team_key_alias_after_key_regeneration_and_deletion
[Fix] Preserve key_alias and team_id metadata in /user/daily/activity/aggregated after key deletion or regeneration
2026-02-14 17:10:32 -08:00
Ishaan Jaffer
45235ce5d5 docs 2026-02-14 17:09:13 -08:00
Ishaan Jaffer
8a341ebd5d docs fix 2026-02-14 17:09:13 -08:00
yuneng-jiang
801fc22d6e
Merge pull request #21234 from BerriAI/litellm_ui_access_groups
[Feature] UI - Keys/Teams: Add Access Group Selector to Create and Edit Flow
2026-02-14 17:08:13 -08:00
yuneng-jiang
b3fd76a713 adding access groups on keys and teams 2026-02-14 17:01:29 -08:00
Shivam Rawat
db9b98caf3
Merge branch 'main' into litellm_preserver_team_key_alias_after_key_regeneration_and_deletion 2026-02-14 16:59:52 -08:00
Ishaan Jaffer
74a9900fe6 docs fix 2026-02-14 16:58:00 -08:00
Ishaan Jaffer
c93e0dcf9f docs 2026-02-14 16:56:38 -08:00
Ishaan Jaffer
ff502e8b91 DEFAULT_ACCESS_GROUP_CACHE_TTL 2026-02-14 16:48:57 -08:00
shivam
88a631d32a fixed ruff 2026-02-14 16:48:46 -08:00
Ishaan Jaffer
d24869c7ce docs fix 2026-02-14 16:47:01 -08:00
Ishaan Jaffer
9e7dde508f docs fix 2026-02-14 16:45:57 -08:00
Ishaan Jaff
eb432bf911
Litellm notes 181 12 (#21231)
* docs

* docs

* docs

* docs

* fix SCHEMA

* LiteLLM_PolicyTable

* litellm-proxy-extras = {version = "0.4.39",
2026-02-14 16:39:22 -08:00
shivam
6f49261651 fix failing test and lint 2026-02-14 16:36:01 -08:00
yuneng-jiang
27fe16be4b Merge remote-tracking branch 'origin/main' into litellm_ui_access_groups 2026-02-14 16:33:44 -08:00
yuneng-jiang
3e97c0d5d6 temp commit for merge 2026-02-14 16:33:35 -08:00
yuneng-jiang
55f169aa69
Merge pull request #21190 from BerriAI/litellm_access_groups_inte
[Feature] Access Group Checks
2026-02-14 16:28:09 -08:00