From d635f446839d0348f9d42d2eff491563eb285d62 Mon Sep 17 00:00:00 2001 From: mubashir1osmani Date: Thu, 6 Aug 2026 15:34:13 -0700 Subject: [PATCH] fix(ui): exclude unknown model modes from playground endpoint filters Modes outside ModelMode (batch, rerank, ocr, etc.) must not collapse to chat-compatible, or conversational endpoints surface unusable models --- .../playground/components/chat_ui/EndpointUtils.test.tsx | 8 ++++++++ .../playground/components/chat_ui/EndpointUtils.tsx | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ui/litellm-dashboard/src/app/(dashboard)/playground/components/chat_ui/EndpointUtils.test.tsx b/ui/litellm-dashboard/src/app/(dashboard)/playground/components/chat_ui/EndpointUtils.test.tsx index 8e2a160cacc..8890174eeca 100644 --- a/ui/litellm-dashboard/src/app/(dashboard)/playground/components/chat_ui/EndpointUtils.test.tsx +++ b/ui/litellm-dashboard/src/app/(dashboard)/playground/components/chat_ui/EndpointUtils.test.tsx @@ -246,4 +246,12 @@ describe("isModelCompatibleWithEndpoint / filterModelsForEndpoint", () => { "no-mode", ]); }); + + it("excludes unknown modes from conversational endpoints", () => { + const batchModel: ModelGroup = { model_group: "batch-job", mode: "batch" }; + const rerankModel: ModelGroup = { model_group: "reranker", mode: "rerank" }; + expect(isModelCompatibleWithEndpoint(batchModel, EndpointType.CHAT)).toBe(false); + expect(isModelCompatibleWithEndpoint(rerankModel, EndpointType.RESPONSES)).toBe(false); + expect(isModelCompatibleWithEndpoint(batchModel, EndpointType.REALTIME)).toBe(false); + }); }); diff --git a/ui/litellm-dashboard/src/app/(dashboard)/playground/components/chat_ui/EndpointUtils.tsx b/ui/litellm-dashboard/src/app/(dashboard)/playground/components/chat_ui/EndpointUtils.tsx index 5b1a504be43..8fd4a57dbfd 100644 --- a/ui/litellm-dashboard/src/app/(dashboard)/playground/components/chat_ui/EndpointUtils.tsx +++ b/ui/litellm-dashboard/src/app/(dashboard)/playground/components/chat_ui/EndpointUtils.tsx @@ -1,5 +1,7 @@ import { ModelGroup } from "@/components/llm_calls/fetch_models"; -import { EndpointType, getEndpointType } from "@/components/chat_ui/mode_endpoint_mapping"; +import { EndpointType, getEndpointType, ModelMode } from "@/components/chat_ui/mode_endpoint_mapping"; + +const KNOWN_MODEL_MODES = new Set(Object.values(ModelMode)); export const determineEndpointType = (selectedModel: string, modelInfo: ModelGroup[]): EndpointType => { const selectedModelInfo = modelInfo.find((option) => option.model_group === selectedModel); @@ -16,6 +18,10 @@ export const isModelCompatibleWithEndpoint = (model: ModelGroup, endpointType: E return true; } + if (!KNOWN_MODEL_MODES.has(model.mode)) { + return false; + } + const optionEndpoint = getEndpointType(model.mode); if (