Repository navigation
feat(decisions): backport Microsoft-Decision-1 and the decision models Admin UI to rc/1.106.0 (#45639, #45673, #45654, #45717) - #45735
Conversation
|
|
|
|
bugbot run |
|
bugbot run |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 8b631ac. Configure here.
The rc tree equals this branch's #45735 commits, so the merge keeps this tree as is.
TLDR
This backports the decisions launch onto rc/1.106.0 as a key feature (
# key-feature: decisions), so it ships in the next 1.106.0 rcProblem this solves:
/v1/systemoneor/v1/decisionsHow it solves it:
azure_ai/Microsoft-Decision-1cost map rowazure_aideployments to the decisions APIIntentional product change (from #45654): the cost optimization feedback banner on Models + Endpoints is replaced by the decision models announcement, so admins lose that page's link to the feedback form. The announcement has its own dismissal, so admins who closed the old banner still see it once
User Flow
Before
A proxy admin on rc/1.106.0 with a Microsoft-Decision-1 deployment on Azure AI Foundry cannot call it, price it, find it, or test it
azure_ai/decision-1and send POSThttps://litellm-domain/v1/systemone. It answers 400 "Unknown Decisions provider 'azure_ai'"https://litellm-domain/v1/model/infoshows no input or output price for ithttps://litellm-domain/ui/models-and-endpointsthe banner asks for cost optimization feedback, and nothing mentions decision modelsdecisioninto Provider shows "No providers found"https://litellm-domain/ui/playground?tab=system-oneon/v1/systemonehas no Model picker, and Send fails with "Invalid model name passed in model=your-decision-model"After
The same admin gets calibrated answers from Microsoft-Decision-1, billed for input tokens at its Azure price, and can find and test it in the Admin UI
https://litellm-domain/v1/systemoneanswers 200 withnoulandchoiceanswers and an input-onlyx-litellm-response-costhttps://litellm-domain/v1/model/infoshows $0.042 per 1M input tokens and $0 for output, and the Deployed Models table shows IN $0.04 and OUT $0.00decisioninto Provider lists Azure AI Foundry (Studio) with "Decision models: Microsoft-Decision-1", plus the other decision providers/v1/systemonehas a Model picker withmicrosoft-decision-1, and Send shows calibrated probabilitiesPicks
Cherry-picked from main in merge order, one commit per PR, with the original author kept
feat(azure): add azure_ai/Microsoft-Decision-1(de6a071)feat(azure_ai): support Microsoft-Decision-1 on the decisions API(2fcc780)feat(ui): let admins find, call, and test decision models from the Admin UI(e2276ac)fix(model_prices): drop unverified output price for azure_ai/Microsoft-Decision-1(674208b)Every added and removed line in each pick is identical to its source commit (2 files +14, 9 files +216, 29 files +1135 -162, and 4 files +114 -8). #45717 applied clean. The other conflicts were only in context lines that main has and the rc does not, and each was resolved by keeping just the pick's own lines
twelvelabs.pegasus-1-5-v1:0row, which is on main but not the rc. Only theazure_ai/Microsoft-Decision-1row went intest_decisions_wire.pygot only theazure_airow (the Databricks row is feat(decisions): add Databricks ai_decide as a /v1/decisions provider and auto-router decider #45200),proxy_config.yamlgot only theazure_ai/decision-1model (the hosted_vllm entry is feat(decisions): add hosted_vllm provider #45501), andtests/unit/decisions/test_main.pygot only theazure_aitests (the OpenRouter cost test is fix(openrouter): bill Responses, Decisions and pass-through from OpenRouter usage.cost, always allow reasoning params #45640)AddModelForm.integration.test.tsx. Only theEMPTY_DECISION_CATALOGimport went in, since the other main-side imports belong to tests the rc does not have#45717 merged after this backport started and is in because it fixes the price row #45639 adds. Without it the rc would bill output tokens at a price main already dropped
No hidden prerequisite was needed. The picked tests pass on the line without #44955, #45200, #45501, or #45640, which stay off the rc
Tests on the backport tip
tests/unit/decisions/test_main.pyandtests/unit/test_cost_map_guard.pypass (80 tests, the newazure_aiand evaluation-row ones included)ci_cd/cost_map_guard.pypasses against the rc basenpm run typecheckexits 0Pre-Submission checklist
Please complete all items before asking a LiteLLM maintainer to review your PR
uv run pytest tests/unit/<your_test_file>.py -v. Leave the suites (make test-unit-*,make test-unit) to CI: it finishes in ~15 minutes where a laptop takes an hour or more@greptileaito re-request a review after pushing changes)Delays in PR merge?
If you're seeing a delay in your PR being merged, ping the LiteLLM Team on Slack (#pr-review).
Screenshots / Proof of Fix
Two local proxies with Postgres, one at the rc tip and one at this PR's tip, each run with
LITELLM_LOCAL_MODEL_COST_MAP=Trueso the bundled cost map is the one priced. Both call the same real Microsoft-Decision-1 GlobalStandard deployment (decision-1) on Azure AI Foundry. The Admin UI ran through each side's dashboard dev server in headless Chromium at 1440x900, logged in as the proxy adminsystemone.json{"model":"microsoft-decision-1","state":"Ticket (billing): The export job hangs at 99% and never finishes","questions":{"defect":{"type":"noul","instructions":"Is this a defect?"},"severity":{"type":"choice","instructions":"How severe is it?","criteria":{"low":"cosmetic","high":"blocks users"}}}}Before (bbcc985, rc/1.106.0 tip)
System One call (#45673)
curl -sS -i -X POST http://localhost:$PORT/v1/systemone -H "Authorization: Bearer $LITELLM_MASTER_KEY" -H 'Content-Type: application/json' -d @systemone.jsonPrice (#45639)
curl -sS http://localhost:$PORT/v1/model/info -H "Authorization: Bearer $LITELLM_MASTER_KEY"microsoft-decision-1entry has"key": "azure_ai/decision-1","input_cost_per_token": null, and"output_cost_per_token": nullAdmin UI (#45654)
http://localhost:$DEV/ui/models-and-endpoints. The banner asks for cost optimization feedback (first screenshot under User Flow Before)decisioninto Provider. It shows "No providers found" (second screenshot)http://localhost:$DEV/ui/playground?tab=system-one, pick System One/v1/systemoneas the Endpoint, and click Send. There is no Model picker, and the response panel says "System One request failed /decisions: Invalid model name passed in model=your-decision-model" (third screenshot)After (8b631ac)
System One call (#45673)
The cost is 65 input tokens at $0.042 per 1M, the row #45639 adds, and output is free per #45717
Price (#45639, #45717)
/v1/model/infocurl"key": "azure_ai/Microsoft-Decision-1","input_cost_per_token": 4.2e-08, and"output_cost_per_token": 0.0Admin UI (#45654)
http://localhost:$DEV/ui/models-and-endpoints. The banner says "Decision models are now supported", and the deployment's Costs column shows IN $0.04 and OUT $0.00 (first screenshot under User Flow After)decisioninto Provider. Azure AI Foundry (Studio) is listed with "Decision models: Microsoft-Decision-1", followed by Cloudflare, OpenAI, OpenRouter, Perplexity, Strands Decider, and TypeSafe (second screenshot)http://localhost:$DEV/ui/playground?tab=system-one, pick System One/v1/systemone, and click Send. The Model picker showsmicrosoft-decision-1, and the panel shows calibrated probabilities from it, with 215 input and 3 output tokens (third screenshot)Type
🆕 New Feature
Caveats (if any)
Copied from the source PRs and re-read against rc/1.106.0. #45639 and #45673 listed none
Low
gpt-6-lunaare typed into the JSON, not pickedrequests, not the OpenAI SDK/v1/decisionssupport (feat(azure_ai): support Microsoft-Decision-1 on the decisions API #45673) is in this backport tooEVALUATION_OUTPUT_PRICE_SOURCESwith the quoted source before the price can come back (fix(model_prices): drop unverified output price on Microsoft-Decision-1 and guard evaluation rows #45717)pull_request_target, so this PR is checked with the rc's guard code and the new rule applies to later rc PRs (fix(model_prices): drop unverified output price on Microsoft-Decision-1 and guard evaluation rows #45717)Final Attestation