Commit Graph

33012 Commits

Author SHA1 Message Date
Julio Quinteros Pro 81faad5d0d fix(tests): skip prisma DB test and sync root schema.prisma with spec_path field
- Add @pytest.mark.skip to test_create_audit_log_in_db which requires
  a live Prisma/PostgreSQL DB connection unavailable in CI
- Sync root schema.prisma with litellm/proxy/schema.prisma by adding
  the spec_path field to LiteLLM_MCPServerTable, fixing
  test_aaaasschema_migration_check which detected this drift

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 12:29:53 -03:00
jquinter db0c309a31 Merge pull request #21670 from BerriAI/fix/gemini3-medium-reasoning-effort-test
fix(tests): correct medium reasoning_effort assertion for gemini-3-pro-preview
2026-02-20 12:19:19 -03:00
jquinter 9ea5f52583 Merge pull request #21669 from BerriAI/fix/skip-tests-requiring-external-services
fix(tests): skip CI tests requiring external services (DB, API keys)
2026-02-20 12:18:56 -03:00
jquinter eb2781552b Merge pull request #21668 from BerriAI/fix/model-max-budget-test-needs-premium-user
fix(tests): set premium_user=True in test_aasync_call_with_key_over_model_budget
2026-02-20 12:18:29 -03:00
Julio Quinteros Pro 87577eb05c fix(tests): correct medium reasoning_effort assertion for gemini-3-pro-preview
For gemini-3-pro-preview (not gemini-3-flash or gemini-3.1-pro-preview),
reasoning_effort="medium" maps to thinkingLevel="high" because the "medium"
thinking level is not available on that model variant.

Both test_reasoning_effort_maps_to_thinking_level_gemini_3 and
test_reasoning_effort_dict_format_gemini_3 had the correct comment
("medium -> high") but the wrong assertion (== "medium"). Fixed to
match the production code and the comments.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 12:09:26 -03:00
jquinter 1a2038c08b Merge pull request #21671 from BerriAI/fix/skip-more-external-service-tests
fix(tests): skip more CI tests requiring external DB/Redis connections
2026-02-20 11:55:36 -03:00
Julio Quinteros Pro 3dd58b42ce fix(tests): skip more CI tests requiring external DB/Redis connections
Mark additional tests that fail due to unavailable Prisma DB or Redis
in CI with @pytest.mark.skip.

test_key_generate_prisma.py (Prisma DB):
- test_call_with_valid_model
- test_call_with_valid_model_using_all_models
- test_call_with_user_over_budget
- test_call_with_user_over_budget_stream
- test_call_with_proxy_over_budget
- test_call_with_proxy_over_budget_stream
- test_call_with_key_over_budget
- test_call_with_key_over_budget_no_cache
- test_call_with_key_over_budget_stream
- test_create_update_team

test_e2e_pod_lock_manager.py (Redis):
- test_pod_lock_acquisition_when_no_active_lock
- test_pod_lock_acquisition_after_completion
- test_pod_lock_acquisition_after_expiry
- test_pod_lock_release
- test_concurrent_lock_acquisition
- test_lock_acquisition_with_expired_ttl
- test_release_expired_lock
- test_e2e_size_of_redis_buffer

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 11:49:38 -03:00
Julio Quinteros Pro ce59e6f00a fix(tests): use unconditional skip for vertex/gemini token counting test
The parametrized test covers both gemini-2.5-pro (needs GEMINI_API_KEY)
and vertex-ai-gemini-2.5-pro (needs VERTEX_AI_PRIVATE_KEY). A skipif
on GEMINI_API_KEY alone was insufficient for the vertex variant.
Switch to @pytest.mark.skip to guard both parametrizations consistently.

Addresses Greptile review comment on PR #21669.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 11:36:54 -03:00
Julio Quinteros Pro 174c17cec1 fix(tests): skip additional CI tests requiring external DB connection
Mark DB-dependent tests in test_key_generate_prisma.py and test_jwt.py
with @pytest.mark.skip to prevent CI failures when Prisma DB is unavailable.

Tests now skipped:
- test_call_with_invalid_key
- test_call_with_invalid_model
- test_call_with_end_user_over_budget
- test_aasync_call_with_key_over_model_budget (all 3 parametrize variants)
- test_call_with_key_never_over_budget
- test_aview_spend_per_user
- test_aadmin_only_routes
- test_auth_vertex_ai_route
- test_team_token_output (both audience variants)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 11:35:43 -03:00
Julio Quinteros Pro 3dfa3611d9 fix(tests): skip CI tests requiring external services (DB, API keys)
Mark tests that require Prisma DB connections or external API credentials
with @pytest.mark.skip / @pytest.mark.skipif so they don't block CI runs
when the infrastructure is unavailable.

