kerry-berri
54e1b9e3de
Merge pull request #41338 from BerriAI/litellm_fix_gemini_model_version
...
fix(gemini): propagate the provider's modelVersion to the response model
2026-09-15 19:04:50 -07:00
Joshua Valluru
97211bc356
fix(mcp): authorize per-user OAuth credential writes
2026-09-15 19:00:47 -07:00
yucheng-berri
41eb2dbfeb
Merge pull request #41128 from BerriAI/litellm_llm_judge_pre_call
...
feat(guardrails): support pre_call and during_call modes for llm_as_a_judge
2026-09-15 18:58:21 -07:00
tin-berri
106365fbac
Merge pull request #41341 from BerriAI/litellm_autorouter_pricing_fields
...
fix(proxy): preserve Anthropic pricing modifiers in router savings
2026-09-15 18:56:15 -07:00
yassin
b085a3c151
fix(mcp): return fixed client message on sampling model access denial
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:51:29 +00:00
kerry
7ed20406d7
test(responses): narrow the ValueError assertion to satisfy PT011
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:47:45 +00:00
Yuneng Jiang
aa15e9f23f
test(e2e): reject expired cache entries before physical eviction
2026-09-15 18:45:43 -07:00
yassin
15f2e25e8a
refactor(proxy): replace configurable model access denied message with a fixed clean client message
...
Drop the model_access_denied_message setting, its {model} template, the DB
override entry and the Admin UI field. Model access denials now always return
the fixed client message while the allowlist diagnostic is logged at the final
HTTP, realtime and MCP boundaries
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:44:36 +00:00
Yassin Kortam
67cb0bc089
Merge pull request #41313 from BerriAI/litellm_model_activity_response_time
...
feat(ui): show average response time per model in usage model activity
2026-09-15 18:43:48 -07:00
kerry
091a38cce6
test(anthropic): import Final for the annotated locals
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:43:08 +00:00
kerry
c4c96180e3
fix(gemini): strip version suffix from modelVersion and keep it on blocked streams
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:42:36 +00:00
kerry
8352045f32
style(fireworks-ai): apply repository conventions to the cost component change
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:39:24 +00:00
Joshua Valluru
ece1de73b4
Merge remote-tracking branch 'origin/main' into litellm_fix_mcp_jwt_oauth_persistence
2026-09-15 18:36:02 -07:00
Devin AI
8d625d0400
fix(xai): keep 'instructions' on the xAI Responses API so system messages survive web_search bridging
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:35:13 +00:00
kerry
10aef224e7
style(anthropic): apply repository conventions to the missing-usage change
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:34:28 +00:00
kerry
d1aa37b0a8
merge main into litellm_fix_fireworks_cost_components
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:28:29 +00:00
Yuneng Jiang
45d5e6b833
fix(e2e): start cache CI service and count bypass calls
2026-09-15 18:26:44 -07:00
kerry-berri
171888b716
Merge pull request #41298 from BerriAI/litellm_drop_remaining_vendor_fact_pins
...
test: drop remaining tests that pin cost-map vendor facts
2026-09-15 18:25:14 -07:00
kerry
a6d2332f7a
test(responses): drive the usage-estimate failure path without patching litellm
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:24:35 +00:00
kerry
5a9fe56aff
fix(responses): count custom-tool and MCP argument deltas in the streamed usage fallback
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:24:05 +00:00
yucheng-berri
a9a654cb60
Merge pull request #38241 from BerriAI/litellm_agent365_mcp_guardrail
...
feat(guardrails): add Microsoft Agent 365 MCP tool-call guardrail
2026-09-15 18:21:46 -07:00
Yuneng Jiang
f214555068
fix(e2e): expect models filters to persist after reload
2026-09-15 18:21:43 -07:00
kerry
44a6d19889
test(gemini): drop review narration from the wrapper test docstring
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:14:37 +00:00
Yuneng Jiang
4587dbeae9
feat(e2e): cache exact provider responses for 24 hours
2026-09-15 18:14:18 -07:00
kerry
1484fd7600
fix(responses): keep the usage estimate best-effort when token counting raises
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:13:26 +00:00
yuneng-jiang
113a416619
Merge pull request #41319 from BerriAI/litellm_fix_ui_onboarding
...
fix(e2e): onboard dashboard users through invitations
2026-09-15 18:06:52 -07:00
yucheng
f66ffc387e
fix(guardrails): only honor the judge call-origin stamp on logging_only in llm_as_a_judge
...
On pre_call, during_call and post_call the hook data is the client request body, so a
client-supplied litellm_params.metadata.internal_call_origin must not skip enforcement.
Type the during_call helper's request payload as dict[str, object]
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:05:53 +00:00
kerry
801f6a92b4
test(gemini): assert the served modelVersion reaches the assembled stream through CustomStreamWrapper
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:05:53 +00:00
yucheng
dd4829398a
fix(guardrails): log the configured mode when logging_only is mixed with an enforcing llm_as_a_judge mode
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:05:53 +00:00
yucheng
10506ab904
fix(guardrails): judge the whole latest user turn, run every during_call guardrail, log combined modes as configured
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:05:53 +00:00
yucheng
1b8b17cc8a
fix(guardrails): judge only the latest request turn in pre_call and during_call llm_as_a_judge
...
The request-side prompt told the judge to focus on the most recent user turn but the text under review was every extracted request message joined together, so a multi-turn request with an off-topic earlier turn and an on-topic latest turn scored 50 and was blocked. Request-side judging now evaluates the last extracted request text (after the configured message scoping) and passes the full role-labelled conversation only as context. Response-side judging still evaluates all extracted response text
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:05:53 +00:00
yucheng
e9357d9a6f
fix(guardrails): stop logging_only llm_as_a_judge from judging its own judge calls
...
Judge sub-calls now carry the internal_call_origin metadata stamp and the
guardrail skips any logged call bearing it, so a logging_only judge no longer
recurses into an unbounded chain of judge requests
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:05:53 +00:00
yucheng
a658f20005
test(guardrails): grant premium_user for the tagged Mode case in llm_as_a_judge mode-shape test
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:05:53 +00:00
yucheng
4d1330ea0b
test(guardrails): drop callback-manager patch from llm_as_a_judge mode-shape test
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:05:53 +00:00
yucheng
28bd00a004
fix(guardrails): label llm_as_a_judge logging_only verdicts with their mode
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:05:53 +00:00
yucheng
b93f22265c
fix(guardrails): give the request-side judge role-labelled conversation context
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:05:53 +00:00
yucheng
6fccf00d93
fix(guardrails): keep list and tagged mode shapes for llm_as_a_judge
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:05:52 +00:00
yucheng
0b34800501
fix(guardrails): resolve llm_as_a_judge request-side log mode from event_hook lists, drop unused alias
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:05:52 +00:00
yucheng
77a6327675
feat(guardrails): support pre_call and during_call modes for llm_as_a_judge
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:05:52 +00:00
kerry
de9aa48cd6
fix(responses): count multimodal input and tool-call output in the streamed usage fallback
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 01:02:29 +00:00
Tin Chi Lo
5aa2adbacd
fix(proxy): preserve Anthropic pricing modifiers in router savings
2026-09-15 18:02:05 -07:00
mateo-berri
3c15f64fd4
fix(bedrock): make prompt caching work on the Nova InvokeModel route
...
Nova InvokeModel rejects the standalone cachePoint blocks the shared Converse transform emits, so each one is folded into the block it caches and tool_config injection points are dropped before the transform runs, since this route has no tool caching to credit. Usage reads Bedrock's Count-suffixed cache keys and adds cached tokens into prompt_tokens, streaming routes every wrapped InvokeModel event through the Converse chunk parser and tolerates the missing totalTokens, and the Nova 1 cost-map entries gain cache_read_input_token_cost at a quarter of the input rate
2026-09-15 18:01:21 -07:00
mateo-berri
3a8679d3d8
fix(proxy): never forward the LiteLLM virtual key to Anthropic on the /anthropic passthrough
...
The /anthropic/{endpoint} route forwarded every incoming header upstream, so
the header carrying the caller's LiteLLM virtual key (Authorization, x-api-key,
x-litellm-api-key, or the operator-configured key header) reached Anthropic and
was rejected there as an invalid credential, with or without a proxy-side
Anthropic key layered on top.
Share the Vertex credential-less header filter: drop the proxy-only credential
headers by name, drop the value that authenticated the caller (virtual key,
master key, or JWT) from Authorization / x-api-key, keep a caller's own
Anthropic credential, layer the proxy's Anthropic credential on top, and fail
with a clean 401 when neither the proxy nor the caller supplied one.
Resolves LIT-3550
2026-09-15 17:54:58 -07:00
mateo-berri
b4f9e319fc
fix(proxy): surface the upstream status code when a RAG query fails
2026-09-15 17:53:57 -07:00
yucheng
9bd3f7b885
Merge remote-tracking branch 'origin/main' into litellm_agent365_mcp_guardrail
2026-09-16 00:52:27 +00:00
mateo-berri
ba971d69d6
test(otel): type the providerless-call helpers and inject the logger provider
2026-09-15 17:51:28 -07:00
yucheng-berri
0b3e56448f
Merge pull request #41126 from BerriAI/litellm_custom_code_guardrail_identity
...
fix(guardrails): resolve caller identity from metadata buckets in custom code guardrail
2026-09-15 17:47:17 -07:00
yassin
14d239fc84
test(proxy): pin JWT scope denial message shape through auth exception conversion
...
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-16 00:46:59 +00:00
mateo-berri
8b0d28c219
Merge remote-tracking branch 'origin/main' into litellm_otel_gen_ai_system_none
...
# Conflicts:
# litellm/integrations/opentelemetry.py
# litellm/integrations/opentelemetry_utils/gen_ai_semconv.py
# tests/test_litellm/integrations/test_opentelemetry.py
2026-09-15 17:46:41 -07:00
Yuneng Jiang
388eef4fbb
fix(e2e): onboard dashboard fixtures through invitations
2026-09-15 17:44:18 -07:00