mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-06 02:48:13 +00:00
Merge pull request #24745 from BerriAI/litellm_fix-logs-filtering
Fix logs page showing unfiltered results when filter matches zero rows
This commit is contained in:
commit
77ad1ab530
2 changed files with 35 additions and 32 deletions
|
|
@ -9215,7 +9215,7 @@ def _add_team_models_to_all_models(
|
|||
|
||||
for team_object in team_db_objects_typed:
|
||||
if (
|
||||
len(team_object.models) == 0 # empty list = all model access
|
||||
not team_object.models # None or empty list = all model access
|
||||
or SpecialModelNames.all_proxy_models.value in team_object.models
|
||||
):
|
||||
model_list = llm_router.get_model_list()
|
||||
|
|
|
|||
|
|
@ -69,13 +69,7 @@ export function useLogFilterLogic({
|
|||
);
|
||||
|
||||
const [filters, setFilters] = useState<LogFilterState>(defaultFilters);
|
||||
const [backendFilteredLogs, setBackendFilteredLogs] = useState<PaginatedResponse>({
|
||||
data: [],
|
||||
total: 0,
|
||||
page: 1,
|
||||
page_size: 50,
|
||||
total_pages: 0,
|
||||
});
|
||||
const [backendFilteredLogs, setBackendFilteredLogs] = useState<PaginatedResponse | null>(null);
|
||||
const lastSearchTimestamp = useRef(0);
|
||||
const performSearch = useCallback(
|
||||
async (filters: LogFilterState, page = 1) => {
|
||||
|
|
@ -113,11 +107,21 @@ export function useLogFilterLogic({
|
|||
},
|
||||
});
|
||||
|
||||
if (currentTimestamp === lastSearchTimestamp.current && response.data) {
|
||||
setBackendFilteredLogs(response);
|
||||
if (currentTimestamp === lastSearchTimestamp.current) {
|
||||
setBackendFilteredLogs({
|
||||
...response,
|
||||
data: response.data ?? [],
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error searching users:", error);
|
||||
setBackendFilteredLogs({
|
||||
data: [],
|
||||
total: 0,
|
||||
page: 1,
|
||||
page_size: pageSize,
|
||||
total_pages: 0,
|
||||
});
|
||||
}
|
||||
},
|
||||
[accessToken, startTime, endTime, isCustomDate, pageSize, sortBy, sortOrder],
|
||||
|
|
@ -170,7 +174,7 @@ export function useLogFilterLogic({
|
|||
data: [],
|
||||
total: 0,
|
||||
page: 1,
|
||||
page_size: 50,
|
||||
page_size: pageSize,
|
||||
total_pages: 0,
|
||||
};
|
||||
}
|
||||
|
|
@ -227,22 +231,23 @@ export function useLogFilterLogic({
|
|||
// Choose which filtered logs to expose: backend result when active, otherwise client-derived
|
||||
const filteredLogs: PaginatedResponse = useMemo(() => {
|
||||
if (hasBackendFilters) {
|
||||
// Prefer backend result if present; otherwise fall back to latest logs
|
||||
if (backendFilteredLogs && backendFilteredLogs.data) {
|
||||
// When backend filters are active, only show backend results.
|
||||
// If search hasn't completed yet (null), show empty state rather than
|
||||
// falling back to unfiltered logs — that caused filtered views to
|
||||
// display mismatched data when the filter matched zero rows.
|
||||
if (backendFilteredLogs !== null) {
|
||||
return backendFilteredLogs;
|
||||
}
|
||||
return (
|
||||
logs || {
|
||||
data: [],
|
||||
total: 0,
|
||||
page: 1,
|
||||
page_size: 50,
|
||||
total_pages: 0,
|
||||
}
|
||||
);
|
||||
return {
|
||||
data: [],
|
||||
total: 0,
|
||||
page: 1,
|
||||
page_size: pageSize,
|
||||
total_pages: 0,
|
||||
};
|
||||
}
|
||||
return clientDerivedFilteredLogs;
|
||||
}, [hasBackendFilters, backendFilteredLogs, clientDerivedFilteredLogs, logs]);
|
||||
}, [hasBackendFilters, backendFilteredLogs, clientDerivedFilteredLogs]);
|
||||
|
||||
// Fetch all teams and users for potential filter dropdowns (optional, can be adapted)
|
||||
const { data: allTeams } = useQuery<Team[], Error>({
|
||||
|
|
@ -272,6 +277,7 @@ export function useLogFilterLogic({
|
|||
// Only call debouncedSearch if filters have actually changed
|
||||
if (JSON.stringify(updatedFilters) !== JSON.stringify(prev)) {
|
||||
setCurrentPage(1);
|
||||
setBackendFilteredLogs(null);
|
||||
debouncedSearch(updatedFilters, 1);
|
||||
}
|
||||
|
||||
|
|
@ -284,16 +290,13 @@ export function useLogFilterLogic({
|
|||
setFilters(defaultFilters);
|
||||
|
||||
// Clear backend filtered logs to ensure fresh render
|
||||
setBackendFilteredLogs({
|
||||
data: [],
|
||||
total: 0,
|
||||
page: 1,
|
||||
page_size: 50,
|
||||
total_pages: 0,
|
||||
});
|
||||
setBackendFilteredLogs(null);
|
||||
|
||||
// Reset selections
|
||||
debouncedSearch(defaultFilters, 1);
|
||||
// Cancel any in-flight debounced search
|
||||
debouncedSearch.cancel();
|
||||
|
||||
// Reset to first page so the unfiltered view starts at page 1
|
||||
setCurrentPage(1);
|
||||
};
|
||||
|
||||
return {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue