litellm/tests/unit/decisions
Michael Bennett fd6c00200c
feat(decisions): support Vercel AI Gateway decision models (#50642)
* feat(decisions): support Vercel AI Gateway decision models

* test(decisions): cover Vercel AI Gateway dispatch through the proxy

* feat(decisions): add Vercel AI Gateway cost map rows for Jev

* fix(decisions): bill Vercel AI Gateway decisions at the charge Vercel reports

Vercel returns the charge for every call under provider_metadata.gateway.cost, already net of cache
discounts, so unpriced evaluation models and luna cache hits now bill what Vercel charged instead of
zero or the full input rate. Jev 1.14.0 and the jev alias also take box questions, as Vercel serves them

* fix(decisions): bill Vercel gateway charges with margin and BYOK, forward providerOptions

Decisions now records a provider's reported charge as upstream_usage_cost, so the
operator's cost discount and margin apply to it like any other provider-billed cost.
Vercel calls served on the caller's own provider key bill marketCost on top of the
gateway fee, the cache split comes from the upstream usage Vercel nests under
provider_metadata, providerOptions reach the gateway, remote images are inlined, and
typesafe-ai/jev, which reads text only, refuses or drops images

* fix(decisions): stop forwarding caller providerOptions to Vercel and send Jev images

Decisions no longer sends a caller's providerOptions to Vercel. Gateway
routing and provider keys are set on the Vercel team instead.

Vercel serves typesafe-ai/jev images at 768x768 (the earlier 400 came from
a 96x96 image TypeSafe rejects for its size), so the Jev rows read images
and the per-model image refusal is removed.

* fix(decisions): report provider charges on the cost header and read Vercel's cache split from the serving provider

Decisions goes back to reporting a provider's own charge through the
response cost header, the way main does for OpenRouter. Moving it onto
upstream_usage_cost dropped every cost header on free calls, priced
base_model deployments from the cost map, and put the margin in the
response header but not in the SystemOne body cost.

Vercel's cache split now comes from the provider_metadata entry of the
provider that served the call, and only when that entry reports
input_tokens_details. Any credentialType value is accepted. The Jev
1.13.0 and 1.14.0 rows record their image probes.

* test(decisions): type the async image fetch fixture in the Vercel inline image test

---------

Co-authored-by: mateo-berri <277851410+mateo-berri@users.noreply.github.com>
2026-11-14 09:43:08 -05:00
..
__init__.py feat(decisions): add unified /v1/decisions endpoint for Jev-compatible providers (#44236) 2026-10-03 17:38:38 +00:00
test_call.py feat(gemini): support gemini-decision-1 on /v1/decisions and /v1/systemone (#51220) 2026-11-11 18:33:22 -08:00
test_main.py feat(decisions): support Vercel AI Gateway decision models (#50642) 2026-11-14 09:43:08 -05:00