Skip to content

Commit 06d50b5

Browse files
committed
fixes surrounding selection state on model info update
1 parent 2dc1131 commit 06d50b5

File tree

2 files changed

+38
-34
lines changed

2 files changed

+38
-34
lines changed

ui/litellm-dashboard/src/app/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import SpendLogsTable from "@/components/view_logs"
2222
import ModelHubTable from "@/components/model_hub_table"
2323
import NewUsagePage from "@/components/new_usage"
2424
import APIRef from "@/components/api_ref"
25-
import ChatUI from "@/components/chat_ui"
25+
import ChatUI from "@/components/chat_ui/ChatUI"
2626
import Sidebar from "@/components/leftnav"
2727
import Usage from "@/components/usage"
2828
import CacheDashboard from "@/components/cache_dashboard"

ui/litellm-dashboard/src/components/chat_ui.tsx renamed to ui/litellm-dashboard/src/components/chat_ui/ChatUI.tsx

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -25,34 +25,34 @@ import {
2525
import { v4 as uuidv4 } from 'uuid';
2626

2727
import { message, Select, Spin, Typography, Tooltip, Input, Upload, Modal, Button } from "antd";
28-
import { makeOpenAIChatCompletionRequest } from "./chat_ui/llm_calls/chat_completion";
29-
import { makeOpenAIImageGenerationRequest } from "./chat_ui/llm_calls/image_generation";
30-
import { makeOpenAIImageEditsRequest } from "./chat_ui/llm_calls/image_edits";
31-
import { makeOpenAIResponsesRequest } from "./chat_ui/llm_calls/responses_api";
32-
import { makeAnthropicMessagesRequest } from "./chat_ui/llm_calls/anthropic_messages";
33-
import { fetchAvailableModels, ModelGroup } from "./chat_ui/llm_calls/fetch_models";
34-
import { fetchAvailableMCPTools } from "./chat_ui/llm_calls/fetch_mcp_tools";
35-
import type { MCPTool } from "./chat_ui/llm_calls/fetch_mcp_tools";
36-
import { litellmModeMapping, ModelMode, EndpointType, getEndpointType } from "./chat_ui/mode_endpoint_mapping";
28+
import { makeOpenAIChatCompletionRequest } from "./llm_calls/chat_completion";
29+
import { makeOpenAIImageGenerationRequest } from "./llm_calls/image_generation";
30+
import { makeOpenAIImageEditsRequest } from "./llm_calls/image_edits";
31+
import { makeOpenAIResponsesRequest } from "./llm_calls/responses_api";
32+
import { makeAnthropicMessagesRequest } from "./llm_calls/anthropic_messages";
33+
import { fetchAvailableModels, ModelGroup } from "./llm_calls/fetch_models";
34+
import { fetchAvailableMCPTools } from "./llm_calls/fetch_mcp_tools";
35+
import type { MCPTool } from "./llm_calls/fetch_mcp_tools";
36+
import { litellmModeMapping, ModelMode, EndpointType, getEndpointType } from "./mode_endpoint_mapping";
3737
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
3838
import { coy } from 'react-syntax-highlighter/dist/esm/styles/prism';
39-
import EndpointSelector from "./chat_ui/EndpointSelector";
40-
import TagSelector from "./tag_management/TagSelector";
41-
import VectorStoreSelector from "./vector_store_management/VectorStoreSelector";
42-
import GuardrailSelector from "./guardrails/GuardrailSelector";
43-
import { determineEndpointType } from "./chat_ui/EndpointUtils";
44-
import { generateCodeSnippet } from "./chat_ui/CodeSnippets";
45-
import { MessageType } from "./chat_ui/types";
46-
import ReasoningContent from "./chat_ui/ReasoningContent";
47-
import ResponseMetrics, { TokenUsage } from "./chat_ui/ResponseMetrics";
48-
import ResponsesImageUpload from "./chat_ui/ResponsesImageUpload";
49-
import ResponsesImageRenderer from "./chat_ui/ResponsesImageRenderer";
50-
import { convertImageToBase64, createMultimodalMessage, createDisplayMessage } from "./chat_ui/ResponsesImageUtils";
51-
import ChatImageUpload from "./chat_ui/ChatImageUpload";
52-
import ChatImageRenderer from "./chat_ui/ChatImageRenderer";
53-
import { createChatMultimodalMessage, createChatDisplayMessage } from "./chat_ui/ChatImageUtils";
54-
import SessionManagement from "./chat_ui/SessionManagement";
55-
import MCPEventsDisplay, { MCPEvent } from "./chat_ui/MCPEventsDisplay";
39+
import EndpointSelector from "./EndpointSelector";
40+
import TagSelector from "../tag_management/TagSelector";
41+
import VectorStoreSelector from "../vector_store_management/VectorStoreSelector";
42+
import GuardrailSelector from "../guardrails/GuardrailSelector";
43+
import { determineEndpointType } from "./EndpointUtils";
44+
import { generateCodeSnippet } from "./CodeSnippets";
45+
import { MessageType } from "./types";
46+
import ReasoningContent from "./ReasoningContent";
47+
import ResponseMetrics, { TokenUsage } from "./ResponseMetrics";
48+
import ResponsesImageUpload from "./ResponsesImageUpload";
49+
import ResponsesImageRenderer from "./ResponsesImageRenderer";
50+
import { convertImageToBase64, createMultimodalMessage, createDisplayMessage } from "./ResponsesImageUtils";
51+
import ChatImageUpload from "./ChatImageUpload";
52+
import ChatImageRenderer from "./ChatImageRenderer";
53+
import { createChatMultimodalMessage, createChatDisplayMessage } from "./ChatImageUtils";
54+
import SessionManagement from "./SessionManagement";
55+
import MCPEventsDisplay, { MCPEvent } from "./MCPEventsDisplay";
5656
import {
5757
SendOutlined,
5858
ApiOutlined,
@@ -73,7 +73,7 @@ import {
7373
FilePdfOutlined,
7474
ArrowUpOutlined
7575
} from "@ant-design/icons";
76-
import NotificationsManager from "./molecules/notifications_manager";
76+
import NotificationsManager from "../molecules/notifications_manager";
7777

7878
const { TextArea } = Input;
7979
const { Dragger } = Upload;
@@ -282,13 +282,17 @@ const ChatUI: React.FC<ChatUIProps> = ({
282282
);
283283

284284
console.log("Fetched models:", uniqueModels);
285-
286-
if (uniqueModels.length > 0) {
287-
setModelInfo(uniqueModels);
288-
if (!selectedModel) {
289-
setSelectedModel(uniqueModels[0].model_group);
290-
}
285+
286+
setModelInfo(uniqueModels);
287+
288+
// check for selection overlap or empty model list
289+
const hasSelection = uniqueModels.some(m => m.model_group === selectedModel);
290+
if (!uniqueModels.length) {
291+
setSelectedModel(undefined);
292+
} else if (!hasSelection) {
293+
setSelectedModel(uniqueModels[0].model_group);
291294
}
295+
292296
} catch (error) {
293297
console.error("Error fetching model info:", error);
294298
}

0 commit comments

Comments
 (0)