v1.97.0 - 工具結果防護欄、部署親和性與檢視者一致性
部署此版本
- Docker
- Pip
docker run \
-e STORE_MODEL_IN_DB=True \
-p 4000:4000 \
docker.litellm.ai/berriai/litellm:1.97.0
pip install litellm==1.97.0
請求參數檢查現在也適用於路徑與表單輸入,而不僅是請求本文。 透過 URL 路徑提供部署名稱,或透過方括號標記的表單欄位提供中繼資料的請求,現在都會受到與本文相同的目的地檢查,因此先前能通過的呼叫將開始被拒絕。已設定的憑證也會維持在其所屬的端點,因此連線測試不再能借用其他模型的憑證。為了合法覆寫,保留了三個管理員排除規則。請參閱 PR #36011。
自動路由器 deployment_affinity 現在預設為開啟。 其呼叫端會傳送 session id 的自動路由器,將把該 session 固定到所路由模型群組中的一個部署,而不是讓每次互動分散到所有部署。請在自動路由器設定中將 deployment_affinity: false 設為恢復先前行為。請參閱 PR #36146。
主要重點
- 防護欄現在可以只針對工具結果 - 新的每個防護欄
scan_only_tool_results標記會掃描並遮罩工具輸出,而系統、使用者與助理內容則原樣通過,因此代理程式平台可以只對不受信任的工具結果保留注入偵測,而不會讓自己的 harness 提示詞觸發篩選。適用於/v1/messages與/v1/chat/completions - 自動路由器現在會固定到部署,而不只是模型群組 -
deployment_affinity預設為開啟,因此回到模型群組的對話會落到先前使用的部署上,提供者提示快取會保持暖態,而每一輪互動仍會各自依據其本身特性分類。session_affinity表示它,且 session pin 現在依呼叫端的雜湊 API 金鑰進行範圍限制 - 成功與失敗的請求計數改由閘道提供,而不是 spend logs - 由 ASGI request-metrics middleware 寫入的新
LiteLLM_DailyGatewayRequests資料表支撐 Usage 圖塊,因此當 spend logging 關閉或資料庫無法使用時,數字不再掉為零,而且還會附帶一個 SpendLogs 路徑無法產生的按端點明細圖表 - Proxy 管理員檢視者終於可以看到 proxy 了 - 大約十五個原本與
PROXY_ADMIN做完全相等比較的唯讀端點,現在改用包含檢視者的檢查,而 UI 在門控用途上會將檢視者顯示為管理員,同時伺服器仍會拒絕所有寫入 - 金鑰、使用者、團隊與組織可以提取自己的 spend 報告 - 四個新的呼叫端範圍
spend/report端點會自動將非管理員呼叫端套用到其自身身分,對不匹配的範圍覆寫回傳 403,並將日期範圍上限限制為 366 天 - 受管理檔案與批次作業進行正確性全面檢查 - 統一輸出檔案 id 現在會以決定性方式衍生,因此並行註冊會收斂,並會在
GET /batches、未範圍限定的檔案列表,以及取消時回傳;而無法解析的列現在也不再會讓列表當掉 - 管理員可以向儀表板廣播橫幅 -
GET /get/user_banner與PATCH /update/user_banner支援一個可關閉的 Markdown 橫幅,會在每個頁面上呈現,可從 Admin Settings 發布並即時預覽,且會儲存在既有的LiteLLM_UISettings資料表中,無需遷移
新模型 / 更新模型
新模型支援(2 個新模型)
| 提供者 | 模型 | Context Window | Input ($/1M tokens) | Output ($/1M tokens) | 功能 |
|---|---|---|---|---|---|
| Google Gemini | gemini/gemini-robotics-er-2-preview | 131K | $2.00 | $10.00 | Reasoning、vision、audio input、video input、PDF input、function calling、tool choice、prompt caching、response schema、web search、URL context |
| Google Gemini | gemini/gemini-robotics-er-1.6-preview | 131K | $1.00 | $5.00 | Reasoning、vision、audio input、video input、PDF input、function calling、tool choice、prompt caching、response schema、web search、URL context |
除了新增項目外,此版本也將 OpenAI 的 GPT-5.6 降價套用到 Azure 成本對照表:azure/gpt-5.6-terra 從每 1M 的 $2.50 / $15.00 降至 $2.00 / $12.00,而 azure/gpt-5.6-luna 則從每 1M 的 $1.00 / $6.00 降至 $0.20 / $1.20;相同的調降也套用到區域 azure/us/* 與 azure/eu/* 變體,以及所有 cache、flex、priority 與 above-272K 層級。Flex 與 priority 層級金鑰已新增到原本缺少它們的日期版 OpenAI snapshot 變體(gpt-4.1-2025-04-14、gpt-4.1-mini-2025-04-14、gpt-4.1-nano-2025-04-14、gpt-4o-2024-08-06、gpt-4o-2024-11-20、gpt-4o-mini-2024-07-18、gpt-5-nano-2025-08-07、o3-2025-04-16、o4-mini-2025-04-16)。Groq gpt-oss 模型新增每次查詢 $0.005 的 web search context 價格,Bedrock claude-sonnet-5 項目標示為不支援 Converse strict tools,而一個破損的 replicateopenai/gpt-oss-20b 金鑰已修正為 replicate/openai/gpt-oss-20b。未移除任何定價項目。
功能
- Google Gemini
- 將
gemini-robotics-er-2-preview與gemini-robotics-er-1.6-preview新增到模型成本對照表 - PR #35555
- 將
錯誤修正
- Amazon Bedrock
- 在部署憑證中包含 batch 與 S3 欄位以及模型 - PR #24548
- 在 OIDC session policy 中授予
bedrock:CountTokens- PR #33145 - 將 SSE-KMS key 傳遞給 batch input-file S3 上傳 - PR #35148
- 標準化
/v1/completions與/v1/responses的 batch 記錄 - PR #35675 - 停止將無作用的
toolSpec.strict轉送到 Converse - PR #35688 - 當
toolConfig.toolChoice已設定時,移除衝突的tool_choice.type- PR #35738 - 以
S3SigV4Auth簽署受管理檔案的 S3 請求 - PR #35983
- Anthropic
- Google Vertex AI
- 在 batch 建立時顯示真實錯誤與狀態,而不是一個
IndexError500 - PR #35141
- 在 batch 建立時顯示真實錯誤與狀態,而不是一個
- OpenAI
- 將 OpenAI 的
gpt-5.6terra 與 luna 降價套用到 Azure 成本對照表 - PR #35481
- 將 OpenAI 的
- Groq
- 將
web_search_options轉譯到browser_search工具 - PR #34971
- 將
- Replicate
- 修正破損的
gpt-oss-20b模型金鑰 - PR #34800
- 修正破損的
- AI21
- 解析文件中的
AI21_API_KEY,而不是拼錯的名稱 - PR #35985
- 解析文件中的
- Jina AI
- 將文件中的
JINA_API_KEY解析為備援 - PR #35992
- 將文件中的
- 一般
- 以
add_known_models重新建置models_by_provider,讓成本對照表重新載入能觸及萬用字元展開 - PR #36010
- 以
LLM API 端點
功能
- Anthropic
/v1/messages- 在上游靜默期間,於 SSE 串流上送出 keepalive ping - PR #36024
- Cursor
- Claude Code
- 使用
PUT更新路由建立僅可建立的技能註冊 - PR #31752
- 使用
錯誤
- Responses API
- Batches
- 受管理檔案
- 直通
- 網頁搜尋
- 還原原生
web_search_tool_result區塊中的片段文字 - PR #36228
- 還原原生
- 一般
- 將通用的
error完成原因對應為stop- PR #33972
- 將通用的
管理端點 / UI
功能
- 支出報表
- 呼叫者範圍的 key、user、team 與 organization
spend/report端點 - PR #35725
- 呼叫者範圍的 key、user、team 與 organization
- 團隊與使用者
- 儀表板
- 自動路由器畫面
錯誤
- 驗證與角色
- 讓
proxy_admin_viewer在約十五個讀取端點與遮蔽它們的 UI 門控上,與proxy_admin擁有相同的讀取權限 - PR #35851 - 在 body、path 與 form 輸入之間一致地套用請求參數檢查 - PR #36011
- 在 JWT 驗證歸因路徑上傳播
user_email並繫結api_key,並為既有使用者回填空值user_email- PR #34331, PR #34588 - 在 JWT 形狀的金鑰被拒絕時命名
enable_jwt_auth- PR #35831 - 從 OAuth2 企業閘道回傳 403 - PR #35838
- 重新確認直通請求上的已驗證身分 - PR #36121
- 停止在
/search_tools/list上解析 UI 工作階段 sentinel team - PR #36061 - 讓非管理員可存取
/user/daily/activity/aggregated- PR #36062
- 讓
- 金鑰與憑證
- 代理程式與存取群組
- 設定與專案
- 儀表板
- 對非管理員使用者隱藏 guardrail 審核按鈕,並在直接 URL 存取時封鎖 viewer 角色的 Playground 頁面 - PR #27535, PR #35676
- 在 logs drawer 中呈現 Responses API 請求與回應 - PR #35718
- 在開啟 project 時推送
?project=,將 project key 連結到其 virtual key 詳細資料,並將 projects list page index 同步至?page=- PR #36001, PR #36002, PR #36003 - 允許從 Edit Key 表單清除 key 的 budget reset - PR #36140
- 讓 access groups 成為 team 唯一的模型來源,並顯示 hover 來源資訊 - PR #36234
- 在 team fallback 設定中顯示 team BYOK 模型 - PR #36241
- 拒絕留空的 auto-router 關鍵字規則,而不是將其丟棄 - PR #35705
- 將 auto-router 預設模型與萬用字元展開的模型群組進行比對 - PR #36111
- 更正 expired-miss 佔比為涵蓋所有已測量的回合,並修正成本最佳化分頁標籤 - PR #36037
- 更新 Anthropic 模型預設值 - PR #35896
- 在向量儲存設定文案中註明 Google 的 Agent Platform 更名 - PR #28076
- 儀表板內部
AI 整合
記錄
- OpenTelemetry
- Arize Phoenix
- 將 OTLP/gRPC auth metadata key 轉為小寫 - PR #34883
- DataDog
- 從 kwargs 而非被封鎖的動態參數讀取 team callback
dd_*params - PR #35687
- 從 kwargs 而非被封鎖的動態參數讀取 team callback
- Langfuse
- 停止已收集的 httpx handler 關閉共用 client - PR #35981
- s3
- 使用
S3SigV4Auth簽署 S3 object URLs,以便已編碼路徑能通過驗證 - PR #35726
- 使用
- Azure 儲存體
- 在主權雲中遵循
AZURE_STORAGE_ENDPOINT_SUFFIX- PR #35806
- 在主權雲中遵循
- Azure Sentinel
- 一般
防護欄
- 一般
- Bedrock Guardrails
- 將超出大小的
ApplyGuardrail請求分塊處理,而不是失敗 - PR #36119
- 將超出大小的
- Rubrik
- Zscaler AI Guard
- Compresr / Headroom
- 改善
/v1/compressHTTP 404 診斷資訊 - PR #35952
- 改善
支出追蹤、預算與速率限制
- 閘道請求計帳
- 讓 gateway middleware 成為成功請求的唯一事實來源,並新增按端點細分 - PR #35717
- 報表
- 自動路由器節省
- 預算
- 成本追蹤
- 從記錄讀取請求成本,而不是重新計價 - PR #35736
- 以 cache read rate 計費
gpt-5.6prompt cache reads,並在 usage reassembly 過程中保留 OpenAI prompt cache token 細節 - PR #34957, PR #34812 - 以 service tier output rate 計費 reasoning tokens,並將 flex 與 priority tier keys 同步至附日期的 OpenAI snapshot variants - PR #35925, PR #35923
- 將攔截到的 web 搜尋計費給呼叫的 key - PR #35708
- 停止對 file content calls 的 placeholder input 進行 token 計價 - PR #35140
- 追蹤未歸因至任何 key 或 user 的 managed batches 成本 - PR #35468
- 透過
CheckResponsesCost中的路由器擷取背景回應 - PR #35137
效能 / 負載平衡 / 可靠性改善
- 路由器與自動路由器
- 自動路由器的獨立、預設啟用的
deployment_affinity- PR #36146 - 允許營運人員替換 LLM 分類器的系統提示詞並重新命名四個複雜度層級 - PR #35855, PR #35893
- 預設關閉工作階段親和性,並在 UI 中公開 - PR #35714
- 讓提醒標記配對可設定,並接受任何測試框架輸出的配對 - PR #35874, PR #36029
- 比對 regex 單字邊界會漏掉的 CJK
keyword_tier_rules- PR #35984 - 防止 embedding 模型的上下文視窗讓長請求失敗 - PR #35956
- 限制備援遍歷的工作量與錯誤記錄量 - PR #36148
- 在呼叫端遮罩備援 traceback,並涵蓋同步延遲串流 - PR #35843
- 預先擷取 Vertex AI 延遲串流,讓 HTTP 錯誤在
_acompletion備援路徑中浮現 - PR #34627 - 在價格資料重新載入期間保留自訂
model_info- PR #35491
- 自動路由器的獨立、預設啟用的
- 連線與快取
- 吞吐量
- 資料庫與啟動
- 遷移與映像
- 依賴項與維護
文件更新
- 文件化
/key/info欄位,並澄清budget_reset_at是下一次重設 - PR #36127 - 將 classic Helm chart 的 128Mi 資源範例替換為文件中記載的 4Gi 規模 - PR #35830
- 在 PR template 中新增包含撰寫說明的 User Flow 區段 - PR #36162
- 將所有 GitHub comments 上限設為 15-25 個字,並在 contributor guide 中抑制分號拼接句 - PR #36059
- 在以逗號取代破折號時偏好逗號而非分號,並澄清準則優先順序 - PR #35825, PR #36296
依擁有權領域彙總 PR
依擁有權領域的 PR(總計:253)
- 其他(CI / chore / tests / build / version bumps):86
- 效能:30
- UI:28
- LLM API 端點:21
- 驗證與管理:20
- 支出 / 預算 / 速率限制:20
- 模型與提供者:17
- 記錄:15
- 防護欄:10
- 文件:6
端到端測試
我們正大力投資端到端測試,以減少回歸並讓 LiteLLM 隨著每次發版都更穩定。每個版本都由一個即時測試套件進行驗證,該套件會對真實已部署的 proxy 執行,並呼叫真實的提供者端點,而非 mock,因此我們驗證的行為就是您在 production 中得到的行為。
這個時段新增了 18 個僅測試用途的 PR,其中 11 個涉及即時 e2e 套件。新增與修補的涵蓋範圍落在 legacy text /completions 端點、control-plane 寫入在每個 replica 上都已穩定完成而不只是單一個、provider 暫時性狀態在 transport 層以有界退避重試,以及 UI 套件在 global setup 中自行播種自己的密碼登入用戶。負載與效能測試已自主套件中移出,因此較慢的 lane 不再卡住正確性,而中途新增的 vendor API strategy 涵蓋範圍在證實不穩定後已回退。以 view 為基礎的 global spend 探測則因 LIT-5211 而暫時保留,不再處於偶發失敗狀態。
新貢獻者
- @hMED22 在 PR #34971 完成他們的第一次貢獻
- @AkashNaickar 在 PR #34800 完成他們的第一次貢獻
- @Souravrajvi0 在 PR #34092 完成他們的第一次貢獻
- @rimysore 在 PR #35367 完成他們的第一次貢獻
- @elinacse 在 PR #35468 完成他們的第一次貢獻
- @aayush598 在 PR #35952 完成他們的第一次貢獻
完整變更記錄
https://github.com/BerriAI/litellm/compare/v1.96.0...v1.97.0