Commit graph

722 commits

Author SHA1 Message Date
Sameer Kankute
480fa13b1d
Merge pull request #19343 from BerriAI/litellm_anthropic_header_fix_19_jan
Fix: anthropic-beta is getting overriden and set to anthropic-beta
2026-01-19 18:24:46 +05:30
Sameer Kankute
d7b103158a Fix: anthropic-beta is getting overriden and set to anthropic-beta': 'structured-outputs-2025-11-13', 2026-01-19 16:43:27 +05:30
Sameer Kankute
480cb9c0d8 Fix: upload pdfs for file endpoint 2026-01-19 11:58:32 +05:30
YutaSaito
eec4ed640b
Revert "Stabilise mock tests" 2026-01-17 06:26:18 +09:00
YutaSaito
66d67ae356
Revert "Add sanititzation for anthropic messages" 2026-01-17 06:01:12 +09:00
Anand Kamble
2c75194b49
fix(vertex_ai): Vertex AI 400 Error: Model used by GenerateContent request (models/gemini-3-*) and CachedContent (models/gemini-3-*) has to be the same (#19193)
* fix(vertex_ai): include model in context cache key generation

* test(vertex_ai): update context caching tests to verify model in cache key
2026-01-17 00:56:15 +05:30
Sameer Kankute
fb3b4e6b33
Merge pull request #19196 from BerriAI/litellm_sanitise_anthropic_mesages
Add sanititzation for anthropic messages
2026-01-16 17:48:55 +05:30
Sameer Kankute
43893cb81a
Merge pull request #19191 from BerriAI/litellm_fix_stream_timeout
Fix: [Bug]: stream_timeout:The function of this parameter has been changed
2026-01-16 17:43:43 +05:30
Sameer Kankute
ca06bb4e3a
Merge pull request #19201 from BerriAI/litellm_fix_vertex_ai_structured_output2
Fix: vertex ai doesn't support structured output
2026-01-16 17:09:03 +05:30
Sameer Kankute
101230e538
Merge pull request #19213 from BerriAI/main
merge main in sanitisation
2026-01-16 17:04:01 +05:30
Sameer Kankute
f562186c75
Merge pull request #19212 from BerriAI/main
merge main in timeout PR
2026-01-16 17:02:22 +05:30
Sameer Kankute
b0c6a1b308
Merge pull request #19203 from BerriAI/main
merge main
2026-01-16 15:16:29 +05:30
Sameer Kankute
ac5a4df724 Fix: vertex ai doesn't support structured output 2026-01-16 14:54:31 +05:30
Sameer Kankute
f1bde3c549 Add sanititzation for anthropic messages 2026-01-16 12:47:56 +05:30
Sameer Kankute
c0e5637eae Fix: [Bug]: stream_timeout:The function of this parameter has been changed 2026-01-16 11:40:49 +05:30
Yuta Saito
1c38847b17 tests: skip Azure SDK init check for acreate_skill 2026-01-16 12:03:38 +09:00
Sameer Kankute
83e33944ef Fix: mock test tests 2026-01-15 22:02:42 +05:30
Sameer Kankute
4bdda9cc28 Fix: tests/test_litellm/proxy/test_proxy_server.py::test_embedding_input_array_of_tokens 2026-01-15 19:46:35 +05:30
Sameer Kankute
f28d951202 Fix: tests/test_litellm/proxy/test_litellm_pre_call_utils.py::test_embedding_header_forwarding_with_model_group 2026-01-15 19:41:16 +05:30
Sameer Kankute
83cdfd886a
Merge pull request #19059 from BerriAI/litellm_openrouter_image_gen
Add openrouter support for image/generation endpoints
2026-01-15 15:48:00 +05:30
Ishaan Jaff
747829dadb
[Fix] Claude Code + Bedrock Converse Usage - ensure budget tokens are passed to converse api correctly (#19107)
* test_bedrock_converse_budget_tokens_preserved

* test_openai_model_with_thinking_converts_to_reasoning_effort

* fix translate_anthropic_thinking_to_reasoning_effort

* test_bedrock_converse_budget_tokens_preserved

* test_anthropic_messages_bedrock_converse_with_thinking
2026-01-14 12:02:27 -08:00
Rayan Pal
f880ea537f
fix(vertex): add type object to tool schemas missing type field (#19103)
Tools with no parameters (like EnterPlanMode from Anthropic Agents SDK)
send schemas with only $schema and no type field. Gemini rejects these
with "functionDeclaration parameters schema should be of type OBJECT".

Adds type: object when schema has no type and no anyOf/oneOf/allOf.
2026-01-15 00:43:35 +05:30
Rayan Pal
d92a0168cc
fix: keep type field in Gemini schema when properties is empty (#18979) 2026-01-14 22:58:05 +05:30
Kris Xia
1391e41916
fix(vertex_ai): improve passthrough endpoint url parsing and construction (#17402) (#17526)
* fix(vertex_ai): improve passthrough endpoint url parsing and construction (#17402)

* test(proxy): add test for vertex passthrough load balancing

Add a test that verifies _base_vertex_proxy_route uses
get_available_deployment for proper load balancing instead of
get_model_list. This ensures the correct deployment is selected
from the router and vertex credentials are properly fetched.

Also refactor the implementation to:
- Use get_available_deployment instead of get_model_list
- Add error handling for deployment retrieval
- Improve code structure with try-except block

* feat(proxy): add pass-through deployment filtering methods

Add dedicated methods to filter and select deployments for pass-through endpoints:
- Implement get_available_deployment_for_pass_through() to ensure only deployments with use_in_pass_through=True are considered
- Implement async_get_available_deployment_for_pass_through() for async operations
- Add _filter_pass_through_deployments() helper method to filter by use_in_pass_through flag
- Update vertex pass-through route to use the new dedicated method

This ensures pass-through endpoints respect the use_in_pass_through configuration and apply proper load balancing strategy only to configured deployments.

Add comprehensive tests to verify filtering and load balancing behavior.
2026-01-14 22:17:43 +05:30
Sameer Kankute
cd2d381dd4
Merge pull request #19042 from BerriAI/litellm_staging_01_13_2026
Staging 01/13/2026
2026-01-14 21:29:09 +05:30
Sameer Kankute
b4a48f7996
Revert "feat(gemini): add opt-in support for responseJsonSchema (#18147)"
This reverts commit 4e417f9ef1.
2026-01-14 17:06:13 +05:30
Sameer Kankute
6991342dc4 Fix: [Bug]: Gemini Image Generation Returns Incorrect prompt_tokens_details 2026-01-14 13:47:46 +05:30
Sameer Kankute
2b13c9aba2 Add tests for openrouter 2026-01-14 10:17:01 +05:30
Cesar Garcia
4e417f9ef1
feat(gemini): add opt-in support for responseJsonSchema (#18147)
* feat(gemini): add opt-in support for responseJsonSchema

Add support for Gemini's native responseJsonSchema parameter which uses
standard JSON Schema format instead of OpenAPI-style responseSchema.

Benefits of responseJsonSchema (Gemini 2.0+ only):
- Standard JSON Schema format (lowercase types)
- Supports additionalProperties for stricter validation
- Better compatibility with Pydantic's model_json_schema()
- No propertyOrdering required

Usage:
```python
response_format={
    "type": "json_schema",
    "json_schema": {"schema": {...}},
    "use_json_schema": True  # opt-in
}
```

This is backwards compatible - existing code continues to use
responseSchema by default.

Closes #16340

* docs: add documentation for use_json_schema parameter

Document the new use_json_schema option for Gemini 2.0+ models
in the JSON Mode documentation.

* refactor(gemini): use responseJsonSchema by default for Gemini 2.0+

Remove opt-in flag `use_json_schema` and automatically detect model version:
- Gemini 2.0+: uses responseJsonSchema (standard JSON Schema, supports additionalProperties)
- Gemini 1.5: uses responseSchema (OpenAPI format, legacy)

This follows LiteLLM's philosophy of abstracting provider differences -
users write the same code regardless of model version.
2026-01-14 04:11:41 +05:30
Ryan Malloy
f76938af5e
fix(ollama): set finish_reason to tool_calls and remove broken capability check (#18924)
* Update CLAUDE.md with qwen3 tool_calls bug fix instructions (#18922)

* fix(ollama): set finish_reason to "tool_calls" when tool_calls present

When qwen3 models return tool_calls through Ollama, the finish_reason
was incorrectly left as "stop" instead of being set to "tool_calls".
This caused clients to miss the tool_calls in the response.

Added _get_finish_reason helper method following OpenAI provider's
pattern, and fixed both streaming and non-streaming response paths.

Fixes: https://github.com/BerriAI/litellm/issues/18922

* fix(ollama): pass tools directly without model capability check

The previous code tried to check model capability via get_model_info()
which made network calls to localhost:11434. When Ollama is remote,
this fails and falls back to JSON format, breaking tool calling.

Ollama 0.4+ supports native tool calling - let Ollama handle
model capability detection instead of LiteLLM.

Fixes #18922

* fix(ollama): transform tool_calls response to OpenAI format

Ollama returns tool_calls with arguments as dict, but OpenAI format
requires arguments to be a JSON string. Also ensures 'type': 'function'
field is present.

Completes the fix for #18922

* fix(ollama): set finish_reason to "tool_calls" when tool_calls present

Fixes #18922

Two issues addressed:

1. Remove broken model capability check
   - get_model_info() fails when Ollama runs on remote server
   - Broken fallback triggered JSON prompt injection
   - Now passes tools directly - Ollama 0.4+ handles detection

2. Set finish_reason correctly
   - Was hardcoded to "stop" even with tool_calls present
   - Clients use this to know how to process the response
   - Now returns "tool_calls" when tool_calls are in response

Both streaming and non-streaming responses are fixed.

Tests:
- All 14 existing Ollama tests pass
- Added 3 focused tests for the fixes
2026-01-14 03:52:26 +05:30
Mateusz Szewczyk
72dc65fbb4
chore: allow passing scope id for watsonx inferencing (#18959)
* chore: allow inference with space

* make lint and make format
2026-01-14 03:47:20 +05:30
Sameer Kankute
c2fcc6aa92
Merge pull request #18945 from BerriAI/litellm_add_anthropic_tool_call_results
Add: missing anthropic tool results in response
2026-01-12 22:11:51 +05:30
Sameer Kankute
01e690307e Fix: litellm/tests/test_litellm/llms/anthropic/chat/test_anthropic_chat_transformation.py 2026-01-12 22:02:18 +05:30
Sameer Kankute
9a27a52424
Merge pull request #18956 from BerriAI/litellm_staging_01_12_2026
Litellm staging 01 12 2026
2026-01-12 18:27:57 +05:30
Sameer Kankute
98f1a0d0c4
Merge pull request #18946 from BerriAI/litellm_add_max_completion_tokens_with_thinking_budget
Fix: respect max_completion_tokens in thinking feat
2026-01-12 18:13:23 +05:30
Sameer Kankute
ec3e30a221
Merge branch 'main' into litellm_add_anthropic_tool_call_results 2026-01-12 18:13:06 +05:30
Sameer Kankute
db32ac217a
Merge pull request #18944 from BerriAI/litellm_fix_bedrock_passthrough_model_id
Fix : model id encoding for bedrock passthrough
2026-01-12 18:08:53 +05:30
Sameer Kankute
27b4c68662
Merge pull request #18942 from BerriAI/litellm_add_ssl_verify_bedrock2
[Bug]: Add Custom CA certificates to boto3 clients
2026-01-12 18:06:32 +05:30
Cesar Garcia
a8282839e8
fix(text_completion): support token IDs (list of integers) as prompt (#18011)
* fix(text_completion): support token IDs (list of integers) as prompt

Add support for passing token IDs (list of integers) to the text_completion
endpoint for OpenAI-compatible providers (openai, azure, vllm, etc.).

Fixes #17118

* test(text_completion): replace live test with mock test for token IDs

Move token IDs test from local_testing to test_litellm with mocks
per PR review feedback.
2026-01-12 17:33:24 +05:30
Cesar Garcia
c81cd081e9
feat(bedrock): add OpenAI-compatible service_tier parameter translation (#18091)
* feat(bedrock): add OpenAI-compatible service_tier parameter translation

Translates OpenAI's service_tier parameter (string) to Bedrock's
serviceTier format (object with type field).

* docs(bedrock): add OpenAI-compatible service_tier parameter documentation

Document the automatic translation from OpenAI-style service_tier
parameter to Bedrock's native serviceTier format.

* feat(bedrock): add service_tier to response when present

According to OpenAI's API documentation, when service_tier is sent in the
request, it should be returned in the response. This commit implements
this behavior for Bedrock Converse API to maintain compatibility with
OpenAI's API.

Changes:
- Added serviceTier field to ConverseResponseBlock type definition
- Moved ServiceTierBlock definition before ConverseResponseBlock to fix
  type reference order
- Added response transformation to map Bedrock serviceTier (object) to
  OpenAI service_tier (string format)
- Added 4 new tests for response transformation with service_tier

The service_tier is only added to the response when present in Bedrock's
response, maintaining backward compatibility.
2026-01-12 17:28:49 +05:30
Cesar Garcia
9a8e781cb9
fix(anthropic): preserve web_fetch_tool_result in multi-turn conversations (#18142)
Fixes #18137

Similar to the fix for web_search_tool_result (#17746, #17798), this PR
preserves web_fetch_tool_result blocks in multi-turn conversations.

Changes:
- Add handling for web_fetch_tool_result in transformation.py (non-streaming)
- Add capture of web_fetch_tool_result in handler.py (streaming)
- Fix streaming tool arguments bug where empty input {} was prepended to
  actual arguments by using empty string instead of str({})
- Add unit tests for web_fetch_tool_result handling
2026-01-12 17:18:33 +05:30
Cesar Garcia
f7912990b7
fix(gemini): add presence_penalty support for Google AI Studio (#18154)
Fixes #14753

Co-authored-by: Krish Dholakia <krrishdholakia@gmail.com>
2026-01-12 17:12:19 +05:30
Cesar Garcia
932f06104d
fix: include IMAGE token count in cost calculation for Gemini models (#18876)
* fix: include IMAGE token count as separate usage count and pricing

* fix: remove duplicate TypedDict key and variable definitions

- Remove duplicate input_cost_per_image_token in ModelInfoBase TypedDict
- Remove duplicate image_tokens variable declaration in _calculate_usage()

Fixes MyPy errors:
- types/utils.py:146: Duplicate TypedDict key
- vertex_and_google_ai_studio_gemini.py:1541: Name already defined

---------

Co-authored-by: Thomas Rehn <271119+tremlin@users.noreply.github.com>
2026-01-12 17:03:42 +05:30
Igal Boxerman
6bb63525db
fix(guardrails): fix SerializationIterator error and pass tools to guardrail (#18932)
* fix(generic-guardrail-api): fix SerializationIterator error on multimodal requests

When sending multimodal messages (with images) through the Generic Guardrail API,
the `model_dump()` call fails with "Object of type SerializationIterator is not
JSON serializable" error.

Root cause: The `ChatCompletionAssistantMessage` type defines `content` as an
`Iterable` (not just `List`), and Pydantic's `model_dump()` creates a
`SerializationIterator` for iterables which is not JSON serializable.

Fix: Use `model_dump(mode="json")` which properly converts all iterables to
lists and ensures all complex objects are JSON serializable.

* fix(guardrails): pass tools (function definitions) to guardrail inputs

The unified guardrail handler was not passing the `tools` parameter
(function definitions) from the request to the guardrail inputs.
This meant guardrails could not inspect or validate tool definitions.

Added extraction of `data.get("tools")` and inclusion in the
GenericGuardrailAPIInputs passed to `apply_guardrail()`.

* test(guardrails): add tests for tools passed to guardrail

Added tests verifying that tools (function definitions) are correctly
passed to guardrails in the unified guardrail handler:
- test_tools_passed_to_guardrail
- test_multiple_tools_passed_to_guardrail
- test_no_tools_in_request
- test_tools_and_tool_calls_both_passed
2026-01-12 16:27:54 +05:30
Sameer Kankute
508e4da40e Fix: respect max_completion_tokens in thinking feat 2026-01-12 12:44:46 +05:30
Sameer Kankute
c96a7e80dd
Merge pull request #18898 from yogeshwaran10/litellm_fix_gemini_token_usage_details
fix: missing completion_tokens_details in gemini 3 flash when reasoning_effort is not used (#18896)
2026-01-12 12:33:40 +05:30
Sameer Kankute
3c1ffda117 Add: missing anthropic tool results 2026-01-12 11:44:07 +05:30
yogeshwaran10
0e960df8f4 refactor(tests): move gemini token usage tests to test_vertex_and_google_ai_studio_gemini.py 2026-01-12 11:20:13 +05:30
Sameer Kankute
dabb459d2b Fix : model id encoding for bedrock passthrough 2026-01-12 10:57:17 +05:30
Sameer Kankute
aa97a34a83 Fix tests/test_litellm/llms/bedrock/test_base_aws_llm.py 2026-01-12 09:05:28 +05:30