Tests skipped:
- test_create_user_default_budget (Prisma DB)
- test_gemini_pass_through_endpoint (GEMINI_API_KEY / GOOGLE_API_KEY)
- test_vertex_ai_gemini_token_counting_with_contents (Google API creds)
- test_new/update/delete/info_project (Prisma DB)
- test_create/list/get/delete_skill_sdk (Prisma DB)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 11:28:42 -03:00
jquinter 39d95eb1b6 Merge pull request #21667 from BerriAI/fix/policy-endpoints-export-private-helpers
fix(policy_endpoints): re-export private helper functions from package __init__.py
2026-02-20 11:13:09 -03:00
Julio Quinteros Pro 1f6303677c fix(tests): set premium_user=True in test_aasync_call_with_key_over_model_budget
generate_key_fn calls validate_model_max_budget which raises
"You must have an enterprise license to set model_max_budget" unless
premium_user=True. The test was hitting this gate before it could
exercise the actual per-model budget logic, causing all three variants
to fail with an enterprise-check error instead of the expected budget
exceeded / pass-through result.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 11:12:38 -03:00
Julio Quinteros Pro 65388d877e fix(policy_endpoints): explicitly re-export private helper functions from __init__.py
`import *` does not re-export names starting with `_`, so the private
competitor-enrichment helpers added in endpoints.py were invisible when
imported from the package:

  from litellm.proxy.management_endpoints.policy_endpoints import (
      _build_all_names_per_competitor, ...
  )

This caused an ImportError that prevented the entire test module from
collecting. Add explicit imports for each private helper so they are
accessible from the package namespace.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 11:09:57 -03:00
jquinter 8f5561cf48 Merge pull request #21666 from BerriAI/fix/test-max-effort-error-message
fix(tests): update test_max_effort_rejected_for_opus_45 regex to match current error message
2026-02-20 11:09:22 -03:00
Julio Quinteros Pro 963e0eabcb fix(tests): update test_max_effort_rejected_for_opus_45 regex to match new error message
The production error message was expanded when Sonnet 4.6 was also added as
a supported model for effort='max'. The test's match regex still referenced
the old "Claude Opus 4.6"-only message; update it to match the new
"Claude 4.6 models" wording.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 11:07:52 -03:00
Sameer Kankute b62db9fcc9 Merge pull request #21663 from BerriAI/litellm_add_reasoning_support_config
[Feat] Add reasoning support via config
2026-02-20 18:17:09 +05:30
Sameer Kankute 164734fa45 Merge pull request #21662 from BerriAI/litellm_mcp_openapi_spec
[Fix]Add mcp via openapi spec
2026-02-20 18:16:30 +05:30
Sameer Kankute 9e0bd46c28 Merge pull request #21659 from BerriAI/litellm_fix_converse_disable_tool
Fix mapping of parallel_tool_calls for bedrock converse
2026-02-20 18:16:10 +05:30
Sameer Kankute 784ce97918 Merge pull request #21658 from BerriAI/litellm_fix_vertex_ai_messages
Fix: api_base is required. Unable to determine the correct api_base for the request
2026-02-20 18:15:30 +05:30
Sameer Kankute bf024c0404 Merge pull request #21654 from BerriAI/litellm_new_gemini_pathc
Fix _map_reasoning_effort_to_thinking_level for all gemini 3 family
2026-02-20 18:14:47 +05:30
Sameer Kankute 5d8f2196d1 Add test case 2026-02-20 16:22:44 +05:30
Sameer Kankute 871c049f49 Add support for reasoning and tools viaconfig 2026-02-20 16:22:19 +05:30
Sameer Kankute 3cd9072539 Update ui/litellm-dashboard/tsconfig.json
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-02-20 14:08:38 +05:30
Sameer Kankute f99ea619da Add search bar for enabling and calling tool 2026-02-20 13:57:58 +05:30
Sameer Kankute ba74ee5a31 Add test for base url extraction and migration 2026-02-20 13:47:44 +05:30
Sameer Kankute 19b7b4019c Fix: server url extraction from spec_path 2026-02-20 13:46:59 +05:30
Sameer Kankute b579f56ca3 Fix mapping of parallel_tool_calls for bedrock converse 2026-02-20 12:27:41 +05:30
Sameer Kankute cdb4917185 Fix: api_base is required. Unable to determine the correct api_base for the request 2026-02-20 12:09:25 +05:30
yuneng-jiang 527f5c5d14 Merge pull request #21657 from BerriAI/litellm_knip_unused_files_cleanup
[Refactor] UI: Remove 38 unused files detected by knip
2026-02-19 22:22:21 -08:00
yuneng-jiang eeab8705a1 [Refactor] UI: Remove 38 unused files detected by knip
Dead code cleanup — these files had no imports from any active entry points.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-19 22:07:41 -08:00
Sameer Kankute 5885c4a588 Fix _map_reasoning_effort_to_thinking_level for all gemini 3 family 2026-02-20 11:17:24 +05:30
jquinter 37c98f8325 Merge pull request #21602 from BerriAI/fix/policy-endpoints-unused-import
fix(lint): remove redundant router import in policy_endpoints __init__
2026-02-20 01:16:18 -03:00
jquinter d08c3a1d68 Merge pull request #21638 from BerriAI/fix/ai-policy-suggester-use-litellm-acompletion
fix(policy): use litellm.acompletion directly in AiPolicySuggester
2026-02-20 01:14:59 -03:00
jquinter 898774fecf Merge pull request #21643 from BerriAI/fix/redis-cache-test-missing-host
fix(tests): pass host to RedisCache in test_team_update_redis
2026-02-20 01:11:04 -03:00
Sameer Kankute fb75a7130f Merge pull request #21630 from Chesars/fix/empty-system-message-anthropic
fix(anthropic): empty system messages in translate_system_message
2026-02-20 09:32:50 +05:30
Julio Quinteros Pro bd8c1cc673 fix(tests): pass host to RedisCache in test_team_update_redis to avoid ValueError
RedisCache() without arguments fails at construction with
"ValueError: Either 'host' or 'url' must be specified for redis."
The actual Redis connection is irrelevant since async_set_cache is mocked.
Unlike test_get_team_redis which uses client_no_auth (which sets REDIS_HOST
via fake_env_vars), test_team_update_redis has no fixture setting that env var.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 01:00:58 -03:00
jquinter 6b681aafdd Merge pull request #21641 from BerriAI/fix/jwt-tests-missing-premium-user-flag
fix(tests): set premium_user=True in JWT tests that call user_api_key_auth
2026-02-20 00:45:13 -03:00
Julio Quinteros Pro cde51a53a7 fix(tests): set premium_user=True in JWT tests that call user_api_key_auth
JWT auth is an enterprise-only feature. Tests that call user_api_key_auth
with enable_jwt_auth=True must set premium_user=True on the proxy server
to bypass the enterprise gate, otherwise they fail with:

  ValueError: JWT Auth is an enterprise only feature.

