跳至主要內容
LiteLLM 正在遷移至 Rust 閱讀最新進度更新。

v1.84.0 - 可靠性強化 + 多 pod 預算準確性

部署此版本​

docker run \
-e STORE_MODEL_IN_DB=True \
-p 4000:4000 \
docker.litellm.ai/berriai/litellm:1.84.0

版本命名變更​

自 v1.84.0 起,LiteLLM 版本遵循 PEP 440。 穩定版會移除 -stable 後綴,因此此版本的 Docker 標籤是 litellm:1.84.0,而不是 litellm:1.84.0-stable。每個 Docker 標籤都會以裸格式與 v 前綴格式同時發布(litellm:1.84.0 和 litellm:v1.84.0 會解析為同一個映像),因此包含 v 前綴的既有固定版本仍可正常運作。PyPI 版本仍維持裸的 PEP 440 格式:pip install litellm==1.84.0。如果您在部署工具(Helm values、requirements.txt、Renovate 規則等)中鎖定 LiteLLM,請將這些鎖定更新為 PEP 440 格式。

從舊有後綴方案到新的 PEP 440 方案的對應如下:

頻道舊版(≤ v1.83.x)新版(≥ v1.84.0)
穩定版vX.Y.Z-stablevX.Y.Z
穩定版修補vX.Y.Z-stable.patch.NvX.Y.Z.postN
發行候選版vX.Y.Z.rc.N / vX.Y.Z-rc.NvX.Y.ZrcN
開發版 / nightlyvX.Y.Z-nightly / vX.Y.Z.dev.NvX.Y.Z.devN

這只是名稱變更;發布節奏、穩定性保證與映像內容都沒有改變。v1.84.0-rc.1 標籤(在切換前截取)為了歷史延續而保留舊格式;從 v1.84.0 起的每個標籤都會使用 PEP 440 格式。


提醒:大量行為變更。 此版本整合了大量在短時間內發佈的可靠性與強化工作。下方的 重要行為變更 章節會涵蓋所有會變更預設值、移除組態捷徑,或改變請求/回應格式的項目,以及讓您維持先前行為所需的停用方式。升級正式版部署前,請先閱讀該章節。如果您已經對 v1.84.0-rc.1 完成驗證,請參閱 自 v1.84.0-rc.1 以來的變更 章節,了解 rc 之後的差異。

重點摘要​

  • 轉送端點預設需要驗證。 auth 欄位在 general_settings.pass_through_endpoints 底下的項目現在預設為 true。過去「OSS 預設提供未驗證的 forwarder;auth: true 僅限企業版」的組合已經移除:auth: true 可在 OSS 上運作,而想要未驗證 forwarder 的操作者必須明確設定 auth: false。
  • 多 pod 預算強制執行的準確度明顯提升。 RedisCache.async_increment 新增 refresh_ttl 的選用加入,支出計數器也加入該機制,而在 Redis 正常失敗時,過時的記憶體內計數器會被跳過。ResetBudgetJob 會在 DB 重設時一併使 Redis 計數器失效,因此重新整理後的計數器也會被重設。
  • Prisma DB 重新連線不再凍結 event loop。 重新連線路徑把 await self.db.disconnect()(其會同步呼叫 subprocess.Popen.wait())替換為 SIGTERM→SIGKILL → 全新的 Prisma()+connect() 序列。資料庫閃斷期間,存活探針不再失敗。相應修正恢復了 PrismaClient.get_generic_data 的重新連線與重試。
  • 記憶體占用降低約 700 MB:在雙 worker Docker 部署中,這是透過延遲載入功能路由器與延遲載入首頁達成。對延遲路由的第一次請求會承擔匯入成本;後續請求則不變。
  • MCP OAuth + Azure Entra 探索支援、可選的短 ID 工具前綴以讓 MCP 工具名稱維持在 60 字元限制內,以及 OAuth 根端點可見性現在與明確的伺服器名稱查詢一致。
  • 透過新的 /v1/workflows/runs REST 介面進行持久化代理程式工作流程執行追蹤,其由 LiteLLM_WorkflowRun / LiteLLM_WorkflowEvent / LiteLLM_WorkflowMessage 資料表支援。支出記錄 session_id 聯結,用於免費成本歸因。
  • 透過 Routing Groups 提供每個模型的路由策略。 新的 router_settings.routing_groups 結構將一組 model_name 綁定到其自身的路由策略(例如 latency-based-routing 用於 gpt-4o、simple-shuffle 用於較便宜的模型),且都在單一 router 內。可在 proxy_config.yaml 中設定,或在 LiteLLM 儀表板的 General Settings → Routing Groups 中設定;由 UI 管理的 groups 會保留並覆寫 YAML 值。

自 v1.84.0-rc.1 以來的變更​

以下所有內容都是建立在 v1.84.0-rc.1 之上,並包含在 v1.84.0 中。如果您已經對 rc 完成驗證,這是唯一需要重新測試的差異。

加固​

  • /key/update 授權檢查 — PR #27878
  • /key/regenerate 所有權重新綁定 + premium-gate 防護 — PR #27793
  • 在 file-input sinks 拒絕裸字串,以防止透過精心構造的請求主體讀取本機檔案。請見 PR #27762
  • 拒絕 config-file 路徑外的 remote-URL instance-fn 載入。 請見 PR #27801
  • 在 banned-params 檢查中涵蓋 extra_body + azure_ad_token — PR #27898
  • MCP BYOK / OAuth:在 RAG ingest vector_store 設定中封鎖 SSRF 欄位;封鎖透過請求主體進行的 client-side pricing 注入 — PR #27892

