From 83d647952a3667a0311a0ee0c5de85f1dd95c541 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 19 May 2025 17:21:02 -0700 Subject: [PATCH] fix edit model alias flow --- .../model_alias_management.tsx | 167 ++++++++++++++---- 1 file changed, 133 insertions(+), 34 deletions(-) diff --git a/ui/litellm-dashboard/src/components/model_dashboard/model_alias_management.tsx b/ui/litellm-dashboard/src/components/model_dashboard/model_alias_management.tsx index d292b5b456d..d5e1a102a39 100644 --- a/ui/litellm-dashboard/src/components/model_dashboard/model_alias_management.tsx +++ b/ui/litellm-dashboard/src/components/model_dashboard/model_alias_management.tsx @@ -22,6 +22,7 @@ import { Space, Empty, Divider, + Modal, } from "antd"; import { PencilIcon, @@ -44,12 +45,14 @@ const ModelAliasManagement: React.FC = ({ onRefresh, }) => { const [modelGroupAliases, setModelGroupAliases] = useState>({}); - const [newAliasName, setNewAliasName] = useState(""); - const [selectedModelForAlias, setSelectedModelForAlias] = useState(""); - const [editingAlias, setEditingAlias] = useState(null); const [isLoading, setIsLoading] = useState(false); const [formLoading, setFormLoading] = useState(false); - const [form] = Form.useForm(); + const [addForm] = Form.useForm(); + const [editForm] = Form.useForm(); + + // Modal state + const [isEditModalVisible, setIsEditModalVisible] = useState(false); + const [editingAlias, setEditingAlias] = useState(null); // Fetch router settings useEffect(() => { @@ -80,8 +83,45 @@ const ModelAliasManagement: React.FC = ({ } }; - // Handle adding or updating a model group alias - const handleSaveModelGroupAlias = async (values: any) => { + // Handle adding a new model group alias + const handleAddModelGroupAlias = async (values: any) => { + const { aliasName, targetModel } = values; + + if (!accessToken || !aliasName || !targetModel) { + message.error("Alias name and model selection are required"); + return; + } + + setFormLoading(true); + try { + const updatedAliases = { ...modelGroupAliases }; + updatedAliases[aliasName] = targetModel; + + await updateRouterSettings(accessToken, { + model_group_alias: updatedAliases + }); + + setModelGroupAliases(updatedAliases); + addForm.resetFields(); + + message.success({ + content: "Model alias created successfully", + key: 'aliasUpdate', + }); + onRefresh(); + } catch (error) { + console.error("Failed to save model group alias:", error); + message.error({ + content: "Failed to create model alias", + key: 'aliasError', + }); + } finally { + setFormLoading(false); + } + }; + + // Handle updating a model group alias + const handleUpdateModelGroupAlias = async (values: any) => { const { aliasName, targetModel } = values; if (!accessToken || !aliasName || !targetModel) { @@ -93,7 +133,7 @@ const ModelAliasManagement: React.FC = ({ try { const updatedAliases = { ...modelGroupAliases }; - // If editing, remove the old alias first + // If alias name changed, remove the old one if (editingAlias && editingAlias !== aliasName) { delete updatedAliases[editingAlias]; } @@ -105,18 +145,17 @@ const ModelAliasManagement: React.FC = ({ }); setModelGroupAliases(updatedAliases); - form.resetFields(); - setEditingAlias(null); + closeEditModal(); message.success({ - content: `Model alias ${editingAlias ? 'updated' : 'created'} successfully`, + content: "Model alias updated successfully", key: 'aliasUpdate', }); onRefresh(); } catch (error) { - console.error("Failed to save model group alias:", error); + console.error("Failed to update model group alias:", error); message.error({ - content: `Failed to ${editingAlias ? 'update' : 'create'} model alias`, + content: "Failed to update model alias", key: 'aliasError', }); } finally { @@ -152,17 +191,20 @@ const ModelAliasManagement: React.FC = ({ } }; - // Handle editing a model group alias - const handleEditModelGroupAlias = (aliasName: string) => { + // Handle opening the edit modal + const openEditModal = (aliasName: string) => { setEditingAlias(aliasName); - form.setFieldsValue({ + editForm.setFieldsValue({ aliasName: aliasName, targetModel: modelGroupAliases[aliasName] || "", }); + setIsEditModalVisible(true); }; - const handleCancelEdit = () => { - form.resetFields(); + // Handle closing the edit modal + const closeEditModal = () => { + editForm.resetFields(); + setIsEditModalVisible(false); setEditingAlias(null); }; @@ -186,10 +228,11 @@ const ModelAliasManagement: React.FC = ({ + {/* Add New Alias Form */}
@@ -237,21 +280,9 @@ const ModelAliasManagement: React.FC = ({ variant="primary" loading={formLoading} > - {editingAlias ? "Update" : "Add Alias"} + Add Alias - - {editingAlias && ( - - - Cancel - - - )} @@ -277,7 +308,7 @@ const ModelAliasManagement: React.FC = ({