From 4fdc866fcb35da7fdda267c0d7cd93fefedf4dc9 Mon Sep 17 00:00:00 2001 From: tanjiro <56165694+NANDINI-star@users.noreply.github.com> Date: Sat, 9 Aug 2025 04:34:16 +0900 Subject: [PATCH] Display Error from Backend on the UI - Notification (#13427) * fix sso logout - add a new login page with sso button * lint fix * lint fix * lint fix * fix tests * fix test * Revert "fix test" This reverts commit 74eb7345710892d5a9d02baec0ef389b98d0dde3. * Reapply "fix test" This reverts commit 72d0b2d4c62f6bb9351a7656ff88efc2ba91aef7. * add host to add modal * close modal after save is clicked. and auto-refresh * show old values in edit modal * send the whole payload on edit * Update settings.tsx * resolve conflict * fix conflict * merge main * first draft of notifications added to settings * add error compatibility by taking errors from the backend - db errors - auth errors * add support for different types of errors * minor * name change * email alerts page notifications modified * remove unused code --- litellm/proxy/_types.py | 1 + .../email_events/email_event_settings.tsx | 13 +- .../src/components/email_settings.tsx | 24 +- .../molecules/notifications_manager.tsx | 318 ++++++++++++++++++ .../src/components/networking.tsx | 3 - .../src/components/settings.tsx | 137 +++++--- 6 files changed, 435 insertions(+), 61 deletions(-) create mode 100644 ui/litellm-dashboard/src/components/molecules/notifications_manager.tsx diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index bb59f2e94b..85e96e22cb 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -2164,6 +2164,7 @@ class AllCallbacks(LiteLLMPydanticObjectBase): litellm_callback_params=[ "LANGFUSE_PUBLIC_KEY", "LANGFUSE_SECRET_KEY", + "LANGFUSE_HOST", ], ) diff --git a/ui/litellm-dashboard/src/components/email_events/email_event_settings.tsx b/ui/litellm-dashboard/src/components/email_events/email_event_settings.tsx index 66172fed3c..95e1adb2b4 100644 --- a/ui/litellm-dashboard/src/components/email_events/email_event_settings.tsx +++ b/ui/litellm-dashboard/src/components/email_events/email_event_settings.tsx @@ -1,6 +1,7 @@ import React, { useState, useEffect } from "react"; import { Card, Text, Grid, Button } from "@tremor/react"; -import { Typography, message, Divider, Spin, Checkbox } from "antd"; +import { Typography, Divider, Spin, Checkbox } from "antd"; +import NotificationsManager from "../molecules/notifications_manager"; import { getEmailEventSettings, updateEmailEventSettings, resetEmailEventSettings } from "../networking"; import { EmailEvent } from "../../types"; import { EmailEventSetting } from "./types"; @@ -31,7 +32,7 @@ const EmailEventSettings: React.FC = ({ setEventSettings(response.settings); } catch (error) { console.error("Failed to fetch email event settings:", error); - message.error("Failed to fetch email event settings"); + NotificationsManager.fromBackend(error); } finally { setLoading(false); } @@ -49,10 +50,10 @@ const EmailEventSettings: React.FC = ({ try { await updateEmailEventSettings(accessToken, { settings: eventSettings }); - message.success("Email event settings updated successfully"); + NotificationsManager.success("Email event settings updated successfully"); } catch (error) { console.error("Failed to update email event settings:", error); - message.error("Failed to update email event settings"); + NotificationsManager.fromBackend(error); } }; @@ -61,12 +62,12 @@ const EmailEventSettings: React.FC = ({ try { await resetEmailEventSettings(accessToken); - message.success("Email event settings reset to defaults"); + NotificationsManager.success("Email event settings reset to defaults"); // Refresh settings after reset fetchEventSettings(); } catch (error) { console.error("Failed to reset email event settings:", error); - message.error("Failed to reset email event settings"); + NotificationsManager.fromBackend(error); } }; diff --git a/ui/litellm-dashboard/src/components/email_settings.tsx b/ui/litellm-dashboard/src/components/email_settings.tsx index 50f7e22591..56219c5a39 100644 --- a/ui/litellm-dashboard/src/components/email_settings.tsx +++ b/ui/litellm-dashboard/src/components/email_settings.tsx @@ -7,7 +7,8 @@ import { TextInput, TableCell, } from "@tremor/react"; -import { Typography, message, Divider } from "antd"; +import { Typography } from "antd"; +import NotificationsManager from "./molecules/notifications_manager"; import { serviceHealthCheck, setCallbacksCall } from "./networking"; import { EmailEventSettings } from "./email_events"; @@ -24,7 +25,7 @@ const EmailSettings: React.FC = ({ premiumUser, alerts, }) => { - const handleSaveEmailSettings = () => { + const handleSaveEmailSettings = async () => { if (!accessToken) { return; } @@ -52,12 +53,11 @@ const EmailSettings: React.FC = ({ environment_variables: updatedVariables, }; try { - setCallbacksCall(accessToken, payload); + await setCallbacksCall(accessToken, payload); + NotificationsManager.success("Email settings updated successfully"); } catch (error) { - message.error("Failed to update alerts: " + error, 20); + NotificationsManager.fromBackend(error); } - - message.success("Email settings updated successfully"); } return ( @@ -191,9 +191,15 @@ const EmailSettings: React.FC = ({ Save Changes