預算保留​

  • 將每個請求的預算保留上限設為固定值,而不是在沒有 max_tokens 的請求上,把整個剩餘的 team/key/user 預留額度都綁定住。請見 PR #27509
  • 圖片生成:預留每張圖片成本,而不是 max-tokens 成本;嚴格依 model mode 進行門控

健康探針​

  • 在未驗證的 /health/readiness payload 上重新暴露 db 狀態,使外部探測可在無需驗證的情況下區分 DB 無法連線的 worker。請見 PR #27866
  • UI 從 /health/readiness/details 取得 litellm_version + is_detailed_debug(受驗證保護),因為這些欄位已從公開 payload 移出。請見 PR #27896
  • UI:停用 /health/readiness/details 的重試 + 涵蓋 token 轉送

MCP​

  • 將 MCP client 中設定的 extra_headers 轉送到上游 OpenAPI HTTP 呼叫(關閉 #26794)。請見 PR #27383
  • 在相同的轉送路徑上,名稱衝突時 static_headers 現在會優先於呼叫端轉送的 extra_headers(不區分大小寫)。請見下方 重要行為變更 → MCP。

SERVER_ROOT_PATH 下的路由​

  • 在非空 SERVER_ROOT_PATH 下的延遲功能載入,不再會在 /api/v1/policies/attachments/list 等路由上回傳 404;在 lazy-feature 比對前先移除前綴,並在 middleware init 時快取正規化後的路徑。請見 PR #27812

標記與指標​

  • ⚠️ 回復 v1.83.10 的 caller-tag strip / allow_client_tags 選用。 呼叫端提供的 tags 會再次合併到請求中繼資料;不再強制執行 strip。完整影響請參閱下方「重要行為變更 → Tags」中的新條目。 請見 PR #27789
  • 將 /metrics 的 401 提示指向實際的停用旗標 — PR #27505

封裝​

  • 將核心執行階段固定版本放寬為範圍,讓下游套件可解析出單一共用的 openai/等版本。請參閱 PR #27241
  • 將 jinja2 的最低版本在 [project.dependencies] 提升至 >=3.1.6,以符合 lockfile。請參閱 PR #27552

⚠️ 重要行為變更​

此版本收緊了認證、入口、回呼、MCP 與 UI 的多項預設值。以下每一項都會說明變更內容,並在適用時列出還原先前行為所需的精確設定。

驗證與請求進入​

預設直通端點為 auth: true​

  • 變更內容: PassThroughGenericEndpoint.auth 現在預設為 True。user_api_key_auth.py 中的執行階段分派會將端點視為原始 dict,因此即使 dict 沒有明確的 key,endpoint.get("auth", True) 仍會套用。premium_user 在 auth: true 上的 gate 也已移除,因此 OSS 部署現在可使用 auth: true。
  • 受影響對象: general_settings.pass_through_endpoints 中任何省略 auth: 的 pass-through 項目。在此 rc 之前,這代表未驗證;現在則代表已由 LiteLLM-key 驗證。
  • 還原先前行為: 對每個預期公開的 pass-through 項目(例如 webhook 接收端)明確設定 auth: false。
    general_settings:
    pass_through_endpoints:
    - path: /webhook/something
    target: https://example.com/webhook
    auth: false # was implicit before; must be explicit now

用戶端 api_base / base_url 受控管且會移除憑證​

  • 變更內容:

    1. 當 litellm.user_url_validation 啟用時,client-side 的 api_base / base_url 會根據 validate_url 進行驗證。
    2. 當請求重新導向 api_base / base_url 時,管理員設定的提供者憑證與每個部署的中繼資料(OCI 簽章金鑰、AWS / Azure / Vertex token、可觀測性變數、CredentialLiteLLMParams 上的每個欄位)都會在呼叫轉送前被移除。
    3. get_llm_provider_logic.py 中的提供者推斷比對器不再進行未錨定的子字串比對;現在會比較解析後 URL 的 hostname + 以段落邊界為界的 path prefix。
    4. client-side 可覆寫參數的黑名單新增 aws_bedrock_runtime_endpoint、langsmith_base_url、langfuse_host、posthog_host、braintrust_host、slack_webhook_url、s3_endpoint_url、sagemaker_base_url、deployment_url。原本「當 api_key 非空時,黑名單不生效」的條款已移除。
  • 受影響對象: 任何在請求時傳入 api_base(或任何新加入黑名單的欄位),並依賴隱式 api_key 繞過來傳遞它的人。

  • 還原先前行為: 改用文件記載的 BYOK 路徑,而不要使用繞過:

    • 整體 Proxy:general_settings.allow_client_side_credentials: true
    • 每個部署:litellm_params.configurable_clientside_auth_params: ["api_base", ...]

    Proxy 在阻擋請求時回傳的 400 會指出有問題的欄位,並連到相同的兩個設定。

主金鑰請求現在傳遞別名,而非主金鑰雜湊​

  • 變更內容: 當請求以主金鑰驗證時,傳給下游程式碼的 UserAPIKeyAuth.api_key / token 值現在為常數 LITELLM_PROXY_MASTER_KEY_ALIAS = "litellm_proxy_master_key"。快取查詢不變(仍以 hash_token(master_key) 為鍵)。_is_master_key 不再接受 SHA-256 雜湊形式,只接受原始主金鑰。
  • 受影響對象: 任何會以先前的主金鑰雜湊值進行 join 或 filter 的功能,包括針對支出記錄的自訂儀表板,以及固定在雜湊字面值上的 Prometheus /metrics 查詢。
  • 還原先前行為: 無。查詢主金鑰活動的支出記錄或指標的營運者,應將篩選條件改為別名 "litellm_proxy_master_key"。
  • 變更內容: GET /onboarding/get_token 會回傳一個與邀請 + 使用者 id 綁定、效期 15 分鐘的簽署版 onboarding JWT;它不會鑄造 sk-... 虛擬金鑰。POST /onboarding/claim_token 需要該 JWT,並透過 update_many(... is_accepted=False, ... → True) 原子化地保留邀請。
  • 受影響對象: 任何曾在完成密碼認領前,將 GET /onboarding/get_token 用於內嵌的 sk-...,並把它當作可用 session 金鑰的工具。
  • 還原先前行為: 無。用戶端必須呼叫 POST /onboarding/claim_token 以取得有效金鑰。

CLI SSO 登入流程使用伺服器端工作階段​

  • 變更內容: litellm-proxy login 現在會啟動一個 CLI SSO 流程,回傳登入 id + polling secret + 終端驗證碼。瀏覽器回呼必須先確認終端代碼,polling 端點才會回傳 JWT。
  • 受影響對象: 任何使用較舊 litellm-proxy CLI 搭配升級後 proxy 的人,因為舊的由呼叫端提供 handle 的交接方式已移除。
  • 還原先前行為: 無。請將 CLI 與 proxy 一併升級。

團隊自助加入(_is_available_team)只允許以 role=user 自行加入​

  • 變更內容:
    • /team/member_add:當呼叫者不是管理員且 team 為「可用」時,請求必須只新增呼叫者本人且權限為 role="user"。批次形狀也會以相同方式檢查;混合了有效自我項目與 role="admin" 項目的清單會被拒絕。僅含電子郵件的成員在自我加入路徑上會被拒絕。
    • /team/permissions_update:_is_available_team 子句已完全移除,因此只有 proxy/team/org 管理員可以更新 team_member_permissions。
  • 受影響對象: 任何依賴全面繞過,來在沒有管理員權限的情況下把管理員加入可用 team,或從非管理員情境修改 team_member_permissions 的流程。
  • 還原先前行為: 無。請使用管理員範圍的金鑰執行管理員操作。

防護欄修改權限以金鑰存在為門檻​

  • 變更內容: auth_checks.py 中的 guardrail 修改授權檢查現在改為根據意圖(即該 key 是否存在於請求中)進行 gate,而不是根據 payload 的真值判斷。某些先前可接受的形狀現在會回傳 403。
  • 還原先前行為: 無。對於先前會因為 falsy payload 而意外通過的非管理員呼叫者,必須更新流程。

不受信任的根控制欄位會從用戶端請求中移除​

  • 變更內容: _UNTRUSTED_ROOT_CONTROL_FIELDS 的 litellm_pre_call_utils.py 中包含 mock_response、mock_tool_calls、redaction-bypass 控制項,以及其他幾項。除非呼叫的 key/team 帶有 allow_client_mock_response: true(適用於 mock_response / mock_tool_calls)或 redaction bypass 對應的管理員 opt-in 中繼資料,否則這些項目會自用戶端請求中移除。未明確允許時,Pillar guardrail 快取標頭與 Bedrock 動態評估覆寫也會被過濾。
  • 受影響對象: 在 extra_body 中傳入 mock_response / mock_tool_calls 以提前終止 completions 的測試與工具。
  • 還原先前行為: 在測試金鑰(或其所屬 team)的管理員中繼資料中設定 allow_client_mock_response: true:
    client.keys.generate(
    key_alias="ci-mock-key",
    metadata={"allow_client_mock_response": True},
    )

LiteLLM-Changed-By 稽核歸因需要明確選擇加入​

  • 變更內容: 稽核記錄只有在呼叫的 key(或其 team)在中繼資料中帶有 allow_litellm_changed_by_header: true 時,才會接受 LiteLLM-Changed-By 標頭。若未 opt-in,changed_by 會退回到呼叫 key 的 user_id。先前該標頭一律會被接受,任何呼叫者都能重寫稽核歸因。
  • 受影響對象: 代表使用者呼叫管理端點,並依賴該標頭作為稽核追蹤中「Changed By」值的平台。主金鑰無法 opt-in(它沒有儲存的中繼資料);請改用管理員 virtual key 傳送標頭。
  • 還原先前行為: 在送出標頭的 key(或其 team)上設定 opt-in:
    curl -X POST 'http://0.0.0.0:4000/key/update' \
    -H "Authorization: Bearer $LITELLM_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{"key": "<admin key that sends the header>", "metadata": {"allow_litellm_changed_by_header": true}}'

錯誤回應不再洩漏重新拋出的本地參數​

  • 變更內容: response-utils 路徑中的廣泛 except 處理器過去會將捕捉到的請求參數渲染進重新拋出的錯誤訊息。那些參數可能包含憑證,因此現在會從渲染後的訊息中移除。
  • 受影響對象: 任何會從 5xx 錯誤本文中解析出類憑證欄位的用戶端。錯誤回應的形狀其餘部分不變。
  • 還原先前行為: 無。

向量儲存​

已移除憑證中的識別資訊;/vector_store/update 針對每個儲存區受控管​

  • 變更內容:
    • /vector_store/list、/vector_store/info、/vector_store/update 會將持久化的 litellm_params 中包含憑證的值遮罩(可處理 dict、JSON 字串序列化的參數,以及像 litellm_embedding_config 這類巢狀 dict 形狀)。
    • /vector_store/update 現在受 _fetch_and_authorize_vector_store 約束,與 /vector_store/info 已有的每個 store 存取檢查相同。
    • SensitiveDataMasker 已將複數形式的 "credentials" 新增至其預設敏感模式集合,因此以區段精確比對可捕捉 vertex_credentials、aws_credentials 等。(這是潛在修正,影響所有以預設值初始化的 masker,不僅是向量儲存。)
    • get_vector_store_info 與 update_vector_store 會重新拋出 HTTPException,而不是讓全捕捉例外處理將 403 / 404 降級為 500。
  • 受影響對象: 任何會從這些回應讀取 litellm_params 以復原提供者金鑰的功能,或任何非 store 管理員呼叫端透過 /vector_store/update 修改任意向量儲存。
  • 還原先前行為: 無。

記錄回呼與金鑰/團隊中繼資料​

金鑰/團隊中繼資料中的 os.environ/* 回呼參照不再解析​

  • 變更內容: convert_key_logging_metadata_to_callback() 不再透過 get_secret() 從 key/team 中繼資料解析 os.environ/* 值。現有包含這類值的資料列會在請求設定時被靜默忽略,而不是讓請求當場崩潰。受信任的 config.yaml team-callback env 解析在 add_team_based_callbacks_from_config() 中維持不變。從 key/team 記錄中繼資料新建的 AddTeamCallback 也會拒絕 os.environ/* callback vars。
  • 受影響對象: 任何在其 callback 中繼資料中儲存 os.environ/DATABASE_URL(或類似值),以便在請求時取得伺服器環境變數的 key/team。
  • 還原先前行為: 請透過受信任的 proxy config.yaml(team_callbacks / model_list[*].litellm_params)設定這些 callback secrets,而不要在由資料庫支援的 key 或 team 中繼資料中放入 os.environ/* 參照。如有絕對必要,仍可在中繼資料中儲存字面量憑證值。

團隊回呼的管理員異動現在會發出稽核記錄​

  • 變更內容: POST /team/{id}/callback(add_team_callbacks)與 POST /team/{id}/disable_logging(disable_team_logging)在 LiteLLM_AuditLogs 時會產生 litellm.store_audit_logs=True 資料列。啟用稽核記錄時為附加式變更。
  • 還原先前行為: litellm.store_audit_logs: false(預設值)會抑制新的資料列。

MCP​

靜態保存時已加密的使用者範圍 MCP 憑證​

  • 變更內容: 對 LiteLLM_MCPUserCredentials.credential_b64 的寫入現在透過 encrypt_value_helper(nacl SecretBox)進行,而不是明文 urlsafe_b64encode。讀取路徑會先嘗試 nacl 解密,並對舊資料列回退到明文 urlsafe_b64decode;現有資料列仍可讀取。
  • 受影響對象: 直接讀取該表的營運人員;欄位內容在第一次重新寫入時會改變形狀。
  • 還原先前行為: 無。向後相容的讀取路徑會讓舊資料列持續可用,直到它們下次被寫入。

OAuth 中繼資料探索遵循 SSRF 防護​

  • 變更內容: MCP discovery 所遵循的兩個 URL(來自 WWW-Authenticate 的 resource_metadata,以及來自 protected-resource-metadata 的 authorization_servers[0])現在都受 async_safe_get 約束。同一 authority 的中繼資料擷取仍保持直接(含 follow_redirects=False);跨來源擷取則透過既有的使用者 URL 驗證政策進行驗證。公開聯邦提供者(Azure Entra、Google、Okta、GitHub)仍受支援。
  • 受影響對象: 跨來源的內部/迴路本機/cloud-metadata OAuth 中繼資料 URL。
  • 還原先前行為: 切換 litellm.user_url_validation,並依 proxy URL 驗證文件中的既有 URL 驗證控制,允許您特定的內部目標。

MCP 公開路由偵測不再匹配查詢字串;OAuth2 備援不再在失敗時開啟​

  • 變更內容:
    • MCPRequestHandler.process_mcp_request 檢查的是 request.url.path.startswith("/.well-known/"),而不是 ".well-known" in str(request.url)。像 ?.well-known 這類查詢字串 smuggling 會被拒絕。
    • 當 Authorization 標頭未通過 LiteLLM 金鑰驗證時,處理常式不再將失敗視為「OAuth2 passthrough」,而是回傳空的 UserAPIKeyAuth()。
  • 還原先前行為: 無。

MCP OAuth 根端點依請求可見性規則解析​

  • 變更內容: 根端點 fallback 會以與明確伺服器名稱查找相同的可見性規則解析單一 OAuth2 伺服器;不可見伺服器不再透過 fallback 路徑被選取。回呼重新導向路徑會驗證 state 中攜帶的完整用戶端重新導向 URI,並在不丟失既有查詢字串的情況下附加參數。
  • 還原先前行為: 無。請調整伺服器可見性,而不要仰賴 fallback。

OpenAPI MCP:static_headers 現在優先於呼叫端轉送的 extra_headers​

  • 變更內容: v1.84.0 透過 PR #27383 為以 OpenAPI 為基礎的 MCP 伺服器(spec_path: 設定)引入標頭轉送,讓您可將呼叫端請求標頭加入上游 OpenAPI HTTP 請求的 allowlist。當相同標頭名稱同時出現在您的 YAML static_headers 與請求時的 extra_headers allowlist 中時,static_headers 值現在會勝出,且名稱比較採不分大小寫,因此 X-Tenant-Id 與 x-tenant-id 會被視為相同標頭。這與受管理的 MCP 路徑一向的行為一致。Authorization 仍會在最後被 BYOK x-mcp-auth token 覆寫(若有提供)。
  • 範例: 使用
    mcp_servers:
    data_api:
    spec_path: http://upstream-api.local/openapi.json
    static_headers:
    X-Tenant-Id: "acme-corp"
    extra_headers:
    - X-Tenant-Id
    的情況下,呼叫端送出的 X-Tenant-Id: evil-corp 現在會讓 X-Tenant-Id: acme-corp 傳送到上游。extra_headers 中任何不與 static_headers 衝突的標頭仍會維持原樣轉送。
  • 受影響對象: 在 OpenAPI MCP 伺服器上同時於 static_headers 與 extra_headers 設定相同標頭名稱,且原本依賴呼叫端值生效的營運人員。(注意:這只在 v1.84.0 release-candidate 週期中出貨;任何先前穩定版都完全沒有為 OpenAPI MCP 轉送 extra_headers。)
  • 還原先前行為: 無。如果您 वास्तव需要讓呼叫端控制某個標頭,請將其從 static_headers 移除,並只保留在 extra_headers,或為營運人員固定的值與呼叫端提供的值使用不同名稱。

UI / 靜態資產​

/get_image、/get_favicon、/get_logo_url​

  • 變更內容:
    • 遠端 HTTP(S) UI_LOGO_PATH / LITELLM_FAVICON_URL 現在會透過重新導向由瀏覽器載入;proxy 不再從這些未驗證端點在伺服器端擷取它們。
    • 本機檔案路徑仍可原地使用,但解析後的檔案必須具有支援的圖片簽章(jpeg、png、gif、webp、ico);非圖片路徑會回退至內建預設值。
    • /get_logo_url 只會回傳 HTTP(S) 值;本機檔案系統路徑不會被揭露。
    • 已過時的 cached_logo.jpg 檔案不再由 /get_image 提供。
  • 受影響對象: 將 UI_LOGO_PATH / LITELLM_FAVICON_URL 指向非圖片本機檔案的自訂品牌設定,或依賴 /get_logo_url 顯示本機路徑的設定。
  • 還原先前行為: 不需要新的 env vars。既有遠端 URL 仍可正常運作;本機圖片路徑也仍可正常運作,只要檔案是可識別的圖片類型。

移除 /ui/chat​

  • 變更內容: 靜態 chat.html / chat.txt / chat/ 已移除;該路由回傳 404。聊天 UI 早已從導覽中移除;殘留的靜態建置現在也一併移除。
  • 還原先前行為: 無。

「將提示詞儲存在支出記錄中」切換項已移至管理員設定​

  • 變更內容: 「將 Prompts 儲存在 Spend Logs 中」與「Maximum Spend Logs Retention Period」都已從 Logs 頁面的齒輪圖示 modal 移至 Admin Settings → Logging Settings。該齒輪對非管理員可見,且在儲存時會出現 403。
  • 還原先前行為: 無。控制項僅供管理員使用,因為 /config/update 與 /config/list 早已要求如此。

標籤​

⚠️ 已回復:v1.83.10 呼叫端標籤移除 / allow_client_tags 選擇加入​

  • 變更內容: 此版本回復了 v1.83.10 的破壞性變更,該變更會移除呼叫端提供的標籤,除非 key/team 中繼資料具有 allow_client_tags: true。 來自 x-litellm-tags、層級為 body 的 tags,以及 metadata.tags 的呼叫端提供標籤,現在會再次流入 metadata.tags,並與來自 key/team/project 中繼資料的管理員設定靜態標籤聯集,因此 proxy 的行為已回到 v1.83.10 之前的狀態。litellm_pre_call_utils.py 中的呼叫前移除區塊已刪除,且此旗標沒有 schema 或端點影響,因此現有 keys/teams 上殘留的 allow_client_tags: true 值不會產生作用。
  • 受影響對象:
    • 在 keys/teams 上設定 metadata.allow_client_tags: true 以啟用用戶端標籤的營運者:此旗標現在沒有作用,可隨時清理。
    • 依賴 v1.83.10 的移除功能來阻止用戶端提供的標籤進入基於標籤的路由或基於標籤的支出歸因的營運者:此移除功能不再強制執行。 請在升級前重新評估您基於標籤的路由與成本歸因風險。
  • 恢復先前行為: 無。移除路徑已從 proxy 中移除。若必須阻止呼叫端提供的標籤,請在上游(gateway / ingress)或自訂呼叫前 hook 中過濾。

新模型/更新模型​

新模型支援(16 個新模型)​

提供者模型Context Window輸入($/1M tokens)輸出($/1M tokens)功能
OpenAIgpt-image-2, gpt-image-2-2026-04-21n/a (image)$5.00$10.00vision, pdf input
Azure OpenAIazure/gpt-image-2, azure/gpt-image-2-2026-04-21n/a (image)$5.00$10.00vision, pdf input
AWS Bedrockzai.glm-5200,000$1.00$3.20function calling, reasoning, tool choice
Crusoecrusoe/deepseek-ai/DeepSeek-R1-0528163,840$3.00$7.00reasoning
Crusoecrusoe/deepseek-ai/DeepSeek-V3-0324----
Crusoecrusoe/google/gemma-3-12b-it131,072$0.10$0.10function calling, vision, tool choice
Crusoecrusoe/meta-llama/Llama-3.3-70B-Instruct131,072$0.20$0.20function calling, tool choice
Crusoecrusoe/moonshotai/Kimi-K2-Thinking262,144$2.50$2.50reasoning
Crusoecrusoe/openai/gpt-oss-120b131,072$0.80$0.80function calling, tool choice
Crusoecrusoe/Qwen/Qwen3-235B-A22B-Instruct-2507262,144$3.00$3.00function calling, tool choice
Vertex AIvertex_ai/xai/grok-4.1-fast-reasoning2,000,000$0.20$0.50function calling, vision, reasoning, response schema, tool choice
Vertex AIvertex_ai/xai/grok-4.1-fast-non-reasoning2,000,000$0.20$0.50function calling, vision, response schema, tool choice
Vertex AIvertex_ai/xai/grok-4.20-reasoning2,000,000$2.00$6.00function calling, vision, reasoning, response schema, tool choice
Vertex AIvertex_ai/xai/grok-4.20-non-reasoning2,000,000$2.00$6.00function calling, vision, response schema, tool choice

新提供者(2 個新提供者)​

提供者端點備註
AIHubMix相容 OpenAI 的 chat completionsPR #24294
Crusoe跨 reasoning / instruct catalog 的 chat completions上方 catalog

定價更新​

  • OpenAI gpt-5.5-pro:已更正,因為它是 OpenAI 公開價格的 2 倍。gpt-5.5-pro 的成本追蹤輸出將降為先前版本回報的一半,因此在升級邊界上對帳支出報告的營運者應預期此不連續性。 - PR #26651
  • AWS Bedrock Anthropic Claude 4.5 / 4.6 / 4.7(Global + US):新增 cache_creation_input_token_cost_above_1hr(以及 Sonnet 4.5 的 _above_200k_tokens LC 變體)。Bedrock 上 1 小時 TTL 的 prompt-cache 寫入現在會依公開的 1.6× 費率計費,而不是回退到 5 分鐘費率(原先少計約 60%)。 - PR #26800

功能​

  • Bedrock
    • 在 Converse 路徑上保留 Claude 4.5+ 工具的 cache_control TTL;在 Invoke 路徑上清理 tools 區塊 - PR #25855
    • 在 tool-result 路徑上轉換 OpenAI file 內容(Bedrock Converse + direct Anthropic) - PR #26710
    • 透過 retrievalConfiguration 為向量儲存搜尋轉送 extra_body - PR #26685
  • Vertex AI
    • 將中繼資料標籤傳遞給 embeddings(labels)、Imagen(labels)與 Discovery Engine rerank(userLabels);跨路徑共用 helper - PR #25499
    • 透過 @lru_cache 重用 Anthropic-messages 設定實例,讓 VertexBase 憑證快取可跨請求保留 - PR #26099
  • Google Native
    • 在 :generateContent 和 :streamGenerateContent 上發出 LiteLLM proxy 成功標頭(x-litellm-*) - PR #25500
    • 在 :generateContent / :streamGenerateContent 上執行 pre_call_hook,使 guardrails 觸發 - PR #26914
  • Anthropic
    • 非串流的 JSON response_format + 使用者工具:過濾後的 tool calls + 結構化 JSON 合併到 content;內部 json_tool_call 不再顯示 - PR #26222
  • Ollama
    • 在 assistant messages 上轉送 tool_calls,並在 role: tool messages 上轉送 tool_call_id,修正多輪代理程式的無限 tool-call 迴圈 - PR #26122
  • Predibase
    • 將 transform_request / transform_response 移入 transformation.py(重構,無行為變更) - PR #25249
  • AIHubMix(新)
    • OpenAI 相容的第一類提供者入口 - PR #24294

錯誤修正​

  • Vertex AI
    • 在 anyOf 結構的陣列分支中保留 items,並搭配 null(Vertex 會拒絕 INVALID_ARGUMENT) - PR #26675
  • Bedrock
    • GET /v1/batches/{batch_id} 會從編碼後的 id 傳遞 model(原本會回傳 LiteLLM doesn't support bedrock for 'create_batch') - PR #26814
    • pass-through 串流中斷現在會刷新花費追蹤;來自用戶端中斷連線的 GeneratorExit 會漏掉每個區塊的使用量值 - PR #26719
    • 將已棄用的 Claude 3.7 Sonnet 測試參照在 16 個測試檔案中全部替換為 claude-sonnet-4-5-20250929-v1:0 - PR #26721
  • Router 自訂定價
    • 將來自資料庫 model_info 的自訂 cost_per_token 沿著備援路徑傳遞 - PR #25888

LLM API 端點​

功能​

  • Workflows API(新)
    • 持久化的代理程式工作流程執行追蹤。新增結構描述(LiteLLM_WorkflowRun、LiteLLM_WorkflowEvent、LiteLLM_WorkflowMessage)以及 /v1/workflows/runs/... 底下的 8 個端點(建立、列出、取得、修補、附加/列出事件、附加/列出訊息)。session_id 會與 LiteLLM_SpendLogs.session_id 連結,以便免費歸因成本。 - PR #26793
  • Vector Stores
    • 透過 extra_body 的 Bedrock retrievalConfiguration 傳遞,並針對每個提供者明確允許清單 - PR #26685

錯誤​

  • Responses API
    • DELETE /openai/responses/{id} 不再送出 json={},因為 Azure 現在會以 unexpected_body 拒絕空的 {} 主體 - PR #26949
  • Pass-through 端點
    • 在非串流的 pass-through 回應上呼叫請求後防護欄(/vertex_ai/*、/openai/*、/bedrock/*);僅在該路由已設定防護欄時才會選用 - PR #26262
    • 在為受管理檔案的 passthrough 批次建立製作 UserAPIKeyAuth 時,從 litellm_params 中繼資料繼承呼叫者身分(Anthropic + Vertex AI) - PR #26831
  • Embedding 快取
    • 在快取往返過程中保留 prompt_tokens_details(含 image_count);在擷取時彙總每個項目的詳細資料;針對部分快取命中,在 combine_usage() 中合併 - PR #26653
  • 串流記錄
    • 將串流隱藏回應成本回填到成功記錄路徑 - PR #26606
  • 成本計算
    • 統一 success_handler 的型別化與字典分支,使花費列不再記錄 0 及其造成的預算超支報告 - PR #26629

管理端點/UI​

功能​

  • 團隊
    • 團隊層級搜尋工具憑證:在 LiteLLM_ObjectPermissionTable 上新增 search_tools 陣列;每個金鑰的權限會驗證為擁有團隊權限的子集合;在團隊管理下提供 UI 選擇器 - PR #26691
  • Routing Groups
    • 全新的 一般設定 → Routing Groups 頁面:可直接從儀表板建立、編輯與刪除每個模型的路由策略,而無需編輯 proxy_config.yaml。由 UI 管理的群組會持久化並覆寫 YAML 中定義的值;每個群組的狀態會在儲存時重建 - PR #27131
  • 模型健康度
    • 模型健康狀態頁面上的分頁控制項 - PR #26826
  • CLI / Workers
    • --timeout_worker_healthcheck CLI 旗標(env TIMEOUT_WORKER_HEALTHCHECK):轉送至 uvicorn 0.37.0+ Config kwarg;較舊的 uvicorn = 警告 + 無操作;gunicorn / hypercorn 路徑不受影響 - PR #26622
  • 記憶體 / lazy loading
    • 在第一次請求時延遲載入可選功能路由器(兩個 worker 的 Docker 部署可降低約 700 MB 記憶體) - PR #26534
    • 延遲載入的 openapi.json 首頁;規格生成移至 CI,並在執行階段以 stub 備援 - PR #26802
  • 背景工作
    • 過期 LiteLLM 儀表板工作階段金鑰的清理工作 - PR #26460
  • MCP OAuth
    • 支援 Azure Entra 探索端點 - PR #26584

錯誤​

  • MCP UI
    • MCP 伺服器編輯頁面的工具設定面板已從 POST /mcp-rest/test/tools/list(暫時工作階段預覽,需要內嵌憑證)切換為 GET /mcp-rest/tools/list?server_id=...(已儲存的憑證)。已儲存且具有 auth_type、api_key、bearer_token、basic、authorization 的伺服器現在會載入工具,而不會出現「無法載入工具。連線 MCP 伺服器失敗。」 - PR #26002
  • 團隊
    • 具有 max_budget=NULL 的每位成員列現在會改為套用團隊層級強制執行,而不是靜默停用 - PR #26809
  • 花費記錄
    • 從花費記錄錯誤訊息中移除請求資料 - PR #26662
  • Vertex retrieve 模擬測試
    • 在模擬的 retrieve 回應上設定 is_redirect=False - PR #26844

AI 整合​

記錄​

  • 一般
    • Generic API 記錄器批次傳送新增可選的重試設定,因此暫時性的 litellm.Timeout / httpx.ConnectTimeout 失敗會重試,而不是直接丟棄該批次 - PR #26645
    • 快取用於 Redis 的 GCP IAM token(原本會每次連線都重新產生;同步的 google-auth + google-cloud-iam 呼叫會凍結 asyncio event loop,導致 production 中約 25 秒的 INCRBYFLOAT Redis spans) - PR #26441
    • 回填串流隱藏回應成本 - PR #26606

防護欄​

  • CyCraft XecGuard(新)
    • 第一方合作夥伴防護欄。多政策 prompt/response 掃描(prompt injection、有害內容、PII、系統提示詞強制執行、偏見、技能保護),以及透過 /grounding 的 RAG 情境對齊 - PR #26011
  • Noma v2
    • _build_scan_payload 不再會在 post_call / during_call / during_mcp_call 遇到 deepcopy(request_data) 失敗且物件無法序列化(例如 uvloop.Loop)時當機 - PR #26605
  • 透傳
    • 非串流 pass-through 回應上的請求後防護欄(請見 LLM API Endpoints) - PR #26262

支出追蹤、預算與速率限制​

  • 多叢集預算強制執行
    • RedisCache.async_increment 新增 refresh_ttl 可選用功能(供花費計數器使用);get_current_spend 與 SpendCounterReseed.coalesced 會在乾淨的 Redis miss 時略過過時的每叢集記憶體內資料;ResetBudgetJob 會在每次 DB 列重設時一併讓 Redis 計數器失效(金鑰、使用者、團隊、團隊成員、與預算關聯的金鑰) - PR #26829
  • 成本計算統一
    • success_handler 的型別化 + 字典分支現在以相同方式計算成本 - PR #26629
  • 每位成員的空值預算
    • 具有 max_budget=NULL 的每位成員列會改為套用團隊強制執行 - PR #26809
  • Bedrock 1 小時快取寫入定價
    • Claude 4.5 / 4.6 / 4.7 Global + US 項目新增 cache_creation_input_token_cost_above_1hr(原本低估約 60%) - PR #26800
  • gpt-5.5-pro 修正後的定價
  • Bedrock pass-through 串流中斷
    • 當用戶端在串流中途中斷連線時,花費追蹤現在會刷新 - PR #26719

MCP 閘道​

  • 工具前綴
    • 啟用選用的 LITELLM_USE_SHORT_MCP_TOOL_PREFIX 環境變數:將每個工具的前綴從人類可讀的伺服器名稱(github_onprem-get_repo)切換為一個由 server_id(Xy7-get_repo)衍生出的決定性 3 字元 base62 id。讓較長的伺服器名稱仍可維持在某些模型 API 強制的 60 字元工具名稱限制內 - PR #26733
  • OAuth
    • 支援 Azure Entra 探索端點 - PR #26584
    • 請參閱 重要行為變更,了解公開路由偵測、OAuth 根端點可見性、OAuth metadata SSRF 防護欄,以及使用者範圍憑證加密。

效能/負載平衡/可靠性改善​

  • 路由群組(每模型策略)
    • 新的 router_settings.routing_groups schema 會將一個 model_name 清單繫結到其專屬的 routing_strategy 與可選的 routing_strategy_args;未分組的模型會回退到頂層 routing_strategy(隱含的 default 群組,名稱保留)。每個 model_name 最多只能屬於一個群組;重疊時會在初始化時引發 ValueError。可透過 Router.update_settings(routing_groups=[...]) 或 /config/update 在執行期間更新;每個群組的狀態會在更新時重建 - PR #27022
  • 資料庫重新連線
    • Prisma 重新連線不再阻塞 asyncio 事件迴圈。以 SIGTERM → 0.5 秒 sleep → SIGKILL → 全新 Prisma() + connect() 取代 await self.db.disconnect()(其會同步呼叫 subprocess.Popen.wait(),並在正式環境中讓迴圈凍結 30–120 秒以上,導致 K8s 存活探測失敗)。直接重新連線路徑會委派給 recreate_prisma_client - PR #26225
    • call_with_db_reconnect_retry 輔助函式集中處理重新連線並重試一次的模式。恢復 1.83.x 在 PrismaClient.get_generic_data 上遺失的自我修復(問題 #25143),並強化重新連線狀態機 - PR #26756
  • Redis IAM 權杖快取
    • GCP IAM 權杖不再於每次 Redis 連線時重新產生;在正式環境的一段 28.4 秒 trace 中,單次 Redis INCRBYFLOAT 竟耗費 25.6 秒 - PR #26441
  • 設定快取
    • DualCache 設定參數讀取會被快取與批次處理。在 Docker 上端到端測試時,讀取負載從 2.8 q/s 降至 0.7 q/s;改善幅度會隨 pod 數量擴大。注意:設定編輯傳播到其他處所需時間會更長(直到快取失效為止) - PR #26469
  • 記憶體占用
    • 延遲載入的功能路由器 - PR #26534
    • 延遲載入的首頁 + openapi.json 移至 CI - PR #26802
  • 連線層
    • 在 aiohttp 的 TCPConnector 上支援可選的 TCP SO_KEEPALIVE - PR #26730
  • CLI
    • 供 uvicorn worker 分流的 --timeout_worker_healthcheck 旗標(請參閱管理端點) - PR #26622
  • 測試穩定性
    • 將 test_model_alias_map ERROR 記錄斷言限制在 LiteLLM logger,以便 asyncio 記錄(例如 Unclosed client session)不再間歇性地使斷言失敗 - PR #26741
    • 以靜態原始碼掃描取代延遲載入 subprocess 啟動匯入 diff(約 13 秒,而不是逾兩分鐘後逾時) - PR #26934
    • 在 request-control 強化後,將模型存取 E2E 測試納入 allow_client_mock_response: true - PR #26941
  • 驗證
    • 在憑證輸入時驗證 AWS 區域名稱 - PR #26906
    • 從 MILVUS_OPTIONAL_PARAMS 移除不支援的 dbName 與 partitionNames - PR #26910

一般 Proxy 改善​

  • CI / 工具鏈
    • 支援 CircleCI「重新執行失敗的測試」用於 local_testing_part1 / local_testing_part2 / litellm_router_testing 作業(原本會收集 0 個項目 + exit 123) - PR #26461
    • 更正 min-release-age 檔案中的 .npmrc 值:移除 d 後綴,以避免 npm install 在 npm 11.x 搭配 RangeError: Invalid time value 時當機 - PR #26850
  • Pull request 範本
    • 為內部貢獻者新增 Linear ticket 欄位 - PR #26655

新貢獻者​

  • @xinrui-z 首次貢獻於 #24294
  • @Jerry-SDE 首次貢獻於 #25249
  • @Zerohertz 首次貢獻於 #25888
  • @clyang 首次貢獻於 #26011
  • @mverrilli 首次貢獻於 #26122
  • @tuhinspatra 首次貢獻於 #26262
  • @omriShukrun08 首次貢獻於 #26605
  • @lmcdonald-godaddy 首次貢獻於 #26651
  • @minznerjosh 首次貢獻於 #26710
  • @yassinkortam 首次貢獻於 #26730
  • @sruthi-sixt-26 首次貢獻於 #26814

完整變更紀錄:https://github.com/BerriAI/litellm/compare/v1.83.14-stable...v1.84.0


05/05/2026(v1.84.0-rc.1)​

  • 新模型 / 更新模型:19
  • LLM API 端點:6
  • 管理端點 / UI:22
  • AI 整合(記錄 / 防護欄):3
  • 支出追蹤、預算與速率限制:5
  • MCP 閘道:6
  • 效能 / 負載平衡 / 可靠性改善:14
  • 一般 Proxy 改善:2
  • 文件更新:1

小計:78 個 PR

05/14/2026(v1.84.0,在 rc.1 之上之增量)​

  • 強化:6
  • 預算保留:2
  • 健康探測:3
  • MCP:2
  • SERVER_ROOT_PATH 下的路由:1
  • 標記與指標:2
  • 封裝:2

小計:18 個 PR

總計:96 個 PR