Commit graph

42355 commits

Author SHA1 Message Date
Shivam Rawat
440ae8933e
Merge pull request #22833 from BerriAI/doc_update_for_v1.82.0
[Fix] chore for release notes
2026-03-04 18:04:48 -08:00
Chesars
fa165a68d9 fix(bfl): add BFL-specific params to image edit get_supported_openai_params for consistency 2026-03-04 23:04:48 -03:00
shivam
b6c2028294 chore for release notes 2026-03-04 18:03:54 -08:00
Ishaan Jaff
9897df5089
feat(mcp): allow admins to override tool name and description per MCP server (#22828)
* feat(mcp): add tool_name_to_display_name and tool_name_to_description overrides for MCP servers

* docs(mcp): add mcp_openapi.md with OpenAPI→MCP guide and tool override section

* docs(mcp): add sequential UI screenshots to mcp_openapi.md

* fix(mcp): apply tool overrides after permission filtering; reverse-map display names in tools/call
2026-03-04 17:58:05 -08:00
Ishaan Jaff
dd183a7fcb
[Feat] UI - Allow sorting MCPs by created_at, Display name date (#22825)
* Add column sorting to MCP servers table

- Added sorting state management to DataTable component
- Enabled getSortedRowModel for tanstack/react-table
- Made column headers clickable with sort indicators (↑↓⇅)
- Added enableSorting: true to sortable columns in mcp_server_columns
- Columns now support ascending/descending sort by clicking headers
- Updated package-lock.json and tsconfig.json from build process

Co-authored-by: Ishaan Jaff <ishaan-jaff@users.noreply.github.com>

* Make table sorting opt-in to avoid conflicts with existing consumers

Address Greptile feedback (score 2/5):
- Added enableSorting prop to DataTable (defaults to false)
- Only enable sorting features when explicitly requested
- Pass enableSorting=true from MCP servers component
- This prevents unintended sorting on other DataTable consumers:
  * view_logs (has server-side sorting)
  * pass_through_settings
  * UsagePage
- Sorting UI (indicators, click handlers) only shown when enabled

Co-authored-by: Ishaan Jaff <ishaan-jaff@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Ishaan Jaff <ishaan-jaff@users.noreply.github.com>
2026-03-04 17:47:01 -08:00
yuneng-jiang
a33d3e035d
Merge pull request #22830 from BerriAI/litellm_fix_docs_build
[Fix] Docs build broken due to mismatched @docusaurus package versions
2026-03-04 17:41:26 -08:00
yuneng-jiang
e4dd3efe11
Merge pull request #22829 from BerriAI/litellm_projects_vitest
[Test] UI - Projects: add Vitest unit tests for all Projects components
2026-03-04 17:39:59 -08:00
yuneng-jiang
6ca7187999
Merge pull request #22827 from BerriAI/litellm_cleanup_networking_exports
[Refactor] UI - Dashboard: remove unused exports from networking.tsx
2026-03-04 17:38:43 -08:00
Chesars
f3cb45765b fix(bfl): close docstring in get_supported_openai_params, prevent quality/n param leak for non-ultra models 2026-03-04 22:36:13 -03:00
yuneng-jiang
9501a161e7 [Fix] Docs build broken due to mismatched @docusaurus package versions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 17:35:01 -08:00
Cesar Garcia
315a483ace
Update litellm/llms/black_forest_labs/image_generation/transformation.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-04 22:32:30 -03:00
yuneng-jiang
06d1616b9f remove unused exports from networking.tsx
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-04 17:26:18 -08:00
yuneng-jiang
e34960b3f0 [Test] UI - Projects: add Vitest unit tests for all Projects components
Adds 77 tests across 8 files covering ProjectsPage, ProjectDetailsPage,
ProjectKeysSection, ProjectKeysTable, CreateProjectModal, EditProjectModal,
ProjectBaseForm, and projectFormUtils.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 17:26:11 -08:00
Chesars
f2c75bdbe0 fix(bfl): add timeout to polling requests, validate initial POST status code
- Propagate timeout to each polling GET request to prevent indefinite hangs
- Validate HTTP status code of initial POST before parsing JSON
- Fix inline import and add 60s timeout to image URL download in _read_image_bytes
2026-03-04 22:20:59 -03:00
Ishaan Jaff
e3810b4009
feat: make model selection optional when creating virtual keys (#22826)
- Remove required validation for models field in create_key_button.tsx
- Update help text to clarify models are optional
- If no models selected, key will have access to all models
- This allows users to create keys for MCP-only access without selecting LLM models
- Fixes LIT-1791: Cannot create virtual key without LLM provider if user only has MCP access

Backend already supports empty models list (defaults to all models).
This change only updates the UI source to match backend behavior.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Ishaan Jaff <ishaan-jaff@users.noreply.github.com>
2026-03-04 17:19:07 -08:00
Ishaan Jaff
614a9fe9b7
Fix MCP server search in playground (#22824)
- Added showSearch prop to enable search input in MCP server selector
- Added filterOption to search across server name, alias, server_id, and description
- Search is case-insensitive and filters in real-time
- Added test to verify search input appears when dropdown opens
- Updated tsconfig.json with Next.js auto-configuration (jsx: react-jsx)

Fixes issue where MCP server search was not working in the playground.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Ishaan Jaff <ishaan-jaff@users.noreply.github.com>
2026-03-04 17:14:18 -08:00
Cesar Garcia
b0e644b017
Merge pull request #22823 from Chesars/docs/thinking-summary-field
docs: add thinking.summary field to /v1/messages and reasoning docs
2026-03-04 22:12:43 -03:00
Chesars
57c0b466e1 docs: add thinking.summary field to /v1/messages and reasoning_content docs
Document the `summary` optional field in the `thinking` object for the
Anthropic `/v1/messages` adapter, and add a section on summary preservation
when routing to non-Anthropic providers via the adapter.
2026-03-04 22:04:15 -03:00
Cesar Garcia
6693723588
Merge pull request #22809 from Chesars/worktree-count-tokens-api
feat(openai): add litellm.acount_tokens() public API + OpenAI token counting support
2026-03-04 22:03:23 -03:00
Harshit Jain
07cb6d5bec
Merge pull request #22372 from BerriAI/litellm_jwt_vkey_map
Litellm jwt vkey map
2026-03-05 06:24:49 +05:30
Chesars
abc381cfe2 fix: use chat format in tools test, include tools/system in local fallback 2026-03-04 21:53:03 -03:00
Cesar Garcia
5c1e01673f
Merge pull request #21441 from Chesars/fix/20998-preserve-thinking-summary
fix(anthropic): preserve thinking.summary when routing to OpenAI Responses API
2026-03-04 21:51:01 -03:00
Chesars
8786e674ee fix: address PR review feedback — F821, double auth, strict field, docs format, system-only fallback
- Fix F821: add BaseTokenCounter TYPE_CHECKING import in gpt_transformation.py
- Remove duplicate auth invocation in count_response_input_tokens endpoint
- Preserve `strict` field during chat→Responses API tool conversion
- Fix docs tools example to use chat completions format (not Responses API format)
- Return None early for system-only messages to avoid noisy error logs
2026-03-04 21:35:39 -03:00
tombii
28fe9fabae
fix: complexity_router crashes on list-format message content (OpenAI multi-part messages) (#22761)
* fix: complexity_router fails on list-format message content (OpenAI multi-part messages)

When a client sends messages with list-format content
(e.g. [{"type": "text", "text": "..."}] as used by the OpenAI JS SDK
and other clients), the complexity_router's async_pre_routing_hook
skipped those messages because it only handled str content. This caused
user_message to be None, the hook returned None, and the router fell
through to selecting the complexity_router deployment itself
(model="auto_router/complexity_router") which litellm cannot dispatch,
resulting in LiteLLMUnknownProvider.

Fixes:
- Extract text from list-format content parts (type=text) before
  classifying
- Return default_model instead of None when no user message can be
  extracted, preventing the crash fallthrough
- Loosen PreRoutingHookResponse.messages type from Dict[str, str] to
  Dict[str, Any] to accommodate list-format content values

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: update messages type annotation in async_pre_routing_hook to Dict[str, Any]

Consistent with PreRoutingHookResponse.messages type change and the
list-format content support added in the previous commit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: normalize None content to empty string in complexity_router message parsing

msg.get("content", "") returns None when the key exists with value None
(e.g. assistant messages with tool calls). Use `or ""` to normalize
None to an empty string explicitly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: strip whitespace from joined list content parts in complexity_router

Prevents leading/trailing spaces when some content parts have empty
text values (e.g. " ".join(["", "hello"]) → " hello").

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 16:18:49 -08:00
Ishaan Jaff
9a4bacd85d
fix: add missing spec_path column to LiteLLM_MCPServerTable schema (#22820)
The OpenAPI-to-MCP feature (PR #21575) added spec_path to the code
(_types.py, mcp_server_manager.py) but missed adding the column to
the Prisma schema files. This causes "Could not find field spec_path"
errors when creating OpenAPI-based MCP servers via the UI or API.

Adds `spec_path String?` to LiteLLM_MCPServerTable in all three
schema files (root, litellm/proxy, litellm-proxy-extras).

Made-with: Cursor
2026-03-04 16:07:05 -08:00
Guilherme Segantini
e335dd70f8
fix(sap provider layer): enable response-format for anthropic models and improve compatibility for GPT models via LangChain (#22804)
* (sap) ensure tool parameters have type='object' for SAP compatibility

Fix SAP GenAI Hub Orchestration Service rejecting tool calls with error:
"400 - LLM Module: tools.0.custom.input_schema.type: Input should be 'object'"

Root cause: When Claude Code uses tools (like web_search) with the SAP provider
through LiteLLM's Anthropic experimental pass-through adapter, Anthropic's
input_schema format doesn't always include the required type="object" field.

The adapter's translate_anthropic_tools_to_openai() function was directly
copying input_schema to OpenAI's parameters field without ensuring the
type="object" requirement that SAP's API strictly enforces.

Changes:
- Modified translate_anthropic_tools_to_openai() to check if input_schema
  is missing the type field and add type="object" if absent
- Preserves existing type field if already present
- Added comprehensive test suite (6 tests) covering:
  - Missing type field scenario (now adds type="object")
  - Existing type preservation
  - Empty input_schema handling
  - Multiple tools transformation
  - Additional schema properties preservation
  - SAP-specific compatibility regression test

Testing:
- All new tests pass (6/6 in test_anthropic_tool_schema_fix.py)
- All existing Anthropic tool tests pass (57/57 tool-related tests)
- SAP tool parameter validation tests pass (9/9 in test_sap_tool_parameters.py)

* (sap) enable native response_format for anthropic models

* (sap) filter strict param from model_params for GPT models only

* (sap) revert Anthropic adapter type='object' fix

The SAP FunctionTool Pydantic validator in litellm/llms/sap/chat/models.py
already ensures type='object' is added to all tool parameters for SAP
API compatibility.

The Anthropic adapter change affected ALL consumers, not just SAP, which
was broader scope than intended for this PR.

- Revert input_schema modification in Anthropic adapter
- Remove Anthropic-specific test file (SAP tests still cover this case)

* (sap) gate markdown stripping to Anthropic models only

SAP GenAI Hub with Anthropic models sometimes returns JSON wrapped in
markdown code blocks. GPT/Gemini/Mistral models don't exhibit this
behavior, so stripping is now gated to avoid accidentally modifying
valid responses that may contain markdown in JSON string values.
2026-03-04 16:03:59 -08:00
Cesar Garcia
92b0585f2e
Update litellm/llms/openai/responses/count_tokens/handler.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-04 20:57:29 -03:00
Cesar Garcia
bbec0f7657
Update litellm/proxy/response_api_endpoints/endpoints.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-04 20:57:05 -03:00
Cesar Garcia
13dbcb182c
Update transformation.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-04 20:43:05 -03:00
Julio Quinteros
7512f7dfc3 fix(lint): resolve PLR0915 too-many-statements in 4 files
Extract helpers to reduce statement count below the 50-statement limit:

- a2a_protocol/main.py: extract _execute_a2a_send_with_retry() (56 → 43)
- fine_tuning/main.py: extract _resolve_fine_tuning_timeout() (53 → 48)
- generic_guardrail_api.py: extract _build_request_headers() (51 → 49)
- mcp_streaming_iterator.py: extract _handle_initial_response_phase() (73 → 31)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 20:34:15 -03:00
Ishaan Jaff
b7f43d411a
feat(ui): add time to first token (TTFT) to logs (#22819)
* feat(ui): add TTFT (s) column to request logs table

* feat(ui): add Time to First Token metric to log detail drawer

* docs: add TTFT screenshot
2026-03-04 15:19:07 -08:00
Harshit Jain
063a1a437a
Update litellm/proxy/management_endpoints/jwt_key_mapping_endpoints.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-05 04:43:37 +05:30
Marty Sullivan
0909eee744
add missing bedrock models (#22810) 2026-03-04 15:13:09 -08:00
Cesar Garcia
1fb38dfa31
Update litellm/llms/openai/responses/count_tokens/transformation.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-04 19:54:49 -03:00
Ishaan Jaff
09e1a06f47
fix(ui): allow internal users/team admins to select guardrails when creating keys (#22816)
* fix(proxy): add guardrails list routes for internal users

* fix(ui): add guardrails fetch with v1/v2 fallback in networking

* fix(ui): allow internal users/team admins to select guardrails in create key modal

* fix(ui): show guardrails selector for internal users in key edit view

* fix(ui): pass canEditGuardrails flag to key info view

* test(ui): add tests for role-based guardrails access in key info view

* test(ui): update key edit view test for guardrails
2026-03-04 14:54:05 -08:00
Cesar Garcia
028dd3fddc
Merge pull request #22814 from Chesars/fix/gemini-live-supported-endpoints
fix: update gemini-live model endpoints and mode to realtime
2026-03-04 19:47:05 -03:00
Cesar Garcia
d346f5cfab
Merge pull request #17550 from Chesars/fix/gemini-async-streaming-custom-client-17148
Fix: User specified async client ignored with Gemini streaming+async
2026-03-04 19:46:51 -03:00
Cesar Garcia
59c64cb633
Update litellm/proxy/response_api_endpoints/endpoints.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-04 19:46:34 -03:00
Cesar Garcia
91928d9d67
Update litellm/llms/openai/responses/count_tokens/transformation.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-04 19:46:10 -03:00
Chesars
0e1a633e30 fix: update mode to realtime for gemini-live models
The mode field is used by health checks to determine the correct
check method (WebSocket for realtime vs REST for chat).
2026-03-04 19:43:23 -03:00
Chesars
ddf9598f30 fix: use /v1/realtime for gemini/ provider live model
The gemini/ prefix indicates Google AI Studio, which uses /v1/realtime
endpoint (OpenAI-compatible), not /vertex_ai/live.
2026-03-04 19:43:23 -03:00
Chesars
20a41a67d6 fix: update gemini-live model supported_endpoints to /vertex_ai/live
The gemini-live-2.5-flash-preview-native-audio-09-2025 model only works
with WebSocket (Live API), not REST endpoints. Changed supported_endpoints
from /v1/chat/completions to /vertex_ai/live to reflect the actual
passthrough endpoint available in LiteLLM proxy.
2026-03-04 19:43:23 -03:00
Chesars
bca8730041 Merge remote-tracking branch 'upstream/main' 2026-03-04 19:43:06 -03:00
Harshit Jain
36e63bd1ee
Update litellm/proxy/management_endpoints/jwt_key_mapping_endpoints.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-05 04:12:54 +05:30
Chesars
28a20c180f fix: add ProxyException handling to count_tokens endpoint
Match the error handling pattern used in the Anthropic count_tokens
endpoint: catch ProxyException separately to surface its status code
and message, and include error details in the generic 500 fallback.
2026-03-04 19:39:48 -03:00
Chesars
872554df42 Fix: User specified async client ignored with Gemini streaming+async
The user-specified async client was being overwritten by
`litellm.module_level_aclient` in `streaming_handler.py` when using
async+streaming with Gemini.

This fix adds a `gemini_client` parameter to `make_call()` (matching
the existing pattern in `make_sync_call()`) so the user's custom client
is preserved and not overwritten.

Fixes #17148
2026-03-04 19:38:08 -03:00
Chesars
c185652577 fix: avoid chat-format fallback for empty input_items, remove duplicate instructions and elif 2026-03-04 19:32:05 -03:00
Cesar Garcia
cb54215966 Update litellm/proxy/response_api_endpoints/endpoints.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-04 19:32:05 -03:00
Cesar Garcia
39762983b1 Update litellm/proxy/response_api_endpoints/endpoints.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-04 19:32:05 -03:00
Cesar Garcia
018750e0cd Update litellm/llms/openai/responses/count_tokens/transformation.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-04 19:32:05 -03:00