diff --git a/ui/litellm-dashboard/src/components/view_logs/RequestLogsFilters.test.tsx b/ui/litellm-dashboard/src/components/view_logs/RequestLogsFilters.test.tsx index c2df8d97bc1..76bac891bb6 100644 --- a/ui/litellm-dashboard/src/components/view_logs/RequestLogsFilters.test.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/RequestLogsFilters.test.tsx @@ -215,6 +215,26 @@ describe("RequestLogsFilters", () => { expect(set).toHaveBeenCalledWith(LOG_FILTER_IDS.USER_ID, "u-1"); }); + it("offers a user repeated across page boundaries only once", async () => { + const bob = { user_id: "u-1", user_email: "bob@acme.com", user_alias: null }; + vi.mocked(useInfiniteUsers).mockReturnValue({ + ...emptyInfiniteQuery, + data: { + pages: [ + { users: [bob], page: 1, page_size: 1, total: 2, total_pages: 2 }, + { users: [bob], page: 2, page_size: 1, total: 2, total_pages: 2 }, + ], + pageParams: [1, 2], + }, + } as unknown as ReturnType); + const user = userEvent.setup(); + renderFilters(); + + await user.click(await screen.findByPlaceholderText("Search a user by email")); + + expect(await screen.findAllByText("bob@acme.com")).toHaveLength(1); + }); + it("pushes the Internal User query to the server rather than filtering a preloaded list", async () => { const user = userEvent.setup(); renderFilters(); diff --git a/ui/litellm-dashboard/src/components/view_logs/RequestLogsFilters.tsx b/ui/litellm-dashboard/src/components/view_logs/RequestLogsFilters.tsx index b5d719a853d..4ab7a9b6c3b 100644 --- a/ui/litellm-dashboard/src/components/view_logs/RequestLogsFilters.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/RequestLogsFilters.tsx @@ -204,15 +204,12 @@ function InternalUserFilterField({ ); const options = useMemo(() => { - const seen = new Set(); - return (data?.pages ?? []).flatMap((page) => - page.users.flatMap((user) => { - if (!user.user_id || seen.has(user.user_id)) return []; - seen.add(user.user_id); - const name = user.user_email || user.user_alias || ""; - return [{ label: name || user.user_id, value: user.user_id, sublabel: name === "" ? undefined : user.user_id }]; - }), - ); + const users = (data?.pages ?? []).flatMap((page) => page.users.filter((user) => user.user_id !== "")); + const byId = new Map(users.map((user) => [user.user_id, user] as const)); + return [...byId.values()].map((user) => { + const name = user.user_email || user.user_alias || ""; + return { label: name || user.user_id, value: user.user_id, sublabel: name === "" ? undefined : user.user_id }; + }); }, [data]); return (