Commit graph

35170 commits

Author SHA1 Message Date
pradyyadav
bd0e92926a merge origin/main, resolve conflict in vertex gemini schema transform
Made-with: Cursor
2026-03-13 00:48:49 +05:30
pradyyadav
2847437c04 address review: normalize timeout consistently, fix sync converse path, add tests 2026-03-13 00:38:04 +05:30
pradyyadav
64c50b86ba address review: normalize timeout consistently, fix sync converse path, add tests 2026-03-13 00:31:30 +05:30
Joe Reyna
f2f843448e
Merge pull request #23414 from joereyna/fix/pass-through-server-root-path
fix: strip SERVER_ROOT_PATH prefix before checking mapped pass-through routes
2026-03-12 11:57:13 -07:00
yuneng-jiang
779a231036
Merge pull request #23465 from BerriAI/ui_build_mar12
[Infra[ UI Build + Tests
2026-03-12 11:29:46 -07:00
yuneng-jiang
d17d205963 chore: update Next.js build artifacts (2026-03-12 18:25 UTC, node v22.16.0) 2026-03-12 11:25:05 -07:00
yuneng-jiang
c8ce098b65 fixing tests 2026-03-12 11:24:15 -07:00
yuneng-jiang
68b8b47d58
Merge pull request #23463 from BerriAI/ui_build_mar12
[Infra] Fixing UI Build
2026-03-12 10:54:00 -07:00
yuneng-jiang
e38edb6190 fixing ui build 2026-03-12 10:51:49 -07:00
Sameer Kankute
3c322a879f
Merge pull request #23460 from BerriAI/litellm_add_webrtc_support
Improve doc for WebRTC
2026-03-12 22:46:23 +05:30
Sameer Kankute
8bbebb5d75 Improve doc for WebRTC 2026-03-12 22:45:36 +05:30
Sameer Kankute
5ccf1cf4fe
Merge pull request #23459 from BerriAI/litellm_add_webrtc_support
Improve doc for WebRTC
2026-03-12 22:43:05 +05:30
Sameer Kankute
cf1d330e63 Improve doc for WebRTC 2026-03-12 22:41:39 +05:30
Sameer Kankute
d507f840d3
Merge pull request #23432 from BerriAI/litellm_azure-model-router-show-actual-model
feat(azure_ai): show actual model used in Azure Model Router response
2026-03-12 22:18:50 +05:30
Sameer Kankute
d1a99f571e
Merge pull request #23446 from BerriAI/litellm_add_webrtc_support
[Feat] Add WebRTC support
2026-03-12 22:16:55 +05:30
Sameer Kankute
507bced04f Fix the live tester 2026-03-12 22:14:08 +05:30
michelligabriele
7c5e2e8389
fix(proxy): make async_post_call_response_headers_hook consistent across all endpoints (#22985)
* fix(proxy): make async_post_call_response_headers_hook consistent across all endpoints

The response headers hook had 5 gaps that prevented callbacks from
reliably extracting routing metadata across endpoint types:

1. Hook never fired for /audio/transcriptions (endpoint bypasses
   base_process_llm_request)
2. custom_llm_provider not accessible in hook data for any endpoint
3. custom_llm_provider not stamped in ResponsesAPIResponse._hidden_params
   (unlike chat completions)
4. model_info under inconsistent keys (metadata vs litellm_metadata)
5. request_headers always None at all call sites

This adds a litellm_call_info parameter to the hook that normalizes
routing metadata (custom_llm_provider, model_info, api_base, model_id)
regardless of endpoint type. Also stamps custom_llm_provider on
Responses API responses, adds the hook call to the transcription
handler, and passes request_headers at all call sites.

Supersedes PR #21385.

* fix(proxy): address review feedback — safer backwards compat and None guards

- Replace try/except TypeError with inspect.signature() check for
  litellm_call_info backwards compatibility. This avoids masking real
  TypeErrors inside callback implementations and prevents double
  invocation with inconsistent parameters.

- Use (data.get("key") or {}) instead of data.get("key", {}) to guard
  against keys that exist with an explicit None value, which would
  cause AttributeError on the subsequent .get() call.

* fix(proxy): cache inspect.signature result for callback compat check

Move the inspect.signature() call into a module-level helper with a
dict cache keyed by callback identity. Avoids repeated introspection
per request per callback in the hot path.

* fix(proxy): use class identity for signature cache key

Key the _CALLBACK_ACCEPTS_CALL_INFO cache by id(type(cb)) instead of
id(cb) to avoid stale entries from Python address reuse after GC.
All instances of the same callback class share the same method
signature, so class identity is both safer and more cache-efficient.
2026-03-12 08:51:00 -07:00
joereyna
1af7f11dae fix: extract normalize_route_for_root_path to deduplicate root-path stripping; fix mock target 2026-03-12 08:16:00 -07:00
joereyna
938452cc59 fix: extract normalize_route_for_root_path to deduplicate root-path stripping 2026-03-12 07:55:22 -07:00
Sameer Kankute
291e6e1841
Merge pull request #23435 from BerriAI/litellm_vector-store-retrieve-list-update-delete
Add vector store retrieve list update delete
2026-03-12 19:08:39 +05:30
Sameer Kankute
4f5b6ae556
Merge pull request #23448 from BerriAI/litellm_cicd_1203126
Litellm cicd 1203126
2026-03-12 19:07:33 +05:30
Sameer Kankute
b7cfcdd35d Add docs 2026-03-12 19:06:57 +05:30
Sameer Kankute
bb451cfcb0 address greptile review feedback (greploop iteration 2)
- Thread api_version through HTTP handlers to Azure realtime endpoints
- Make expires_at optional in RealtimeClientSecretResponse
- Fix test token expiry times to be in the future
- Populate user_id and team_id in minimal_auth for spend tracking

Made-with: Cursor
2026-03-12 18:53:22 +05:30
Sameer Kankute
f4103c51a6 address greptile review feedback (greploop iteration 1)
- Add api-version query param to Azure realtime URLs
- Remove Content-Type from Azure realtime_calls headers (httpx sets it)
- Add token expiry validation in proxy_realtime_calls endpoint
- Fix type annotations for upstream_resp

Made-with: Cursor
2026-03-12 18:40:37 +05:30
Sameer Kankute
f5be79419c Fix test_claude_agent_sdk_streaming 2026-03-12 18:36:04 +05:30
Sameer Kankute
f6238e781e Fix mypy 2026-03-12 18:35:17 +05:30
Sameer Kankute
982f3917c5 Fix test_standard_logging_payload 2026-03-12 18:35:01 +05:30
Sameer Kankute
15d873e204 Fix update deprecated model test 2026-03-12 18:34:20 +05:30
Sameer Kankute
374c35a6b7 Fix update deprecated model test 2026-03-12 18:34:15 +05:30
Sameer Kankute
7c70015a5f Fix mcp error 2026-03-12 18:33:58 +05:30
Sameer Kankute
18df137021 Fix mypy error 2026-03-12 18:33:40 +05:30
Sameer Kankute
0f91a4f9da Fix test_get_tools_for_single_server 2026-03-12 18:33:14 +05:30
Sameer Kankute
412a283569 Revert "fix(vertex): skip harmful schema transforms for Gemini 2.0+ tool parameters"
This reverts commit a9c3095cc5.
2026-03-12 18:26:11 +05:30
Sameer Kankute
72c98489d1 Revert "fix(vertex): shallow copy parameters before mutating in _build_vertex_schema_for_gemini_2"
This reverts commit 08d81f5d7c.
2026-03-12 18:26:11 +05:30
Sameer Kankute
7aa5bd3ff3
Merge pull request #23429 from BerriAI/litellm_dev_03_10_2026_p1
Litellm dev 03 10 2026 p1
2026-03-12 18:04:48 +05:30
Sameer Kankute
7778af6c78 Add tests 2026-03-12 17:54:57 +05:30
Sameer Kankute
e2be1aabae Add webrtc in init 2026-03-12 16:37:36 +05:30
Sameer Kankute
eb64cd6c46 Add webrtc transformations and http handler 2026-03-12 16:37:23 +05:30
Sameer Kankute
f793d2043b Add webrtc routing 2026-03-12 16:36:59 +05:30
Sameer Kankute
edd4463a28 Add webrtc endpoints 2026-03-12 16:36:33 +05:30
Sameer Kankute
e37efc4218
Merge pull request #23431 from BerriAI/litellm_gemini_model_map_update
Fix model cost for gemini-embedding-2-preview
2026-03-12 12:43:49 +05:30
Sameer Kankute
116795f7b4 Fix input_cost_per_video_per_second pricing 2026-03-12 12:43:08 +05:30
Sameer Kankute
36ec80d90c Fix azure model router 2026-03-12 12:40:37 +05:30
joereyna
791e598ad5 fix: add break on match and guard empty normalized_route in mapped route checks
- Add break after match in user_api_key_auth.py loop to avoid unnecessary
  iterations over remaining mapped routes
- Guard against normalized_route being empty when route == root_path exactly,
  which would otherwise match every mapped route via startswith("")
- Apply same empty-string guard in pass_through_endpoints.py for consistency
2026-03-11 23:50:34 -07:00
Joe Reyna
2848d5607f
Merge pull request #23417 from joereyna/fix/vertex-batch-cost-model-name
fix: update stale model name in vertex AI batch cost calculation test
2026-03-11 23:47:11 -07:00
Sameer Kankute
5927345eab Add get, list and delete for vector store endpoints 2026-03-12 12:09:51 +05:30
Sameer Kankute
18a05f7a40 feat(vector-stores): add retrieve/list/update/delete handlers
- Add vector_store_retrieve/list/update/delete handlers in llm_http_handler
- Fix AsyncHTTPHandler.get() timeout arg (not supported)
- Fix update/delete URL (api_base already includes /vector_stores)
- Clean metadata for update to avoid UserAPIKeyAuth JSON serialization

Made-with: Cursor
2026-03-12 11:58:44 +05:30
Sameer Kankute
5b83aae715 feat(azure_ai): show actual model used in Azure Model Router response
- Azure Model Router transform_response: let parent extract actual model from raw response
- common_request_processing: skip model override for Azure Model Router requests
- proxy_server: skip streaming chunk model restamp for Azure Model Router
- Add _is_azure_model_router_request helper
- Add tests for non-streaming and streaming

Made-with: Cursor
2026-03-12 11:41:19 +05:30
Joe Reyna
c4aa15b4e2
Merge pull request #23418 from joereyna/fix/gemini-passthrough-stale-model-name
fix: update stale gemini-1.5-flash model name in passthrough logging handler test
2026-03-11 22:55:19 -07:00
Ishaan Jaff
19db79db17
fix(mcp): OAuth2 chat connect - tools fetch, auth, and status fixes (#23406)
* fix(mcp): OAuth2 chat connect - tools fetch, auth flow, and status fixes

- schema.prisma: add missing MCP table fields (approval_status, submitted_by, submitted_at, reviewed_at, review_notes) to prevent destructive migrations
- rest_endpoints.py: inject user OAuth token via extra_headers for OAuth2 servers so tools list is populated; add server name->UUID resolution so MCPConnectPicker name lookups work
- mcp_registry.json: fix Atlassian defaults (transport: http, url: .../v1/mcp)
- ChatPage.tsx: read mcpOauthReturn param to init sidebarView="apps" on OAuth return, clean up param after mount
- MCPAppsPanel.tsx: auto-add OAuth2 servers to selectedServers when credential detected; onConnect also enables server for chat; disconnect removes from selectedServers
- mcp_servers.tsx: sort servers by created_at DESC
- useUserMcpOAuthFlow.tsx: append mcpOauthReturn=apps to return URL so Apps panel is mounted on return

* address greptile review feedback (greploop iteration 1)

* fix(mcp): inject stored OAuth2 token when fetching tools via /responses API

When a user has connected an OAuth2 MCP server (e.g. Atlassian) and then
uses the /responses endpoint with that server, tool listing was failing
because the stored per-user OAuth token was never injected.

Two fixes:
1. server.py: add _get_user_oauth_extra_headers_from_db() helper; call it
   in _get_tools_from_mcp_servers when oauth2_headers is None for an OAuth2
   server, falling back to the user's stored token in LiteLLM_MCPUserCredentials
2. litellm_proxy_mcp_handler.py: also intercept MCP tools whose server_url
   matches */mcp/<server_name> (e.g. http://localhost:4000/mcp/atlassian_test)
   by rewriting them to litellm_proxy/mcp/<server_name> so they go through
   the internal handler (and get the OAuth token injected) instead of being
   forwarded to OpenAI raw where localhost is unreachable

* address greptile review feedback (greploop iteration 2)

* test(mcp): add unit test for OAuth2 token injection in _get_tools_from_mcp_servers

Verifies that when _get_tools_from_mcp_servers is called for an OAuth2 MCP
server without oauth2_headers in the request, the implementation:
- calls _prefetch_oauth_creds_for_user once (not per-server) to avoid N+1 queries
- passes the stored token as extra_headers={"Authorization": "Bearer ..."} to
  _get_tools_from_server so the upstream OAuth2 MCP server authenticates correctly

* address greptile review feedback (greploop iteration 3)

* address greptile review feedback (greploop iteration 4)

* address greptile review feedback (greploop iteration 5)

* redesign credentials table to use Tremor table layout matching Keys page

* fix: /server/oauth authorize 422 - make client_id optional, fall back to real DB server

* fix: mcp_token client_id optional, resolve from server record

* fix: look up real server by UUID (get_mcp_server_by_id) before falling back to name

* Update litellm/responses/mcp/litellm_proxy_mcp_handler.py

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* fix: address greptile feedback - client_id guards, dict spread, helper refactor, tests

- mcp_management_endpoints: raise 400 when resolved_client_id is empty in
  mcp_authorize and mcp_token instead of forwarding "" to upstream
- litellm_proxy_mcp_handler: use {**tool, "server_url": ...} spread instead
  of dict(tool) + mutation for shallow copy safety
- rest_endpoints: extract _oauth2_server_ids set comprehension to a named
  _get_oauth2_server_ids() helper for clarity; add Set to typing imports
- test_rest_endpoints: add tests for name→UUID resolution path,
  access-denied when resolved UUID not in allowed list, and OAuth2 user
  token injection for single-server requests; fix fake_get_tools signature
  to accept extra_headers kwarg

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-11 22:07:02 -07:00