, "selection">) {
const { selection } = useOpenTraceRouting();
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/TraceConversation.tsx b/ui/litellm-dashboard/src/components/lens/traces/detail/TraceConversation.tsx
similarity index 97%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/TraceConversation.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/detail/TraceConversation.tsx
index 6d41be9a262..d8dc950767e 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/TraceConversation.tsx
+++ b/ui/litellm-dashboard/src/components/lens/traces/detail/TraceConversation.tsx
@@ -4,14 +4,14 @@ import { useQueries } from "@tanstack/react-query";
import { useState } from "react";
import { ChevronRight, Wrench } from "lucide-react";
import { cn } from "@/lib/cva.config";
-import { CopyButton } from "./CopyButton";
-import { useTracesApi } from "./tracesApi";
+import { CopyButton } from "../ui/CopyButton";
+import { useTracesApi } from "../api";
import { Button } from "@/components/ui/button";
import { buildConversation, conversationSteps, CONVERSATION_PAGE_SIZE, type ConversationItem } from "./conversation";
import { ErrorBlock } from "./DetailContent";
import { Markdown, ToolCallBlock } from "./MessageCard";
-import type { SpanDetail, Trace, TraceMessage } from "./traceTypes";
-import { fmtMs } from "./traceUtils";
+import type { SpanDetail, Trace, TraceMessage } from "../types";
+import { fmtMs } from "../utils";
export function TraceConversation({
trace,
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/TraceDrawer.test.tsx b/ui/litellm-dashboard/src/components/lens/traces/detail/TraceDrawer.test.tsx
similarity index 97%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/TraceDrawer.test.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/detail/TraceDrawer.test.tsx
index 0eb9889f2d8..c2cc01353e2 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/TraceDrawer.test.tsx
+++ b/ui/litellm-dashboard/src/components/lens/traces/detail/TraceDrawer.test.tsx
@@ -3,19 +3,19 @@ import { focusManager, onlineManager } from "@tanstack/react-query";
import userEvent from "@testing-library/user-event";
import { beforeEach, describe, expect, it, vi } from "vitest";
-import { renderWithProviders, testQueryClient } from "../../../../tests/test-utils";
-import researchTrace from "./__fixtures__/research_trace.json";
-import swarmTrace from "./__fixtures__/swarm_trace.json";
+import { renderWithProviders, testQueryClient } from "../../../../../tests/test-utils";
+import researchTrace from "../__fixtures__/research_trace.json";
+import swarmTrace from "../__fixtures__/swarm_trace.json";
import type { ComponentProps } from "react";
import { ShortcutHints } from "@/components/shared/ShortcutHints";
import { initialRunSelection, RunView } from "./TraceDrawer";
-import { useOpenTraceRouting } from "./traceRouting";
-import { agentHandoffText } from "./tracesApi";
-import type { Span } from "./traceTypes";
-import type { Trace } from "./traceTypes";
-import { traceDisplayName } from "./traceUtils";
+import { useOpenTraceRouting } from "../routing";
+import { agentHandoffText } from "../api";
+import type { Span } from "../types";
+import type { Trace } from "../types";
+import { traceDisplayName } from "../utils";
-vi.mock("../../networking", () => ({
+vi.mock("../../../networking", () => ({
agentTraceCall: vi.fn(),
agentTraceSpanCall: vi.fn(),
getProxyBaseUrl: () => "http://proxy.test/",
@@ -36,7 +36,7 @@ vi.mock("@/utils/dataUtils", () => ({ copyToClipboard: vi.fn().mockResolvedValue
import { copyToClipboard } from "@/utils/dataUtils";
-import { agentTraceCall } from "../../networking";
+import { agentTraceCall } from "../../../networking";
const swarm = swarmTrace as Trace;
const research = researchTrace as Trace;
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/TraceDrawer.tsx b/ui/litellm-dashboard/src/components/lens/traces/detail/TraceDrawer.tsx
similarity index 97%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/TraceDrawer.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/detail/TraceDrawer.tsx
index e93fe5dc9c0..4047218177d 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/TraceDrawer.tsx
+++ b/ui/litellm-dashboard/src/components/lens/traces/detail/TraceDrawer.tsx
@@ -1,5 +1,5 @@
"use client";
-import { type TraceHandoff, useTracesApi } from "./tracesApi";
+import { type TraceHandoff, useTracesApi } from "../api";
import { QueryErrorResetBoundary, useQueryClient, useSuspenseInfiniteQuery } from "@tanstack/react-query";
import { ArrowLeft, Check, Copy } from "lucide-react";
@@ -15,15 +15,15 @@ import { cn } from "@/lib/cva.config";
import { copyToClipboard } from "@/utils/dataUtils";
import { DetailPane } from "./DetailPane";
-import { IdChip } from "./IdChip";
-import { formatCost } from "./AgentTracesTable";
-import { SpanIcon } from "./SpanIcon";
+import { IdChip } from "../ui/IdChip";
+import { formatCost } from "../list/AgentTracesTable";
+import { SpanIcon } from "../ui/SpanIcon";
import { SpanTree } from "./SpanTree";
import { TraceConversation } from "./TraceConversation";
-import { FrameworkLogo, traceFramework } from "./TraceFramework";
-import { type RunSelection, traceKey } from "./traceRouting";
-import type { SpanTreeState, TreeRow } from "./traceTree";
-import type { Trace } from "./traceTypes";
+import { FrameworkLogo, traceFramework } from "../ui/TraceFramework";
+import { type RunSelection, traceKey } from "../routing";
+import type { SpanTreeState, TreeRow } from "../tree";
+import type { Trace } from "../types";
import {
buildTreeRows,
firstErrorSpan,
@@ -36,7 +36,7 @@ import {
revealSpanInState,
traceAgentNames,
traceDisplayName,
-} from "./traceUtils";
+} from "../utils";
const INITIAL_STATE: SpanTreeState = {
hideFramework: true,
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/conversation.test.ts b/ui/litellm-dashboard/src/components/lens/traces/detail/conversation.test.ts
similarity index 98%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/conversation.test.ts
rename to ui/litellm-dashboard/src/components/lens/traces/detail/conversation.test.ts
index 055cdf28288..729fdaffaf4 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/conversation.test.ts
+++ b/ui/litellm-dashboard/src/components/lens/traces/detail/conversation.test.ts
@@ -1,7 +1,7 @@
import { describe, expect, it } from "vitest";
import { buildConversation, conversationSteps, newConversationMessages } from "./conversation";
-import type { Span, SpanDetail, TraceMessage } from "./traceTypes";
-import research from "./__fixtures__/research_trace.json";
+import type { Span, SpanDetail, TraceMessage } from "../types";
+import research from "../__fixtures__/research_trace.json";
const root = { ...research.spans[0], span_id: "root", parent_span_id: null, type: "agent" } as Span;
const user: TraceMessage = { role: "user", content: "Find my order" };
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/conversation.ts b/ui/litellm-dashboard/src/components/lens/traces/detail/conversation.ts
similarity index 99%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/conversation.ts
rename to ui/litellm-dashboard/src/components/lens/traces/detail/conversation.ts
index 9631bc4a12b..af80191f698 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/conversation.ts
+++ b/ui/litellm-dashboard/src/components/lens/traces/detail/conversation.ts
@@ -1,5 +1,5 @@
-import type { Span, SpanDetail, TraceMessage, TraceToolCall, UIContent } from "./traceTypes";
-import { isFrameworkSpan, parseJson, parseMessages, prettyPayload } from "./traceUtils";
+import type { Span, SpanDetail, TraceMessage, TraceToolCall, UIContent } from "../types";
+import { isFrameworkSpan, parseJson, parseMessages, prettyPayload } from "../utils";
export const CONVERSATION_PAGE_SIZE = 20;
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/useSpanRequestLog.ts b/ui/litellm-dashboard/src/components/lens/traces/detail/useSpanRequestLog.ts
similarity index 93%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/useSpanRequestLog.ts
rename to ui/litellm-dashboard/src/components/lens/traces/detail/useSpanRequestLog.ts
index 083dceac790..c654ca55793 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/useSpanRequestLog.ts
+++ b/ui/litellm-dashboard/src/components/lens/traces/detail/useSpanRequestLog.ts
@@ -3,8 +3,8 @@
import { useQuery, type UseQueryOptions } from "@tanstack/react-query";
import moment from "moment";
-import { uiSpendLogsCall } from "../../networking";
-import type { LogEntry } from "../columns";
+import { uiSpendLogsCall } from "../../../networking";
+import type { LogEntry } from "../../../view_logs/columns";
/** Spend-log timestamps are written when the call finishes, so pad the span start on both sides. */
const LOOKUP_PAD_MINUTES = 30;
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/AgentTracesPage.tsx b/ui/litellm-dashboard/src/components/lens/traces/list/AgentTracesPage.tsx
similarity index 93%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/AgentTracesPage.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/list/AgentTracesPage.tsx
index 8d8e78866d1..dfc4b770994 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/AgentTracesPage.tsx
+++ b/ui/litellm-dashboard/src/components/lens/traces/list/AgentTracesPage.tsx
@@ -4,8 +4,8 @@ import moment from "moment";
import { useMemo, useState } from "react";
import { AgentTracesSection } from "./AgentTracesSection";
-import { useTracesLive } from "./tracesApi";
-import { useRangeHoursRouting } from "./traceRouting";
+import { useTracesLive } from "../api";
+import { useRangeHoursRouting } from "../routing";
const TIME_FORMAT = "YYYY-MM-DDTHH:mm:ss";
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/AgentTracesSection.integration.test.tsx b/ui/litellm-dashboard/src/components/lens/traces/list/AgentTracesSection.integration.test.tsx
similarity index 98%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/AgentTracesSection.integration.test.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/list/AgentTracesSection.integration.test.tsx
index bf68f31f0cb..be295533651 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/AgentTracesSection.integration.test.tsx
+++ b/ui/litellm-dashboard/src/components/lens/traces/list/AgentTracesSection.integration.test.tsx
@@ -5,15 +5,15 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { ApiError } from "@/lib/http/client";
-import { renderWithProviders, testQueryClient } from "../../../../tests/test-utils";
-import traceList from "./__fixtures__/trace_list.json";
-import { LensPreviewContext } from "./LensPreviewButton";
+import { renderWithProviders, testQueryClient } from "../../../../../tests/test-utils";
+import traceList from "../__fixtures__/trace_list.json";
+import { LensPreviewContext } from "../../ui/LensPreviewButton";
import AgentTracesPage from "./AgentTracesPage";
import { filterRuns } from "./runSearch/runQuery";
import { AgentTracesSection, type TimeControls } from "./AgentTracesSection";
-import type { TracePage, TraceSummary } from "./traceTypes";
+import type { TracePage, TraceSummary } from "../types";
-vi.mock("../../networking", () => ({
+vi.mock("../../../networking", () => ({
apiClient: { get: vi.fn(), post: vi.fn() },
agentTraceListCall: vi.fn(),
sendOtlpTraceCall: vi.fn(),
@@ -22,7 +22,7 @@ vi.mock("../../networking", () => ({
getProxyBaseUrl: () => "http://localhost:4000",
}));
-vi.mock("./TraceDrawer", () => ({
+vi.mock("../detail/TraceDrawer", () => ({
RunView: ({ traceId, onBack }: { traceId: string; onBack: () => void }) => (
run {traceId}
@@ -31,7 +31,7 @@ vi.mock("./TraceDrawer", () => ({
),
}));
-import { agentTraceListCall, apiClient } from "../../networking";
+import { agentTraceListCall, apiClient } from "../../../networking";
const runs = (traceList as TracePage).data as TraceSummary[];
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/AgentTracesSection.tsx b/ui/litellm-dashboard/src/components/lens/traces/list/AgentTracesSection.tsx
similarity index 97%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/AgentTracesSection.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/list/AgentTracesSection.tsx
index 7d04a709825..04fce64b551 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/AgentTracesSection.tsx
+++ b/ui/litellm-dashboard/src/components/lens/traces/list/AgentTracesSection.tsx
@@ -16,13 +16,13 @@ import {
useOpenTraceRouting,
useRunFilterRouting,
useZoomRouting,
-} from "./traceRouting";
-import type { TraceSummary } from "./traceTypes";
-import { RunView } from "./TraceDrawer";
+} from "../routing";
+import type { TraceSummary } from "../types";
+import { RunView } from "../detail/TraceDrawer";
import { TimeRangeControls } from "./TimeRangeControls";
import { TracesTimeline, type TimeWindow } from "./TracesTimeline";
-import { TracingSetupCard } from "./TracingSetupCard";
-import { useTracesLive } from "./tracesApi";
+import { TracingSetupCard } from "../../onboarding/tracing/TracingSetupCard";
+import { useTracesLive } from "../api";
import { type AgentTracesResult, traceWindowStartMs, useAgentTraces, useTraceAvailability } from "./useAgentTraces";
const DRAWER_WIDTH_KEY = "litellm.agentTraces.drawerWidth";
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/AgentTracesTable.test.tsx b/ui/litellm-dashboard/src/components/lens/traces/list/AgentTracesTable.test.tsx
similarity index 91%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/AgentTracesTable.test.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/list/AgentTracesTable.test.tsx
index b03cd8a07dd..dff968334f7 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/AgentTracesTable.test.tsx
+++ b/ui/litellm-dashboard/src/components/lens/traces/list/AgentTracesTable.test.tsx
@@ -1,12 +1,12 @@
import { fireEvent, render, screen } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
-import { renderWithProviders } from "../../../../tests/test-utils";
+import { renderWithProviders } from "../../../../../tests/test-utils";
import { Inspector } from "@/components/shared/Inspector";
-import traceList from "./__fixtures__/trace_list.json";
+import traceList from "../__fixtures__/trace_list.json";
import { AgentTracesTable } from "./AgentTracesTable";
-import { traceKey } from "./traceRouting";
-import type { TracePage, TraceSummary } from "./traceTypes";
+import { traceKey } from "../routing";
+import type { TracePage, TraceSummary } from "../types";
const inList = (table: React.ReactElement) => (
): TraceSummary => ({
agent_count: 1,
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/runSearch/runQuery.test.ts b/ui/litellm-dashboard/src/components/lens/traces/list/runSearch/runQuery.test.ts
similarity index 100%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/runSearch/runQuery.test.ts
rename to ui/litellm-dashboard/src/components/lens/traces/list/runSearch/runQuery.test.ts
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/runSearch/runQuery.ts b/ui/litellm-dashboard/src/components/lens/traces/list/runSearch/runQuery.ts
similarity index 93%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/runSearch/runQuery.ts
rename to ui/litellm-dashboard/src/components/lens/traces/list/runSearch/runQuery.ts
index 08adfa98656..3a69345797c 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/runSearch/runQuery.ts
+++ b/ui/litellm-dashboard/src/components/lens/traces/list/runSearch/runQuery.ts
@@ -1,7 +1,7 @@
import { Bot, Box, Braces, CircleDashed, Hash, SquareChevronRight } from "lucide-react";
-import type { TraceSummary } from "../traceTypes";
-import { previewText, traceAgentNames } from "../traceUtils";
+import type { TraceSummary } from "../../types";
+import { previewText, traceAgentNames } from "../../utils";
import { type ClientIndex, filterItems } from "@/components/shared/search/evaluate";
import type { FieldSpec, QueryLanguage } from "@/components/shared/search/language";
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/runSearch/runSql.test.ts b/ui/litellm-dashboard/src/components/lens/traces/list/runSearch/runSql.test.ts
similarity index 100%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/runSearch/runSql.test.ts
rename to ui/litellm-dashboard/src/components/lens/traces/list/runSearch/runSql.test.ts
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/runSearch/runSql.ts b/ui/litellm-dashboard/src/components/lens/traces/list/runSearch/runSql.ts
similarity index 100%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/runSearch/runSql.ts
rename to ui/litellm-dashboard/src/components/lens/traces/list/runSearch/runSql.ts
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/useAgentTraces.test.ts b/ui/litellm-dashboard/src/components/lens/traces/list/useAgentTraces.test.ts
similarity index 95%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/useAgentTraces.test.ts
rename to ui/litellm-dashboard/src/components/lens/traces/list/useAgentTraces.test.ts
index cbced08785f..039ef950768 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/useAgentTraces.test.ts
+++ b/ui/litellm-dashboard/src/components/lens/traces/list/useAgentTraces.test.ts
@@ -1,7 +1,7 @@
import { describe, expect, it } from "vitest";
import { traceWindowStartMs } from "./useAgentTraces";
-import { spanLogWindow } from "./useSpanRequestLog";
+import { spanLogWindow } from "../detail/useSpanRequestLog";
const HOUR = 3600 * 1000;
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/useAgentTraces.ts b/ui/litellm-dashboard/src/components/lens/traces/list/useAgentTraces.ts
similarity index 95%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/useAgentTraces.ts
rename to ui/litellm-dashboard/src/components/lens/traces/list/useAgentTraces.ts
index 82d190a21ff..d82f224ef58 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/useAgentTraces.ts
+++ b/ui/litellm-dashboard/src/components/lens/traces/list/useAgentTraces.ts
@@ -1,13 +1,14 @@
-import { useTracesApi } from "./tracesApi";
+import { useTracesApi } from "../api";
import { useInfiniteQuery, useQuery, type UseQueryOptions } from "@tanstack/react-query";
import moment from "moment";
import { useMemo } from "react";
import { ApiError } from "@/lib/http/client";
-import { LIVE_TAIL_INTERVAL_MS } from "../log_filter_logic";
-import type { TracePage, TraceSummary } from "./traceTypes";
-import type { TraceWindow } from "./tracesApi";
+import type { TracePage, TraceSummary } from "../types";
+import type { TraceWindow } from "../api";
+
+const LIVE_TAIL_INTERVAL_MS = 15000;
interface LoadedTracePage extends TracePage {
window: TraceWindow;
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/traceRouting.ts b/ui/litellm-dashboard/src/components/lens/traces/routing.ts
similarity index 97%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/traceRouting.ts
rename to ui/litellm-dashboard/src/components/lens/traces/routing.ts
index 17551ab4110..744be6bba2b 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/traceRouting.ts
+++ b/ui/litellm-dashboard/src/components/lens/traces/routing.ts
@@ -9,9 +9,9 @@ import {
} from "nuqs";
import { useCallback, useState } from "react";
-import { RANGE_PRESETS } from "./TimeRangeControls";
-import type { TimeWindow } from "./TracesTimeline";
-import type { TraceSummary } from "./traceTypes";
+import { RANGE_PRESETS } from "./list/TimeRangeControls";
+import type { TimeWindow } from "./list/TracesTimeline";
+import type { TraceSummary } from "./types";
export const TRACE_VIEWS = ["steps", "conversation"] as const;
export type TraceView = (typeof TRACE_VIEWS)[number];
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/traceTree.ts b/ui/litellm-dashboard/src/components/lens/traces/tree.ts
similarity index 86%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/traceTree.ts
rename to ui/litellm-dashboard/src/components/lens/traces/tree.ts
index 2f0e66833a4..d18324d75f4 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/traceTree.ts
+++ b/ui/litellm-dashboard/src/components/lens/traces/tree.ts
@@ -1,8 +1,8 @@
/**
* Shared contract for the agent run view (span tree + detail pane).
- * Rows are produced by `buildTreeRows` in traceUtils.ts and rendered by SpanTree / DetailPane.
+ * Rows are produced by `buildTreeRows` in utils.ts and rendered by SpanTree / DetailPane.
*/
-import type { Span, SpanType } from "./traceTypes";
+import type { Span, SpanType } from "./types";
export type ErrorSource = "model" | "tool" | "litellm";
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/traceTypes.ts b/ui/litellm-dashboard/src/components/lens/traces/types.ts
similarity index 100%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/traceTypes.ts
rename to ui/litellm-dashboard/src/components/lens/traces/types.ts
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/ActiveDot.tsx b/ui/litellm-dashboard/src/components/lens/traces/ui/ActiveDot.tsx
similarity index 100%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/ActiveDot.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/ui/ActiveDot.tsx
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/Collapse.tsx b/ui/litellm-dashboard/src/components/lens/traces/ui/Collapse.tsx
similarity index 100%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/Collapse.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/ui/Collapse.tsx
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/CopyButton.tsx b/ui/litellm-dashboard/src/components/lens/traces/ui/CopyButton.tsx
similarity index 100%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/CopyButton.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/ui/CopyButton.tsx
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/IdChip.tsx b/ui/litellm-dashboard/src/components/lens/traces/ui/IdChip.tsx
similarity index 100%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/IdChip.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/ui/IdChip.tsx
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/PaneBar.tsx b/ui/litellm-dashboard/src/components/lens/traces/ui/PaneBar.tsx
similarity index 100%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/PaneBar.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/ui/PaneBar.tsx
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/SpanIcon.tsx b/ui/litellm-dashboard/src/components/lens/traces/ui/SpanIcon.tsx
similarity index 97%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/SpanIcon.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/ui/SpanIcon.tsx
index 569842f8fdc..4374e535802 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/SpanIcon.tsx
+++ b/ui/litellm-dashboard/src/components/lens/traces/ui/SpanIcon.tsx
@@ -18,7 +18,7 @@ import { Logo } from "@/components/molecules/logo/Logo";
import { cn } from "@/lib/cva.config";
import { useSpanProvider } from "./spanProvider";
-import type { SpanType } from "./traceTypes";
+import type { SpanType } from "../types";
const SIZE = {
sm: "size-4 rounded-sm",
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/StatusMark.tsx b/ui/litellm-dashboard/src/components/lens/traces/ui/StatusMark.tsx
similarity index 100%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/StatusMark.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/ui/StatusMark.tsx
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/TraceFramework.test.ts b/ui/litellm-dashboard/src/components/lens/traces/ui/TraceFramework.test.ts
similarity index 100%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/TraceFramework.test.ts
rename to ui/litellm-dashboard/src/components/lens/traces/ui/TraceFramework.test.ts
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/TraceFramework.tsx b/ui/litellm-dashboard/src/components/lens/traces/ui/TraceFramework.tsx
similarity index 68%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/TraceFramework.tsx
rename to ui/litellm-dashboard/src/components/lens/traces/ui/TraceFramework.tsx
index f0bb8437abf..9c0ff2ee274 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/TraceFramework.tsx
+++ b/ui/litellm-dashboard/src/components/lens/traces/ui/TraceFramework.tsx
@@ -1,20 +1,20 @@
-import anthropicLogo from "../../../../public/assets/logos/anthropic.svg";
-import crewaiLogo from "../../../../public/assets/logos/crewai-color.svg";
-import cursorLogo from "../../../../public/assets/logos/cursor.svg";
-import copilotLogo from "../../../../public/assets/logos/github_copilot.svg";
-import googleAdkLogo from "../../../../public/assets/logos/google-adk.png";
-import langchainLogo from "../../../../public/assets/logos/langchain.svg";
-import langgraphLogo from "../../../../public/assets/logos/langgraph-color.svg";
-import llamaIndexLogo from "../../../../public/assets/logos/llamaindex-color.svg";
-import openaiLogo from "../../../../public/assets/logos/openai_small.svg";
-import openaiAgentsLogo from "../../../../public/assets/logos/openai-agents.svg";
-import pydanticAiLogo from "../../../../public/assets/logos/pydantic-ai-color.svg";
-import strandsLogo from "../../../../public/assets/logos/strands.svg";
-import vercelLogo from "../../../../public/assets/logos/vercel.svg";
+import anthropicLogo from "../../../../../public/assets/logos/anthropic.svg";
+import crewaiLogo from "../../../../../public/assets/logos/crewai-color.svg";
+import cursorLogo from "../../../../../public/assets/logos/cursor.svg";
+import copilotLogo from "../../../../../public/assets/logos/github_copilot.svg";
+import googleAdkLogo from "../../../../../public/assets/logos/google-adk.png";
+import langchainLogo from "../../../../../public/assets/logos/langchain.svg";
+import langgraphLogo from "../../../../../public/assets/logos/langgraph-color.svg";
+import llamaIndexLogo from "../../../../../public/assets/logos/llamaindex-color.svg";
+import openaiLogo from "../../../../../public/assets/logos/openai_small.svg";
+import openaiAgentsLogo from "../../../../../public/assets/logos/openai-agents.svg";
+import pydanticAiLogo from "../../../../../public/assets/logos/pydantic-ai-color.svg";
+import strandsLogo from "../../../../../public/assets/logos/strands.svg";
+import vercelLogo from "../../../../../public/assets/logos/vercel.svg";
import { Logo } from "@/components/molecules/logo/Logo";
import { cn } from "@/lib/cva.config";
-import type { TraceSummary } from "./traceTypes";
+import type { TraceSummary } from "../types";
export interface TraceFramework {
readonly id: string;
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/spanProvider.test.ts b/ui/litellm-dashboard/src/components/lens/traces/ui/spanProvider.test.ts
similarity index 100%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/spanProvider.test.ts
rename to ui/litellm-dashboard/src/components/lens/traces/ui/spanProvider.test.ts
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/spanProvider.ts b/ui/litellm-dashboard/src/components/lens/traces/ui/spanProvider.ts
similarity index 97%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/spanProvider.ts
rename to ui/litellm-dashboard/src/components/lens/traces/ui/spanProvider.ts
index 2b74d0c44f4..8e5e595f9e9 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/spanProvider.ts
+++ b/ui/litellm-dashboard/src/components/lens/traces/ui/spanProvider.ts
@@ -1,4 +1,4 @@
-import { useTracesLive } from "./tracesApi";
+import { useTracesLive } from "../api";
import { useModelCostMap } from "@/app/(dashboard)/hooks/models/useModelCostMap";
import { getProviderLogoAndName } from "@/components/provider_info_helpers";
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/traceUtils.test.ts b/ui/litellm-dashboard/src/components/lens/traces/utils.test.ts
similarity index 99%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/traceUtils.test.ts
rename to ui/litellm-dashboard/src/components/lens/traces/utils.test.ts
index c6bf860300c..1bb5f9ec3c1 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/traceUtils.test.ts
+++ b/ui/litellm-dashboard/src/components/lens/traces/utils.test.ts
@@ -3,8 +3,8 @@ import { describe, expect, it } from "vitest";
import deepAgentTrace from "./__fixtures__/deep_agent_trace.json";
import researchTrace from "./__fixtures__/research_trace.json";
import swarmTrace from "./__fixtures__/swarm_trace.json";
-import { type SpanTreeState, type TreeRow } from "./traceTree";
-import type { Span, Trace } from "./traceTypes";
+import { type SpanTreeState, type TreeRow } from "./tree";
+import type { Span, Trace } from "./types";
import {
buildTreeRows,
buildVisibleTree,
@@ -22,7 +22,7 @@ import {
revealSpanInState,
ROOT_KEY,
treeGuides,
-} from "./traceUtils";
+} from "./utils";
const swarm = swarmTrace as Trace;
const research = researchTrace as Trace;
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/traceUtils.ts b/ui/litellm-dashboard/src/components/lens/traces/utils.ts
similarity index 99%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/traceUtils.ts
rename to ui/litellm-dashboard/src/components/lens/traces/utils.ts
index 066d30bceed..a1706d11b9e 100644
--- a/ui/litellm-dashboard/src/components/view_logs/TraceView/traceUtils.ts
+++ b/ui/litellm-dashboard/src/components/lens/traces/utils.ts
@@ -2,8 +2,8 @@
* Pure helpers for the agent trace views. No React in here: everything the span tree
* computes lives here so it can be unit-tested directly.
*/
-import { type ErrorSource, type SpanTreeState, type TreeRow } from "./traceTree";
-import type { Span, TraceMessage, TraceSummary } from "./traceTypes";
+import { type ErrorSource, type SpanTreeState, type TreeRow } from "./tree";
+import type { Span, TraceMessage, TraceSummary } from "./types";
/* ------------------------------------------------------------------ */
/* Formatting */
diff --git a/ui/litellm-dashboard/src/components/view_logs/TraceView/LensPreviewButton.tsx b/ui/litellm-dashboard/src/components/lens/ui/LensPreviewButton.tsx
similarity index 100%
rename from ui/litellm-dashboard/src/components/view_logs/TraceView/LensPreviewButton.tsx
rename to ui/litellm-dashboard/src/components/lens/ui/LensPreviewButton.tsx
diff --git a/ui/litellm-dashboard/src/components/networking.tsx b/ui/litellm-dashboard/src/components/networking.tsx
index 4e606222eae..c297ca72141 100644
--- a/ui/litellm-dashboard/src/components/networking.tsx
+++ b/ui/litellm-dashboard/src/components/networking.tsx
@@ -117,7 +117,7 @@ import type { ComplexityRouterConfigPayload } from "./add_model/build_complexity
import type { AutoRouterPresetsResponse } from "@/lib/autorouter_presets";
import type { VectorStoreIndex } from "@/app/(dashboard)/vector-stores/_components/IndexesTab";
import type { RoutingDecision } from "./view_logs/LogDetailsDrawer/RoutingDecisionCard";
-import type { SpanDetail, SpanErrorPage, Trace, TracePage } from "./view_logs/TraceView/traceTypes";
+import type { SpanDetail, SpanErrorPage, Trace, TracePage } from "./lens/traces/types";
import {
createApiClient,
deriveErrorMessage,
diff --git a/ui/litellm-dashboard/src/lib/http/api.test-d.ts b/ui/litellm-dashboard/src/lib/http/api.test-d.ts
index 7d88865358b..47ef63554dd 100644
--- a/ui/litellm-dashboard/src/lib/http/api.test-d.ts
+++ b/ui/litellm-dashboard/src/lib/http/api.test-d.ts
@@ -1,7 +1,7 @@
import { expectTypeOf, test } from "vitest";
import type { components } from "./schema";
import type { getClaudeCodePluginsList, userListCall } from "@/components/networking";
-import type { TraceMessage, UIMessage } from "@/components/view_logs/TraceView/traceTypes";
+import type { TraceMessage, UIMessage } from "@/components/lens/traces/types";
import type { TagNewRequest, TagUpdateRequest } from "@/components/tag_management/types";
test("API read functions expose the generated response contracts", () => {