Commit graph

15506 commits

Author SHA1 Message Date
mateo-berri
5e2d98d49b chore: merge the branch's staging sync into the attribution fix 2026-09-02 17:45:20 -07:00
mateo-berri
100bc5dfe0 Merge remote-tracking branch 'origin/litellm_internal_staging' into litellm_internal_copy_36281 2026-09-02 17:42:18 -07:00
devin-ai-integration[bot]
c19d49d919
fix(responses): keep provider response headers in streaming logging callbacks (#38131)
* fix(responses): keep provider response headers in streaming logging callbacks

The responses streaming iterator captures the provider's HTTP response headers into
its own _hidden_params, but never puts them on the completed response, and the
model_validate(model_dump()) copy made for logging drops pydantic private attributes.
Success callbacks and StandardLoggingPayload.hidden_params.additional_headers therefore
saw an empty dict for streaming /v1/responses, so Azure's apim-request-id was unreadable
from the callback payload.

Restore the headers on the nested response of the logging copy, preferring any the
provider transform already set (the fake_stream path) and falling back to the ones the
iterator captured from the stream. Skipped when the copy fell back to the original event,
so a serialization failure never leaves logging-only state on the caller's object.

* fix: satisfy LIT002 mutable-collection gate in header restore

---------

Co-authored-by: Yucheng Zhu <yucheng@berri.ai>
2026-09-02 17:40:13 -07:00
devin-ai-integration[bot]
8cbaba8863
fix(mcp): gate the connect-time OBO pre-flight on the key's allowed servers (#39447)
The pre-flight token exchange resolved its target from the requested path, so a key not entitled to that server still drove an outbound exchange at the IdP and populated the credential cache before the later access check denied it. Resolve the target through the same allowed-server set the rest of the route uses and skip the exchange when the requested server is not in it.

Co-authored-by: yassin <yassin@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-02 17:39:36 -07:00
devin-ai-integration[bot]
8e3566d2f7
fix(guardrails): forward mode and streaming params to crowdstrike_aidr handler (#39317)
* fix(guardrails): forward mode and streaming params to crowdstrike_aidr handler

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test(guardrails): drop stream_chunk_builder patch from crowdstrike cadence test

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test(guardrails): type test params and cover unsupported crowdstrike mode rejection

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-02 17:38:43 -07:00
mateo-berri
0d6948241e fix(mcp): attribute the agent veto for differently cased server names 2026-09-02 17:35:51 -07:00
mateo-berri
0fb83995dd Merge branch 'litellm_internal_staging' of https://github.com/BerriAI/litellm into litellm_fix_guardrail_put_inmemory_sync
# Conflicts:
#	litellm/proxy/guardrails/guardrail_registry.py
2026-09-02 17:35:06 -07:00
Yassin Kortam
7978b9f721
fix(proxy): stop leaking internal exception details to clients (#39380)
* fix(proxy): stop leaking internal exception details to clients

Public error responses could disclose internal details in two places.
A proxy-layer exception with no recognized provider status code (a bug
in a custom callback, a hook, or litellm's own code) forwarded its raw
str() text verbatim on a 5xx, including any embedded credential,
filesystem path, or internal hostname, or a full stack trace; the
same client-facing message now runs through a redaction layer built
on top of the credential redaction that already runs on log output,
so it also drops an embedded traceback and scrubs path-shaped and
hostname-shaped substrings. It intentionally never runs on server-side
logs, which must keep full detail for debugging.

exception_type(), litellm's core exception mapper, is shared by direct
SDK callers (litellm.completion()) and the proxy, and it deliberately
embeds a traceback into an unmapped exception's message as a debugging
aid for library users; a first pass at this fix stripped that
traceback inside exception_type() itself and broke that convention
(caught by tests asserting on the traceback frame). The traceback stays
in exception_type()'s own output; only the proxy's client-facing
response boundary (and the streaming response generator, which never
needs to embed one at all) strips it.

Full generic-message replacement for the unclassified-exception case
was tried first and reverted too: several routes deliberately raise a
bare exception as an informative, secret-free validation message (e.g.
the OCR endpoint's rejection of provider-native file IDs), and
replacing those wholesale broke that convention; targeted redaction
leaves them untouched.

Also stops the default uvicorn-based proxy from sending a Server
response header.

Resolves LIT-6747

* refactor(proxy): drop the unrelated error-message constant and trim redaction comments

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-02 17:32:00 -07:00
devin-ai-integration[bot]
5ad330f620
fix(http_handler): honor HTTP(S)_PROXY / NO_PROXY when force_ipv4 uses the httpx transport (#39443)
* fix(http_handler): honor HTTP(S)_PROXY / NO_PROXY when force_ipv4 uses the httpx transport

Passing an explicit transport to httpx.AsyncClient / httpx.Client disables its
automatic environment proxy mounts, so force_ipv4 on the httpx path sent every
LLM request direct and silently bypassed HTTPS_PROXY. Mount the same env-derived
proxy transports next to the IPv4-pinned direct transport in AsyncHTTPHandler,
HTTPHandler and the OpenAI async client factory.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(http_handler): carry the client's TLS verify and cert settings onto env proxy mounts

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: yassin <yassin@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-02 17:30:46 -07:00
yassin
8442fb2784 chore: merge litellm_internal_staging and resolve type-discipline-budget conflict
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-03 00:30:35 +00:00
Yuneng Jiang
1af9c229fa
ci(e2e): leave the managed-files opt-in file to its own lane instead of failing on an empty collection 2026-09-02 17:29:56 -07:00
Mateo Wang
e1a7af7e58
Merge pull request #39442 from BerriAI/litellm_e2e_ui_password_policy
test(e2e/ui): give the seeded users passwords that pass the default password policy
2026-09-02 17:29:54 -07:00
yassin
61e2e3e646 Merge remote-tracking branch 'origin/litellm_internal_staging' into litellm_fix_agent_mcp_grants
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-03 00:25:04 +00:00
yassin
6d5a3ab42c merge: litellm_internal_staging into litellm_headroom_ccr_streaming_responses
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-03 00:24:17 +00:00
Emerson Gomes
c784e604ac
test(vertex-ai): drop Lyria auth patches from transform tests
Subclass the Lyria transformer to stub token minting, and mark the remaining litellm.speech patches so TQ008 stays within budget.
2026-09-02 19:24:07 -05:00
Emerson Gomes
e18df8f09e
fix(vertex-ai): fall back to bundled Lyria costs
Prefer runtime model_cost when both numeric fields are present, then bundled Lyria metadata so stale maps still bill 0.002 * 30
2026-09-02 19:24:07 -05:00
Emerson Gomes
abb655daa8
fix(vertex-ai): encode Lyria predict URL path segments
Percent-encode project, location, and model as single path segments. Lyria 3 speech builds the interactions URL through staging's minter with the already resolved project
2026-09-02 19:24:07 -05:00
yujonglee
1e6a4d98a4
Merge pull request #38936 from BerriAI/litellm_fix_vector_store_request_embedding_resolution
fix(vector-store): resolve embedding credentials per request
2026-09-02 17:22:56 -07:00
Emerson Gomes
e9e2fbb438
style(vertex-ai): modernize Lyria tests 2026-09-02 19:22:42 -05:00
Emerson Gomes
f18cb0cdb4
fix(vertex): make Lyria routing and billing data-driven 2026-09-02 19:22:42 -05:00
Emerson Gomes
b96844dd0c
feat(vertex): expose Lyria through audio speech 2026-09-02 19:22:15 -05:00
Emerson Gomes
e00fe023a9
test(models): validate Lyria audio metadata 2026-09-02 19:19:53 -05:00
Emerson Gomes
514e9a1ee6
fix(vertex): address lyria review feedback 2026-09-02 19:19:53 -05:00
Emerson Gomes
3ead9d1688
feat(vertex): add Lyria model support 2026-09-02 19:19:52 -05:00
Mateo Wang
708c396b90
Merge pull request #39366 from BerriAI/litellm_responses_guardrail_namespace_tools
fix(responses): keep namespace tools intact when a guardrail returns them unchanged
2026-09-02 17:19:21 -07:00
mateo-berri
c4ca4268a2 Merge branch 'litellm_internal_staging' of https://github.com/BerriAI/litellm into litellm_fix_mcp_test_connection_oauth_bearer
# Conflicts:
#	litellm/proxy/_experimental/mcp_server/rest_endpoints.py
2026-09-02 17:16:33 -07:00
Yuneng Jiang
1c4e46f17e
ci(e2e): reload the stack config every 7s so the harness propagation budget holds, and only mask credential-named values 2026-09-02 17:15:36 -07:00
mateo-berri
f7ef2899ec chore: merge litellm_internal_staging into litellm_fix_agent_mcp_grants 2026-09-02 17:09:01 -07:00
mateo-berri
62badd58fb merge: origin/litellm_internal_staging into litellm_lite_login_prefill_code 2026-09-02 17:06:35 -07:00
mateo-berri
2842e90836 Merge remote-tracking branch 'origin/litellm_internal_staging' into litellm_responses_guardrail_namespace_tools
# Conflicts:
#	type-discipline-budget.json
2026-09-02 17:06:33 -07:00
Mateo Wang
8c58b93572
Merge pull request #39239 from BerriAI/litellm_lit_6342_claude_subagent_router
fix(router): route Claude Code subagents through session router
2026-09-02 17:05:55 -07:00
mateo-berri
88c34eed56 Merge remote-tracking branch 'origin/litellm_internal_staging' into litellm_bedrock_bearer_skip_sigv4_chain 2026-09-02 17:02:28 -07:00
mateo-berri
e641864e6f test(e2e/ui): give the seeded users passwords that pass the default password policy
The default password policy from #39381 (12+ chars with upper, lower, number, and special) makes globalSetup's POST /user/update with password "test" fail with a 400, so every role login in the UI e2e suite has been failing since that merge. Seed the roles, the noteam@test.local login, and the second-admin spec with policy-compliant passwords and update the scrypt hash in seed.sql to match.
2026-09-02 16:58:53 -07:00
devin-ai-integration[bot]
b0fe71010b
fix(ollama_chat): stamp finish_reason tool_calls when tool calls streamed before the done chunk (#39010)
* fix(ollama_chat): stamp finish_reason tool_calls when tool calls streamed before the done chunk

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(ollama_chat): trim finish_reason override comment

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: mubashir1osmani <mubashir.osmani777@gmail.com>
2026-09-02 16:56:35 -07:00
mateo-berri
293fa26e6c merge: origin/litellm_internal_staging into litellm_lite_login_prefill_code 2026-09-02 16:53:06 -07:00
mateo-berri
1df402b80d fix(vector-store): carry request metadata into the Router executor built from the router kwarg 2026-09-02 16:53:05 -07:00
tin-berri
632898b2a6
feat(router): add a hybrid classifier that defers near tier boundaries (#39403) 2026-09-02 23:51:43 +00:00
Devin AI
306427f5e4 test(cli): mock the HTTP boundary with responses instead of patching HTTPClient
Co-Authored-By: Ishaan Jaffer <155045088+ishaan-berri@users.noreply.github.com>
2026-09-02 23:50:11 +00:00
Mateo Wang
95b511bc19
Merge pull request #39362 from BerriAI/litellm_lit5443_mantle_chat_aws_creds
fix(bedrock_mantle): carry per-request AWS credentials into chat completions SigV4 signing
2026-09-02 16:48:16 -07:00
Mateo Wang
4ffe536a69
Merge pull request #39355 from BerriAI/litellm_fix_messages_passthrough_cache_control_ttl
fix(messages): drop cache_control ttl on non-Anthropic /v1/messages passthrough
2026-09-02 16:47:26 -07:00
Mateo Wang
cd9ed8bad5
Merge pull request #39363 from BerriAI/litellm_hosted_vllm_rerank_truncate_params
fix(hosted_vllm): forward truncate_prompt_tokens on rerank requests
2026-09-02 16:47:20 -07:00
Mateo Wang
c1a26f36ee
Merge pull request #38791 from BerriAI/litellm_fix_mcp_oauth_tool_fetch_auth
fix(mcp): cap tools preview and test-connection at the listing timeout and name the unreachable upstream
2026-09-02 16:47:10 -07:00
Mateo Wang
c9562e1dd9
Merge pull request #39091 from BerriAI/litellm_techdebt_20260901
chore(techdebt): clear fresh debt from the 2026-08-31 and 2026-09-01 windows
2026-09-02 16:46:52 -07:00
Mateo Wang
ff71808671
Merge pull request #35967 from BerriAI/litellm_bedrock_strip_client_metadata
fix(bedrock): strip client_metadata from converse additionalModelRequestFields
2026-09-02 16:46:48 -07:00
Mateo Wang
4286be8d5b
Merge pull request #39364 from BerriAI/litellm_fix_bedrock_mantle_messages_env_api_base
fix(bedrock): honor BEDROCK_MANTLE_API_BASE on bedrock/mantle messages and chat URLs
2026-09-02 16:46:44 -07:00
mateo-berri
95da998779 fix(xai): merge litellm_internal_staging and keep the stream builder from short-circuiting xAI's reported cost 2026-09-02 16:46:35 -07:00
mateo-berri
3f9e44f839 Merge remote-tracking branch 'origin/litellm_internal_staging' into litellm_responses_guardrail_namespace_tools
# Conflicts:
#	type-discipline-budget.json
2026-09-02 16:45:49 -07:00
Yassin Kortam
c16c2cd6ee
fix(proxy): mark session/SSO/SAML cookies Secure behind a TLS-terminating reverse proxy (#39391)
* fix(proxy): mark session/SSO/SAML cookies Secure behind a TLS-terminating reverse proxy

litellm only sees a plain-HTTP hop when TLS terminates at a reverse proxy,
so cookie Secure attributes previously derived from (or defaulted without
regard to) the literal request scheme could be dropped in production. The
token session cookie set by every login path never carried Secure/HttpOnly/
SameSite at all.

Adds IPAddressUtils.is_request_https, a single trust-aware resolver used by
every cookie-setting call site: PROXY_BASE_URL, then X-Forwarded-Proto only
from a configured trusted proxy (general_settings.use_x_forwarded_for +
mcp_trusted_proxy_ranges), then the literal scheme. An unconfigured or
untrusted caller cannot spoof the header to force Secure on.

Resolves LIT-6748

* fix(proxy): make the shared session-cookie helper public, type new test helpers

set_session_token_cookie is imported across modules (ui_sso.py ->
proxy_server.py), so the leading underscore was misleading and breached
basedpyright's reportPrivateUsage budget with zero headroom. Also adds
missing parameter/return type annotations to the new test helper functions
per repo convention.
2026-09-02 16:42:29 -07:00
Devin AI
e8745e9eb3 feat(cli): add lite debug claude session report and /debug-lite slash command
Co-Authored-By: Ishaan Jaffer <155045088+ishaan-berri@users.noreply.github.com>
2026-09-02 23:39:34 +00:00
mateo-berri
4ebac321a1 merge: origin/litellm_internal_staging into litellm_lite_login_prefill_code 2026-09-02 16:38:30 -07:00