Sameer Kankute
75c72c51e2
fix(vertex_ai): omit function_call id on Vertex Gemini 3.5+ tool turns ( #28324 )
...
* fix(vertex_ai): omit function_call id on Vertex Gemini 3.5+ tool turns
Vertex AI rejects `id` on function_call/function_response parts; only Google AI Studio accepts it for Gemini 3.5+ strict tool matching.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Update litellm/llms/vertex_ai/gemini/vertex_and_google_ai_studio_gemini.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* fix(vertex_ai): forward custom_llm_provider in context caching
Pass custom_llm_provider through to _gemini_convert_messages_with_history
in the context caching path so Gemini 3.5+ tool-call `id` forwarding
behaves consistently between cached and non-cached completions on Google
AI Studio.
Co-authored-by: Claude <claude@anthropic.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Claude <claude@anthropic.com>
(cherry picked from commit fecf212d70 )
2026-05-20 18:50:59 -07:00
Sameer Kankute
cbf9ffec30
Day 0 support : Gemini 3.5 Flash ( #28268 )
...
* Add day 0 support for gemini 3.5 flash
* Fix pricing
* Fix greptile review
* Fix failing test
* Fix tests
* Fix: revert tool removing logic
* fix greptile and test
---------
Co-authored-by: mateo-berri <277851410+mateo-berri@users.noreply.github.com>
(cherry picked from commit 3c3d131f01 )
2026-05-20 18:49:58 -07:00
Krrish Dholakia
0deffd3618
chore: reject bare str at file-input sinks to prevent local-file read ( #27762 )
...
* chore: reject bare str at file-input sinks to prevent local-file read (#27667 )
Squash-merged by litellm-agent from stuxf's PR.
* fix: use os.PathLike in ocr sink and check truthy reasoningSummary for bridge
- ocr/main.py: widen Path check to os.PathLike for consistency with other sinks
- main.py: bridge condition checks truthiness of reasoning_summary, not just None
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* fix: remove unused pathlib.Path import in ocr/main.py
---------
Co-authored-by: yuneng-jiang <yuneng@berri.ai>
Co-authored-by: ryan-crabbe-berri <ryan@berri.ai>
Co-authored-by: stuxf <70670632+stuxf@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-05-12 16:40:07 -07:00
yuneng-jiang
07807f760f
Merge pull request #27019 from stuxf/codex/cloud-storage-file-guard
...
fix(files): constrain cloud storage file paths (VERIA-45, VERIA-59)
2026-05-04 14:59:47 -07:00
Mateo Wang
196dbb4b43
Merge pull request #27074 from BerriAI/litellm_fix_reasoning_effort_followup-0f97
...
fix(anthropic,bedrock,vertex): forward output_config.effort + 400 on garbage reasoning_effort
2026-05-04 14:59:27 -07:00
Cursor Agent
2cb3f0f027
refactor: remove unnecessary comments from #27074
...
Strip out the explanatory and historical comments that don't carry
business-logic justification. Comments that simply narrate what code
does — or that explain prior behavior, what was changed, or which PR
introduced a fix — are removed. Docstrings are reduced to a one-line
summary where the long form repeated information already evident from
the code or test data.
No code-behavior changes. All 643 affected unit tests still pass.
Co-authored-by: Mateo Wang <mateo-berri@users.noreply.github.com>
2026-05-04 19:34:56 +00:00
user
7c94149aeb
Merge remote-tracking branch 'origin/litellm_internal_staging' into codex/cloud-storage-file-guard
...
# Conflicts:
# litellm/llms/vertex_ai/files/handler.py
# litellm/llms/vertex_ai/files/transformation.py
2026-05-04 11:25:41 -07:00
Cursor Agent
a6c673e7b9
fix(anthropic,bedrock,vertex): forward output_config.effort + 400 on garbage reasoning_effort
...
Follow-up bugs surfaced by the QA sweep on PR #27039
(https://github.com/BerriAI/litellm/pull/27039#issuecomment-4363363610 ).
1. Stop stripping output_config.effort on Bedrock + Vertex adaptive routes.
- Vertex AI Claude 4.6/4.7 accepts output_config.effort on rawPredict
(verified end-to-end against us-east5 / global). The strip helper now
no-ops for effort.
- Bedrock Converse routes output_config into additionalModelRequestFields
for anthropic base models so the requested adaptive tier (low/medium/
high/xhigh/max) actually reaches the wire instead of all collapsing to
identical thinking.
- Bedrock Invoke chat transformation (AmazonAnthropicClaudeConfig) stops
popping output_config from the post-AnthropicConfig request body.
- Bedrock Invoke /v1/messages allowlist (BedrockInvokeAnthropicMessagesRequest)
now lists output_config so the runtime allowlist filter forwards it.
2. Validate effort across Bedrock Converse so 'disabled' / 'invalid' / '' /
unsupported tiers (xhigh/max on Sonnet 4.6 or budget-mode 4.5 models)
surface as a clean 400 BadRequestError instead of 500.
3. ValueError -> BadRequestError throughout (AnthropicConfig.map_openai_params,
_apply_output_config, AmazonConverseConfig._handle_reasoning_effort_parameter).
Empty-string effort is now rejected (was silently passing the
'if effort and ...' short-circuit).
4. Floor reasoning_effort='minimal' at the Anthropic provider minimum
(1024 budget_tokens) via new ANTHROPIC_MIN_THINKING_BUDGET_TOKENS so it's
a usable tier on direct Anthropic / Azure AI Anthropic / Vertex AI Anthropic /
Bedrock Invoke (all of which 400 below 1024).
5. model_prices: dedupe duplicate supports_max_reasoning_effort key on
claude-opus-4-7 / claude-opus-4-7-20260416.
Adds regression tests across all five affected paths; existing tests asserting
the silent-strip behavior were updated to reflect the new pass-through and
clean 400 surfaces.
Co-authored-by: Mateo Wang <mateo-berri@users.noreply.github.com>
2026-05-03 04:18:50 -07:00
Mateo Wang
c011a7e3ba
Merge pull request #27041 from BerriAI/litellm_vertex-batch-error-response-null-46dd
...
Unit Tests: Caching (Redis) / caching-redis (push) Waiting to run
Unit Tests: Proxy DB Operations / assert-shard-coverage (push) Waiting to run
Unit Tests: Proxy DB Operations / auth-checks (push) Blocked by required conditions
Unit Tests: Proxy DB Operations / budgets (push) Blocked by required conditions
Unit Tests: Proxy DB Operations / custom-logging (push) Blocked by required conditions
Unit Tests: Proxy DB Operations / db-and-spend (push) Blocked by required conditions
Unit Tests: Proxy DB Operations / endpoints-and-responses (push) Blocked by required conditions
Unit Tests: Proxy DB Operations / guardrails-hooks (push) Blocked by required conditions
Unit Tests: Proxy DB Operations / jwt-and-keys (push) Blocked by required conditions
Unit Tests: Proxy DB Operations / key-generation (push) Blocked by required conditions
Unit Tests: Proxy DB Operations / logging-misc (push) Blocked by required conditions
Unit Tests: Proxy DB Operations / proxy-runtime (push) Blocked by required conditions
Unit Tests: Proxy DB Operations / proxy-server-core (push) Blocked by required conditions
Unit Tests: Proxy DB Operations / schema-migration (push) Blocked by required conditions
Unit Tests: Proxy DB Operations / proxy-utils (push) Blocked by required conditions
Unit Tests: Security / security (push) Waiting to run
fix(vertex-ai): set response=null on batch error entries per OpenAI spec
2026-05-03 04:08:42 -07:00
mateo-berri
cf9c2f0200
test(vertex-ai): cover transformation_error path emits response=null
2026-05-02 08:33:13 +00:00
Mateo Wang
4953b9e296
Merge pull request #26456 from BerriAI/litellm_hotfix_gpt-5.5-minimal-flag
2026-05-02 01:23:14 -07:00
mateo-berri
946dfb63c7
fix(vertex-ai): set response=null on batch error entries per OpenAI spec
...
The Vertex batch output transformer was emitting both a populated 'response' and 'error' for failed batch entries. The OpenAI Batch output spec defines them as mutually exclusive: on error 'response' MUST be null. This broke any consumer using 'result["response"] is None' to detect failures.
2026-05-02 08:15:56 +00:00
mateo-berri
439217511a
feat: add opt-out flag for Vertex batch output transformation
...
Adds litellm.disable_vertex_batch_output_transformation (default False).
When True, afile_content returns raw Vertex predictions.jsonl untouched
so users that parse candidates/modelVersion directly are not broken.
2026-05-02 07:39:17 +00:00
Cursor Agent
480bea2111
fix: don't mutate caller's logging_obj in _try_transform_vertex_batch_output_to_openai
...
The method was overwriting logging_obj.optional_params, logging_obj.model,
and logging_obj.start_time on the caller's Logging instance. When invoked
from llm_http_handler.py's generic framework path, the framework's own
logging_obj (which already went through pre_call) had its properties
clobbered, causing model and start_time to reflect the last batch line's
values rather than the original call context.
Fix: create a fresh local Logging instance for the per-line transformation
instead of mutating the incoming logging_obj. The caller's object is now
left entirely untouched regardless of whether a logging_obj was passed in
or not.
Regression tests added to verify model, start_time, and optional_params
are not mutated on the caller's logging_obj.
Co-authored-by: Sameer Kankute <Sameerlite@users.noreply.github.com>
2026-05-02 07:13:25 +00:00
Cursor Agent
04133ba07d
Fix Vertex batch output logging mutation
2026-05-02 07:11:55 +00:00
Cursor Agent
12ecac6f46
test vertex file content logging forwarding
...
Co-authored-by: Sameer Kankute <Sameerlite@users.noreply.github.com>
2026-05-02 07:00:55 +00:00
Cursor Agent
9d51706502
Merge remote-tracking branch 'origin/litellm_internal_staging' into litellm_vertex-batch-output-transformation
...
Co-authored-by: Mateo Wang <mateo-berri@users.noreply.github.com>
2026-05-02 06:20:43 +00:00
Cursor Agent
1ce92da9e8
Merge remote-tracking branch 'origin/litellm_internal_staging' into litellm_oss_staging_04_25_2026
...
Co-authored-by: Mateo Wang <mateo-berri@users.noreply.github.com>
2026-05-02 06:04:39 +00:00
Cursor Agent
a30bcc9a41
Merge remote-tracking branch 'origin/litellm_internal_staging' into litellm_hotfix_gpt-5.5-minimal-flag
...
# Conflicts:
# tests/test_litellm/llms/vertex_ai/test_vertex_ai_common_utils.py
Co-authored-by: Mateo Wang <mateo-berri@users.noreply.github.com>
2026-05-02 05:55:51 +00:00
user
8791f634de
trust only server legacy file flag
2026-05-01 18:32:26 -07:00
user
bb8f6fd5e2
thread trusted params through vertex file content
2026-05-01 18:24:22 -07:00
user
e7c23fc041
harden cloud file compatibility path
2026-05-01 18:14:36 -07:00
user
2776e0162c
harden cloud file compatibility path
2026-05-01 18:04:06 -07:00
Cursor Agent
60ca4424a6
Fix Vertex batch output edge cases
Unit Tests: Caching (Redis) / caching-redis (push) Has been cancelled
Unit Tests: Proxy DB Operations / assert-shard-coverage (push) Has been cancelled
Unit Tests: Security / security (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-utils (push) Has been cancelled
Unit Tests: Proxy DB Operations / auth-checks (push) Has been cancelled
Unit Tests: Proxy DB Operations / budgets (push) Has been cancelled
Unit Tests: Proxy DB Operations / custom-logging (push) Has been cancelled
Unit Tests: Proxy DB Operations / db-and-spend (push) Has been cancelled
Unit Tests: Proxy DB Operations / endpoints-and-responses (push) Has been cancelled
Unit Tests: Proxy DB Operations / guardrails-hooks (push) Has been cancelled
Unit Tests: Proxy DB Operations / jwt-and-keys (push) Has been cancelled
Unit Tests: Proxy DB Operations / key-generation (push) Has been cancelled
Unit Tests: Proxy DB Operations / logging-misc (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-runtime (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-server-core (push) Has been cancelled
Unit Tests: Proxy DB Operations / schema-migration (push) Has been cancelled
2026-05-01 23:06:54 +00:00
mateo-berri
04e96a9bdc
Merge remote-tracking branch 'origin/litellm_internal_staging' into litellm_clean_litellm_oss_staging_04_01_2026
2026-05-01 15:54:10 -07:00
Mateo Wang
6458fe15fd
Merge pull request #26077 from BerriAI/litellm_vertex_cached_content_mutual_exclusion
...
fix(vertex_ai): omit system_instruction/tools/toolConfig when cachedContent set
2026-05-01 15:52:47 -07:00
user
ba1188117d
fix cloud storage file guards
2026-05-01 15:34:11 -07:00
yuneng-jiang
3583ac1159
Merge pull request #26860 from stuxf/fix/provider-path-traversal
...
chore(security): encode upstream URL path identifiers
2026-05-01 14:47:52 -07:00
yuneng-jiang
02582466c4
Merge pull request #24340 from BerriAI/litellm_staging_03_21_2026
...
Litellm staging 03 21 2026
2026-05-01 11:57:44 -07:00
Cursor Agent
0cbb35cdcc
Fix Vertex batch output transformation detection
2026-05-01 18:36:48 +00:00
Cursor Agent
7deac91a92
Fix Vertex batch custom id labels
2026-05-01 17:29:50 +00:00
Sameer Kankute
8b85deb1df
Merge pull request #26985 from BerriAI/litellm_internal_staging
...
merge main
2026-05-01 19:07:11 +05:30
Sameer Kankute
19813527fa
feat(vertex_ai): Model Garden OpenAPI for publisher model ids
...
- Route publisher/model ids (e.g. xai/grok) to .../endpoints/openapi; keep model in JSON body
- Add model_prices keys for vertex_ai/openai/xai/grok-*
- Document xAI Grok on vertex_partner (aligned with GPT-OSS)
- Add tests for create_vertex_url and body-model heuristic
Made-with: Cursor
2026-05-01 18:05:08 +05:30
d 🔹
9d6983c4c0
fix(gemini): handle Gemini Files API URIs without fetching ( #24922 )
...
* fix(gemini): handle Gemini Files API URIs without fetching
Fixes #24907
When a file is uploaded via the Gemini Files API, the returned URI
(https://generativelanguage.googleapis.com/v1beta/files/ ...) starts
with 'https://' and hits the generic HTTPS handler in
_process_gemini_media(). That handler calls
_get_image_mime_type_from_url() which tries to fetch the URL — but
Gemini Files API URLs return 403 when accessed directly, causing:
'Unable to determine mime type for file_id: ...'
Fix: add an early elif that matches Gemini Files API URLs and passes
them through as file_data without trying to fetch the URL. When an
explicit format is provided it's included; otherwise the Gemini API
infers the MIME type from its stored metadata.
Exactly matches the fix direction suggested by the issue reporter
(rodriciru).
* fix: anchor Gemini Files API URL check with startswith
Address greptile P2: replace `in` substring check with `startswith`
to prevent query-string injection bypass (e.g.
`https://evil.com/?ref=https://generativelanguage ...`).
Also adds trailing slash to match only valid file URIs.
---------
Co-authored-by: voidborne-d <voidborne-d@users.noreply.github.com>
2026-05-01 17:26:45 +05:30
Sameer Kankute
72ddbce50e
Merge pull request #25499 from BerriAI/litellm_vertex_request_metadata_labels
...
feat(vertex_ai): propagate metadata labels to embedding, Imagen, rerank
2026-05-01 08:20:55 +05:30
Cursor Agent
8111dbe2b1
Merge remote-tracking branch 'origin/litellm_internal_staging' into litellm_oss_staging_04_25_2026
...
Unit Tests: Caching (Redis) / caching-redis (push) Has been cancelled
Unit Tests: Proxy DB Operations / assert-shard-coverage (push) Has been cancelled
Unit Tests: Security / security (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-utils (push) Has been cancelled
Unit Tests: Proxy DB Operations / auth-checks (push) Has been cancelled
Unit Tests: Proxy DB Operations / budgets (push) Has been cancelled
Unit Tests: Proxy DB Operations / custom-logging (push) Has been cancelled
Unit Tests: Proxy DB Operations / db-and-spend (push) Has been cancelled
Unit Tests: Proxy DB Operations / endpoints-and-responses (push) Has been cancelled
Unit Tests: Proxy DB Operations / guardrails-hooks (push) Has been cancelled
Unit Tests: Proxy DB Operations / jwt-and-keys (push) Has been cancelled
Unit Tests: Proxy DB Operations / key-generation (push) Has been cancelled
Unit Tests: Proxy DB Operations / logging-misc (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-runtime (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-server-core (push) Has been cancelled
Unit Tests: Proxy DB Operations / schema-migration (push) Has been cancelled
# Conflicts:
# litellm/model_prices_and_context_window_backup.json
# model_prices_and_context_window.json
Co-authored-by: Mateo Wang <mateo-berri@users.noreply.github.com>
2026-04-30 19:37:57 +00:00
mateo-berri
860843953d
fix(vertex_ai): default missing items on array schemas
...
Unit Tests: Proxy DB Operations / proxy-db (auth-checks, tests/proxy_unit_tests/test_auth_checks.py tests/proxy_unit_tests/test_user_api_key_auth.py, 20, 8) (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-db (key-generation, tests/proxy_unit_tests/test_key_generate_prisma.py, 30, 0) (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-db (proxy-utils, tests/proxy_unit_tests/test_proxy_utils.py, 20, 8) (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-db (remaining, tests/proxy_unit_tests --ignore=tests/proxy_unit_tests/test_key_generate_prisma.py --ignore=tests/proxy_unit_tests/test_auth_checks.py --ignore=tests/proxy_unit_tests/test_user_api_key_auth.py --ignore=tests/proxy_unit_tests/test_p… (push) Has been cancelled
Unit Tests: Security / security (push) Has been cancelled
Vertex rejects array schemas without an items field
(GenerateContentRequest.tools[*].function_declarations[*].parameters...items: missing field).
This happened for tool params containing anyOf branches like {"type": "array"}
with no items, including the case where convert_anyof_null_to_nullable
strips an empty items entry. Default missing items to {"type": "object"}
in process_items so the same default applies to bare arrays and
arrays nested inside anyOf.
2026-04-30 19:16:12 +00:00
Cursor Agent
21c7864d75
Fix Vertex label metadata fallback
2026-04-30 18:44:03 +00:00
mateo-berri
b5df9d9778
test(vertex_ai): add e2e tests for rerank userLabels propagation
...
Cover the full litellm.rerank()/arerank() path with HTTP mocked, asserting
metadata.requester_metadata reaches the Discovery Engine :rank body as
userLabels (and stays absent when no metadata is set). Catches plumbing
regressions that unit tests on transform_rerank_request alone would miss.
2026-04-30 18:25:38 +00:00
user
94c13fe399
fix: cover provider path traversal variants
2026-04-29 22:29:09 -07:00
Sameer Kankute
d7862e7fe8
Merge pull request #26745 from BerriAI/litellm_internal_staging
...
Unit Tests: Caching (Redis) / caching-redis (push) Has been cancelled
Unit Tests: Proxy DB Operations / assert-shard-coverage (push) Has been cancelled
Unit Tests: Security / security (push) Has been cancelled
Unit Tests: Proxy DB Operations / auth-checks (push) Has been cancelled
Unit Tests: Proxy DB Operations / budgets (push) Has been cancelled
Unit Tests: Proxy DB Operations / custom-logging (push) Has been cancelled
Unit Tests: Proxy DB Operations / db-and-spend (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-runtime (push) Has been cancelled
Unit Tests: Proxy DB Operations / endpoints-and-responses (push) Has been cancelled
Unit Tests: Proxy DB Operations / guardrails-hooks (push) Has been cancelled
Unit Tests: Proxy DB Operations / jwt-and-keys (push) Has been cancelled
Unit Tests: Proxy DB Operations / key-generation (push) Has been cancelled
Unit Tests: Proxy DB Operations / logging-misc (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-server-core (push) Has been cancelled
Unit Tests: Proxy DB Operations / schema-migration (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-utils (push) Has been cancelled
merge mian
2026-04-29 09:25:42 +05:30
Michael Riad Zaky
b07e1c0341
drop response body from vertex/bedrock transformation errors
Unit Tests: Security / security (push) Has been cancelled
Unit Tests: Caching (Redis) / caching-redis (push) Has been cancelled
Unit Tests: Proxy DB Operations / assert-shard-coverage (push) Has been cancelled
Unit Tests: Proxy DB Operations / auth-checks (push) Has been cancelled
Unit Tests: Proxy DB Operations / budgets (push) Has been cancelled
Unit Tests: Proxy DB Operations / custom-logging (push) Has been cancelled
Unit Tests: Proxy DB Operations / db-and-spend (push) Has been cancelled
Unit Tests: Proxy DB Operations / endpoints-and-responses (push) Has been cancelled
Unit Tests: Proxy DB Operations / guardrails-hooks (push) Has been cancelled
Unit Tests: Proxy DB Operations / jwt-and-keys (push) Has been cancelled
Unit Tests: Proxy DB Operations / key-generation (push) Has been cancelled
Unit Tests: Proxy DB Operations / logging-misc (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-runtime (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-server-core (push) Has been cancelled
Unit Tests: Proxy DB Operations / schema-migration (push) Has been cancelled
Unit Tests: Proxy DB Operations / proxy-utils (push) Has been cancelled
2026-04-28 17:38:42 -07:00
yuneng-jiang
600d7b4a20
Merge pull request #26675 from BerriAI/litellm_/zen-snyder-4c197e
...
fix(vertex): preserve items on array branches in anyOf with null + de-flake test
2026-04-28 10:31:34 -07:00
Yuneng Jiang
1af11d4371
fix(vertex): synthesize items for array types missing items entirely
...
Companion to the prior commit. process_items only converted empty
`items: {}` to `{"type": "object"}`. But anyOf branches like
`{"type": "array"}` (no items field at all) were untouched, so after
convert_anyof_null_to_nullable stripped the null branch and added
nullable, the array branch was sent to Vertex as
`{"type": "array", "nullable": true}` — which Vertex rejects with
INVALID_ARGUMENT (`any_of[0].items: missing field`).
Make process_items synthesize `items: {"type": "object"}` for any
`type == "array"` schema where items is missing or empty.
Also:
- Convert test_gemini_tool_calling_working_demo to a hermetic mock
test asserting items is present on the array branch in the sent
body. Was previously a real-network call to Vertex and was the
test the user reported still failing in CI.
- Add unit test test_build_vertex_schema_array_branch_missing_items_in_anyof
covering the missing-items shape directly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 09:23:55 -07:00
Sameer Kankute
1d56e732e8
fix(vertex-ai): reuse anthropic messages config instances ( #26099 )
...
Cache provider config lookups for Vertex Anthropic messages so repeated requests reuse the same config object and preserve credential cache state. Add a regression test to catch any future loss of config reuse.
Made-with: Cursor
2026-04-28 08:44:40 -07:00
Yuneng Jiang
3ca985451e
fix(vertex): preserve items on array branches inside anyOf with null
...
convert_anyof_null_to_nullable was stripping the items field from array
branches inside anyOf when a sibling null branch was present, leaving
{"type": "array"} without items. Vertex requires items whenever
type == "array" (even inside anyOf) and rejects the call with
INVALID_ARGUMENT.
Leave the (possibly empty) items in place so the downstream process_items
step can convert {} to {"type": "object"}, which is what Vertex wants.
Also:
- Update test_build_vertex_schema expected output, which was codifying
the broken shape.
- Convert test_gemini_tool_calling_not_working to a hermetic mock test
that asserts the request body sent to Vertex includes items inside
the callbacks anyOf array branch. The previous form made a real
network call and was flaky in CI.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 23:37:09 -07:00
Mateo Wang
b55a0f0681
Merge pull request #26439 from dkindlund/fix/output-config-passthrough-consolidated
...
fix(adapters,vertex): pass output_config through to backends that accept it (closes #23380 , supersedes #23475/#23396/#23706/#22727)
2026-04-25 15:36:50 -07:00
Chesars
91e78eca3d
Merge remote-tracking branch 'upstream/litellm_internal_staging' into upstream-litellm_staging_03_21_2026
...
# Conflicts:
# .circleci/config.yml
# .circleci/requirements.txt
# .github/workflows/_test-unit-base.yml
# .github/workflows/_test-unit-services-base.yml
# .github/workflows/auto_update_price_and_context_window.yml
# .github/workflows/create-release.yml
# .github/workflows/llm-translation-testing.yml
# .github/workflows/publish_to_pypi.yml
# .github/workflows/scan_duplicate_issues.yml
# .github/workflows/test-linting.yml
# .github/workflows/test-litellm-matrix.yml
# .github/workflows/test-litellm.yml
# .github/workflows/test-mcp.yml
# .github/workflows/test-model-map.yaml
# .github/workflows/test-proxy-e2e-azure-batches.yml
# .github/workflows/test-unit-core-utils.yml
# .github/workflows/test-unit-documentation.yml
# .github/workflows/test-unit-enterprise-routing.yml
# .github/workflows/test-unit-integrations.yml
# .github/workflows/test-unit-llm-providers.yml
# .github/workflows/test-unit-misc.yml
# .github/workflows/test-unit-proxy-auth.yml
# .github/workflows/test-unit-proxy-db.yml
# .github/workflows/test-unit-proxy-endpoints.yml
# .github/workflows/test-unit-proxy-infra.yml
# .github/workflows/test-unit-proxy-legacy.yml
# .github/workflows/test-unit-responses-caching-types.yml
# .github/workflows/test-unit-security.yml
# .github/workflows/test_server_root_path.yml
# docs/my-website/docs/embedding/supported_embedding.md
# litellm/litellm_core_utils/get_llm_provider_logic.py
# litellm/llms/vertex_ai/gemini_embeddings/batch_embed_content_transformation.py
# litellm/proxy/_experimental/out/404/index.html
# litellm/proxy/_experimental/out/__next.__PAGE__.txt
# litellm/proxy/_experimental/out/__next._full.txt
# litellm/proxy/_experimental/out/__next._head.txt
# litellm/proxy/_experimental/out/__next._index.txt
# litellm/proxy/_experimental/out/__next._tree.txt
# litellm/proxy/_experimental/out/_next/static/3qyC5Vtvhd5fSC6sPp1iW/_buildManifest.js
# litellm/proxy/_experimental/out/_next/static/3qyC5Vtvhd5fSC6sPp1iW/_clientMiddlewareManifest.json
# litellm/proxy/_experimental/out/_next/static/3qyC5Vtvhd5fSC6sPp1iW/_ssgManifest.js
# litellm/proxy/_experimental/out/_next/static/aKKihXXKRJWLQThZgi8Rq/_buildManifest.js
# litellm/proxy/_experimental/out/_next/static/aKKihXXKRJWLQThZgi8Rq/_clientMiddlewareManifest.json
# litellm/proxy/_experimental/out/_next/static/aKKihXXKRJWLQThZgi8Rq/_ssgManifest.js
# litellm/proxy/_experimental/out/_next/static/bmMTxs1O5fQKYcsMNTRMT/_buildManifest.js
# litellm/proxy/_experimental/out/_next/static/bmMTxs1O5fQKYcsMNTRMT/_clientMiddlewareManifest.json
# litellm/proxy/_experimental/out/_next/static/bmMTxs1O5fQKYcsMNTRMT/_ssgManifest.js
# litellm/proxy/_experimental/out/_next/static/chunks/11362340846735c3.js
# litellm/proxy/_experimental/out/_next/static/chunks/1a04d31843c96649.js
# litellm/proxy/_experimental/out/_next/static/chunks/342c7d7210247a5e.js
# litellm/proxy/_experimental/out/_next/static/chunks/39768ec0eebd2554.js
# litellm/proxy/_experimental/out/_next/static/chunks/3b3c0b070b14da06.js
# litellm/proxy/_experimental/out/_next/static/chunks/3bddc72a3ecc2253.js
# litellm/proxy/_experimental/out/_next/static/chunks/4472ece1be7379b3.js
# litellm/proxy/_experimental/out/_next/static/chunks/54e29148cb2f2582.js
# litellm/proxy/_experimental/out/_next/static/chunks/67ddb5107368a659.js
# litellm/proxy/_experimental/out/_next/static/chunks/6a167cef4b09b496.js
# litellm/proxy/_experimental/out/_next/static/chunks/7174130ddef406dd.js
# litellm/proxy/_experimental/out/_next/static/chunks/7c36bfe1ba5e3ba8.js
# litellm/proxy/_experimental/out/_next/static/chunks/7e5fe5584502da06.js
# litellm/proxy/_experimental/out/_next/static/chunks/8dda507c226082ca.js
# litellm/proxy/_experimental/out/_next/static/chunks/8dfde809dc4ad794.js
# litellm/proxy/_experimental/out/_next/static/chunks/99109c78121231a0.js
# litellm/proxy/_experimental/out/_next/static/chunks/9dd55e1f36a7225c.js
# litellm/proxy/_experimental/out/_next/static/chunks/a230559fcabaea23.js
# litellm/proxy/_experimental/out/_next/static/chunks/a6c7f80b3968f639.js
# litellm/proxy/_experimental/out/_next/static/chunks/ac9e96d21c200b48.js
# litellm/proxy/_experimental/out/_next/static/chunks/ae9cf43b8c0c76aa.js
# litellm/proxy/_experimental/out/_next/static/chunks/cf06797ce4e438f9.js
# litellm/proxy/_experimental/out/_next/static/chunks/d069df5baead6d90.js
# litellm/proxy/_experimental/out/_next/static/chunks/d2e3b7dd6499c245.js
# litellm/proxy/_experimental/out/_next/static/chunks/d44e73d8ebac5747.js
# litellm/proxy/_experimental/out/_next/static/chunks/dc8a270fee94ced6.js
# litellm/proxy/_experimental/out/_next/static/chunks/df6546cd8a44d3b3.js
# litellm/proxy/_experimental/out/_next/static/chunks/ea0f22bd4b3393bd.js
# litellm/proxy/_experimental/out/_next/static/chunks/eaa9f9b9bb3e054b.js
# litellm/proxy/_experimental/out/_next/static/chunks/turbopack-901b35f89c1f6751.js
# litellm/proxy/_experimental/out/_next/static/chunks/turbopack-d1b22f5e0bd58c57.js
# litellm/proxy/_experimental/out/_next/static/chunks/turbopack-ddedb29a5eb0118f.js
# litellm/proxy/_experimental/out/_not-found.txt
# litellm/proxy/_experimental/out/_not-found/__next._full.txt
# litellm/proxy/_experimental/out/_not-found/__next._head.txt
# litellm/proxy/_experimental/out/_not-found/__next._index.txt
# litellm/proxy/_experimental/out/_not-found/__next._not-found.__PAGE__.txt
# litellm/proxy/_experimental/out/_not-found/__next._not-found.txt
# litellm/proxy/_experimental/out/_not-found/__next._tree.txt
# litellm/proxy/_experimental/out/_not-found/index.html
# litellm/proxy/_experimental/out/api-reference.html
# litellm/proxy/_experimental/out/api-reference.txt
# litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.api-reference.__PAGE__.txt
# litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.api-reference.txt
# litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/api-reference/__next._full.txt
# litellm/proxy/_experimental/out/api-reference/__next._head.txt
# litellm/proxy/_experimental/out/api-reference/__next._index.txt
# litellm/proxy/_experimental/out/api-reference/__next._tree.txt
# litellm/proxy/_experimental/out/chat.html
# litellm/proxy/_experimental/out/chat.txt
# litellm/proxy/_experimental/out/chat/__next._full.txt
# litellm/proxy/_experimental/out/chat/__next._head.txt
# litellm/proxy/_experimental/out/chat/__next._index.txt
# litellm/proxy/_experimental/out/chat/__next._tree.txt
# litellm/proxy/_experimental/out/chat/__next.chat.__PAGE__.txt
# litellm/proxy/_experimental/out/chat/__next.chat.txt
# litellm/proxy/_experimental/out/experimental/api-playground.html
# litellm/proxy/_experimental/out/experimental/api-playground.txt
# litellm/proxy/_experimental/out/experimental/api-playground/__next.!KGRhc2hib2FyZCk.experimental.api-playground.__PAGE__.txt
# litellm/proxy/_experimental/out/experimental/api-playground/__next.!KGRhc2hib2FyZCk.experimental.api-playground.txt
# litellm/proxy/_experimental/out/experimental/api-playground/__next.!KGRhc2hib2FyZCk.experimental.txt
# litellm/proxy/_experimental/out/experimental/api-playground/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/experimental/api-playground/__next._full.txt
# litellm/proxy/_experimental/out/experimental/api-playground/__next._head.txt
# litellm/proxy/_experimental/out/experimental/api-playground/__next._index.txt
# litellm/proxy/_experimental/out/experimental/api-playground/__next._tree.txt
# litellm/proxy/_experimental/out/experimental/budgets.html
# litellm/proxy/_experimental/out/experimental/budgets.txt
# litellm/proxy/_experimental/out/experimental/budgets/__next.!KGRhc2hib2FyZCk.experimental.budgets.__PAGE__.txt
# litellm/proxy/_experimental/out/experimental/budgets/__next.!KGRhc2hib2FyZCk.experimental.budgets.txt
# litellm/proxy/_experimental/out/experimental/budgets/__next.!KGRhc2hib2FyZCk.experimental.txt
# litellm/proxy/_experimental/out/experimental/budgets/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/experimental/budgets/__next._full.txt
# litellm/proxy/_experimental/out/experimental/budgets/__next._head.txt
# litellm/proxy/_experimental/out/experimental/budgets/__next._index.txt
# litellm/proxy/_experimental/out/experimental/budgets/__next._tree.txt
# litellm/proxy/_experimental/out/experimental/caching.html
# litellm/proxy/_experimental/out/experimental/caching.txt
# litellm/proxy/_experimental/out/experimental/caching/__next.!KGRhc2hib2FyZCk.experimental.caching.__PAGE__.txt
# litellm/proxy/_experimental/out/experimental/caching/__next.!KGRhc2hib2FyZCk.experimental.caching.txt
# litellm/proxy/_experimental/out/experimental/caching/__next.!KGRhc2hib2FyZCk.experimental.txt
# litellm/proxy/_experimental/out/experimental/caching/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/experimental/caching/__next._full.txt
# litellm/proxy/_experimental/out/experimental/caching/__next._head.txt
# litellm/proxy/_experimental/out/experimental/caching/__next._index.txt
# litellm/proxy/_experimental/out/experimental/caching/__next._tree.txt
# litellm/proxy/_experimental/out/experimental/claude-code-plugins.html
# litellm/proxy/_experimental/out/experimental/claude-code-plugins.txt
# litellm/proxy/_experimental/out/experimental/claude-code-plugins/__next.!KGRhc2hib2FyZCk.experimental.claude-code-plugins.__PAGE__.txt
# litellm/proxy/_experimental/out/experimental/claude-code-plugins/__next.!KGRhc2hib2FyZCk.experimental.claude-code-plugins.txt
# litellm/proxy/_experimental/out/experimental/claude-code-plugins/__next.!KGRhc2hib2FyZCk.experimental.txt
# litellm/proxy/_experimental/out/experimental/claude-code-plugins/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/experimental/claude-code-plugins/__next._full.txt
# litellm/proxy/_experimental/out/experimental/claude-code-plugins/__next._head.txt
# litellm/proxy/_experimental/out/experimental/claude-code-plugins/__next._index.txt
# litellm/proxy/_experimental/out/experimental/claude-code-plugins/__next._tree.txt
# litellm/proxy/_experimental/out/experimental/old-usage.html
# litellm/proxy/_experimental/out/experimental/old-usage.txt
# litellm/proxy/_experimental/out/experimental/old-usage/__next.!KGRhc2hib2FyZCk.experimental.old-usage.__PAGE__.txt
# litellm/proxy/_experimental/out/experimental/old-usage/__next.!KGRhc2hib2FyZCk.experimental.old-usage.txt
# litellm/proxy/_experimental/out/experimental/old-usage/__next.!KGRhc2hib2FyZCk.experimental.txt
# litellm/proxy/_experimental/out/experimental/old-usage/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/experimental/old-usage/__next._full.txt
# litellm/proxy/_experimental/out/experimental/old-usage/__next._head.txt
# litellm/proxy/_experimental/out/experimental/old-usage/__next._index.txt
# litellm/proxy/_experimental/out/experimental/old-usage/__next._tree.txt
# litellm/proxy/_experimental/out/experimental/prompts.html
# litellm/proxy/_experimental/out/experimental/prompts.txt
# litellm/proxy/_experimental/out/experimental/prompts/__next.!KGRhc2hib2FyZCk.experimental.prompts.__PAGE__.txt
# litellm/proxy/_experimental/out/experimental/prompts/__next.!KGRhc2hib2FyZCk.experimental.prompts.txt
# litellm/proxy/_experimental/out/experimental/prompts/__next.!KGRhc2hib2FyZCk.experimental.txt
# litellm/proxy/_experimental/out/experimental/prompts/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/experimental/prompts/__next._full.txt
# litellm/proxy/_experimental/out/experimental/prompts/__next._head.txt
# litellm/proxy/_experimental/out/experimental/prompts/__next._index.txt
# litellm/proxy/_experimental/out/experimental/prompts/__next._tree.txt
# litellm/proxy/_experimental/out/experimental/tag-management.html
# litellm/proxy/_experimental/out/experimental/tag-management.txt
# litellm/proxy/_experimental/out/experimental/tag-management/__next.!KGRhc2hib2FyZCk.experimental.tag-management.__PAGE__.txt
# litellm/proxy/_experimental/out/experimental/tag-management/__next.!KGRhc2hib2FyZCk.experimental.tag-management.txt
# litellm/proxy/_experimental/out/experimental/tag-management/__next.!KGRhc2hib2FyZCk.experimental.txt
# litellm/proxy/_experimental/out/experimental/tag-management/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/experimental/tag-management/__next._full.txt
# litellm/proxy/_experimental/out/experimental/tag-management/__next._head.txt
# litellm/proxy/_experimental/out/experimental/tag-management/__next._index.txt
# litellm/proxy/_experimental/out/experimental/tag-management/__next._tree.txt
# litellm/proxy/_experimental/out/guardrails.html
# litellm/proxy/_experimental/out/guardrails.txt
# litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.guardrails.__PAGE__.txt
# litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.guardrails.txt
# litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/guardrails/__next._full.txt
# litellm/proxy/_experimental/out/guardrails/__next._head.txt
# litellm/proxy/_experimental/out/guardrails/__next._index.txt
# litellm/proxy/_experimental/out/guardrails/__next._tree.txt
# litellm/proxy/_experimental/out/index.html
# litellm/proxy/_experimental/out/index.txt
# litellm/proxy/_experimental/out/login.html
# litellm/proxy/_experimental/out/login.txt
# litellm/proxy/_experimental/out/login/__next._full.txt
# litellm/proxy/_experimental/out/login/__next._head.txt
# litellm/proxy/_experimental/out/login/__next._index.txt
# litellm/proxy/_experimental/out/login/__next._tree.txt
# litellm/proxy/_experimental/out/login/__next.login.__PAGE__.txt
# litellm/proxy/_experimental/out/login/__next.login.txt
# litellm/proxy/_experimental/out/logs.html
# litellm/proxy/_experimental/out/logs.txt
# litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.logs.__PAGE__.txt
# litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.logs.txt
# litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/logs/__next._full.txt
# litellm/proxy/_experimental/out/logs/__next._head.txt
# litellm/proxy/_experimental/out/logs/__next._index.txt
# litellm/proxy/_experimental/out/logs/__next._tree.txt
# litellm/proxy/_experimental/out/mcp/oauth/callback.txt
# litellm/proxy/_experimental/out/mcp/oauth/callback/__next._full.txt
# litellm/proxy/_experimental/out/mcp/oauth/callback/__next._head.txt
# litellm/proxy/_experimental/out/mcp/oauth/callback/__next._index.txt
# litellm/proxy/_experimental/out/mcp/oauth/callback/__next._tree.txt
# litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.callback.__PAGE__.txt
# litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.callback.txt
# litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.txt
# litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.txt
# litellm/proxy/_experimental/out/mcp/oauth/callback/index.html
# litellm/proxy/_experimental/out/model-hub.html
# litellm/proxy/_experimental/out/model-hub.txt
# litellm/proxy/_experimental/out/model-hub/__next.!KGRhc2hib2FyZCk.model-hub.__PAGE__.txt
# litellm/proxy/_experimental/out/model-hub/__next.!KGRhc2hib2FyZCk.model-hub.txt
# litellm/proxy/_experimental/out/model-hub/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/model-hub/__next._full.txt
# litellm/proxy/_experimental/out/model-hub/__next._head.txt
# litellm/proxy/_experimental/out/model-hub/__next._index.txt
# litellm/proxy/_experimental/out/model-hub/__next._tree.txt
# litellm/proxy/_experimental/out/model_hub.html
# litellm/proxy/_experimental/out/model_hub.txt
# litellm/proxy/_experimental/out/model_hub/__next._full.txt
# litellm/proxy/_experimental/out/model_hub/__next._head.txt
# litellm/proxy/_experimental/out/model_hub/__next._index.txt
# litellm/proxy/_experimental/out/model_hub/__next._tree.txt
# litellm/proxy/_experimental/out/model_hub/__next.model_hub.__PAGE__.txt
# litellm/proxy/_experimental/out/model_hub/__next.model_hub.txt
# litellm/proxy/_experimental/out/model_hub_table.html
# litellm/proxy/_experimental/out/model_hub_table.txt
# litellm/proxy/_experimental/out/model_hub_table/__next._full.txt
# litellm/proxy/_experimental/out/model_hub_table/__next._head.txt
# litellm/proxy/_experimental/out/model_hub_table/__next._index.txt
# litellm/proxy/_experimental/out/model_hub_table/__next._tree.txt
# litellm/proxy/_experimental/out/model_hub_table/__next.model_hub_table.__PAGE__.txt
# litellm/proxy/_experimental/out/model_hub_table/__next.model_hub_table.txt
# litellm/proxy/_experimental/out/models-and-endpoints.html
# litellm/proxy/_experimental/out/models-and-endpoints.txt
# litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.models-and-endpoints.__PAGE__.txt
# litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.models-and-endpoints.txt
# litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/models-and-endpoints/__next._full.txt
# litellm/proxy/_experimental/out/models-and-endpoints/__next._head.txt
# litellm/proxy/_experimental/out/models-and-endpoints/__next._index.txt
# litellm/proxy/_experimental/out/models-and-endpoints/__next._tree.txt
# litellm/proxy/_experimental/out/onboarding.html
# litellm/proxy/_experimental/out/onboarding.txt
# litellm/proxy/_experimental/out/onboarding/__next._full.txt
# litellm/proxy/_experimental/out/onboarding/__next._head.txt
# litellm/proxy/_experimental/out/onboarding/__next._index.txt
# litellm/proxy/_experimental/out/onboarding/__next._tree.txt
# litellm/proxy/_experimental/out/onboarding/__next.onboarding.__PAGE__.txt
# litellm/proxy/_experimental/out/onboarding/__next.onboarding.txt
# litellm/proxy/_experimental/out/organizations.html
# litellm/proxy/_experimental/out/organizations.txt
# litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.organizations.__PAGE__.txt
# litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.organizations.txt
# litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/organizations/__next._full.txt
# litellm/proxy/_experimental/out/organizations/__next._head.txt
# litellm/proxy/_experimental/out/organizations/__next._index.txt
# litellm/proxy/_experimental/out/organizations/__next._tree.txt
# litellm/proxy/_experimental/out/playground.html
# litellm/proxy/_experimental/out/playground.txt
# litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.playground.__PAGE__.txt
# litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.playground.txt
# litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/playground/__next._full.txt
# litellm/proxy/_experimental/out/playground/__next._head.txt
# litellm/proxy/_experimental/out/playground/__next._index.txt
# litellm/proxy/_experimental/out/playground/__next._tree.txt
# litellm/proxy/_experimental/out/policies.html
# litellm/proxy/_experimental/out/policies.txt
# litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.policies.__PAGE__.txt
# litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.policies.txt
# litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/policies/__next._full.txt
# litellm/proxy/_experimental/out/policies/__next._head.txt
# litellm/proxy/_experimental/out/policies/__next._index.txt
# litellm/proxy/_experimental/out/policies/__next._tree.txt
# litellm/proxy/_experimental/out/settings/admin-settings.html
# litellm/proxy/_experimental/out/settings/admin-settings.txt
# litellm/proxy/_experimental/out/settings/admin-settings/__next.!KGRhc2hib2FyZCk.settings.admin-settings.__PAGE__.txt
# litellm/proxy/_experimental/out/settings/admin-settings/__next.!KGRhc2hib2FyZCk.settings.admin-settings.txt
# litellm/proxy/_experimental/out/settings/admin-settings/__next.!KGRhc2hib2FyZCk.settings.txt
# litellm/proxy/_experimental/out/settings/admin-settings/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/settings/admin-settings/__next._full.txt
# litellm/proxy/_experimental/out/settings/admin-settings/__next._head.txt
# litellm/proxy/_experimental/out/settings/admin-settings/__next._index.txt
# litellm/proxy/_experimental/out/settings/admin-settings/__next._tree.txt
# litellm/proxy/_experimental/out/settings/logging-and-alerts.html
# litellm/proxy/_experimental/out/settings/logging-and-alerts.txt
# litellm/proxy/_experimental/out/settings/logging-and-alerts/__next.!KGRhc2hib2FyZCk.settings.logging-and-alerts.__PAGE__.txt
# litellm/proxy/_experimental/out/settings/logging-and-alerts/__next.!KGRhc2hib2FyZCk.settings.logging-and-alerts.txt
# litellm/proxy/_experimental/out/settings/logging-and-alerts/__next.!KGRhc2hib2FyZCk.settings.txt
# litellm/proxy/_experimental/out/settings/logging-and-alerts/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/settings/logging-and-alerts/__next._full.txt
# litellm/proxy/_experimental/out/settings/logging-and-alerts/__next._head.txt
# litellm/proxy/_experimental/out/settings/logging-and-alerts/__next._index.txt
# litellm/proxy/_experimental/out/settings/logging-and-alerts/__next._tree.txt
# litellm/proxy/_experimental/out/settings/router-settings.html
# litellm/proxy/_experimental/out/settings/router-settings.txt
# litellm/proxy/_experimental/out/settings/router-settings/__next.!KGRhc2hib2FyZCk.settings.router-settings.__PAGE__.txt
# litellm/proxy/_experimental/out/settings/router-settings/__next.!KGRhc2hib2FyZCk.settings.router-settings.txt
# litellm/proxy/_experimental/out/settings/router-settings/__next.!KGRhc2hib2FyZCk.settings.txt
# litellm/proxy/_experimental/out/settings/router-settings/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/settings/router-settings/__next._full.txt
# litellm/proxy/_experimental/out/settings/router-settings/__next._head.txt
# litellm/proxy/_experimental/out/settings/router-settings/__next._index.txt
# litellm/proxy/_experimental/out/settings/router-settings/__next._tree.txt
# litellm/proxy/_experimental/out/settings/ui-theme.html
# litellm/proxy/_experimental/out/settings/ui-theme.txt
# litellm/proxy/_experimental/out/settings/ui-theme/__next.!KGRhc2hib2FyZCk.settings.txt
# litellm/proxy/_experimental/out/settings/ui-theme/__next.!KGRhc2hib2FyZCk.settings.ui-theme.__PAGE__.txt
# litellm/proxy/_experimental/out/settings/ui-theme/__next.!KGRhc2hib2FyZCk.settings.ui-theme.txt
# litellm/proxy/_experimental/out/settings/ui-theme/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/settings/ui-theme/__next._full.txt
# litellm/proxy/_experimental/out/settings/ui-theme/__next._head.txt
# litellm/proxy/_experimental/out/settings/ui-theme/__next._index.txt
# litellm/proxy/_experimental/out/settings/ui-theme/__next._tree.txt
# litellm/proxy/_experimental/out/teams.html
# litellm/proxy/_experimental/out/teams.txt
# litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.teams.__PAGE__.txt
# litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.teams.txt
# litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/teams/__next._full.txt
# litellm/proxy/_experimental/out/teams/__next._head.txt
# litellm/proxy/_experimental/out/teams/__next._index.txt
# litellm/proxy/_experimental/out/teams/__next._tree.txt
# litellm/proxy/_experimental/out/test-key.html
# litellm/proxy/_experimental/out/test-key.txt
# litellm/proxy/_experimental/out/test-key/__next.!KGRhc2hib2FyZCk.test-key.__PAGE__.txt
# litellm/proxy/_experimental/out/test-key/__next.!KGRhc2hib2FyZCk.test-key.txt
# litellm/proxy/_experimental/out/test-key/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/test-key/__next._full.txt
# litellm/proxy/_experimental/out/test-key/__next._head.txt
# litellm/proxy/_experimental/out/test-key/__next._index.txt
# litellm/proxy/_experimental/out/test-key/__next._tree.txt
# litellm/proxy/_experimental/out/tools/mcp-servers.html
# litellm/proxy/_experimental/out/tools/mcp-servers.txt
# litellm/proxy/_experimental/out/tools/mcp-servers/__next.!KGRhc2hib2FyZCk.tools.mcp-servers.__PAGE__.txt
# litellm/proxy/_experimental/out/tools/mcp-servers/__next.!KGRhc2hib2FyZCk.tools.mcp-servers.txt
# litellm/proxy/_experimental/out/tools/mcp-servers/__next.!KGRhc2hib2FyZCk.tools.txt
# litellm/proxy/_experimental/out/tools/mcp-servers/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/tools/mcp-servers/__next._full.txt
# litellm/proxy/_experimental/out/tools/mcp-servers/__next._head.txt
# litellm/proxy/_experimental/out/tools/mcp-servers/__next._index.txt
# litellm/proxy/_experimental/out/tools/mcp-servers/__next._tree.txt
# litellm/proxy/_experimental/out/tools/vector-stores.html
# litellm/proxy/_experimental/out/tools/vector-stores.txt
# litellm/proxy/_experimental/out/tools/vector-stores/__next.!KGRhc2hib2FyZCk.tools.txt
# litellm/proxy/_experimental/out/tools/vector-stores/__next.!KGRhc2hib2FyZCk.tools.vector-stores.__PAGE__.txt
# litellm/proxy/_experimental/out/tools/vector-stores/__next.!KGRhc2hib2FyZCk.tools.vector-stores.txt
# litellm/proxy/_experimental/out/tools/vector-stores/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/tools/vector-stores/__next._full.txt
# litellm/proxy/_experimental/out/tools/vector-stores/__next._head.txt
# litellm/proxy/_experimental/out/tools/vector-stores/__next._index.txt
# litellm/proxy/_experimental/out/tools/vector-stores/__next._tree.txt
# litellm/proxy/_experimental/out/usage.html
# litellm/proxy/_experimental/out/usage.txt
# litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.usage.__PAGE__.txt
# litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.usage.txt
# litellm/proxy/_experimental/out/usage/__next._full.txt
# litellm/proxy/_experimental/out/usage/__next._head.txt
# litellm/proxy/_experimental/out/usage/__next._index.txt
# litellm/proxy/_experimental/out/usage/__next._tree.txt
# litellm/proxy/_experimental/out/users.html
# litellm/proxy/_experimental/out/users.txt
# litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.users.__PAGE__.txt
# litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.users.txt
# litellm/proxy/_experimental/out/users/__next._full.txt
# litellm/proxy/_experimental/out/users/__next._head.txt
# litellm/proxy/_experimental/out/users/__next._index.txt
# litellm/proxy/_experimental/out/users/__next._tree.txt
# litellm/proxy/_experimental/out/virtual-keys.html
# litellm/proxy/_experimental/out/virtual-keys.txt
# litellm/proxy/_experimental/out/virtual-keys/__next.!KGRhc2hib2FyZCk.txt
# litellm/proxy/_experimental/out/virtual-keys/__next.!KGRhc2hib2FyZCk.virtual-keys.__PAGE__.txt
# litellm/proxy/_experimental/out/virtual-keys/__next.!KGRhc2hib2FyZCk.virtual-keys.txt
# litellm/proxy/_experimental/out/virtual-keys/__next._full.txt
# litellm/proxy/_experimental/out/virtual-keys/__next._head.txt
# litellm/proxy/_experimental/out/virtual-keys/__next._index.txt
# litellm/proxy/_experimental/out/virtual-keys/__next._tree.txt
# scripts/install.sh
# tests/local_testing/test_get_llm_provider.py
2026-04-25 17:15:24 -03:00
Chesars
ebe16072f2
Merge remote-tracking branch 'upstream/litellm_internal_staging' into litellm_staging_03_23_2026
...
# Conflicts:
# model_prices_and_context_window.json
# tests/test_litellm/llms/vertex_ai/multimodal_embeddings/test_vertex_ai_multimodal_embedding_transformation.py
2026-04-25 15:16:13 -03:00
Darien Kindlund
79517bc628
fix: address Greptile review feedback on PR #26439
...
Three concerns raised by bot reviewers, all addressed:
1. CodeQL cyclic-import warning
``experimental_pass_through/transformation.py`` imported from the
parent ``..transformation`` module, which CodeQL flagged as a
potential cycle. Extracted the helper into a new leaf module
``vertex_ai_partner_models/anthropic/output_params_utils.py`` that
has no heavy imports of its own. Both transformation files now
import from it cleanly. Renamed the helper from the underscore-
prefixed ``_sanitize_vertex_anthropic_output_params`` to the
public ``sanitize_vertex_anthropic_output_params`` since it is now
shared across modules.
2. Greptile P2: redundant ``None`` guard on ``extra_kwargs``
``handler.py`` had two ``extra_kwargs = extra_kwargs if ... else {}``
coercions; the second was a no-op because line 220 already
coerced. Removed the second one and added a NOTE comment so future
readers understand ``extra_kwargs`` is guaranteed non-None at the
point of use.
3. Greptile P2: misleading "already translated" docstring
The docstring claimed the translator above mapped
``output_config.format`` to ``response_format``, but Greptile
correctly traced the code and found that only the legacy top-level
``output_format`` was being translated — ``output_config.format``
was being silently dropped on the adapter path. Two-part fix:
a. Code: extended ``_translate_output_format_to_openai`` to accept
both shapes (top-level ``output_format`` AND
``output_config.format`` sub-key). Top-level still takes
precedence when both are supplied. This means callers using the
newer Anthropic Structured Outputs API now have their schema
properly forwarded to non-Anthropic backends as
``response_format``.
b. Tests: rewrote the misleading docstring to describe what
actually happens, plus added two new tests:
* ``test_output_format_top_level_still_translates`` —
regression guard for the legacy path
* ``test_output_format_takes_precedence_over_output_config_format``
— documents the precedence rule explicitly
Tests: 28/28 pass (was 26/26 before; +2 for the new translation
behavior + precedence). All run in ~0.5s, no real network calls.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 12:03:55 -04:00