diff --git a/ui/litellm-dashboard/src/components/add_model/ConnectionErrorDisplay.tsx b/ui/litellm-dashboard/src/components/add_model/ConnectionErrorDisplay.tsx index 69f1becdc05..acceb0c08c7 100644 --- a/ui/litellm-dashboard/src/components/add_model/ConnectionErrorDisplay.tsx +++ b/ui/litellm-dashboard/src/components/add_model/ConnectionErrorDisplay.tsx @@ -24,8 +24,11 @@ const ConnectionErrorDisplay: React.FC = ({ const [error, setError] = React.useState(null); const [rawRequest, setRawRequest] = React.useState(null); const [rawResponse, setRawResponse] = React.useState(null); + const [isLoading, setIsLoading] = React.useState(true); + const [isSuccess, setIsSuccess] = React.useState(false); const testModelConnection = async () => { + setIsLoading(true); try { const result = await prepareModelAddRequest(formValues, accessToken, null); if (!result) throw new Error("Failed to prepare model data"); @@ -37,15 +40,20 @@ const ConnectionErrorDisplay: React.FC = ({ if (response.status === "success") { message.success("Connection test successful!"); setError(null); + setIsSuccess(true); } else { const errorMessage = response.result?.error || response.message || "Unknown error"; setError(errorMessage); setRawRequest(requestBody); setRawResponse(response.result?.raw_request_typed_dict); + setIsSuccess(false); } } catch (error) { console.error("Test connection error:", error); setError(error instanceof Error ? error.message : String(error)); + setIsSuccess(false); + } finally { + setIsLoading(false); } }; @@ -81,28 +89,42 @@ ${formattedBody} return (
- - {error && ( -
- {errorMessage} - -
-

Raw Request

-
-              {curlCommand || "No request data"}
-            
- -
+ {isLoading ? ( +
+
Testing connection to {modelName}...
+ {/* You could add a spinner here */}
+ ) : isSuccess ? ( +
+ + Connection to {modelName} successful! + +
+ ) : ( + <> +
+ Connection to {modelName} failed + + {errorMessage} + +
+

Raw Request

+
+                {curlCommand || "No request data"}
+              
+ +
+
+ )}
diff --git a/ui/litellm-dashboard/src/components/add_model/add_model_tab.tsx b/ui/litellm-dashboard/src/components/add_model/add_model_tab.tsx index 0760afd4dd9..66ecc33dc92 100644 --- a/ui/litellm-dashboard/src/components/add_model/add_model_tab.tsx +++ b/ui/litellm-dashboard/src/components/add_model/add_model_tab.tsx @@ -57,13 +57,14 @@ const AddModelTab: React.FC = ({ }) => { // Add state for test mode and connection error const [testMode, setTestMode] = useState("chat"); - const [isTestModalVisible, setIsTestModalVisible] = useState(false); - const [connectionError, setConnectionError] = useState(null); + const [isResultModalVisible, setIsResultModalVisible] = useState(false); + const [isTestingConnection, setIsTestingConnection] = useState(false); - // Show test modal with mode selection - const showTestModal = () => { - setConnectionError(null); - setIsTestModalVisible(true); + // Test connection directly when button is clicked + const handleTestConnection = async () => { + setIsTestingConnection(true); + setIsResultModalVisible(true); + // The actual testing is handled in ConnectionErrorDisplay component }; return ( @@ -135,6 +136,20 @@ const AddModelTab: React.FC = ({ {/* Conditionally Render "Public Model Name" */} + + {/* Select Mode */} + + setTestMode(value)} + options={TEST_MODES} + /> + {/* Credentials */}
@@ -202,7 +217,6 @@ const AddModelTab: React.FC = ({ setShowAdvancedSettings={setShowAdvancedSettings} teams={teams} /> -
@@ -211,7 +225,7 @@ const AddModelTab: React.FC = ({
- +
@@ -219,56 +233,34 @@ const AddModelTab: React.FC = ({ - {/* Test Connection Modal */} + {/* Test Connection Results Modal */} setIsTestModalVisible(false)} + title="Connection Test Results" + open={isResultModalVisible} + onCancel={() => { + setIsResultModalVisible(false); + setIsTestingConnection(false); + }} footer={[ - , - ]} - width={connectionError ? 700 : 520} + width={700} > -
- Select the mode to test this model with: -
- setTestMode(value)} - options={TEST_MODES} + { + setIsResultModalVisible(false); + setIsTestingConnection(false); + }} /> -
- - Different models support different modes. Choose the appropriate mode for your model. - -
- - {/* Render the ConnectionErrorDisplay when there's an error */} - {connectionError && ( -
- Connection Test Failed -
- setIsTestModalVisible(false)} - /> -
-
- )}
);