This follows the same pattern as PR #21285 (fix/jwt-enterprise-license-test).

Fixed tests:
- test_team_token_output
- test_allowed_routes_admin
- test_allow_access_by_email
- test_end_user_jwt_auth

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 00:31:56 -03:00
jquinter 2b09c5d3bc Merge pull request #21639 from BerriAI/fix/unused-imports-semantic-guard-and-policy-endpoints
fix(lint): remove unused imports in semantic_guard and policy_endpoints
2026-02-20 00:02:21 -03:00
Sameer Kankute b405f64688 Merge pull request #21598 from jtsaw/fix/anthropic-sonnet-4-6-reasoning-effort
support reasoning and effort parameters on sonnet 4.6
2026-02-20 08:24:29 +05:30
Julio Quinteros Pro dba60cac22 fix(lint): remove unused imports in semantic_guard and policy_endpoints
- Remove unused RouteChoice import from semantic_guard.py TYPE_CHECKING block
  (only referenced in docstring, never used as a type annotation)
- Remove redundant explicit router import from policy_endpoints/__init__.py
  (already re-exported by the preceding import * on the same line)

Fixes Ruff F401 errors caught in CI linting.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-19 23:46:02 -03:00
Julio Quinteros Pro 3381d6217f fix(policy): use litellm.acompletion directly in AiPolicySuggester
The suggest() method was calling llm_router.acompletion(), which requires
the proxy router to be initialised. This caused:
  ValueError: LLM router not initialized
in every test (and in any deployment without a configured router).

AiPolicySuggester is a self-contained feature that calls an LLM directly;
it has no need for proxy routing. Switch to litellm.acompletion, which is
always available and is what the tests already mock.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-19 23:35:35 -03:00
Darien Kindlund 0f2516e9cd fix: handle explicit None model_info in LowestLatencyLoggingHandler (#21633)
When model_info is explicitly set to None in litellm_params (via
get_litellm_params.py), the pattern .get("model_info", {}) returns
None instead of {}, causing AttributeError on the chained .get("id").

This commonly occurs when Anthropic API returns usage limit errors,
the router falls back to Vertex AI, and the fallback succeeds — the
log_success_event callback fires with model_info=None.

Uses the (x or {}) pattern already established in router.py.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-19 17:30:58 -08:00
Ishaan Jaffer d2bdf7d618 fix form 2026-02-19 17:17:20 -08:00
Ishaan Jaffer be16f320ac fix filter 2026-02-19 17:17:11 -08:00
Ishaan Jaffer 2199b0783d ui refactor 2026-02-19 17:13:51 -08:00
Ishaan Jaffer 35120515cb QA: UI fix test page 2026-02-19 17:13:51 -08:00
yuneng-jiang aa9f85545c Merge pull request #21627 from BerriAI/litellm_service_key_vis
[Fix] Service Account Visibility for Team Members
2026-02-19 17:09:33 -08:00
yuneng-jiang 4475258426 address greptile review feedback (greploop iteration 1)
Refactor to fetch team objects once via _fetch_user_team_objects(),
then derive admin and member team IDs from the shared result. Eliminates
duplicate DB query between get_admin_team_ids and get_member_team_ids.
2026-02-19 16:53:48 -08:00
Chesars 56386969b5 fix(anthropic): remove empty system messages from message list
Empty system messages were skipped for Anthropic's system param but
not removed from the messages list, causing BadRequestError when
anthropic_messages_pt encountered the unsupported "system" role.

Fixes #21622
2026-02-19 21:46:17 -03:00