mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-08 03:08:45 +00:00
docs working test error display
This commit is contained in:
parent
c84717c9e0
commit
95c25ccb78
2 changed files with 102 additions and 0 deletions
|
|
@ -0,0 +1,56 @@
|
|||
import React from 'react';
|
||||
import { Typography, Space, Button, Divider } from 'antd';
|
||||
import { WarningOutlined, InfoCircleOutlined } from '@ant-design/icons';
|
||||
import { ErrorViewer } from '../view_logs/ErrorViewer';
|
||||
|
||||
const { Text } = Typography;
|
||||
|
||||
interface ConnectionErrorDisplayProps {
|
||||
error: Error | string;
|
||||
modelName?: string;
|
||||
onClose?: () => void;
|
||||
}
|
||||
|
||||
const ConnectionErrorDisplay: React.FC<ConnectionErrorDisplayProps> = ({
|
||||
error,
|
||||
modelName = "this model",
|
||||
onClose
|
||||
}) => {
|
||||
const errorMessage = typeof error === 'string' ? error : error.message;
|
||||
|
||||
// Create an error info object compatible with ErrorViewer
|
||||
const errorInfo = {
|
||||
error_message: errorMessage.split('\n')[0],
|
||||
traceback: errorMessage,
|
||||
// We don't have these fields from the connection test error, but the component handles undefined
|
||||
error_class: undefined,
|
||||
llm_provider: undefined,
|
||||
error_code: undefined
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
<div style={{ padding: '16px 24px' }}>
|
||||
|
||||
|
||||
{/* Use the ErrorViewer component for consistent error display */}
|
||||
<ErrorViewer errorInfo={errorInfo} />
|
||||
|
||||
<Divider style={{ margin: '16px 0' }} />
|
||||
|
||||
<div style={{ display: 'flex', justifyContent: 'flex-start' }}>
|
||||
<Button
|
||||
type="link"
|
||||
href="https://docs.litellm.ai/docs/providers"
|
||||
target="_blank"
|
||||
icon={<InfoCircleOutlined />}
|
||||
>
|
||||
View Documentation
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
export default ConnectionErrorDisplay;
|
||||
|
|
@ -2274,6 +2274,52 @@ export const keyInfoCall = async (accessToken: String, keys: String[]) => {
|
|||
};
|
||||
|
||||
|
||||
export const testConnectionRequest = async (
|
||||
accessToken: string,
|
||||
requestBody: Record<string, any>
|
||||
) => {
|
||||
try {
|
||||
console.log("Sending model connection test request:", JSON.stringify(requestBody));
|
||||
|
||||
// Construct the URL based on environment
|
||||
const url = proxyBaseUrl ? `${proxyBaseUrl}/health/test_connection` : `/health/test_connection`;
|
||||
|
||||
const response = await fetch(url, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
[globalLitellmHeaderName]: `Bearer ${accessToken}`
|
||||
},
|
||||
body: JSON.stringify(requestBody)
|
||||
});
|
||||
|
||||
// Check for non-JSON responses first
|
||||
const contentType = response.headers.get('content-type');
|
||||
if (!contentType || !contentType.includes('application/json')) {
|
||||
const text = await response.text();
|
||||
console.error("Received non-JSON response:", text);
|
||||
throw new Error(`Received non-JSON response (${response.status}: ${response.statusText}). Check network tab for details.`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (!response.ok || data.status === "error") {
|
||||
// Handle the specific error format you're receiving
|
||||
if (data.status === "error" && data.result && data.result.error) {
|
||||
throw new Error(data.result.error);
|
||||
} else {
|
||||
throw new Error(data.error?.message || `Connection test failed: ${response.status} ${response.statusText}`);
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.error("Model connection test error:", error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
// ... existing code ...
|
||||
export const keyInfoV1Call = async (accessToken: string, key: string) => {
|
||||
try {
|
||||
let url = proxyBaseUrl ? `${proxyBaseUrl}/key/info` : `/key/info`;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue